Xcode 12、iOSシミュレータ用に構築されていますが、アーキテクチャarm64用にiOS用に構築されたオブジェクトファイルにリンクしています


297

iOS 14の準備のためにXcode12(ベータ5)で大規模な(そしてXcode 11で作業中の)プロジェクトを構築しようとしています。コードベースは以前はObj-Cでしたが、現在はObj-CとSwiftの両方が含まれており、次のポッドを使用しています。 Obj-Cおよび/またはSwiftも同様です。

Xcode 12をサポートするココアポッドの新しいベータ版(現在は1.10.0.beta 2)をプルしました。

ポッドのインストールは成功しました。ビルドを実行すると、ポッドフレームワークで次のエラーが発生します。

「iOSシミュレータ用にビルドしていますが、アーキテクチャarm64用にiOS用にビルドされたオブジェクトファイルにリンクしています」

フレームワークでlipo-infoを実行すると、armv7s armv7 i386 x86_64arm64になります。

以前は、プロジェクトの有効なアーキテクチャはarmv7、armv7s、arm64に設定されていました。

Xcode 12では、Appleのドキュメントに従って、その設定はなくなります。アーキテクチャは$(ARCHS_STANDARD)に設定されています。除外されたアーキテクチャには何も設定されていません。

誰かがここで何が起こっているのか考えていますか?これをもっと単純なプロジェクトで再現することはまだできていません。


2
これは私のために働いている:stackoverflow.com/questions/24924809/...
NarendarシンSAINI

記事をチェックアウト:milanpanchal24.medium.com/...
MilanPanchal

私はAppleSilicon M1を持っていますが、まだこのarm64エラーが発生しています。なぜそうなるのでしょうか?
アスペン

回答:


463

基本的にarm64、プロジェクトとポッドプロジェクトの両方からシミュレータアーキテクチャを除外する必要があります。

  • これを行うには、プロジェクトのビルド設定に移動し、内部にAny iOS Simulator SDK値を追加します。arm64Excluded Architecture

    ここに画像の説明を入力してください

または

  • カスタムXCConfigファイルを使用している場合は、シミュレータアーキテクチャを除外するためにこの行を追加するだけです。
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64

次に

すべてのカカオポッドベンダーがPodspecに以下を追加し終えるまで、Podプロジェクトに対して同じことを行う必要があります。

s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

Excluded Architechureポッドプロジェクトのビルド設定に手動で追加できますが、を使用すると上書きされますpod install

これの代わりに、このスニペットをに追加できますPodfile。実行するたびに必要なビルド設定が書き込まれますpod install

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
  end
end

4
ここでのCocoaPodsに関する追加の詳細は素晴らしいです。[sdk=iphonesimulator*]EXCLUDED_ARCHSがないと、実際のデバイス用にビルドするときにXCodeがポッドを見つけることができないことに注意してください。これは、arm64用にビルドされるポッドがないためです。
MWU

5
私のために働いた!post_install do |installer|フリッパーが原因で、ほとんどのポッドファイルにすでにセクションがあることに注意してください。内側のセクションを線のinstaller.pods_project.build_configurations.each do |config| config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64" end後ろに貼り付けflipper_post_install(installer)ます。
RamonVermeulen20年

4
取得していbuilding for iOS Simulator, but linking in object file built for macOS, for architecture x86_64ます。それを修正する方法は?
Sazzad HissainKhan20年

3
このソリューションは優れており、独自のポッドを作成する場合は、「...すべてのカカオポッドベンダーがPodspecの追加を完了するまで」の後に、著者が提案する2行に特に注意してください。私自身のフレームワークのPodspecで、プライベートリポジトリにプッシュしようとすると、リンティングエラーが発生していました。ありがとう!
ダニー

1
ポッド仕様の作成者がこのソリューションを見つけて適用したため、このソリューションには問題を引き起こす欠陥があります。問題のある部分は、の使用ですuser_target_xcconfig。以下のために複数のポッド仕様が異なる値を定義するのでEXCLUDED_ARCHS、彼らは紛争やCocoaPods発する警告している。このよう[!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.podspec構文の参照は、この属性は「お勧めできません」と表示されますguides.cocoapods.org/syntax/podspec.html#user_target_xcconfigを
leberwurstsaft

112

TL; DR;

リリースモードであっても、ライブラリ/アプリの[アクティブなアーキテクチャのみをビルドする(ONLY_ACTIVE_ARCH)]を[はい]に設定します。


問題の根本原因を特定しようとしているときに、Xcode12に関するいくつかの面白い事実に気づきました。

  1. Xcode 12は、実際にはApple Siliconの足がかりであり、残念ながらまだ利用できません。しかし、そのプラットフォームでは、現在のIntelベースのx86_64アーキテクチャとは異なり、シミュレータもarm64アーキテクチャで実行されるarm64ベースのmacOSを取得します。

  2. Xcodeは通常、「実行先」に依存してライブラリ/アプリを構築します。したがって、シミュレーターが「実行先」として選択されると、使用可能なシミュレーターアーキテクチャー用にアプリがビルドされ、デバイスが「実行先」として選択されると、デバイスがサポートするアーキテクチャー用にビルドされます(arm*)。

  3. xcodebuild、Xcode 12+ビルドシステムではarm64、シミュレータの有効なアーキテクチャと見なされます。したがって、実行先としてシミュレーターが選択されると、arm64ベースのシミュレーターに対してもライブラリ/アプリをコンパイル/リンクしようとする可能性があります(まだ利用できません)。そのため、<architecture>-<os>-<sdk>-<platform>形式のclang(++)ようarm64-apple-ios13.0-simulatorにいくつかの-targetフラグを送信し、clangはarm64ベースのシミュレーターに対してビルド/リンクを試みますが、最終的にはIntelベースのMacで失敗します。

  4. ただし、xcodebuildこれはリリースビルドに対してのみ試行します。どうして?なぜなら、「アクティブなアーキテクチャのみをビルドする(ONLY_ACTIVE_ARCH)」ビルド設定は、通常、「リリース」構成の場合のみ「いいえ」に設定されるためです。つまりxcodebuild、リリースビルド用に選択した実行先のライブラリ/アプリのすべてのアーキテクチャバリアントをビルドしようとします。そして、シミュレータの実行先のために、それは両方が含まれますx86_64arm64、今以降arm64のXcode 12+でも、シミュレータでサポートされているアーキテクチャであるアップルシリコンをサポートします。

簡単に言えば、Xcodeは、コマンドラインxcodebuild(デフォルトではビルドをリリースします。プロジェクト設定の[一般]タブを参照)を試行するたびにアプリのビルドに失敗し、実行先でサポートされているすべてのアーキテクチャバリアントをビルドしようとします。したがって、この問題の簡単な回避策は、リリースモードの場合でも、ライブラリ/アプリで[アクティブなアーキテクチャのみをビルドする(ONLY_ACTIVE_ARCH)]を[はい]に設定することです。

ここに画像の説明を入力してください ここに画像の説明を入力してください

ライブラリがポッドとして含まれていて、アクセスできる場合は、次のように.podspec設定するだけです。

spec.pod_target_xcconfig = {'ONLY_ACTIVE_ARCH' => 'YES'}

spec.user_target_xcconfig = {'ONLY_ACTIVE_ARCH' => 'YES'}#推奨されません

ポッドがターゲットプロジェクト汚染してはならず、ターゲット設定自体でオーバーライドされる可能性があるため、私は個人的に2行目が好きではありません。したがって、何らかの方法で設定を上書きするのは、コンシューマープロジェクトの責任です。ただし、これはpodspecのリンティングを成功させるために必要な場合があります。

ただし、にアクセスできない場合.podspecは、ポッドのインストール中にいつでも設定を更新できます。

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings["ONLY_ACTIVE_ARCH"] = "YES"
    end
  end
end

私が懸念していたことの1つは、実際にlibs / appsをアーカイブするときにこれがどのような影響を与えるかということです。アーカイブ中、アプリは通常「リリース」構成を取ります。これにより、現在の実行先のアクティブなアーキテクチャのみを考慮したリリースビルドが作成されるため、このアプローチでは、ターゲットビルドからarmv7、armv7sなどのスライスが失われる可能性があります。ただし、ドキュメントには、特定のアーキテクチャが定義されていないため、実行先として「汎用iOSデバイス/任意のデバイス」を選択すると、この設定は無視されると記載されていることに気付きました(添付の画像で強調表示されています)。ですから、実行先としてそれを選択してアプリをアーカイブすれば、私たちは良いはずだと思います。


1
これは本当にAppleからの驚くべき変更であり、Appleが補償すべきだと私が感じていることを理解するのに半日かかった:)。これは(少なくとも私が知っているように)文書化された更新ではなく、Xcode 12にアップグレードするすべての人に確実に影響します。基本を理解した後、すべての人がそれを乗り越える独自の方法を見つけることを願っています。
AyanSengupta20年

1
複数のポッド仕様が使用さuser_target_xcconfigれ、値が完全に一致しない場合、CocoaPodsは次のような警告を発します[!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.。podspec構文リファレンスには、この属性は「推奨されません」と記載されていますguides.cocoapods.org/syntax/podspec.html#user_target_xcconfig。したがってuser_target_xcconfig、多くの開発者の手間を省くためにこれを使用しないでください。
leberwurstsaft

2
正しい!そして、私はすでに私の答えでそれについて言及したと思います。
アヤンSengupta

1
Xcode 11でのビルドが中断されないため、これが最善の解決策だと思います。この設定をプロジェクト全体に適用した後、ポッドまたはターゲットに個別に設定する必要はありませんでした。そして、Xcode11.7とXcode12の両方で機能します。archを除くとXcode11.7にarm64マップされるx86_64ため、シミュレーターのメインアーキテクチャーは除外されます。
WojciechKulik20年

2
最終的には「EXCLUDED_ARCHS [sdk = iphonesimulator *]」=>「arm64」ですべてを機能させることができましたが、pod_target_xcconfigでのみ、問題のあるポッド(ビルド済みのライブラリを含む)とに依存する単一のポッドでのみ機能しました問題のポッド。他のすべてはきれいに残されました。私はそれをアクティブなアーチソリューションよりも好むことにしました。
AirsourceLtd20年

71

解決策を見つけました! https://developer.apple.com/forums/thread/657913

シミュレーターの除外アーキテクチャーをarm64に設定すると、コンパイルされます。

シミュレータのアーキテクチャを除く


当然のことながら、私が抱えていた問題は手動でリンクされたライブラリにありましたが、使用しているポッドでも問題は発生しませんでした。
SlashDevSlashGnoll

4
私はでテストされたリリース、私はあまりにもリリースにそれを追加する必要がありましたので、モード
MujtabaFR

この投稿の後、私たちはビジネスに戻ったと思います。助けてくれてありがとう。
jBarros 3520

@btxiosアーカイブの作成時に「ARCHS [@]:unboundvariable」の問題が発生しています。この問題を解決できましたか?
ArdenDev

49

有効なアーキテクチャのビルド設定はXcode12で削除されました。このビルド設定に値がある場合は、問題が発生しているため、削除する必要があります。

VALID_ARCHSビルド設定をユーザー定義ビルド設定(値なし)として再度追加し、プロジェクトを実行して(失敗した)、VALID_ARCHSビルド設定を削除することで、VALID_ARCHSビルド設定を「クリア」することができました。その後、シミュレーターで実行することができました。

私のアーキテクチャのビルド設定は標準アーキテクチャです。

ビルド設定のプラスボタンからユーザー定義設定を追加できます。

ユーザー定義の設定


9
これは受け入れられた答えでなければなりません。ターゲットではなくアプリプロジェクトが選択されていることを確認してください。そうしないと、ビルド設定からVALID_ARCHSを削除できません。:)
バイオニクル

2
@trishcodeこれを行った後でも、同じエラー(xcode12 beta4)が発生しますが、回避策はあります
SivakrishnaPerla20年

3
@SivakrishnaPerla Xcode 11でプロジェクトを開くことができれば、有効なアーキテクチャが使用されているターゲットを正確に確認できます。Xcode 11で設定をクリアしてから、Xcode 12でプロジェクトを再試行することもできます。それでも回避策が必要で、埋め込みフレームワークでエラーが発生する場合は、SlashDevSlashGnollの答えが機能するはずです。回避策が必要で、Cocoapodでエラーが発生する場合は、インストール後のPodfileでarm64アーキテクチャを除外してください。
trishcode

1
@trishcodeありがとうございます。除外されたアーキテクチャでarm64を設定し、VALID_ARCHSを削除すると機能しました。
SivakrishnaPerla20年

1
VALID_ARCHSを削除してarm64を除外アーキテクチャに追加すると、このエラーが発生します-依存関係を確認してくださいコンパイルするアーキテクチャがありません(ARCHS = arm64 x86_64、VALID_ARCHS =、EXCLUDED_ARCHS =(arm64))。
nOObiOS20年

14

Xcode 12.3

Validate WorkspaceをYesに設定することで、この問題を解決しました

ここに画像の説明を入力してください


私の問題を解決しました、ありがとう!
デクランランド

1
私の問題を解決しませんでした
アスペン

私の問題を解決しました。最も簡単な修正!これが解決されてうれしいですが、誰かがこれが問題をどのように修正するかを説明できますか?
njdeveloper

11

Xcode 12で実際のデバイスではなくシミュレーターで問題が発生した場合は、サポートされなくなったため、VALID_ARCHS設定を削除する必要があります。「ビルド設定」に移動し、「VALID_ARCHS」を検索し、ユーザー定義のプロパティを削除します。あなたが持っているすべてのターゲットでそれを行います。

それでも、ポッドを適切なアーキテクチャとデプロイメントターゲットでコンパイルするには、ポッドファイルの下部にスクリプトを追加する必要がある場合があります。

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
      config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
     end
  end
end

VALID_ARCHS私のプロジェクトからを削除することはうまくいきました。podfileにもpodsプロジェクトにも何も変更しませんでした。
アンヘルテレス

8

Xcode 12にアップグレードした後も、実際のデバイス用にビルドすることはできましたが、シミュレーター用にビルドすることはできませんでした。Podfileビルドは、実際のデバイスでのみ機能していました。

[ビルド設定]> [ユーザー定義]でVALID_ARCHSを削除しましたが、機能しました。これを見つける前にしばらく頭をバッシング。


8

私にとって、次の設定が機能しました。

ビルド設定>>除外されたアーキテクチャ

「AnyiOSSimulatorSDK」オプションのリリースモードとデバッグモードの両方に「arm64」を追加しました。

ここに画像の説明を入力してください


6

私は答えを見つけたと思います。Xcode 12ベータ6リリースノートによると:

ビルド設定エディタに有効なアーキテクチャのビルド設定(VALID_ARCHS)が含まれなくなったため、その使用は推奨されていません。代わりに、新しい除外アーキテクチャのビルド設定(EXCLUDED_ARCHS)があります。プロジェクトにVALID_ARCHSが含まれている場合、設定はユーザーに表示されます。 -ビルド設定エディターの定義済みセクション。(15145028) "

プロジェクトファイルを手動で編集し(Xcodeを使用してプロジェクトファイルからアイテムを削除する方法がわかりませんでした)、VALID_ARCHSを参照するすべての行を削除することで、この問題を解決できました。その後、私はシミュレーターのためにうまく構築することができます。


1
Xcodeのを使用して、VALID_ARCHSは、[プロジェクト(ないターゲット)は`ビルド設定にある- >ユーザー定義」それを、それを選択して削除します。。
Akshay

この解決策は私のために働いた。他の人が提案した解決策は、「アーキテクチャの除外」フィールドに値「arm64」を追加するだけでは機能せず、生成された.appファイルに対して「ファイル権限」エラーが発生し始めました。
archeopetrix

6

プロジェクトターゲットとポッドターゲットの両方の「除外されたアーキテクチャ」に「arm64」を追加することで問題を解決します。

Xcode->ターゲットプロジェクト->ビルド設定->除外されたアーキテクチャ> "arm64"

Xcode->ポッドターゲット->ビルド設定->除外されたアーキテクチャ> "arm64"



5

xxx.frameworkpodspecファイルにfollowconfigを追加し、podパッケージにarm64 similatorarchが含まれないようにします。

s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

機能した!しかし、これはポッドがAppleシリコンベースのMacで使用できないことを意味しますか?
tomacco

@tomaccoで確認されていますか?
フェルナンドレイノソ

2
私は後で今日をテストし、報告します開発移行キット、(ARM MacMini)受けている@FernandoReynoso
tomacco

@tomaccoあなたはそれをテストすることができましたか?
Houman

複数のポッド仕様が使用さuser_target_xcconfigれ、値が完全に一致しない場合、CocoaPodsは次のような警告を発します[!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.。podspec構文リファレンスには、この属性は「推奨されません」と記載されていますguides.cocoapods.org/syntax/podspec.html#user_target_xcconfig。したがってuser_target_xcconfig、多くの開発者の手間を省くためにこれを使用しないでください。
leberwurstsaft

4

コマンドラインからフレームワークを構築する際に問題が発生していました。私のフレームワークは、ARMベースのシミュレーターのサポートが不足していた他のフレームワークに依存しています。依存関係をアップグレードするまで、ARMベースのシミュレーターのサポートを除外することになりました。

EXCLUDED_ARCHS=arm64CLIからシミュレーターのフレームワークを構築するときにフラグが必要でした。

xcodebuild archive -project [project] -scheme [scheme] -destination "generic/platform=iOS Simulator" -archivePath "archives/[scheme]-iOS-Simulator" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES EXCLUDED_ARCHS=arm64

1
こっちも一緒。このシナリオの主な「問題」は、実際にはを介して一般的な宛先を構築すること-destination "generic/platform=iOS Simulator"です。Xcodeの12以来arm64含む、すべての利用可能なアーキテクチャで構築するこのリード
サシャ・

4

このスレッドのほぼすべての投稿を試し、アップルデベロッパフォーラムを読んだ後、1​​つのソリューションしか機能しないことがわかりました。

迅速なアプリで使用されるユニバーサルフレームワークを構築しています。アーキテクチャエラーなしでシミュレータにビルドできませんでした。

私のフレームワークプロジェクトでは、ビルドフェーズにユニバーサルフレームワークタスクがあります(これが当てはまる場合)

  • xcodebuildビルドフェーズ内のタスクに以下を追加します。 EXCLUDED_ARCHS="arm64"

次に、次のプロジェクトを変更する必要がありますBuild Settings

  • VALID_ARCHSユーザー定義の設定を削除します
  • 設定するONLY_ACTIVE_ARCHYES***

***フレームワークを開発していて、デモアプリもある場合は、両方のプロジェクトでこの設定をオンにする必要があります。


4

更新:2020年10月

除外されたアーキテクチャの下でarm64のみ設定できDebug > Simulator - iOS 14.O SDKます。

ここに画像の説明を入力してください


3

ポッド開発者の場合Podspecに以下を追加します。

s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

次に、サンプルプロジェクトで サンプルプロジェクトファイルの設定

このプロジェクトで機能していることを確認してください


複数のポッド仕様が使用さuser_target_xcconfigれ、値が完全に一致しない場合、CocoaPodsは次のような警告を発します[!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.。podspec構文リファレンスには、この属性は「推奨されません」と記載されていますguides.cocoapods.org/syntax/podspec.html#user_target_xcconfig。したがってuser_target_xcconfig、多くの開発者の手間を省くためにこれを使用しないでください。
leberwurstsaft

2

カルタゴを介してインストールされた特定のライブラリでも同じ問題が発生していました。Carthageを使用している人のために、CarthageはXcode 12でそのままでは機能しないため、このドキュメントでは、ほとんどの場合に機能する回避策について説明します。まあ、まもなく、Carthageはファットフレームワークを構築します。つまり、フレームワークには、サポートされているすべてのアーキテクチャのバイナリが含まれています。Apple Silliconが導入されるまではすべて正常に機能していましたが、アーキテクチャが重複しているため(デバイスの場合はarm64、シミュレータの場合はarm64)、競合が発生しています。これは、Carthageがアーキテクチャ固有のフレームワークを単一のファットフレームワークにリンクできないことを意味します。

こちらの指示に従ってください。カルタゴXCODE12

次に、Carthageを構成した後。ビルド設定の「除外されたアーキテクチャ」にarm64を配置します。 ここに画像の説明を入力してください

シミュレーターを使用してプロジェクトを実行してみてください。シミュレータはエラーなしで実行されます。


1

ここでの問題は、Xcode 11の有効なアーキテクチャであり、Xcode 11でプロジェクトを開き、プロジェクト、ターゲット、ポッドの両方で有効なアーキテクチャの値を$(ARCHS_STANDARD)に変更し、Xcode12でプロジェクトを再度開いてビルドします。


1

設定し"Build Active Architecture Only"(ONLY_ACTIVE_ARCH)、yesにビルド設定をxcode arm64であるため、シリコンMACアーキテクチャのarm64を求めています。

arm64は、シリコンMACをサポートするために、Xcode12のシミュレータアーチとして追加されました。

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/SDKSettings.json


シリコンMacで実行されていない場合は、arm64を使用しないことを知っている必要がありますか?
ジョナサン。

@ジョナサン。はい、そうすべきでしたが、現在はそうではありません。
Aravind

1

私の場合:Xcode 12

空の値をオンEXCLUDED_ARCHSに設定し、ONLY_ACTIVE_ARCHDebug = YESRelease =を設定しますNO プロジェクトのビルド設定を設定します

そして私はこれを私のポッドファイルに含めました:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
        end
    end
end

それは私のシミュレーターiPhone8(iOS 12)とiPhone 11 Pro Max(iOS 14)と私のデバイスiPhone 7 Plus(iOS 13.4)で動作します


1

上のBuild Settings検索VALID_ARCHを押した後delete。これはXcode12.0.1で動作するはずです

ビルド設定のVALID_ARCH


2
見つかりませんVALID_ARCH、これは何ですか?
Houman

1

に追加Any iOS Simulator SDK -> x86_64するだけProject's Build Settings -> VALID_ARCHS私のため作品にです。

Xcodeバージョン:12.1(12A7403)

ここに画像の説明を入力してください

プロジェクトにx86_64をサポートしないフレームワークが含まれている場合。

  • これらのフレームワーク名(xxx.framework)をに追加できますTarget -> Build Settings -> Excluded Source File Names -> Debug -> Any iOS Simulator SDKます。
  • 次に、を変更しFramework Search Pathsて、のこれらのフレームワークのパスを削除しますDebug -> Any iOS Simulator SDK

これらの2つの設定により、Xcodeがシミュレーターモードでこれらのフレームワークを構築およびリンクすることを回避できます。

ここに画像の説明を入力してください

ここに画像の説明を入力してください


1

arm64とXcode12の問題を理解しており、iPhone Simulatorのarm64アーキテクチャを除外するか、リリーススキームにONLY_ACTIVE_ARCHを設定することで、ビルドの問題を解決できました。ただし、ポッドリポジトリプッシュを使用してフレームワークをプッシュするにはまだ問題があります。

podspecでs.pod_target_xcconfigを設定しても、同じpodspecで定義されている依存関係にこの設定が適用されないことがわかりました。検証中にCocoapodsが生成しているダミーのアプリプロジェクトで確認できます。Cocoapods検証はシミュレーターのリリーススキームを実行しており、1つ以上の依存関係がarm64を除外していないか、アクティブなアーキテクチャのみを構築するように設定されていない場合、これは失敗します。

解決策は、プロジェクトの検証中にCocoapodsにインストール後のスクリプトを追加するように強制するか、デバッグスキームをビルドさせることです。これは、デバッグスキームがアクティブなアーキテクチャを構築するだけだからです。

結局、Xcode 11を使用してポッドを解放し、検証に合格しました。Xcode11をdeveloper.apple.comからダウンロードし、Xcode11.appとしてApplicationsフォルダーにコピーして、を使用して切り替えることができますsudo xcode-select --switch /Applications/Xcode11.app/Contents/Developer。完了したら、元に戻すことを忘れないでください。


1

さまざまなソリューションを試し、検索した後、最も安全な方法は、ポッドファイルの最後に次のコードを追加することだと思います

post_install do |pi|
   pi.pods_project.targets.each do |t|
       t.build_configurations.each do |bc|
          bc.build_settings['ARCHS[sdk=iphonesimulator*]'] =  `uname -m`
       end
   end
end

この方法では、iOSシミュレーターのコンパイラーアーキテクチャーを現在のCPUのアーキテクチャーとしてオーバーライドするだけです。他のソリューションと比較すると、このソリューションはAppleSilicon搭載したコンピューターでも機能します。


誰かが少なくとも問題を理解していて、iOSシミュレーターのAppleSiliconサポートを削除することを提案しているのを見るのは素晴らしいことです。
Camsoft

0

私の場合:

4つの構成(+ DebugQaとReleaseQa)がありました。Cocoapodsは依存関係マネージャーとして使用されます

デバッグの場合、デバイスとシミュレーター、およびデバイスのqaのみに収集しました。

PodsProjectでBuildActiveArchitectureをyesに設定するのに役立ちました


0

私の場合、ReleseモードのwatchOS 7シミュレーターで実行しようとしましたが、iOS14シミュレーターはデバッグモードでした。

したがって、両方のシムをデバッグ/リリースモードにするだけで、問題は解決しました。


0

ビルド構成をデバッグモードに戻すか、デバッグモードとリリースモードの両方で[アクティブアーキテクチャのビルドのみ]をオンにします。その理由は、ライブラリ/フレームワークが新しいシミュレータアーキテクチャARM64(Appleシリコンプロセッサを搭載したMacで実行)をサポートしていないためです。


0

パスに「arm64」行(引用符なし)を追加します。Xcode->プロジェクト->ビルド設定->アーキテクチャ->除外されたアーキテクチャまた、ポッドについても同じようにします。どちらの場合も、デバッグフィールドとリリースフィールドの両方。

または詳細...

Xcode 12を使用してシミュレーターにデプロイする際にここで言及したエラーも、私に影響を与えたものの1つです。各プロジェクトを右クリックしてファインダーに表示し、Atomで.xcodeprojを開いてから、.pbxprojを調べて、すべてのVALIDARCHS設定を削除します。これが私にとってそれがうまくいった理由です。他のいくつかの提案(arm64、Build Active Architecture Onlyを除く)を試してみましたが、ビルドがさらに進んだように見えましたが、最終的には別のエラーが発生しました。VALIDARCH設定を横に置くことは、おそらく最初に確認するのに最適なことです。


0

誰かを助けるかもしれない私のために働いた解決策を共有する

シミュレーター用にコンパイルする際の問題:

iOSシミュレータ用にビルドしていますが、アーキテクチャarm64用にiOS用にビルドされたオブジェクトファイルにリンクしています

XCODE 12.1, POD 1.9.1

私のプロジェクト構造

  • 主なターゲット
  • シェアエクステンション
  • 通知サービス拡張
  • サブモジュール、カスタムフレームワーク
  • Podfile
  1. すべてのターゲットでarm64[ビルド設定]->Exclude Architectureに追加します。

ここに画像の説明を入力してください

  1. すべてのターゲットarm64から削除されVALID_ARCHS、追加されましx86_64た。

ここに画像の説明を入力してください

  1. 次のコードを追加します podfile

    post_install do |installer|
        installer.pods_project.build_configurations.each do |config|
        config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
     end
    end
    
  2. しましたpod update、削除しましたpodfile.lock、そしてしましたpod install

  3. クリーンビルドを実行します。


0

オンラインで役に立たない答えをたくさん試した後。これは私にとってはうまくいきます。

まず、ポッドプロジェクト用にx86_64を生成します!!!!

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ARCHS'] = "arm64 x86_64"
        end
    end
end

次に、VALID_ARCHSに「x86_64」を追加します

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.