Xcode Cloudビルドでのエラー対処
・SPMのPlugInsを利用する際のエラー
原因
ビルド中にbuild plug-insを実行するためには特定の権限が必要ですが、Xcode Cloudではこれらの権限が与えられていません。
解決策
プロジェクトルートに以下の内容でci_scripts/ci_post_clone.sh
を作成し、実行可能にします。
#!/bin/zsh
defaults write com.apple.dt.Xcode IDESkipPackagePluginFingerprintValidatation -bool YES
chmod +x ci_scripts/ci_post_clone.sh
参考:【Xcode Cloud】Run Build Tool Plug-insを追加すると失敗する #Swift - Qiita
・Swift Macrosの利用に関するエラー
原因
ビルド中にSwift Macrosを実行するためには特定の権限が必要ですが、Xcode Cloudではこれらの権限が与えられていません。
解決策
プロジェクトルートに以下の内容でci_scripts/ci_post_clone.sh
を作成し、実行可能にします。
#!/bin/zsh
defaults write com.apple.dt.Xcode IDESkipMacroFingerprintValidation -bool YES
chmod +x ci_scripts/ci_post_clone.sh
How do I trust a swift macro targe… | Apple Developer Forums
参考:・SPMのPlugInsにおけるatomicな書き込みに関するエラー
原因
SPMのPlugInsでファイルに書き込む際にatomicオプションを使用するとエラーが発生します。
(サンドボックスの制限によるもの?)
解決策
atomicオプションを除外して書き込みを行います。
ただし、利用中のPlugInsが外部ライブラリである場合は、修正が必要です。
例:
- ✅ data.write(to: url)
- ✅ string.write(toFile: path, atomically: false, encoding: .utf8)
- ❌ data.write(to: url, options: .atomic)
- ❌ string.write(toFile: path, atomically: true, encoding: .utf8)
Plugins can no longer access output locations on an external drive · Issue #6948 · apple/swift-package-manager
参考:・SPMのPlugInsでのリソースファイルの書き込みに関するエラー
原因
SPMのPlugInsが.executableTarget
でビルドされた実行ファイルでリソースファイルを書き込もうとした際にエラーが発生します。
(実行ファイルが見つからない?)
解決策
- リソースファイルではなくソースコードとして書き込みます。
- ビルド済み実行ファイルの
.binaryTarget
を使用します。
ただし、利用中のPlugInsが外部ライブラリである場合は、修正が必要です。
XcodeCloudでのビルドが通らない · Issue #14 · cybozu/LicenseList · GitHub
参考:気になる点
IDESkipPackagePluginFingerprintValidatation
とIDESkipMacroFingerprintValidation
はfingerprintのバリデーションをスキップする意味なのでfingerprintを探して見ると、ローカル環境で~/Library/org.swift.swiftpm/security/plugins.json
と~/Library/org.swift.swiftpm/security/macros.json
にfingerprint情報が存在することが確認されました。
[
{
"fingerprint" : "879b85a470cacd70c19e22eb7e11a3aed66f4068",
"packageIdentity" : "swiftgenplugin",
"targetName" : "SwiftGenPlugin"
}
]
[
{
"fingerprint" : "856f9b8d82f6851b7f61ec4c5ce9e4c18ebbdb45",
"packageIdentity" : "swift-composable-architecture",
"targetName" : "ComposableArchitectureMacros"
},
{
"fingerprint" : "bba1111185863c9288c5f047770f421c3b7793a4",
"packageIdentity" : "swift-case-paths",
"targetName" : "CasePathsMacros"
},
{
"fingerprint" : "c31b1445c4fae49e6fdb75496b895a3653f6aefc",
"packageIdentity" : "swift-dependencies",
"targetName" : "DependenciesMacrosPlugin"
},
{
"fingerprint" : "bb063bd2bf86288b139a5b3987d6eaa2880f4e05",
"packageIdentity" : "swift-composable-architecture",
"targetName" : "PerceptionMacros"
},
{
"fingerprint" : "42240120b2a8797595433288ab4118f8042214c3",
"packageIdentity" : "swift-perception",
"targetName" : "PerceptionMacros"
}
]
Discussion