見出し画像

dSYMのアップロードでSPMを活用する #bitrise_meetup

こちらの記事はBitrise User Group Japan #5 にて登壇してきた内容を記事にしたものです。

振り返り

本題に入る前に軽く振り返りをしたいと思います。詳しくはこちらの記事を参照します。

こちらの記事でdSYMファイルをCrashlyticsにアップロードする処理を(ほぼ)自動化することをトライしてみました。しかし、実装内容に一部雑な部分がありました。今回はこの雑な部分をちゃんと実装してスッキリしたいなと思います。

雑な実装の内容

# Type と言うアプリではライブラリの管理をSwift Package Managerに任せています。しかし、上記の記事ではCrashlyticsのupload-symbolsコマンドを叩くためだけにCocoaPodsを利用していました。

use_frameworks!
target 'Type' do
 pod 'FirebaseCrashlytics'
end

また、キャッシュも無視していたため、無駄なfetchが発生していました。せっかくなのでちゃんとSwift Package Managerを活用したいと思ったのがこの発表の動機です。

Swift Package Manager経由でupload-symbolsを利用する

まずやることとしてBitrise上でSwift Package Managerのリポジトリをcloneするディレクトリを決定します。今回はPACKAGES_PATHと言う変数に ./clonedPackages/ と言うディレクトリ名を設定しています。

BitriseのEnv Varsの設定画面

次にXcodeでSwift Package Managerを利用するディレクトリを変更します。通常XcodeでSwift Package Managerを利用するディレクトリは ~/Library/Developer/Xcode/DerivedData/${PRODUCT_NAME}-${HASH}/SourcePackages/ に配置されます。これを手動で変更したい場合は xcodebuild コマンドの -clonedSourcePackagesDirPath オプションを利用することで変更することができます。
続いてSwift Package Managerのパッケージの依存関係だけを解決したいと思います。これは xcodebuil dの -resovePackageDependencies オプションを利用します。

xcodebuild -resolvePackageDependencies \
 -project $BITRISE_PROJECT_PATH \
 -scheme $BITRISE_SCHEME \
 -configuration Debug \
 -clonedSourcePackagesDirPath $PACKAGES_PATH

こちらのコマンドを利用したいコマンドを叩く前に実行しておきます。(注意事項としてxcworkspaceを利用している場合はprojectをworkspaceに変更して実行します。)最終的なスクリプトはこのようになりました。最後のxcodebuildコマンドを足しただけです。

bundle install
export FASTLANE_USER=$APPLE_ID
export FASTLANE_PASSWORD=$APPLE_PW
export SPACESHIP_2FA_SMS_DEFAULT_PHONE_NUMBER=$APP_PHONE_NUMBER
export DOWNLOAD_DSYMS_TEAM_ID=$APPLE_TEAM_ID
fastlane udpate_session
DSYMS_PATH=$(pwd)/dsyms/
mkdir $DSYMS_PATH
fastlane dsyms dest:$DSYMS_PATH
envman add --key DSYMS_PATH --value $DSYMS_PATH
xcodebuild -resolvePackageDependencies \
 -project $BITRISE_PROJECT_PATH \
 -scheme $BITRISE_SCHEME \
 -configuration Debug \
 -clonedSourcePackagesDirPath $PACKAGES_PATH

最後に Firebase dSYM Upload ステップの upload-symbols のパスを変更します。 $PACKAGES_PATH/checkouts/firebase-ios-sdk/Crashlytics/upload-symbols を利用するようにします。これでdSYMをアップロードする処理については完了です。

Firebase dSYM Uploadの設定画面

BitriseでSwift Package Managerをキャッシュする

先ほどの xcodebuild コマンドを叩く前に Bitrise.io Cache:Pull ステップを追加しておきます。

Bitrise.io Cahe:Pull

続いて xcodebuild コマンドの後で Bitrise.io Cache:Push ステップし、 Cache paths をこちらのように設定します。

$PACKAGES_PATH -> $BITRISE_PROJECT_PATH/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

最終結果です。実行するスクリプトの前後でキャッシュを利用するようにしています。

Workflow

まとめ

前回やり残していたSwift Package Managerに関する課題を解決することができました。また、Swift Package Managerでもキャッシュを利用することで実行時間の短縮にもつながります。これでスッキリとした気分でdSYMのアップロードをCIに任せられますね。

この記事が気に入ったらサポートをしてみませんか?