質問

10.6互換性を提供するためにアプリ( Clarke )をアップグレードしようとしています。

使用するOSXのバージョンに応じて、2つの異なるコードパスを使用する予定です。

10.5では、特定のCocoa APIに依存しない完全にカスタムコードで構成される1つのコントローラーを使用します。 10.6では、別のコントローラーを使用します。このコントローラーは、同じ抽象クラスに基づいて、新しいCoreLocation APIを同一のインターフェイスにラップします。実行時に、アプリはOSバージョンを検出することでコントローラーを切り替えます。

これは、10.6 SDK用にビルドされた10.6で正常に動作しますが、同じビルドが10.5で次のように爆発します。

10/09/2009 18:30:50 [0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575] dyld: unknown required load command 0x80000022 
10/09/2009 18:30:51 com.apple.launchd[403] ([0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575]) Exited abnormally: Trace/BPT trap 

10.5 SDK向けにビルドした場合、明らかにCoreLocationのものをコンパイルできません。

このアプリケーションに単一のバイナリを提供できることを望んでいました。 CoreLocation APIを10.5から「隠す」方法はありますか?

役に立ちましたか?

解決

ターゲットのビルド設定を変更することにより、この問題を解決できるはずです:

  1. Base SDKを10.6に設定します
  2. Deployment SDKを10.5に設定します

他のヒント

Deployment SDKのトリックは、両方のプラットフォームで同じフレームワークを使用しているが、新しいプラットフォームで新しい呼び出しを行っている場合にのみ機能します。 CoreLocationの場合、10.5ではフレームワーク全体が欠落しているため、フレームワークに動的にバインドできないため、アプリの読み込みに失敗します。

上記を実行し、CoreLocationを脆弱なフレームワークとして追加する必要があります。リンクフレームワークとバイナリのビルドフェーズを選択し、詳細ビューでCoreLocationを見つけ、中央の列で「必須」を変更します。 「弱い」に。

アプリをビルドすると、Xcodeは-weak_framework CoreLocationをリンカーに渡し、CoreLocationが存在するかどうかに関係なく、アプリはすべての10.5および10.6システムにロードされます。ただし、実際に10.6で実行している場合を除き、CoreLocationメソッドを呼び出さないようにしてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top