しばらくはcarthageでライブラリを更新するときは--no-use-binariesを付けたほうが良さそう

Thursday, March 24, 2016

今日、重い腰を上げて、メインのXcodeを7.3にして、Xcode7.2.1はリネームして保存し、
個人的に制作しているアプリやライブラリを少しずつSwift2.2対応させています。
といっても、大した対応はしなくて良さそうなのでホッとしています。

Carthage経由で入れたライブラリをビルドし直す

さて、Swift2.1.1→Swift2.2にしたということで、Carthage経由で入れているライブラリは一度ビルドし直さないといけないので、
buildコマンドか、アップデートの確認も兼ねてbootstrapかupdateコマンドを叩いてあげる必要があります。
(ライブラリの作者さんがSwift2.2対応をしている最新版をあげている可能性があるので、updateをおすすめします。)

$ carthage bootstrap
# or
$ carthage update --platform iOS

これで少し時間がかかりますが、順調にライブラリがビルドし直され、.frameworkが生成されていきます。
無事終わったら、プロジェクトを開いてビルドをします。すると…

場合によってはエラーが出る

もし、carthage経由で入れるライブラリのうち、ビルドしてframeworkを生成するのではなくて、
GithubのReleasesにあげているバイナリデータ(framework.zip)をダウンロードして展開するタイプのものがあった場合かつ、
そのバイナリがSwift2.2以下(Xcode7.3以前)でビルドして作成されたものだと、以下のようなエラーがでます。
エラーは、APIKitのv1.2.1のケースです。

Module file was created by an older version of the compiler; rebuild 'APIKit' and try again: /Users/user/src/project/Carthage/Build/iOS/APIKit.framework/Modules/APIKit.swiftmodule/x86_64.swiftmodule

–no-use-binariesをつける

デフォルトで、carthageでbootstrapやupdateコマンドを使う時は、バイナリデータがあればそっちを引っ張って来て展開するようになっているので、
--no-use-binariesを付けてあげます。

$ carthage update --platform iOS --no-use-binaries


バイナリデータ展開ができるものならその方がビルド時間が短縮できるので嬉しいのですが、
バイナリデータをGithubにあげている全てのライブラリがSwift2.2に対応したバイナリデータをあげているとは限らないので、
当分は--no-use-binariesを付けたほうが良さそうです。


carthage待ちの時間を有効活用する方法を考えよう。

techSwiftCarthage

PDFGeneratorを1.1.3にアップデートしました!

[Swift] AnyGeneratorの今後