MakeTiとは?
MakeTiとは、コマンドラインからTitaniumプロジェクトのビルド・実行及び実機への転送を行うことができるツールです。
私は普段Emacsでコードを書いているので、Titanium Studioを立ちあげなくてもEmacs上からコマンドラインを使ってビルド〜実機インストールまで行えるこのツールを利用しています。
既にTitanium CLIやAlloyといったツール/フレームワークでもコマンドラインから実行できるようになっていますが、iPhoneアプリの実機転送についてはまだサポートされていないようだったのと、最近チェックしてみたらいつの間にかAd Hocビルドに対応していたりしていたので、まだまだMakeTiの需要はあるかもということで、改めて使い方を整理してみました。
- 2013/1/10時点の情報です。
- Titanium Studio/SDKを使ったiPhoneアプリ/Androidアプリの開発環境(実機転送ができる状況)は整っている前提です。
- 私の現在の環境がMacのため、Macでの使い方になっています。
MakeTiできる主なこと
- iOSシミュレータ/Androidエミュレータでの実行
- iOS/Android実機への転送
- iOSアプリのAd Hocビルド
- TestFlight/HockeyKitを利用した配布
※今後の予定として、App Store/Google Playへのデプロイも計画されているようなので、期待しています。
チートシート
詳しい準備やコマンドの説明は後述するとし、主要な使い方を羅列しておきます。
コマンド | 内容 |
---|---|
$ make clean | 中間ファイルを削除する |
$ make run | iPhoneシミュレータで実行する |
$ make run iphone=6.0 | iOSバージョンを指定してiPhoneシミュレータで実行する |
$ make run platform=ipad | iPadシミュレータで実行する |
$ make deploy [action=install] cert=1 profile_file=development | 1番の証明書とdevelopment.mobileprovisionを使って、iPhone/iPadアプリをiTunes経由で転送する |
$ make deploy action=adhoc cert=2 profile_file=adhoc | 2番の証明書とadhoc.mobileprovisionを使って、iPhone/iPadアプリのAd Hoc配布用ビルドを行う |
$ make deploy [action=install] cert=1 profile_file=development testflight=true notes="release notes" | iPhone/iPadアプリをTestFlightを使って配布する |
$ make clean && make run platform=android | 起動しているAndroidエミュレータで実行する |
$ make clean && make deploy platform=android | Androidの実機へ転送する |
$ make clean && make deploy platform=android apkonly=true | AndroidアプリのAPK生成のみを行う |
事前準備
MakeTi
MakeTiを入手する
まずは、GitHubからMakeTiプロジェクト一式を入手します。
MakeTiをプロジェクトで使う準備をする
MakeTiプロジェクトには、最近話題の恋に落ちるエディタ用のプラグインなども含まれていますが、単純にコマンドラインから利用する場合は、それらのうち以下のファイルを利用します。
- Makefile
- bin/titanium.sh
上記2ファイルを、Titaniumプロジェクトのルートディレクトリ直下にコピーします。
iOS用の準備
プロビジョニングプロファイルを用意する
プロジェクト直下にcerts
ディレクトリを作成して、必要なプロビジョニングプロファイルを配置します。
実機に転送する場合は、最低でも開発用プロビジョニングプロファイルが必要です。
一度iPhoneシミュレータを起動しておく
Xcode/iPhoneシミュレータを一度も起動したことがない状態(またはXcodeをアップデートした直後など)で実行すると、iPhoneシミュレータが起動しない(起動してもすぐに終了してしまう)場合があるようでした。
事前にサンプルプロジェクトなどを使ってビルド/実行をしておくと良いかもしれません。
Android用の準備
Android SDKの設定を行う
Makefile内のANDROID_SDK_PATH
を自分の環境に合わせて変更します。
私の場合、Android SDKを~/Library/android-sdk-macosx
に置いているため、以下のように変更しています。
# This is the ONLY option you should / need to configure
ANDROID_SDK_PATH='~/Library/android-sdk-macosx'
ANDROID_SDK_PATHの注意点
上記の設定方法が本来意図しているものだと思うのですが、現状のMakeTiではMakefileとtitanium.sh両方に上記変数が記述されているため、実際にはMakefileだけを修正しても正常に動きません。
(titanium.sh内で上書きされているため)
そこで私は、titanium.sh内の記述を削除して、Makefileの変数を使用するように修正したものを使っています。
(titanium.sh内のANDROID_SDK_PATHを直接修正しても良いと思います)
# Android settings
if [ "${android}" == "" ]; then
android="titanium_2_WVGA854"
fi
TI_ANDROID_DIR="${TI_ASSETS_DIR}/android"
TI_ANDROID_BUILD="${TI_ANDROID_DIR}/builder.py"
ANDROID_SDK_PATH='~/Android' # ←この行を削除
deploy:
@if [ "${DEVICE_TYPE}" == "" ]; then\
echo "No platform selected... building for iphone.";\
fi
@echo "Building with Titanium... as ${BUILD_TYPE}"
@mkdir -p '${PROJECT_ROOT}/${PROJECT_NAME}/build/iphone/'
@mkdir -p '${PROJECT_ROOT}/${PROJECT_NAME}/build/android/'
PROJECT_ROOT='${PROJECT_ROOT}' DEVICE_TYPE=${DEVICE_TYPE} BUILD_TYPE='device' ANDROID_SDK_PATH='${ANDROID_SDK_PATH}' bash '${MAKETI_DIR}/bin/titanium.sh'
# ↑に ANDROID_SDK_PATH='${ANDROID_SDK_PATH}' を追加
参考までに、上記2ファイルを修正したものをGitHubに載っけてみました。
umi-uyura/MakeTi
使い方
プラットフォーム共通
中間ファイルを削除する
$ make clean
ビルド時に生成した中間ファイルと呼ばれるものを削除します。
Android/iPhoneやiPhone/iPadなど、複数のプラットフォームを対象に開発する場合に、ビルド/実行するプラットフォームを変更する際には一度cleanを行うと良いようです。
特にAndroidの場合はビルドの度にcleanすることが推奨されているようで、以下のように連結して使うと良いようです。
例)
$ make clean && make <run|deploy> platform=android ...
iPhone/iPad
iPhoneシミュレータで実行する
$ make run [iphone=<version>] [platform=<platform name>]
オプション | 説明 |
---|---|
iphone | 実行するiOSのバージョンを指定します。省略した場合、iphone=6.0 になります。(例:iOS 4.3の場合、iphone=4.3 ) |
platform | 実行するプラットフォームを指定します。(iphone/ipad/android、デフォルトはiphone) (例:iPadの場合、platform=ipad ) |
デフォルトのiOSバージョンを変更したい場合は、titanium.sh内の# iPhone settings
というコメント辺りにあるiphone="6.0"
の箇所することでできます。
iTunes経由で転送する
$ make deploy [action=install] cert=<number> [profile_file=<provisioning profile>]
オプション | 説明 |
---|---|
action | デプロイ方式を指定します。(install/adhoc)省略した場合、install となります。 |
cert | 使用する開発者証明書を示す番号を指定します。(例:1番の場合、cert=1 ) |
profile_file | 開発用のプロビジョニングファイルのファイル名を指定します。その際、".mobileprobision"は不要です。省略した場合、development を使います。(例:"development.mobileprovision"の場合、profile_file=development ) |
証明書を指定する番号は、
$ make deploy
と実行すると表示される
*****************************************************************************************************************
Please re-run the build command using a 'cert' flag, with the value set to the index of one of the certs below...
[0] xxxxxxxxxxxxxx (##########)
[1] xxxxxxxxxxxxxx (##########)
[2] xxxxxxxxxxxxxx (##########)
*****************************************************************************************************************
の左端に表示されている番号([0]
など)を指定します。
Ad Hoc配布用のビルドを行う
$ make deploy action=adhoc cert=<number> profile_file=<provisioning profile>
オプション | 説明 |
---|---|
cert | 使用する配布用証明書を示す番号を指定します。(例:2番の場合、cert=2 ) |
profile_file | Ad Hoc配布用のプロビジョニングファイルのファイル名を指定します。その際、".mobileprobision"は不要です。省略した場合、development を使います。(例:"adhoc_distribution.mobileprovision"の場合、profile_file=adhoc_distribution ) |
実行すると、<project root>/CinemaEstate/build/iphone/build/Release-iphoneos/<app name>.ipa
にIPAが生成されています。
証明書を指定する番号は、
$ make deploy action=adhoc
と実行すると確認できます。
Android
Androidエミュレータで実行する
$ make clean && make run platform=android [android=<emulator>]
オプション | 説明 |
---|---|
android | 実行するエミュレータ名(※1)。省略した場合、titanium_2_WVGA854 を使います(※2)。(例:"titanium_8_WVGA854"の場合、android=titanium_8_WVGA854 ) |
※1 Makefileのhelpには"Android API level"と記載されているのですが、実際にはAPIレベルはtiapp.xml内の<tool-api-level>
が使われます。(存在しない場合は、APIレベル8と見なされます)
※2 が、実行しているエミュレータが1台であれば、自動的にそのエミュレータを使ってくれるようです。また私の環境では、androidオプション(エミュレータ名)を指定しても、複数エミュレータが起動していると、error: more than one emulator
というエラーと共にビルドが止まってしまいましたので、まだ未完成のようです。
事前にエミュレータを起動しておく
なお、エミュレータ実行する前に、実行環境となるAndroidエミュレータを起動しておく必要があります。
自分の環境にあるAndroidエミュレータ(AVD)は、
$ android list avd
で調べることができ、
$ emulator -avd <avd name>
で実行することができます。
実機へ転送する
$ make clean && make deploy platform=android
APKの生成のみを行う
$ make clean && make deploy platform=android apkonly=true
実行すると、<project root>/build/android/bin/app.apk
にAPKが生成されています。
Mobile Web
公式には記載されていませんが、プラットフォーム指定でMobile Webも対応していました。
現状は、必要なHTML/CSS/JSなどをビルドするに留まり、出力されたものをWebサーバーなどにコピーして使う感じのようです。
ビルドする
$ make clean && make run platform=web
実行すると、<project root>/build/mobileweb/
に必要なファイル一式が出力されます。
その他、便利な使い方
TestFlightを使って配布する
MakeTiは、開発中のiPhoneアプリをOTA配信するサービスのTestFlightにも対応しており、ビルドと合わせてTestFlightへアップロードすることができます。
事前準備
TestFlightのサイトの以下のURLから、API TokenとTeam Tokenを入手します。
Account Settings内のAPI Token
https://www.testflightapp.com/account/#api
Team Info内のTeam Token
https://www.testflightapp.com/dashboard/team/edit/
また、アップロードと同時に通知メールを配信するには、予め配信対象者のDistribution Listを作成しておく必要があるようです。
以下のURLの右側にある"+ Add Distribution List"ボタンから、配信するメンバーを集めたリストを作成してください。
https://www.testflightapp.com/dashboard/team/
次に、プロジェクト直下のtiapp.xmlに各情報を設定します。
アップロード通知を行わない場合は、<tf_dist>
は不要です。
また、カンマ区切りで複数のリストを指定することもできるようです。
<ti:app>
...
<tf_api><!-- API Tokenを記載 --></tf_api>
<tf_token><!-- Team Tokenを記載 --></tf_token>
<tf_dist><!-- Distribution List Nameを記載 --></tf_dist>
</ti:app>
TestFlightへアップロードする
$ make deploy [action=install] cert=<number> [profile_file=<provisioning profile>] testflight=true [notes=<release notes>]
基本的にはiPhone/iPadのiTunes経由で転送すると同じで、TestFlightへアップロードを指定するパラメータを追加します。
オプション | 説明 |
---|---|
testflight=true | TestFlightへアップロードする指定です。 |
notes | Build InfomationのRelease Notesに記載する内容です。省略した場合、MakeTiが"Build uploaded automatically from MakeTi." というコメントを付けてくれます。 |
HockeyKitを使って配布する
どなたか事例がありましたら・・・
参考情報
大変参考にさせて頂きました。