web-dev-qa-db-ja.com

Xcode 5.1 - コンパイルするアーカイブテクニックがありません(ONLY_ACTIVE_Arch = YES、アクティブArch = x86_64、VALID_ARCHS = i386)

Xcode 5.1にアップデートした後、64ビットシミュレータ用に自分のプロジェクトをビルドできなくなり、このエラーを受け取りました。

 No architectures to compile for (ONLY_ACTIVE_Arch=YES, active Arch=x86_64, VALID_ARCHS=i386).

これらは私のターゲットビルド設定です。

Xcode target build settings

私は "Active Active Architecture"をNoに変更し、 "Valid Architectures"に "i386"を追加しようとしましたが、残念ながらどちらもうまくいきませんでした。何か提案をありがとう!

165
ebi

XCode 5.1にアップグレードした後に同じエラーメッセージが表示されました。あなたはCocoaPodを使っていますか?もしそうなら、これは問題を解決するはずです:

  1. Xcodeの左ペインのワークスペースから "Pods"プロジェクトを削除してXcodeを閉じます。
  2. コマンドラインから「pod install」を実行して「Pods」プロジェクトを再作成します。
  3. Xcodeを再度開き、「Pods」プロジェクトと自分のプロジェクトの両方のビルド設定で「Build Active Architecture Only」が「No」に設定されていることを確認します。
  4. きれいにして造ってください。
102
Mike Onorato

あなたがする必要があるのは、単にONLY_ACTIVE_ArchNOに設定することです(少なくとも私にとってはうまくいきます)。以下はそのスクリーンショットです。


編集:

ONLY_ACTIVE_ArchYESに設定した場合、私が知っている限り(何か問題があれば指摘してください)、それはXcodeがアクティブアーキテクチャ用にのみビルドされることを意味します(これは現在Xcodeでアクティブです。 Xcodeのデフォルト設定はDebugがYESに設定されているため、Macに接続されている特別なデバイス用にビルドしたいだけの場合は、他のアーキテクチャ用のバイナリをビルドしません。

ビルドに失敗した理由は、プロジェクトがあなたが接続した機器のアーキテクチャをサポートしていないことかもしれません。 だからあなたのデバイスに最適なアーキテクチャを追加することが最善の解決策です。以下はアーキテクチャとそれをサポートするデバイスのリストです:

  • ARMv8/ARM64:iPhone 6iPhone 5siPad AirRetina iPad Mini
  • ARMv7s:iPhone 5iPhone 5ciPad 4
  • ARMv7:iPhone 3GSiPhone 4iPhone 4SiPod 3G/4G/5GiPadiPad 2iPad 3iPad Mini
  • ARMv6:iPhoneiPhone 3GiPod 1G/2G

それでは、なぜ"ONLY_ACTIVE_ArchNO"に設定するは動作するのでしょうか?追加したすべてのアーキテクチャ用にビルドされたバイナリをデバイスで実行することはできますが(ビルドにパスする)、パフォーマンスがいくらか失われます。これは素早い解決策ですが、最善ではありません。


:追加したアーキテクチャが多いほど、バイナリが大きくなります。プロジェクトに適したアーキテクチャを選択するのは良いことです。 ;)

182
Kjuly

ターゲットのarm64valid architecturesを追加します。シミュレータの有効なアーキテクチャにもx86-64アーキテクチャが追加されているようです。

28
xardas

CocoaPodを使用している場合、最も考えられる問題は、PodsプロジェクトのBuild Settings for Build Active Architecture OnlyがDebugに対してYesに設定されているためです。

解決策は簡単です。 Noに変更してください。

同様に、アプリケーションプロジェクトではNoに変更します。

27
samwize

私は同様の問題を抱えていました。プロジェクトのビルド設定で、 "Architecture"を "$(ARCHS_STANDARD_32_BIT)"に変更して解決しました。

Appleは、64ビットアーキテクチャでの構築を推奨しているので、標準アーキテクチャ(armv7、arm64) - $(ARCHS_STANDARD)を選択する必要があります。クリックしてください。 アップルのドキュメント

12

追加:アーキテクチャ:$(ARCHS_STANDARD_INCLUDING_64_BIT)

有効なアーキテクチャ:arm64、armv7、armv7

10
AntonijoDev

実行するたびに "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
5
Jake Hall

万が一のために、上記に従っているにもかかわらずまだ問題に遭遇しているなら、あなたが走っているシミュレータもまたサポートされているものであることを確認してください。私はarm7とarm7sに指定したのですが、64ビットシミュレータでアプリを実行しようとしていました。

5
irs8925

有効なアーキテクチャにarm64を追加するだけでいいのです。

3
Shauket Sheikh

次のi386x86_64Valid Architecturesに追加する必要がありました。私はXcode 7.2を実行しており、iOS 8以降をターゲットにしています。私はすでにそこにarmv7armv7sおよびarm64を持っていました、そしてそれはXcode 6.4で働いていました。

3
timgcarlson

私の問題は、私のPodfileにplatform :iosがあるにもかかわらず、PodsプロジェクトがOS Xをターゲットにしていたことです。私はcocoapods 0.35.0.rc2を使っています。

これを修正するには、プロジェクトナビゲータでPodsプロジェクトを選択し、Pods PROJECTノード(Podsターゲットではありません)がiOSをターゲットにしていることを確認します。つまり、アーキテクチャ構築設定は次のようになります。

  • アーキテクチャ:$(ARCHS_STANDARD)
  • ベースSDK: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
3
Jano

私は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
2
JRV

私はxcode 5.1を使用してiPad上で自分のアプリを実行しているときに同じ問題に直面しました。 armv7を「有効なアーキテクチャー」から削除し、「アクティブアーキテクチャーのみをビルド」の値を「いいえ」に設定することで解決しました。これらのフィールドはどちらもapp-> targets - > build settings - > architecturesにあります。

1
Anubha

@ Kjulyの答えと具体的な行を使ってこの問題を解決しました。

「ビルドに失敗した理由は、プロジェクトが、接続したデバイスのアーキテクチャをサポートしていないためです。」

Xcodeが読み込まれると、iPadアプリは自動的にiPad Airに設定されます。

enter image description here

これにより、依存関係分析エラーが発生しました。

デバイスの種類を変更するとすぐに問題が解決しました。

enter image description here

なぜこれが機能するのか私にはわかりませんが、これは非常に素早い答えで、私はバックグラウンドでいらっしゃる手間を省くことができ、すぐにアプリをテストすることができます。これが問題になる可能性があり、非常に単純なもので解決できるとは思わなかったでしょうが、この場合は解決しました。

0
simon_smiley

Acrhiecture - 時には6.0と7.0をサポートするために、我々はarm64を除外します

アーキテクチャ - >アーキテクチャ - 標準アーキテクチャarm64 armv7 armv7sを選択します。以下のValid acrchitectureの下にユーザーarm64 armv7 armv7sが含まれています。これは私のために働きました。

0
Ankish Jain

有効なアーキテクチャーの場合:各エントリー(リリース、デバッグ)を選択し、バックスペースを作成して押します。うまくいくはずです

0
Khaled Annajar

アーキテクチャ名を手で入力する必要があることがわかりました。

enter image description here

なぜこれが必要なのか、つまりこれらの値がXcode自体から継承されなかった理由はわかりません。しかし、私がこれをした途端、問題は解決しました。

0
matt

I386をアーキテクチャーに追加するのと同時に、以前のアーキテクチャーをすべて削除する(つまりARCHS_STANDARD設定を削除する)ようにしてください。これはアクティブアーキテクチャをi386に変更するはずです。デフォルトでarmv7用にビルドしようとしたときに同様の問題が発生しましたが、引き続きarm64用にビルドしようとしました。 ARCHS_STANDARDをARCHS_STANDARD_32_BITに変更したところ、選択されたアクティブアーキテクチャが変更されました。

0
halifix