C#でiPhoneアプリ 開 発 伊 勢 シン with MonoTouch
自 己 紹 介 伊 勢 シンといいます スマートフォン 勉 強 会 の 代 表 です 先 日 Microsoft MVP for Windows Mobile を 受 賞 しました!
WM 開 発 本 書 きました! Windows Mobile 実 践 プログラミング with.net Compact Framework 酢 酸 さん こげつさんとの 合 作 です もう 各 地 の 本 屋 さんに 並 んでいるはず WMのMVPですが 今 日 はiPhoneのネタやり ます! WMだけじゃなくてiPhoneアプリも 作 ってます
おさらい 編 おしながき 基 本 的 なiPhone 開 発 のおさらい Windows Mobile 開 発 との 差 MonoTouch 編 MonoTouchとは MonoDevelopを 使 ってiPhone 開 発 Windows Mobileとのクロス 開 発?
ところで iphoneの 開 発 やったことある 人 って どれくらいいます? とりあえず 一 般 的 なiPhoneアプリ 開 発 のおさらいをしてみましょう
いきなりだけど Demo 1 Xcode を 使 ったiPhoneアプリ 開 発 の 基 本 フロー
必 要 なもの iphone 開 発 の 基 本 Mac OS X 10.5 (Leopard) 以 上 の 入 った Intel Mac iphone SDK 開 発 ツールやライブラリが 入 ってます 会 員 登 録 すると 無 料 で 落 とせます 2~3GBくらい iphone Developer Program 実 機 転 送 やAppStoreへのアップロードに 必 要 な ライセンス 年 額 10800 円
Xcode iphone 開 発 の 基 本 ツール Apple 純 正 の 統 合 開 発 環 境 (IDE) iphoneだけではなく Mac 用 アプリ(ObjC,Java,Ruby) Webアプリ(WebObjects)の 開 発 もできる プロジェクト 管 理 コードエディタなどの 基 本 機 能 が 揃 っている Interface Builder Xcodeのサブツール インターフェイスのデザイン 専 用 のツール
iphone 開 発 の 基 本 フロー Xcode Interface Builder UIをデザインする UIの 定 義 を 書 く 変 数 とUIの 接 続 をする コードを 書 く 転 送 デバッグ シミュレータ 実 機
必 要 なもの Windows Mobile の 場 合 は? Visual Studio の 動 く Windows PC Visual Studio 2008 Professional 以 上 Visual Studio 2005 Standard 以 上 のどっちか Windows Mobile 6 SDK すべての 作 業 がVisual Studio 上 でできます
Windows Mobile 開 発 の 基 本 フロー コードエディタ Visual Studio デザイナ UIをデザインする コードを 書 く 転 送 デバッグ エミュレータ 実 機
iphone 開 発 個 人 的 な 不 満 点 いちいち@propertyとか@synthesizeとか 書 くのめんどくさい! しかも2つのファイルにまたがるとか 補 完 もほとんど 効 かない Demo01ViewController.h Demo01ViewController.m
iphone 開 発 個 人 的 な 不 満 点 それ Visual Studio+C#だったら prop[tab][tab]でできるよ! Tabキー2 回
iphone 開 発 個 人 的 な 不 満 点 入 力 補 完 あんまり 賢 くない 努 力 は 認 めるけど たまに 型 を 見 失 うし Visual Studioだったらコードヒント 出 るよ!
C#erはXcode 上 ではやる 気 が 減 退 する(と 思 う) Objective-Cがわかんないんじゃないんだ メンドクサイんだ! ヘッダファイルを 使 った 定 義 メモリの 管 理 XcodeがVisual Studioに 慣 れた 体 には 合 わない ボタンダブルクリックしても イベントメソッド 作 ってくれない 全 部 自 分 で 書 く ちょっとしたことでもリファレンス 開 くのめんどい
そして 思 う C#でiPhoneアプリ 作 れたらなあ 慣 れてるし 補 完 強 いし ノウハウはいっぱいあるし WMとiPhoneで 同 じソース 書 くのメンドイ! IRC 接 続 クラス2つメンテするの 大 変 です @EbIRC 同 じアプリを 同 時 に 展 開 しようとすると 単 純 計 算 で2 倍 の 時 間 がかかる
そんなあなたに 今 日 ご 説 明 するMonoTouchがお 便 利 です
MonoTouchとは.NETのオープンソース 実 装 Mono を 使 った.NETでiPhoneアプリを 作 れるライブラリ Novellから 9 月 上 旬 に 発 表 されました 8 月 ベータテストがアナウンスされる 9 月 上 旬 1.0がリリース 9 月 下 旬 1.1がリリース
商 用 ライブラリです MonoTouchとは Personal Edition $399/1Developer/Year Enterprise Edition $999/1Developer/Year $3999/5Developer/Year Personal Edition と Enterprise Edition の 違 い iphone Developer Program の Enterprise Program でできる 組 織 内 に 大 量 配 布 する 向 けのアプリの 作 成 に 必 要 Personal Edition のライセンスは 個 人 にひもづくが Enterprise Edition のライセンスは 組 織 内 で 移 動 可 能
見 てもらった 方 が 早 い Demo 2 MonoDevelopを 使 ったiPhoneアプリ 開 発
MonoTouchを 使 った 開 発 に 必 要 なもの Intel Mac + Mac OS X 10.5.x (Leopard) ~ iphone SDK 最 終 的 なビルドはiPhone SDKに 依 存 するので 結 局 Macは 必 要 です Mono 2.4 一 般 に 配 布 されているMonoランタイムです MonoTouch 1.1 今 回 の 主 役 MonoDevelop 2.2 α (MonoTouch 対 応 版 ) MonoTouchの 開 発 サポートが 入 っています
MonoTouchを 使 った 開 発 の 基 本 フロー MonoDevelop エディタとデザイナの 往 復 が 大 幅 に 減 る 多 くの 定 義 が 自 動 補 完 される Interface Builder UIをデザインする 変 数 とUIの 接 続 をする コードを 書 く 転 送 デバッグ エミュレータ 実 機
MonoTouchに 含 まれるもの mtouchコマンド コンパイル iphoneアプリへの 変 換 コードサイン 実 機 転 送 などを 一 発 で 行 ってくれるユーティリティ クラスライブラリ Monoのコアライブラリ System 名 前 空 間 以 下 mscorlibとかsystemとかに 入 ってそうなもの MonoTouch.ObjcRuntime Objective-Cのブリッジなど MonoTouch.Foundation Objective-Cの 基 本 クラス(NSObject)などのラッパー.NETのライブラリだけでなく Objective-Cで 使 用 されるクラスを 直 接 使 うこともできる MonoTouch.UIKit CocoaTouchのコアライブラリ UIKitのラッパー
あれ?ちょっとまって iphoneって 言 語 処 理 系 乗 っけちゃだめなんだよね? 規 約 に 書 いてあって AppStoreに 送 ってもRejectされるだけ iphone 向 けにFlashやFirefoxが 出 せない 理 由 ( 両 方 ともScriptの 処 理 系 が 乗 っている).NETの 処 理 系 って MSILをJITでコンパイルしてたよね? なんでiPhoneに.NETのアプリを 配 信 できるの?
動 的 がダメなら 先 全 部 コンパイルしとけばいいんだよ! MonoのAOT(Ahead of Time)コンパイルで 先 に 全 部 ネイティブへコンパイルしてから iphoneアプリの 形 に 仕 立 てます そのかわり ビルドに 時 間 がかかります そのあたりの 処 理 を mtouchコマンドが うまい 具 合 に 全 部 やってくれます なので 詳 しい 仕 組 みはよくわかりません
MonoTouchのデメリット 動 的 コード 生 成 が 使 えない System.Reflection.Emit や System.Runtime.Remoting などが 使 用 不 可 その 他 動 的 コード 生 成 に 依 存 する 処 理 は 使 用 不 可 デバッグのサポートがない ステップイン ステップアウトなどが 使 えません Console.WriteLineとかでコンソール 出 力 を 出 して Xcodeで 実 行 ログを 確 認 するとかはできます ジェネリクスでできることに 制 限 がある Dictionary<TKey, TValue>で 値 型 をキーにできない ほか
MonoTouchのデメリット.NETのライブラリは 全 部 が 全 部 使 えるわけでは ない 使 用 できるとされているアセンブリ mscorlib.dll, System.dll, System.Core.dll, System.Xml.dll, System.Xml.Linq.dll MonoDevelopのエディタで 日 本 語 を 入 力 できない コメント 書 かせて orz Objective-Cのサンプルをコピペできない iphone 依 存 のUIの 実 装 などはそれを 参 考 にして 自 分 でMonoTouchに 移 植 する
Windows Mobile アプリの 移 植 iphoneのアプリが 全 部 C#で 書 けるなら WMのアプリと 多 くの 処 理 が 共 通 化 できるは ず WMのアプリのiPhone 移 植 が 容 易 になるかも
Windows Mobile アプリの 移 植 UIはWindows FormsとCocoaTouchで 大 幅 に 違 うので 書 き 直 し 必 要 デバイスの 呼 び 出 しも 大 幅 に 違 うけど ラッパー 作 れば 共 通 化 できそう UI メイン 処 理 そのまま 使 えそう ラッパー 必 要 そう 通 信 ファイル 設 定 カメラ GPS その 他 デバイス
できるかな? Demo 3 Windows Mobile 用 カメラアプリの iphone 移 植
まとめ MonoTouch 便 利 です iphone 開 発 の 高 速 化 WMアプリの 高 速 移 植 iphone/wmに 同 時 展 開 お 値 段 高 めだけど 使 いどころが 合 えば 買 い ではないかと 一 部 使 えない 処 理 もあります