Hatena::Groupiphone-dev

hirogramの日記 このページをアンテナに追加 RSSフィード

 | 

2009-09-23OS2.2.1のデバイスでも動くけどOS3.0なら専用の機能が動くアプリを作る このエントリーを含むブックマーク このエントリーのブックマークコメント

表題の通り、OS2.2.1のデバイスでも動くけどOS3.0なら専用の機能が動くアプリの作り方です。ADCにサンプルコードがあるのでご存じのかたも多いと思いますが、私は最近知ってありがたかったので、まあ報告します。

OS3.0特有の機能というとメールに画像が添付できたり、コピペが使えたりとかです。他にもあった気がします。OS3.1も出ちゃってるのでいろいろあることでしょう。


やりかたは、ADCのサンプルコード"MailComposer"のReadMe.txtに丁寧に書いてあります。


やるのは割と簡単ですが、注意すべき点を先に挙げておいたほうがいいようです。

  • OS2.2.1のデバイスでOS3.0用の処理を通らないように、ソースを分岐する必要があります。分岐しないとアプリが異常終了します。なお、OS3.0の処理をソースに書いている時点でOS2.2.1のビルドはエラーになります。したがって、コンパイラに頼らず自分でチェックする必要があります。やっかいです。
  • 同様にOS3.0以降のデバイスでOS2.2.1専用の機能(あったっけ?)を通らないように注意する必要があります。こちらはOS3.0でビルドすればわかるはずなので問題ないかと思います。
  • アプリを申請に出すときに、構成を間違えないように注意する必要があります。デバイス3.0とかでビルドしちゃって、リリースされてから気づくなんてことのないように(書いてて自分が心配になってきた)。

このようにソースコードが煩雑になり、ミスも誘発しやすくなりで、開発者にとってはいいことはありません。新しくアプリを作る場合は素直にOS3.1用で作った方がいいです。OS2.2.1でアプリリリースしちゃってて、この後どうしようかという人向けですね。私みたいに。


最後に手順を書きます。MailComposerのReadMe.txtも読みましょう。

これはすべての構成(Distributionも!)に対して行って、3回くらいチェックしてください。

そうすると、XCodeのウィンドウ左上の構成とかを選ぶドロップボックスに「ベースSDKを使用」というのが現れます。これがどっちでも動くよ版です。

f:id:hirogram:20090923220353p:image

  • 3. メールのようにOS3.0独自のフレームワークを使う場合は、フレームワークをプロジェクトに含めた上で、役割(?)をWeakに変更します。リンクの仕方がWeak Linkという奴になるようですね。XCodeのフォルダツリーでターゲットを選ぶと右画面で変更できます。

f:id:hirogram:20090923220355p:image

  • 4. 処理を切り分けます。MailComposerではOS3.0用のクラスが存在するかどうかで切り分けていますね。私はこんな感じで、問い合わせをするメソッドを用意しました。
-(id) init
{
	[super init];
	isOs30 = NO;
	Class pasteClass = (NSClassFromString(@"UIPasteboard"));
	if (pasteClass != nil)
	{ 
		isOs30 = YES;
	}
	
	return self;
}

-(BOOL)isOs30 {
	return isOs30;
}

以上です。MailComposerのReadMe.txtも熟読しましょう。

リジェクトされないか気になるところですが、今申請中なので通ったら報告します。サンプルコードがあるくらいなので大丈夫だと思いますが。。

kimadakimada2009/09/24 20:41なるほど、これが正しいやり方なんですね。このサンプルは見ましたが、ReadMe.txtは、あまり読んでませんでした。。。

私の場合は、とりあえず、NSInvocationで動的に3.0のAPIを呼び出す方法で解決しました。

http://d.hatena.ne.jp/kimada/20090811/1249970669

複雑なことをやる場合には、まったく不向きな方法ですね。ちゃんとReadMe.txtを読むべきでした。。。
バッテリー残量の取得は、2.xで非公開APIを使ったものが出回っていたこともあり、「それを使ってないよね?」というAppleから確認の電話が来ました。そこで事情を説明したところ、その翌日にリリースされました。
なので、2.xでビルドしたアプリから、3.0のAPIを呼び出すこと自体は、問題ないと私は解釈しています。

hirogramさんのアプリも、無事に審査が通ることをお祈りしております!

hirogramhirogram2009/09/24 22:02コメントありがとうございます。
なるほど、動的にやる方法もあるんですね。勉強になります。
動的にやると、OS2.0でビルドしてもビルドが失敗しない(他の部分のエラーチェックができる)のはメリットですね。
iPhoneの場合、どのやり方が正しいというか、リジェクトされなかったものが正しいみたいな感じがありますね。
いろいろなやり方で試してみましょう。

hirogramhirogram2009/10/05 00:55報告すると言って忘れてました。
無事審査通りました!

 |