12
08
2011
iPhone用GPSナビに挑戦 #2
実機テスト環境を整える
前回の記事ではCore Location frameworkのサンプルプログラム “LocateMe” をiPhoneシミュレータ上で動かしてみましたが、GPSや磁気コンパス、加速度センサーなどのデバイスに依存する部分はやはり実機で検証を行わないとアプリケーションを開発することはできません.
iPhoneでは実機にアプリケーションをインストールするには有料の iOS Developer program に加入して、実機にアプリケーションをインストールする環境を整えなければなりません.実はこの作業が結構大変で、iPhoneアプリの開発を始める上で最初の難関なのではないでしょうか.私はiPhone関係の日本語で書かれた開発本を殆ど持っていないのでハッキリとした事は言えませんが、実機開発やアプリケーション配布の詳細な手順について説明している本は殆ど見かけないような気がします.
Appleのデベロッパーのサイトを見に行っても、リソースが沢山ありすぎてどこから手を付けて良いのか分からないというのが実情ではないでしょうか.iOS関係の開発環境の設定は “iOS Dev Center” の “iOS Provisioning Portal” を通じて行うようになっているので、今回は自分の備忘録も兼ねて実機によるテスト環境を構築してみることにします.
実際に作業をやってみると、やはり実機の開発環境の構築だけでも相当面倒な手続きが必要ですね.実際にApp Store経由でアプリを配布する手続きはもっと面倒くさそうですね.この辺がiPhoneアプリの開発の敷居が高いと言われている所以でしょうか.

iOS Provisioning Portal を通じて開発環境を整える
Step 1. PKI証明書の設定
iOS Provisioning Portaのページの左側のペインに、”Home”, “Certificates”, “Devices”, “App IDs”, “Provisioning”, “Distribution” という項目が並んでいることと思います.開発環境の設定はこの順番に沿って行っていけば良いようになっています.
先ず最初はデベロッパのPKIによる認証手続きです.PKIによる認証手続で必要となる証明書の申請手続きなどは自分でSSLサーバを設置したことがあれば理解しやすいと思いますが、PKIの仕組みが理解できていないとこの手続きが何を意味しているのか分かり難いのですが、Mac OS X の場合はとりあえずGUIベースで作業を進めることができますので内容が理解できていなくても大丈夫です.
一連の手順はiOS Provisioning Portalページの右側のペインにある “How-To’s” のビデオを見てから行えば分かり易いでしょう.
1.”Keychain Access” ツールを用いて実機開発用の証明書発行要求(CSR)を作成する.
“Keychain Access” を起動し”Keychain Access”メニュー => ”Certificate Assistant” => “Request a Certificate From a Certificate Auhority…” を選びます.

証明書発行要求(CSR)を作成し、プライベートキーとパブリックキー〔公開鍵)をキーチェインに登録

メールアドレスとユーザ名(ADCに登録したメールアカウントと名前)を入力しディスクに保存する
キーサイズは2048、暗号化アルゴリズムは RSAを選択する
この一連の作業によって証明書発行依頼データファイル”CertificateSigningRequest.certSigningRequest” が作成されると同時に自分のloginキーチェインにプライベートキーとパブリックキーのペアが登録されます.
2.作成した証明書発行依頼(CSR)をAppleに送付し署名された証明書をダウンロードし、証明書をキーチェインに組み込む.

証明書発行依頼(CSR)をAppleに送付する

Appleから発行された証明書をダウンロードする(証明書の発行までは数秒〜数十秒程度要する)
ダウンロードした証明書 “developer_identity.cer” をダブルクリックすると証明書がキーチェインに登録されます.Appleの WWDR中間認証局証明書 “AppleWWDRCA.cer” についてもダウンロードして、キーチェインに信頼された中間認証局として登録しておきます.
尚、リクエストを送って結果が帰ってくる際はWEBブラウザの画面が更新されない用ですので、結果が帰ってこない場合は自分で画面を更新してみて下さい.

キーチェインに証明書がプライベートキーに紐付けられて登録される
以上で証明書関係の作業は終了です.尚、今回は開発用の証明書の作成ですが、全く同じ手続きでAppStore配布用の証明書も作成できますので、開発用の証明書と一緒に作成して登録してしまった方が良いかもしれません.
Step 2. 実機デバイス(iPhoneなど)の登録
開発したアプリケーションを実機にインストールするには、予め実際にインストールする機種の識別番号(Device ID) を個別に登録する必要があります.iOS Standard プログラムの場合は最大100台まで登録できるようです.
この作業は簡単で、iPhone, iPadをUSBコードで開発ホストマシンにつなぎデバイスの識別番号(Device ID) を取得します.デバイスの識別番号はXcodeの”Organizer” 取得した識別番号を iOS Provisioning Portal のDevices 登録画面で登録するだけです.

Xcode4のOrganizerを呼び出しデバイスの識別番号を調べる

デバイスの識別番号を登録
Step 3. アプリケーションID (App ID) の登録
iOSアプリケーションには、開発するアプリケーション毎にApp IDと呼ばれる一意な識別子を登録する必要があります.App IDの詳細についてはApp IDの説明を読んで理解しておく必要がありますが、とりあえず開発用に実機にインストールするだけであれば簡易的なApp IDの登録で構わないでしょう.
App IDの命名ルールで一般的に採用されていものとしては、”xxxxxxxxxx.ドメイン名の逆表記.アプリケーション名” という形式で記述する方法があります.xxxxxxxxxxの部分はAppleが自動的に付加する Bundle Seed ID と呼ばれる10桁の記号です.ドメイン名の逆表記の部分は、自分のドメイン名が “mycompany.co.jp” だとすると “jp.co.mycompany” のように記述します.アプリケーション名はそのアプリケーションに実態を表す英数字を付けておきます.この方法はAppleが推奨する方法で、後でApp Storeを通じて配布する予定が有る場合はこのルールに従うのが良いでしょう.
開発用であれば個々のアプリケーション毎に一々 App ID を登録するのは面倒ですので、ワイルドカード(*)を用いて簡略化することも可能です.例えば “jp.co.mycompany.*” のように記述すれば、”jp.co.mycompany.MyApp01″ や”jp.co.mycompany.TestApp” のように、1つのApp IDを複数のアプリケーションの開発に使い回しが可能です.
ドメインを全く記述しないで、単にアスタリスク(*)だけでも構いません. このApp IDとDevice ID,開発者IDを一セットにしたものが、この後設定するProvisioning ファイルと呼ばれるもので、実機にインストールされる仕組みになっており、不正なアプリケーションが実機にインストールされるのを防止する役目を果たしています.
困った事にこの App IDは一度登録すると削除する方法が無いようで、失敗した物まで残ってしまいますのでApp IDの登録は十分考慮した上で行った方が良いでしょう.

開発用にドメイン名+ワイルドカードを用いたApp IDを登録

とりあえず三種類のApp IDを登録してみた
Step 4. Provisioning Profile の登録
App IDの所で簡単に触れましたが、iOSのアプリ開発では、App IDとDevice ID,開発者IDが密接に紐付けられて不正アプリのインストールや流通ができないように設計されています.このApp IDとDevice ID,開発者IDのセットがProvisioning Profileで、任意の名前を付けて登録しておくことができます.
作成されたProvisioning Profileは手元の開発マシンにダウンロードして、XcodeのOrganizerを通して実機に組み込まれます.

Provisioning Profileを登録

作成されたProvisioning Profileを手元の開発マシンにダウンロードする

Provisioning ProfileはXcodeのOrganizerを通じて管理することができる
Step 5. XcodeのプロジェクトにProvisioning Profileとの紐付けを行う
最後に、Xcodeのプロジェクトに対してProvisioning Profileとの紐付けをきちんと行わないと実機へのインストールができません. 私自身Xcodeのプロジェクト設定をどのようにすれば良いのか不明な部分がありますが、とりあえず分かっている範囲で設定方法を説明します.最初はこの設定方法が良く分からなくて実機に上手くインストールする事ができませんでしたが、次の2つの点について正しく設定すれば大丈夫です.
・プロジェクトの “Build Settings” で ”Code Signing” の各項目に対して適切なProvisioning Profileを設定する.
・info.plistの”Bundle Identifier” にApp IDに記述した正しい文字列を設定する
ここではProvisioning Profileとして、 App ID が “xxxxxxxxxx.net.y2web.*” のセットを利用した場合の設定で説明します.
Info.plistの “Bundle identifier” 欄には “Bundle Seed ID” を記述する必要はありません.アプリケーション名が”LocateMe”の場合は、 “net.y2web.LocateMe” のように記述すれば良いでしょう.う.”net.y2web.${PRODUCT_NAME:identifier}” のように記述しておけば、プロダクト名が自動で付加されます.

Code Signingで”xxxxxxxxxx.net.y2web.*” のProvisioning Profileを設定

とりあえずDebug, Releaseにも同じProvisioning Profileを設定しておく(調査不足です)

Info.plist の”Bundle identifier” 欄に “net.y2web.アプリ名” を記述する
Step 6. Xcodeでビルドしてデバイスにアプリを送り込む
ターゲットデバイスの設定を登録した実機デバイスに振り向けてビルドすれば実機にアプリケーションが取り込まれ、そのアプリケーションが実行されます.アプリケーションを実機から削除するにはXcodeのOrganizer画面を通じて簡単に削除することができます.

iPhone3GSで実機テスト

LocateMeがインストールされている

位置情報の取得結果

精度は良くないかもしれない