🌩️

Xcode Cloudビルドでのエラー対処

2024/02/22に公開

・SPMのPlugInsを利用する際のエラー

原因

ビルド中にbuild plug-insを実行するためには特定の権限が必要ですが、Xcode Cloudではこれらの権限が与えられていません。

解決策

プロジェクトルートに以下の内容でci_scripts/ci_post_clone.shを作成し、実行可能にします。

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を作成し、実行可能にします。

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が外部ライブラリである場合は、修正が必要です。

例:

参考: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

気になる点

IDESkipPackagePluginFingerprintValidatationIDESkipMacroFingerprintValidation はfingerprintのバリデーションをスキップする意味なのでfingerprintを探して見ると、ローカル環境で~/Library/org.swift.swiftpm/security/plugins.json~/Library/org.swift.swiftpm/security/macros.jsonにfingerprint情報が存在することが確認されました。

~/Library/org.swift.swiftpm/security/pluging.json
[
  {
    "fingerprint" : "879b85a470cacd70c19e22eb7e11a3aed66f4068",
    "packageIdentity" : "swiftgenplugin",
    "targetName" : "SwiftGenPlugin"
  }
]
~/Library/org.swift.swiftpm/security/macros.json
[
  {
    "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