新年あけましておめでとうございます。
本年も宜しくお願い致します。
前置きも早々に昨年のTips&Topics総集編をお送りします。
ざっくりな分類ですが、どうぞ。
入門記事
最新版のTitanium StudioおよびプラットフォームSDK(さらにはGenymotionまで)のインストール手順。
@ryugoo_さんによるTitaniumチュートリアルドキュメント"小さな Titanium Mobile の読み物"がバージョンアップしました。
@k0sukeyさんによる連載。
@h5y1m141さんがTitanium学習のためのドキュメント公開を始められました。
@h5y1m141さんがAlloyに取りかかられました。立ち上がり時のリソースまとめとしてもベンリですね。
現時点での入門記事リンクが系統だってまとめられています。
FokkeさんがTCD/TCE試験対策用のチュートリアルを公開されました。
公式ドキュメント、APIリファレンス、そしてgithubのexampleを参考にされて初アプリ開発されたとのこと。
Titaniumもくもく会 #18 : ATNDで発表された@ryugoo_さんによるスライドが公開されています。
UI
CSSのボックスモデルでTitanium VIのViewレイアウトを学ぶという解説記事
画面下部からにゅっとスライドインするViewを実現するためのアプローチがまとめられています。やはりAndroidのアニメーションはあれこれ罠が多いようで…。

スケール変換の再実装。標準の実装が安易すぎるんですよね(^^;)
@k0sukeyさんをして「ここまでListViewが詳しく書かれているの初めてじゃない?」と言わしめたドキュメント。必見です。
ti.ux.*
として多数用意されたAlloy Widgetを組み合わせてUIを構築するテンプレート集。
ドキュメントはまだ完備されていないようですが、FontAwesomeをふんだんに使って、統一感のあるデザインができそうですね。
jaraen/Ti.UX.TemplatesがGitHubレポジトリになります。
TableViewで開発していた資産をListViewに移行する際に役立ちそうです。
吹き出しを任意の位置に表示させるためのtips。

Titanium UIのラッパーオブジェクトを生成するti.jsの解説記事。
よくある検索履歴的な表示を行うためのチュートリアル記事。
やってること自体は単純なので、ストア先をACSからローカルのデータベースに置き換えることも容易でしょう。
こんなUIを実現するためのtips。

SearchBarの入力内容の自動補完を実現するサンプル。

タブ数が多くてもスライド切り替わりをするWiget。

100msのディレイを仕掛けておいてWindowのオープンを優先させるというtips。
TiFlatUIKitをAlloyで活用するtips
WebViewを使うことにより既存のWeb向けのライブラリを活用しやすいという好例。
Alloyを使わずにCommonJSモジュールでViewの管理をされているコード例
postlayoutイベントの無限ループを回避するためのある種のバッドノウハウ。
Alloy
Alloy Widgetの子要素の取り扱い方法について。
alertを上書きして、titleやボタン名を指定できるようにするハック。confirmについてはすでにAlloyのビルドイン関数でそのようになっているみたいですね。
Alloy移行連載の続き。
AlloyでWidgetとして作るまでもない簡易的な表示ならこういう手段もあるんですね。
ちなみにDemonstrate CollapsableView Tag in Alloy.という同様のアプローチをしているサンプルも作られています。
ブラウザ上でAlloyのViewXMLファイルを作成したら、ネイティブアプリ上で表示確認できるというサービスのようです。
SASS風にAlloyのTSSファイルを作成できるツールSTSSの解説記事。
こういうノウハウが集まるとブラッシュアップの速度も早まりそうですね。
alloy-smelterについて作者である@k0sukeyさんが解説されている記事。
platformHeight
の固定値判定によって判断しています。
価値に比例してなのか、高い黒魔術感も否めません(^^;
RESTAPIアダプタを使ったAlloyアプリ構築チュートリアル。
Alloy.Globals
に関数をぶら下げてtss内で処理をさせるというtips。
タイトルに書かれているようにREST APIをAlloyから叩く一連の手順が分かりやすく解説されています。
Alloyで使用できるtips・ツール50連発なスライドです。
ドキュメントに書いてないものはソースを見るしかないというストレートな解決(^^;
以前のGitHub Watchでも紹介したTitaniumStudio風のView/Controller/TSSの切替プラグインの解説記事。
共通部分と個別実装部に分かれている量産型アプリの構築手法についての解説
マルチプラットフォーム対応
複数の解像度への対応をする(1機種オンリーとかじゃない限り、ほぼ100%の要件かと思いますが)場合のTitaniumのView実装にあたって、背景に画像を貼り込まない(適切な準備をしないと自動ストレッチされてしまうため)、絶対値指定をしない(パーセンテージ指定をすべし)、Viewのネストによってレイアウトをする、向きを固定化を前提にしない…といった注意点や指針を挙げて、その解説を行っています。
プラットフォーム間でのAPIやUI差を埋めるための方策としてTitanium APIの上にもう一枚ラッパーを噛ませるというお話。
iOS/Androidの両対応するとどうしても挙動差に悩まされますね。
ただbase64encodeの挙動は罠すぎますね…。
IcoMoonというアイコンフォントジェネレータを用いて、アプリ用のTrueTypeフォントを生成するというチュートリアル。
マルチプラットフォーム、マルチデバイスというのはこれだけのバリエーションのリソース準備することになります。
元ファイルを準備すれば各種形式に自動変換してくれるTiConsなどのサービスもあるので、その辺の手間を軽減したいのならば有効活用したいところです。
こういうサービスやツールもあったりします。TiCons - Generate all icon & splash screens for your Titanium app from just 2 or 3 files!・FokkeZB/TiCons
Appcleratorの公式ブログよりNavigationWindowとActionBarを
それぞれのプラットフォームで活用するためのテンプレートの解説。
iOSなTips
iOSネイティブモジュールを開発するための手順開発。ARCを有効にするための手順もあります。
TiHighlightLabelに関する作者による解説記事。
複数のiOS SDKを共存させる方法。
SDK 3.4.0にしてからiOS7向けのTi.Mapを使うときはモジュールバージョン2.0.2の選択するのが良いようです。
iOS8以降とそれ以前のプッシュ通知を両対応させるためのサンプルコード。
AndroidなTips
Android全般の話ですが、ビルドに使用するJDKとAPK署名を生成するJDKのバージョンが異なると、"Package file was not signed correctly"というエラーメッセージが出てしまうようです。
AndroidでTi.Blob.imageAsThumbnail()
したときに回転方向がおかしくなる問題があるようで、imagefactoryモジュールを使って解決しています。
SDK内のbuilder.py
をいじってタイトルのことを実現します。
Ti 3.2からデフォルトのAndroid Activityの持ち方が変わったのですが、これに伴うアプリケーション全体としてのpause
・resume
がそれまでの挙動と変わってしまいます(従来型の挙動をするオプションをONにしない限り)。これに対処するためにbenbahrenburg/benCoding.Android.Toolsを使おうという記事。
AndroidでのIntentの取り扱い方についてのチュートリアル
sdcard/{appid}/deploy.json
を削除したら解決するかもしれないというtips。ハマりどころ集に追加しておかないとですね…。
Ti.UtteranceのAndroid対応について開発者のBen Bahrenburgさんの解説記事。
プラットフォーム別アセットの置き場所等も含めて、ドキュメント類はまだまだTitanium Classic(というかResources配下に直接記述すること)が前提になっているので、こういう混乱を招きがちですね…。
AndroidにおけるTabGroupとActionBarメニューについての解説。
AndroidでActionBarの表示を消すための方法。
この辺の自動計算がウマいことできればいいんですが、結局こねくり回さないと行けない感じですねぇ。
Android Action Bar Style Generatorを使って外観カスタマイズするtips
こういった大文字小文字問題はドキュメントにも明示されたりされてなかったりするのでハマると大変ですよね…。
Androidの通知を出すときにTitanium SDKで標準サポートされていないGravity
プロパティをむりやり追加するというtips。
Androidでバックグラウンドサービスを動作させるための手順を紹介されています。
gcm.jsを用いたPush通知チュートリアル
Androidネイティブ内でのライフサイクルを整理するのにも。
CLIがらみ
Titanium 3.2 deep diveな記事。CLI周りなどは系統だった説明がイマイチ無い中での大転換になったので、知らないと確実にハマりそうです。
zshのプロンプトに開発中のTiSDKバージョンを表示するというtips+αの紹介
CLIだとビルドなどの処理が終わったことをOS Xの通知機能で音とメッセージによる完了通知ができるよというTips
CLIの情報表示オプションを使って、トラブル解決に繋げようというtips記事。
Tony LukasavageさんのGistにあがっていたシェルスクリプト。
定型化されたTitanium CLIのコマンドライン引数の組み合わせを端的に指定できるようにするラッパーであるTiNyがバージョンアップして、CLI Pluginとして産まれ変わりました。
引数の組み合わせをレシピとして保存しておき、それを呼び出せるようです。ベンリかも。
いつも使うコマンドエイリアスを登録しておいてCLI実行のタイプコストを減らそうというtips
Titanium CLIのコマンドラッパーであるTiNyがバージョンアップされました。
詳細はGitHubのReadMeを見て頂ければと思いますが、
ti b
とすればbuildが出来たりとタイプ数を極力減らすアプローチが取られており開発効率は上がりそうです。
TiShadow(的ツール)
TiShadowサーバーの立ち上げ(tishadow server
)、対象プロジェクトの起動(tishadow appify
)、コード変更監視(tishadow @ run --update
)をまとめてやってくれるというTiShadow Express機能が追加されました。
TiShadowには以前よりREPL機能がありましたけれども、それを標準入力からのパイプで引き渡せるようになるためのオプション--pipe
が追加されたようで、そのデモの動画になります。
ちょっとしたコードの試行錯誤・挙動確認といった目的に活躍しそうですね。
ほんとTiShadowはベンリですよね。
ちなみに複数台を並行してやらない場合はti build
時に--shadow
オプションを付けておくとわざわざサーバを(意識的に)立てなくてもいいので、お手軽な第一歩になるかと思います。
TiShadow ExpressについてはMobile Touch版の特集でも取り上げたりしてるんですが、検索に確かに引っかかりませんね(^^;)
ほんとExpressはベンリなので皆さん是非お使いください。
iPhoneシミュレータのバージョンをiPhone 4インチ 64-bitにしないとシミュレータ環境で動作しないみたいです。
TiShadowでネイティブモジュールを使うための手順。
TiShadow + CoffeeScript + gulpの開発環境解説。
Sublime Text + CLI + TiShadow + TiCons + GitTio + GenyMotionな開発環境のお話。
書かれている通りまだnpmに最新版がアップされていないのでご注意を。
TiShadowでオブジェクトインスペクションをしてREPL叩かなくても、プロパティの即時変更ができるというデモ。
すごいなあ。
Titanium StudioでTiShadowを使えるようにするプラグイン。
Yet Another TiShadow的なツールがApperson Labから公開されました。試用レポートはSpotlightにてしていますが、まだまだ発展途上のイメージがあります。
Matt AppersonさんによるRapidDevの解説動画。
開発環境がらみ
TernでTitaniumコード補完を行う。
GitHub上に公開されているTiモジュールとAlloy Widgetをまとめた情報サイトが立ち上がりました。
DashでTitanium APIリファレンスを表示している事例紹介。DashDoc pluginを使えばSublime Textでリファンレス連携が出来るようです。
Eclipseベースの旧Aptana Studioから転じてのTitanium Studioということもあり、
日本語化などのノウハウも流用できるのですが、不具合や意思疎通の齟齬(特にQ&Aなどで)の発生原因でもあるので、
ご注意あれ。
Microsoft謹製のAltJSであるTypeScriptを利用したTitanium開発についてのまとめ。
3.3.0GA SDKでフォルダ構成が変わったためbuild.py
を実行する際にパーミッションエラーが出る場合はchmod
でパーミッション変更する必要があるようです。
クリーン環境に最新版SDKバージョンを入れると動かないという初心者殺しのパターンですね…。なかなかこの手の情報は出てこないのでありがたいですね。
tiコマンドでテンプレート指定できますが、自分でカスタム版を作るにはこうすれば良かったんですね。
「いつもの手順」を省力化させるために活用したいところです。
オフラインでもTitanium SDK/Alloyのドキュメントを見れるようにしたツールが公開されています。
コミュニティベースで公開されているTi開発支援の各種ツールの紹介記事。
senchalabs/jsduckならびにtitanium-jsduckを活用したドキュメンテーション方法のチュートリアル。
Alloyのビルド時にBowerで管理しているライブラリが展開されるようになったり。
デバイステスト
Apple版TestFlightの使い方。
Yet Another TestFlightの模索がいろいろされていますが、InstallrというiOS専用のデプロイサイトの紹介がされています。
KLabが公開したEMLauncherに関してはこういう記事が上がってるので、そちらも参照したいところです。→
EMLauncher - 速攻レビュー!Testflight代替なiOS/Androidアプリ配信プラットフォーム - モバイル/タブレット向けオープンソース紹介 - Mobile Touch
かつてのTestFlightでは同バージョンナンバーでも更新がかかったのですが、Apple版はそうではないのですね。
その辺のケアをするためのtipsまとめ。
メモリ管理
XCode Instrumentsを用いてメモリリークの検出を行おうという記事
Titaniumにおけるメモリ管理について色々な切り口でまとめた読み応えのある解説記事。
忘れがちな後処理によるメモリリーク対策について。
removeのし忘れなどでメモリリークの原因になりがちであるグローバルなTi.App
空間のイベントリスナーの追加をするのではなく、
コールバックを利用したりAlloy(というよりもBackbone)のon
とtrigger
を使いましょうという記事。
余計な変数(オブジェクト参照)を作らないこと、
コントローラのクローズ時にメモリリークの材料を根こそぎ刈り取るように動作するよう仕掛けておく、
という2つのtipsが紹介されています。なるほど。
デバッギング
ブラウザベースでテストするための環境としてAndroid向けはManymo、iOS向けはIncrease App Downloads with Interactive Previews - App.ioが紹介されています。
クラッシュログを取得するためのdbankier/TiLogCatcherとこれを使うためのCommonJSのUTiL/reporterの使用手順の解説。

テスティング
MochaのTitanium向けポーティング
ti-mochaを使ったテスティングのチュートリアル。
ACS、Node.ACSがらみ
ローカルでNode.ACSを動かして、ACSのデータをぶっこ抜く
Node.ACSのHello World記事。
ACS経由でメール送信をするチュートリアル。
REST APIの結果をNode.ACS上のカスタム関数を一旦経由し、必要な情報だけにフィルタリングして返すことにより、ローカル側の省力化を図ろうというtips。
時間的なオーバーヘッドとペイロードのトレードオフですが(Node.ACSを使うかどうかは別にして)検討の価値はありそうです。
ACSでプッシュ通知をするための詳細なチュートリアル。iOS/Android(GCM)ごとの設定手順までしっかり書かれています。
AlloyとACSを活用したTiアプリ開発本がリリースされています。
ゲーム
Titaniumを用いてFlappy Birdクローンを作るというチュートリアル記事。
Platinoエンジン上でロングタッチやダブルタップを認識させるための(タイマーとカウンタを使った)方法。
初心者向けのPlatinoサンプルコード集。ダウンロードすると4Stepに分かれたソースが入っています。
tmlib.jsをTitaniumから使ってゲーム開発しようという記事。
モジュール活用
Titanium Studioからネイティブモジュールをインストールする方法について画像を交えた解説をした記事。
OpenCVモジュールならびにサンプルプログラムを公開されています。
有償のチャート表示ライブラリ ShinobiControls をTiから利用するモジュール
benbahrenburg/Utteranceを活用した事例。
カスタマイズした地図を表示するサービスMapboxを活用できるiOSネイティブモジュールtitanium-mapboxを使うチュートリアル。
現状のTiSDK標準Facebookモジュールでは取り込まれていないログイン方法とグラフAPIについて対応させるための新しいモジュールの解説。
モジュール側の修正が入りそうですが、こういうのも困りものですね。
iOS/Android両対応の"LINEで送る"を実装する方法。
ti.map
モジュールに機能追加を行うネタ2本。
GitHub Watchでも実はそのモジュール紹介してるんですよね…(^^;
Scanditを使ったバーコードアプリ実装例。
ClassicなコードをAlloy化るのにあたり、解析サービスをGoogleAnayticsからNewRelicに変えられるそうです。
ゆっくりこと音声合成ソフトAquesTalk2をTitaniumから使うためのチュートリアル
Webサービス活用
PubNubというリアルタイム通信サービスを使ってチャット実装を行おうというチュートリアル。
メール送信サービスSendGridを使用するチュートリアル。
Microsoft Azureのプッシュ通知機能をTitaniumから使うためのチュートリアル。
これはいろいろ応用できそうですね。
iTunes Storeから情報取得して比較するための実装例。
node.jsでWordPressデータベースを叩くようにして、連携アプリを作ろうというネタ
その他
Tipsというよりかはバッドノウハウの部類だと思うのですが、ArrayをPOSTするときにはこんな手間をかけないといけないんですね…。
kriskowal/qを用いた非同期処理の実践例。
これまでは実行時にTi.Geolocation.purpose
で評価する形でしたが、iOS 8から位置情報を使用する場合にはInfo.plist
に
NSLocationAlwaysUsageDescription
もしくはNSLocationWhenInUseUsageDescription
を追加する必要があるのですが、それに関する記事。
コネタというには重い話題が多いような…。ちなみに最後に紹介されている
TiTextNormalizerのiOS対応版TITextNormalizer-for-iOSも後日公開されています。
なかなか取りあげられることの少ないMobile Webについての記事。
カンファレンスまとめ
米国時間の5月10日から11日に掛けて開催されたtiConf US 2014のまとめがされています。
ちなみに中の人のまとめとしてはFokkeさんがLast minute tiConf US | Fokke Zandbergenとしてまとめられています。
本日7月19日にバンガロールで開催されたtiConf Indiaのまとめです。
6月28日から二日間で開催された tiConf EU 2014のまとめ記事です。
アトランタで先週末に開催されたイベント内でのセッション一覧がTi.Connect roundup | TiDevにてまとめられています。
10月25日にシンガポールで開催されたtiConf Singapore 2014のまとめです。