Open4
アーカイブビルドとバリデーションのつまづき知見
iOSのプロジェクトをアーカイブしてASCへのアップロードまでしたら色々とつまづいたのでメモ。今まで要件を満たしたプロジェクトに参加するだけだったので、何に気をつけるべきなのかわかってなかった…😇
Command SetOwnerAndGroup failed with a nonzero exit code
でアーカイブビルドが失敗する
⌘ + Q
でXcodeを完全終了しただけで直った🧐 調べた感じこのエラー文の原因も解決法も複数ありそうなので、あんまり参考にならないかも
Invalid large app icon. ... can’t be transparent or contain an alpha channel. ...
でアーカイブの検証に失敗する
エラー文の通り、アプリのアイコン画像にアルファチャンネルの情報が入っていたことが原因。画像にアルファチャンネルを含まない形式のもので差し替えて解決。PNGの画像で引っかかったけど、PNGでもアルファチャンネルの情報がなければ問題なかった
Invalid Bundle. ~.framework' contains disallowed file 'Frameworks'.~
でアーカイブの検証に失敗する
アーカイブ後のアプリの検証で発生。エラー文の通り、フレームワークにフレームワークが含まれていることが原因。動的フレームワークによるマルチモジュール構成を行うときのEmbedの関係が適切でなかった
Xcodeでターゲットに動的フレームワークを依存させる場合に以下のGUIをいじるが、
embedとは埋め込むという意味で、ターゲットの成果物にフレームワークを埋め込むかどうかを選択している。しかし以下のテクニカルノートによると、
iOSアプリにおいては他フレームワークを含むフレームワークはサポートされていないため、 Do Not Embed
を選択するのが正解だった。このままでは依存するフレームワークがどこにもいなくなってしまうので、モジュールの情報からビルドはできてもランタイムでクラッシュしてしまう。これを解決するためにアプリ側で Embed
してバンドルする必要がある
SwiftPMのマルチモジュール構成なら気にする必要もないのだけど…🥺