LoginSignup
7
6

More than 5 years have passed since last update.

MakeTiの使い方

Last updated at Posted at 2013-01-10

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プロジェクト一式を入手します。

appersonlabs/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に置いているため、以下のように変更しています。

Makefile
    # 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を直接修正しても良いと思います)

titanium.sh
    # 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'    # ←この行を削除
Makefile
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>は不要です。
また、カンマ区切りで複数のリストを指定することもできるようです。

tiapp.xml
    <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を使って配布する

どなたか事例がありましたら・・・

参考情報

大変参考にさせて頂きました。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6