2014年01月20日

Xcode 5.0.2でのiOS実機開発環境の構築

Mac mini(OS X Mountain Lion)上のXcode 4.6.3にiOS実機開発環境を構築しましたが、同じMac上に共存させているXcode 5.0.2でも実機デバイスを利用できるように環境設定を行いました。

01/14の記事で行った作業で、すでにキーチェーンへの証明書の登録は済んでいるので、あとはXcode 5.0.2側でProvisioning Profileを取得すれば良いだけです。まずは、Xcode 5.0.2を起動して、Organizerを開きました。すると、Xcode 4.6.3まで存在していた[Provisioning Profiles]カテゴリがOrganizerウィンドウから消えていることに気がつきました。Xcode 4のOrganizerと比較すると、ずいぶん寂しいウィンドウになってしまっていますね。
SCShot140120_0031-Xcode5.0.2_Organizer-Obtaihing_Provisioning_Profiles-991x694
メジャー・バージョンアップで仕様が変わったのかなぁと思いながら、ググって調べてみると、やっぱりXcode 5から[Preferences]ウィンドウに[Accounts]というタブが新設されて、Provisioning Profileの取得と確認はこの[Accounts]タブ画面から行うようになったらしいです。さっそく[Xcode]>[Preferences]メニューを開いてみると、確かに[Accounts]タブが存在していました。
SCShot140120_0004-Xcode5.0.2_Accounts-Obtaihing_Provisioning_Profiles-750x592
左下の[]をクリックすると[Add Apple ID]というメニュー項目が存在したので、これを選択してみました。すると、ADCアカウントのApple IDとパスワードを入力するように要求されたので、それらを入力すると、下のようにウィンドウが表示されました。
SCShot140120_9015-Xcode5.0.2_Accounts-Obtaihing_Provisioning_Profiles-750x550
これでXcodeにADCのアカウント情報が登録されたようです。上のウィンドウの右下に[View Details]というボタンが存在することに気づいたので、このボタンを押してみました。すると、証明書とプロファイルの一覧情報が表示された下のようなウィンドウが現れました。
SCShot140120_9041-Xcode5.0.2_Accounts-Obtaihing_Provisioning_Profiles-750x564
この状態で、すでに全プロファイルを取得できているようです(何だか、また新しいプロファイルが追加されていますね。これもXcode 5が追加しているのかなぁ?)。アカウント情報を登録した時点で、Xcodeは自動的にiOS Provisioning Portalからプロファイルを取得しているみたいです。iOS Provisioning Portalで新しいプロファイルを作成した場合は、左下のRefresh(丸い矢印の)ボタンを押せば、Xcodeがローカルなプロファイル情報を更新してくれるんだと思います。

上記の操作を行った後、iOS Provisioning Portalに登録済みのデバイスをMacに接続すると、Organizerは下のような表示になりました。
SCShot140120_9054-Xcode5.0.2_Organizer-Obtaihing_Provisioning_Profiles-991x694
Organizerが自動的にデバイスに適合するプロファイルを設定してくれました。

これで、Xcode 5.0.2でも実機デバイスが使えるようになりました。既存のプロジェクトを実機デバイス用にビルドして、ちゃんとアプリが動くこもと確認できました。

【参考ページ】

 【開発者向け】iOS7で変わったXcode5の気になる変更点まとめ|iPhoneアプリのアプリ学園
 [iOS]Xcode5でのProvisioning Profileの管理: Seesaa京都アプリエンジニアブログ

タグ:iOS Xcode
posted by とみやん at 10:57| Comment(0) | TrackBack(0) | モバイルアプリ開発 > iOS

2014年01月17日

Xcode 3.2.6をインストールせずにiOS 4.3 SDKを取得する方法

前記事に書いたとおり、デスクトップ機のMac miniにもiOS実機開発環境を構築しました。これによって、iPhone 3GS(iOS 5.0.1搭載)でアプリのデバッグや動作テストができるようになりました。私はもう一台のiPhone 3GSを持っていますが、こちらのファームウェアは現状iOS 4.3.3になっています。やはりiOS 4.3を搭載したデバイスを一台は残しておきたいので、こちらのiPhone 3GSは当面このまま使っていくつもりです。MBA11上のXcode 4.3.3にはiOS 4.3 SDKを追加済みでしたが、Mac mini上のXcode 4.6.3へは追加していませんでした。

Mac mini(OS X 10.8 Mountain Lion搭載)にはXcode 4.6.3とXcode 5.0.2を共存させています。今回iOS 4.3 SDKを追加したのはXcode 4.6.3の方です。問題はiOS 4.3 SDKをどこから取得するかですが、iOS 4.3 SDKが収納されているのはXcode 3.2.6〜4.1だけです。この中のどれかを一旦Macへインストールして、iOS 4.3 SDKだけをコピーすれば良いのですが、いずれのバージョンもMountain Lionには対応していません。Xcode 3.2.6を無理やりMountain Lionへインストールするという手(2012/07/06の記事を参照)もありますが、手間がかかるので、この方法はあまりやりたくありませんでした。以前Mountain LionとiOS 4.3 Simulatorの組み合わせについて色々と調べたことがあります。このときに、Xcode 3.2.6のDMGイメージからパッケージを抜き出して利用しているシェルスクリプト(参考ページAにこのシェルスクリプトが掲載されています)を見つけました。このシェルスクリプトを読んでいるうちに、同様の方法によって、Xcode 3.2.6のDMGイメージからiOS SDK 4.3を抽出できるのではないかというアイデアを思いつきました。このアイデアを実際に試してみたら成功したので、以下にその方法を紹介します。

  1. Xcode 3.2.6(Xcode 3.2.6 and iOS SDK 4.3 for Snow Leopard)のDMGファイルをダブルクリックして、マウントします。ターミナルから以下のコマンドを実行しても、同じ操作を行えます。
    % hdiutil attach ~/Downloads/xcode_3.2.6_and_ios_sdk_4.3.dmg

  2. マウントされたDMGボリューム上にPacakgesというディレクトリが存在しています(Finderからはこのディレクトリは見えません)。この中に、Xcode 3.2.6を構成する全パッケージが格納されています。iPhoneSDK4_3.pkgというファイルがiOS 4.3 SDKが収納されているパッケージです。以下のコマンドを実行して、このパッケージを展開します。
    % pkgutil --expand /Volumes/Xcode\ and\ iOS\ SDK/Packages/iPhoneSDK4_3.pkg /tmp/XC326
    % cd /tmp/XC326
    % gzip -dc Payload | sudo cpio -i

    上のコマンドを実行すると、/tmp/XC326の下にPlatformsusrの2つのディレクリトが作成されます。

  3. iOS 4.3 SDK一式はPlatforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk以下に格納されているので、このディレクトリをXcode 4.6.3へコピーします。
    % sudo cp -Rp Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs

  4. iPhoneSDK4_3.pkgの展開先として使った作業ディレクリトを削除します。
    % cd
    % sudo rm -rf /tmp/XC326

  5. Xcode 3.2.6のDMGボリュームをアンマウントします。以下のコマンドでも同じ操作が行えます。
    % hdiutil detach /Volumes/Xcode\ and\ iOS\ SDK

今回の作業対象はXcode 4.6.3でしたが、上記の方法によって、Xcode 4.2以降のすべてのバージョンへiOS 4.3 SDKを追加できるはずです。

上の操作を行った後、[ユーティリティ]>[システム情報]を開いて、Xcode 4.6.3のDeveloper Informationを確認すると、下のようになっていました。
SCShot140118_0010-Xcode4.6.3-Adding_iOS_4.3_SDK-OSX_MLion-750x761
xcodebuild -showsdks」コマンドでも同種の情報を確認できます。
% xcodebuild -showsdks
OS X SDKs:
Mac OS X 10.6 -sdk macosx10.6
Mac OS X 10.7 -sdk macosx10.7
OS X 10.8 -sdk macosx10.8

iOS SDKs:
iOS 4.3 -sdk iphoneos4.3
iOS 5.0 -sdk iphoneos5.0
iOS 5.1 -sdk iphoneos5.1
iOS 6.0 -sdk iphoneos6.0
iOS 6.1 -sdk iphoneos6.1

iOS Simulator SDKs:
Simulator - iOS 5.0 -sdk iphonesimulator5.0
Simulator - iOS 5.1 -sdk iphonesimulator5.1
Simulator - iOS 6.0 -sdk iphonesimulator6.0
Simulator - iOS 6.1 -sdk iphonesimulator6.1


この状態のXcode 4.6.3を使って、iOS 4.3実機デバイス用にアプリをビルドすることができるか試してみました。その結果は以下のようになりました。
 Apple LLVM compiler (Clang) 4.2 ARC関連のリンクエラーが発生(ビルド失敗)
 LLVM GCC 4.2  ビルド成功
 GCC 4.2  ビルド成功

コンパイラがClangの場合に発生するのは、下のようなエラーです。
SCShot140117_0020-Xcode_4.6.3-Adding_iOS_4.3_SDK-OSX_MLion-1140x619
上のエラーメッセージの中に存在する「arclite.o」というのは、多分iOS 5.0から導入されたメモリ管理機構ARC(Automatic Reference Counting)に関連するオブジェクトファイルではないかと想像しています。iOS 4.3ではARCは利用できないので、これを無効にする必要があるのではないかと思いますが、その方法が判りません(なぜClangのときだけ、arclite.oをリンクしようとするのか?)。このエラーはまだ解決できておらず、現在原因について調査中です。

コンパイラをLLVM GCCにすると、プロジェクトのビルドは問題なく通りました。ただし、[Build Settings]−[Architectures]の以下のどちらかの値を変えないとダメでした。
 [Build Active Architecture Only] No → Yes
 [Valid Architectures]  armv7 armv7s → armv7

この設定変更をやらないと、下のようなエラーが発生します(このエラーの解決方法は参考ページBに載っていました)。
SCShot140117_0026-Xcode_4.6.3-Adding_iOS_4.3_SDK-OSX_MLion-1140x428

最後のGCCは、2013/07/20の記事で紹介した方法によってXcode 4.6.3のCommand Line Tools(CLT)へ追加したコンパイラです(デフォルトのXcode 4.6.3ではGCCは利用できません)。こちらも一応プロジェクトのビルドは通りました。ただし、CLTにGCC 4.2を追加しただけではコマンドの参照関係でエラーが発生するので、Xcode側のファイル構成に特殊な工夫を施してこれを回避するようにしています。

プロジェクトのビルドが通ったLLVM GCCとGCCでは、アプリの実行イメージをiPhone 3GS(iOS 4.3.3搭載)へ転送して動作確認を行いましたが、いずれもOKでした。

Clangでビルドが通らないという問題は残っていますが、一応これでXcode 4.6.3でのiOS 4.3用実機開発環境は整いました。Mountain LionではiPad/iPhone 4.3 Simulatorは利用できませんが、実機デバイスが使えるので、iOS 4.3向けのアプリ開発はできるようになりました。

【2014/01/18 追記】

上の作業を行った後、Xcode 4.1(Xcode 4.1 for Lion)のDMGファイルに格納されているパッケージの内容を調べてみました。その結果、Xcode 4.1に収納されているiOS 4.3 SDKはXcode 3.2.6のものより若干バージョンが新しいことが判りました。そこで、Xcode 4.6.3に追加したiOS 4.3 SDKをXcode 4.1から抽出したものに置き換えました。以下に、その際の作業手順を記します。

  1. Xcode 4.1(Xcode 4.1 for Lion)のDMGファイルをダブルクリックして、マウントします。ターミナルから以下のコマンドを実行しても、同じ操作を行えます。
    % hdiutil attach ~/Downloads/installxcode_41_lion.dmg

  2. マウントされたDMGボリューム上のInstallXcodeLion.pkgというファイルにXcode 4.1の全パッケージが格納されています。ただし、このファイル自体もパッケージなので、以下のコマンドにより展開してやる必要があります。
    % pkgutil --expand /Volumes/Install\ Xcode/InstallXcodeLion.pkg /tmp/XC41
    % cd /tmp/XC41/InstallXcodeLion.pkg
    % gzip -dc Payload | cpio -i

    上のコマンドを実行すると、/tmp/XC41/InstallXcodeLion.pkgの下にApplicationsというディレクリトが作成されます。Xcode 4.1を構成するパッケージはApplications/Install\ Xcode.app/Contents/Resources/Packagesに格納されており、この中のiPhoneSDK4_3.pkgというファイルがiOS 4.3 SDKが収納されているパッケージです。以下のコマンドを実行して、このパッケージを展開します。
    % pkgutil --expand Applications/Install\ Xcode.app/Contents/Resources/Packages/iPhoneSDK4_3.pkg /tmp/XC41/pkg
    % cd /tmp/XC41/pkg
    % gzip -dc Payload | sudo cpio -i

    上のコマンドを実行すると、/tmp/XC41/pkgの下にPlatformsusrの2つのディレクリトが作成されます。

  3. iOS 4.3 SDK一式はPlatforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk以下に格納されているので、このディレクトリをXcode 4.6.3へコピーします。
    % sudo cp -Rp Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs

  4. InstallXcodeLion.pkgiPhoneSDK4_3.pkgの展開先として使った作業ディレクリトを削除します。
    % cd
    % sudo rm -rf /tmp/XC41

  5. Xcode 4.1のDMGボリュームをアンマウントします。以下のコマンドでも同じ操作が行えます。
    % hdiutil detach /Volumes/Install\ Xcode

下のスクリーンショットが、Xcode 4.1から抽出したiOS 4.3 SDKに置き換えた後のXcode 4.6.3のDeveloper Information([ユーティリティ]>[システム情報]の[Developer]カテゴリの表示情報)です。
SCShot140118_0012-Xcode4.6.3-Adding_iOS_4.3_SDK-OSX_MLion-750x761
Xcode 3.2.6のiOS 4.3 SDKを入れていたときのDeveloper Informationと比較すると、下のように変化していることが判るかと思います。
 Xcode 3.2.6 → iOS SDK 4.3: (8F191m)
 Xcode 4.1 → iOS SDK 4.3: (8H7)


【参考ページ】

  1. xcodelegacy/XcodeLegacy.sh at master ・ devernay/xcodelegacy ・ GitHub
  2. objective c - File is universal (three slices), but it does not contain a(n) ARMv7-s slice error for static libraries on iOS, anyway to bypass? - Stack Overflow


タグ:iOS Xcode
posted by とみやん at 11:13| Comment(0) | TrackBack(0) | モバイルアプリ開発 > iOS

2014年01月14日

iOS実機開発環境を複数台のMacに構築する

01/07から始まる続き記事でiOSアプリを実機デバイスで動かす方法について書きましたが、じつは、本サイトを開設して以来一番書きたかったのがこれらの記事でした。結構大きな労力を使いましたが、念願の記事を書けた達成感を味わっているところです(自己満足かもしれませんが・・・)。一度この実機デバイス環境を構築すると、いつでもiPad/iPhone/iPod touchでアプリを動かせるので、iOSアプリ開発への意欲が自然に高まってきます。iOS Developer Programの年間ライセンス料は8,400円(本記事投稿時現在)ですが、この環境を使い始めてから、その価値の大きさを日々実感しています。

さて、現在私がメインに使っているPCはMacBook Air 11"(Mid 2011)です。室内でも外出先でもこいつをメインに使っていて、もう一台のMac miniはサブ機的な使い方になってしまっています(MacBook Air 13", Late 2010と合わせて現在3台のMacを所有しています)。プログラム開発をやっていると、一台のマシンに現状の全ファイルを集約したくなるので自然にこんな風になります。せっかくデスクトップ機のMac miniを持っているので、こちらの方にもiOS実機開発環境を構築しておくことにしました(近いうちに、このMac miniはOS X Marveriksへアップグレードしようと考えています)。備忘録を兼ねて、その作業記録を記事に書いておきます。同じ事をやろうとしている人は結構いそうなので、そんな方には役立つ記事になるでしょう。なお、Mac miniで使っているiOS開発環境はXcode 4.6.3(iOS 5.0, 5.1, 6.0 SDKを追加済み)です。

■証明書の移植


2台目のMacにiOS実機開発環境を構築する場合、最初にやらなければならないのは証明書をそのMacへインストールすることです。作成済みの証明書のファイルはADCのiOS Provisioning Portalサイトから取得できるので、これをもう一台のMacへインストールすれば良いだけに思えますが、じつは、それだけではダメです。証明書に紐づいている秘密鍵がないと、証明書を参照することができないからです。01/07の記事の『開発用証明書の作成とインストール』でCertificate Signing Request(CSR)というものを作成しましたが、このCSRと一緒に秘密鍵が作成され、自動的にキーチェーンアクセスへ登録されています。もう一台のMacへ証明書をインストールするには、この秘密鍵を移植してやる必要があります。別のMacへ証明書を移植する手順を以下に説明します。

  1. 証明書をインストール済みのMacで[ユーティリティ]>[キーチェーンアクセス]を起動して、[証明書]カテゴリを開きます。

  2. 証明書エントリの左端が右向き三角1マークになっている場合は、それをクリックしてください。すると、下のような表示になります。
    SCShot140113_9117-Keychain_Access-Exporting_Certificate_Private_Key-900x555

  3. 開発用証明書にリンクされている秘密鍵のコンテキストメニューを開いて、その中から["<鍵の名前>"を書き出す]を選択します。
    SCShot140113_9125-Keychain_Access-Exporting_Certificate_Private_Key-900x555

  4. すると、下のようなファイル保存ダイアログが開きます。
    SCShot140113_0129-Keychain_Access-Exporting_Certificate_Private_Key-900x555
    適当なファイル名をつけて、[保存]ボタンを押します。すると、秘密鍵ファイルにパスワードを設定するように求められます。
    SCShot140113_0091-Keychain_Access-Exporting_Certificate_Private_Key-433x278.png
    任意のパスワードを入力して[OK]ボタンを押すと(上の両方のエディットボックスを空にすると、パスワードは設定されません)、さらに下のようなウィンドウが表示されます。
    SCShot140113_0077-Keychain_Access-Exporting_Certificate_Private_Key-433x233.png
    ログインパスワードを入力して[許可]ボタンを押せば、秘密鍵ファイルが作成されます(デフォルトでは、秘密鍵ファイルは~/Library/Keychainsに保存されます)。

  5. 配布用証明書も存在する場合は、上と同様の手順で、その秘密鍵ファイルを作成します。
    SCShot140113_9127-Keychain_Access-Exporting_Certificate_Private_Key-900x555

  6. 上で作成した秘密鍵ファイルを、実機デバイス環境を構築しようとしているMacへコピーします。

  7. 秘密鍵ファイルをコピーしたMacでキーチェーンアクセスを開き、[証明書]カテゴリを選択します。
    SCShot140114_0002-Keychain_Access-Importing_Certificate_Private_Key-900x555

  8. 開発用証明書の秘密鍵ファイルをダブルクリックするか、キーチェーンアクセスのウィンドウへドラッグ&ドロップします。すると、秘密鍵ファイルのパスワードを入力するように求めるウィンドウが表示されます。
    SCShot140114_0008-Keychain_Access-Importing_Certificate_Private_Key-443x227.png
    手順4で秘密鍵ファイルに設定したパスワードを入力して、[OK]ボタンを押します。すると、キーチェーンアクセスの[証明書]カテゴリに開発用証明書のエントリが追加されます(同時に、[鍵]カテゴリにも秘密鍵のエントリが追加されます)。
    SCShot140114_9010-Keychain_Access-Importing_Certificate_Private_Key-900x555

  9. 配布用証明書の秘密鍵ファイルが存在する場合は、上と同様の手順で、そちらもキーチェーンアクセスへ追加します。
    SCShot140114_9025-Keychain_Access-Importing_Certificate_Private_Key-900x555
    これで、新しいMacへ証明書をインストールできました。


■Provisioning Profileの取得


キーチェーンアクセスに証明書が登録できたら、後はProvisioning Profileをインストールしてやれば、Xcodeで実機デバイスが使えるようになります。この作業はOrganizer(Xcodeに含まれているツール)単独で行うことができます。iOS Provisioning PortalからProvisioning Profileのファイルを取得しておく必要はありません。
  1. Xcodeを起動して、[Window]>[Organizer]メニューを選択します。

  2. Organizerのウィンドウが開いたら(Organizerウィンドウの上部に並んでいるボタンのうち[Devices]が選択されていない場合は、同ボタンを選択してください)、左側の[LIBRARY]−[Provisioning Profiles]を選択します。
    SCShot140114_0027-Xcode4.6.3_Organizer-Refreshing_ProvProfiles-991x694.png
    上のウィンドウの右側エリアの右下に存在する[Refresh]ボタンを押します。

  3. すると、OrganizerはiOS Provisioning Portalへログインしようとします。下のようなウインドウが表示されたら、自分のADCアカウントのApple IDとパスワードを入力します。
    SCShot140114_9029-Xcode4.6.3_Organizer-Refreshing_ProvProfiles-991x694.png
    すると、OrganizerはiOS Provisioning Portalから全プロファイルを取得する処理を開始します。しばらく待つと、下のように[LIBRARY]−[Provisioning Profiles]ウィンドウの右側エリアにプロファイル情報が追加されます。
    SCShot140114_9062-Xcode4.6.3_Organizer-Refreshing_ProvProfiles-991x694.png
    これで、新しいMacへProvisioning Profileがインストールされました。

  4. ここまでの操作が終わったら、実機デバイスをMacへ接続します。すると、Organizerウィンドウの左側の[DEVICES]エリアにそのデバイスのエントリが追加されます(デバイス名は自動的にiOS Provisioning Portalに登録済みの名前になります)。
    SCShot140114_9063-Xcode4.6.3_Organizer-Refreshing_ProvProfiles-991x694.png
    追加されたデバイス名の右横に存在するマークの色がグリーンで、右側エリアの[Provisioning]に値が設定されていることを確認してください。Xcodeでアプリを転送して実行できるのは、この状態のデバイスだけです。


以上の操作によって、新しいMac上にiOS実機デバイス環境を構築することができました。後は、01/09の記事で説明した『Xcodeの実機デバイス用設定』の手順6以降に従って、実機デバイス用にプロジェクトを設定してやれば良いだけです。プロジェクトの設定を変更したら、実際にアプリが実機デバイスで動くか確認してみると良いでしょう。

【2014/01/15 追記】

上記の『Provisioning Profileの取得』の手順3で取得したプロファイルの中に、自分で作成した憶えのない「iOS Team Provisioning Profile: *」という名前の開発用プロファイルが存在することに気づくかと思います。これはOrganizer(Xcode)が自動的に作成するプロファイルのようです。

iOS Provisioning Portalサイトで確認すると、下のようなApp IDとProvisioning Profileが追加されていました。
ASShot140114_9017-ADC-Examining_AppID_ProvProfile_Xcode_Managed-1000x914.png
ASShot140114_0019-ADC-Examining_AppID_ProvProfile_Xcode_Managed-1000x745.png
このプロファイルに組み込まれている「Xcode iOS Wildcard App ID」という名前のApp IDはBundle IDが「*」に設定されています。これだとアプリ側のBundle IDがどんな値でも一致するので、すべてのアプリで使うことができます。つまり、プロジェクトのBundle IDを変更する必要がなくなります(Xcodeさん、賢いですね)。

これらはiOS Provisioning Portalで削除することもできますが、最高の汎用性を持つプロファイルなので、削除しないで残したまま利用した方が良いでしょう。

【参考ページ】

 GClue blog: Xcodeで実機デバッグをするまでの手順(スクリーンショット付き)
 デベロッパー登録を更新し2台目のMacにiOS開発環境をセットアップするためのメモ ≪ イナヅマTVログ
 iPhone開発 複数台のMacで開発 実機転送まで - WEB周辺の話

タグ:iOS Xcode
posted by とみやん at 09:31| Comment(0) | TrackBack(0) | モバイルアプリ開発 > iOS

2014年01月11日

IPPのiOSデバイスリスト情報を更新した

ページ前記事を書くにあたって、久しぶりにApple Developer Connection(ADC)のiOS Provisioning Portal(IPP)サイトにアクセスしました。新しく開発ターゲット機として使うiPhone 3GSを登録するためにデバイス一覧ページを開いたら、下のような警告メッセージが表示されていました。
ASShot140108_9015-ADC-Updating_iOS_Device_List-1000x745
そして、このページの右上の[]ボタンがグレーアウト表示になっており押せない状態でした。何だろうと思いながら、[Get Started]ボタンを押してみると、下のようなページに変わりました。
ASShot140108_9016-ADC-Updating_iOS_Device_List-1000x782
どうやら登録済みのデバイス情報を更新するように促しているようです。1台しかデバイスを登録しておらず、そのチェックボックスがすでにONになっていたので、このまま[Continue]ボタンを押しました。すると、さらにページは下のような変わりました。
ASShot140108_9019-ADC-Updating_iOS_Device_List-1000x809
このページの[I acknowledge that …]チェックボックスをONにして、[Reset]ボタンを押すと、最後に下のようなページが表示されました。
ASShot140108_0020-ADC-Updating_iOS_Device_List-1000x745
これで、iOS Provisioning Portalに登録済みのデバイス情報が更新されたようです。このページに表示されているように、iOS Provisioning Portalに登録できるデバイスは年間100個までです。

デバイス一覧ページに戻ると、右上の[]ボタンが押せるようになっていました。
ASShot140108_9021-ADC-Updating_iOS_Device_List-1000x745
最初のページの警告メッセージに「Reset ...」という単語が含まれていたので、一瞬の全デバイス情報が削除されてしまうのかと思ってしまいました。

どうやら一年に一回iOS Provisioning Portalに登録済みのデバイス情報を更新しなければならないようです。iOS Developer Program年間ライセンスの更新時に登録可能なデバイス数がリセットされるので、それに伴って、既存のデバイス情報も更新する必要があるのでしょう。新しいデバイスを登録したい場合は、上の操作を行えば良いだけです。

【参考ページ】

 iOS Dev Center のデバイスリスト更新 | 餃子マナー
タグ:iOS
posted by とみやん at 17:43| Comment(0) | TrackBack(0) | モバイルアプリ開発 > iOS

2014年01月09日

iOSアプリをiPhone実機で動かす (3)

前記事の続きを書いていきます(こんなに長い記事になるとは・・・)。

■Xcodeの実機デバイス用設定


これで、やっとiOSアプリをiPhone実機上で動かすための環境が整いました。実際にやった方は結構面倒だと感じたかもしれませんが、ここまでの作業で証明書や認証関連の準備は完了しています(私が初めてこの作業をやったときは丸一日かかってしまいました。失敗したくなかったので、Google先生に教えてもらいながら慎重に進めた所為もありますが・・・)。後はXcodeを使ってアプリを実機デバイスで動かすだけですが、ただし、iOS Simulatorでアプリを動かす場合とはいくつか異なる点があります。以下に、Xcodeで開発したアプリを実機デバイスで動かす際に行うべき手順について説明します(前の2つの記事と合わせてここまで読んでいただいた方。もう少しですから、がんばって最後まで読んでください)。
  1. ターゲットのiPhoneをMacに接続した状態で、Xcodeを起動します。

  2. 実機デバイスで動作させるiOSアプリのプログジェクトを開きます。
    SCShot140111_0012-Xcode4.3.3_Project-Setting_Build_Run_Device-1366x742

  3. [Window]>[Organizer]メニューを選択して、Organizerのウィンドウを開きます(Organizerウィンドウの上部に並んでいるボタンのうち[Devices]が選択されていない場合は、同ボタンを選択してください)。
    SCShot140109_9008-Xcode4.3.3_Organizer-Device_Use_Development-991x694
    左側の[DEVICES]カテゴリから対象デバイス(iOS Provisioning Portalに登録済みで、Provisioning Profileが未設定のデバイス)を選択し、右側エリアに存在する[Use for Development]ボタンを押します。

  4. すると、OrganizerはiOS Provisioning Portalにログインしようとします。下のようなウインドウが表示されたら、自分のADCアカウントのApple IDとパスワードを入力します。
    SCShot140109_9034-Xcode4.3.3_Organizer-Device_Use_Development-991x678
    OrganizerにProvisioning Profileが登録済みなら、対象デバイスに対して適用可能なProvisioning Profile(以降「プロファイル」)が自動的に選択されます。

    なお、Macに配布用証明書がインストールされていない場合、下のようなウィンドウが表示されます。
    SCShot140109_9039-Xcode4.3.3_Organizer-Device_Use_Development-991x678
    Organizerを使って配布用証明書を作成することもできますが、当面iOSアプリのデバッグや動作テストしか行わない(当面App StoreでiOSアプリ製品をリリースする予定はない)なら、このウィンドウでは[Cancel]を選択すると良いでしょう。開発用証明書と同様の手順でiOS Provisioning Portalサイトで配布用証明書を作成して、Macへインストールすることもできます。

    対象デバイスに適合するプロファイルが設定されると、Organizerは下のような表示に変わります。
    SCShot140109_9041-Xcode4.3.3_Organizer-Device_Use_Development-991x678
    右側エリアの[Provisioning]の値が適切なプロファイル名になっていることを確認してください。

  5. これでOrganizerによるデバイスの設定は終わりですが、最後に、対象デバイスの名前を変更しておくことをお勧めます。新しく追加されたデバイスの名前はデフォルトではすべて「iPhone」や「iPad」になってしまうので、一定のルールで名前をつけておかないと、デバイスの数が増えてきたときに判別が難しくなってくるからです。
    SCShot140110_9014-Xcode4.3.3_Organizer-Device_Use_Development-991x678
    左側の対象デバイスの名前部分をクリックすると、その名前を変更することができます。自分で判り易いデバイス名にリネームしておきましょう。

  6. プログジェクトワークスペースのウィンドウに戻ります。

    同ウィンドウの左上に存在するターゲットデバイス・プルダウンメニューから、アプリを動作させたい実機デバイスを選択します(このプルダウンメニューの中に、Organizerでリネームしたデバイス名が項目として存在するはずです。下のとおり、なぜか本プルダウンメニューには2つの同名の実機デバイス項目が表示されます。一番上のメニュー項目を選択するとアプリは実機デバイスで起動しますが、上から二番目の同名メニュー項目を選択するとアプリは起動しませんでした。これらの現象の原因はいまのところ判っていません)。
    SCShot140110_0028-Xcode4.3.3_Project-Setting_Build_Run_Device-500x96.png
    SCShot140110_0026-Xcode4.3.3_Project-Setting_Build_Run_Device-500x124.png

  7. 続いて、TARGETS−<Appication Name>の[Summary]ページを開いて、[Bundle Identifier]の設定値を確認します。
    SCShot140109_9084-Xcode4.3.3_Project-Setting_Build_Run_Device-847x666
    この項目の値は、プロファイルに含まれるApp ID(Bundle ID)と一致していなければなりません。もし一致していない場合は、適切な値に書き換えてください(Bundle IDが「com.ourcompany.*」でアプリ名が「MyApp」なら、「com.ourcompany.MyApp」という値にします)。

  8. さらに、PROJECT−<Appication Name>の[Build Setting]ページを開いて、[Code Signing]の[Code Signing Identity]−[Debug]項目の設定値を確認します(Organizerで対象デバイスとプロファイルがリンク済みなら、この項目は自動的に適切な値に設定されるはずです)。
    SCShot140109_9081-Xcode4.3.3_Project-Setting_Build_Run_Device-1080x666
    手順4で対象デバイスにリンクされたプロファイル(上の例だと「TomyYann App Profile 02」)が、この項目に設定されていればOKです。もし適切なプロファイルが設定されていない場合は、同メニューの項目の中から対象のプロファイルを選択してください。

これで、実機デバイス用にアプリをビルドするためにXcodeで行うべき設定はすべて完了です。

プロジェクトワークスペースの左上の[Run]ボタン(Playマークのボタン)を押せば、プロジェクトのビルドとランが実行されます。
SCShot140110_0029-Xcode4.3.3_Project-Setting_Build_Run_Device-500x96.png
実機デバイス用にプロジェクトをビルドしようとすると、下のようなウィンドウが表示されます。
SCShot140109_0062-Xcode4.3.3_Project-Setting_Build_Run_Device-434x184.png
このウィンドウでは、[許可]または[常に許可]ボタンを押してください([常に許可]ボタンを押すと、次回からこのウィンドウは表示されません)。秘密鍵で保護された開発用証明書を利用してXcodeがアプリに署名しようとしているので、上のようなウィンドウが表示されます。

プロジェクトのビルド中にエラーが起きなければ、アプリの実行イメージが実機デバイスへ転送され、その起動画面がスクリーンに表示されるはずです(初めてiPhone実機でアプリが動いた瞬間きっと誰しも感激するでしょう。私は思わず「おー、ヤッター!」と叫んで、iPhoneに向かって柏手を打ってしまいました)。
IMG_3988_1-Xcode4.3.3-Running_BNR_Quiz-iPhone3GS_iOS5.0.1-320x427.pngIMG_3990_1-Xcode4.3.3-Running_BNR_Quiz-iPhone3GS_iOS5.0.1-320x427.png

iPhone Simulatorで実行したときと同様に、自分で開発したアプリがiPhone実機でもちゃんと動くのか触りまくりたくなるでしょう。どうぞ、思う存分やってください。
IMG_3991_1-Xcode4.3.3-Running_BNR_Quiz-iPhone3GS_iOS5.0.1-320x427.pngIMG_3992_1-Xcode4.3.3-Running_BNR_Quiz-iPhone3GS_iOS5.0.1-320x427.png

本当にお疲れ様でした(私が)。本ブログで最長の内容になってしまいました。やはり3つの記事に分割して正解でしたね。

ちなみに、本記事の説明では、2012/08/17の記事で紹介したQuizというサンプルアプリを用いました。下のスクリーンショットが、このアプリがiPhone 3GSで動いている様子です。
IMG_0022-20140110_120441-Xcode4.3.3-Running_Quiz-iPhone3GS_iOS5.0.1-320x480.pngIMG_0023-20140110_120449-Xcode4.3.3-Running_Quiz-iPhone3GS_iOS5.0.1-320x480.png

IMG_0027-20140110_120502-Xcode4.3.3-Running_Quiz-iPhone3GS_iOS5.0.1-320x480.pngIMG_0028-20140110_120505-Xcode4.3.3-Running_Quiz-iPhone3GS_iOS5.0.1-320x480.png

このQuizというサンプルアプリは、以下の書籍の第一章に掲載されている小さな練習用プログラムです。

iOS Programming: The Big Nerd Ranch Guide (4th Edition) (Big Nerd Ranch Guides)iOS Programming: The Big Nerd Ranch Guide (4th Edition) (Big Nerd Ranch Guides)
Joe Conway Aaron Hillegass Christian Keur

Big Nerd Ranch Guides 2014-02-20
売り上げランキング : 3486

Amazonで詳しく見る
by G-Tools

iOS Programming: The Big Nerd Ranch Guide (3rd Edition) (Big Nerd Ranch Guides)iOS Programming: The Big Nerd Ranch Guide (3rd Edition) (Big Nerd Ranch Guides)
Joe Conway Aaron Hillegass

Addison-Wesley Professional 2012-03-19
売り上げランキング : 39675

Amazonで詳しく見る
by G-Tools

iOS Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)iOS Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)
Joe Hillegass, Aaron Conway

Addison-Wesley Professional 2011-06-22
売り上げランキング : 106268

Amazonで詳しく見る
by G-Tools

iPhone Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)iPhone Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)
Aaron Conway, Joe Hillegass

Addison-Wesley Professional 2010-04-13
売り上げランキング : 116907

Amazonで詳しく見る
by G-Tools


私がいままで読んだ入門者向けのiOSプログラミング参考書の中では、この本がベストでした。洋書ですが、これからiOSアプリ開発をやろうとしている方に推薦します。米国Amazonではかなり評価の高い本です。上のとおり、すでに改訂第三版まで出版されており、今年の2月に改訂第四版が出るようです。最新版ではiOS 7とXcode 5に対応した内容に書き換わっているらしいです。第二版のみですが、翻訳本も出版されています。

iOSプログラミング 第2版iOSプログラミング 第2版
アーロン・ヒレガス ジョー・コンウェイ Aaron Hillegass Joe Conway 木南 英夫

ピアソン桐原 2011-12-21
売り上げランキング : 466798

Amazonで詳しく見る
by G-Tools

ただし、第二版はiOS 4.2とXcode 4.0をベースにしているので、翻訳本の内容はかなり古いです。第三版か第四版を読むことをお勧めします。

【2014/01/10 追記】

上記の手順7で説明した[Bundle Identifier]の値を変更し忘れると、プロジェクトのビルド時に下のようなエラーが起きます。
ASShot140110_0021-Xcode4.3.3_Project-Build_Target-Code_Signing_Error-1105x275
iPad/iPhone Simulator用にビルドする場合は、[Code Signing Identity]で指定したプロファイルのApp ID(Bundle ID)と[Bundle Identifier]の値の照合されないようで、このようなエラーは発生しません。[Bundle Identifier]は手動で設定する項目で、かつ実機デバイス用にビルドする場合しかエラーに遭遇しないので、「あっ、忘れていた」ということが良くあります。

【2014/01/11 追記】

上記の手順8について補足説明をしておきます。

[Build Setting]ページの[Code Signing]−[Code Signing Identity]には、以下の2つの設定項目が存在します。
 [Debug]   デバッグ用
 [Release] リリース用

[Debug]には開発用プロファイル(開発用証明書が組み込まれているプロファイル)を選択しなければなりませんが、[Release]には配布用プロファイル(配布用証明書が組み込まれているプロファイル)を選択するのが正しい設定の仕方のようです。開発用と配布用のどちらのプロファイルであるかは、これらのメニュー項目の先頭部分に表示されている「iPhone Developer」と「iPhone Distribution」で判別できます。

この2つの項目はXcodeによって自動的に設定されますが、Organizerに配布用プロファイルが登録されていないと、下のように、[Debug]と[Release]のどちらも開発用プロファイル(「iPhone Developer」)になってしまいます。
SCShot140111_0008-Xcode4.3.3_Project-Setting_Build_Run_Device-847x666
[Debug]はこのままで良いのですが、[Release]の方は「iPhone Distribution」のプロファイルに変更すべきです。しかし、配布用プロファイルが存在しないと、この設定項目のメニューは下のような表示になってしまいます。
SCShot140111_9009-Xcode4.3.3_Project-Setting_Build_Run_Device-1080x666
[iPhone Distribution]というメニュー項目を選択できますが、この項目には配布用プロファイルがリンクされていません。この状態で[Release]構成を選択して実機デバイス用にアプリをビルドすると、多分エラーになるのではないかと思います。

たとえiOSアプリをApp Storeで配布する予定がなくても、配布用の証明書とプロファイルを取得して、どちらもMacへインストールしておくべきなのかもしれません。

【2014/01/12 追記】

上の操作を行った後、ADCのiOS Provisioning Portalサイトにアクセスしたら、対象デバイスの名前が変更されていました。
ASShot140112_9002-ACD-Editing_iOS_Device_Registered-1000x745
上記の手順4を実行したときに、OrganizerがiOS Provisioning Portalに登録済みのデバイス名を更新しているようです。これを回避するために、手順4と手順5の順番は入れ替えた方が良さそうです。

ちなに、iOS Provisioning Portalに登録済みのデバイス名は変更することができます。上のページの対象デバイスをクリックすると、下のようなボタンが表示されます。
ASShot140112_9003-ACD-Editing_iOS_Device_Registered-1000x745
[Edit]ボタンを押すと、ページは下のように変わります。
ASShot140112_9005-ACD-Editing_iOS_Device_Registered-1000x745
[Name]エディットボックスに新しい名前を入力して、[Save]ボタンを押せば、デバイス名が書き換わります。

【参考ページ】

 [iOS]Xcodeで実機デバッグできるようにするための5つの手順 | iOS | ブログ | スーパーソフトウエア東京
 iOSデバイス(iPhone・iPad)実機テスト | Yasushi Noguchi Class
 iOS開発ガイド: アプリケーションのビルドと実行

タグ:iphone iOS Xcode
posted by とみやん at 15:50| Comment(0) | TrackBack(0) | モバイルアプリ開発 > iOS

2014年01月08日

iOSアプリをiPhone実機で動かす (2)

ページ前記事の続きを書いていきます。

■iOSデバイスの登録


  1. WebブラウザでADCサイトにアクセスし、ログインします。

  2. ADCにログイン後Member Centerページを開くと、下のようなページが表示されます。
    ASShot140108_0001-ADC-Member_Center-1000x656
    このページに存在する[Certificates, Identifiers & Profiles]メニューを選択します。すると、下のようなページが表示されます。
    ASShot140106_9202-ADC-Member_Center_CIP-1000x736
    このページの左側に存在する[Devices]メニューを選択します。

    なお、すでに「Certificates, Identifiers & Profiles」のいずれかのページを開いている場合は、左側に存在する[Devices]−[All]メニューをクリックしてください。
    ASShot140112_9008-ADC-Registering_iOS_Device-1000x745

  3. すると、下のようなページが表示されます。
    ASShot140108_9022-ADC-Registering_iOS_Device-1000x745
    iOSデバイスの登録はこのページから始まります(上のページは登録済みのデバイスが存在する場合に表示されるものです。デバイスが一つも登録されていないと、デバイス登録方法の概要について書かれた「Getting Started」ページが表示されます)。まずは、このページの右上に存在する[]ボタンを押します。

  4. すると、下のようなページが表示されます。
    ASShot140108_9024-ADC-Registering_iOS_Device-1000x1218
    これはiOSデバイスの属性情報を指定するためのページです。

    一つのデバイスを登録するだけなら、[Register Device]ラジオボタンを選択します。[Name]エディットボックスには、このデバイス登録情報につける名前を入力します。[UDID]には、デバイス固有のUDID(Unique Device Identifier)の値を入力します。このページ内の全項目の設定と入力が終わったら、[Continue]ボタンを押します。

    なお、デバイスのUDIDは以下の操作によって取得することができます。

    1. Xcodeを起動した後、[Window]>[Organizer]メニューを選択します。すると、下のようなOrganizerのウィンドウが開きます(Organizerウィンドウの上部に並んでいるボタンのうち[Devices]が選択されていない場合は、同ボタンを選択してください)。
      SCShot140109_9018-Xcode4.3.3_Organizer-Copying_Device_Identifier-991x694

    2. iOS Provisioning Portalに登録しようとしているデバイスをMacに接続します。すると、Organizerウィンドウの左側にそのデバイスのエントリが追加されます。
      SCShot140109_9008-Xcode4.3.3_Organizer-Copying_Device_Identifier-991x694
      右側エリアに表示されている[Identifier]の値がUDIDです。

    3. 追加されたデバイスのエントリを選択した状態でコンテキストメニューを開いて(<Control>キーを押しながらクリックするか、右ボタン・クリックでコンテキストメニューが開きます)、[Copy Device Identifier]メニューを選択します。
      SCShot140109_9010-Xcode4.3.3_Organizer-Copying_Device_Identifier-991x694
      これによって、デバイスのUDIDがクリップボードへコピーされます。

    4. Webブラウザに戻って、上のページの[UDID]エディットボックスにクリップボードの内容をペーストします。


  5. すると、登録しようとしているデバイス情報の確認ページが表示されます。
    ASShot140108_9025-ADC-Registering_iOS_Device-1000x879
    このページに表示されている内容を確認した上で、[Register]ボタンを押します。

  6. デバイスが登録されると、下のようなページが表示されます。
    ASShot140108_0026-ADC-Registering_iOS_Device-1000x745
    これで、デバイスの登録は完了です。


■Provisioning Profileの作成とインストール


  1. WebブラウザでADCサイトにアクセスし、ログインします。

  2. ADCにログイン後Member Centerページを開くと、下のようなページが表示されます。
    ASShot140108_0001-ADC-Member_Center-1000x656
    このページに存在する[Certificates, Identifiers & Profiles]メニューを選択します。すると、下のようなページが表示されます。
    ASShot140106_9302-ADC-Member_Center_CIP-1000x736
    このページの左側に存在する[Provisioning Profiles]メニューを選択します。

    なお、すでに「Certificates, Identifiers & Profiles」のいずれかのページを開いている場合は、左側に存在する[Provisioning Profile]−[All]メニューをクリックしてください。
    ASShot140112_9009-ADC-Registering_iOSAppDev_ProvProfile-1000x745

  3. すると、下のようなページが表示されます。
    ASShot140109_0052-ADC-Registering_iOSAppDev_ProvProfile-1000x745
    Provisioning Profileの作成はこのページから始まります(上のページは登録済みのProvisioning Profileが存在する場合に表示されるものです。Provisioning Profileが一つも登録されていないと、Provisioning Profile登録方法の概要について書かれた「Getting Started」ページが表示されます)。まずは、このページの右上に存在する[]ボタンを押します。

  4. すると、下のようなページが表示されます。
    ASShot140109_0031-ADC-Registering_iOSAppDev_ProvProfile-1000x886
    これはProvisioning Profileの種類を指定するためのページです。

    [Development]が開発時に、[Distribution]が製品リリース時に使用するProvisioning Profileです。今回作成したいのはiOSアプリのデバッグや動作テスト用に使うProvisioning Profileなので、このページで選択すべきなのは[iOS App Development]ラジオボタンです。この項目を選択した状態で、[Continue]ボタンを押します。

  5. すると、ページは下のような変わります。
    ASShot140109_9032-ADC-Registering_iOSAppDev_ProvProfile-1000x779
    このページでは、Provisioning Profileに組み込むApp IDを指定します。[App ID]ドロップダウンメニューから対象のApp IDを選択したら、[Continue]ボタンを押します。

  6. すると、ページは下のような変わります。
    ASShot140109_0034-ADC-Registering_iOSAppDev_ProvProfile-1000x745
    このページでは、Provisioning Profileに組み込む証明書を指定します。対象の証明書のチェックボタンをONにして、[Continue]ボタンを押します。

  7. すると、さらにページは下のような変わります。
    ASShot140109_0036-ADC-Registering_iOSAppDev_ProvProfile-1000x745
    このページでは、Provisioning Profileに組み込むデバイスを指定します(上では一つのデバイスしか選択していませんが、複数のデバイスに対応したProvisioning Profileを作成することも可能です)。デバイスの選択が済んだら、[Continue]ボタンを押します。

  8. すると、さらに続けてページは下のような変わります。
    ASShot140109_9045-ADC-Registering_iOSAppDev_ProvProfile-1000x787
    [Profile Name]エディットボックスにProvisioning Profileの名前を入力した上で、[Generate]ボタンを押します。〔※上では[Profile Name]を「TomyYann App Profile 02」にしましたが、「TomyYann Developer Profile 02」の方が良かったかもしれません。配布用プロファイルを作成する場合に、そちらの名前を「TomyYann Distribution Profile」とするとバランスが良いからです〕

  9. Provisioning Profileが作成されると、下のようなページが表示されます。
    ASShot140109_9053-ADC-Registering_iOSAppDev_ProvProfile-1000x886
    このページの[Download]ボタンを押せば、作成されたProvisioning Profileのファイルをダウンロードできます(手順8で[Profile Name]エディットボックスに入力した名前がProvisioning Profileのファイル名になます。上の例の場合、TomyYann_App_Profile_02.mobileprovisionというファイル名になります)。

  10. Provisioning ProfileをMacへインストールするには、Organizerを使います。Xcodeを起動した後、[Window]>[Organizer]メニューを選択して、Organizerのウィンドウを開きます(Organizerウィンドウの上部に並んでいるボタンのうち{Devices]が選択されていない場合は、同ボタンを選択してください)。

  11. 左側の[LIBRARY]−[Provisioning Profile]を選択した状態で、右側エリアの左下に存在する[Import]ボタンを押します。
    SCShot140109_9032-Xcode4.3.3_Organizer-Installing_ProvProfile-991x678
    すると、ファイル選択ダイヤログが開くので、上で取得したProvisioning Profileファイルを選択します。
    SCShot140110_9017-Xcode4.3.3_Organizer-Installing_ProvProfile-991x678

  12. OrganizerにProvisioning Profileの情報が追加されます。
    SCShot140109_9033-Xcode4.3.3_Organizer-Installing_ProvProfile-991x678
    これで、MacへProvisioning Profileをインストールできしました。


次の記事に続きます(やっぱり長い内容なってしまいました)。

タグ:iphone iOS Xcode
posted by とみやん at 05:45| Comment(0) | TrackBack(0) | モバイルアプリ開発 > iOS

2014年01月07日

iOSアプリをiPhone実機で動かす (1)

とうとう年末年始の休み期間も終わりましたね。皆様はどんな正月でしたか。信州は雪も降らず、珍しく晴天続きの穏やかな正月でした。ただし、厳しい冷え込みは相変わらずで、これからさらに寒さが厳しくなってくるので風邪をひかないように気をつけないといけません(中信地域の年間最低気温を記録するのは大抵1月末〜2月初頭で、街中で-10℃前後、山中だと-15℃以下まで下がることもあります)。全国的に昨日が仕事初めだったみたいですね。私もそうだったのですが、年明け最初の平日ということもあり、プライベートな用事がいくつも重なって日中はそちらにほとんどの時間を取られてしまいました。やっと仕事に取りかかったのは夕方になってからでした。

さて、これが今年3番目に記事になりますが、前の2つの記事は休暇中にリラックス気分で書いたので、何だかまとまりがなくて散漫な内容になってしまっている気がします。今度は実用的な内容にしようと思って少し悩んでいましたが、Xcodeで開発したiOSアプリをiPhone実機上で動かす方法について書くことにしました。

去年の8月に1台目のiPhone 4を入手しましたが、その一ヶ月後に、参考書を読みながら勉強で開発したiOSアプリをこいつで動かしてみました。もちろん上手くいったのですが、ただし、本業の仕事の関係で一日しか時間が取れなかったので、焦って作業をやってしまい、このときは記録やスクリーンショットなどを残せませんでした。

去年末に入手したiPhone 3GSを開発ターゲット機として使い始めるにあたって、今度こそその過程をブログ記事に書こうと思って、作業の全工程の記録をちゃんと取りました。本記事で、iOSアプリをiPhone実機で動かすまでの完全な手順を紹介します。同様の情報はググればたんさんヒットするので、これらの情報を参照すれば行うことはできるでしょう。しかし、この作業はかなり複雑でいくつもの工程をしっかりと踏みながらやらないと成功しません。他人の情報に頼るより自分自身で実行した記録をちゃんと残しておきたいと思いました。自分のための備忘録の意味合いが強い記事になりますが、これから同じ作業をやろうとしている方の参考になれば幸いです。

前回のiOSアプリの実機動作テストはXcode 3.2.6とiPhone 4(iOS 4.3.3搭載)でやりましたが、いまだにXcode 3を使っているユーザーは少ないでしょうし、iOS 4.3用にアプリを開発しているプログラマも少数派ではないかと思います。そう言いながらも、じつは、こだわりがあって私は少し前までメインに使っていたのはXcode 3で、アプリ開発の勉強はiOS 4.3ベースでやっていました。しかし、さすがにそんなこだわりを持ち続けるのはもう時代遅れだと悟って、去年末に完全にXcode 4へ乗り換えました(すでにXcode 5.0.2もリリースされているので、本当にいまさらという感じですね)。という訳で、今回は以下の組み合わせでiOSアプリの実機動作テストを行いました。
 開発環境  Xcode 4.3.3(収納されているのはiOS 5.1 SDKだけだが、iOS 4.3, 5.0 SDKを追加済み)
 ターゲット iPhone 3GS(iOS 5.0.1搭載)

iOSアプリをiPhone/iPad/iPod touchの実機で動かすには、Apple Developer Connection(ADC)サイトで各種の手続きを行う必要がありますが、これらの手続きが行えるのは有料のiOS Developer Programを購入してADCに登録済みのユーザーだけです。

■開発用証明書の作成とインストール


  1. WebブラウザでADCサイトにアクセスし、ログインします。

  2. ADCにログイン後Member Centerページを開くと、下のようなページが表示されます。
    ASShot140108_0001-ADC-Member_Center-1000x656
    このページに存在する[Certificates, Identifiers & Profiles]メニューを選択します。すると、下のようなページが開きます([Certificates, Identifiers & Profiles]メニューを選択したときに表示されるサイト全体を「iOS Provisioning Portal」と呼びます)。
    ASShot140106_9002-ADC-Member_Center_CIP-1000x736
    このページの左側に存在する[Certificates]メニューを選択します。

  3. すると、下のようなページが表示されます。
    ASShot140106_0003-ADC-Registering_iOSAppDev_Certificate-1000x966
    開発用証明書の作成はこのページから始まります。まずは、このページの右上に存在する[]ボタンを押します。

  4. すると、下のようなページが表示されます。
    ASShot140106_0005-ADC-Registering_iOSAppDev_Certificate-1000x1284
    これは証明書の種類を指定するためのページです。

    [Development]が開発時に、[Production]が製品リリース時に使用する証明書です。今回作成したいのはiOSアプリのデバッグや動作テスト用に使う証明書なので、このページで選択すべきなのは[iOS App Development]ラジオボタンです。この項目を選択した状態で、[Continue]ボタンを押します。

  5. すると、下のようなページが表示されます。
    ASShot140106_0006-ADC-Registering_iOSAppDev_Certificate-1000x867
    ADCから開発用証明書を発行してもらうには、Certificate Signing Request(CSR)というものを作成してADCへ送信する必要があります。上のページに表示されているのは、このCSRを作成するための手順です。これ以降、この手順に従って、MacでCSRを作成していきます。

  6. まずは、[ユーティリティ]>[キーチェーンアクセス]を起動します。

  7. キーチェーインアクセスが起動したら、[環境設定]メニューを選択して、その中に存在する[証明書]タブを開きます。
    ASShot140106_0032-Keychain_Access-Creating_CSR-777x303
    上の[オンライン証明書状況プロトコル(OCSP)]と[証明書失効リスト(CRL)]のドロップダウンメニューを両方とも[切]に設定します。

  8. [証明書アシスタント]>[証明局に証明書を要求]メニューを選択します。すると、下のようなウィンドウが開きます。
    ASShot140107_9024-Keychain_Access-Creating_CSR-616x436.png
    このウィンドウのエディットボックスに下のような情報を入力します。また、ボタン項目も下のように設定します。〔※上では[通称]を「TomyYann Devel Key」にしましたが、「TomyYann Developer Key」の方が良かったかもしれません。配布用証明書を作成する場合に、そちらの鍵の名前を「TomyYann Distribution Key」とするとバランスが良いからです〕
     ユーザーのメールアドレス:自分のメールアドレス(ADCアカウントのメールアドレスを使うぺき?)
     通称          :証明書に適用する鍵ペアの名前(任意の名前)
     CAのメールアドレス   :空欄のまま
     要求の処理       :[ディスクに保存]を選択
                  [鍵ペア情報を指定] → ON

    エディットボックスの入力とボタン項目の設定が済んだら、[続ける]ボタンを押します。

  9. すると、ファイル保存ダイヤログが開くので、CSRファイルの名前と保存先を指定します。ASShot140106_0041-Keychain_Access-Creating_CSR-616x436.png
    続いて、証明書に適用する鍵ペア(秘密鍵と公開鍵)の形式を指定するためのウィンドウが開きます。
    ASShot140106_0038-Keychain_Access-Creating_CSR-616x436.png
    いずれの設定項目も変更せず、[続ける]ボタンを押します。最後に、CSRファイルが作成されて、下のようなウィンドウが表示されます。
    ASShot140106_0039-Keychain_Access-Creating_CSR-616x436.png
    [Finder に表示]ボタンを押すと、Finderが開いてCSRファイルを確認することができます。

  10. CSRファイルが作成できたら、Webブラウザに戻り、手順5で開いていたページの[Continue]ボタンを押します。
    ASShot140106_9006-ADC-Registering_iOSAppDev_Certificate-1000x867

  11. すると、ページは下のような変わります。
    ASShot140106_0007-ADC-Registering_iOSAppDev_Certificate-1000x818
    [Choose File]ボタンを押すと、ファイル選択ダイヤログが開くので、上で作成したCSRファイルを選択します。
    ASShot140106_0008-ADC-Registering_iOSAppDev_Certificate-1000x818
    CSRファイルの選択が済んだら、[Generate]ボタンを押します。

  12. 無事に証明書が作成されると、下のようなページが表示されます。
    ASShot140106_0009-ADC-Registering_iOSAppDev_Certificate-1000x916
    このページの[Download]ボタンを押せば、作成された証明書のファイルをダウンロードできます(私が取得したときは、開発用証明書のファイル名はios_development.cerでした)。

  13. 上で取得した証明書ファイルをダブルクリックかキーチェーンアクセスにドラッグ&ドロップします。すると、キーチェーンアクセスの[証明書]カテゴリの中にそのエントリが追加されます。
    ASShot140107_9033-Keychain_Access-Installing_Certificate-900x555
    これで、MacへiOSアプリの開発用証明書をインストールできました。


■App IDの登録


  1. WebブラウザでADCサイトにアクセスし、ログインします。

  2. ADCにログイン後Member Centerページを開くと、下のようなページが表示されます。
    ASShot140108_0001-ADC-Member_Center-1000x656
    このページに存在する[Certificates, Identifiers & Profiles]メニューを選択します。すると、下のようなページが表示されます。
    ASShot140106_9102-ADC-Member_Center_CIP-1000x736
    このページの左側に存在する[Identifiers]メニューを選択します。

    なお、すでに「Certificates, Identifiers & Profiles」のいずれかのページを開いている場合は、左側に存在する[Identifiers]−[App IDs]メニューをクリックしてください。
    ASShot140112_0007-ADC-Registering_AppID_Identifier-1000x745

  3. すると、下のようなページが表示されます。
    ASShot140106_0014-ADC-Registering_AppID_Identifier-1000x966
    App IDの登録はこのページから始まります。まずは、このページの右上に存在する[]ボタンを押します。

  4. すると、下のようなページが表示されます。
    ASShot140107_9046-ADC-Registering_AppID_Identifier-1000x1837
    これはApp IDの属性情報を指定するためのページです。

    [App ID Description]−[Name]エディットボックスには、このApp ID登録情報につける名前を入力します。

    [App ID Prefix]はApp IDの接頭詞となる値で、Team IDが固定的に使用されます(Team IDはiOS Developer Program登録時に自動的に割り当てられます。一つのアカウントで複数のiOS Developer Programライセンスを取得していると、それぞれにTeam IDが割り当てられるので、その場合は複数のTeam IDから選択できます)。

    [App ID Suffix]はApp IDの接尾詞で、これにはできるだけユニークな文字列を指定する必要があります。App ID Suffixの前半部分は、慣例的にユーザーが持つドメイン名を逆並びにした文字列(ドメイン名が「ourcompany.com」なら「com.ourcompany」)を用います(ドメイン名を持っていない個人なら、「com.taroyamada」みたいに適当に決めても構いませんが、できるだけユニークな文字列にすることをお勧めします)。[Explicit App ID]ラジオボックスは、ユーザーが自分自身でアプリ毎にユニークな名前をつける場合に選択します(この形式のApp IDは、アプリ毎に一つずつ登録して使用します)。こちらの形式を選択した場合、ドメイン名を逆並びにした文字列にアプリの固有名を付加した「com.ourcompany.MyApp」のような文字列を[Bundle ID]エディットボックスに入力します。もう一方の[Wildcard App ID]という形式を選択する場合は、[Bundle ID]に「com.ourcompany.*」(最後は必ずアスタリクス)のような文字列を入力します。これによって、「*」部分に相当するアプリ固有名はユーザーが任意に決めることができます。後者の形式の方が汎用性が高いので、開発用のApp IDとしてはこちらがお勧めです。

    最後の[App Services]はアプリに組み込む特殊なサービス機能の選択です。いずれのサービス機能もアプリに組み込まないなら、すべてのチェックボックスをOFFにしておきます。

    このページ内の全項目の入力と設定が終わったら、[Continue]ボタンを押します。

  5. すると、登録しようとしているApp ID情報の確認ページが表示されます。
    ASShot140106_9023-ADC-Registering_AppID_Identifier-1000x1006
    このページに表示されている内容を確認した上で、[Submit]ボタンを押します。

  6. App IDが登録されると、下のようなページが表示されます。
    ASShot140106_9020-ADC-Registering_AppID_Identifier-1000x986
    これで、App IDの登録は完了です。


次の記事に続きます(何だかすごく長い内容になりそうな・・・)。

タグ:iphone iOS
posted by とみやん at 06:23| Comment(2) | TrackBack(0) | モバイルアプリ開発 > iOS

2013年12月27日

Xcode 4.3.3へiOS 4.3, 5.0 SDKを追加した

塩尻もずいぶん寒くなってきて、これからが冬本番という感じだ。朝の最低気温は毎日零下だし、晴れても最高気温は5℃前後までしか上がらない。それでも例年より冷え込みは緩い気がするのは気のせいだろうか。例年だと天気が崩れるといま頃は必ず雪になるのに、雪ではなく霙や雨が降ることがある。信州の年末年始は天候が悪く降雪が続くことが良くあるんだけど、今シーズンは本格的な積雪はまだ一回しかない。やっぱり例年より少し気温が高いんじゃないだろうか。年が明けるとさらに冷え込みが厳しくなるはずだが、今シーズンはどうだろうか。私のいまの部屋には強力な暖房器具がなくて、暖房器具をフル稼働させても室温は10〜15℃位までしか上がらない。部屋の中でも防寒服を着て過ごしているが、こんな寒さにももう慣れてしまった。日当たりは良い部屋なので、晴天なら昼頃に一時的に20℃位まで気温が上がるのが救いだ(信州に住む場合、部屋の日当たりの良し悪しはものすごく重要。日当たりによって、一冬の暖房費に大きな差が出るから)。ただし、昼間は近くのえんぱーく(塩尻市市民交流センターの愛称)に居ることが多い。暖房費を節約したいからだが、この施設内ではAC電源もWiFiも自由に使えるので仕事がやり易い。出来てまだ3年の新しい施設なので、館内設備は新しく居心地は良い。毎日えんぱーくに通っている訳ではなく週に2〜3日程度。

えんぱーくで仕事をするときもそうだが、外出時はいつものはMacBook Air 11"(Mac OS X Lion搭載)を持ち歩いている。こいつにはXcode 3.2.6, 4.2.1, 4.3.3の3つを共存させている。これらに入っているSDKは下のとおりで、いままでこの3つのバージョンのXcodeを必要に応じて使い分けていた。
SCShot131227_0001-System_Porfiler-Developer-Developer_Information-751x732
SCShot131227_0002-System_Porfiler-Developer-Developer_Information-751x732
SCShot131227_0003-System_Porfiler-Developer-Developer_Information-751x732
ただし、最近はほとんどXcode 4.3.3しか使っていなかった。複数のバージョンのXcodeを使い分けるのはそろそろ止めて、一つだけにiOS開発環境を集約させたくなってきた。Xcode全体でかなり大きなディスク容量を消費しているので、これらを節約したいという理由もある(Xcode 3.2.6は約13GB、Xcode 4.2.1は約8GB)。Xcode 4.3.3にiOS 4.3とiOS 5.0用SDKを追加すればこの目的が達成できることは分かっていたが、いままで何となく実行せずに過ごしていた。Xcode 4.3.3に入っているのはiOS 5.1 SDKだけだが、Xcode 3.2.1にiOS 4.3 SDKが、Xcode 4.2.1にはiOS 5.0 SDKが含まれている。07/0707/08の記事にそれぞれXcode 4.4.1とXcode 4.6.3にデフォルトで含まれているバージョン以外のSDKを追加する方法を書いたが、これらと同様の方法でできるはずだ。

前々からやろうと思っていたXcode 4.3.3へiOS 4.3, iOS 5.0 SDKを追加する作業をついに実行したので、私がやった方法を記録として残しておく。MBA11にはXcode 3.2.6, 4.2.1, 4.3.3の3つがすでにインストール済みだったので、実際に行ったのは以下の手順だけだ。
  1. まずは、Xcode 3.2.6に含まれるiOS 4.3 SDKをXcode 4.3.3へ追加するために、以下のコマンドを実行した。
    % sudo cp -Rp /Devel_Xcode3/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs

  2. 続いて、Xcode 4.2.1に含まれるiOS 5.0 SDKをXcode 4.3.3へ追加するために、以下のコマンドを実行した。
    % sudo cp -Rp /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs

上の操作を行った後、Xcode 4.3.3のDeveloper Information([ユーティリティ]>[システム情報]>[Developer]の表示情報)を確認すると、下のようになっていた。
SCShot131231_0017-System_Porfiler-Developer-Developer_Information-751x732
また、これは最近知ったコマンドとオプションの組み合わせだが、「xcodebuild -showsdks」というコマンドでもXcodeに含まれるSDKの種類を確認することができる。
% xcodebuild -showsdks
Mac OS X SDKs:
Mac OS X 10.6 -sdk macosx10.6
Mac OS X 10.7 -sdk macosx10.7

iOS SDKs:
iOS 4.3 -sdk iphoneos4.3
iOS 5.0 -sdk iphoneos5.0
iOS 5.1 -sdk iphoneos5.1

iOS Simulator SDKs:
Simulator - iOS 4.3 -sdk iphonesimulator4.3
Simulator - iOS 5.0 -sdk iphonesimulator5.0
Simulator - iOS 5.1 -sdk iphonesimulator5.1


Xcode 4.3.3を起動して、既存のプロジェクトを開くと、利用可能なiOS SDKとして「iOS 4.3」と「iOS 5.0」が追加されているのが確認できた。
SCShot131231_0008-Xcode4.3.3-Project-Base_SDK-After_Adding_iOS_SDKs-847x742

【参考ページ】

 Xcode集中連載(4):Xcode 4.3.3 に古いSDKをインストールする ≪ TORQUES LABS

タグ:Xcode iOS SDK
posted by とみやん at 19:10| Comment(0) | TrackBack(0) | モバイルアプリ開発 > iOS

2012年08月17日

[BNR] 演習アプリ作成でXcode 3の基本操作を学ぶ

iOSプログラミングのメインの参考書を、『iPhone SDK アプリケーション開発ガイド』(07/10の記事で紹介)から以下の洋書に変えた。

iPhone Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)iPhone Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)
Aaron Conway, Joe Hillegass

Addison-Wesley Professional 2010-04-13
売り上げランキング : 116907

Amazonで詳しく見る
by G-Tools

iOS Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)iOS Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)
Joe Hillegass, Aaron Conway

Addison-Wesley Professional 2011-06-22
売り上げランキング : 106268

Amazonで詳しく見る
by G-Tools


とあるサイトからこれら書籍のPDFファイルを入手したので、それを読みながら勉強を進めている。上の2つはタイトルが異なっているが、前者が第一版で後者はその改訂第二版にあたる。また、最新のiOS開発環境に準拠してさらに改訂された第三版(下のリンク)もすでに出版されている。

iOS Programming: The Big Nerd Ranch Guide (3rd Edition) (Big Nerd Ranch Guides)iOS Programming: The Big Nerd Ranch Guide (3rd Edition) (Big Nerd Ranch Guides)
Joe Conway Aaron Hillegass

Addison-Wesley Professional 2012-03-19
売り上げランキング : 39675

Amazonで詳しく見る
by G-Tools


そして、第二版の和訳本も出版されている。

iOSプログラミング 第2版iOSプログラミング 第2版
アーロン・ヒレガス ジョー・コンウェイ Aaron Hillegass Joe Conway 木南 英夫

ピアソン桐原 2011-12-21
売り上げランキング : 466798

Amazonで詳しく見る
by G-Tools


この本の各版の内容は、次のXcodeに基づいて記載されている。

 第一版 Xcode 3.2 (?), iPhone SDK 3.1
 第二版 Xcode 4.0, iOS SDK 4.2
 第三版 Xcode 4.3, iOS SDK 5.0

私がいま使っているiOS開発環境はXcode 3.2.6 / iOS SDK 4.2なので、Xcodeツールの操作については第一版、iOS SDKについては第二版が一致する。第一版と第二版を同時に参照しているのはこの理由から。

アメリカAmazonのカスタマレビューではいずれの版も5つ星にランキングされており、iOSプログラミング関連書籍の中でもっとも評判が高いものの一つらしい。本のタイトルに含まれている「Big Nerd Ranch」というのは、Mac OS XやiOS向けプログラミングのトレーニング・コースを定期的に開催しているアメリカの会社の名前で、トレーニング・コースで使われた教材を練り上げて、これらの本は書かれているそうだ。読んでみると確かにそんな感じで、先に実践的な事柄が書かれていて、後からそれらに関連する説明が加えられている。iOSプログラミングのトレーニング・コースを受講しているような雰囲気で読めるのは良いんだけど、基礎的な説明が欠落したりしているので初心者向けではない。トレーニング・コースを受講するような人はある程度プログラミング経験を持つプログラマばかりなので、こういう内容が適切なのかもしれない。まだ冒頭部分しか読んでいないが、ベテラン・プログラマである私にはマッチした内容のような気がする。

最初の章(Chapter 1)で、いきなり超シンプルなiOSアプリを作成しながら、XcodeやInterface Builderの操作方法について説明している。この章で作成するiOSアプリはQuizという名前がつけられていて、Xcodeが生成したスケルトンコードに30行程度のコードを追加し、さらにInterface Builderでオブジェクトをちょこちょこっと編集するだけでプログラムが完成する。下がQuizアプリの動作画面(iOS Simulatorの画面)で、"Show Question"というボタンを押すと、質問文が表示され、"Show Answer"というボタンを押すと、その質問に対する回答が表示される。
Larning_iOS_Programming-Chapter1-ScrnShot01-394x744
このアプリのソースコードは、下のようにすごく短い(ハイライト行が追加したコード)。
#import <UIKit/UIKit.h>

@interface QuizAppDelegate : NSObject <UIApplicationDelegate> {

int currentQuestionIndex;

// The model objects
NSMutableArray *questions;
NSMutableArray *answers;

// The view objects
IBOutlet UILabel *questionField;
IBOutlet UILabel *answerField;

UIWindow *window;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;

- (IBAction)showQuestion:(id)sender;
- (IBAction)showAnswer:(id)sender;

@end

#import "QuizAppDelegate.h"

@implementation QuizAppDelegate

@synthesize window;

- (id)init
{
// Call the init method implemented by the superclass
[super init];

// Create two arrays and make the pointers point to them
questions = [[NSMutableArray alloc] init];
answers = [[NSMutableArray alloc] init];

// Add questions and answers to the arrays
[questions addObject:@"Waht is 7 + 7?"];
[answers addObject:@"14"];

[questions addObject:@"What is the capital of Vermont?"];
[answers addObject:@"Montpelier"];

[questions addObject:@"From what is cognac made?"];
[answers addObject:@"Grapes"];

// Return the address of the new object
return self;
}

- (IBAction)showQuestion:(id)sender
{
// Step to next question - just to keep things simple
// to focus on the iOS elements of the programming,
// we will start with the "second" question in the list.
currentQuestionIndex++;

// Am I past the last question?
if (currentQuestionIndex == [questions count]) {

// Go back to the first question
currentQuestionIndex = 0;
}

// Get the string at that index in the questions array
NSString *question = [questions objectAtIndex:currentQuestionIndex];

/// Log the string to the console
NSLog(@"displaying question: %@", question);

// Display the string in the question field
[questionField setText:question];

// Clear the answer field
[answerField setText:@"???"];
}

- (IBAction)showAnswer:(id)sender
{
// What is the answer to the current question?
NSString *answer = [answers objectAtIndex:currentQuestionIndex];

// Display it in the answer field
[answerField setText:answer];
}


- (void)dealloc {
[window release];
[super dealloc];
}


@end

Chapter 1の最後の方に"Deploying an Application"という節があって、この中で作成したQuizアプリをiPhone実機上で実行する手順も解説されているんだけど、残念ながら、私はまだiPhoneを持っていないので、この節はスキップするしかなかった。早くiPhoneを入手して、この節の手順を試してみたいもんだ。最初の章でプログラムの作成からiPhone実機での実行までの操作手順を説明している点が、この本がトレーニング・コース教材を基に書かれていることをうかがわせる。一気にゴールを見せることによって、読み手(受講者)のモチベーションを上げることが目的なのだろう。良く練られた構成だ。

下のスクリーンショットが、Xcode、Interface Builder、iOS Simulatorを操作している様子。
Larning_iOS_Programming-Chapter1-ScrnShot02-1440x900
Larning_iOS_Programming-Chapter1-ScrnShot03-1440x900
Larning_iOS_Programming-Chapter1-ScrnShot04-1440x900
この本のChapter 1ではObjective-Cの記法や文法についての説明は省略されているが、これについては次章(Chapter 2)に詳しく書かれているようだ。ただし、こちらも要点だけを押さえた内容になっているみたいだ(Objective-Cの詳細を知りたければ、同じ著者が書いた別の書籍『Objective-C Programming: The Big Nerd Ranch Guide』を読んでくれということなのかな)。すごく実践的な内容が気に入ったので、このままこの本を読み終えることを目標にして、iOSプログラミングの勉強を進めていこう。

posted by とみやん at 15:53| Comment(1) | TrackBack(0) | モバイルアプリ開発 > iOS

2012年08月06日

iOSアプリ開発参考書4冊購入

iOSアプリ開発の参考書籍を追加購入した。購入先はいつものようにAmazon。

(1) 
iPhoneプログラミングUIKit詳解リファレンスiPhoneプログラミングUIKit詳解リファレンス
所 友太 京セラコミュニケーションシステム株式会社

リックテレコム 2010-01-12
売り上げランキング : 23735

Amazonで詳しく見る
by G-Tools

(2) 
iOS SDK Hacks ―プロが教えるiPhoneアプリ開発テクニックiOS SDK Hacks ―プロが教えるiPhoneアプリ開発テクニック
吉田 悠一 高山 征大 UICoderz

オライリージャパン 2010-10-23
売り上げランキング : 195419

Amazonで詳しく見る
by G-Tools

(3) 
iOSデバッグ&最適化技法 for iPad/iPhoneiOSデバッグ&最適化技法 for iPad/iPhone
國居貴浩

秀和システム 2010-11-25
売り上げランキング : 228414

Amazonで詳しく見る
by G-Tools

(4) 
Xcode 4ではじめるObjective-CプログラミングXcode 4ではじめるObjective-Cプログラミング
大津 真

ラトルズ 2012-01-25
売り上げランキング : 240251

Amazonで詳しく見る
by G-Tools


IMG_2330-Book-iPhone_Programming_UIKit_Reference-Photo01-20120806.jpg
IMG_2336-Book-iOS_SDK_Hacks-Photo01-20120806.jpg
IMG_2334-Book-iOS_Debugging_and_Optimizing_Technics-Photo01-20120806.jpg
IMG_2328-Book-Beginning_Objective-C_Programming_with_Xcode4-Photo01-20120806.jpg

最初のiOSアプリ開発の攻略領域として、いまUIKitを攻めている。前回買った『iPhone SDK アプリケーション開発ガイド』(07/10の記事で紹介)の「3章 UI Kit入門」の内容をなぞりながら学習を進めてる。UIKitはGUIオブジェクトの描画機能を提供する構成要素あり、iOS SDKの中で最大の仕様ボリュームを持つ。そして、iOSプログラムの中でもっとも頻繁に使用することになる構成要素でもある。07/23の記事では、「参考書に書いてある内容をただなぞるようなやり方はしたくない」と書いたが、最重要構成要素であるUIKitについてだけはやはり一度は体系的な勉強をしておいた方が良いと考えて、参考書の内容を丁寧になぞりながら攻めている最中。こういうやり方の場合も、私は攻略対象のAPI仕様がどうしても知りたくなる。サンプルコードの中で利用されているクラスやメソッドの詳細仕様をしっかりと知らないと、どうもモヤモヤした感じですっきりしないからだ。こういう場合、Appleのオンラインドキュメントを参考にすれば良い訳ど、書籍の方が参照資料として手軽だ。(1)の本はこの理由により選択した。

(2)と(3)はシニアレベル以上のiOSプログラマ向けで、iOSアプリ開発を始めたばかりでまだビギナーレベルの入り口辺りをウロウロしている私が読むような本ではないことは十分に判っているが、iOSアプリ開発のディープな部分に関する一応の知識を持っていたくて、あえて今回の購入選択に含めた。とりあえず、いまは専門分野の雰囲気を楽しむような気楽な気持ちで、ときどき目を通す程度にするつもり。これらの本が役に立つようなレベルに早く到達したいもんだ。そういう目標となる本がいつも目につくところ存在することもきっと励みになるはずだ。

いまiOS SDKのUIKitを勉強中なんだけど、参考書に載っているサンプルコードがいまいち私の中でしっくりとこない。一応サンプルコードの個々の記述の意味は理解できるだけど、どうもObjective-Cの全体像が掴めていない気がする。ことわざで表現するなら「群盲象をなでる」みたいな感じかなぁ。やはりObjective-Cについても一度は体系的な学習をしておいた方が良いかなぁと思って、(4)の本を選んだ。私が初めてC++を本格的に勉強したのはもう18年前で(旧MacOS向けに開発した最後のアプリで、初めてC++を使った)、その後もC++を使って開発をやったことはあったが、いずれも小さなプログラムだった。ずいぶん遠ざかっていた所為か、オブジェクト指向プログラミングに対する勘がなかなか戻ってこない。Javaは少しだけ勉強したことはあるが、C#は使ったことがなく、Objective-Cも今回が初めてだ。Objective-Cの文法・記法を習得することと一緒にオブジェクト指向プログラミングに対する感覚を早く取り戻したかったことが、この本を選んだ理由でもある。Amazonのカスタマレビューによると、この本は、とにかくObjective-Cを習得することだけを的を絞った内容になっているらしく、iOS SDKについてはほとんど触れられてないそうだ。本当にそうなのか実際に読んでみないと判断がつかないが、上記のような私の目的にマッチしていそうな気がする。この目的さえ達成できたら役目が終わってしまうだろうが、それでも、読了後にObjective-Cの全体像が掴めたという実感が得られれば、この本の価値は十分にあると思っている。

posted by とみやん at 17:09| Comment(0) | TrackBack(0) | モバイルアプリ開発 > iOS

2012年07月17日

AndroidではなくiOSを選んだ理由

先週末はどうしても仕事へのモチベーションが維持できなくて、結局二日間休んでしまった。あまりに疲労感が強くて身体が休むことを要求していたような感じだったからだ。一年一ヶ月続いた東京での仕事が先月末で終わって、07/03に仕事の拠点にしている信州・塩尻に戻ってきてから、iOSアプリ開発をスタートするためにまったく休みを取らずに仕事を続けていたことがいけなかったんだろう。東京での仕事で溜まりに溜まった身体と精神の疲れを癒やしたくて、昨日は近場の旅館に泊まってきた。新しい分野への挑戦を始めたことのセルフお祝いと気分転換も兼ねている。どこに泊まったかというと、松本市内の並柳という所に在る深志莊という小さな旅館。一昨日じゃらんで検索していたら、たまたまこの宿の5千円足らずに夕食と朝食までついた格安の20周年記念プランというものを見つけた。実際に泊まってみたら、旅館の雰囲気が良く料理もすごく満足できる内容だった。おかげでゆったりリラックスした一夜を過ごせて、リフレッシュすることができた。

さて、07/08の記事で、スマートデバイス用アプリ開発のターゲットOSとしてiOSを選択したことを書いた。「AndroidよりiOSの方が面白そう」というのが最終的な理由だけど、ググってみると、どうやら、いま組込み業界ではAndroidに的を絞って新事業を起こすことが一大ムーブメントになっているようだ。私がいま通っている協業会社のオフィスが在るIT支援施設内でも「にわかAndroidブーム」が起きていて4社ほど取り組みを始めたらしい。塩尻のような小さな街でこういう動きが生まれているということは、きっと日本全国の都市でも同じような動きが起きているのだろう。ググれば、Androidプログラミングに関するセミナーやトレーニングコースがたくさんヒットするし、大学や高専でもAndroidプログラミングをカリキュラムの一部として取り入れる所が出てきている。将来性のありそうなジャンルがAndroid位しかないからか、たくさんの組込み系ベンチャー企業が雪崩を打つようにAndroidをターゲットに新事業を立ち上げようとしている。まさに組込み業界は「猫も杓子もAndroid」状態となっているようだ。これだけ多く企業がAndroid事業に参入する状況の中で、私はそれらの企業に聞いてみたいことがある。それは「一体どうやって他社製品との差別化を図るんですか」という質問だ。これと同じ質問をAndroidアプリ開発を始めたプログラマにも投げかけたい。「どうやって自分のスキルを他のプログラマと差別化するの」。Androidの開発言語はJavaだが、(あくまで想像だけど)多分アプリ開発を習得することは技術的にそれ程難易度は高くないはずだ。企業や学校でこれだけのプログラマがAndroidアプリ開発を学習中であるということは、これから大量のAndroidプログラマが生まれてくることを意味している。私がiOSを選択した二番面の理由がまさにこれだ。iOSアプリ開発に取り組んでいるプログラマもそこそこ多いようだけど、Androidよりはずっとライバルが少ないはずだ(Apple Developer Program登録が有料であることも影響しているだろう)。以前別のブログの記事で書いたことがあるが、下のような書籍も出版されており、Androidプログラミングを始めている中学生さえ存在している。

 15歳からはじめるAndroidわくわくゲームプログラミング教室〔著者:掌田津耶乃,出版社:リブロワークス〕

数冊のAndroidプログラミング参考書をざっと読んだが、Androidアプリ開発のキーポイントは、Javaというオブジェクト指向言語の特性とGoogleが用意したクラスライブラリの使い方を理解するという二つの点に尽きるように思える。この二つさえ習得すれば、それ程苦労しなくてもAndroidアプリを作れるんじゃないだろうか。これは数学や物理を得意科目とする論理的な思考能力を持つ中学生や高校生なら習得できるレベルだとも言える。Androidに関する技術情報がまだ少なかった1〜2年前ならともかく、数多くの書籍が出版されてたいまとなっては、Visual C++でWindowsアプリを作るのと大差ないくらい容易にAndroidアプリを作れるようになってしまった。ただし、これはあくまでプログラムの機能実装について議論だ。ユーザーフレンドリーかつ直感的に使えるスマートデバイス用アプリを開発したいなら、そういうUIをいかに設計するかという点が一番重要な課題になるはずだ。これはプログラマではなくデザイナーの仕事だ(これからのIT業界に求められる人材は、プログラマではなくデザイナーなのかもしれない)。

元組込みプログラマだったからか、iOSアプリ開発を決心する前は、私もAndroidへの興味が強かった。それで中華Padとかを買ったりしてみたんだけど、何台ものAndroidタブレットを使ってみて、それらに共通する一つの印象を持っている。それは、アプリの動作がどうもモッサリとしていることだ。新しい操作をするといつもワンテンポ遅れてレスポンスが返ってくる。特にSingle-core CPUを搭載したタブレットでこれを強く感じてしまう。最近になってDual-coreやQuad-core CPUを搭載した機種が多く出てきてたので、この印象は少し薄れてきたが、AndroidはすごくCPUパワーを食うOSであることは間違いないと思う。そして、Androidのアプリ開発言語がJavaであること、言い換えると、Java VM(Androidのそれは「Dalvik VM」という名前らしい)上ですべてのアプリが動作していることが、この印象の根本的な原因であるような気がしてならない。AndroidアプリがJava VMで動いているかぎり、他のアプリより速度面で高性能なものを作ることは困難であるということを言いたくて、この議論を展開している。Androidアプリの性能はGoogleが用意したクラスライブラリのそれに大きく依存していると思われる。

ただし、このくびきを逃れる方法は用意されている。それがAndroid NDK(Native Development Kit)だ。去年辺りからゲーム機器やカーナビなどにもAndroidを組み込む動きが盛んになっているが、これらの機器の専用アプリは、その大部分をAndroid NDK上に作成した独自のミドルウェアで実現する例が増えている。特にゲーム機器は、グラフィックの描画性能をどうやって高速化するかということが最大の課題なので、C/C++レベルでOpenGLを呼ぶ出す独自のクラスを開発することが主流の実装方式になりつつある。Android NDKを利用したこのような実装方式は今後益々増えていくだろう。結局JavaでAndroidアプリで書いているかぎり、UIくらいしか差別化できる部分はないということだ(ゲーム機器メーカーやゲームソフト・ベンダーにはプログラマと同じかそれ以上のデザイナーがいるはずなので、スマートデバイス分野は今後電機メーカーではなくゲーム分野の企業が主導権を握っていきそうな気がする)。機能や速度面でアプリの差別化を図りたければ、Android NDKを利用するしか方法がない。もし将来私が研究開発テーマとしてAndroid開発に取り組むことがあれば、既存のクラスライブラリを利用したJavaによるアプリ開発ではなくて、いきなりAndroid NDKを使ってC/C+で独自の機能を開発するところから始めるだろう。
タグ:android iOS
posted by とみやん at 16:04| Comment(0) | TrackBack(0) | モバイルアプリ開発 > iOS

2012年07月10日

iOSアプリ開発参考書3冊購入

以下のiOSアプリ開発の参考書籍を、Amazonから購入した。

iPhone SDK アプリケーション開発ガイドiPhone SDK アプリケーション開発ガイド
Jonathan Zdziarski 近藤 誠 (監訳)

オライリージャパン 2009-09-07
売り上げランキング : 40654

Amazonで詳しく見る
by G-Tools

詳解 Objective-C 2.0 第3版詳解 Objective-C 2.0 第3版
荻原 剛志

ソフトバンククリエイティブ 2011-12-28
売り上げランキング : 8344

Amazonで詳しく見る
by G-Tools

Xcode 4 完全攻略Xcode 4 完全攻略
STUDIO SHIN

ソフトバンククリエイティブ 2012-03-29
売り上げランキング : 136097

Amazonで詳しく見る
by G-Tools


IMG_2242-BookJ-iPhone_SDK_Application_Development-20120710.jpg
IMG_2245-BookJ-Objective-C_2.0_Definitive_Guide_3nd_Edition-20120710.jpg
IMG_2243-BookJ-Xcode4_Definitive_Guide-20120710.jpg

iPhone SDK本体、開発言語Objective-C、統合環境Xcodeに関する本をそれぞれ一冊ずつ。Amazonのカスタマーレビューを参考にして、これらの書籍を選択した。

Amazonで検索するとかなりの数の書籍が出版されていることが分かる。やはりiOSアプリ開発に興味を持っている人は結構多いじゃないかと想像している。その中でもやはり入門書的な本が一番多いようだけど、今回はあえてそういう本は選択しなかった。入門書は一通り読んでしまうと、その役目が終わってしまうからだ。特定の開発分野に関する本を買う場合、私はその本が少しでもリファレンス的に使えることを基準に選ぶことが多い。

iOSアプリ開発のバイブル的な資料は、やはりにApple自身が配布しているドキュメントであることはよく解っている。こういう目的の場合は常にそうだが、OSや開発ツールを提供しているベンダーの資料が最終的には一番役に立つ。英語を読むことは苦にしていないので、後日AppleのiOS関連ドキュメントをすべて入手するつもりでいる。

まだこれから読み始めるところなので、今回買った参考書の書評はまた別の記事で書くことにしよう。

さて、次のステップはApple Developer Programの登録かな。

posted by とみやん at 17:45| Comment(4) | TrackBack(0) | モバイルアプリ開発 > iOS

2012年07月08日

iOSアプリ開発を始めよう

前の記事に書いたとおり、新分野開拓のために、当面はスマートデバイス用アプリ開発に挑戦するつもりだけど、最初の具体的な目標を次のように定めることを決めた。

 iOS用アプリ開発をできるだけ短期間で習得する

世間で使われている用語として、「スマートデバイス」より「スマートフォン」の通りが良いが、本ブログでは「スマートデバイス」に統一していきたい。

いまさら説明するまでもないと思うが、スマートデバイス用OSといえば、iPhone/iPadに搭載されているiOSとSamsung GALAXYシリーズなどに搭載されているAndroidの2つが存在する。SymbianとかWindows Mobileとか他にもスマートデバイス用のOSは存在するが、2012年第一四半期の調査では、iOSとAndroidで市場シェアの82%を占めているそうだ。この2つのOSはApple vs Googleという構図になっており、この二社の競合対立の構図は他のいくつか先端分野にも及んでいる。IT業界において、今現在最先端を行っている企業がAppleとGoogleであるということに異論をはさむ者はほとんどいないだろう。

スマートデバイス用アプリ開発を始めるとすれば、iOSとAndroidのどちらを選択するのか決めなければならない。もちろん両方やるという選択もあるが、私にとってスマートデバイス用アプリ開発は初めての挑戦なので、「二兎追うものは一兎をも得ず」という結果になるのは避けたい。本格的にやるつもりなら、当面はどちらかに集中してやらざるをえないだろう。iOSとAndroidの両方のアプリ開発能力を持っていれば、プログラマとしてのスキル価値がより一層上がるので、将来的にはAndroidにも本気で取り組まざるをえないと思っているが、当面はiOSの方を優先してアプリ開発の習得を目指すことにしよう。

2008年に非公開のAndroid Vresion 1.0が登場して以来このOSにずっと注目してきて、アプリ開発をぜひやたりいと思い続けていたが、なかなかその挑戦を始められなかった。手をこまねいている間にAndroid OSはどんどんバージョンアップしていき、いまではVersion 4.1まで到達している。ここまでスタートが遅れてしまうと、「いまさら焦ってAndroid用アプリ開発を始めることもないかなぁ」という気持ちになってくる。そうこうしている間に、去年の夏頃からMacintoshに対する興味が少しずつ沸いてきて、それがここにきて私の中で一気に大きくなってきた。Macに対する興味がどんどん大きくなるのと一緒に、iOS用アプリ開発に挑戦してみようかという気持ちも芽生えてきた。始めて買ったPCがApple IIだったり、20年程前に旧MacOS用ソフトの開発に深く携わった経験を持っていることもあり、私にとってAppleは強い思い入れを持つ企業でもある。そして、去年の10月5日にApple社の共同設立者であるSteven Jobsがこの世を去ってしまった。この事が私のMacやiOSに対する興味を一気に膨張させるトリガーになったようだ。いまでは私の中で完全に「iOS>Android」になっていて、絶対にiOSの方を先に習得したいという気持ちになっている。

iOSを選択したもう一つの理由は、Androidよりこちらの方がアプリ開発の難易度が高そうに思えるからだ。開発言語はiOSがObjective-CでAndroidはJavaだけど、前者の方が成り立ちが古く、言語としての抽象度や論理レベルが低い気がする。Javaは少し勉強したことがあるが、Objective-Cはまったく使ったことがないのでこれはあくまで想像で書いている。多分それ程外れていないんじゃないかと思っている。これも想像の域を出ていないが、JavaベースのAndroid用アプリは、少し本気を出せば大した苦労を伴わずに習得できるじゃないと考えており、それなら、そんなに焦る必要もないんじゃないかという気がしている。あえて難易度が高いiOSの方を選択するのはその方がライバルが少ないからだ。難易度が高いということはシニアクラス以上のプログラマが少ないということも意味しているはずだ。前の仕事で東京に滞在しているときに、モバイルアプリ開発を主事業としている会社に勤務しているプログラマと話す機会があったが、その会社ではiOSとAndroidの両方に対応したアプリを開発する場合、常にiOSの方を優先するそうだ。その理由は、iOSアプリの方がユーザーの需要が大きく市場価値が高いからだそうだ。iOSがクローズドなのに対してAndroidがオープンであることが影響しているのだろう。ソフトや周辺機器の市場性という面で見ると、オープンなOSよりもクローズドなOSを搭載したプラットホームの方が高くなるのは、IT業界では良くあることだ。オープンソースOSでは、ソースを読み解く力があればディープな機能を持つアプリを作ることができるが、クローズドソースOSの場合はそう簡単にはいかない。クローズドOSにおけるアプリ開発はプログラマの経験値に大きく依存していまう。

上に色々理由を書いたけれど、ばっさりと書いてしまうと、結局「AndroidよりiOSの方が面白そう」という一言に尽きる。AndroidはLinuxベースなので組込みとの親和性が高く、組込み分野から挑戦しているプログラマが多いように思える。今回の新分野開拓の最終目標には「組込み」からの離脱も含まれているので、せっかく始めるならできるだけ組込み分野から遠く離れた所からスタートしたい。という訳で、スマートデバイス用アプリ開発のターゲットOSとして、iOSを選択することに決めた。
タグ:apple iOS
posted by とみやん at 16:09| Comment(0) | TrackBack(0) | モバイルアプリ開発 > iOS