2008年7月15日火曜日

iPhone Developer Program有料版

申し込みを忘れていた有料版を6月27日に申し込んで、7月12日に申し込み受付の返事が届き、14日に手続きが終わりました。

ただ、手続きはすんなりとは終わりませんでした。手続きはAppleから届いたメールにあるタグにジャンプして、表示されたActivation Codeがメールと同じであることを確認してボタンを押して終了・・・のハズでした。しかし、確認ボタンを押すと、次の画面で記録の照合に失敗したのでAppleに問い合わせるように出てきました。

しかたなくエラー画面にcontact usとかかれたページにジャンプして、名前やメールアドレスと共にテキストフィールドに照合が失敗している件の話を書いて送りました。幸い、その日の内に返事のメールが届きActivationを成功しました。面白いことに返事のメールは日本語でした。
有料版会員向けサイトには右上に [Program Portal] というボタンが表示されます。このボタンを押すと、アプリケーションや、検証に使うiPhoneの登録状況などをリストアップするデータベースがありました。ただし、なにせiPhoneもiPod touchもない状態なのでどのような動きをするのか確認できていません(笑)
興味深い点として、2008年6月9日以前にiPhone Developer Programに承認された人は、承認が無効になったそうです。

また、iPhone Developer Programのサイトには新規情報として以下のPDFと解説ムービーが上がっていました。

PDF
 iPhone OS 2.0 Pre-Installation Advisory (updated 7/11)
 Migrating from iPhone OS beta 6 (updated 7/11)
 Building and Distributing Multiple OS X iPhone Applications (added 7/11)

解説ムービー
 Publishing on the App Store

製品が出たのでサポートにも力が入ったと言うところでしょうか?

2008年7月3日木曜日

iPhone SDKのReadMe

最初にSDKのReadMeを読んだ時のメモをここに書くのを忘れていました。

ReadMeに書かれている内容で重要なのはアンインストールです。気に入らなければ元に戻せるそうですが、今のところアンインストールしなくてはならないような状況には陥っていないので試していません。

何がどこにインストールされるか、どのようにインストールするかなどの解説は、他のSDKと同じで特筆するようなことはないと思います。

ただ、インストール済みのXcode 3.0とは別にインストールする方法も書かれています。ちなみに、新しいXcodeのバージョンは3.1になります。

さて、問題のアンインストールですが、
起動ボリューム上のiPhone SDKとXcode developer tools をアンインストールするにはTerminalアプリケーションで以下のようにします。

$ sudo /Developer/Library/uninstall-devtools --mode=all

/Developer/ディレクトリとそれに必要なファイルを残し、起動ボリューム上のShared Libや3.1関連のファイルを削除するにはTerminalアプリケーションで以下のようにします。

$ sudo /Developer/Library/uninstall-devtools --mode=systemsupport

UNIX開発ツールを削除して/Developer/ディレクトリとそれに必要なファイルを残すには以下のようにします。

$ sudo /Developer/Library/uninstall-devtools --mode=unixdev

Xcodeの削除はそのままTrashに入れるか、以下の命令を使用します。

$ sudo /Developer/Library/uninstall-devtools --mode=xcodedir

uninstall-devtoolsのhelpによると、それぞれの引数によって以下の場所にあるアンインストールのスクリプトが実行されます。

all:
/Library/Developer/Shared/uninstall-devtools
/Library/Developer/3.1/uninstall-devtools
/Developer/Library/uninstall-developer-folder

xcodedir:
/Developer/Library/uninstall-developer-folder

unixdev:
/Library/Developer/Shared/uninstall-devtools

systemsupport:
/Library/Developer/Shared/uninstall-devtools
/Library/Developer/3.1/uninstall-devtools

ライセンス

ライセンスを流し読みすると以下のようなことが書かれていました。なお、ライセンスはコピー制限がかかっているので、ライセンスの部分はスクリーンショットですが、絵が縮小されているのでそれぞれをクリックして元の大きさで読んでください。

このWeblogでライセンスに関連するのが以下の一文です。

以上の項目の中に以下の一文がありました。

この文章は、Authorized User間の情報共有は認められていますので、iPhone Developer Programに参加している人だけに公開しているこのWeblogはライセンスに反しない、と考えて良さそうです。

ところで、こんな一文がライセンスに入っていました。

Human Interface Guidelineに反するアプリケーションはライセンス違反で訴えられますね(笑)

正直言って、Macintosh上で変なユーザーインターフェースを使ったアプリケーションを見るとイライラする性分(苦笑)なので、利用者としてはこの一文は嬉しい(大笑)

Sample Code for iPhone

Sample Code for iPhone
http://developer.apple.com/iphone/samples/index.action

ようやくサンプルコードです。サンプルコードは解説に利用されたMoveMeを除くと以下の6つです。

> HelloWorld
 問題なくビルドできました。テキストフィールドに文字を入力するとHelloWorldの替わりに表示します。

加速度検出器を利用したものが3つもあります。加速度検出器というとMacBookがハードディスクのクラッシュを防ぐために搭載した加速度検出器です。もしかするとiPhoneシミュレータが使っているかもしれない!と期待して試したところ・・・ダメでした(笑)そこまでは凝っていないようです。残念!・・・と言うことで以下の三つはビルドできますが、iPhoneシミュレータでは検証できません。
> AccelerometerGraph
 加速度検出器の利用方法を示すもので、リアルタイムで加速度検出器の出力をグラフィカルに見せるそうです。
> BubbleLevel
 加速度検出器で方向の情報を利用する方法を示すもので、これは水準器ですね。
> CrashLanding
 OpenGLを元にしたゲームで加速度検出器も利用しています。

> UICatalog
 UIKitフレームワークがもつユーザインターフェース用の部品を並べたもので、そのままコピー&ペーストできるそうです。これは、後々まで便利に使えそうです。

> SpeakHere
 Audio Tookboxフレームワークを録音機として利用する方法を示すものです。ビルドするとiPhoneシミュレータでも録音できました。

2008年7月2日水曜日

Signing Code For iPhone Development

Signing Code For iPhone Development

http://developer.apple.com/iphone/gettingstarted/docs/signingcodeforiphonedev.action

FAQは問題が起きたときに読むとして(笑)最後に色々と噂のこのページを読んでメモを取りたいと思います・・・とは言うものの肝心のiPhoneもiPod touchも手元にないので確認ができません(苦笑)

開発システムを走らせる前と、配布する前にAppleに依頼する前に、デジタル サインを求めているそうです。さらに配布する前にAppleは自身のデジタル サインを加えているそうです。

■ Digital Signatures and Signing Identities
すべてのiPhoneのアプリケーションは証明発行によるデジタル サインが必要で、証明はAppleにiPhone developerとして登録されることで発行されます。この証明発行によりアプリケーションの開発者を識別でき、アプリケーションが改ざんされていないことを確認できる・・・と書いているのですが、イタチごっこにならないように祈るのみです。ただ、この文章のiPhone developerはFreeの人も含まれるような感じがします。

証明発行には公開鍵 秘密鍵方式だそうです。チョットここは用語の利用が気になるので英単語混じりで書くと・・・private鍵はsigningプロセスで使用され、public鍵はsignatureを確認するために使用されます。public鍵はsigning certificateに保管されています。private鍵は別に保管されています。このcertificateと関連のprivate鍵の組み合わせはdigital identityまたはsigning identityと呼ばれています・・・ん〜〜日本語の公開鍵 秘密鍵方式で使われている用語との関係がチョット分かりにくい(笑)まあ、公開鍵 秘密鍵方式はすでに知っていることなので気にせずに先に進みましょう(大笑)

iPhone Developer ProgramのProgram Portalを使用して許可申請するCertificate Signing Request (CSR)を作成するために、Keychain Accessユーティリティ内のCertificate Assistantを使用するそうです。申請が許可されるとcertificateファイルをダウンロードして、Keychainに登録するためにダブルクリックします・・・で、ここからがチョット書いていることが分からないー>この手続きでハッキリして い な い のはCSRを生成するためにCertificate Assistantユーティリティを使うときで、それは自動的にpublic鍵とprivate鍵の組み合わせを生成します・・・とちゅうの「それ」が何を差すのか分からないし、何がハッキリしないのかも分からない(苦笑)まあいずれにせよ・・・Appleに送られる承認要求の中にpublic鍵が入り、private鍵はkeychainの中に入っているそうだ。

署名されたCertificateをダウンロードしてインストールするときに、Keychain Accessユーティリティがprivate鍵と関連づけ、証明承認が生成される、としています。Certificateとそのprivate鍵を見るには、Keychain Accessユーティリティを開いて、CategoryペインのMy Certificatesを開きます、としてその図が示されています。

用意した装置に署名済みアプリケーションをインストールするときに、アプリケーションが署名されており、サイン後に変更されていないことを確かめるために、iPhone OSが署名を確認します。もし、署名が無効だったり、コードが署名されていないと、iPhone OSはアプリケーションを起動しません、と書いていますが、開発したコードに署名するにはどうすれば良いのか・・・良くわかりません。

同様に、Appleに承認を得て配布するためにアプリケーションを送るときに、signing identityを使用してアプリケーションにサイン承認して、アプリケーションと共にSigning Certificateを送ります。この時にprivate鍵をAppleに送るなと書いていますが、やる人はたくさんいるだろうな(笑)Appleは登録された開発者から送られたコードであり、改変されていないことをサインを元に確認し、アプリケーションにApple自身の承認をします。これで、開発機以外のiPhoneやiPod touchで実行できます。この方法で利用者はiTunesからダウンロードしたアプリケーションが登録開発者によって書かれたもので、改変されていないことを確信できます。

■ Copying a Signing Identity To Another Computer
複数のコンピュータで開発する場合には、すべてのコンピュータにsigning identityをいれます。これはProgram Portalからダウンロードしたsigning certificateファイルはprivate鍵を含んでいないため、このファイルをコピーしても利用できません。
Keychain AccessユーティリティのFileメニューにあるExport Itemsを選択して、certificateとprivate鍵をPersonal Information Exchange (.p12)ファイルとしてExportし、他のコンピュータにこのファイルをコピーします。ファイルをダブルクリックしてcertificateとprivate鍵をKeychainにインストールします。

■ Keeping Your Private Key Safe and Secure
このシステムはsigning identity(特にprivate鍵)が安全に保管されている限りは大丈夫です。しかし、これが第三者にコピーされると悪用されます。このため、物理的な安全策をとるようにお進めします・・・う〜ん、この意味ではMacBook (Pro)は危険だな。

このあと他の人と一緒に仕事をしているときの注意書きがあります。

Keychainの初期設定ではそのパスワードはログインのパスワードと同じだそうで、コンピュータにログインしていると解錠されてしまうそうです。これは別パスワードを設定しないとダメですね。

別パスワードを設定するにはKeychain Accessユーティリティで、Edit > Change Passwordを選択します。Change Passwordダイアログのロック アイコンをクリックしてPassword Assistantで、パスワードの安全性や推薦パスワードを調べます。

使用していないときにKeychainを施錠するには、Keychain AccessユーティリティでEdit > Change Settings for Keychainを選択し、二つのLockチェックボックスをonにするそうです。

他の人がコンピュータを使うことがないように執拗に書いています。これは万が一クラックされてAppleが控訴されたときの対策ですね。米国ではこれぐらい書いていないと、悪徳弁護士にごっそり持って行かれます(苦笑)

さらに、他の安全な場所にあるコンピュータにバックアップしたり、暗号化してCDに焼いたり、Personal Information Exchange (.p12)ファイルのフォームで暗号ディスクイメージファイルに入れるなどを推薦しています。さらに、本当に安全かを確かめろと書いています。いやはや

■ Where to Start
signing identityを入手してインストールする方法は、iPhone Developer ProgramのWebサイトにあるProgram Portalに詳細が書かれています。iPhone DevCenterページの上右端にあるProgram Portalをクリックすると行ける・・・と書いていますが、そのような場所は見あたりません(苦笑)

詳細は"Security Overview"と"Code Signing Guide"を参照するように書いています。

iPhone OS for Cocoa Developers

iPhone OS for Cocoa Developers
http://developer.apple.com/iphone/gettingstarted/docs/iphoneosforcocoadevelopers.action

この資料はCocoaで開発している人向けの資料です。iPhone OSの開発とCocoaの主な違いをここに列挙しています。

■ Changes to Foundation Framework
Foundationフレームワークはvalue objects、strings、collections、thread managementなどが入っているのですが、全部がiPhone OSに入っているわけではないとしています。

Table 1がその主なものと、入れなかった理由と代案の表だそうです。詳細は"Foundation Framework Reference."の"The Foundation Framework"を参照しろと書いています。

■ UIKit Versus AppKit
UIKitフレームワークはAppKitフレームワークの手法を元に書かれていますが、まったく異なるプラットフォーム向けの異なる用途を前提にしています。Cocoaのシンボル名をUIKitの近い名前に入れ替えたからと行って動くものではありません。二つのフレームワークは構造も挙動も異なるので、それに合わせて修正と書き換えをして・・・等々、当前のことが書かれています。

Table 2には違いがリストアップされています。

iPhoneではCore Animationレイヤの上に描画されているそうです。Core Animationレイヤとやり取りする時は、レイヤのツリー構造を直接制御するときやViewレベルで提供されてない機能を使う時だそうです。

概念的にはMac OS Xと同様に、iPhoneもWindowとViewは同じ構造だけど、実装は異なるようです。Mac OS XではNSWindowクラスはNSResponderのサブクラスで、iPhone OSではUIWindowクラスはUIViewのサブクラスだそうです。これはたしかビデオでも言っていたような気がします。この違いにより、UIKitのウィンドウはCore Animationレイヤを持っていて、アクセラレーションの描画ができるそうです。

Mac OS XとiPhone OSの他の違いとして、iPhone OSではウィンドウが一つだけという点があると書いています。異なる内容を描画するにはViewを変更するそうです。

ウィンドウが一つなのに、ウィンドウを設けている理由は、アラートやステータスウィンドウなどをアプリケションのウィンドウの上に置くためだそうです。

■ Changes to Other Frameworks
Table 3はiPhone OSとMac OS Xで共通になっている上記以外のフレームワークから重要な違いをリストアップしています。

■ OpenGL Notes
私がOpenGL ESを使うことはまず内のでパス(笑)

■ Coordinate Systems
Mac OS XとiPhone OSでは座標系が異なると書いています。iPhone OSでは左上が(0,0)で、右と下に向かって座標の数値が多きなくなります。

■ Memory Management
iPhone OSではmemory-managed modelでメモリの確保、解放、自動開放オブジェクトを利用し、ガベージコレクションはしていない、この点は重要ですね。初期のMS-DOSや組込を経験している人であれば当たり前ですが、WindowsやMacしか知らない人には面倒です。とはいえ、MS-DOSしか知らない人はObjective-Cは面倒(笑)

ループでautoreleaseのオブジェクトをアロケートしたときにはループ内で直接オブジェクトを解放するか、autorelease poolを生成して定期的に解放するように書いています。これをやらないとメモリ不足でiPhone OSが自動再起動(笑)と言うことですね。

Darwin

書き忘れていましたがiPhone SDKで使われているgccやgdbなどのソースが以下のサイトで公開されています。

http://www.opensource.apple.com/darwinsource/

2008/07/02現在の最新版iPhone SDK Beta 8は以下の場所にあります。

http://www.opensource.apple.com/darwinsource/iPhoneSDKBeta8/

SDK Beta 8で公開されているファイルは以下の四つです。
 cctools-667.8.0
  gcc-5484
  gdb-961
  gnumake-119

2008年7月1日火曜日

Creating an iPhone Application目次

1ページを読むのに時間がかかったので、後から追いかけやすいように目次を付けました。

その1
Examining the MoveMe Sample Project
Building the MoveMe Application
A Word About Memory Management
Initializing the MoveMe Application

その2
Defining the Application Delegate
Creating the Application Window

その3
Drawing the Welcome Button
Handling Touch Events

その4
Animating the Button's Movement
Finishing the Application

その5
Taking Your Applications Further
>Tracking Orientation and Motion Using the Accelerometers
>Accessing the User's Contacts
>Getting the User's Current Location
>Playing Audio and Video
>Taking Pictures with the Built-in Camera

Creating an iPhone Applicationその5

Creating an iPhone Application
http://developer.apple.com/iphone/gettingstarted/docs/creatingiphoneapps.action

まだまた、"Creating an iPhone Application"のメモが続きます(苦笑)
他のメモと同様に翻訳じゃないのでたくさん抜けていますし、たくさん間違っているハズですが、原文を読むときの参考にはなると思います。

■ Taking Your Applications Further
この項目が最後で、これ以降にも項目はありますが文字がわずかに小さく小項目になっています。見た目が命のAppleにしては珍しく分かりにくいレイアウトです(笑)

デバイスの向きに合わせてViewを変えるなどのiPhone独自の機能に関しての解説です。ハードウェアの利用方法をiPhoneの既存アプリケーションに合わせて統一感を持たせるようにAppleは求めているようです。

>Tracking Orientation and Motion Using the Accelerometers
加速度検出器の話しですが、XYZのどれがどの方向に割り当てられているか注意が必要です。加速度検出は重力検出として利用することで装置が縦向きか横向きかなどを検出できます。

装置の向きが変わるとシステムがアプリケーションに知らせますので、向きに合わせてViewを縦向きや横向きなどに変更できます。UIViewControllerクラスが向きの変化に合わせて、インタフェースを回転させたり、Viewの位置を自動修正するなどの機能を提供します。

加速度検出器の生データを見るときはUIKitのUIAccelerometerオブジェクトを使用します。UIAccelerometerは指定したタイミングでデータを得ることができます。また、前後に振っているなどの動きや向きを知ることもできます。

詳細は"iPhone OS Programming Guide"の"Accessing Accelerometer Events"の項目を見ろと書かれています。

>Accessing the User's Contacts
ユーザのアドレス帳を利用できます。Phone、Mail、SMS(Short Message Service)Textなどと同じ容易にこのサービスを利用できます。

iPhone OSはアドレス帳に直接、あるいは間接的にフィルタをかけるなどの方法でアクセスできます。連絡データを取り出したり生成したりするシステム インタフェースが提供されています。このインタフェースを利用することにより、システムと似た感触をもったアプリケーションを開発できます。

詳細は"Address Book Framework Reference"と"Address Book UI Framework Reference"を見ろと書いています。

>Getting the User's Current Location
iPhone OSが走っている装置はユーザの動きに合わせます。ユーザの現在位置に合わせた情報を元に、インターネットでどこでも仕事ができます。Core Locationフレームワークにより、現在位置に近くの喫茶店のリストを提供することができます。

Core Locationフレームワークは携帯電話のアンテナやWi-Fiホットスポット(もちろんGPSも)の信号をモニタして三角測量しています。アプリケションからこのフレームワークを利用することで、現在位置を知ったり、位置が変わったことを知ることができます。

詳細は"iPhone OS Programming Guide"の"Getting the User's Current Location"の項目を見ろと書かれています。

>Playing Audio and Video
iPhone OSはCore AudioとOpenALフレームワークを通してオーディオを利用できます。さらにMedia Playerフレームワークを使用してビデオ再生もできます。
Core Audioでは再生、録音、音声処理、ストリーム オーディオ再生のインタフェースを提供します。簡単な音声エフェクトや複数音声再生、合成、音場再生処理、バイブレーションに利用できるそうです。

Media Playerフレームワークはビデオをフルスクリーン(だけ)で再生します。さまざまなフォーマットのビデオ再生ができると書いています。再生コントロールの表示や再生アスペクト比なども設定できるそうで、ゲームに使えるとしています。この文章ではゲームで利用できるという内容が多いですね。

例によって、詳細は"iPhone OS Programming Guide"の"Audio and Video Technologies"を見ろと書いています。

> Taking Pictures with the Built-in Camera
CameraアプリケションはUIKitフレームワークのUIImagePickerControllerクラスを経由してiPhoneで写真を撮影して、他の写真と共にライブラリに追加できるとしていますが、動画のことが書かれていません。Pickerインタフェースを表示して、Pickerコントローラがユーザとのやり取りを処理して、イメージを返します。

詳細は"iPhone OS Programming Guide"の"Taking Pictures with the Camera"と"Picking a Photo from the Photo Library"の項目を見ろと書いています。

ようやく、一ページを読み終えました(笑)

Creating an iPhone Applicationその4

Creating an iPhone Application
http://developer.apple.com/iphone/gettingstarted/docs/creatingiphoneapps.action

"Creating an iPhone Applicationその3"のメモの続きです。1ページを読むのに長々と続いていますが、他のメモと同様に翻訳じゃないのでたくさん抜けている点も、たくさん間違っている点も、原文を読むときの参考にはなると思う点も同じです。

■ Animating the Button's Movement
まずはアニメーションによる情報提供の重要性を説いています。素早い理解を得る言う意味でアニメーションのインタフェースを捉えると、iPhoneは今までのPDAやPCとは一線を画していると言えそうです。最初にMacintoshを見たときの驚きに近いものを感じるのはこの点かもしれません。ここでは例として画面の切り替えアニメーションが上下左右のどちらに行くかで、情報の詳しさを表していると解説しています。

UIKitにはアニメーションが組込済みなので、アプリケーションMoveMeではWelcomeボタンのアニメーションに利用でき、基本的な動作は以下の通り、

1.アニメーション関連ViewのbeginAnimations:context:メソッドを呼び出し
2.アニメーションのプロパティ設定
3.アニメーションを開始するViewのcommitAnimationsメソッドを呼び出し

Listing 8はWelcomeボタンが最初にタッチされたときの動きをするために使用されたコードです。アニメーションの時間設定を大きさの設定をしています。アニメーションが終了するとアニメーションdelegateのgrowAnimationDidStop:finished:context:メソッドがボタンを少し小さくして、プラカードを指の位置に移動させます。

詳細は"iPhone OS Programming Guide"の"Applying Core Animation Effects"の項目を見ろと書かれています。

■ Finishing the Application
ここはInfo.plistの話しです。Info.plistはKEXTなどでも悩ましい存在です(苦笑)

Listing 9がアプリケーションMoveMeのInfo.plistですが、ベータ8のSDKでは表形式で表示されています。この表形式は新しいProperty List Editorと同じです。XMLに特化したテキストエディタであった旧版と比べて、Xcodeのビルド設定に近い感じになっています。Info.plistには実行ファイルの名前、アイコンのファイル名前、システムがアプリケーションを識別するための名前などが入りますが、iPhone独自のものとしてステータスバー表示の有無を決めるUIStatusBarHiddenキーがあります。プログラム内からもこの設定はできるそうですが、アプリケーションがらうんちした後で消えるので奇妙な感じになると書いています。

詳細は"iPhone OS Programming Guide"の"The Information Property List"の項目を見ろと書いています。

・・・と、ここまで基本だそうで、これ以降の項目ではiPhoneらしい機能を紹介するそうです。