iOSITネタ

Xcode11のプロジェクトをXcode12でビルドするとシミュレータだけが動かない件

実機では動くのにシミュレータだけは動かない

Xcode12からはVALID_ARCHSが非推奨となり、Architecturesが$(ARCHS_STANDARD)となりました。

これは”armアーキテクチャ”で”x86_64アーキテクチャ”のシミュレータにビルドしようとしていることが原因になります。そんな設定変更した覚えがないのに、ね。Xcode12ではこれがデフォルトなのです。

おそらくM1チップ macなら問題ないので、Appleの姿勢が強く出てます。

新しいBuild Setting項目 “Excluded architectures”

従来はビルド時にVALID_ARCHSが指定されているので、有効なアーキテクチャでビルドを行うことができました。
Xcode12以降でVALID_ARCHSが廃止されARCHS_STANDARDに変わりました。そして標準のアーキテクチャはarmです。

何も設定をしなければarmアーキテクチャでビルドを行うようなっているのです。そして、新たにExcluded architecturesが追加され、ビルド対象に応じてアーキテクチャの除外設定をするための設定が追加されています。

以下のようにしてAny iOS Simulator SDKにarm64を追加することで、シミュレータへのビルド時にはarm64,arm64eのアーキテクチャが除外されて、x86_64アーキテクチャのバイナリが生成されるという仕組みになっているようです。

あと、User-DefinedにVALID_ARCHSがある場合は、削除が必要です。

これデフォルトで入れてしまうとM1 macでビルドできないということが起きるんでしょうかね…後ろを振り返らないAppleの姿勢。

CocoaPodsでライブラリを入れていると更に混乱する

突然あらわれる”No such module ‘XXXXX’

うそだろ、さっきまで参照できてたんだぜ。何なら今でも実機なら参照できるんだぜ。

これも、原因は同じです。一番簡単なのはPodfileに以下の記述を追加することです。

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

一番最後にでも追記して、それからpod installを行います。
Xcodeでワークスペースを開いて、Podsのプロジェクトを見ると以下のような設定が追加されています。

これで、シミュレータに対してビルドを行うことができます。
おそらく最初にこの問題に遭遇するとどこから手を付けてよいかわからず混乱んするかと思います。順序としては

  • 本体のプロジェクトにExcluded Architecturesを追加する
  • User-DefinedにVALID_ARCHSがあれば削除する
  • CocoaPodsのPodfile記述に追記する、または手動でExcluded Architecturesを追加する。

となります。
Xcodeのビルドエラー内容はこの問題に対してあまり当てにはならないので、実機ビルドが出来るのであれば、あとは本問題だけが残っているということになるので、落ち着いて切り分けして対応をしていきましょう。

Carthageだとどうなるか

すんません、調べてません…

What's your reaction?

Excited
0
Happy
0
In Love
0
Not Sure
3
Silly
0

You may also like

ITネタ

ThinkStation P310 SFFを自作PC化する

こちらの記事で取り上げたLenovo ThinkStation P310 SFFを自作PC化したのでご紹介を。 必要なもの MicroATX対応ケース ATX電源 24pin→10pin変換コネクタ […]
AppleWatch

Apple Watch Series7 で健康管理を始めてみる

きっかけは深夜の胸の痛みからの救急搬送 遅くまで残業が続いたある日、就寝し始めたところに突然胸にはっきりとした違和感が。手を当ててみると心拍数が早い。 普段から図っていたわけではないが、それでも明らか […]

Leave a reply

メールアドレスが公開されることはありません。

More in:iOS