SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
Titaniumによる
iPhone/Androidアプリ開発
株式会社 はてな
アプリケーションエンジニア
倉井龍太郎
自己紹介
倉井龍太郎 ( id:r_kurain, @kurain )
ブックマーク チーム / アプリケーションエンジニア
ブックマークアプリ( iPhone, iPad )
Monolith (iPhone)
Titanium やばい
夜中に興奮して blog に書いたら人気エントリに
以来、社内の Titanium厨として認識されています
Titanium の為に Android を買いました!
Agenda
iPhone 向けの開発を実演します
Titanium で開発すると何がうれしいのか
Titanium で出来ること、出来ないこと
Titaniumとは?
Javascript で iPhone/Android “ネイティブ”アプリ開発
Titanium Mobile が正式名称
Appcelerator が開発 有償サポート
Apache License v2.0
画像は Titanium Web サイトより引用
Appcelerator
いまやたら熱い会社
Titanium Desktop
$9m の資金調達
Paypal と提携
@masuidrive さんが入社
実演
必要環境
OS X Snow Leopard
XCode + iOS SDK (4.2 対応 )
Android SDK (Android 開発をする場合のみ)
まずは見たいですよね
実演
ディレクトリ構造
Project Name
README/LICENSE/CHANGELOG/tiapp.xml
Resources
iphone
Default.png
appicon.png
生成されるコード
var tabGroup = Titanium.UI.createTabGroup();
var win1 = Titanium.UI.createWindow({
title:'Tab 1',
backgroundColor:'#fff'
});
var tab1 = Titanium.UI.createTab({
icon:'KS_nav_views.png',
title:'Tab 1',
window:win1
});
tabGroup.addTab(tab1);
tabGroup.open();
これでも動く
var win1 = Titanium.UI.createWindow({
title:'Tab 1',
backgroundColor:'#fff'
});
var label = Titanium.UI.createLabel({
text:'Hello World',
});
win1.add(label);
win1.open();
ここまでの利点
コード短いですよね!
エミュレータ起動までが高速(2回目以降)
メモリ管理が不要です
Twitter Client
実例として Twitter Client を作ります
OAuth 認証して
自分のタイムラインが見える
Tweet を投稿できる
画面イメージ
KitchenSink
やりたいことが決まったら Sample を探す
公式デモアプリ
https://github.com/appcelerator/KitchenSink
project import して自分でビルド
デモします
まずは TableView
Tweet の Timeline を表示する
UITableView と同じ
Titanium.UI.TableView に対して
Ti.UI.TableViewRow の配列を渡すだけ
table_view.js
var data = [];
var tableView =
Ti.UI.createTableView(
{
!! data:data
! }
);!
Ti.UI.currentWindow.add(tableView);
JS 指定で createWindow
var win = Titanium.UI.createWindow(
{
title:'Tab 1',
url:'table_view.js',
backgroundColor:'#fff'
}
);
実演
Tweet 取得
まずは認証なしの API から Tweet を取得
Titanium.Network.HTTPClient を使います
HTTP Request
Ti.Network.HTTPClient
var screen_name = 'kurain';
var url = "http://api.twitter.com/1/statuses/
user_timeline.json?screen_name="+screen_name;
var xhr = Ti.Network.createHTTPClient();
xhr.open("GET",url);
xhr.onload = function() {
var tweets =
JSON.parse(this.responseText);
}
xhr.send();
Callback
xhr.onload = function() {
var tweets = JSON.parse(this.responseText);
var data = [];
for(var i=0;i<tweets.length;i++) {
var row = Ti.UI.createTableViewRow();
var label = Ti.UI.createLabel(
{
text: tweets[i].text
}
);
row.add(label);
data.push(row);
}
var tableView = Titanium.UI.createTableView(
{
! ! data:data
! }
);
Titanium.UI.currentWindow.add(tableView);
}
Demo
画像も付けてみる
Twitter Icon を出してみましょう
自分のしか出ませんが
Tweet の左側に margin をとって
画像を差し込みます
Ti.UI.ImageView
var url = tweets[i].user.profile_image_url
var image = Ti.UI.createImageView(
{
image:url,
left: 0,
width: 48,
height: 48
}
);
row.add(image);
デモ
他にも便利機能が色々
Pull to refresh
Dynamic Scrolling
Edit and Move
すべてサンプルがあるので実装が簡単です!
OAuth
APIの殆どは OAuth 認証が必須
oauth-adapter
http://code.google.com/p/oauth-adapter/
Javascript で書かれた OAuth library
認証画面の表示も
OAuth-Adapter
Ti.include('oauth_adapter.js');
var oAuthAdapter = new OAuthAdapter(
'your-consumer-secret',
'your-consumer-key',
'HMAC-SHA1'
);
oAuthAdapter.loadAccessToke('twitter');
OAuth Send
oAuthAdapter.send(
'https://api.twitter.com/1/statuses/
update.json',
[['status', '@kurain Say Hello to
#titanium!']],
'Twitter', //Message Title
'Published.', //Succeed Message
'Not published.' //Failed Message
);
OAuth 認証
if (oAuthAdapter.isAuthorized() == false) {
var receivePin = function() {
oAuthAdapter.getAccessToken(
'https://api.twitter.com/oauth/access_token'
);
oAuthAdapter.saveAccessToken('twitter');
};
oAuthAdapter.showAuthorizeUI(
'https://api.twitter.com/oauth/authorize?' +
oAuthAdapter.getRequestToken(
'https://api.twitter.com/oauth/request_token'
),
receivePin
);
}
OAuth認証の次は
status のアップデートと OAuth 認証をセットにして
関数を作成
ナビゲーションバーの右肩にボタンをつけます
NavigationBar
var r = Titanium.UI.createButton(
{
! systemButton:Titanium.UI.iPhone.SystemButton.ADD
}
);
//addEventListener に注目!!
r.addEventListener('click',function()
{
! tweet('Hoge!');
}
);
Titanium.UI.currentWindow.setRightNavButton(r);
デモ
その他の特徴
Objective-C で Plugin が書けます
TiBar という Barcode 認識ライブラリもあるうようで
す
@masuidrive さんによる AdMob plugin もあります。
出来ないこと
直接の OpenGL の利用は今のところ無理そう
細やかなメモリ管理
close しても解放されなかったり
ガチガチの速度チューニング
で、Androidは?
まだまだこれからな予感
OS依存のコードもある
変更なしに同じコードが動くわけではない
エミュレータ遅い
自分で debugger をつないで実機で試すべき?
参考文献
titanium-mobile-doc-ja
http://code.google.com/p/titanium-mobile-doc-ja/
APIの解説, 入門PDF, Build Rakefile, etc..
id:donayama さん
まとめ
Titanium による簡単アプリ作成をしてみました
ライブラリによりOAuthの利用も可能です
コードの短さ、開発の速さを実演
出来ない事もありますが、なかなか面白いです。
Thank you.

Más contenido relacionado

Similar a TitaniumによるiPhone/Androidアプリ開発

拝啓、プロダクトオーナー様。
拝啓、プロダクトオーナー様。拝啓、プロダクトオーナー様。
拝啓、プロダクトオーナー様。
GuildWorks
 
20130817 Titanium勉強会(午前)
20130817 Titanium勉強会(午前)20130817 Titanium勉強会(午前)
20130817 Titanium勉強会(午前)
Toshiro Yagi
 
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~
Atsushi Harada
 

Similar a TitaniumによるiPhone/Androidアプリ開発 (20)

TitaniumとNode.jsは兄弟
TitaniumとNode.jsは兄弟TitaniumとNode.jsは兄弟
TitaniumとNode.jsは兄弟
 
[社内向け]Titanium勉強会
[社内向け]Titanium勉強会[社内向け]Titanium勉強会
[社内向け]Titanium勉強会
 
Titanium+twilio
Titanium+twilioTitanium+twilio
Titanium+twilio
 
Ti九州
Ti九州Ti九州
Ti九州
 
Titanium
TitaniumTitanium
Titanium
 
iPhone/Android アプリをまとめて省エネ開発する技術
iPhone/Android アプリをまとめて省エネ開発する技術iPhone/Android アプリをまとめて省エネ開発する技術
iPhone/Android アプリをまとめて省エネ開発する技術
 
TitaniumMobile Alloyの紹介
TitaniumMobile Alloyの紹介TitaniumMobile Alloyの紹介
TitaniumMobile Alloyの紹介
 
"たいたにうむ"な1ヶ月間 @Titaniumもくもく会 #16
"たいたにうむ"な1ヶ月間 @Titaniumもくもく会 #16"たいたにうむ"な1ヶ月間 @Titaniumもくもく会 #16
"たいたにうむ"な1ヶ月間 @Titaniumもくもく会 #16
 
About Titanium Mobile
About Titanium MobileAbout Titanium Mobile
About Titanium Mobile
 
拝啓、プロダクトオーナー様。
拝啓、プロダクトオーナー様。拝啓、プロダクトオーナー様。
拝啓、プロダクトオーナー様。
 
拝啓、プロダクトオーナー様。
拝啓、プロダクトオーナー様。拝啓、プロダクトオーナー様。
拝啓、プロダクトオーナー様。
 
2011年5月28日 Android勉強会プレゼン資料
2011年5月28日 Android勉強会プレゼン資料2011年5月28日 Android勉強会プレゼン資料
2011年5月28日 Android勉強会プレゼン資料
 
Switching to Indie iOS Development
Switching to Indie iOS DevelopmentSwitching to Indie iOS Development
Switching to Indie iOS Development
 
20130817 Titanium勉強会(午前)
20130817 Titanium勉強会(午前)20130817 Titanium勉強会(午前)
20130817 Titanium勉強会(午前)
 
いわてTitanium勉強会#1
いわてTitanium勉強会#1いわてTitanium勉強会#1
いわてTitanium勉強会#1
 
Ti.trap
Ti.trapTi.trap
Ti.trap
 
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~
 
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
 
Androidエンジニアになってからの1年間の感想と振り返り
Androidエンジニアになってからの1年間の感想と振り返りAndroidエンジニアになってからの1年間の感想と振り返り
Androidエンジニアになってからの1年間の感想と振り返り
 
Titanium初心者によるAlloy地雷原始末記
Titanium初心者によるAlloy地雷原始末記Titanium初心者によるAlloy地雷原始末記
Titanium初心者によるAlloy地雷原始末記
 

Último

Último (12)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

TitaniumによるiPhone/Androidアプリ開発