しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

Excluded Architecturesをセットしないと動かない問題について調べる

CocoaPodsを使ってiPhoneアプリを開発していると下のようなエラーが出てシミュレーターで動かせない事があります

Could not find module 'SwiftDate' for target 'arm64-apple-ios-simulator'; found: x86_64-apple-ios-simulator, at: /Users/XXX/Library/Developer/Xcode/DerivedData/XXX/Build/Products/Debug-iphonesimulator/SwiftDate/SwiftDate.swiftmodule

そういった時、Xcodeの設定のExcluded Architecturesに下のようにarm64を除外する設定を追加すると動くようになります
今回はこちらについて少し調べてみました

そもそもarm64、x86_64、i386などとは何か

これらはCPUのアーキテクチャになります
そしてx86_64はx86とx64の2つの総称になります
また、x86_64はamd64という呼び方もします
x86は32ビット、x64は64ビットという違いです

i386は古いアーキテクチャで、今はx86_64が主流になっています
arm64は上記とは違うアーキテクチャになります
また、iPhone XS以降ではarm64eというarm64を拡張したアーキテクチャも使われています

それぞれの特徴

arm64は省電力性が重視される環境向けの64ビットアーキテクチャです
スマホなど電力が重要なシーンでよく使われます
1980代に作られており、様々なデバイスで活用されてきました

逆にx86_64はデスクトップPCやサーバーなど電力がそこまで重要ではないシーンで利用されています

各端末のアーキテクチャ

以前のMacはx64でしたがM1以降のMacではarm64を採用しています
arm64にした事によるのか、M1を搭載したMacでは省電力性が話題になりました

iPhoneでは初代からarm64が採用されてきました
余談ですがCPU自体は初期はサムスンのものを利用しており、iPhone 4で自社開発のA4が採用されました

Excluded Architecturesとは

改めてExcluded Architecturesについて調べてみました
Excluded Architecturesとはその名の通り、特定のアーキテクチャを除外するものです
ここでarm64で記載すればarm64やarm64eを除外してビルドされます

そうする事で、シミュレーター向けにx64のビルドが作成されてx64でシミュレーターが動きます
それによって下のような「arm64のライブラリがない」というエラーが出なくなります

Could not find module 'SwiftDate' for target 'arm64-apple-ios-simulator'

参考URL

CPUアーキテクチャの種類(x86, x64, arm) - わくわくBank

ARM64とx64

ARMアーキテクチャ - Wikipedia

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