はじめに
iOSアプリ開発において、Xcode11からSwift Package Manager(以下、SPM)を公式に使えるようになりました。
導入を検討している人も多いかと思いますが、躓いた箇所があったので対処法の一例としてメモ程度に残しています。
なお、今回の対処法は「Getting 'no such module' error when importing a Swift Package Manager dependency - Stack Overflow」に記述がありました。
What
新しくライブラリを導入するにあたりSPMで管理していく方針にしました。
XcodeでFile → Swift Packages → Add Package Dependency...
と順当にライブラリを取り入れるも
*.swiftファイルでimport Hoge
と書いてもbuildできず、No such Module
のエラーが出るばかりでした。
How
以下のスクリプトをTargets → Build Phases → New Run Script Phase
でCompile Sources
の手前に記述します
if [ -d "${SYMROOT}/Release${EFFECTIVE_PLATFORM_NAME}/" ] && [ "${SYMROOT}/Release${EFFECTIVE_PLATFORM_NAME}/" != "${SYMROOT}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}/" ]
then
cp -f -R "${SYMROOT}/Release${EFFECTIVE_PLATFORM_NAME}/" "${SYMROOT}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}/"
fi
今回はFix SPM
という名称にしました。
Why
SPMは暗黙的にXcodeプロジェクトのConfigurationを利用しており現状でデフォルトのRelease
とDebug
にしか対応していないようなので、ビルドしようとしているConfigurationと異なれば、Release用をコピーすることで解決しています。
Xcodeとしては既知の仕様らしいです。
参考: Custom build configuration names
また、上記サイトでは他の解決策も紹介されていたので是非参考にしてください
参考: Swift Package Hack - Álvaro Royo - Medium
現状はなんとかなりましたが、もっと最適な解決策があれば教えていただきたいです!
ありがとうございました!