0

ユニバーサルiPhone/iPadアプリであるアプリを作成しています。iOS 4.0 SDKでアプリの高速切り替え(マルチタスク)をサポートしたい(例:iOS4.0を搭載したiPhone3GSの場合)。ただし、iPhone OS 4.0をターゲットにビルドするようにアプリを設定すると、iPadでは起動しません(現在の最新のソフトウェアバージョンは3.2.1です)。

したがって、SDKのバージョンは、アプリが起動する最小のOSバージョンであるように見えます。

XCode設定の「iPhoneOSDeploymentTarget」フィールドのメモには、「コードはこのバージョン以降のiPhoneOSにロードされます。以前のバージョンでは使用できないFrameworksAPIは弱くリンクされます。コードは、null関数をチェックする必要があります。新しいAPIを呼び出す前のポインタまたは特定のシステムバージョン。」

これは矛盾しているようです。以前のAPIで起動しない場合、nullポインターへの弱いリンクはどのようにできますか?

最終的に知りたいのは、ユニバーサルアプリであり、マルチタスクをサポートするアプリを作成できるか(iPad OSが3.2の場合)?!?

4

1 に答える 1

2

ビルドSKDをiOS4に設定しますが、デプロイメントターゲットをiOS3.2に設定します。(3.x互換のiPhoneアプリを作成することをお勧めしますが、それは別の話です)。このようにしてマルチタスクが有効になりますが、コードは3.2でも実行されると言います。これは、AppleとiPadが信じて実行します。

ただし、コンパイラが警告を表示しなくなるため(4.0に対してビルドされるため)、3.2で特定のメソッドがすでに存在するかどうかを確認する必要があることに注意してください。最も一般的なのは、呼び出しエラー[[UIScreen mainScreen] scale]です。これは3.2では使用できないため、アプリがクラッシュします。これがサポートされているかどうかを最初に確認する必要があります。

CGFloat myScale = 1.f;
if ([UIScreen instancesRespondToSelector:@selector(scale)]) {
    myScale = [[UIScreen mainScreen] scale];
}
于 2010-08-09T12:31:08.373 に答える