アイリッジ開発者ブログ

アイリッジに所属するエンジニアが技術情報を発信していきます。

このAd Hocアプリはインストール可能か?

f:id:iridge-tech:20220202124513j:plain

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>

参考リンク

iOSのコード署名について - LINE ENGINEERING