XcodeBuildToolPluginをCI上でも使う
Xcode 14になり、Swift Package Plugin周りが拡充されてきました。中でもXcodeBuildToolPlugin
を利用することでSwift PackageのexecutableTarget
やbinaryTarget
のビルドツールコマンドをアプリのビルド時に実行することができるようになりました。
XcodeBuildToolPlugin
はProject > Build Phases > Run Build Tool Plug-ins で指定することで実行可能ですが、GitHub ActionsなどのCI上でxcodebuild
でビルドした場合に** TEST BUILD INTERRUPTED **
となってビルドに失敗する場合がありました。これは、外部ライブラリのPluginは危険(許可が必要)だということで、実行できないためのようです。
この回避方法は3つあります。
1つ目に、xcodebuild
でビルドする際に-skipPackagePluginValidation
オプションをつける方法です。これでPlugin実行権限の確認がスキップされます。
2つ目に、XcodeのUser DefaultsのIDESkipPackagePluginFingerprintValidatation
キーにYES
を設定する方法です。これも1つ目の方法と同様ですが、Xcode Cloudのようにビルド時にオプションを指定できない時に使える手です。
defaults write com.apple.dt.Xcode IDESkipPackagePluginFingerprintValidatation -bool YES
3つ目に、外部ライブラリのビルドツールの実行ファイルがArtifact Bundleとしてリリースされている場合に限りますが、それを用いたPluginをローカルのSwift Packageに追実装して使う方法です。ローカルPackageであれば開発者のソースの一部とみなされて実行権限の確認がパスされるようです。
Discussion