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'