Xcode 5.1にアップデートした後、64ビットシミュレータ用に自分のプロジェクトをビルドできなくなり、このエラーを受け取りました。
No architectures to compile for (ONLY_ACTIVE_Arch=YES, active Arch=x86_64, VALID_ARCHS=i386).
これらは私のターゲットビルド設定です。
私は "Active Active Architecture"をNoに変更し、 "Valid Architectures"に "i386"を追加しようとしましたが、残念ながらどちらもうまくいきませんでした。何か提案をありがとう!
XCode 5.1にアップグレードした後に同じエラーメッセージが表示されました。あなたはCocoaPodを使っていますか?もしそうなら、これは問題を解決するはずです:
あなたがする必要があるのは、単にONLY_ACTIVE_Arch
をNO
に設定することです(少なくとも私にとってはうまくいきます)。以下はそのスクリーンショットです。
ONLY_ACTIVE_Arch
をYES
に設定した場合、私が知っている限り(何か問題があれば指摘してください)、それはXcodeがアクティブアーキテクチャ用にのみビルドされることを意味します(これは現在Xcodeでアクティブです。 Xcodeのデフォルト設定はDebugがYES
に設定されているため、Macに接続されている特別なデバイス用にビルドしたいだけの場合は、他のアーキテクチャ用のバイナリをビルドしません。
ビルドに失敗した理由は、プロジェクトがあなたが接続した機器のアーキテクチャをサポートしていないことかもしれません。 だからあなたのデバイスに最適なアーキテクチャを追加することが最善の解決策です。以下はアーキテクチャとそれをサポートするデバイスのリストです:
iPhone 6
、iPhone 5s
、iPad Air
、Retina iPad Mini
iPhone 5
、iPhone 5c
、iPad 4
iPhone 3GS
、iPhone 4
、iPhone 4S
、iPod 3G/4G/5G
、iPad
、iPad 2
、iPad 3
、iPad Mini
iPhone
、iPhone 3G
、iPod 1G/2G
それでは、なぜ"ONLY_ACTIVE_Arch
をNO
"に設定するは動作するのでしょうか?追加したすべてのアーキテクチャ用にビルドされたバイナリをデバイスで実行することはできますが(ビルドにパスする)、パフォーマンスがいくらか失われます。これは素早い解決策ですが、最善ではありません。
注:追加したアーキテクチャが多いほど、バイナリが大きくなります。プロジェクトに適したアーキテクチャを選択するのは良いことです。 ;)
ターゲットのarm64
にvalid architectures
を追加します。シミュレータの有効なアーキテクチャにもx86-64
アーキテクチャが追加されているようです。
CocoaPodを使用している場合、最も考えられる問題は、PodsプロジェクトのBuild Settings for Build Active Architecture OnlyがDebugに対してYesに設定されているためです。
解決策は簡単です。 Noに変更してください。
同様に、アプリケーションプロジェクトではNoに変更します。
私は同様の問題を抱えていました。プロジェクトのビルド設定で、 "Architecture"を "$(ARCHS_STANDARD_32_BIT)"に変更して解決しました。
Appleは、64ビットアーキテクチャでの構築を推奨しているので、標準アーキテクチャ(armv7、arm64) - $(ARCHS_STANDARD)を選択する必要があります。クリックしてください。 アップルのドキュメント
追加:アーキテクチャ:$(ARCHS_STANDARD_INCLUDING_64_BIT)
有効なアーキテクチャ:arm64、armv7、armv7
実行するたびに "pod install"がデバッグのためにonly_active_Archをリセットするのを避けるために、あなたはあなたのpodファイルに以下を追加することができます。
# Append to your Podfile
post_install do |installer_representation|
installer_representation.project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['ONLY_ACTIVE_Arch'] = 'NO'
end
end
end
万が一のために、上記に従っているにもかかわらずまだ問題に遭遇しているなら、あなたが走っているシミュレータもまたサポートされているものであることを確認してください。私はarm7とarm7sに指定したのですが、64ビットシミュレータでアプリを実行しようとしていました。
有効なアーキテクチャにarm64を追加するだけでいいのです。
次のi386
とx86_64
をValid Architectures
に追加する必要がありました。私はXcode 7.2を実行しており、iOS 8以降をターゲットにしています。私はすでにそこにarmv7
、armv7s
およびarm64
を持っていました、そしてそれはXcode 6.4で働いていました。
私の問題は、私のPodfileにplatform :ios
があるにもかかわらず、PodsプロジェクトがOS Xをターゲットにしていたことです。私はcocoapods 0.35.0.rc2を使っています。
これを修正するには、プロジェクトナビゲータでPodsプロジェクトを選択し、Pods PROJECTノード(Podsターゲットではありません)がiOSをターゲットにしていることを確認します。つまり、アーキテクチャ構築設定は次のようになります。
$(ARCHS_STANDARD)
iOS 8.1
iOS
$(ARCHS_STANDARD)
私はまた、すべてのアーキテクチャを構築したいと思ったので、Podfileに以下を追加しました。
post_install do | installer |
installer.project.build_configurations.each do |config|
config.build_settings['ONLY_ACTIVE_Arch'] = 'NO'
end
end
私はXcode 7.2のシミュレータ用のコマンドラインビルドの問題のためにこの質問にたどり着きました。他の誰かが同じ問題を抱えている場合は、私が見つけた解決策を共有します。
どうやら Xcode 7.2 には、シミュレータ用にビルドしようとするとxcodebuild
が失敗するというバグがあります。解決策は、オプション "-destination"を指定することです。例えば:
xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6' build
更新
上記のコマンド例は、iPhone 6専用のグラフィックを含むバイナリをビルドします。バイナリが他のシミュレータで実行されている場合、iPhone 6のグラフィックはプラットフォームに合わせて拡大縮小されます。すべてのプラットフォームのすべてのグラフィックを含む より良い回避策 は、パラメータPLATFORM_NAME=iphonesimulator
を指定することです。次に例を示します。
xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -Arch i386 PLATFORM_NAME=iphonesimulator build
私はxcode 5.1を使用してiPad上で自分のアプリを実行しているときに同じ問題に直面しました。 armv7を「有効なアーキテクチャー」から削除し、「アクティブアーキテクチャーのみをビルド」の値を「いいえ」に設定することで解決しました。これらのフィールドはどちらもapp-> targets - > build settings - > architecturesにあります。
@ Kjulyの答えと具体的な行を使ってこの問題を解決しました。
「ビルドに失敗した理由は、プロジェクトが、接続したデバイスのアーキテクチャをサポートしていないためです。」
Xcodeが読み込まれると、iPadアプリは自動的にiPad Airに設定されます。
これにより、依存関係分析エラーが発生しました。
デバイスの種類を変更するとすぐに問題が解決しました。
なぜこれが機能するのか私にはわかりませんが、これは非常に素早い答えで、私はバックグラウンドでいらっしゃる手間を省くことができ、すぐにアプリをテストすることができます。これが問題になる可能性があり、非常に単純なもので解決できるとは思わなかったでしょうが、この場合は解決しました。
Acrhiecture - 時には6.0と7.0をサポートするために、我々はarm64を除外します
アーキテクチャ - >アーキテクチャ - 標準アーキテクチャarm64 armv7 armv7sを選択します。以下のValid acrchitectureの下にユーザーarm64 armv7 armv7sが含まれています。これは私のために働きました。
有効なアーキテクチャーの場合:各エントリー(リリース、デバッグ)を選択し、バックスペースを作成して押します。うまくいくはずです
I386をアーキテクチャーに追加するのと同時に、以前のアーキテクチャーをすべて削除する(つまりARCHS_STANDARD設定を削除する)ようにしてください。これはアクティブアーキテクチャをi386に変更するはずです。デフォルトでarmv7用にビルドしようとしたときに同様の問題が発生しましたが、引き続きarm64用にビルドしようとしました。 ARCHS_STANDARDをARCHS_STANDARD_32_BITに変更したところ、選択されたアクティブアーキテクチャが変更されました。