Xcode Cloud を導入時のトラブルシューティング
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
参考
Trust & Enable
を突破する方法
Swift macros を追加した時に CI 上で 外部ライブラリの 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 においては前述の解決方法しかないと思われます。
参考
- Is there a way to programmatically allow (trust) the compiler plugin to run from the command line?
- Writing custom build scripts / Create a custom build script
There are no test bundles available to test.
エラーが発生する
Xcode Cloud 上で Unit 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