要約
私達の場合、APFSのファイルシステムのMacで、アプリの画像音声リソースのファイル名に日本語の特定の文字 (詳細には「び」「パ」など、濁音、破裂音を表すひらがな、カタカナ等) を使っていたのが原因だった。HFS+でフォーマットした外部ディスクに一度日本語のファイル名が入ったファイル一式を移し、それらを再びMacに戻してから、再度アプリをアーカイブし、アップロードすることで問題が解決した (以下解決までの経過を詳しく記述)。
困ったこと: Code Signingには問題なさそうなのに、何度やってもアップロード後バイナリが無効にされてしまう
CertificateやProvisioning Profileを何度確認しても問題なさそうなのに、それでもアプリをアップロード後に ITMS-90035: Invalid Signature のエラーでバイナリが無効にされてしまい本当にこまった。
AppleのTechnical Notes/QAを確認
Troubleshooting Failed Signature Verification
https://developer.apple.com/library/archive/technotes/tn2318/_index.html#//apple_ref/doc/uid/DTS40013777-CH1-TNTAG38
上記Tech NotesにあったCode Signingのチェックツールを走らせても問題なし。
ただ、Code Signingの不備以外の理由、たとえば、アプリ名(.ipaファイルの名前)に"?"などの特殊文字がはいっていても、このInvalid Signatureエラーではねられるということが書いてあった。当該アプリには特殊文字は使われていなかったのであてはまらなかったが、Code Signingの問題以外でリジェクトされることが分かったのは大きな前進。
Resolving the Invalid Signature binary rejection
https://developer.apple.com/library/archive/qa/qa1510/_index.html
アプリ名の特殊文字以外にも、Dot Files (HFS+でフォーマットしたディスク以外から、zipしないでもってきたXCodeのプロジェクトで生じる "._" からはじまる名前のファイル) が問題を起こすと書いてあった。指示通り、この問題を解決するというdot_cleanというユーティリティーをTerminalからXcodeプロジェクトの各ディレクトリに対して走らせたりもしたが、問題は解決しなかった。
日本語ファイル名の画像音声リソースを取り除くとうまくいった(ええ…)
プロジェクトで使われているファイル名があやしいという仮説から、試しに日本語ファイル名が使われている画像および音声リソースを全て取り除いた後にプロジェクトをクリーン、再アーカイブしてからアップロードすると、ついにうまくいった。しかし管理上、リソースのファイル名に日本語を使えないのは大変不便。やっぱりこまった。
[追記]問題が発生するのは、ファイルに日本語の特定の文字 (「び」「パ」など、濁音/破裂音を表すひらがな、カタカナ等) が含まれている時のようだ。
日本語のファイル名を変えることなく、アップロードに成功
Apple Developer Forums - Re: Appstore Deployment keeps Failing(Sealed Resource missing or invalid)
https://forums.developer.apple.com/message/365325#365325
このフォーラムで、db3dさんによる
"Copying the offending files to a HFS+ disk image and back to APFS solved the issue."
という記述を発見。そのとおり、Disk UtilityのEraseから外付けUSBドライブをHFS+(Mac OS Extended Journaled)にフォーマットし、そこに日本語ファイル名のリソース一式がはいったディレクトリを移動、その後すぐMacの元の場所にもどしてから、Xcodeのプロジェクトを再度アーカイブ、アップロードしたら、なんとうまくいった。
しかもデフォルトではGitでファイル名の差分はまったくでない。同じくdb3dさんの記述で、
"... where a command ('git config --replace-all core.precomposeunicode false') allowed Git to handle the changed files. "
とあったので、指示のとおりにコマンドを走らせGitのconfigを変更したところ、ファイル名の差分が確認できるようになったようだ。
結局運用がちょっと難しくなるので、可能ならばリソース名等々はいまのところAlphaNumeric(とアンダースコア等)以外は避けたほうが安全なのかもしれない。Appleへのバグ報告もされている(私もDupeする予定)が、是非早くなおしてほしい問題だと思う。
#思えば
iOS 10.3のリリース時、APFSのUnicode正規化問題で大変苦労した思い出があった。
Windowsからコピーされた、濁音、破裂音を表すひらがな、カタカナが入ったファイルが認識されなくなるという問題が、APFSが導入された直後のiOS 10.3で発生し、アプリの修正対応に苦慮した (現在は修正されている)。
Forumでも指摘されているが、本問題はどうやらこのUnicode正規化問題の影響のように思える(App Store Connectのサーバーは、HFS+のファイルシステムで動いている?)。
参考: APFSで再燃したNFD問題
https://qiita.com/dankogai/items/6564a5a92288dd2a35d7
ネットでエキスパートの方々が知見を共有してくれたおかげで解決できたのを覚えている。
#教訓
エラーコードやエラーメッセージを常に信用してはいけない