'The iPhone Developer's Cookbook' & 'iPhone SDKプログラミング大全' & 'ニンテンドーDSi'

正月に読むつもりで amazon.co.jp から ‘The iPhone Developer’s Cookbook’

と手に入れるのが簡単になった ‘ニンテンドーDSi ブラック’を購入しました。
また、’iPhone SDKプログラミング大全’

も予約しておきました。’The iPhone Developer’s Cookbook’、’ニンテンドーDSi ブラック’ は正月前に、’iPhone SDKプログラミング大全’ は 2009/01/07(Wed) に届きました。

‘The iPhone Developer’s Cookbook’、’iPhone SDKプログラミング大全’ に触れる前に、私自身驚いた ‘ニンテンドーDSi‘ について一言書きたいと思います。

まず、’ニンテンドーDSi‘ が今までの携帯ゲーム機に比べて何が違うかというと内蔵メモリに ‘DSiウェア‘と呼ばれるソフトウェアを入れることができます。’DSiウェア‘ は ‘ニンテンドーDSiショップ‘ という名前の内蔵ソフト( ‘DSiウェア‘と違いはないと思います) を使って購入できます。

また ‘ニンテンドーDSi‘ にはカメラが2つ付いているのですが、それを利用した ‘DSiウェア‘ の ‘うつすメイドインワリオ‘ や内蔵ソフト ‘ニンテンドー DSi カメラ’ などは iPhone でよく見かけるアプリと同じテーストです。

特に技術的に可能なら ‘ニンテンドー DSi カメラ’ や ‘うごくメモちょう‘ などは iPhone にも欲しいソフトだと思います。

さらに、’ニンテンドーDSiブラウザー’ と呼ばれる Opera 製のウェブブラウザーもあります。さすがにフォントも汚いし、動作速度も遅いので iPhoneSafari には劣ります。

しかし、これはもう iPhone というか iPod touch の機能を下げた下位機種といっていいほど同じ土壌の製品だと思います。いずれ ‘ニンテンドーDSi‘ の後継機が出れば GPS や 加速度センサーが付いてくる可能性すらあります。

内蔵メモリが増えてくれば iPod touch との差も埋まってくると思います。
違いはその時の最新の技術を使うか、枯れた技術を使うかの差だと思います。携帯電話もあるし今後どういう風に進化するか1ユーザーとして大変楽しみです。

ニンテンドーDSi‘ で音楽を聴くには SD カードを利用します。対応しているフォーマットは AAC です。
iTunes Store で買った曲には著作権フリーなものもあります。
iTunes を起動して、曲を表示しているテーブルのヘッダを右クリックしてメニューを出し、種類にチェックを入れてください。’種類’ ヘッダをクリックするとソートされます。AAC の種類は

購入した AAC オーディオファイル
保護された AAC オーディオファイル

の二通りあると思います。’購入した AAC オーディオファイル’ が著作権フリーの曲です。

曲を選んで右クリックしてメニューを出し、’Finder で表示’ を選択してください。ファイルが表示されます。SDカードに適当なフォルダ (私の場合 Music) を作って、SDカードにコピーしました。

私が iTunes Store で購入した曲で著作権フリーなものは20曲ほどありました。ニンテンドーDSi で何の問題もなく聞くことができました。

ニンテンドーDSi‘ 用に ‘漢字そのまま DS楽引辞典

を購入しました。iPod touch と同じような使い方になってしまいそうです。

ニンテンドーDSi‘ で ‘漢字そのまま DS楽引辞典‘ を利用して思ったのですが、タッチペンを使ったボタンなどのデザインが垢抜けていないし、インターフェイスが定まっていない気がします。iPhone のような GUIフレームワークを持っていれば面白いのですが!

ニンテンドーDSi‘ の話はここまでにして、’The iPhone Developer’s Cookbook’ と ‘iPhone SDKプログラミング大全’ を読み終えたので感想を書きたいと思います。

iPhone SDKプログラミング大全’ は2,3日で読めました。入門用だと思います。基礎を固めるのにちょうど良いと思います。ただし、’The iPhone Developer’s Cookbook’ では触れられていない OpenGL についての簡単な説明があります。また、アニメーションの解説は大変勉強になりました。

‘The iPhone Developer’s Cookbook’ は、実際に自作アプリを作成するのに必要な機能をサンプルコードを交えて説明されているので大変参考になります。

The iPhone Developer's Cookbook
目次
Chapter 1: Getting Started with the iPhone SDK
Chapter 2: Views
Chapter 3: View Controllers
Chapter 4: Alerting Users
Chapter 5: Basic Tables
Chapter 6: Advanced Tables
Chapter 7: Media
Chapter 8: Control
Chapter 9: People, Places, and Things
Chapter 10: Connecting to Services
Chapter 11: One More Thing: Programming Cover Flow

Chapter 2: Views – P53 で使われている円の内側か判定する関数 (下記 pointInside: ) などはプログラムリストより円の不等式で表した方が簡単です。

Chapter 2 Views
P53
サンプル
04a - Clipped Views
#define SIDELENGTH 57
// Detect whether the touch "hits" the view
- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
CGPoint pt;
float HALFSIDE = SIDELENGTH / 2.0f;
// normalize with centered origin
pt.x = (point.x - HALFSIDE) / HALFSIDE;
pt.y = (point.y - HALFSIDE) / HALFSIDE;
// x^2 + y^2 = radius
float xsquared = pt.x * pt.x;
float ysquared = pt.y * pt.y;
// If the radius < 1, the point is within the clipped circle
if ((xsquared + ysquared) < 1.0) return YES;
return NO;
}

円の不等式
(x - x0)^2 + (y - y0)^2  < r^2

中心 x0, y0
半径 r

より、上のプログラムを円の不等式に書き換えると

(point.x - HALFSIDE) ^2 + (point.y - HALFSIDE)^2 < HALFSIDE^2

両辺を HALFSIDE^2 で割ると

(point.x - HALFSIDE)^2 / HALFSIDE^2 + (point.y - HALFSIDE)^2 / HALFSIDE^2 < 1

((point.x - HALFSIDE) / HALFSIDE)^2 + ((point.y - HALFSIDE) / HALFSIDE)^2 < 1

を満たす時、点 (point.x, point.y) は円の内側にある。

また、本のプログラムリストと

http://www.ericasadun.com

でダウンロードしたサンプルと違う箇所が結構ありました。P125の Recipe 4-8 などが典型的な例です。

また、非公開だけど便利な API がたくさん紹介されています。

説明されれば納得できるのですが

Chapter 8 Controls
P238
Recipe: Animation Button Response
サンプルコード
C08 - Controls
03a - AnimButtonFlip

の通り、UIButton ( UIControl ) が UIView を継承しているので Animation を利用できるんですね。驚きました!

P240 の Expoloring UIControl View Hierarchy では

Chapter 8 Controls
P240
サンプル
04b - Explode
/*
UISwitch:UIControl
--_UISwitchSlider:UISlider
----UIImageView:UIView
----UIImageView:UIView
----UIView:UIResponder
------UILabel:UIView
------UILabel:UIView
----UIImageView:UIView
*/
#define outstring(anObject) [[anObject description] UTF8String]
- (void) explode: (id) aView level: (int) aLevel
{
for (int i = 0;  i < aLevel; i++) printf("--", aLevel);
printf("%s:%s\n", outstring([aView class]), outstring([aView superclass]));
for (UIView *subview in [aView subviews])
[self explode:subview level:(aLevel + 1)];
}

UISwitch がどんな構造になっているか調べることができます。

当たり前かもしれませんが UILabel や UIImageView を利用して作られているんですね!UIControl を継承する独自の部品を作成するのに参考になりそうです。

iPhone Developer Program Standard

iPhone プログラミングに挑戦していたのですが、iPod touch も購入したことだし iPhone シュミレータ上ではなく、実機で試してみたくなりました。

iPhone 用の自作アプリを実機 (iPod touch) で動作させるには iPhone Developer Program を購入する必要があります。

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

ネットなどでいろいろ情報が出ていますが、一番肝になるのは iPhone Dev Center にログインすると First Name、Last Name が ?? ?? と表示されていることです。住所などの情報が日本語だと後々トラブルの元になるようです。(ネットなどの情報によると App Store にアプリを申請すると Pending Contract と表示され、アプリが公開されない状態が続くことがあるようです。)

アプリの Pending Contract 問題についてはわかりませんが、iPhone Dev Center のログイン名については、結論から言うとアップルに直接メールを送り、修正してもらう必要はありません。

iPhone Developer Program Standard 購入手続きの途中で請求書住所が表示された時に Update Now リンクをクリックして氏名、住所を英語表記に変更することができます。(また規約に同意して途中でキャンセルすると最初からやり直しできないので注意してください。iPhone Developer Program を購入できなくなります。)

購入手続きの顛末を書いておこうと思います。ただし、私の経験で書いているので、間違いがあるかもしれません。自己責任でお願いします。

私の場合、なるべくトラブルに巻き込まれたくなかったので、念のため MobileMe にログインし、アカウント/個人情報/通知の ‘Apple ID を管理’ のリンクから Apple ID の情報を言語が日本語のままログインして、姓: ローマ字、名:ローマ字、住所:ローマ字など英語表記 に変更しました。(これはあまり意味がなかったかもしれません。)

その後、iPhone Developer Program Standard を購入しました。購入過程で個人を選択、規約に同意すると請求住所が表示されます。文字化けした氏名 ??、住所が表示されますが、ここで Update Now をクリックして英語表記に修正しました。

後は日本のアップルストアを選択するとカートに iPhone Developer Program Standard が入っているので購入しました。(請求書住所の都道府県、フリガナは日本語に変更しました。)

数日後 Activation Code の通知メールが届いたので、Activation code link をクリックして activate しようとしたのですが、失敗します。

どうしようもないので Activation Code の通知メールにある contact us をクリックして、 activate できない旨を英語で文章を書き、エラーメッセージを付けて送信しました。

翌日、返事が日本語で届きました。Apple Store 購入時のお届け先情報が日本語だったのが問題だったようです。『Apple Store ご注文内容の確認』のメールを転送して欲しいと言われたので、メールにコピーして送りました。

その後、お客様のアカウント情報を調整したので、 Activation Code 通知メール本文のリンク部をクリックして認証手続きをおこなって欲しいというメールが届きました。

今度は Activation code link をクリックして activate に成功しました。

早速、iPhone Dev Center にログインし、右上の iPhone Developer Program – Program Portal から Standard Program Portal User Guide for iPhone OS 2.1 (現在は Standard Program Portal User Guide for iPhone OS 2.2) をダウンロードして、自作アプリを iPod Touch にインストールしました。

私が設定した時は、Xcode ウインドウ左上のポップアップメニューを ‘Device – 2.2 | Debug’ を選択しないとコード署名IDが選択可能状態になりませんでした。

実際に実機で動作させると格別ですね。開発している自作アプリは2つあります。RSS リーダーとマインスイーパーです。

RSS リーダーは気に入ったものがなかったので、自作してみました。残念ですが、動作はあまり安定していません。

私が欲しかった RSS リーダーは Web 上のサービスを使うものではなく、RSS フィードの新着タイトルをクリックするとすぐにリンク先が表示され、指定された期間が過ぎると削除される単純なものです。

最後に実行画面を付けておきます。

おまけ。

以前から、’どうぶつの森‘ を一度は遊んでみたいと思っていたので、’街へいこうよ どうぶつの森(「Wii スピーク」同梱)’ を

購入してみました。

後、iTunes StoreApp Store から

Rogue
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=298113808&mt=8
カテゴリー/ゲーム
無料
大辞林
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=299029654&mt=8
カテゴリ/レファレンス
\2500

をダウンロードしてみました。大辞林は技術力の高さに感服しました。

Rogue は懐かしいですね。英語は苦手ですが、私の iPod touch には ウィズダム英和・和英辞典、i英辞郎などの辞書ソフトも入っているので問題ありません。’街へいこうよ どうぶつの森‘ で遊ぶつもりが、途中で中断しても再開できるので Rogue ばかりプレーしています。

第2世代 iPod touch 32GB

注文していた第2世代 iPod touch 32GB が、2008/10/11(Sat) に到着しました。

あらかじめダウンロードしておいた無料アプリケーションとネットで調べておいた良さそうな有料アプリケーション、下記の5つを購入して iPod touch 32GB と同期しました。

ウィズダム英和・和英辞典
カテゴリ/レファレンス
\2800
http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284350526&mt=8
i英辞郎
カテゴリ/レファレンス
\1000
http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=291232656&mt=8
MobileStudio
カテゴリ/仕事効率化
\230
http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=286746714&mt=8
Air Sharing
カテゴリ/仕事効率化
\800
http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=289943355&mt=8
駅探エクスプレス(乗り換え案内)
カテゴリ/旅行
\350
http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=290730714&mt=8

私にとっては、英和・和英辞書は、i英辞郎で十分です。例文・略語にも対応しています。発音には対応していませんが、動作速度は快適です。ウィズダム英和・和英辞典 は、発音を聞くことができます。

iMaciPod touch とのファイルの送受信用に、MobileStudio、Air Sharing を購入してみました。
基本的に iPod touch のアプリケーション、例えば MobileStudio で受信したファイルは、Air Sharing などの他のアプリケーションでアクセスできません。それぞれ MobileStudio、Air Sharing アプリケーションごとに画像表示、PDF表示、テキスト編集、音声再生などの機能が必要になります。

MobileStudio、Air Sharing 両方ともファイルの送受信は正しく動作しました。

MobileStudio で iMac から PDF書類を転送後、PDF書類を閲覧中に iPod touch がフリーズして動作しなくなりました。Sleep/Wake ボタンと Home ボタンを同時に押してリセットしました。Air Sharing の方が安定しているようです。

また Safari でロードが終了しても Network activity Indicator が回転し続けるようになってしまいました。いろいろ試してのですが、結局、Sleep/Wake ボタンを長押しし、電源を落として、再起動すると症状は出なくなりました。

拙作 2ch Script version 0.2 [ http://kyoshiaki.sakura.ne.jp/osx/tiger.html#2cs02 ] を試してみました。以前は Firefox 上でしか正しく動作しなかったのですが、Safari で問題なく動作します。そこで 2ch Script version 0.2 の Web共有 を使って iPod touchSafari でスレッドを閲覧してみました。見づらいですね。そこで iPhone 用に修正してみました。

基本的な仕組みは、有名な iPhone 用の Web アプリケーション 2ch ブラウザを参考にしました。ただし、iPhone でしか閲覧できないようになっています。

私は OmniWeb を所有しています。ツールバーの ‘サイト環境設定’ ボタンを押し、表示されたウインドウのタブ ‘〜の環境設定’/’その他’ の ‘サーバーなどに認識させる自称名:’ で ‘iPhone Safari 3.1.1 (v525.20)’ を選択して、ページを再読み込みすると正しく表示されました。

追記. 2008/10/29) Safari でも メニュー ‘Safari/環境設定’ から詳細タブを選び、’メニューバーに”開発”メニューを表示’ にチェックを入れると、OmniWeb のように、メニュー ‘開発/ユーザーエージェント’ で ‘Mobile Safari 1.1.3 iPhone‘ / ‘Mobile Safari 1.1.3 iPod touch‘ を設定できます。

後は HTML、CSS のソースを表示して参考にしました。下記は私が書いたソースの一部分です。

------------ dat_html.js ------------
function init() {
if (navigator.userAgent.toLowerCase().indexOf('iphone') == -1) {
dirname = "dat_html.css";
} else {
dirname = "iPhone_dat_html.css";
document.write("<meta name='viewport' content='width=320px, user-scalable=no' />")
 }
sheet = "<link rel='stylesheet' type='text/css' href='./" + dirname + "'>";
document.write(sheet);
}
-------------------------------------
-----  iPhone_dat_html.css -----
html {
word-break: break-all;
font-size:13px;
}
div.header {
padding: 5px;
margin-top: 15px;
background: #cccccc;
border: 1px solid  #999999;
}
div.res {
padding: 5px;
margin-top: 5px;
margin-left: 5px;
margin-bottom: 20px;
}
-------------------------------------

ただし、viewport などについての詳細は

Apple Developer Connection - Web Apps Dev Center
http://developer.apple.com/webapps/

で学びました。

また、HTML、DOM、JavaScript

Main Page - MDC
https://developer.mozilla.org/En

を参考にしました。

まだ、表示できるだけで、ドキュメントも書いていないので公開は先になりそうです。時間もなかなか取れないので!(ただし 2ch Script version 0.2 [ http://kyoshiaki.sakura.ne.jp/osx/tiger.html#2cs02 ] を利用している人がいるとは思いませんが!)

最後に iPod touchSafari で閲覧している画像を付けておきます。