☁️

Xcode Cloud を導入時のトラブルシューティング

2023/11/14に公開

Xcode 内の Cloud タブの内容が更新されない

多分 Xcode を再起動するしかない気がします。。。

xcodeproj 内の Package.resolved は git の管理に含める(推奨設定)

Swift Package Manager は Package.resolved に各パッケージ依存関係の正確なバージョンが記述されています。 CI 環境でプロジェクトが予期しないバージョンのパッケージ依存関係でビルドされるのを防ぐために Package.resolved を git に含めて管理することが推奨されています。

xcodeproj 内の Package.resolved は次の場所にあります。

[appName].xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

参考

Swift macros を追加した時に CI 上で Trust & Enable を突破する方法

外部ライブラリの Swift macros を追加しているプロジェクトで、ビルドした際にローカルの Xcode では次のようなダイアログが表示されます。

このまま CI 上で xcodebuild を実行すると Target 'SFSymbolsMacroImpl' must be enabled before it can be used. というビルドエラーが発生します。

解決方法1: IDESkipMacroFingerprintValidation を YES に変更

xcodeproj(または xcworkspace) と 同階層ci_scripts ディレクトリを追加し、その中に次の内容の ci_pre_xcodebuild.sh を追加します。

#!/bin/sh

defaults write com.apple.dt.Xcode IDESkipMacroFingerprintValidation -bool YES

次にスクリプトファイルに実行権限を付与します。

chmod +x ci_pre_xcodebuild.sh

このスクリプトファイルは xcodebuild が実行される直前に実行され、IDESkipMacroFingerprintValidation の設定値によってダイアログの表示が抑制されます。

解決方法2: skipMacroValidation(ただし、Xcode Cloud では使用不可)

  • 別の解決方法は xcodebuild -skipMacroValidation のオプションをつけることでダイアログの表示を抑制できます。ただし、Xcode Cloud で実行する xodebuild にオプションを追加する方法はないはずなので Xcode Cloud においては前述の解決方法しかないと思われます。

参考

Xcode Cloud 上で Unit Test を実行すると There are no test bundles available to test. エラーが発生する

Multi-module 構成で Package.swift に testTarget を追加して、Test Plans でテストを実行しています。ローカルでの Unit Test は成功するのですが、この状態で Xcode Cloud > Actions > Test を追加して Xcode Cloud 上で Unit Test を実行すると次のエラーが発生しました。

xcodebuild: error: Failed to build workspace AppName with scheme SchemeName.: There are no test bundles available to test.

Target に Unit Testing Bundle を追加したら解消されました。

突然ビルドが通らなくなった

まずは Xcode のバージョンを確認

ワークフローの Xcode バージョンのデフォルト値は Latest Release になっています。そのため新しい Xcode がリリースされたら当然最新の Xcode が使用されることになるため、それに起因してビルドが通らなくなる可能性があります。突然ビルドが失敗するようになったら使用している Xcode のバージョンを確認してみましょう。

Discussion