一般的な答え
はい、アプリは iOS5 以前との下位互換性を持たせることができます。ここで重要なのは「できる」ことです。アプリケーションが何をするか、どの API を使用するかなどによっては、非常に時間がかかる場合があります。 (iOS) の初期からあまり変わらずに利用できる API。
明らかに、アプリが iOS6 のみの機能を使用している場合、行き詰まります。それ以外の場合は、はい、できますが、コードを作成/変更するだけでなく、テストするのに時間をかける準備をしてください。
あなたに関する限り、そうです、プロジェクトは「壊れた」ものです。これは、古いバージョンの iOS 用に書かれていないことを意味します。プロジェクト設定を変更するのと同じくらい簡単だったら!
下位互換性のあるアプリを作成するためのいくつかの戦略を次に示します。
API のバリアントが存在し、異なるメソッドが異なる互換性を持つ場合は、最も互換性のあるバリアントを使用します。たとえば、一部のNSFileManager
メソッドは iOS の新しいバージョンに登場しましたが、古いバリエーションは引き続き機能します。Apple は、「ところで、これは古いバージョンの iOS では動作しません」という但し書きなしで、新しいコードを使用するソース コード (IME) を無断で公開する傾向があるため、注意が必要です。
一部の機能を新しい iOS バージョンにのみ表示する場合は、必要なメソッド/API が利用可能であることを実行時にチェックし、利用可能な場合にのみ使用する必要があります。このような場合、プロジェクトを慎重にリンクし、一部の項目を「弱いリンク」にする必要もあります。
本当に iOS3 との互換性が必要な場合は、ARC を使用できません。古いスタイルのメモリ管理でなければなりません。iOS4 は ARC をサポートしていますが、実行時の制限がいくつかあります。参照の自動消去はサポートされていません。
映画の再生は、より新しく優れた API が利用可能であるものの、古い API がまだ存在している典型的な例です。古いものMPMoviePlayerController
は iOS4 より前で、iOS4 でMPMoviePlayerViewController
登場しました (「ビュー」という言葉に注意してください。これは完全に完成したものUIViewController
です)。通常は後者を使用しますが、iOS3 との互換性のために、ランタイム チェックに基づいて前者を使用することにします。
具体的な答え
あなたの問題CV_XADD
:これはどこかにあるプリプロセッサ定義のように見えます#define
が、コンパイラはそれを拾っていません。ヒントとして、 を検索して の定義を探してみてCV_XADD
ください#define CV_XADD
。それが見つからない場合はCV_XADD
、すべての結果で just を探して定義を探してみてください。
「CV_XADD 期待される式」という用語をグーグルで検索してみましたか? この問題に関連するヒットが多数あります。
あなたのプロジェクトは C++ を使用しているため、ミックスがさらに複雑になります。