2011-10-24 13 views
4

iOSのバージョンを検出してiCloudをサポートするかどうかを示すプリプロセッサコマンドがあります。私は疑問に思ってすることであるかのようにのようなマクロ:バージョン固有のプリプロセッサマクロ

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 50000 
    //stuff 
#endif 

意志のiOS 4.xの持つ誰かがアプリストアからアプリをダウンロードするが、それはのiOS 5.xのために/上でコンパイルされた場合は、この作業

これはコンパイル時に評価されるため、アプリケーションはデバイスでコンパイルされますか、それはどのように機能しますか?同じ結果のためのより良い方法はありますか?

答えて

7

これにはマクロを使用できません。マクロはコンパイル時に評価され、実行時では評価されません.iCloudサポートのように、機能/機能の検出に必要なマクロです。あなたはちょうどあなたがそれらを呼び出すことができるかどうかを教えてくれユビキタス・メソッドの存在をテストする必要があり

(そうでなければ、それはあなたがは、すべてのケースでのiOS 5 SDKに対してをコンパイルしているので、有効になってしまいます) 、これは例えば、iCloudのがサポートされているかどうかを示します:

if ([[NSFileManager defaultManager] respondsToSelector:@selector(isUbiquitousItemAtURL:)])  
{ 
    // call it and do other iCloud stuff 
} 

クイックフォローノート再:コンパイルについてご質問。コンパイルとは、実際のコードをデバイス上で動作するバイナリに変換するプロセスです。これは、XcodeでBuildを実行したときに起こります。これは、アップルやデバイスで決してあなたのマシンでのみ起こります。このため、バージョン番号のコンパイル時のチェックは機能しません。デバイスに送信するまでには、すでに決定されているはずです。

+0

ありがとうございました。私はよく分からず、多くのデバイスでクラッシュするようなものを提出したくありませんでした。提案されたコードはうまく機能します。 – utahwithak

関連する問題