1. 前置き
開発部第1グループの西岡です。みなさんこんなことありませんか?
- Ad Hocアプリをお客様に展開したがインストールできないと言われた
- IPAファイル(iOSアプリの配布ファイル形式)がインストールできない
- DeployGate や Firebase App Distributionで配布したアプリがインストール不可となっている
今回取り上げたいこと
- ビルド後のIPAファイルを覗いてみる
- インストール可能な端末UDIDを確認する
- 後述するファイルに対象のUDIDが入っていなければ、インストール対象外の端末として認識されインストールできません
IPAファイルとは?
- Appleにより開発されたiOS系のスマートフォンやiPadで用いられる専用のソフトウェアで動作するファイル形式です
- IPAファイル自体はアプリケーションを含むアーカイブファイルの一種であり、実質的には一般で用いられている圧縮形式であるZIP形式のファイルです
拡張子は.ipaですが、実体としてはzip形式ということです。
端末UDIDとは?
- UDIDとは Unique Device Identifie の略です
- Apple社のiOS端末(iPhone/iPadなど)の個体ごとに割り当てられている識別コードです
iOSアプリを開発する際には、テスト用端末を登録するために必要なIDになります。
2. Try
IPAファイルは展開できます
例えば、Hoge.ipaというファイルだとします。
Macの「ターミナル」アプリを開き、以下のコマンドでipaファイルを展開できます。
unzip Hoge.zip
以上です!
Hoge.ipa Hoge.zip Payload - Hoge.app - embedded.mobileprovision // これがあります!
アプリ署名(Provisioning profile)の中身を見るには?
解凍されたPayloadの中にはHoge.app/embedded.mobileprovision
というファイルがあります。securityコマンドで以下のように叩きましょう。
security cms -D -i embedded.mobileprovision
.mobileprovision
ファイルはplist形式のフォーマットファイルです。
MyProject.ipaで出力例↓
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "<http://www.apple.com/DTDs/PropertyList-1.0.dtd>"> <plist version="1.0"> <dict> <key>AppIDName</key> <string>MyProject</string> <key>ApplicationIdentifierPrefix</key> <array> <string>HOGE</string> </array> <key>CreationDate</key> <date>2021-11-01T00:00:00Z</date> <key>Platform</key> <array> <string>iOS</string> </array> <key>IsXcodeManaged</key> <false/> <key>DeveloperCertificates</key> <array> <data>HOGE4TCCBMmgAwIBAg 略 KiAOiSKXHpScjz6KohU/nuZW/kpGa3WHjyz2EsHAbtGHR0fq</data> </array> <key>DER-Encoded-Profile</key> <data>HOGEmgYJKoZIhvcNAQcCoIIP 略 woYsfirGKZW0ucf4lV/FJOqEWBdpMpcFTbu5QqCrg=</data> <key>Entitlements</key> <dict> <key>aps-environment</key> <string>production</string> <key>com.apple.developer.networking.wifi-info</key> <true/> <key>application-identifier</key> <string>HOGE.com.myproject</string> <key>keychain-access-groups</key> <array> <string>HOGE.*</string> <string>com.apple.token</string> </array> <key>get-task-allow</key> <false/> <key>com.apple.developer.team-identifier</key> <string>HOGE</string> </dict> <key>ExpirationDate</key> <date>2022-07-01T00:00:00Z</date> <key>Name</key> <string>AdHocMyProject</string> <key>ProvisionedDevices</key> <array> <string>HOGE-000C0CE00000001A</string> <string>hogeabcdefghijklmn0000000011111111222233</string> <string>hoge99998888777766665555444433332222</string> </array> <key>TeamIdentifier</key> <array> <string>HOGE</string> </array> <key>TeamName</key> <string>MyProject Company</string> <key>TimeToLive</key> <integer>000</integer> <key>UDID</key> <string>hogehoge-0000-1111-2222-3333fugafuga</string> <key>Version</key> <integer>1</integer> </dict> </plist>
インストール可能な端末UDIDは?
ProvisionedDevices
という項目があり、そこの配列こそがインストール可能な端末UDIDとなります。
<key>ProvisionedDevices</key> <array> <string>HOGE-000C0CE00000001A</string> <string>hogeabcdefghijklmn0000000011111111222233</string> <string>hoge99998888777766665555444433332222</string> </array>