0

親愛なる学者たち。最新の SDK (4.2.1) を使用して簡単なアプリケーションを作成しました。このアプリケーションは、iOS 4.xx を搭載したすべてのデバイスでスムーズにエラーなく動作します。

最近、iOS の古いバージョンを使用しているユーザーから、アプリケーションが起動時にクラッシュするというコメントが寄せられていますが、Apple のクラッシュ ログには何も表示されません。調査を進めると、現時点で唯一の疑いがあるのは、メモリが機能する場合、iOS4 の後にのみ導入された EventKit クラスの使用です。

クラスの1つで非常に軽く使用していますが、iOS4.2.1で完全に動作します

#import <EventKit/EventKit.h>

//今度いつか

[self setADateInCal: [MyTimeArray objectAtIndex:0] :formatterDate];   

したがって、私の質問:

  1. これは、iOS < 4 でアプリケーションをクラッシュさせる問題でしょうか?

  2. iOS4の人向けの機能を落とさずに防ぐにはどうすればいいですか

  3. 一般的に、これをテストするにはどうすればよいですか? デバイスと SDK に最新の公式 iOS があります。シミュレーターは、iOS バージョンに再アップグレードする際にどれだけ戻ることができるかに制限されています...そうするための魔法の方法はありますか?

4

2 に答える 2

1

1.) はい。4.0 より前の API に含まれていない場合、4.0 を実行していない人はクラッシュします。

2.) NSClassFromString (例としては Google) と RespondsToSelector を対応して使用して、クラスが使用可能かどうかをテストし、クライアントが実行している OS バージョンで必要なメソッドを使用できるかどうかを確認します。また、おそらく EventKit フレームワークを弱いリンクにする必要があります (これを行う方法については、Google に問い合わせてください)。

3.) これをテストする唯一の現実的な方法は、テストしたい OS でデバイスを維持することです。個人的には、このようなことのために 3.1.3 を実行している古い iPhone を更新することはありません。または、xcode + iOSSDK の古いインストールを別のパーティションなどに保持して、それらのシミュレーターを使用することもできます。(明らかに<4.0でこれを行っていないため、将来の更新については推測します)。しかし、いいえ、これを行う魔法の方法はありません。ごめん。

番号2を明確にするために編集:基本的に、現在実行しているOSバージョンで必要なクラス/メソッドが利用可能かどうかを確認します。利用できる場合は使用できますが、そうでない場合は回避策を見つける必要があります(完全に省略するか、古いバージョンに準拠した別の方法で実行してください)。

于 2011-01-17T21:19:05.163 に答える
0

はい、クラッシュの原因となっている可能性があります。ライブラリが見つからないという問題は、Apple クラッシュ ログに何も報告されません。

それを防ぐには、次の 2 つのことを行う必要があります。

xcode でイベント キット ライブラリを弱リンクします。

のようなものでコード内の存在を確認してください。

   if(!NSClassFromString(@"EKEventKit")){
       //do stuff with event kit
     }

実際の iOS バージョンでテストする唯一の方法は、ios < 4 を実行している物理デバイスを入手することです。

于 2011-01-17T21:35:19.993 に答える