2008年12月24日水曜日

サイト公開

Apple Developer Connectionの人と話す機会があり、iPhone Dev Center Log inのWebページ画面下方の記述に関して尋ねました。二人のiPhone担当者がその場で相談し確認した上で返事を頂きました。

iPhone SDKはGM(Golden Master)版であれば公開の場で話して良いとの答えです。ただし、ベータ版に関しては話しできません。

以上の返事を元にこのサイトを公開することにしました。技術的な記述はすでに旧聞になりかけていますが、皆さんのお役に立てば幸いです。

2008年10月25日土曜日

NDA解除されず

iPhoneの開発者契約が改定されました。

解約書では機密情報に関しては4. Confidentialityに以下のように定義されています。(改行は私が入れました)

Notwithstanding the foregoing, Apple Confidential Information will not include:

(i) information that is generally and legitimately available to the public through no fault or breach of yours,

(ii) information that is generally made available to the public by Apple,

(iii) information that is independently developed by you without the use of any Apple Confidential Information,

(iv) information that was rightfully obtained from a third party who had the right to transfer or disclose it to you without limitation, or

(v) any third party software and/or documentation provided to you by Apple and accompanied by licensing terms that do not impose confidentiality obligations on the use or disclosure of such software and/or documentation.

ここで、iPhone Dev Center Log inのWebページ画面下方には以下のような文章があります。
All information presented or provided to you by Apple through the iPhone Dev Center is considered Confidential Information and is subject to your Registered iPhone Developer Terms and Conditions with Apple.

これでは以前と変わらず、このWebサイトの公開はできません。

2008年10月2日木曜日

NDA条項を削除予定

Appleが一週間以内にNDA条項を削除するとの発表をしました。

iPhone Developer Program
http://developer.apple.com/iphone/program/

数百に及ぶ特許申請がようやく終わったためとしています。実際、Appleは特許申請関連で何度となくしくじっているので、特許はNDA条項を付加した理由のすべてではないかもしれませんが、重要な理由の一つだと思います。

まぁ、このサイトでは実際にNDAが外れるまで待ちます(笑)

2008年8月30日土曜日

iTunes Connectその2(アプリケーションの登録と変更)

アプリケーションの追加方法はAdd New Applicationに書かれています。先のページにもあるように、Manage Your Applicationsがアップロードして登録する場所です。アプリケーションの大きさが200MBを超える場合にはこのページにあるApplication Loaderを使用するように推薦しています。新規にアプリケーションを登録する場合には主に使用する言語と開発者名を設定します。この設定はiTunes内のApp Storeにて開発者名と解説に利用されますが、後から変更できないそうです。

アプリケーションが暗号化技術を持っている場合にはExport Compliance Pagesから米国の輸出規制法に基づいてその内容を報告します。この場合にはCCATS(Commodity Classification Automated Tracking System)に基づく承認(番号?)を得て、そのコピーを添付するそうです・・・とは言うものの面倒(苦笑)詳細は以下のURLあたりを参照してください。

U. S. Bureau of Industry and Security
http://www.bis.doc.gov/index.htm

Export Administration Regulations
http://www.access.gpo.gov/bis/index.html

詳細は読んでいませんが(笑)以下のページが役立つでしょう・・・たぶん
U. S. Bureau of Industry and Security - Guidelines for Requesting a Commodity Classification
http://www.bis.doc.gov/licensing/cclrequestguidance.html

Overview Pageにはアプリケーションのメタデータを書き込むのですが、最初にアクセスした時にはこのページを編集できないそうです。詳細はPDFにも書かれていますが、Webサイトにあるヘルプボタンを参照するように書いています。

A) Application Name -
B) Application Description –
  4000文字未満ですが、700文字以下にすることを推薦しています。
  書き込めるのはプレーンテキストです。制御文字は改行だけでHTML
  のタグなども利用できません。スペルチェックも構文チェックもしない
  と書いています(笑)
C) Device –
  iPhoneやiPod touchなどを選択できますが、今後は数が増える
  でしょうね。
D) Primary and Secondary Category -
  アプリケーションの種類を選びます。
E) Subcategories –
  ゲームはさらに種類を選びます。
F) Copyright –
  コピーライトの印を入れるなと書いています。
G) Version Number –
  バージョン番号はアプリケーション製品ページのアプリケーション
  アイコンの隣に表示されるそうです。
H) SKU Number –
  アプリケーションを特定するためのUTF8のAlphanumericだそうで、
  後から変更できないとしています。
I) Support Email Address –
  アプリケーションに何らかの問題があった場合にAppleから問い合
  わせるためのメールアドレスで、ユーザには公開されないそうで、
  このアドレスは必須とされています。
J) Support URL –
  サポート用WebサイトのURLも必須だそうです。
K) Application Website URL –
  アプリケーションに関する詳細な情報を得るためのWebサイトの
  URLですが、必須ではないそうです。
L) End User License Agreement –
  アプリケーションの説明と同様にライセンスもプレーンテキストで、
  改行だけが有効です。

入力画面とiTunes App Storeのサンプルが対応づけられた図があるので、どの内容がどこに表示されるのか、またされないのかが分かります。

Upload Pageはアセット(アプリケーション自身、大きなアイコン、メイン画面のスクリーンショット、その他の追加スクリーンショット)をアップロードするページです。追加スクリーンショット以外は必須です。Webサイトのスクリーンショットをもとに入力するべき内容を解説しています。一つのアプリケーションの最大サイズは2Gバイトだそうです。

Pricing/Availability Pageでは公開日(世界時間)、国別通貨単位での売価と売り上げの表、販売する国を設定します。販売する国にはRest of Worldという項目がある点が興味深いです。

Localization Pageでは英語のメタデータ以外を追加できるそうで、PDFに書かれている選択可能な言語は以下の通りです。

 US/UK English
 German
 Spanish
 Dutch
 Italian
 French Canadian
 French
 Japanese

Review Pageで内容の確認をし、よければSubmitしてApp Storeに上がるのを待ちます。App Storeの作業状況は以下の七つの段階で表示されるそうですが、詳細は本文を参照してください。

In Review (Yellow) – 
Waiting for Upload (Yellow) –
Pending Contract (Yellow) – 
Ready for Sale (Green) – 
Rejected (Red) –
Removed from Sale (Purple) –

Editing and Updatingではアップロードしたデータの変更方法が、またUpdating an Existing Binaryではアプリケーションのアップデート方法が紹介されています。変更とアップデートはiTunes ConnectのManage Your Applicationsで行います。最初の登録時とは異なり、各タブで変更した場合には必ず保存をするように書いています。

Large Binary Uploadsでは200 MB以上のアプリケーションをアップロードする方法が書かれています。詳細は本文を参照してください。

Game Advisoriesではゲームの登録に関して解説していますが、詳細は本文を参照してください。ゲームに関しては文章、図版、写真などの「わいせつ」「ポルノ」「不快度」「名誉毀損」およびAppleが不適切と判断したものなどを制限しています。なお、ここで書かれているESRBとPEGIはそれぞれ以下を参照してください。

Entertainment Software Rating Board
http://www.esrb.org/

Pan European Game Information
http://www.pegi.info/

日本のWikipediaにもそれぞれ解説があります。

・・・と言うことでiTunes ConnectのPDFのメモは終わり。

iTunes Connectその1(Program Portal補足)

iTunes Connect Developer Guide(ファイル名:iTunesConnect_DeveloperGuide.pdf)のメモです。

Program Portalの解説44ページに書かれている"Submitting your application via iTunes Connect"の詳細です。

Program Portalでは書かれていなかった、大小二つのアイコン(57 x 57と512 x 512)の仕様が書かれています。また、Info.plistのUIPrerenderedIconというタグが紹介されています。解説の図にあるように登録したアイコンに、光った感じ(光沢)の印影を付けてくれるようです。書式は以下のようになりますが、詳細はURLを参照すると良いでしょう。

<key>UIPrerenderedIcon</key>
<true/>

Apple - Support - Discussions - Shine/NoShine ...
http://discussions.apple.com/thread.jspa?threadID=1566351&tstart=-5

スクリーンショットの大きさに関しても図付きで紹介しています。また、縮小されますが、スクリーンショットは4つまで登録できるそうです。

販売する場合には「Contacts:」に連絡先が必要で、販売に関する契約が完了するまで販売できません。

米国とカナダ以外で販売する場合には「Additional Languages:」に書きます。

暗号化が含まれているアプリケーションは「Export Compliance:」にある質問に答えて、正規に輸出承認を得ていることを証明しなくてはなりません。

「Additional Artwork:」はAppleのWWDCがアプリケーションを紹介するかもしれないので、絵を準備するようにと言うことです。

iTunes ConnectはWebベースのApp Store用管理ツールで、契約状況、利用者管理、アプリケーションやメタデータ、アセットの追加をできます。

iPhone Developer ProgramのTeam AgentがiTunes Connectに初期登録されており、Team AgentのApple IDとパスワードでiTunes Connectにログインできます。

iTunes Connectのログイン ページへのリンクはiPhone Developer Program Portal内左欄からDistributionを選択し、App Storeタブ内の折りたたまれた分かりにくい場所にあります・・・が以下の場所です(苦笑)

https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/wa/default

ちなみに、2008/08/29現在ではProgram Portalに一度ログインするとiTunes Connectにジャンプするときに再ログインは求められませんでした。

iTunes Connectのホームページには以下の五つのアイコンが表示されていて、GuidのPDFにある図よりも一つ増えています。

 Sales/Trend Reports
 Contracts, Tax, & Banking Information
 Financial Reports
 Manage Users
 Manage Your Applications

なにせ、iPhoneは今までのPCや携帯のビジネスモデルとは異なる事を考えているようなので、今後もProgram PortalとiTunes Connectのサービス内容は変わっていくでしょうね。

Manage Users
この項目は現在もありますが、この場合のUserは顧客ではなく、管理のための利用者です。利用者には四つの役割を割り振ることができ、それぞれのメールアドレスにiTunes Connectのアカウントに関する情報が送られます。

四つの役割、Admin、Legal、Finance、Technicalに関する詳細は本文を参照してください。それぞれの役割はこのManage Usersのページで割り振ったり、削除したりできます。面白いことにiPhone Developer Programの個人会員でも、このiTunes Connectには複数の人を割り当てることができます。使い方の詳細は本文を参照してください。

iTunes Connectから送られるメールにはいくつかのタイプがあり、iPhone Developer Programの会員にはCntractとFinancila Report、Misc Reporting、Content Tichetの四つが割り振られ、解説PDFに書かれている他の内容は2008/08/30現在では利用不可のようです。

Contracts, Tax, & Banking Information
ここは、支払いや税金などの経理事務や契約内容などがまとめられています。

Financial Reports
AdminとFinanceの利用者が各月の経理報告を見ることができます。

Manage Your Content
現在はManage Your Applicationsとなっています。アプリケーションのアップロード、メタデータの設定、価格付け、使用言語の設定ができ、設定が終わり承認されるとiTunesのApp Storeに表示されます。

Contact Us
2008/08/30現在、このタグは枠外下の中央に表示されています。また、連絡内容の分類はApplication Questions、Legal Questions、Financial Reports, Tax, Banking and Payment Questions、Reporting Questionsの四つになっています。

2008年8月27日水曜日

複数アプリケーション開発

複数のアプリケーションを作るときの注意書きBuilding Multiple Apps for Distribution and Validating Your Distribution Builds(ファイル名:distributing_multiple_apps_readme.pdf)の内容はProgram Portalの解説37ページに書かれている内容と比べて多少単語が異なるときがあるだけでほぼ同じでした。

Program Portalの解説PDFその2

ようやくDistributionの章、50ページの24ページにたどり着きました。集中して読める環境が欲しい(苦笑)

Program Portalの左欄Distributionの説明で、App StoreやAd Hoc経由で配布するためにアプリケーション提出する方法を解説しています。この作業ができるのはTeam Agentだけだそうです。

ここではiPhone Distribution Certificate(iPhone配布証明書)なるものを生成するように書いています。

iPhone Distribution Certificateを請求するために、先の項目でキーチェンアクセス.appを使って作成したCSR(Certificate Signing Request)を使用します。

これ以降に'Generating a Certificate Signing Request'と'Submitting a Certificate Signing Request for Approval'、'Downloading and Installing iPhone Distribution Certificates'、'Saving your Private Key and Transferring to Other Systems'に書かれている内容は、開発Certificateを入手するときの作業とほとんど同じです。

この次の二つの小項目ではApp Storeで配布する方法とAd Hocで配布する方法を紹介しています。

開発用Provisioning Profileと、App Store配布Provisioning Profile、さらにAd Hoc配布Provisioning Profileはそれぞれ異なるそうです。

以上でようやくXcodeを使って配布用のビルドができると書かれています。'Building your Application with Xcode for Distribution'に書かれている内容に沿ってProject Infoの設定などを行います。

先の開発用Provisioning Profileでも書かれていましたが、複数のアプリケーションを配布するにはアスタリスク( * )を使って設定することになるようです。既存のProvisioning Profileを消去するなど、面倒な作業が必要だそうで'Building Multiple Apps for Distribution and Validating Your Distribution Builds'と'All Distribution Methods'に色々と書かれています。

次にiTunes Connectに関して解説しています。 iTunes ConnectはApp Storeでのアプリケーション販売の登録や管理をするためのWebベースのツールで、Team Agentは契約の確認やユーザの管理、バイナリやメタデータ、assetの申請ができます。

Team AgentはProgram Portalの左欄にある'Distribution'項目内にiTunes Connectへのリンクがあり、そのログインページにジャンプしますので、Program Portalで使用しているApple IDとパスワードを入力してログインします。

ここで、iTunes Distribution Terms & Conditionsの再確認が求められるそうですが、わざわざ 'Distribution Terms & Conditions'と小項目を設けて、会社に法務部があれば確認するように書いています。

次に、登録に必要なメタデータを用意するように書いて、16の項目を列挙しています。さらにiPhoneなどのホームスクリーンとApp Storeに表示するために二つのアイコン(57 x 57と512 x 512 ピクセル)と、商品解説用のスクリーンショットなどを準備するように書いています。スクリーンショットは垂直(320 x 460)と水平表示(480 x 300)が利用できステータスバーを入れないように言っています。最初からステータスバーがないフルスクリーンでは320 x 480で登録できるそうです。

以上で準備ができれば、ファイルをzipで圧縮して送信するようです。

次にAd Hoc配布ですが、Standardプログラム参加者はApp Store以外(outside of App Store)に100の装置に配布できるとしています。ここではAd Hoc配布用Provisioning Profileの入手とXcodeでの作業が解説されています。

ようやく、読み終わりました。仕事場の雑音が多すぎてエラク時間がかかりました(苦笑)

2008年8月24日日曜日

Program Portalの解説PDFその1

このメモは"iPhone Developer Program Standard Program Portal User Guide for OS X iPhone 2.0"という表題(ファイル名:iphone_developer_program_user_guide__standard_program_v1.1.pdf)のPDFファイルを読んだときのものです。

Welcomeの章では開発チームを作れとか、iPhone開発証明を要求して承認を得ろとか、App IDを生成しろなど、など何やら大袈裟なことが書かれています。

Developmentの章で大袈裟な理由が分かります。iPhoneの開発者向けサイトにある'Program Portal'というページに、開発に参加する人や使用する装置(iPhoneやiPod touchなど)、作る予定のアプリケーションを登録するためです。

推測ですが、
このような手続きにより少しでもウィルスなどの悪質なプログラムを閉め出すことを狙っているのかもしれません。iPhoneという新しいプラットフォームでは、PCのような状況はユーザとして避けたいものです。しかし、同時にさまざまなアプリケーションが提供されるというPCの良いところも取り入れたいのもの確かです。その暗中模索と折衷案が今回のAppleのiPhone SDKと見るべきと思われます。

閑話休題、
個人としてiPhone Developer Programに登録した人は、チームなどの登録は不要ですし、出来ません。

チームのメンバーには三つの役割が割り振られます。それぞれTeam Agent、Team Admin、Team Memberです。

Team AgentはiPhone Developer Programに登録した人で、Appleとの連絡やライセンスなどの責任者です。Team Agentができることは以下の通りです。
 Team AdominやMemberの登録、
 デジタル証明要求の承認、
 開発装置の登録、
 App IDの生成、
 iPhone Distribution Certificateの入手、
 開発用と配布用のProvisioning Profileの生成

Team AdominがProgram PortalでできることはTeam Agentと同じです。Team AdominとTeam Agent がチームの最小構成になります。Team Adominの数に制限はありません。
 新しいTeam AdominやMemberの登録、
 デジタル証明要求の承認、
 開発装置の登録、
 App IDの生成、
 iPhone Distribution Certificateの入手、
 開発用と配布用のProvisioning Profileの生成

Team Member ができることは以下の通りです。
 デジタル証明を要求
 開発用のProvisioning Profileのダウンロード

以上の三つのメンバーは装置でのアプリケーション検証ができます。

Adding Team Admins and Team Membersの小項目ではTeam AgentとTeam Adminが新規にTeam AdminやMemberを登録する方法を紹介しています。登録場所はProgram Portalページ左欄の'Team'を選択し'Invitation'タブにあります。Invitationの名前からも推測できますが、登録したメールアドレスにチームへの招待状を発送する方法で登録を処理します。

面白いことにTeam Agentの新規登録はProgram Portalページからはできないらしく、ADC Support Teamの連絡用ページを通して要求するようです。

次はiPhone Development Certificateの申請です。まず最初にMac OS X 10.5.xに付属するキーチェーンアクセス.appを使ってCSR(Certificate Signing Request)の時に公開鍵と非公開鍵を生成します。

ここからは、日本語版キーチェーンアクセス.appでも、英語版と同様にできるか試してみます。

「キーチェーンアクセス」メニューから「証明書アシスタント>証明局に証明書を要求...」を選択します。なお、左下欄「分類」の「鍵」が選択されていると、「証明局に証明書を要求...」の表示が異なりますので、注意してください。

「ユーザのメールアドレス」と「コモンネーム」には、iPhone Developer Programに登録したメールアドレスと名前を入力します。「CAのメールアドレス」は無視して、「要求の処理」で「ディスクに保存」「鍵ペア情報を指定」を選択し、「続ける」ボタンを押します。鍵情報を保存するダイアログが表示されますので保存します。

次の画面で「鍵のサイズ」を「2048ビット」、「アルゴリズム」を「RSA」を選択します。

以上でCSRファイルが指定した場所に保存されます。

以上でCSRファイルができたので、Program Portalに登録するそうです。ここからはProgram Portalでの作業なので動作検証せずにPDFを読み進みます。

WebブラウザSafariでProgram Portalのサイトを開き、‘Certificates’、 ‘Development’、‘Add Certificate’の順でクリックしていきます。

作成したCSRファイルをテキストエディタで開いて、内容をすべてコピーし、Safariに表示されているテキストフィールドにペーストし、「Submit」のボタンを押します。キーの大きさが2048ビットでないと、Program Portalからはねられます。

以上の作業でTeam Adminに登録完了のメールが届きます。登録失敗したときもその趣旨を書いたメールが届くそうです。さらに、Team AdminがCSRを承認したり削除してもメールが届くそうです。

Team AgentとAdminはiPhone Development Certificate要求の承認と非承認ができますが、Team Adminは自身のCSRの承認を得ないと、Team Memberからの要求に承認を出せないそうです。Approving Certificate Signing RequestsとDownloading and Installing Development Certificatesの小項目には承認と非承認の方法と証明書(拡張子.cerのファイル)のダウンロードとキーチェーンアクセス.appへのインストール方法が書かれています。

複数のコンピュータで開発していたり、何らかの理由でシステムを再インストールする場合に、個人鍵がないと開発ができなくなるのでCSRのファイルの管理は悩ましい問題です。Saving your Private Key and Transferring to other Systemsの小項目に複数のコンピュータでCSRファイルを共有する方法が書かれています。

iPhoneやiPod touchなどの装置の登録はTeam AgentかAdminが行います。登録にはUDID(Unique Device Identifier)と呼ばれる16進数で40桁の文字列が使用され、Program Portalに最大100まで登録できます。また、UDIDは後で生成するprovisioning profileにも含まれます。

UDIDは装置を接続してXcodeのバージョン3.1以降やiTunesのバージョン7.7以降で調べることができます。詳細はLocating a Unique Device ID with XcodeまたはLocating a Unique Device ID with iTunes 7.7の各小項目を参照してください。また、Program Portalへの登録、抹消、変更方法はAdding DevicesとRemoving Devices from your Development Team、Editing Devices on your Development Teamの各小項目を参照してください。

書いたコードをiPhoneやiPod touchなどの装置で動作検証するにはOS X iPhoneをインストールするそうです。インストールには色々と制限がありますが、詳細はInstalling OS X iPhoneを参照してください。

次にApp IDと言うものを生成します。Apple IDではありません(苦笑)装置に作ったアプリケーションをインストールするためにApp IDが必要だそうです。

作ったアプリケーションがキーチェインにアクセスすることをOS X iPhoneが承認するためにApp IDというものが必要だそうです。また、開発と配布のProvisioning ProfileにもApp IDが含まれているそうです。

App IDはAppleが生成した10文字の"Bundle Seed ID"プレフィックスと、Team Adminが定義した"Bundle Identifier"からなっています。ただ、複数のアプリケーションを開発配布する場合には問題があるようです。一時的な問題回避策として"Bundle Identifier"をアスタリスクにするように書いています。複数のアプリケーション開発に関しては別にPDFファイルがあります。これ以降はApp IDを生成する方法が書かれています。

次は今までにも出てきた開発用Provisioning Profileです。配布用は24ページから始まるDistributionの項目で説明されています。

開発用Provisioning Profileは動作検証のために各装置にインストールし、開発チームと装置を特定します。開発用Provisioning ProfileにはiPhone Development Certificate、Unique Device Identifier、App IDのセットが入っています。一つの装置に複数の開発用Provisioning Profileを入れることができるそうです。

'Creating a Development Provisioning Profile'にProgram Portal上での開発用Provisioning Profileの作り方が解説され、'Installing a Development Provisioning Profile'にProgram Portalから開発用Provision Profileをダウンロードし、Xcodeで装置にインストールする方法を紹介しています。また、iTunes 7.7でもインストールできると書いています。

この段階で以下のものがそろっているはずです。
 1.iPhone Development Certificate(承認されたもの)
 2.iPhoneまたはiPod touch(登録されたもの)
 3.開発用Provisioning Profile(正しくインストールされたもの)
もし、iPhone Development Certificateと開発用Provisioning Profileが一つだけであれば、Xcodeの初期設定のままでアプリケーションを走らせることができるはず・・・だそうです。'Running your Development Application on a Provisioned Device'にその手順が書かれています。

つづく・・・(笑)

2008年8月14日木曜日

iPhone Developer Programからメール

2008/08/13にiPhone Developer Programから"Support resources for the iPhone Developer Programと言うタイトルのメールを受け取りました。

作ったアプリケーションをダウンロードするためのサイトProgram Portalの説明書PDF[ファイル iPhone Developer Program Portal User Guide]ができたそうです。このPDFはiPhone Dev Centerのトップページから右上の[Program Portal]ボタンをクリックし、


次画面の右上にあるボタンをクリックすると入手できます。




また、iTunesのApp Storeでアプリケーションの販売状況などの管理サイトも紹介されています。始めてこのサイトにジャンプすると使用許諾書が表示され、同意すると管理サイトを見られます。使い方は[iTunes Connect Developer Guide]というPDFにまとめられています。このファイルはiTunes Connectのトップページにある[Manage Your Applications]をクリックして、


次の画面下に表示される[Download Detailed Instructions]をクリックすると入手できます。


次はAppleのエンジニアから受けられる技術サポートで、いままでのDTSから受けたサービスと似ています。ただ、メーリングリストによるサービスがWebアプリケーションのみである点が気になります。

興味深い機能として[Ad Hoc distribution]があります。100名限定でアプリケーションを配布する方法で、メールやWebサイト経由で配布できるとしています。動作検証用などに利用できるとしています。[Ad Hoc distribution]の方法は上記の解説PDFに書かれているそうです。

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らしい機能を紹介するそうです。

2008年6月28日土曜日

iPhone SDK β8

iPhone SDKのサイトを見るとβ8が上がっていました。今試しているAppleのサンプルコードとどの程度互換性があるか気になります。アンインストールの方法は書いてはいるものの、面倒なことに替わりありません(笑)

readmeによると、このベータ8はiPhone 2.0の最終版と互換性があり、App Storeに登録するiPhone OSアプリケーションに使うように書いています。登録するためにはiPhone Developer Programの会員になるように、とも書いています。あとは、例によってインストールとアンインストールの注意書きです。

Creating an iPhone Applicationその3

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

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

■ Drawing the Welcome Button
UIKitが提供している標準的なViewは単純な内容であれば変更なしに表示できて、イメージならUIImageView、文字列ならUILabelが使えます。アプリケーションMoveMeだと、UIViewオブジェクトのbackgroundColorプロパティで背景色を初期化メソッドで描画しています。backgroundColorプロパティはInterface BuilderでnibファイルMoveMeView.xib内のMoveMeViewを作るときにInspectorウィンドウのAttributeタブで設定しています。複雑な背景が必要なときにはUIKitの棒が機能か、QuartzやOpenGL ESを利用できます。

アプリケーションMoveMeのPlacardViewクラスはWelcomeボタンの描画とスクリーン上の位置管理をします。PlacardViewクラスはすべてのプロセスを紹介するために、あえて前述のUIImageViewやUILabelを使わずに描画しています。描画はPlacardView.mファイル内のdrawRect:メソッドで行われています。

drawRect:メソッドが呼び出された時点で、描画のための環境は利用可能になっていますので、必要な描画命令を発効するだけです。PlacardViewクラスの描画内容はPlacard.pngで描かれたバックグランドとテキストで、テキストは逐次変更することが出来ます・・・とここでPlacard.pngの描画が気になって調べてみると、PlacardView.mファイル内でinitメソッドでPlacard.pngイメージ ファイルを読み込み、placardImageオブジェクトに入れてdrawRect内でdorawATPointメソッドで位置を指定して描画していて、確かに描画の手順が詳しく分かるようになっています・・・解説文に戻ると、処理の手順が示されています。

1.現在のView座標0にボタンの背景イメージを描画しています。この時にViewの大きさはイメージに合うようになっていて、ボタン全体が描画されています。

2.ボタンの中央に来るようにWelcom文字列の位置を計算します。この文字列はさまざまに変わるので、毎回計算しなくてはなりません。

3.描画色を黒に設定します。([[UIColor blackColor] set]のことを言っているのであろうが、この行をコメントアウトしても結果は変わりません。おそらく初期値が黒なのでしょう)

4.文字列をずらせて描画

5.描画色を白に設定します。

4.文字列を描画します。

Listing 4では、placardImageメンバ変数がボタン背景の入ったUIImageオブジェクトを保持し、currentDisplayStringメンバ変数が文字列の入ったNSStringオブジェクトを保持しています。イメージを描画した後で、文字列の位置を計算しtextSizeメンバ変数にいれます。文字列は陰を付けるために黒と白で二回描画されています。描画はNSStringのメソッドで行なわれています。

前述のように複雑な描画をするときにはQuartzかOpenGL ESが利用できますが、QuartzはUIKitと共にベクトル パス、イメージ、PDFなどを描画できます。QuartzとUIKitは同じ描画環境ですので、drawRect:メソッドから呼び出せます。

OpenGL ESは2Dや3Dの描画ができますが、drawRect:メソッドは利用できません。ViewはOpenGL ESの表面描画に利用されます。表面描画に利用するオブジェクトの選択や描画頻度は自由に決められます。

詳細は"iPhone OS Programming Guide"の"Graphics and Drawing"の項目を見ろと書かれています。

■ Handling Touch Events
マルチタッチ インタフェースの処理ですが、とうぜん既存のマウス処理とは異なります。2番目以降の指が触れる度にタッチ イベントが発行されます。また、画面にふれているそれぞれの指が移動しても、指が画面から離れてもタッチ イベントが発行されます。

一本の指で操作後にもう一本の指が追加されることは想定しておらず、この単純化でジェスチャを識別しやすくしています。システムはswipesなどの共通のジェスチャを識別する方法を手今日していますが、独自に複雑なジェスチャ識別をさせることもできます。新しいタッチイベントが生成されたときに、各指がタッチしているか、離れたかなどの情報も提供されます。これにより、新しいタッチイベントが発生する度に、各指の動きを追跡できます。Figure 4に示すようなピンチ クローズやピンチ オープンのジェスチャのイベントが発生すると、Viewがサポートしている拡大縮小としてズームのレベルを変更できます。

システムはUIResponderクラスをインスタンスしたオブジェクトにイベントを配信します。アプリケーションMoveMeでは二つのViewクラスを利用していますが、MoveMeViewクラスがイベントを処理します。このクラスはタップがWelcomeボタンの内側で発生したのか外で発生したのかの識別をUIResponderのメソッドをオーバライドすることで実現しています。

単純にするためにアプリケーションMoveMeでは最初にタッチした指だけを追跡します。UIViewクラスが初期値でマルチタッチ イベントOFFの状態であることを利用しています。マルチタッチ イベントがOFFだと、システムは最初にタッチした指が生成するイベントのみを配信します。マルチタッチのイベントが必要な場合にはUIViewクラスのsetMultipleTouchEnabled:メソッドを利用します。

イベント処理の一貫として、MoveMeViewクラスは以下の手順を踏みます。

1.最初のタッチイベントが届くと、発生した場所を調べます。
 ・ボタン外でのダブルタップ - 文字列の変更
 ・ボタン内でのシングルタップ - ボタンの中央を指の下に移動し、ボタンを拡大してアニメーションを初期化
 ・他のタッチは無視

2.ボタン内をタッチしている指が移動すると、新しい位置にボタンの位置を変更します。

3.ボタン内をタッチしている指が離れるとボタンを中央に戻すアニメーションを始めます。

Listing 5ではMoveMeView.mファイル内のMoveMeView用touchesBegan:withEventメソッドを示しています。touchesBegan:withEventメソッドはUIResponder.hで宣言されています。指が最初にふれるとシステムはこのメソッドを呼び出します。このメソッドはすべてのタッチを取得するので、その中から一つだけを取り出します。UITouchオブジェクトはMoveMeViewオブジェクトとPlacardViewオブジェクトのいずれでタッチイベントが発生したかと、その回数を調べるために使用されます。もし、ボタン外でダブルタッチが発生するとtouchesBegan:withEventメソッドはWelcomeボタンのもじれとを次の文字に入れ替えるためにsetupNextDisplayString:メソッドを呼び出します。また、ボタン内の場合にはボタンを拡大してタッチされた場所を追跡するためにanimateFirstTouchAtPoint:メソッドを呼び出します。他のイベントは無視されます。

Listing 6ではMoveMeViewクラスのtouchesMoved:withEvent:メソッドを示しています。指が触れて移動したときにシステムはこのメソッドを呼び出します。最初に指が触れた場所に関係なくこのメソッドは呼び出されますので、アプリケーションMoveMeではボタン内でイベントが発生しているかを調べ、その場合にはPlacardViewオブジェクトの中心を設定しなおし再描画しています。

Listing 7 ではtouchesEnded:withEvent:メソッドを示しており、指が離れるとシステムはこのメソッドを呼び出します。アプリケーションMoveMeではボタンを画面中央に戻すアニメーションを実行します。

アプリケーションのイベント取扱を簡素化するために、ボタンが元に戻るアニメーション期間中はViewのtouchesEnded:withEvent: メソッドを不可にしています。もし、不可にしないと、各イベント処理メソッドはボタンがアニメーション中であるかと、アニメーションのキャンセルを識別するコードが必要なります・・・などなど説明が書かれています。ボタンが元の位置に戻ると、MoveMeViewクラスのanimationDidStop:finished:メソッドがユーザからの入力を可能にします。

詳細は"iPhone OS Programming Guide"の "Event Handling"の項目を見ろと書いています。

・・・と、このページは意外と長くて、まだまだ続きます(笑)

2008年6月26日木曜日

Creating an iPhone Applicationその2

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

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

■ Defining the Application Delegate
MoveMeのApplication DelegateクラスはMoveMeAppDelegate.hとMoveMeAppDelegate.mにあります。

Application DelegateオブジェクトはUIApplicationオブジェクトと共にアプリケーションの状態が変化したときに機能します。

 アプリケーションのウィンドウを設定し、ユーザインタフェースを初期化
 アプリケーション内で独自作成したデータ エンジンの初期化
 アプリケーション内のURLを開く
 装置の方向が変化するとそれに応答する
 終了要求の処理

アプリケーションの起動時にDelegateオブジェクトがすることは設定とウィンドウの提供で、詳細は次の項目で説明しています。また、Delegateでは前回終了したときの状態を復帰し、必要なオブジェクトを生成します。アプリケーションが終了する時もDelegateが終了処理を行い、次回の起動時に必要な情報を記録します。詳細はiPhone OS Programming Guideの"Core Application Architecture"を参照してください、と書いているのでここでそれぞれ対応するメソッドが書かれているのでしょう。

■ Creating the Application Window
UIWindowクラスは一つのウィンドウのみを扱い、ユーザインタフェースを変えるときにはViewを変えまるそうで、言い方を変えるとウィンドウはユーザインタフェースを置く場所を提供し、Viewが中身を提供する、という事だそうです。ViewはUIViewクラスのインスタンスでウィンドウの中身を書き、応答します。iPhoneはテーブル、ボタン、テキスト フィールドなどの標準Viewを提供していますが、UIViewをサブクラスすることで独自のユーザインタフェース部品を作成できます。MoveMeではMoveMeViewとPlacardViewの二つを作成しています。一つはアプリケーションのインタフェース、もう一つはユーザへの応答処理です。

起動時にはウィンドウを表示して内容を表示します。ウィンドウはnibファイルのMainWindow.xibから取り出します。アプリケーションがlauchedの状態になり、イベント処理が始まると、UIApplicationオブジェクトはDelegateにapplicationDidFinishLaunching:メッセージを送ります。メッセージはDelegateがウィンドウの内容描画するきっかけとなり、アプリケーションが必要な他の初期化を行います。

MoveMeでは、DelegateのapplicationDidFinishLaunching:メソッドは以下のことを行います。

1.ウィンドウのView内容を管理するView Controllerオブジェクトを生成
2.MoveMeViewクラスのインスタンスでView Controllerを初期化します。MoveMeViewクラスはnibファイルMoveMeView.xibに入っており、背景のViewとしてウィンドウのフレーム全体を埋めます。
3.ウィンドウのSubviewとしてControllerのViewを追加します。
4.ウィンドウを表示します。

Listing 2はMoveMeのapplicationDidFinishLaunching:メソッドで、MoveMeAppDelegate.mで宣言されています。この中ではウィンドウ内の主なViewを生成し、ウィンドウを表示しています。ウィンドウを表示することにより、システムはイベント処理を開始して良いことを知ります。

applicationDidFinishLaunching:メソッドは他のアプリケーションでも利用されるそうです。ここまでソースコードを見ずにメモをとり続けましたが、applicationDidFinishLaunchingが宣言されているUIApplication.hを見ると他にも色々と関数(メソッド)が並んでいます。

MoveMeViewオブジェクトがnibファイルから取り出されると、MoveMeView.m内のinitWithCoder:メソッドが呼ばれるそうです。このinitWithCoderの詳細は"NSCoding Protocol Reference"に書かれているのでしょう。initWithCoderはMoveMeViewクラスを呼び、さらに同じファイル内のsetUpPlacardViewメソッドがPlacardViewクラスを呼び出して、Welcomeボタンを表示する・・・と言うことだそうです。

Listing 3はMoveMeView.m内のsetUpPlacardViewメソッドです。このViewの初期化部分ではMoveMeView.hで宣言されたPlacardViewオブジェクトが生成されます。MoveMeViewクラスはアプリケーション全体の背景を提供するため、PlacardViewオブジェクトをSubviewとして追加します。二つのViewの関連は、アプリケーションの背景上にWelcomeボタンを表示することと、ボタンに対するイベント処理をMoveMeViewにさせることです。このplacardViewが良くわからなくて、その宣言に@implementation MovideMeViewの直下で@synthesizeというのが使われています。WindowとViewの詳細は"iPhone OS Programming Guide"の"Windows and Views"の項目を見ろと書かれています。

2008年6月25日水曜日

Creating an iPhone Applicationその1

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

上記資料のメモです。翻訳じゃないのでたくさん抜けています。

この資料はサンプルコード"MoveMe"を元に基本的なiPhoneのプログラミングを解説しています。面白いことにiPhone Dev Centerのトップにはこのサンプルコードへのアンカーがありません。試した限りではSDK beta 7で修正なしでコンパイルし実行できました(笑)ただ、ReadMe.txtをみるとバージョンアップを重ねていて、私が試したのは2008/06/02付けのバージョン2.5です。

このサンプルでは以下のiPhoneとして典型的な処理を含んでいるそうです。

アプリケーション初期化
ウィンドウ表示
内容描画
タッチ イベント処理
アニメーション実行

Figure 1が実行結果で"Welcome"ボタンを押すとボタンのサイズが大きくなり、押したまま指を動かすとボタンが指の動きについて来るというものです。また、ボタン以外の場所をダブルタップすると"Welcome"が日本語も含む各国の言葉に変わります。

Figure 1
http://devimages.apple.com/iphone/gettingstarted/docs/images/MoveMe.jpg

ここで、予め読んでいた方がよい資料を三つ上げています。

以下の三つの項目はXcodeを知らない人向けです。
 ■ Examining the MoveMe Sample Project
 ■ Building the MoveMe Application
 ■ A Word About Memory Management
なお、私が試した環境ではActive SDKメニューは表示されておらず、ツールバーのカスタマイズの中に入ったままでした。ただ、ボタンが並びすぎるのは好みではないので、メニューで確認しました。

メモリに制限のある環境での開発経験がない人は、メモリ管理の後半部分は目を通した方がよいかもしれません。

■ Initializing the MoveMe Application
この部分はMac OS Xと関数名などが多少異なっているが基本的に同じです。

iPhoneのヘルプファイル

以下のサイトはiPhoneのヘルプファイルですが、iPhoneにあわせたHTMLのサンプルとして便利そうです。

iPhone User Guide
http://help.apple.com/iphone/guide/

ソースコードを見ると、index.cssにDashcodeを使って書いたとあります。Dashcodeをちらりと見ただけで試していませんが、iPhone用のHTML作成ツールとして勉強する価値がありそうです。

2008年6月24日火曜日

Tools for iPhone OS Development and ...

Tools for iPhone OS Development
http://developer.apple.com/iphone/gettingstarted/docs/iphonedevtools.action

Learning Objective-C: A Primer
http://developer.apple.com/iphone/gettingstarted/docs/objectivecprimer.action

この資料に限らず、HTMLの資料は動画の説明とほぼ同じ内容か、拡張した内容のようです。ビデオでうまく理解できなかった内容を確認するには良さそうです。

iPhone OS Overview

iPhone OS Overview
http://developer.apple.com/iphone/gettingstarted/docs/iphoneosoverview.action

iPhoneの一番下にあるCore OSはMac OS Xと同じMachカーネルを元にしているとしていますが、Mac OS XのDarwinカーネルのようなMachカーネルとI/O Kitの組み合わせ、とは書いていません(笑)

Core OSとCore Servicesが提供するインタフェースはC言語ベースで以下のようなものが含まれています。
 Core Foundation
 CFNetwork
 SQLite
 access to POSIX threads
 UNIX sockets

上位のレイヤではC言語とObjective-Cベースで、メディア レイヤを例にするとC言語ベースのOpenGL ES、Quartz、Core Audio、Objective-CベースのCore Animationが含まれています。

Cocoa TouchレイヤではほとんどがObjective-Cベースです。Foundationフレームワークはファイル管理やネットワークなどを提供し、UIKitフレームワークはWindows、View、Controlそして、各オブジェクトを管理するcontrollerなどを提供しているそうです。

システムが起動できるアプリケーションの数は一度に一つだけで、アプリケーションは画面などハードウェアを占有できます。また、iPhoneのViewやControlはMac OS Xとは違いがあるので注意が必要だと書いています。

iPhone OSのイベント処理もタッチパネルなど今までと異なるので既存のOSとは異なり、今までのアプリケーション開発とは別のものとして考察する事になるそうです。

開発の手始めはFoundationとUIKitのフレームワークで、資料を読み始めるように書いています。

Foundation Framework Reference
http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/ObjC_classic/index.html

UIKit Framework Reference
http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIKit_Framework/index.html

iPhone OS Programming Guide: Introduction
http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/chapter_1_section_1.html

2008年6月18日水曜日

iPhone SDK β7

iPhone SDKのサイトを見るとβ7が上がっていました。以前は新しい版がアップされるとメールで案内が来ていましたが、最近は来なくなりました。iphone_sdk__9m2199__wwdc08.dmgというファイル名から推測するとWWDC 2008で配布されたものと思われます。

この版からiPhone用のプロジェクト テンプレートの数が6つになり、Cocoa Touchという名前が消えました。どういう訳か資料からもCocoa Touchという名前が消えているようです。

以前から思っているのですが「新規プロジェクト」の画面左側はiPhone OSとMac OS Xの二つに分類されているですが、各項目がネストしていないうえに、iPhone OSには項目が一つしかないので分かりにくいです。

2008年6月14日土曜日

WWDCで発表せず

WWDC 2008でiPhone SDKの正規版は発表されなかった。

ここに書いた内容もまだしばらくは非公開のままである。

2008年6月13日金曜日

1-10 iPhone SDK for Web Developers.m4v

ビデオのメモ

Web技術
 Java script
  getElementsBy_Class_Name_
   エレメントのアレイを返す
  var myDivs = document.get getElementsBy_Class_Name_("myDivClass")

   Selectors API
   CSSのセレクタを得る
  var fooOrBar = document.querySelector("#foo, #bar"); // 次のセレクタ
  var warnings = document.querySelectorAll("p.warning") // 全てのセレクタ

 Native SVG ベクトル画
  Scalable Vector Graphics 1.1
  <img src="asf-logo.svg" style="height:90%;width:90%;">
  background-image: url("asf-log.svg")

 CSS Effect アニメーション
  変形(回転など)
   -webkit-transform : trasform_function
   -webkit-transform-origin : 3dpoint trasform_function

   skew(angle)ひねり
   scale(number)拡大縮小
   rotate(angle)回転
   translate(number)移動
  移動
   -webkit-transition-property : opacity; //透明などのスタイル
   -webkit-transition-duration : 2s; // 2秒で移動
   -webkit-transition-timing-function : linear; // 移動速度
   -myyElement.style.opacity = "10%"; // 最終の透明度

  アニメーション CSS Animation
   -animation-name : 'bounce'; // キーフレーム名の指定
    キーフレームの例
    @keyframes 'bounce' {
     0 { top: 100px; }
     25% { top: 150px; }
     50% { top: 200px; }
     75% { top: 150px; }
     100% { top: 100px; }
   -animation-duration : '2s'; // アニメーションの時間
   -animation-iteration-count : 1; // 繰り返し回数
  アニメーションはハードウェアで実行

  offline Data クライアント側のデータベースAPI
   HTML 5規格
   JavaScript API
    openDatabase
     myDB = openDatabase("noteDB", "1.0", "My Database", 200000);
     データベース名、バージョン、概要、サイズ
    executeSQL
     myDB.executeSql("INSERT INTO NoteTable (id, note,) VALUES ( ?, ?)", [note.id, note.text]);
   SQL syntaxが使える
   Transactionをサポート
   セキュア 同じドメインのみアクセス

  フル スクリーン モード
   SafariのURL欄とToolbarを表示せずにWebサイトを表示できる
   Homeスクリーン アイコンが必要
    apple-touch-icon.png または
    <link rel="apple-touch-icon" href="/customIcon.png"/>
   メタタグも必要
    <meta name="apple-touch-fullscreen" content="YES" />

  ジェスチャ イベント
   JavaScriptのハンドラ
    gesturestart
    gesturechange
    gestureend
   回転、拡大縮小ができる
    <div ongesturestart="handleGesture()"> </dive>
   mouseEventsの代用

ツール
 iPhone Simulator
 Dashcode

1-09 Leveraging iPhone Location, Acceleration, Orientation, and System Information.m4v

ビデオのメモ

静的情報
 システムの情報
  System name
  System version
  Model name
   iPhone
   iPod touch
  User Name
   SettingとiTunesで表示されている内容
 取得方法

  UIDevice * myCurrentDevice = [UIDevice currentDevice];

  NS Log (@"%@ is an %@ running %@", [myCurrentDevice neme],
    [myCurrentDevice model],
    [myCurrentDevice systemVersion[);

  出力結果
   "Vicki's Music is an iPod touch running version 1.3"
 Unique IDが聞き事に提供されている
 オリエンテーション
  縦上、縦下、右横、左横、下向き、上向き、不明を知ることができる
  情報はPropertyやNotification設定で入手
  UIDevice.hで宣言
動的情報
 位置情報
  緯度 経度 高度 計測時そして前回の計測時が提供
  CLLocationManager
  消費電力に注意
  
 加速度センサ情報
  ゲームだけでなくユーザインタフェースとしても有用
  iPhoneを縦に置いて
   X方向 水平 右が+
   Y方向 垂直 上が+
   Z方向 前後 前が+
  UIAccelerometer 一定時間ごとに情報を入手
  UIAcceleration 呼び出したときのみ
  消費電力に注意

1-08 Key Practices for iPhone Application Development.m4v

ビデオのメモ

1.iPhone用に設計
 設計の善し悪しがパフォーマンスに影響
 使い方の違いを考慮
 小さな画面サイズ
 アプリケーションは一つだけ起動

2.メモリ保護
 スワップ ファイルはない
 メモリスペースが無くなると再起動
 害像ファイルフォーマットはPNG
 Plistはバイナリに変換
 バイナリはThumb命令セット
  ARM 16 bit命令のサブセット
 メモリ リークをなくす
 Instrumentsを使って確認
 不要メモリは即座に解放
 アロケート プールの使用

- (NSString *) modifyMyString:(NSString *(myString {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
/* メモリをアロケートする*/
[pool release];
}

 独自でメモリスワップのファイルを作成する
 データのロードを最小限にする。
  一画面に表示しきれない情報は小分けにしてロード
 メモリ残警告は以下の三通りで、UIKit経由
  application delegate経由
   applicationDidReceiveMemoryWarning;
 UIViewControllerのサブクラス時
  didReceiveMemoryWarning
 ノティフィケイション経由
  UIApplicationDidReceiveMemoryWarningNotification
 メモリ残警告の処理
 off-screen viewを解放
 キャッシュをパージ
 イメージデータのキャッシュ削除
3.応答性
 起動を速くすることが重要
 終了時に現状を記録し、次回起動時に戻す
 20秒以内に応答、起動、終了
4.省エネ
 データの送受信は電力消耗が大きい
  ネットワークのポーリングをさける
  ロケーション サービスの起動と終了を明示
5.保安
 全アプリケーションはサンドボックス内にある
  自身のファイルとプレファレンスのみ使用可
  システム リソースの使用制限
 Keychainなどのサービスが利用可

1-07 User Interface Design for iPhone Application.m4v

ビデオのメモ

iPhone用アプリケーションを考える前に読む注意書きで、プログラマだけでなくマーケティングも見ると良いと思います。

iPhoneの特性
 今までと全く異なる
 マウスとタップは異なる
 テキスト入力を最小限に
 表示するものを厳選(小型スクリーン)
 480 x 320の 有効利用
 マルチタスクでない

iPhoneはシングルタスクで、ユーザが作業中に他のアプリケーションを立ち上げると、その時のアプリケーションは終了し、それまでのデータは失われてしまう。次回に起動したときに同じ状態にしたい場合には、終了時の状態を保存する機構が必要である・・・

・・・と、ここまでは分かったですが、そのためのAPIはどの程度まで提供されているのかは説明されていません。例えば、実メモリの状態をそのままスワップアウトするような機能はあると便利です。

ソリューションの提供
 機能ではなく結果を提供
モバイルであるため、何度も短い時間利用されることを意識したデザインが必要である。

必須の機能のみ
Mac OS XのiPhotoとiPhoneのPhotoを比較して解説しています。同様にそれぞれのMailを比較しています。

使いやすさの設計
仕事の流れを考慮します。データ表示は概要から詳細に移るように設計します。面白いことにiPhoneNSTableViewは縦一列だけです。これは小さな画面で分かりやすく処理させるためで、画面を切り替えて次の一列を表示させることで、複数列の問題を処理しています。

指でタップできる大きさにします。ボタンのサイズは44 pointの四角が最小サイズだそうです。

デザイナが使いたがりそうな、ズームやパンは最小限にするように言っています。見る時間が短時間であるため時間のロスは良くない、と言うことのようです。

情報の入力は最小限にしろと言っています。これはメモ代わりという私の使用目的には合いません。しかし、録音はできたはずなので全く使えないというわけではありません。この意味では文字入力も図を描くことも、録音も写真もできるSony Clieの方が有効です。

一貫性の確保
ボタンなど組込済みのコントロールを利用することで、見た目の一貫性を持たせるように言っています。コントロールは以下のようなものがあります。
 Tool bar
 Navigation bar
 Table view
 Segmented control
 Page indicator
 Picker
 Activity indicator
 Slider
 Button
 Switch
>と丸で囲まれた>の意味は異なるそうです。
 >のみは・・・
  さらにデータがさらにあり、
  欄全体がボタンになっていて、
  押すと次のページに移ります。
 丸で囲まれた>は・・・
  >のみがボタンになっていて、
  押すと詳細が表形式で表示されます。
  色遣いにも注意が必要です。

驚きと喜びを
まあ、これはiPhoneをみれば、わかるでしょう(笑)

Macintosh、Mac OS Xと同様に、iPhoneにもiPhone Human Interface Guidelinesがあるそうです。

1-06 Using iPhone Features in Your Application.m4v

ビデオのメモ

iPhoneのアプリケーションはアドレス帳や写真からデータにアクセスできます。また、Webの内容をアプリケーション内に埋め込むこともできます。
アドレス帳のアクセス方法
既存のデータ利用
 ABPeoplePickerNavigationController
 ABPersonViewController
データ生成
 ABNewPersonViewController
未処理データの扱い
 ABUnknownPersonViewController
データの読み書き
 ABAddressBookCopyPeopleWithName
 ABPersonCopyImageData
 ABPersonCreate
 ABRecordSetValue
注意事項
 CFRetaiとCFReleaseを使用すること
 CopyとCreateを使用したときは必ず解放すること
 Getは自身でメモリを確保していないらしく、解放する必要がないらしい

写真のアクセス方法
iPhoneやiPod touchの写真ライブラリから写真を表示する方法

// 写真ライブラリが空でないことを確認
if ([UIImagePickerController isSourceTypeAvailable:
 UIImagePickerControllerSourceTypePhotoLibrary]) {

 UIImagePickerController *picker;
 picker = [[UIImagePickerController alloc] init];
 picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

 picker.allowsImageEditing = YES;

 picker.delegate = self;

 [currentViewController presentModalViewController:picker animated:YES];
}

カメラは上記のソースを少し変更するだけで利用できます。
// 写真ライブラリが空でないことを確認
if ([UIImagePickerController isSourceTypeAvailable:
 UIImagePickerControllerSourceTypeCamera]) { // Cameraになっています

 UIImagePickerController *picker;
 picker = [[UIImagePickerController alloc] init];
 picker.sourceType = UIImagePickerControllerSourceTypeCamera; // Cameraになっています

 picker.allowsImageEditing = YES;

 picker.delegate = self;

 [currentViewController presentModalViewController:picker animated:YES];
}

写真の編集
元になる関数は以下の通りです。
- (void) imagePickerController:(UIImagePickerController *) picker
     didFinishPickingImage:(UIImage *) imagePickerController
           editingInfo:(NSDictionary *) editingInfo {
// 必要に応じてイメージを処理
 [self saveImage;image];
}

例です。

- (void) imagePickerController:(UIImagePickerController *) picker
     didFinishPickingImage:(UIImage *) image
           editingInfo:(NSDictionary *)editingInfo{

// 元のイメージを入手
 UIImage *origialImage = [editingInfo
           valueForKey:UIImagePickerControllerOriginalImage];

// メタデータとして保存
 [self saveTagZone:[editingInfo
    valueForKey:UIImagePickerControllerCropRect]];
}

Webの内容を入手

// Web viewを生成
 CGRect rect = [[UIScreen mainScreen] appicationFrame];
 UIWebView *webView = [[UIWebView alloc] initWithFrame:rect];

// 電話番号の検出機能を切る
 webView.detectsPhoneNumbers = NO;

// Web viewURLをロード
 NSURL url = [NSURL URLWithString:@"http://foo.com"];
 NSURLRequest *req = [NSURLRequest requestWithURL:url];
 [webView loadRequest:req];

以下の方法でURLを開く感覚で他のアプリケーションを開くこともできると言っています。


 NSURL *url = [NSURL URLWithString:@"http://apple.com"];
 [[UIApplication sharedApplication] openURL:url];

URLに応じて以下のアプリケーションを開くことができると言っています。
 Safari:http://, https://, feed://
 Mail;mailto:
 Google Map:http://maps.google.com/
 You Tube:http://www.youtube.com/
 iTunes:itms://
独自アプリケーション:myapp://

独自アプリケーションをURLで起動できるようにするにはinfo.plistに以下の項目を追加します。
CFBundleURLType      Array
 0            Dictionary
  CFBundleURLName   String My Custom URL
  CFBundleURLSchemes  Array
   0           String myapp
  LSIsAppleDeaultForScheme Boolean Yes

- (BOOL)application:(UIApplication *) application
 handleOpenURL:(NSURL *) uel {
// 送られてきた問い合わせの文字列を入手
 NSString *queryString = [url query];

// 送られてきた文字列から情報を取得...

//キーと値を処理 ...
}

他のiPhoneとの通信
Bonjour
を使用して通信できるとしていますが、消費電力が増大し電池使用時間が短くなる、とも言っています。

1-05 iPhone Graphics and Media Overview.m4v

ビデオのメモ

グラフィック関連ではUIKit Graphics、Quartz 2D、Core Animation、OpenGL ES、Media Player、Core Audioの6つを利用できます。

UIKitのGraphicsは画面切り替えなどのアニメーションも含む2Dのユーザインタフェースを作り、Quartz 2Dは低レベルの2D描画、Core Animationはアプリケーションなどのアニメーション、OpenGL ESはゲーム用、Media Playerは動画再生、Core AudoとOpen ALは音声と役割を担っています。

UIKit Graphicsの主なClassは以下の通りです。
UIImage - イメージデータのクラス
UIImageView - インタフェースにイメージをいれたり、スライドショーのイメージを入れる
UIColor - 装置の色関連
UIFont、UILabel - 文字処理関連
UIScreen - スクリーン関連
他にユーティリティ関数がある。

低レベルのグラフィック処理を担当するQuartz 2Dでは、点や線、曲線、四角などはCGPathRefで扱い、四角の塗りつぶしはCGGradientRef、CGImageRefはPNGを中心にしてTIFF、JPEG、GIF、BMP、ICO、CUR、XBMを扱い、CGPDFDocumentRefはPDFを扱っています。

Core Graphicsで緑の枠に青い四角を描く描画サンプルです。
- (void) drawRect:(CGRect)rect
{
 CGContextRef myContext = UICurrentContext();

 CGRect ourRect = CGRectMake(40, 40, 240, 120);

 CGContextSetRGBStrokeColor(context, 0.0, 0.0, 1.0, 1.0);
 CGContextFillRect(context, ourRect);

 CGContextSetRGBStrokeColor(context, 0.0, 1.0, 0.0, 1.0);
 CGContextStrokeRectWithWidth(context, ourRect, 10);
}

Core Animationはユーザインタフェースのアニメーションを提供しています。レイヤをサポートしており、一つのレイヤに写真を置き、その上に文字のレイヤを置き、さらに絵のレイヤを置くことができます。また、レイヤを半透明にしたり、フェイドインアウトでレイヤを入れ替えることもできます。

Core AnimationのレイヤではCALayerが主のクラスとなり、CAEAGLLayre、CATiledLayer、CAScrollLayerがあります。また、アニメーションのクラスではCAAnimationが主のクラスとなり、CAPropertyAnimation、CABasicAnimation、CAKeyframeAnimationがあります。CAAnimationの下にはCAPropertyAnimationの他に、CATransitionとCAAnimationGroupがあります。

OpenGL ESはOpenGLの機能制限版でiPhoneで採用しているのはバージョン1.1です。詳細は以下のURLを参照してください。

http://www.khronos.org/opengles/

Media Player Frameworkの動画はフルスクリーンのみで、.mov、.mp4、.m4v、.3gpの再生ができます。

動画の生成と制御
- (id) initWithContentURL:(NSURL *)url;
- (
void) play;
- (
void) stop;

プロパティ
@property MPMovieScalingMode scalingMode;
@property BOOL userCanShowTransportControls;

ノティフィケイション
NSString * const MPMoviePlayerScalingModeDidChangeNotification;
NSString *
const MPMoviePlayerPlaybackDidFinishNotification;

MPMoviePlayerCotrollerの例

- (void) playMovieAtURL: (NSURL *)theURL
{
 MPMoviePlayerCotroller *theMovie = [[MPMoviePlayerCotroller alloc] initWithContentURL:theURL];
 theMovie.userCanShowTransportControls = NO; default

 [[NSNotificationCenter defaultCenter] addObserver:self
          selector:@selsector(myMovieFinishedCallbask:)
            name:MPMoviePlayerPlaybackDidFinishNotification
           object:theMovie];
 [theMovie.play];
}

- (
void) myMovieFinishedCallbask:(NSNotification*) aNotificaition
{
// remove the observer, release the MPMoviePlayerController
}

1-04 iPhone Application Frameworks - In Depth.m4v

ビデオのメモ

1-01と似たアーキテクチャのレイヤを解説しています。その後にMac OS XのCocoaとiPhoneのCocoa Touchを比較していて、Foundationは同じとして、AppKitとUIKitの違いに重点をおいています。UIViewの下にUIWindowとUIControlが配置されています。UIWindow、UIView、UIViewControllerの説明が続きます。UIViewControllerはviewを呼び出すだけでなく、メモリ不足の警告も出すようです。UIViewControllerの一つとしてUINavigationControllerをアドレス帳を例にソースコードと画面の動きを見せながら解説しています。各画面をスタックにプッシュしながらデータの詳細に移動し、再度データの概要 を見るときにはスタックからポップしています。

次にStatus Barの下にUIWindowでウィンドウを生成し、図 UIImageViewやデータ UITableView、ツールバー UITullbarControllerなどの部品を配置する方法を解説しています。

画面の構成の後は、EventとGesturesの処理が続きます。GesturesのUITouchSwipedRightは興味深いです。

「UIKitのControlとView」ではUIPickerというユーザインタフェースが紹介されています。UITableViewは一つの列だけを扱い、他の列を表すときには右にスライドするアニメーションを利用します。

1-03 iPhone Application Development - Getting Started.m4v

ビデオのメモ

このビデオ シリーズではiPhoneのFrameworkをCocoa Touchと読んでいますが、どうもこのCocoa Touchは「ここ タッチ」に聞こえます(笑)

最初の部分は今までのビデオの解説と重複していて、次にObjective-C、View Controller Modelの解説が続きます。

Cocoa Touch命名省略ルールは以下の通りです。
iPhoneの"UIImageView"を例にすると
"UI" - UIKit frameworkの一部
"Image" - UIImageと共に機能
"View" - UIViewのサブクラス

UIImageViewはpropertieとaccessorメソッドを採用
Getter: animationImages
Setter: setAnimationImages

Delegation、Categories、Subclassの解説が続き、ようやくCocoa TouchのUIKitの解説が始まります。iPhoneのUIKitはMac OS XのAppKitにあたるそうです。UIKitには色々なframework(ツール)が含まれていて、ビデオではそのツール次々と列挙されます。

2008年6月12日木曜日

1-02 iPhone Development Tools Overview.m4v

ビデオのメモ

Xcodeの解説です。1-01のプロジェクト作成がデモンストレーションされます。iPhone関連のプロジェクトはCocoa Touchの名前で呼ばれているようです。

Organizerでプロジェクト管理やiPhoneへのダウンロードなどを行う。コンソールやクラッシュログ、スクリーンショットなども提供されている。

次はXcodeがもつコーディング部分の解説です。コード管理ツールShapshotsやSCMの解説もしています。最新版ではさらに便利なっているようです。また、APIの解説が表示されるResearch Assistantも紹介されています。

Interface Builderは"COMING SOON"になっています(笑)

ビルドのデバッグでは、デバッグ情報が吹き出しがポップアップします。iPhoneシミュレータとデバッガを同期させてデバッグできます。ポップアップメニューでシミュレータとiPhoneを切り替えて検証できます。

パフォーマンス解析ツールとしてInstrumentsが提供されていて、Xcodeと連携して動作します。メモリやプロセッサの占有度をグラフィカルに表示します。Runメニューの"Start with Performance ToolからActivity MonitorやCPU Sampler、File Activity、Leaksなどを選択できます。

1-01 Introduction to the iPhone SDK.m4v

今日からメモを取りながら解説の動画見ることにしました。

まずは、iPhone SDKに入っているツールの紹介です。

Xcode 言わずとしれたMac OS XのIDE
Instruments リアルタイムでメモリやプロセッサのモニタ
Dashcode Webのユーザインタフェース構築ツール
Simulator iPhoneのシミュレータ

XcodeでCoco Touch Listテンプレートを使ったデモンストレーションをしています。ただし、ここで表示されているリストの内容はβ6では消えていました。New Projectの画面デザインも変わっています。

次にアーキテクチャの解説でCore OS、Core Services、Media、Cocoa Touchの各レイヤが解説されます。

Core OSではLibSystem library、
Core ServicesではCore foundation frameworkとCFNetwork framework、Security framework、SQLite library、XML libraries、
Mediaではグラフィック技術としてQuartz、Core Animation、OpenGL ESがあり、音声技術ではCore AudioとAudio ToolBox frameworks、OpenALがる。さらに動画技術ではMediaPlayer frameworkがある。
Cocoa TouchではUIKit frameworkがある。UIKitはアプリケーション間通信、グラフィックスとウィンド サービス、タッチなどのイベント処理、ボタンなのパーツ、Webとテキスト処理、加速検出のデータ処理、カメラ処理、写真ライブラリ処理、装置のID提供しています。さらに、Addressbook frameworkとAddressbook UI framework、場所情報を入手するCore Location frameworkも提供しています。

2008年5月28日水曜日

解説ビデオ

iPhone DevCenterでは解説ビデオが提供されています。ビデオは10タイトルあり、H264コーディックで約1GBあります。

1-01 Introduction to the iPhone SDK.m4v
1-02 iPhone Development Tools Overview.m4v
1-03 iPhone Application Development - Getting Started.m4v
1-04 iPhone Application Frameworks - In Depth.m4v
1-05 iPhone Graphics and Media Overview.m4v
1-06 Using iPhone Features in Your Application.m4v
1-07 User Interface Design for iPhone Applications.m4v
1-08 Key Practices for iPhone Application Development.m4v
1-09 Leveraging iPhone Location, Acceleration, Orientation, and System Information.m4v
1-10 iPhone SDK for Web Developers.m4v

以前にはWWDCのビデオも入っていましたが、取り除かれたようです。例えば以下のようなタイトルでした。
1-11 Fundamentals of Cocoa Session from WWDC.m4v

2008年3月7日金曜日

Firefoxでダウンロード

まさかと思ってFirefoxを試すと・・・登録とログインができました(苦笑)
ただ今、ダウンロード中です。

昨年のWWDCでも同様の問題があったので、Appleの開発者向けサイトはFirefoxですね(大笑)

ダウンロード不可

iPhone 2.0 SDKが発表されましたが、ダウンロードできません。

Appleは現在も作業中のようで、アクセスする度に画面が変わっています(笑)

TidBITSを見ると米国でも似たような状況のようです。


TidBITS iPod & iPhone: Apple Announces iPhone 2.0, Releases SDK
http://db.tidbits.com/article/9489

WWDCの会場入り口で列を作って待っているような感じです(笑)