JavaScript  でネイティブ iPhone/Android アプリを作る グリー株式会社 伊藤 直也 2010.10.19
自己紹介 伊藤直也  (33) グリー株式会 ソーシャルメディア統括部長プロデューサー iPhone/Android  等やってます
アジェンダ iPhone/Android アプリを  JavaScript  で作る 普通の  iPhone/Android  開発の触り Titanium Mobile  で  JavaScript  でアプリ開発 ※ JavaScript + iPhone/Android  と言っても  HTML5 + JavaScript  な  Web アプリケーションの話はありません
スマートフォン開発 iPhone (iOS) Android
普通の iPhone アプリ開発 iOS SDK + Xcode, Objective-C
InterfaceBuilder GUI でレイアウト -> コード中のアクション紐付け 結局  Objective-C  で書くことも
普通の Android アプリ開発 Android SDK + Eclipse, Java (GUI Builder  はそこまで使われていない ?)
iPhone/Android アプリで作るもの 主に  UI  とデバイス連携部分 「クラウド端末」の性格を活かして ドメインロジックはサーバーで。アプリで表示 デバイスの機能にアクセスしたいときはコア API で
iPhone アプリのコード - (void) applicationdidFinishLaunching:(UIApplication *)application { CGRect rect = [ window  frame]; UILabel* label = [[ UILabel  alloc] initWithFrame:rect]; label.text = @"Hello, world!"; [ window   addSubview :label]; [label release]; [window makeKeyAndVisible]; } "Window"  に  "View" ( ラベルやボタン ) を置く Objective-C で  SDK  提供のクラスの  API  を呼ぶ
Android アプリのコード "View"  で組み立てる  ( 概念は iPhone と似ている ) Java  で  SDK  の  API  を呼んで組み立て  (XML でも書ける ) public class HelloWorld extends  Activity  { @Override public void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new HelloView(this)); } } public class HelloView extends View { @Override protected void onDraw (Canvas canvas) { canvas.drawText("Hello World!", 0, 12, new Paint()); } }
iPhone/Android ネイティブアプリ Pros 速くて快適なインタフェースを構築できる デバイスの機能をフルに活かせる Cons コード量が多い、工数がかかる Objective-C  ・・・ メモリ管理  :( iPhone/Android  そのほかマルチプラットフォームにどう対応するか問題 Objective-C/Java  両方覚えるの大変  /  両プラットフォームのアーキテクチャに慣れるの大変
Appcelerator Titanium Mobile JavaScript  で  iPhone/Android/BlackBerry  アプリが書ける開発環境 JavaScript  なのにネイティブアプリ・・・「な、なんだってー!」 フリー、オープンソース  ( 有料版あり )
Hello, Titanium var win = Titanium.UI.createWindow({ backgroundColor: '#fff', title  : 'FirstApp' }); var label = Titanium.UI.createLabel({ text  : 'Hello, Titanium!', textAlign : 'center', height  : 20, font  : { fontSize  : 20, fontWeight: 'bold' } }); win.add(label); win.open();
ビルド結果
Titanium  で開発 JavaScript 書く -> ビルドする -> シミュレータで確認 ->  JavaScript  書く ・・・ Titanium SDK  は  builder  のみ。 IDE なし Emacs + j2-mode.el  でモリモリ書いてます
Titanium Mobile  開発のはじめ方 プロジェクト作る ->  Resources/app.js  編集 ->  Titanium Developer  でビルド Window  に  View  を載せるモデルは変わらず
Titanium is Native ネイティブだけど JavaScript 、 JavaScript だけどネイティブ UI  は速い。快適 setTimeout() 、 JSON.parse()  など普通に呼べる Titanium.include('../js/jquery.js')  なども可能
How does Titanium Mobile work? http://stackoverflow.com/questions/2444001/how-does-appcelerator-titanium-mobile-work JavaScript  をプリプロセッサが  Titanium API  をシンボルマップにプリコンパイル iPhone  ・・・  .o  にコンパイル Android  ・・・  .class  にコンパイル あとは  SDK  がネイティブバイナリにしてくれる
具体例をみていく
/*  最初の画面  (window) */ var first = Ti.UI.createWindow({ title : 'First Window', backgroundColor : '#fff' }); var button = Ti.UI.createButton({ style: Ti.UI.iPhone.SystemButtonStyle.BORDERED, title: 'touch!', font : { fontSize: 16, fontWeight: 'bold' }, height: 30, width : 100 }); first.add(button); /*  次の画面  (window) */ var second = Ti.UI.createWindow({ title : 'Second Window', backgroundColor : '#fff' }); var image = Ti.UI.createImageView({ image: 'http://farm5.static.flickr.com/4008/4196452707_485b66a9a3_m.jpg' }); second.add(image); /*  二つの画面を繋ぐ  window + navigationGroup */ var base = Ti.UI.createWindow();  var nav = Ti.UI.iPhone.createNavigationGroup({ window : first }); base.add(nav); base.open(); /*  ボタンにイベントを登録  */ button. addEventListener ('click', function () { nav.open(second); });
UI  実装の進め方 Ti.UI.createWindow()  や  Ti.UI.createButton()  で  Window  や  View  といったパーツを作る window.add(button)  などでくっつける フォントの大きさなどは  CSS  のように指定 動きが必要な箇所は  addEventListener()  でイベントハンドラを登録 いかにも  JavaScript
できあがっったアプリの使用感 ( 実機では触れていませんが )  ちゃんとネイティブ 期待通り、ぬるりと動く JavaScript  だから、という妥協した動きにはならない
こんなのも作れます
CoverFlowView var win = Ti.UI.currentWindow; var view = Ti.UI. createCoverFlowView ({ images: [ '../images/01.jpg', '../images/02.jpg', '../images/03.jpg', '../images/04.jpg', '../images/05.jpg' ], backgroundColor: '#000' }); win.add(view);
ネットワーク呼び出しは XHR 同様 var http = Titanium. Network.createHTTPClient (); http.open(    'GET',    'http://search.twitter.com/search.json?q=%23titanium' ); http.onload = function(){ data = JSON.parse( this.responseText ); }; http.send(); /* TCPSocket  や  BonjourService  などもあります  */
デバイスの機能もばっちり
Titanium.Geolocation var mapview = Ti.Map.createView({ mapType  : Ti.Map.STANDARD_TYPE, animate  : true, regionFit  : true, userLocation: true }); Titanium.Geolocation.getCurrentPosition (function (e) { mapview.setLocation( { latitude  : e.coords.latitude, longitude  : e.coords.longitude, latitudeDelta : 0.01, longitudeDelta: 0.0, animate  : true } ); }
Titanium API  いろいろ Ti.Geolocation.getCurrentPosition() Ti.Media.showCamera() Ti.Media.createVideoPlayer() Ti.Platform.batteryState Ti.DataBase.open() Ti.App.Properties.setString() Ti.FileSystem.getFile() Ti.Network.createHTTPClient() Ti.Gesture.addEventListener('shake', ...) Ti.Facebook.publishStream() Ti.UI.iPhone.appBadge = 20 ...
Titanium API  ざっくり 基本的な  UI  はほぼサポート ( と思います ) CoverFlow 、地図、 WebView  もあり カメラ , 位置情報 , 加速度センサなどハードウェアアクセス OK データは  sqlite 、 Properties  に保存可能 Facebook  や  YQL  を扱う  API  などもある API  は拡張モジュールを書くと自分で追加できる  ( っぽい )
作ったもの (1):Flickr Viewer Flickr の JSON を ScrollableView で表示するだけで OK コードは 100 行未満  (http://github.com/SimpleFlickr) 左右フリックで写真が切り替わります
/* Flickr  から  HTTPClient  で  JSON  とってきて・・・  */ var win = Titanium.UI.currentWindow; var loader = Titanium.Network.createHTTPClient(); loader.open('GET', this.url); loader.onload = function() {    Ti.API.info(this.responseText);    var data = JSON.parse(this.responseText);    win.add( Flickr.createPhotoView(data) ); }; loader.send() /* ImageView  作って  ScrollabeView  に流し込む ・・・  */ var views = data.items.map(function (item) { ・・・    var imageView = Titanium.UI.createImageView({      image: item.media.m, ・・・    });    baseView.add(imageView);    baseView.add(title);    baseView.add(date);           return baseView; });          var scrollable = Titanium.UI.createScrollableView({ views: views });
全く同じコードで Android アプリ
作ったもの (2): RSS リーダー Perl サーバで  RSS -> JSON, HTTPClient  でアクセス Facebook Connect,  はてなブックマーク連携機能も 250 行くらい  (http://github.com/naoya/RSSV) ここは  WebView
var loader = Ti.Network.createHTTPClient(); /*  ローカルに立てたサーバーが RSS を JSON に変換してくれるので、それを取得  */ loader.open('GET', 'http://localhost:3000/feed?url=' + row.url); loader.onload = function () {    var data = JSON.parse(this.responseText); /*  読み取った  JSON  を  TableView  で整形  */    var table = Titanium.UI.createTableView({ data : data.map(createItemRow) });    win.add(table); /* TableView  がクリックされたら  WebView  で開く  */    table.addEventListener('click', function(e) {      openWebWindow(data[e.index]);    }); };
雑感など 典型的な  iPhone  アプリなら十分開発できる GUI プログラミングと JavaScript のイベントドリブンスタイルの相性が良い マルチプラットフォームとは言え、 if 文での切り分けはそれなりに必要 UI  パーツの違い、解像度の違い さすがに動きのあるゲームはちょっと難しい ? ( いえ、わかりません )
そのほか AppStore  申請は  OK  らしい 過去に話題に上ったことはあるそう ビルド後のファイルに  .xcodeproj  があるので、 Xcode  から読み込んでいじることができる Xib2Js  を使うと  InterfaceBuilder  で作ったモックを  JavaScript  に変換できる Titanium API  でできないことは、 Objective-C  や  Java  で拡張モジュールを書いてしまえば良い ?
Titanium で開発していくには @donayama さん日本語 wiki は必見 http://code.google.com/p/titanium-mobile-doc-ja/ PDF  印刷して一通り読めば大まかなところはすぐわかる サンプルがあって公式ドキュメントより親切 公式ドキュメントより、  KitchenSink  を見よう オフィシャルのカタログ実装 エミュレータで動かす -> やりたいこと見つける ->  git grep ->  コード見る API  リファレンスは  http://tidocs.com/mobile/latest/  に  SDoc  あり  (by @masuidrive) 公式のより検索しやすい
ご清聴ありがとうございました 【 PR 】 採用してます ! google:GREE+ 採用 iPhone/Android プロジェクト、あります

More Related Content

PPT
about Thrift
PPT
Scripting Layer for Android + Perl
PDF
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
PPT
081108huge_data.ppt
PDF
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
PPTX
Perl logging
PDF
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
PDF
UnrealEngineが5日間でasm.js化できたと聞いた俺たちは…
about Thrift
Scripting Layer for Android + Perl
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
081108huge_data.ppt
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
Perl logging
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
UnrealEngineが5日間でasm.js化できたと聞いた俺たちは…

What's hot (20)

PPTX
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
PDF
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
PPT
Thrift
PDF
PHPの今とこれから2021
PDF
最近の PHP の話
PDF
CodeIgniter入門
PDF
AWS SDK for Smalltalk
PDF
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
PDF
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
PDF
PDF
最新PHP事情 (2000年7月22日,PHPカンファレンス)
PDF
Hack/HHVM 入門
PDF
PHPの今とこれから2014
PPT
PHP, Now and Then 2011
PDF
PHPの今とこれから2019
PDF
WebAPIのバリデーションを、型の力でいい感じにする
PPTX
Open Source System Administration Framework - Func
PDF
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
PPTX
php and sapi and zendengine2 and...
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
15分でCakePHPを始める方法(Nseg 2013-11-09 )
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
Thrift
PHPの今とこれから2021
最近の PHP の話
CodeIgniter入門
AWS SDK for Smalltalk
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
最新PHP事情 (2000年7月22日,PHPカンファレンス)
Hack/HHVM 入門
PHPの今とこれから2014
PHP, Now and Then 2011
PHPの今とこれから2019
WebAPIのバリデーションを、型の力でいい感じにする
Open Source System Administration Framework - Func
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
php and sapi and zendengine2 and...
Ad

Similar to Titanium Mobile (20)

PDF
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
PDF
Android Lecture #01 @PRO&BSC Inc.
PPT
20111031 MobileWeb at TDC
PPTX
13016 n分で作るtype scriptでnodejs
PDF
20120118 titanium
PPTX
学生向けAndroid勉強会(入門編)
ODP
はじめてのAndroid開発
PDF
Jqm20120804 publish
PDF
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
KEY
Titanium実装最初の一歩.
PDF
Data apiで実現 進化するwebの世界
PDF
Titanium勉強会
PDF
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
PDF
Xamarin 概要 2014年08月版
PPT
ExtJSで作るAIRアプリケーション
PDF
ぶっとびケータイ+Firefox OS Apps
PDF
初めての Data API CMS どうでしょう - 仙台編 -
PDF
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
PDF
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
PDF
Xamarin.Forms概要
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
Android Lecture #01 @PRO&BSC Inc.
20111031 MobileWeb at TDC
13016 n分で作るtype scriptでnodejs
20120118 titanium
学生向けAndroid勉強会(入門編)
はじめてのAndroid開発
Jqm20120804 publish
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
Titanium実装最初の一歩.
Data apiで実現 進化するwebの世界
Titanium勉強会
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Xamarin 概要 2014年08月版
ExtJSで作るAIRアプリケーション
ぶっとびケータイ+Firefox OS Apps
初めての Data API CMS どうでしょう - 仙台編 -
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin.Forms概要
Ad

More from Naoya Ito (10)

PPT
Web-Gakkai Symposium 2010
PPT
はてなブックマークのシステムについて
PPT
Perlで圧縮
PPT
Introduction to Algorithms#24 Shortest-Paths Problem
PPT
090518computing Huffman Code Length
PPT
スペルミス修正プログラムを作ろう
PPT
Dijkstra Algorithm
PPT
OGC2009 はてなブックマークについて
PPT
How to read linux kernel
PPT
Introduction To Moco
Web-Gakkai Symposium 2010
はてなブックマークのシステムについて
Perlで圧縮
Introduction to Algorithms#24 Shortest-Paths Problem
090518computing Huffman Code Length
スペルミス修正プログラムを作ろう
Dijkstra Algorithm
OGC2009 はてなブックマークについて
How to read linux kernel
Introduction To Moco

Titanium Mobile

  • 1. JavaScript でネイティブ iPhone/Android アプリを作る グリー株式会社 伊藤 直也 2010.10.19
  • 2. 自己紹介 伊藤直也 (33) グリー株式会 ソーシャルメディア統括部長プロデューサー iPhone/Android 等やってます
  • 3. アジェンダ iPhone/Android アプリを JavaScript で作る 普通の iPhone/Android 開発の触り Titanium Mobile で JavaScript でアプリ開発 ※ JavaScript + iPhone/Android と言っても HTML5 + JavaScript な Web アプリケーションの話はありません
  • 5. 普通の iPhone アプリ開発 iOS SDK + Xcode, Objective-C
  • 6. InterfaceBuilder GUI でレイアウト -> コード中のアクション紐付け 結局 Objective-C で書くことも
  • 7. 普通の Android アプリ開発 Android SDK + Eclipse, Java (GUI Builder はそこまで使われていない ?)
  • 8. iPhone/Android アプリで作るもの 主に UI とデバイス連携部分 「クラウド端末」の性格を活かして ドメインロジックはサーバーで。アプリで表示 デバイスの機能にアクセスしたいときはコア API で
  • 9. iPhone アプリのコード - (void) applicationdidFinishLaunching:(UIApplication *)application { CGRect rect = [ window frame]; UILabel* label = [[ UILabel alloc] initWithFrame:rect]; label.text = @"Hello, world!"; [ window addSubview :label]; [label release]; [window makeKeyAndVisible]; } "Window" に "View" ( ラベルやボタン ) を置く Objective-C で SDK 提供のクラスの API を呼ぶ
  • 10. Android アプリのコード "View" で組み立てる ( 概念は iPhone と似ている ) Java で SDK の API を呼んで組み立て (XML でも書ける ) public class HelloWorld extends Activity { @Override public void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new HelloView(this)); } } public class HelloView extends View { @Override protected void onDraw (Canvas canvas) { canvas.drawText("Hello World!", 0, 12, new Paint()); } }
  • 11. iPhone/Android ネイティブアプリ Pros 速くて快適なインタフェースを構築できる デバイスの機能をフルに活かせる Cons コード量が多い、工数がかかる Objective-C ・・・ メモリ管理 :( iPhone/Android そのほかマルチプラットフォームにどう対応するか問題 Objective-C/Java 両方覚えるの大変 / 両プラットフォームのアーキテクチャに慣れるの大変
  • 12. Appcelerator Titanium Mobile JavaScript で iPhone/Android/BlackBerry アプリが書ける開発環境 JavaScript なのにネイティブアプリ・・・「な、なんだってー!」 フリー、オープンソース ( 有料版あり )
  • 13. Hello, Titanium var win = Titanium.UI.createWindow({ backgroundColor: '#fff', title : 'FirstApp' }); var label = Titanium.UI.createLabel({ text : 'Hello, Titanium!', textAlign : 'center', height : 20, font : { fontSize : 20, fontWeight: 'bold' } }); win.add(label); win.open();
  • 15. Titanium で開発 JavaScript 書く -> ビルドする -> シミュレータで確認 -> JavaScript 書く ・・・ Titanium SDK は builder のみ。 IDE なし Emacs + j2-mode.el でモリモリ書いてます
  • 16. Titanium Mobile 開発のはじめ方 プロジェクト作る -> Resources/app.js 編集 -> Titanium Developer でビルド Window に View を載せるモデルは変わらず
  • 17. Titanium is Native ネイティブだけど JavaScript 、 JavaScript だけどネイティブ UI は速い。快適 setTimeout() 、 JSON.parse() など普通に呼べる Titanium.include('../js/jquery.js') なども可能
  • 18. How does Titanium Mobile work? http://stackoverflow.com/questions/2444001/how-does-appcelerator-titanium-mobile-work JavaScript をプリプロセッサが Titanium API をシンボルマップにプリコンパイル iPhone ・・・ .o にコンパイル Android ・・・ .class にコンパイル あとは SDK がネイティブバイナリにしてくれる
  • 20. /* 最初の画面 (window) */ var first = Ti.UI.createWindow({ title : 'First Window', backgroundColor : '#fff' }); var button = Ti.UI.createButton({ style: Ti.UI.iPhone.SystemButtonStyle.BORDERED, title: 'touch!', font : { fontSize: 16, fontWeight: 'bold' }, height: 30, width : 100 }); first.add(button); /* 次の画面 (window) */ var second = Ti.UI.createWindow({ title : 'Second Window', backgroundColor : '#fff' }); var image = Ti.UI.createImageView({ image: 'http://farm5.static.flickr.com/4008/4196452707_485b66a9a3_m.jpg' }); second.add(image); /* 二つの画面を繋ぐ window + navigationGroup */ var base = Ti.UI.createWindow(); var nav = Ti.UI.iPhone.createNavigationGroup({ window : first }); base.add(nav); base.open(); /* ボタンにイベントを登録 */ button. addEventListener ('click', function () { nav.open(second); });
  • 21. UI 実装の進め方 Ti.UI.createWindow() や Ti.UI.createButton() で Window や View といったパーツを作る window.add(button) などでくっつける フォントの大きさなどは CSS のように指定 動きが必要な箇所は addEventListener() でイベントハンドラを登録 いかにも JavaScript
  • 22. できあがっったアプリの使用感 ( 実機では触れていませんが ) ちゃんとネイティブ 期待通り、ぬるりと動く JavaScript だから、という妥協した動きにはならない
  • 24. CoverFlowView var win = Ti.UI.currentWindow; var view = Ti.UI. createCoverFlowView ({ images: [ '../images/01.jpg', '../images/02.jpg', '../images/03.jpg', '../images/04.jpg', '../images/05.jpg' ], backgroundColor: '#000' }); win.add(view);
  • 25. ネットワーク呼び出しは XHR 同様 var http = Titanium. Network.createHTTPClient (); http.open(    'GET',    'http://search.twitter.com/search.json?q=%23titanium' ); http.onload = function(){ data = JSON.parse( this.responseText ); }; http.send(); /* TCPSocket や BonjourService などもあります */
  • 27. Titanium.Geolocation var mapview = Ti.Map.createView({ mapType : Ti.Map.STANDARD_TYPE, animate : true, regionFit : true, userLocation: true }); Titanium.Geolocation.getCurrentPosition (function (e) { mapview.setLocation( { latitude : e.coords.latitude, longitude : e.coords.longitude, latitudeDelta : 0.01, longitudeDelta: 0.0, animate : true } ); }
  • 28. Titanium API いろいろ Ti.Geolocation.getCurrentPosition() Ti.Media.showCamera() Ti.Media.createVideoPlayer() Ti.Platform.batteryState Ti.DataBase.open() Ti.App.Properties.setString() Ti.FileSystem.getFile() Ti.Network.createHTTPClient() Ti.Gesture.addEventListener('shake', ...) Ti.Facebook.publishStream() Ti.UI.iPhone.appBadge = 20 ...
  • 29. Titanium API ざっくり 基本的な UI はほぼサポート ( と思います ) CoverFlow 、地図、 WebView もあり カメラ , 位置情報 , 加速度センサなどハードウェアアクセス OK データは sqlite 、 Properties に保存可能 Facebook や YQL を扱う API などもある API は拡張モジュールを書くと自分で追加できる ( っぽい )
  • 30. 作ったもの (1):Flickr Viewer Flickr の JSON を ScrollableView で表示するだけで OK コードは 100 行未満 (http://github.com/SimpleFlickr) 左右フリックで写真が切り替わります
  • 31. /* Flickr から HTTPClient で JSON とってきて・・・ */ var win = Titanium.UI.currentWindow; var loader = Titanium.Network.createHTTPClient(); loader.open('GET', this.url); loader.onload = function() {    Ti.API.info(this.responseText);    var data = JSON.parse(this.responseText);    win.add( Flickr.createPhotoView(data) ); }; loader.send() /* ImageView 作って ScrollabeView に流し込む ・・・ */ var views = data.items.map(function (item) { ・・・    var imageView = Titanium.UI.createImageView({      image: item.media.m, ・・・    });    baseView.add(imageView);    baseView.add(title);    baseView.add(date);           return baseView; });          var scrollable = Titanium.UI.createScrollableView({ views: views });
  • 33. 作ったもの (2): RSS リーダー Perl サーバで RSS -> JSON, HTTPClient でアクセス Facebook Connect, はてなブックマーク連携機能も 250 行くらい (http://github.com/naoya/RSSV) ここは WebView
  • 34. var loader = Ti.Network.createHTTPClient(); /* ローカルに立てたサーバーが RSS を JSON に変換してくれるので、それを取得 */ loader.open('GET', 'http://localhost:3000/feed?url=' + row.url); loader.onload = function () {   var data = JSON.parse(this.responseText); /* 読み取った JSON を TableView で整形 */   var table = Titanium.UI.createTableView({ data : data.map(createItemRow) });    win.add(table); /* TableView がクリックされたら WebView  で開く */    table.addEventListener('click', function(e) {      openWebWindow(data[e.index]);    }); };
  • 35. 雑感など 典型的な iPhone アプリなら十分開発できる GUI プログラミングと JavaScript のイベントドリブンスタイルの相性が良い マルチプラットフォームとは言え、 if 文での切り分けはそれなりに必要 UI パーツの違い、解像度の違い さすがに動きのあるゲームはちょっと難しい ? ( いえ、わかりません )
  • 36. そのほか AppStore 申請は OK らしい 過去に話題に上ったことはあるそう ビルド後のファイルに .xcodeproj があるので、 Xcode から読み込んでいじることができる Xib2Js を使うと InterfaceBuilder で作ったモックを JavaScript に変換できる Titanium API でできないことは、 Objective-C や Java で拡張モジュールを書いてしまえば良い ?
  • 37. Titanium で開発していくには @donayama さん日本語 wiki は必見 http://code.google.com/p/titanium-mobile-doc-ja/ PDF 印刷して一通り読めば大まかなところはすぐわかる サンプルがあって公式ドキュメントより親切 公式ドキュメントより、 KitchenSink を見よう オフィシャルのカタログ実装 エミュレータで動かす -> やりたいこと見つける -> git grep -> コード見る API リファレンスは http://tidocs.com/mobile/latest/ に SDoc あり (by @masuidrive) 公式のより検索しやすい
  • 38. ご清聴ありがとうございました 【 PR 】 採用してます ! google:GREE+ 採用 iPhone/Android プロジェクト、あります