LoginSignup
1
1

More than 1 year has passed since last update.

Xcode13.3 + CarthageでXCframeworkへ移行

Last updated at Posted at 2022-04-09

Xcode13.3 + Carthageでビルド形式をframeworkからXCFrameworksに移行しました。

ポイント

  • carthageのビルドオプションに--no-use-binariesを指定
    • XCframework形式でバイナリ配布していないライブラリがあるため
  • General - Frameworks, Libraries, and Embedded Contentで、carthageで管理してるライブラリのEmbedを「Do Not Embed」から「Embed & Sign」に変更

Xcode12以降、Carthageでビルドが通らなくなり、以下のいずれかの対応が必要でした。

  • XCFrameworkに移行する
  • こちらの回避策のシェルでビルドする

XCode12の時はxcframeworkへの移行が一筋縄では行かなかったことがあり、回避策のシェルを使う形で対応していましたが、Xcode13へのアップデートで回避策を適用してもビルドエラーが発生するようになり*1、この機会にXCframeworkへの移行に再トライしました。

*1 現在はこちらのPRでXcode13向けの対応がされています

一応公式のREADMEでframework形式からXCFrameworks形式への移行手順の記載があるのですが、自分の環境では追加で対応が必要でした。

  • Carthage/Buildフォルダの削除
  • --xc-frameworksオプションを追加してビルド
  • Build Phaseからcarthage copy-frameworksの削除
  • General settingsのFrameworks, Libraries, and Embeddedで、frameworkを削除し、ビルドしたXCFrameworksを追加

carthageのビルドオプションに--no-use-binariesを指定

carthageはライブラリ提供元でバイナリが配布されている場合、ビルドが不要になることがメリットなのですが、framework形式のみで配布しているライブラリも沢山あります。

この場合、--xc-frameworksオプションを指定してもビルドが実行されず、XCFrameworkが生成されません。

--xc-frameworksと合わせて、--no-use-binariesを指定してバイナリは使用せずソースからビルドすることで、確実にXCFrameworkが生成されます。

carthage update --platform ios --use-xcframeworks —no-binaries

Embedded Contentを「Do Not Embed」から「Embed & Sign」に変更

General - Frameworks, Libraries, and Embedded Contentで、framework形式の場合は、Do Not Embedを選択していました。

Do Not EmbedのままXCFrameworkを指定するとビルドは通るのですが、起動するとライブラリが見つからずクラッシュします。

Library not loaded: @rpath/Apollo.framework/Apollo

実際にシミュレーターのディレクトリを見るとCarthageでビルドしたライブラリが含まれていない状態です。

XCFrameworkの場合は、Embed & Signに変更することで、ライブラリがバンドルされ、クラッシュしないようになりました。

スクリーンショット 2022-04-09 22.50.03.jpg

公式READMEのQuick Startには、XCFrameworkの場合はEmbed & Signを選ぶよう記載があるのですが、移行手順だけ見ていると見逃してしまいます。

XCFrameworkに移行できたので、M1 Macにも移行できる見通しが立ちました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1