エラー内容
Xcode13からXcode14.2を使うようになって以下のエラーがでるようになった
Signing for "gRPC-C++-gRPCCertificates-Cpp" requires a development team. Select a development team in the Signing & Capabilities editor.
Firebaseのパッケージを使用していると起きるはず
とりあえずビルドが通るようにするには,SigningのTeamから任意のTeamを選択すればOK。
Podfileに追記して解決
毎回手動でやるのはめんどくさいのでPodfileに処理を追記する方法もあります。
そもそもdevelopment teamの設定を必須じゃないようにする場合
まずPodfileに以下を追記します。
post_install do |installer| installer.generated_projects.each do |project| project.targets.each do |target| if target.respond_to?(:product_type) and target.product_type == "com.apple.product-type.bundle" target.build_configurations.each do |config| config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' end end end end end
参考*1
その後
pod install
を実行します。
これは
config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
の行でやっているように、code signingを求めないようにしています。
手動でやったdevelopment teamの設定を自動化する場合
逆に手動でやっているdevelopment teamの設定を自動でやる場合は以下のようにする必要があります
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| if config.build_settings['WRAPPER_EXTENSION'] == 'bundle' config.build_settings['DEVELOPMENT_TEAM'] = 'YOUR_TEAM_ID' // 自分のチームID end end end end
参考*2
Unity側のPostProcecssでPodfileへの追記も自動化する
podfileに追記する方法だと、結局毎回のビルドごとにpodfileを開いて編集する必要があります。それだと結局手間がかかってしまうので、UnityのPostProcessBuildを使って上でやったPodfileへの追記も自動でやると完全に自動化できます。
UnityのPostProcessBuild*3は引数に数字を指定できますが、これは処理の順番です。
podfileはExternlDependencyManagerのIOSResolverで生成されているわけですが、その処理を見てみると https://github.com/googlesamples/unity-jar-resolver/blob/master/source/IOSResolver/src/IOSResolver.cs
// Order of post processing operations. private const int BUILD_ORDER_REFRESH_DEPENDENCIES = 10; private const int BUILD_ORDER_CHECK_COCOAPODS_INSTALL = 20; private const int BUILD_ORDER_PATCH_PROJECT = 30; private const int BUILD_ORDER_GEN_PODFILE = 40; private const int BUILD_ORDER_INSTALL_PODS = 50; private const int BUILD_ORDER_UPDATE_DEPS = 60;
このようにPostProcessBuildの引数が定義されているので、
private const int BUILD_ORDER_GEN_PODFILE = 40; private const int BUILD_ORDER_INSTALL_PODS = 50;
の間でPodfileに追記してあげれば動きそうです。
適当なクラスに以下のように記述します。
private const string AddPodfileContent = @" post_install do |installer| installer.generated_projects.each do |project| project.targets.each do |target| if target.respond_to?(:product_type) and target.product_type == ""com.apple.product-type.bundle"" target.build_configurations.each do |config| config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' end end end end end "; /// <summary> /// Post-processing build step to generate the podfile for ios. /// </summary> [PostProcessBuild(45)] // 40が生成で50がpod install実行 public static void OnPostProcessGenPodfile(BuildTarget buildTarget, string pathToBuiltProject) { if (buildTarget != BuildTarget.iOS) { return; } var podFilePath = GetPodfilePath(pathToBuiltProject); File.AppendAllText(podFilePath,AddPodfileContent); } /// <summary> /// Get the path to the generated Podfile. /// </summary> private static string GetPodfilePath(string pathToBuiltProject) { return Path.Combine(pathToBuiltProject, "Podfile"); }
これでビルドを実行すると、Podfileの記述も更新され、更新されたPodfileでpod installが実行されました。
おわり
公式の対応はよ