Hi!スマホ研究部iOSアプリ開発担当のToToDoDoです。

今回は僕が把握しているIPAファイルの知識共有したいと思います。
よろしくお願いします。

.ipaファイルはウィキペディアの定義で、iOSアプリのアーカイブのフォーマットです。 主に開発したアプリのアドホック版配布でよく使われていますが、 意外と知られていないことを整理しました。

・IPAファイルは、エンタープライズじゃなくてもOTA(Over The Air)で配布することができる

知らない度:★

IPAファイルを端末にインストールする方法として、昔はiTunes同期や、iPhone構成ユーティリティを利用するのは普通ですが、エンタープライズプログラムの普及に伴い、OTA形式の配布が流行り始めました。

実は、エンタープライズプログラムを利用しなくても、
OTA形式で配布することが可能です。
ただし、エンタープライズプログラムと違い、端末のUDIDを事前にiTunes Connectに登録しなければなりません。

OTA形式の配布方法については、こちらの記事をご参考ください。
https://qiita.com/nofrmm/items/0b89e3c87dfd4c115858

・IPAはただのZIPファイル

知らない度:★★

IPAファイルの拡張しを.zipに変更したら、ZIPとして解凍することができます。解凍したあとのIPAファイルの中に、こんなの構造になります。

※ IPAファイルの作成と配布は「SHENZHEN」というコマンドラインツールを利用すれば、より簡単にIPAファイルを作ることができます。
https://github.com/nomad/shenzhen

 

・Application Loaderでバイナリファイル申請に提出することができる

知らない度:★★

主にXcode4.3以降からiOSアプリの開発を始めた開発者にとって、 バイナリファイル提出イコールアーカイブ機能を使うことですが、 実はApplication LoaderというツールもXCodeと一緒配布されています。 ZIPした「アプリ名.app」ファイルは、このツールで申請に提出することができます。

・IPAファイルからResourceファイルを取り出すことができる

知らない度:★★★

IPAファイルの拡張しを.zipに変更して解凍したら、
・画像
・動画
・.plist
・SQLiteのDB
・HTML、Javascript
など静的なファイルを解凍されたフォルダから取り出して確認することができます。
出力したpng画像は転換しない限り、画像ビューワーアプリでは開けないですので、一般的に見れないことはありません。

IPAファイルの中身の確認と抽出に関して、「iExplorer」と「Crunch」はおすすめです。

「iExplorer」
https://www.macroplant.com/iexplorer/

「Crunch」
https://www.pragmaticcode.com/crunch/

 

・プッシュ通知の利用可否を確認できる

知らない度:★★★★

iTunes Connectでプッシュ通知をオンに変更したけど、
結局Provisioning Profileファイルのプッシュ通知設定がオフになっていることで、本番のアプリでプッシュ通知を利用できなかった経験がある方は、
申請する際にいつも不安を持っているかもしれませんが、
申請に提出する前のIPAファイルで、プッシュの利用可否を確認することができます。

確認方法としては、申請用IPAファイルを解凍した後の「アプリ名.app」ファイルの中から、.*.mobileprovisionファイルを取り出して、そしてテキストエディタで開いたら、下記添付キャプチャーのような文字列を確認できたら、Provisoning Profileのプッシュ通知設計がオンになっていることを判明できます。

そうしたらと安心に申請に提出することができます。

・登録されたUDIDが見れます

知らない度:★★★★

たまに、何で私だけがこのIPAファイルをインストールできないのということ起きていますが、上と同じく*.mobileprovisionファイルを取り出してテキストエディタので中身をちゃんと確認すれば、自分のUDIDが入っているかどうかを確認できます。

・IPAファイルの中のバイナリファイルは下記のツールで解析できる

知らない度:★★★★★

 

IPAファイルから取り出した「アプリ名.app」のフォルダの中に、{アプリ名}になっているバイナリファイルがあります。 このバイナリファイルは、下記のツールで解析することができます。

① otool
リンクしているライブラリ一覧やディスアセンブルしたデータを確認する事ができるコマンドラインツールです。

② nm
リンクしているシンボルテーブルを一覧で見れるコマンドラインツールです。

③ strings
オブジェクトやバイナリに含めれているObjective-Cのセレクタを出力できるコマンドラインツールです。

④ class_dump_z
バイナリファイルの中のクラスをDUMPしてクラスの構造を還元することができます。

 

以上、いかがでしょうか?