iPhoneプログラミング京都勉強会

木谷公哉 (KITANI Kimiya) kitani@bakkers.gr.jp

講師:荻原氏(京都産業大学)
司会:安田氏(京都産業大学)公開資料 (2011.03.22リンク)
場所:京都キャンパスプラザ→株式会社はてな(第10弾以降)
正式サイト:iPhone京都勉強会のサイト(2013年5月立ち上がった)
関連記事:「レポ:京都キャンパスプラザでiPhone勉強会開講」 - Apple Bank -
  1. 第1弾:Objective-C 2.0の習得のための勉強
    1. 第1回 - 2009.06.02: SDK導入とオブジェクトやクラス継承、Interface Builderについて
    2. 第2回 - 2009.06.17: 実機へのアプリ導入、メモリ管理、クラスオブジェクトとは
    3. 第3回 - 2009.07.08: 動的結合と型、軽傷
    4. 第4回 - 2009.08.05: ランタイムシステム、フレームワーク、オブジェクト、デリゲートや通知等

  2. 第2弾:メンバーによる作成アプリの紹介
    1. 第1回 - 2009.09.30
      • 作成したアプリの紹介(ピンボール、もぐらたたき、マルチタッチを使ったアプリ、たまころがし、抽選くん)
    2. 第2回 - 2009.10.21
      • WindowsとViewについて
    3. 第3回 - 2009.11.11
      • 1. OpenGLデモ
        2. 発表資料「iPhoneデベロッパ登録経過報告(App Storeに登録するまで)」(PDF, PowerPoint)
        3.関西オープンソース2009のユーザ企画で発表されたアプリ
    4. 第4回 - 2009.12.09
      • 1. Unity3D の概説+α, 2. WebViewとiPhoneAppでHello,world
        3. SDataとNSURLConnectionでのデータダウンロード, 4. Mopirun開発(AppStore登録)苦労話

  3. 第3弾:iPhoneだけでなくiPadやAndroid等周辺機器も含んだ紹介
    1. 第1回 - 2010.04.14
      • 1. Bluetoothを使ったアプリケーションを作ってみよう, 2. iPhoneでカレンダー表示(祝日対応)
        3. iPhone OS 4.0 betaデモ
    2. 第2回 - 2010.05.19
      • 1. 発表資料「iPhoneアプリのiPadユニバーサルアプリ化とデモ」(PDF, PowerPoint)
        2. arduino(アルドゥイーノ), 3. Android
    3. 第3回 - 2010.06.09
      • 1. 「iPhone勉強会 in BKC」の紹介, 2. 加速度計センサー計測
        3. OpenGLアプリコードのいいかげんなところを直す, 4. iPhone4 Preview on WWDC 2010
    4. 第4回 - 2010.07.14
      • 1. 加速度系実験顛末 with iPhone4, 2. iPhone4 Development on iOS4

  4. 第4弾:iPhone4を含むアプリ紹介と関西オープンソース2010への出展

  5. 第5弾(社会人向けの突っ込んだ紹介)

  6. 第6弾:新機能・新デバイスお披露目と新規メンバー向け準備
  7. 第7弾:Objective-Cプログラミングと新しいもの披露
  8. 第8弾
  9. 第9弾
  10. 第10弾(会場変更→株式会社はてな)

内容の概略


第1弾 「Objective-C 2.0の習得のための勉強」
  • 第1回: 2009.06.02
    1. iPhone SDKの配布と導入
    2. 自己紹介
    3. Objective-Cについて
    4. 記述の仕方
    5. オブジェクトとは?
    6. オブジェクトはどこに保存されるのか?
    7. クラスとは?
    8. selfってなに?
    9. クラスの継承について
    10. 2-5カウンターの基本要素のデモ: File's Ownerを右クリックするとアクションがでてくるよね?
    11. 自作オブジェクト:この段階では難しいのでさらっと流す
    12. コネクタの接続方法について:二種類ある
    13. 課題1: 03mute1などコンパイルできるようになっておくこと
    14. 課題2:このiPhone勉強会専用のiPhone Developer University Programを用意した。
      後ほどMLに登録方法を流すのでやっておくこ
  • 第2回: 2009.06.17
    1. 開発用証明書の入手とiPhone/iPod Touch実機のUDID調査
    2. 実機へのアプリ導入へ至るまでの登録説明
    3. 課題2の説明
      - アクションメソッド
      - プロパティ
    4. オブジェクトのメモリ管理とは(Objective-C 2.0の第5章P87〜)
      - オーナーシップ・ポリシー(Objective-C 2.0のP98〜)
      - releaseについて
      - 一時的なオブジェクト
    5. クラスオブジェクトとは?(Objective-C 2.0のP79〜)
  • 第3回: 2009.07.08
    1. 動的結合と型
      - 型を指定すること
      - 参照
      - 空のポインタ nil
      - 型の静的なチェック
      - ポリモーフィズム
      - アクセサ<『Objective-C 2.0』のP76>
      - 宣言プロパティ<『Objective-C 2.0』のP288>
    2. 継承とメソッド呼び出し (self)
      - 抽象クラス
      - 可視属性(アクセス制御)<『Objective-C 2.0』のP78>
    3. 例題「figure」の説明 02sample.pdf
      - スーパービューは、サブビューをretainしている。
      - レスポンダ・チェーン
  • 第4回: 2009.08.05
    1. 本の紹介
      中間的な本として、「iPhoneアプリケーションプログラム」新居雅行 ISBN: 978-4-7741-3881-7
    2. ランタイムシステム - 資料「第3回の03ObjC4.pdf」-フレームワーク
      - Objectの主なメソッド
      - セレクターとメッセージ送信
    3. フレームワーク
      - Foundation フレームワーク
      - Core Coundation フレームワーク
    4. オブジェクト
      - NSString(文字列)
      - NSArray(配列)
      - 高速列挙 (Objective-C 2.0の新機能)
      - NSDictionary(辞書) - Objective-C 2.0のP209「辞書クラス」
      - NSData(生データ)
    5. クラスクラスタ
    6. デザインパターン
      - カテゴリ(Objective-C 2.0 P232)
      - 多重継承
      - プロトコルへの適合
      - 非公式プロトコルの例
    7. デリゲート(delegate)
    8. 通知
    9. QucikAnswerサンプルプログラムの説明
    10. 課題:第2弾(秋期)までに、何かアプリを作ってくること
      次回は作成したアプリを中心に行う
第2弾「メンバーによる作成アプリの紹介」
  • 第1回: 2009.09.30
    1. 作成したアプリの紹介
      - ピンボール: サウンド中心
      - もぐらたたき
      - マルチタッチを使ったアプリ
      - たまころがし: 加速度センサー
      - 抽選くん(木谷): ローカナイズ、環境保存 (PDF, PowerPoint)
  • 第2回: 2009.10.21
    1. WindowsとView
      - Viewの役割
      - ULViewとGUI部品の継承関係
      - Viewのサブクラスの役割
      - Model-View-Controllerの関係
      - レスポンダチェーン
      - UIWindow
      - WindowとView階層
      - UIViewを使ったアニメーション
      - UIActionSheetについて
      - UIActionSheetDelegate
  • 第3回: 2009.11.11
    1. OpenGLデモ
      - OpenGLを利用したマルチタッチ(5本までは確認)
      - 加速度センサーを使った重力
      - タッチセンサー
    2. iPhoneデベロッパ登録経過報告(木谷)
    3. ブロック- MacOS10.6から使えるようになった
    4. 関西オープンソース2009のユーザ企画で発表されたアプリ
      - タッチ関係
      - Core Animationでキャラクターを動かす
      - サウンド関連
      - BGMを流す
      - コマンドラインからサウンド圧縮
      - iPod Library (3.0以上)
  • 第4回: 2009.12.09
    1. Unity3D の概説+α
      - QTVR Diaryの紹介
      - Unityを使っての作成方法
      - iPhone Unityの紹介
    2. WebViewとiPhoneAppでHello,world
      - UIWebViewを使ったウェブ表示
      - 日経ソフトウェア11月号を参照に作成したHello, worldアプリの紹介
    3. NSDataとNSURLConnectionでのデータダウンロード
      - ダウンロード手法
      - サンプル:サーバにJPEG画像を置いておいて、それをダウンロードする
      - 質疑応答(セキュリティに関しては?)
    4. Mopirun開発(AppStore登録)苦労話
      - アプリ紹介
      - AppStore登録のReject話
      - 番外編1:著作権が切れているものを扱ってみよう
      - 番外編2:キャッシュ
第3弾「iPhoneだけでなくiPadやAndroid等周辺機器も含んだ紹介」
  • 第1回: 2010.04.14
    1. Bluetoothを使ったアプリケーションを作ってみよう
      • Bluetoothで接続できるデバイスの表示
      • session
      • 接続時に呼ばれるデリゲートメソッド
      • 送信する時の注意点(NSData型への変更が必要)
      • すれ違い通信
    2. iPhoneでカレンダー表示(祝日対応)
      • NSDictionaryを使った祝日データの管理
    3. iPhone OS 4.0 betaデモ
      • 目新しい機能についての紹介がメイン
      • 背景を変更、マルチタスク、カメラのズーム、ビデオ撮影中のピンと合わし、すべての受信メール、Bluetoothでキーボードに対応、カレンダーに誕生日が、入力画面で地球のアイコンを長押しすると、絵文字や言語選択できたり。
  • 第2回: 2010.05.19
    1. iPhone/iPadのユニバーサルアプリ化とデモ (PDF, PowerPoint)
    2. arduino(アルドゥイーノ)
    3. Android
      • Javaが開発環境だ
      • iPhoneと比べた体感速度は、まだiPhoneに軍配があがるだろう。
  • 第3回: 2010.06.09
    1. 「iPhone勉強会 in BKC」の紹介
      • 琵琶湖草津キャンパス(BKC)。 本勉強会をきっかけに作った有志勉強会。
      • 皆で情報共有し楽しみながら、App Storeにリリースすることが最終目的。
      • UstreamやTwitterなどを使ったら面白いかも!?
    2. 加速度計センサー計測
      • OpenGL ES Applicationについて
          ES1, ES2があり互換性がない!!
        
          - ES2.0: 第3世代のiPod以降
          - ES1.0: 古いもの
          試す必要あり!
          
          ○secごとに再計算して再描写することを自動でやってくれる。
          
          ES1Renderer, ES2Rendererの二つを用意してくる。定義は?
          EAGLView.mで定義するんだよ。
          renderer = [[ES2Renderer alloc] init];
          if(!renderer){
          	renderer = [[ES1Renderer alloc] init];
            if(!renderer){
            	[self release];
            	return nil;
            }
          }
          とES2 --> ES1 --> Errorという形になっている。これは上記で決まる。
          
          - (void) drawView:(id)sender
          {
          	[renderer render];
          }
          
          で自動で呼び出される。
          
          EAGLView.hにある。
        	id  renderer;
          でプロトコル定義してあり
          ESRender.hに
          @protocol ESRenderer 
          に書かれている。
          
          ES2Renderer.m
          init, render, dealloc等で定義されている
          ここのrenderが呼び出される(drawViewメソッドで)
          ここに描き込めばいい。        	  	
        				
      • 加速度計
        accelerometer(第2弾の第1回「たまころがし」、第2弾の第3回「加速度センサーを使った重力」で紹介されている)
        チェックタイミングの間については、その間の時間をチェックして、仮定を立てて処理する。重力加速度(X, Y, Z)であり、通常は下向けに重力がかかっている。Zは1.0近辺、X,Yは0.25程度(地球重力に水平に軽く回すぐらいなら)。
        実際これを積分してプロットしてみると、結構うまくいく。これは空中ではなく摩擦をできるだけなくした板で回すと結構いける。
        傾けてとまるとZとX軸がずれるが、水平に動かしていると仮定しているなら補正は可能。でも実際はY軸が異なったりするわけで、そうなると一筋縄ではいかない。やはり現状では、水平で動かしているはずという仮定をたてて作ることになるか。
        しかしiPhone 4は「角速度センサー」が搭載されたので、それが使えるなら、この問題は解決してしまうというオチが。
    3. OpenGLアプリコードのいいかげんなところを直す
      • 全部をグローバル変数で定義して作成した安田氏のコードが対象。加速度センサーの値は、書き換えが不可能なので、同一構造で書き換え可能な構造体を別途作って、これを使う。処理は、クラスを別途作って、そこでうまく処理を共用することがよいだろう。そのあたりをどう実装するのかということ。
    4. iPhone4 Preview on WWDC 2010
      • 5200人が参加したとのこと。Thinnest Smartphoneと言っている。
      • 側面をステンレスにして、全面アンテナにしている。
      • 1988年にAppleが300dpiのレーザープリンタをみたときに粗が目で見えないことにショックを受けた。ある一線を超えると、それは量的なものが質に変わることがあるということだ。
      • アプリは引き伸ばされる(縦×横が2倍になっても)ことはない。それは置き換えられるからだ。これは誰もついてこれないでしょ・・Appleは液晶を作っているわけではないから買える。何が追従できないのか?それはA4プロセッサーだ。Googleが自社で携帯を作る理由は何故だ?私的に思うことは、彼らが要求するスペックのものが市場に出てこないからではないか。
      • iPad, iPhoneはそのほとんどをバッテリーに投資したいので、その他のチップを小型化した。
      • iPhone4はFlashメモリを32GBを上限とした。これはチップ1つに抑える(スペース問題)にしたかったからではないか。いままでは新製品になると内蔵メモリの上限をあげていたのに
      • 6/24が発売日だ!でもSIMロックフリーなのか、料金プランも全然わからない・・・。
  • 第4回: 2010.07.14
    残念ながら仕事で行けませんでした。下記のようなことをしたとのことです
    1. 加速度系実験顛末 with iPhone4
    2. iPhone4 Development on iOS4
      貰った資料よると、下記のような内容だったようです。
      1. ディスプレイやキーボードについて
      2. Xcodeのソース互換性。3.2とそれ以前
      3. マルチタスクプログラミングの概要(結構役に立ちました)
      4. iPhoneとNDAについて
第4弾「iPhone4を含むアプリ紹介と関西オープンソース2010への出展」
  • 第1回: 2010.09.08
    1. iPadNote - iPadでノートを取る
      • プロトタイプの位置づけだが、何故作ったのか?
        • iPadを学生に配布するところもあるようだが、その活用はどうなる?コースウェアを作成しようにも講師側が新たなデバイスに対応できてないケースがあり、モチベーションもまちまち
        • レジュメやスライドをPDFで配るか・・・だが今度はPDFを読んでしまって聴講しなくなるのではないか・・つまり最終的にPDFのダウンロード=授業を受けたと錯覚する恐れがある。
        • というわけで、PDFにメモを書き込めたらいいよね・・・さぁiPadNoteの出番だ!
      • プログラミング構成要素
        • UIScrollView
          サイズよりも大きなデータを置いて、このUIScrollViewの範囲だけ見るという感じ。
          UIScrollViewの下限を越えたら、UIScrollViewを下に伸ばしてる(サイズ伸張)。これはcontentSizeを変更するのとscrollEnabledをONにするだけ。
        • Pdfの扱い
          - グラフィックコンテクストを作成し
          - PDFのあるページを取り出し、イメージ化(レンダリング)
          - 作成したグラフィックコンテクストに貼る
          - そして解放しなければならない(1頁レンダリングするのに大量メモリを喰う。イメージPDFを取り込んだときが顕著)
          テキストがPDFの表示枠を越えたら、textViewを優先してサイズ変更したい。 sizeThatFitsが使える。
          CGSize size;
          size = [textView sizeThatFits:CGSizeMake(width, height)];
          
        • UIについて
          いままではUI以外のライブラリが充実してきたので、UIに時間をかけられるようになってきたとも言えるか
          質問)デスクトップデバイスに擬音は使えるのか?
          これは短い時間でやる操作だから耐えられる。ここでいうデスクトップデバイスとは、連続して仕事をする必要になるデバイスとのこと。 つまり擬音UIは、断続的につかうデバイスに限るんじゃないか。
    2. iPhone4のRetinaディスプレイ対応について
      高解像度画面のサポート(640x960)について。
      image.png(これを呼び出す) --> image@2x.png(倍の解像度いれとく)
      だがAppleドキュメントに書いてあるのに実装されていない場合がある。今回はNSBundleを使うケースだ。
      initWithContentsOfFile, imageWithContentsOfFileについては@2xが自動認識してくれない。imageNamedは認識してくれるが画像をキャッシュするので出来れば使いたくないなぁ。現状ではカテゴリーを使ってNSBundle内のpathForResouceメソッドを拡張してやるのが素直な方法か。 どうように~iphone, ~ipodも正しく動作しないようだ。
  • 第3回: 2010.11.10
    1. iPhone4/iPadでの外部ディスプレイ表示(木谷)
    2. OpenALの紹介
      • iPhoneではステレオしか対応していない・・・
      • メリットは、3D空間での音源の取り扱いができ、その音の再生途中に音量を下げるとかできる。
    3. 関西オープンソース2010報告とデモ
      • 写真を見せながら、ブース(カンナがけアプリの実演)やプレゼン状況等の報告
      • デモ「カンナがけアプリ」
        • 制御用iPhoneからiPadへ命令を送って、計測開始。iPadへの表示も含めて制御用iPhoneで制御する
        • CFSocket, CFStream, NSInputStream, NSOutputStreamを使った。
        • 通信は「1パケット」程度だが、Wi-Fi通信していたがずれてしまった(タイマーの同期が課題)-- なかなか複数台でのテストができなかったこともあり・・。
        • メモリリーク問題も結構でていて対応するのが結構大変だった
        • ラインを引いてやったほうがやりやすかったかなとかの感想
第5弾「社会人向けの突っ込んだ紹介」
1,2,3月は授業などのため参加メンバーの主体は社会人。よって、勉強会だが少し社会人向けにいろいろとやってみようと試みてみたりする・・・のか!?
  • 第1回: 2011.01.18
    1. USうろうろ報告 2011編 (CES + Silicon Vallery)
      1. カリフォルニア州のハイテクベンチャーが集まる地域について地図で紹介
      2. Kindle, Naspter (ハイブリット型のP2Pシステム)などの話
      3. Google TVとAndroidの行く末とは!?
      4. CES (日本サイト)
        • 消費者家電ショーで10万人規模のイベント。大規模イベントを開催できるところは数少なく、今回のようにラスベガスが使われるケースが多い
        • iphone関連ブース体験 (iGrill等)
        • 面白いものたち (Pixel QIによるOLPC液晶の活用等)
      5. Wikipedia, Ustream本社への訪問
      6. 次回はアクセラレータについて紹介したい
    2. Mac App Store登録顛末
      1. Macデベロッパープログラム購入(¥10,800)が必要。iOSとはまた別だ。
      2. 注意点:Application Toolsの導入が必要(Build & Archiveに必須)
      3. 流れ:開発 → コード署名 → Buildとアーカイブ(Application Toolsが必要)→ Mac App IDを登録、アプリの情報を登録 → 検証 →送信(120日以内)
      4. その他注意すべき点をいろいろと

  • 第2回: 2011.02.16
    1. Titanium Mobile入門
      1. どんなもの?
        • Appcelerator社が提供するJavascriptでiPhone/Androidネイティブアプリを作成できる変換ツール
        • それなりに高速に動いて、ちょっとしたコーディングなら開発速度はかなり速い
      2. メリットは?
        • メモリ管理不要、コードが直感的かつ短くできる
        • コールバックも簡単
        • Twitter Clientは10分で作れちゃうよ
        • モジュールも作れる(付属ライブラリのコード参照)
      3. 最近の動向
        • 1.5.0になってAndroidが安定しだした?
        • 1.6.0がもうすぐでる模様。詳細は開発者ブログでわかるよん