Xcode14から、Xcode Cloud経由でdSYMがFirebase Crashlyticsにアップロードされない問題を解決する方法となります。
Xcode14 と Bitcode
Xcode14のリリースノートです。
depressions
Starting with Xcode 14, bitcode is no longer required for watchOS and tvOS applications, and the App Store no longer accepts bitcode submissions from Xcode 14.
Xcode no longer builds bitcode by default and generates a warning message if a project explicitly enables bitcode: “Building with bitcode is deprecated. Please update your project and/or target settings to disable bitcode.” The capability to build with bitcode will be removed in a future Xcode release. IPAs that contain bitcode will have the bitcode stripped before being submitted to the App Store. Debug symbols can only be downloaded from App Store Connect / TestFlight for existing bitcode submissions and are no longer available for submissions made with Xcode 14. (86118779)
確かに、App Store Connect にアクセスすると、Xcode13でビルドされたビルドメタデータにはdSYMファイルがあることがわかりましたが、Xcode14でビルドしたものにはビルドメタデータには存在しませんでした。
Xcode13とXcode14 のビルドメタデータ
Xcode CloudへのdSYMアップロードの自動化
DSYMをCrashlytics向けにアップロードするプロセスを自動化するスクリプトを作成するには、このロジックをCIワークフローに組み込む必要があります。
XcodeCloudには、3種類のスクリプトがあり、それぞれ特定の時点で実行されます。カスタムビルドスクリプトの詳細と、それらをワークフローに追加する方法については、ドキュメントで詳しく説明されています。
以下のXcodeBuild後に実行されるスクリプトを使用します。
シェルスクリプト名 | トリガー | 用途例 |
---|---|---|
ci_post_xcodebuild.sh | XcodeBuild後に実行 | ビルド成果物を他サービスにアップロード等 |
以下の3つの環境変数を使用します。
CI_DERIVED_DATA_PATH
The path to the directory that contains your project’s derived data.CI_ARCHIVE_PATH
The path to the exported app archive that Xcode Cloud creates when it runs an archive action.CI_PRIMARY_REPOSITORY_PATH
The location of the source code in the temporary build environment cloned from the primary repository specified in the workflow, for example, /Volumes/workspace/repository.
環境変数 | 用途 |
---|---|
CI_DERIVED_DATA_PATH |
upload-symbols スクリプトをここから指定します |
CI_ARCHIVE_PATH | 新しいdSYMファイルを取得する場所です |
CI_PRIMARY_REPOSITORY_PATH |
GoogleService-Info.plist をここから指定します |
#!/bin/sh
set -e
if [[ -n $CI_ARCHIVE_PATH ]];
then
# 親ディレクトリに移動
cd ..
# Crashlytics dSYMs スクリプトを実行
$CI_DERIVED_DATA_PATH/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/upload-symbols -gsp $CI_PRIMARY_REPOSITORY_PATH/プロジェクト名/GoogleService-Info.plist -p ios $CI_ARCHIVE_PATH/dSYMs
else
echo "アーカイブパスが使用できないため、dSYMアップロードを実行できません"
fi
CI環境変数の確認方法
App Store Connectから環境変数の設定を確認することができます
CI_DERIVED_DATA_PATH
=/Volumes/workspace/DerivedData
CI_ARCHIVE_PATH
=/Volumes/workspace/build.xcarchive
CI_PRIMARY_REPOSITORY_PATH
=/Volumes/workspace/repository
重要
ci_post_xcodebuild.sh
を実行可能に変更します。次のコマンドで実行できます。
chmod +x ci_post_xcodebuild.sh