iPhone SDKの教科書

iOSBook Icon
【お知らせ】iOS 4とXcode 4に完全対応した電子書籍「iOSの教科書」を刊行しました。今後は同書をご利用いただければ幸いです。(2011/07/20)

【お知らせ】筆者による「iPhone SDKの教科書」サポート・サイト(本サイト)の更新を終了します。今後は出版社のサポートをご利用ください。(2011/07/08)

【お知らせ】本書に掲載したサンプル・コードはiOS SDK 4.0やiPhone 4で、そのまま利用できます。(2010/07/28)
【お知らせ】本書に掲載したサンプル・コードはiPhone SDK 3.0やiPhone 3GSで、そのまま利用できます。(2009/06/11)

iPhoneアプリケーション開発の第一人者が指導するiPhone SDKの教科書です。iPhoneアプリケーションの開発に初めて取り組む人を対象に、アイディアをアプリケーションに反映するための考え方や制作プロセスについて、具体的な事例を使って解説します。

iPhone SDKのインストールから、プログラミングに使用するC言語やObjective-Cの概要を説明し、実際にカウンターやゲームなどのアプリケーションを作成する手法までを網羅。タッチスクリーン機能やアニメーション、乱数によるランダム移動、加速度センサー、効果音の再生、ビューアイテムの作成、ローカライズ方法など、アイデアを実現するさまざまなテクニックを学ぶことができます。

iphone-sdk-textbook

書名:iPhone SDKの教科書
副題:Cocoa Touchプログラミング、最初の一歩
著者:赤松正行
仕様:B5変判、1色、376ページ
価格:2940円(税込)(本体2800円)
発売:2009年3月19日
発行:秀和システム
ISBN-10: 4798022322
ISBN-13: 978-4798022321

目次
正誤表(第1刷)
正誤表(第2刷)
ダウンロード
出版社の書籍紹介ページ
インターネット書店一括検索

ipst0-5-in-app-store

※本書に掲載したサンプル・アプリケーションはApp Storeからダウンロードすることができます。赤松正行のすべてのアプリケーションが表示されますので、その中でiPST#で始まる名称のアプリケーションが本書に掲載したサンプル・アプリケーションです。

93 thoughts on “iPhone SDKの教科書

  1. Masayuki Akamatsu 投稿作成者

    H.Saitoさん、今日の曜日をどうされたいのでしょうか? DatePickerに表示するわけでもなく、計算で曜日の値を得るわけでもなく…NSWeekdayCalendarUnitを指定すれば曜日の値は得られますが、そのことではないですよね?

  2. H.Saito

    すみません、説明不足でした。曜日を表示したかっただけです。NSWeekdayCalendarUnit をもう少し勉強してみます。永遠の初心者なもので。それでは。

  3. KiD

    赤松先生、

    ご無沙汰しております。

    先生の本をはじめ、その他市場に出ているもの、洋書、デブセンの主要ドキュメントなどを読みあさり、そろそろ一年が経過しようとしていますが、いまだにトンネルの出口が見えてきません。つまり、Hello, World!から脱却して簡単なものでもいいから自分なりのアプリを作りたいのですが、自分のアイデアを形にするうえで、どのクラス、どのメソッドをつかって実現していいのか?そこで止まってしまいます。コンパスを持たずに登山に出かけるようなものです。先生の本も3度ほど通読し実際にハンズオンでやってますが、応用力がつきません。VBなどのばあいは、やりたい事を検索すると大概、サンプルコードがヒットしてカスタマイズしているうちに、使えるようになったのですが、Objective-CやCocoaではそう問屋がおろしてくれません。おんぶにだっことはいきませんが、なにか、アドバイスなり指針をいただけないものかとおもい投稿いたしました。ご多忙のところ大変恐縮ですがなにとぞよろしくお願いもうしあげます。

    Kunitachi iPhone Developer

  4. Masayuki Akamatsu 投稿作成者

    KiDさん、どうアドバイスして良いものやら分かりかねますが、ご自分で開発をしたいので適切なガイド役が必要ということですよね? それであれば文字通り、ガイド役をしていただける開発経験が豊かな方とコンサルタント契約をされるのはどうでしょうか?少なからず費用が発生することになりますが。

    あるいは、アイディアを公開することが構わないのでした、フォーラム的なところでアドバイスを求めてもいいかもしれません。この場合は必ずしも成果を期待しないほうがいいと思います。

  5. KiD

    iPhone/ iPadはライフワークであり、いそいで開発してもうけよう、などとは考えておりません。Dev Cenのフォーラムは当初から活用しており、本質問に関しても海外のプログラマから数多くの有益な指針・回答が得られました。当面、それを指針として進めていきたいと思います。

    ちなみに、わたしの個人的な感想ですが、アマゾンで多くの洋書を調べ上げ、ポピュラーなものをいくつかを購入しましたが、実践やわかりやすさの点で、本場よりも貴書のほうが優れているように見受けられました。(アップルの公式ドキュメントは別として)

    もし、将来的に翻訳・出版されるようになれば、私と同じように、最初の一歩だけでなく、その続編、次の二歩、三歩を求められる事でしょう。

    KiD

  6. H.Saito

    えーと、多分これは「仕様」なんでしょうが、[Age]で、BirthDay を今日より未来の日付にすると差分 [ Age in Days ] が一つ少ない。例えば今日は八月二四日ですが、 BirthDay を八月三一日に設定すると差分が六日になる。コードを読むと実際に計算しているのは gregorian components なので、まあ仕様かなと思うのですが。

  7. (の)

    こんにちは赤松様
    他書をいろいろ読み比べた結果、iPhone SDKの教科書を購入させていただきました。図解も説明も丁寧で、大変参考にさせていただいております。
    現在Ageでデイト・ピッカーの勉強をしています。そこで一つ質問なのです。ローカライズがどうもうまくいかないのです。日本語環境で表示したとき、デイト・ピッカーは日本語表示になるのですが、ほかのラベルである「誕生日」、セグメンテッドコントロールの「年齢/月齢/日齢」が英語のままなのです。xibファイルをローカライズし、Japaneseを開くと確かに日本語で置き換えているのですが、実行ではうまく表示されない状態です。デイト・ピッカー下のラベルはLocalizable.stringsのためそこだけは正常に日本語表示です。シミュレータは言語と書式を日本語にしています。
    またXcodeのヴァージョンが本とは異なり、例えばTimezoneの項目がなく、そんな小さなことでも悩みの種です(^^;
    長くなって申し訳ありません。思いつくことがありましたら、よろしくご教授ください。

  8. Taro

    iPhone SDKの教科書の読者です。p208にありますClip Subviews がよくわからないです。
    爆発の絵が欠けてしまうかもしれないとのことですが、Clip Subviews(これはUFOの絵を付けたボタンの属性ですよね)のチェックを付けて、
    爆発の絵の大きさをどんなに変えても欠けることはなく、単に絵が拡大縮小されるだけです。

    そもそも、爆発の絵が拡大縮小される状態がおかしいのでしょうか? Xcode3.2.3を使用しております。
    何かヒントをいただけたらと思います。

  9. cha

    iPhone SDKの教科書の読者です。ようやく教科書も1周しプログラムに工夫を加える段階なのですが、バランスに速度の初期値や加速度の初期値を与えても動作の様子が見られませんがこれはなぜでしょうか?

    また上の(の)さんが言われているようにローカライズがうまくいかないのですが、ぜひ参考助言のほうをお願い致します。

  10. Masayuki Akamatsu 投稿作成者

    (の)さん、ダウンロードのページにあるサンプルコードでも表示が日本語にはならないでしょうか? また、(の)さんが作られているプロジェクト一式をどこかにアップロードしていただければ、こちらでも確認してみます。

    ちなみに、iOS 4.0ではホームスクリーンに表示されるアイコンのローカライズが正しく表示されないことは確認しています。これはiOS 4のバグではないかと思いますが、Appleのフォーラムでも問題が報告されているものの、解決策は示されていないようです。

  11. Masayuki Akamatsu 投稿作成者

    Taroさん、確かにSDK 4.0ではおっしゃるような状況になりますね。これがSDK/OSの仕様変更なのか一時的なバグなのかは確認できていません。意味的には書籍に記載した通りで、4.0での動作がおかしいような気がしています。

  12. Masayuki Akamatsu 投稿作成者

    chaさん、シミュレータで実行されているのでしょうか? シミュレータの場合は加速度のデリゲートが呼び出されないので、速度の初期値を変えても変化が起こりません。実機で実行される場合は速度の初期値が反映されるはずですが、いかがでしょうか?

    ローカライズに関しては、2つ前のリプライに書きましたので、参考にしてください。

  13. Masayuki Akamatsu 投稿作成者

    H.Saitoさん、AppleのドキュメントにはThe resulting component values may be negative if resultDate is before startDate.としか書いていないですね。おっしゃるように「仕様」としか言いようがないのですが「バグ」かも知れません。

  14. (の)

    こんにちは赤松様
    お忙しいところ時間をさいてのお返事ありがとうございます。さきの質問には書かなかったのですが、確かにアイコンもローカライズされません。自身の勉強のためもあって、ソースは打ち込みでおこなっており、ダウンロードしたコードでビルドを試してはいないのです。が、試してみます。chaさんも同じ現象で悩んでおられるので、おそらくXcodeのバージョンアップに伴い、バグ?があるのかもしれません。
    単なるラベルですがLocalizable.stringsで対応させればいいのかもしれませんが…。スマートな解決ができればと思っています。ソースアップの件はいろいろ試してからと言うことで考えておきます:-)

  15. (の)

    こんにちは赤松様
    ダウンロードしたコードは問題なくビルドでき、ローカライズもされてます(アイコン除く)ことを確認しました。前のXcodeで作成したプロジェクトは問題なくビルドできるようです(これはこのページ冒頭でも確認が述べられています)。現バージョン(3.2.3)で作成するとローカライズに問題がでるか、私の理解足りないかのどちらかでしょう(T_T)
    ということで、恥ずかしながら私のプロジェクトを下のアドレスにアップしましたので、よろしければみていただけますか?
    http://homepage2.nifty.com/takai/
    nAgeからダウンロードをお願いします。プロジェクトはnAgeで作りましたので、フォルダ名はnAgeでお願いします。ラベルの背景に色が付いているのは、自己都合によるものですので気にしないでください(^^;

  16. Masayuki Akamatsu 投稿作成者

    (の)さん、ダウンロードしたプロジェクトをそのままビルド&実行すれば、正しく表示されました。英語に切り替えると英語表記になりますし、日本語に戻すと日本語表記になります。何も手を加えていないので、行なわれた作業は特に問題はないようです。試したXocdeはバージョン3.2.3、iPhone SDK 4.0です。

    100910-0003

    念のため、ビルド・メニューの「クリーニング」を行なってから、ビルド&実行してみてください。それでもだめならSDKを再インストールすることも必要かもしれません。

  17. (の)

    赤松様
    早速ありがとうございます。
    なるほどなってますねぇ。クリーニングは行っていたのですが…。インストールし直すとは考えてなかったですが、それしかないようです。いろいろありがとうございました。後ほどレポートを入れたいと思います。

  18. Taro

    赤松様

    どうもありがとうございます。やはり変な動きなんですね。
    ここはあまり気にせずに先に進みたいと思います(^^)
    iphone SDKの教科書は初めて読むiphoneアプリの本ですけど
    本当にわかりやすくて、つくづく買ってよかったと思っています。

  19. (の)

    赤松様 こんにちは、(の)です。

    アドバイス頂いた通り、インストールし直してみました。ら、完璧です!(◎_◎;)
    改めてダウンロードするところから、すべてをやり直してみました。Xcode3.2.4、iOS4.1です。
    Macに触れてまだひと月にもならないのですが、本筋でないところで出ばなをくじかれた感じです。まだまだ勉強を続けていきますので、今後ともよろしくお願いいたします。ありがとうございました。

  20. 銀色

    赤松様

    日頃よりアプリ開発で赤松様の書籍にお世話になっているものです。
    上記のローカライズがうまくいかないという件ですが、
    解決策はSDKの再インストールではなく、アプリの再インストールでうまくいきます。
    おそらくマルチタスクに伴うデータを保持し続けるという動作のための弊害ではないかと思われます。
    何かこの情報がお役に立てれば幸いです。

  21. Masayuki Akamatsu 投稿作成者

    銀色さん、アドバイスをありがとうございます。なるほどおっしゃる通りで、SDKを再インストールの前に、ホーム画面からアプリケーションを削除してからビルド&実行するのがいいですね。

  22. iapple8037

    赤松様 初めまして。

    本を読みながら何とかカウンターアプリが無事出来ました。 
    プログラミング入門者ですが非常に楽しく勉強させていただいてます。

    1つちょっとコンフューズした事がありまして、それはpropertyの宣言ですが
    このカウンターアプリでは全くpropertyを書いていないんですが。
    どういうケースで書いて、どういうケースで必要ないのか教えて下さい。

    どうぞ宜しくお願いいたします。
    PS やっぱりc言語を勉強しないとobject-cは無理なんですかね?www

  23. Masayuki Akamatsu 投稿作成者

    iapple8037さん、インスタンス変数を他からアクセスさせたい場合はプロパティにします。必要が生じない限り、プロパティを宣言する必要はないですよ。C言語の基本知識は必要ですけど、ポインタとは知らない方が安全かも(笑)。

  24. iapple8037

    なるほどなるほど! 何となく解った様な気がします。
    有り難うございました。

    ポインタは無視ですねwwww! よく解らないですが、想像するにこんがらがいがちって事ですね!
    了解です!!

  25. iapple8037

    赤松様
    今smashアプリを本を読みながら1つずつ進めているのですが、
    page212で 手順2 コメント化されているviewDidLoadメソッドのコメント記号を削除する。って有りますが、
    SmashViewController.mを見ても何も書かれていないのですが?

    コメント記号とは//ですよね? これを外せば良いんですよね?
    ただ見つからないんです。

  26. Masayuki Akamatsu 投稿作成者

    iapple8037さん、作成したプロジェクトのSmashViewController.mは以下のようになっていますので、この /* と */を削除してください。(P.230など書籍に掲載されているコードは /* と */を削除した後の状態です。)

    /*
    // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
    – (void)viewDidLoad {
    [super viewDidLoad];
    }
    */

  27. iapple8037

    赤松様
    有難うございます。
    このコード自体が

    /*
    // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
    – (void)viewDidLoad {
    [super viewDidLoad];
    }
    */
    作成したプロジェクトのSmashViewController.mで見当たらず、自分のSmashViewController.mでは
    //
    // SmashViewController.m
    //
    // Created by YANAGIDA on 10/10/30.
    // Copyright 2010 __MyCompanyName__. All rights reserved.
    //

    #import “SmashViewController.h”

    @implementation SmashViewController

    – (IBAction)smash:(IBAction *)sender {

    }

    @end
    しか書かれていないので、どこかで操作ミスしているって事ですかね?

  28. iapple8037

    赤松様 ありがとうございます。
    私が作成したプロジェクトのSmashViewController.mに
    /*
    // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
    – (void)viewDidLoad {
    [super viewDidLoad];
    }
    */
    と言うようなコードが書かれておらず、これは自分の操作しているときに何かのミスで消されてしまったのでしょうか?
    自分のSmashViewController.hには前の作業で記入したactionの実装コードしか書かれていないので?

    それともこのコードは普段は常に自分で書き込むものでXcodeで新規ファイルには書かれていない物なんでしょうか?

  29. iapple8037

    赤松様 iphone SDKの教科書のp116で引数を2個以上あるメソッドの書き方を言葉で書かれていますが、
    何か例を頂けませんでしょうか?

    引数の型 引数名 とは?
    [オブジェクト メソッド名:(引数1の型) 引数名1 キーワード名:(引数2の型)引数名2];
    のキーワード名の意味が今ひとつ理解出来ません。

    お手数ですが何か例とともに見れば解り易いかと?

    宜しくお願いいたします。

  30. Masayuki Akamatsu 投稿作成者

    iapple8037さん、例えばNSStringのcompare:options:があります。compare:の後には比較する文字列、options:の後には小文字大文字を無視するといったオプションを指定します。このoptionがキーワード名です。

  31. ponts silvio

    赤松さん、始めまして、ブラジルのポンテスです。
    赤松さんの本iPhone SDKの教科書-Cocoa Touchプログラミング、最初の一歩、買って読んでいます。
    Chapter3クロックできませんでした。

    私のバージョンです:
    Developer Information:

    Version: 3.2 (10M2309)
    Location: /Developer
    Applications:
    Xcode: 3.2.4 (1708)
    Interface Builder: 3.2.4 (804)
    Instruments: 2.7 (3014)
    Dashcode: 3.0.2 (333)
    SDKs:
    Mac OS X:
    10.4: (8S2167)
    10.5: (9L31a)
    10.6: (10M2309)
    iPhone OS:
    3.2: (7B500)
    4.1: (8B117)
    iPhone Simulator:
    3.2: (7W367a)
    4.0: (8A306)
    4.1: (8B117)

    なにかまちがいましたか
    よろしくおねがいします。

  32. Masayuki Akamatsu 投稿作成者

    ponts silvioさん、(ブラジルにお住まいですか?)お尋ねの件ですが、書籍はSDK 2.2の頃に書いたので、現在ではXcodeの画面など多少異なる点があります。ただ、内容的には大きな違いはないと思っています。

    どのような問題が生じているか、もう少し具体的に教えてください。また、サンプルコードがダウンロードできますので、これも試してみてください。

  33. toshi digi

    お世話になっています。p207からp209にかけてですが、手順8の後highlightを選んでTaget-samashedにしてその後教科書通りにやりましたが、結果円盤をタップしても爆発した状態になりません。5度くらいやってもだめでした。考えられるミスがあれば教えて欲しいのです。よろしくお願いします。

  34. Masayuki Akamatsu 投稿作成者

    toshi digiさん、Interface Builderでボタン(UFOの画像)を選択して、インスペクタのControlにあるHighlightedをチェックすると爆発した画像になりますか?ならないようであれば指定が間違っていると思います。爆発した画像になるようでしたら、それ以外の指定やコードが間違っているのかもしれませんね。また、このサイトにあるサンプルコードをダウンロードして試してみてください。サンプルコードが正しく動作するようなら、それぞれを比較することで間違いを見つけられると良いのですが、どうでしょうか?

  35. daizi

    赤松様。
    本書籍を購入いたしましたが、
    豊富な例に加え、分かり易い解説が入っており、
    本書籍を購入して本当に良かったと思っております。

    赤松様に質問したいことがあるのですが、
    Chapter3クロックの改良、発展にある
    3(秒針をスムーズに動くようにしよう)ですが、
    こちらが実現できません。

    driveClockを下記のように変更したのですが、
    動作が改良前と変わりませんでした。

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1];
    int sec=[todayComponents second];
    secondHand.transform=CGAffineTransformMakeRotation(M_PI*2*sec/60.0);
    [UIView commitAnimations];

    SDKのバージョンは、4.2(現時点で最新です)を
    使用しております。
    何か、不備などご指摘をして頂けると、幸いです。
    よろしくお願いいたします。

  36. Masayuki Akamatsu 投稿作成者

    daiziさん、書籍のままだとカクカクカクって感じで、daiziさんのコードだとニュルニュルニュルって感じですよね(笑)。setAnimationCurve: を調べてみてください。

  37. daizi

    赤松様。

    ご指摘の通り、ニュルニュルしておりましたが、
    下記のコードを追加したところ、
    スムーズに動くようになりました。

    [UIView setAnimationCurve:UIViewAnimationCurveLinear];

    改良前と動きが変わらなかった点についてですが、
    シュミレーターを再起動したところ、
    滑らかに動くようになりました。
    (でもニュルニュルしておりました)

    迅速なご返信を頂き、
    ありがとうございました。

  38. (の)

    こんにちは 赤松様。(の)と申します。9月に質問以来で、ご無沙汰しています。
    なんとか1つのアプリを作り終え、App Storeで公開に至りました。12月には出来上がったのですが、公開までの手続きでずいぶん手こずりました。
    リジェクトも一度食らいました。本書にはなかった、ピッカービューを使い、画面は赤松様のアプリ「元号」をお手本とさせて頂きました。
    まずはお礼までm(_ _)m

  39. Masayuki Akamatsu 投稿作成者

    おめでとうございます。(の)さん。

  40. iapple8037

    今日は 赤松様
    今counterアプリを本を読みながら勉強しているのですが、updateDisplayというメソッドでまとめると
    アプリの反応速度とか、早くなったりはしないのでしょうか?
    反応速度を上げる事とプログラミングの書き方というのは全く関係ないものなんでしょうか?

  41. Masayuki Akamatsu 投稿作成者

    iapple8037さん、一概に言えませんが、updateDisplayのメソッドを呼び出す手間が増えるので、アプリの反応速度は落ちる可能性があります。ただ、カウンターのような簡単なアプリでは微々たる違いでしかないと思います。

  42. Masayuki Akamatsu 投稿作成者

    筆者による「iPhone SDKの教科書」サポート・サイト(本サイト)の更新は終了しました。今後は「iOSの教科書」をご利用いただければ幸いです。ありがとうございました。

  43. ピンバック: 実機ダヨ!全員集合!Provisioning Profileの取得 | サルでき.jp | iPhoneアプリ作りを楽しむみんなのポータルサイト

コメントは停止中です。