事象: XCode9でビルドできない
Module compiled with Swift 3.1 cannot be imported in Swift 3.2
XCode9で既存のプロジェクトを開いてビルドしようとすると上記のエラーが出た。
毎年同じような事をやってる気がするので対処方法をメモしておく。
原因
importしようとしているライブラリがSwift3.1でコンパイルされている。
具体的にはcarthageで入れているパッケージが原因だったので、これを解消してやれば良い。
対処
環境としてはGM版をXCode-9.GMという名前で別に入れている状態だったので、コマンドラインツールを切り替えてから--nouse-binaries
オプションでcarthage update
する。
$ sudo xcode-select --switch /Applications/Xcode-9.GM.app/Contents/Developer
$ carthage update --platform iOS --no-use-binaries
※fastlaneでCarthageを利用してる場合はそちらも対応
ライブラリ自体がまだ対応されていない場合、branchがある場合などは適宜対応されているbranchesから取ってくるようにする。
例えばObjectMapperではPullRequestが出ている状態だったので、PullRequest元から取ってくるように変更した
#TODO: 暫定対応
#github "Hearst-DD/ObjectMapper" ~> 2.2
github "dclelland/ObjectMapper" "swift-3.2"
コマンドラインツールを元に戻す場合は以下
$ sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer