新しいXCode 5.1では、arm64は標準のアーキテクチャの1つになりました。
ただし、私の現在のプロジェクトには、この新しいアーキテクチャをまだサポートしていないライブラリ(Google AdMobなど)を含めました。これらは現在、リンカーエラーを引き起こしています。
ld: symbol(s) not found for architecture arm64
たとえば、Google AdMob 6.8.0は arm64をサポートしていると言われています ですが、cputype (16777228) cpusubtype (0)
がarm64でない限り、これを実際に確認することはできませんか? (ファイルコマンドラインツールで発見)
libGoogleAdMobAds.a: Mach-O universal binary with 5 architectures
libGoogleAdMobAds.a (for architecture armv7): current ar archive random library
libGoogleAdMobAds.a (for architecture armv7s): current ar archive random library
libGoogleAdMobAds.a (for architecture i386): current ar archive random library
libGoogleAdMobAds.a (for architecture x86_64): current ar archive random library
libGoogleAdMobAds.a (for architecture cputype (16777228) cpusubtype (0)): current ar archive random library
これについて行く方法はありますか?
とりあえずarm64を取り除くのはそれほど難しくありません。あなたがする必要があるのは:
ターゲットのビルド設定を編集します。ドロップダウンを開いてArchitectures
の値を変更し、その他...をクリックして選択し、値$(ARCHS_STANDARD)
の行を削除して追加します値を持つ2つの行:armv7
およびarmv7s
(または$(ARCHS_STANDARD_32_BIT)
nschum)、ポップアップを閉じます。
値Valid Architectures
を編集し、単純にarm64
の部分を削除します。
ワークスペースまたはプロジェクト内にあるすべてのネストされたプロジェクトに対して実行します。
注:これは解決策ではありません。現在の問題を緩和するためのほんの数ステップです。依存関係プロジェクトを追跡し続け、arm64互換性がいつ提供されるかを確認し、これらの設定の変更をできるだけ早く元に戻してください。
幸運を
Xcode 5.1以降、$(ARCHS_STANDARD)にはarm64(およびarmv7およびarmv7s)が含まれていますが、Xcode 5.02では$(ARCHS_STANDARD)にはarmv7およびarmv7sのみが含まれていました。
Xcode 5.1の場合
$(ARCHS_STANDARD armv7 armv7s arm64)==
$(ARCHS_STANDARD_32_BIT armv7 armv7s)==
したがって、64ビットでコンパイルする必要がある場合は、含まれているすべてのライブラリに64ビットスライスがあることを確認する必要があります。 64ビットをまだサポートしていない場合は、代わりに32ビットでコンパイルする必要があります。
ただし、どちらの場合でも、ターゲットビルド設定では、AchitectureとValid Achitectureの両方が同じに設定され、一致することを確認する必要があります(以下の画像を参照)。したがって、両方を$(ARCHS_STANDARD)で試すことができ、コンパイルできない場合は、理論的にはエラーを削除して作業中のプロジェクトをコンパイルする$(ARCHS_STANDARD_32_BIT)で両方を試すことができます。
-
arm64 armv7sおよびarmv7での64ビットの場合と同様
-
または、32ビットの場合、armv7sおよびarmv7のみ(arm64なし):
ターゲットのビルド設定で、「有効なアーキテクチャ」をサポートするもののみに変更します。この場合、おそらくarmv7およびarmv7s。
Cocoapodsを使用している場合は、Podsプロジェクト内のすべてのターゲットでこれを変更し、すべてのスキームでそれらのターゲットの「Build Active Architecture Only」を「No」に設定してください。
Cocoapodsターゲットから64ビットビルドアーキテクチャを自動的に削除するためのポッドファイルの小さな変更の詳細は次のとおりです。 http://cameronspickert.com/2014/01/20/remove-the-arm64-architecture-from -cocoapods-targets
XCode 5.1でアーキテクチャを$(ARCHS_STANDARD_32_BIT)に設定すると機能します。有効なアーキテクチャからarm64を削除する必要はありません。
Architectureは、構築する実際のアーキテクチャを指定し、有効なアーキテクチャ(スーパーセットを指定)のarm64エントリを無視します。 Appleがすぐにこれを修正することを願っています。
同じエラーが発生しました。 Google AdMob SDK 6.8.0の新しいバージョンをダウンロードすると、問題は解決しました。リンクは次のとおりです。 https://developers.google.com/mobile-ads-sdk/download#downloadios
したがって、arm64アーキテクチャを無効にする必要はありません。
なし答えは私のために働いた。
ついに、Xcode 5.1以外に古いXcode 5.0.2をインストールするアプリを提出しました
このバージョンのXcodeを使用して、エラーなしでアプリをアーカイブしました。
Xcode 5.0.2の古いバージョンをダウンロード here (Apple IDでログインする必要があります):