iOS向けアプリをMac Catalyst対応にするまでに引っかかったこと


前置き

実際Mac Catalyst対応するにはMac向けのUI/UXを考える必要があるため、簡単ではないものの
iOSエンジニアがMac向けのアプリをより簡単に作れるようになるのは魅力的です。
業務ではまず触れる機会はないのですが、趣味で開発しているアプリをMac対応することしたので
その際に引っかかったポイントを随時書いているのが本記事です。

トラブルシューティングの対応内容は、プロジェクトによって状況が異なる場合もあるので
参考にならないこともあるかもしれませんが、ご了承ください。。

Code signing "app-name.app" failed.

Codesign系のエラーでまず引っかかりました。
エラーログは下記のような感じ。

2021-02-02 15:05:51 +0000  /var/folders/rr/tkpws2d55h1_t3zgpx_psjy80000gn/T/XcodeDistPipeline.~~~no7TwZ/Root/Applications/hogehoge.app: replacing existing signature
2021-02-02 15:05:51 +0000  /var/folders/rr/tkpws2d55h1_t3zgpx_psjy80000gn/T/XcodeDistPipeline.~~~no7TwZ/Root/Applications/hogehoge.app: code object is not signed at all
2021-02-02 15:05:51 +0000  /usr/bin/codesign exited with 1

対応としては、Enable BitcodeNoとすることで署名に成功しました。
下記の投稿ではXcodeのひとつのバグという風に記載されていました。
Catalyst app with framework won't codesign - Apple Developer Forum

フォーラムの投稿ではFrameworkを利用しているため自動署名に失敗しているようでしたが
今回開発したアプリではサードパーティのFrameworkを利用していませんでした。
ただ、Metalは利用しておりMetal向けの生成ファイル絡みで署名が失敗する要因となったのではないかと思っています。

ITMS-90242 LSApplicationCategoryType Keyの設定漏れ

Mac向けアプリには、アプリのカテゴリをinfo.plistに含める必要があります。
LSApplicationCategoryType | Apple Developer Documentation
上記のドキュメントからアプリに最も近いカテゴリを選択し、info.plistに追記します。

ITMS-90257 The bundle is invaild

これは完全に私の管理ミスなのですが、CFBundleVersionのフォーマットに則っていないVersionを指定していたため起きていました。
Versionを3.0.0 BuildVersionを3.0.0.1とBuildVersionは4つのピリオドで区切った整数で最後の4つ目の整数でBuild番号を管理していました。(Test flightの段階でバイナリに不具合が見つかったらBuild番号をあげるような運用)
iOSでのアーカイブ時は問題ないのですがMac版のアーカイブ時にはフォーマットが適切でないことから弾かれるようです。

本来は、

  • 最初の数字は最新のメジャーリリースを表し、最大長4桁まで
  • 2番目の数字は、最新の重要な改修を表し、最大長は2桁まで
  • 3番目の数字は、最新のマイナーなバグ修正を表し、最大長は2桁まで

のルールで決めるべきものだそうです。
また開発時に向けて更新される番号の後にサフィックスを付与することができるとのことでした。
付与できるサフィックスは、d,a,b,fcの4つ。
サフィックス後ろには数字を付与することができ、BuildVersionを示すことができます。
Build Versionの最大値は255まで
アプリリリースの際はサフィックスを削除することが必要になるとのことでした。

CFBundle Version - Apple document archive