Carthageでxcframeworkを作成できるようになりました。M1 Macで開発するにはライブラリのxcframework化はほぼ必須なので助かります。
既にCarthageのreadmeでは carthage update --use-xcframeworks
を使うよう案内されていますが、現状最新のバージョン 0.36.0 ではまだ --use-xcframeworks
オプションは使用できません。 --use-xcframeworks
を試すにはソースからビルドしてインストールする必要があります。
- https://github.com/Carthage/Carthage からソースをpull
- ソースのルートで
make install
で /usr/local/bin/
にインストールされます。
早速使ってみたんですが、現状ではいくつか問題がありました。
carthage bootstrapだと--use-xcframeworksが(まだ?)無い
carthage bootstrap
できないのでCIサーバで実行するときや、ライブラリのバージョンを揃えたい時に困ります。
そもそもビルドした成果物があれば他の環境で再度ビルドする必要はないのでは?という気がしてきたので、作成されたxcframeworkをリポジトリに含めることにしました。
リポジトリに含めるのに抵抗がある場合は、xcframeworkをzip圧縮してDropbox等に置いておいて、CIサーバからはダウンロードして展開する等してやればよさそうです。
AWS SDKのビルドに失敗する
github "aws-amplify/aws-sdk-ios"
でAWS iOS SDKをビルドすると、AWSLexのビルドで失敗します。これは、AWSLexが依存している静的ライブラリにアーキテクチャが足りないっぽいです。
Carthageは特定のターゲットだけをビルドすることができず、プロジェクトに含まれる全てのターゲットを順番にビルドしていきます。このため、 SWSS3.xcframework
が欲しくてもAWSLexでビルドが止まってしまうのでAWSS3までビルドが進みません。
ので、特定のターゲットだけビルドしてxcframeworkを作るスクリプトを書きました。
./make-xcframework.sh {AWSのプロジェクトパス} AWSS3
のようにして実行すると、 AWSS3.xcframework
を作成できます。
Realmのシミュレータ向けframeworkにarm64アーキテクチャが含まれない
ソースからビルドしてみたりもしたんですがどうも含まれないようです(あまり追いかけていない)。実機やIntel Macではビルドできるんですが、M1 Macでシミュレータ向けリンクが通らないので困ります。
RealmとRealmSwiftのxcframeworkは↓からダウンロードできます。このxcframeworkにはシミュレータ向けのarm64アーキテクチャが含まれているので、ダウンロードしてそのまま使うことにしました。
Realmをバイナリで使うようにしたところ、Bitriseのビルド時間が数十分短縮されました。