Xcodeからアプリを公開するためにProduct > Archiveを行うと、生成されるファイルがなぜかGeneric Xcode Archiveとなり(iOS App Archiveになることを期待している)OrganizerのOther itemsのカテゴリに振り分けられてしまうという症状に長いこと悩まされていました。
やっと解決することができたので、その方法をここに記そうと思います。
環境
Xcode 11.2.1
注意
筆者はReact Nativeでの開発をメインにやっているため、iOSネイティブのアプリ開発の知識やXcodeに対する知識が豊富ではありません。
この記事の内容自体はSwiftやObj-Cを使ったネイティブでのアプリ開発時にも役に立つと思いますが、念の為ネイティブでのアプリ開発にはそれほど詳しくない人間が書いているという点だけ了承した上でお読みください。。。
ぐぐった
この問題が発生した時にググったところ同じ症状の人をたくさん見つけることができました。
日本語の記事ではこちらの方や
アプリのArchiveでipaが作れなくて焦ったメモ - Qiita
Apple公式のドキュメントにも記載があります。
しかし上記記事たちで触れられている「Skip install」や「Heders」の設定を見ても、自分の場合特に問題がなく途方に暮れておりました。
生成されるGeneric Xcode Archiveの中身を見てみる
正常にiOS App Archiveと認識されるアーカイブとGeneric Xcode Archiveとして認識されてしまうアーカイブの中身を比べてみることに。
アーカイブの中身をみるには、XcodeのWindow > Organizerを開き、対象のアーカイブの上で右クリックをし、
Show in Finderを選択し
アーカイブを右クリックし、パッケージの内容を表示でOKです。
treeコマンド等で正常にアーカイブできる別のアプリと中身を比較してみると、
Productsディレクトリ以下にApplicationsのほか、 usrというディレクトリがあるのが確認できました。(正常なアーカイブには存在しない)
このusrディレクトリを掘っていくと、たくさんのヘッダーファイルが入っていることが確認できました。
これらのファイル名をXcodeのプロジェクト内で検索してみたところ(Command + Shift + Oでファイル検索できます)、特定のライブラリがヒットしました。(今回はSDWebImage)
どうやらSDWebImageのHeaderが怪しいというところまでこれであたりがついたので、SDWebImageを見てみたところ
こんな感じで、先ほどググった時の記事と同じような感じで、HeadersのPublicのところにヘッダーファイルが存在しました。
解決!
という感じで原因を特定しました。
今回原因となっていたSDWebImageは、開発しているアプリが依存しているライブラリが依存しているライブラリだったため、SDWebImageに依存しているライブラリのバージョンをあげて対応しました。(なんでこのバージョンだけこうなっていたのかよくわからんままですが…)
普段からiOSアプリをネイティブで開発している方々にとってはもしかしたら当たり前のことなのかもしれないですが、普段はReact NativeでJSを書いてる身にはなかなか苦しかったのでどなたかの役に立てば幸いです。