iOS7 以降で UDID をワイヤレスで確認する

iOS7 以降では iOS アプリでの UDID 取得ができなくなり、UDID を確認するためには、
iTunes か iPhone 構成ユーティリティを利用して、Mac と iPhone を繋いで確認する必要がでてきました。

母艦がない状態でもウェブ経由で UDID を確認する方法です。
iPhone にプロファイルをインストールすることにより、UDID を取得することができます。

プロファイルの例は以下のようになります。下記を、例えば udid.mobileconfig という名前で保存し、ウェブサーバーに配置します。

<?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>PayloadContent</key>
        <dict>
            <key>URL</key>
            <string>http://www.example.com/udid.php</string>
            <key>DeviceAttributes</key>
            <array>
                <string>UDID</string>
            </array>
        </dict>
        <key>PayloadOrganization</key>
        <string>Example, Inc</string>
        <key>PayloadDisplayName</key>
        <string>Example.com UDID Service</string>
        <key>PayloadVersion</key>
        <integer>1</integer>
        <key>PayloadUUID</key>
        <string>9CF421B3-9836-4454-BC8A-982CBD3C943C</string>
        <key>PayloadIdentifier</key>
        <string>com.example.profile-service</string>
        <key>PayloadDescription</key>
        <string></string>
        <key>PayloadType</key>
        <string>Profile Service</string>
    </dict>
</plist>

次に、http://www.example.com/udid.php のプログラムです。こちらは、端末から受け取ったレスポンスから UDID を抜き出して、画面に出力するコードとなります。こちらもウェブに配置します。

<?php

if (isset($_GET["udid"])) {
    echo("<html><body><h1>");
    echo($_GET["udid"]);
    echo("</h1></body></html>");
    exit();
}

$data = file_get_contents('php://input');

$plistBegin   = '<?xml version="1.0"';
$plistEnd   = '</plist>';

$pos1 = strpos($data, $plistBegin);
$pos2 = strpos($data, $plistEnd);

$data2 = substr ($data,$pos1,$pos2-$pos1);

$xml = xml_parser_create();

xml_parse_into_struct($xml, $data2, $vs);
xml_parser_free($xml);

$udid = "";
$iterator = 0;

$arrayCleaned = array();

foreach($vs as $v){

    if($v['level'] == 3 && $v['type'] == 'complete'){
    $arrayCleaned[]= $v;
    }
$iterator++;
}

$data = "";

$iterator = 0;

foreach($arrayCleaned as $elem){
                $data .= "\n==".$elem['tag']." -> ".$elem['value']."<br/>";
                switch ($elem['value']) {
                    case "UDID":
                        $udid = $arrayCleaned[$iterator+1]['value'];
                        break;
                    }
                    $iterator++;
}

header("Location: ". $_SERVER["REQUEST_URI"] . "?udid=" . $udid, true, 301);

ウェブ経由で udid.mobileconfig にアクセスすると、プロファイルのインストールを促され、インストールすると画面上に UDID が表示されます。