いきなりですが、
この度Xcode10にアプデすることにしました。(旧バージョンはXcode9.4)
iOS開発者ならライブラリとSwiftとのバージョン管理は嫌でも通らなければならない道ですが、
毎回下記のエラーに毎度人生の時間を費やすので(これもライブラリ使っている代償)
この機会に記録にしようと考えました。
Module compiled with Swift 4.1 cannot be imported by the Swift 4.2 compiler: ~~~
原因
コンパイルしてるバージョンとimportしてるバージョンの差分がある
って言われており、Carthageで入れているパッケージ周りでよくこのエラーが起きます。
解決策
まず、選択しているXcodeのバージョンが正しいか確認します。
$ xcode-select -print-path
...
/Applications/Xcode.app(⇦注目)/Contents/Developer
ここで対象のXcodeのバージョンがXcode10.0.appに相当するものになっていれば大丈夫です。
もし対象のバージョンが古いものだった場合は、
$ sudo xcode-select -switch /Applications/Xcode10.0.app(⇦ここ)/Contents/Developer
で、Xcode10.0.appに相当するものに選択を変更してあげましょう。
実際のアップデート
他のサイトなどを見ていると、下記のコマンドを推奨してたりします。
(実際にアップデートしても良いのですが、)
方法①
$ carthage update
↑このまま打ってしまうとビルド時間がながくなるなり、10分~15分は平気で時間をとられてしまうので
方法②
$ carthage update RxSwift
みたいな感じで RxSwift
の箇所をアップデートしたいライブラリ名に変更してあげれば、対象のライブラリのみアップデートできます。
(あ、コマンド打つ前に...)
プラットフォームの指定
ちなみに上記のコマンドだと、iOS以外のプラットフォーム向けにもビルドが走ってしまします。
時間がかかってしまい勿体無いので、以下のオプションでプラットフォームを指定出来ます。
carthage update --platform iOS,macOS(⇦カンマ区切りでプラットフォームを指定) RxSwift
したがって (iOSを対象にしてビルドを行うのであれば)
carthage update --platform iOS RxSwift
で問題なくアップデートが走るはずです。
以上で、大体のライブラリはビルドできるようになったのではないでしょうか。
上記の手順でうまくいかない場合は、XcodeやMacを再起動するなどしてみてください。
前職は金融系の開発をしていたので、外部のライブラリを使うことは限られていました。
現在はtoCのプロダクトを開発しており、開発効率を上げるために様々なライブラリを使っています。
つまり、バージョン管理は避けては通れない道ということなので頑張っていこうと思います。
ではこの辺で失礼します。