埋め込まれたバイナリは親アプリと同じ証明書で署名されていません#
背景#
Xcode 10 以降、New Build System がデフォルトになり、コンパイル後にエラーが発生し続けます。
エラーメッセージ:Embedded binary is not signed with the same certificate as the parent app. Verify the embedded binary target’s code sign settings match the parent app’s.
eg:
しかし、Legacy Build System では問題ありませんでした。最初は強引に Legacy Build System に戻しましたが、具体的な原因を調べる時間がありませんでした。最近、時間ができたので、詳しく調べてみました。
过程#
多くの人が言っているのは、keyChain の証明書の信頼状態が正しくないため、システムのデフォルトを使用する必要があり、常に信頼するように強制してはいけないということです。しかし、私が確認したところ、私の証明書は確かにシステムのデフォルトの状態でした。
stackoverflow でiOS error “Embedded binary is not signed with the same certificate as the parent app”を見つけました。
ここで:
- 採用されたのは:widget target の Code Sign Identity が設定されていないか、main app target のものと一致していないこと。しかし、私の場合、確認したところ、状況が異なりました。エラーメッセージには違いがあり、Embedded Binary Signing Certificate: のところで、一つは Not Code Signed、もう一つは Software Signing なので、この解決策は私には合いませんでした。
- 二番目に支持されている答えは:keyChain の証明書の信頼状態が正しくないため、システムのデフォルトを使用する必要があり、常に信頼するように強制してはいけないということです。これもすでに確認済みで、私の正解ではありません。
- 三番目に最も支持された解決策は:Legacy Build System に戻すことでした。。。。私は以前はそうしていましたが、この問題を解決したいのであって、逃げたいわけではありません。また、New Build System を使用してどれだけコンパイル時間が短縮できるかも見てみたいです。
- 次に、widget の deployment target が main app よりも高いと言われましたが、これも私には関係ありませんでした。
- さらに、Watch target の”Build Settings”> “Valid Architectures” を
$(ARCHS_STANDARD) に変更するという提案がありましたが、私は直接下の人のを使ってコンパイルしたので、これを確認していません。しかし、この回答はコンパイル警告を消すために使いました。。。。別のブログで言われていました。
- 最後に、この回答者は main app target の Build Phases の中で、Embed App Extensions で、Copy only when installing にチェックを入れることを提案しました。最終的に、これが私の正解でした。
结果#
エラーに遭遇したら、慌てずにエラーメッセージを見て、その意味を理解し、他の人の解決策を検索する際には、エラーメッセージが同じかどうかを注意深く観察し、試してみてください。結果が合わなければ、落胆せずに、下を見て、一つ一つ注意深く見ていけば、必ず合う回答が見つかります。。。。。ハハハ