Umi Uyuraのブログ

プログラミング関連の作業ログ

Titanium CLIでのビルドをサポートするTiNy(tn) 2.x版

はじめに

最近、Titaniumの周辺ツール的なところで2本ほどQiitaに投稿していました。

その流れで、このエントリも本当はQiitaに投稿しようとしていたものなのですが、紹介しようとしたツールが、まさに今日メジャーバージョンアップしてしまい…若干使い方なども変わるようなので、そのままでは使えなくなってしまいました。

しかし、せっかくまとめたので、とりあえず自分のブログにアップしておきます。

以下は、TiNy(tn) 2.2.3をベースに書いたものです。

現時点で最新版は3.0.2で、2.x系と機能的にはほとんど変わっていないものの、先日発表された新しいプラットフォームのAppcelerator CLIに対応させるために大幅に書き直され、コマンドの体系が若干変わっています。

詳しくは、 作者のFokke氏のブログGitHubのREADME などを見てみてください。

いずれ改めて、3.x系についてまとめたいと思います。


TiNy CLI(tn)は、Titanium CLIで最も使用する頻度が高いと思われる titanium build を使いやすくするためのツールです。

FokkeZB/tn

例えば、単純にiOSアプリをシミュレータで実行する際には以下のように実行できますが、

$ ti build --platform ios           # ti は titanium の短縮形

TiNyを導入することで、これを

$ ti ios

のように実行することができるようになります。

頻繁に使うコマンドのタイプ数が減らすことができますし、よく使うパラメータを短縮形として登録しておき、それを組み合わせて使うこともできます。

シェルのaliasなどで似たようなことはできますが、数が多くなってくると管理が大変だと思いますので、そういった場合に使ってみても良いかと思います。

※本エントリの内容はTitanium 3.4.xおよびTiNy 2.2.3をベースに書いています。

導入方法

$ [sudo] npm install -g tn --unsafe-perm

※注意事項※

プロジェクトの名前は TiNy CLI のようですが、npmに登録されているパッケージ名は tn となります。

また、npmには tiny という別のパッケージも登録されているので、間違えないように気をつけてください。

基本的な使い方

build の省略

TiNyを導入すると、まずは titanium build を実行する際に build を付ける必要がなくなります。

具体的には build 以外のコマンドが指定されていない場合は、すべて build が指定されたものとして解釈し、実行されます。

$ ti ios        # titanium build --platform ios
$ ti clean      # 通常通り、 titaium clean が実行される

recipeの実行

最初にあげた例で ti ios と実行していますが、ここで指定している ios はrecipeと呼ばれているパラメータの一つで、 --platform iosエイリアスになっています。

こういった titanium コマンドのオプションの短縮形がrecipeとして組み込まれています。

これらのrecipeと、既存の titanium コマンドのオプションを組み合わせて使うことができます。

$ ti android                    # titanium build --platform android
$ ti retina --sim-type ipad     # titanium build --retina --platform ios --sim-type ipad

組み込みrecipeの一覧は GitHubのREADME に掲載されている他、 tn コマンドで

$ tn list

と実行することでも確認できます。(これは後述するカスタムrecipeも含んだ一覧が出力されます)

複数のrecipeを組み合わせる

複数のrecipeを組み合わせる場合、2つ目以降の引数でのrecipe指定には -- を付ける必要があります。

例えば、 --platform iosエイリアスである ios と、 --target deviceエイリアスである device を同時に使いたい場合は、以下のように実行します。

$ ti ios --device               # titanium build --platform ios --target device

カスタムrecipe

先に述べたとおり、recipeは自分で作ることもできます。

カスタムrecipeの作り方

recipeの作成は tn save コマンドで行います。

$ tn save <recipe名> <展開するコマンド>

例えば、AppStoreリリース用のコマンドとして、プロビジョニングプロファイル( --pp-uuid )とデベロッパ名( --distribution-name )をrecipeとして登録しておくことで、

$ tn save dist-as --platform ios --target dist-appstore --pp-uuid XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX --distribution-name "Titanium Taro  (XXXXXXXXXX)"

以下のコマンドでリリース用のビルドを実行することができます。

$ ti dist-as

また他にも、カスタムrecipeに対して以下の様な操作を行うことができます。

$ tn save ios --target android  # 既存recipeの ios を上書き
$ tn rename ios confusing       # ios というrecipeを confusing に変更
$ tn remove confusing           # confusing というrecipeを削除
$ tn reset                      # カスタムrecipeをすべて削除する

設定ファイル

作成したカスタムrecipeは、Macであれば ~/.tn.json に保存されているので、これを管理すれば、新しい環境でも同じレシピを使いまわすことができそうです。

また、カスタムrecipeを作成する際に tn project save ... といったように project を付けることで、設定ファイル tn.json がカレントディレクトリ内に作成されるので、プロジェクト単位に用意するといった使い方もできます。

カスタムrecipeの例

デベロッパ名、プロビジョニングプロファイルの指定

iOSアプリをデバイス向けにビルドする際には、プロビジョニングプロファイルとデベロッパ証明書による署名が必要となります。

Titanium CLIではビルド実行時に対話的に選択することができますが、毎回選ぶのも少し面倒ですので、あらかじめ使用するデベロッパ名やプロビジョニングプロファイルの組み合わせをrecipe化しておきます。

# recipe登録
$ tn save dev-build --platform ios --target device --pp-uuid XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX --distribution-name "Titanium Taro  (XXXXXXXXXX)"

# 指定したプロビジョニングプロファイルとデベロッパ証明書を使ってビルド
$ ti dev-build

GenymotionのVirtual Device指定

Android開発時には標準のエミュレータではなく、Genymotionを使うこともあるかと思いますが、何も考えずにVirtual Deviceを作成すると、"Google Nexus 5 - 4.4.4 - API 19 - 1080x1920" のような名前になります。

Titanium CLIでは、Genymotion連携が有効になっていれば、 --device-id で上記の名前を指定してエミュレータで実行することができますが、いかんせん長すぎるので、これもrecipe化しておくと起動が簡単になります。

# recipe登録
$ tn save nexus5 --platform android --device-id "Google Nexus 5 - 4.4.4 - API 19 - 1080x1920"

# Genymotionエミュレータでアプリを実行
$ ti nexus5

参考