CatHand Blog

アプリ開発やMac弄り

Carthageでxcframeworkを作成する

Carthageでxcframeworkを作成できるようになりました。M1 Macで開発するにはライブラリのxcframework化はほぼ必須なので助かります。

github.com

既にCarthageのreadmeでは carthage update --use-xcframeworks を使うよう案内されていますが、現状最新のバージョン 0.36.0 ではまだ --use-xcframeworks オプションは使用できません。 --use-xcframeworks を試すにはソースからビルドしてインストールする必要があります。

/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を作るスクリプトを書きました。

gist.github.com

./make-xcframework.sh {AWSのプロジェクトパス} AWSS3

のようにして実行すると、 AWSS3.xcframework を作成できます。

Realmのシミュレータ向けframeworkにarm64アーキテクチャが含まれない

ソースからビルドしてみたりもしたんですがどうも含まれないようです(あまり追いかけていない)。実機やIntel Macではビルドできるんですが、M1 Macでシミュレータ向けリンクが通らないので困ります。

RealmとRealmSwiftのxcframeworkは↓からダウンロードできます。このxcframeworkにはシミュレータ向けのarm64アーキテクチャが含まれているので、ダウンロードしてそのまま使うことにしました。

realm.io

Realmをバイナリで使うようにしたところ、Bitriseのビルド時間が数十分短縮されました。