2015年10月30日

[iOS] FastlaneでゴニョゴニョしてからEMLauncherにアップする

iOSアプリ開発担当の加島です。最近のリズムゲームアプリはすごいですね!(3Dアニメとか)ただ、私は現実のコインを使わないことにしています。今のところ。
さて、今回は巷で話題(となってから少し時間が経ちましたがここ最近僕の中で話題)のFastlaneを使ってみました。基本的な使い方は公式ガイドである以下をご参照ください。

iOSアプリの継続的デリバリーに便利なfastlaneのご紹介 - Qiita
http://qiita.com/gin0606/items/162d756dfda7b84e97d4

iOSアプリのリリースフロー自動化ツールfastlaneのmeetupに通訳で参加しました - Mercari Engineering
http://tech.mercari.com/entry/2015/07/13/143000

このFastlaneのビルドツールであるgymですが、直接ビルド設定を指定することができるようになっています。例えばlane内で

gym(
scheme: 'Dev',
configuration: 'Debug',
)

と指定すれば、DevSchemeのDebugConfigurationでビルドしてくれます!

以下、奮闘の記録です。

いちいち特定のビルド用のlaneを作るのは面倒!

そんな時は、

lane :build do |options|
scheme = options[:scheme]
config = options[:config]
gym(
scheme: scheme,
configuration: config,
)
end

こんな感じにすれば、

$ fastlane build scheme:'Dev' config:'Debug'

で動いてくれます。
151023_aaa_build.png

一気に複数の設定でビルドしたい!

そんな時は、

lane :buildAll do
['Dev', 'InHouse', 'AppStore'].each { |scheme|
['Debug', 'Staging', 'Release'].each { |config|
build(
scheme: scheme,
config: config,
)
}
}
end
$ fastlane buildAll

こんな感じで動いてくれます。
151023_aaa_build.pngあれっ

ファイルが増えていない・・・
これだと、$(PROJECT_NAME).ipaというように全て同じ名前でビルドされてしまい、最終的に最後のやつ(多分scheme:AppStore, config:Release)しか残らなくなってしまいます

(もちろん)ファイル名も分けたい!

そんな時は、

lane :build do |options|
version = get_build_number
scheme = options[:scheme] || 'Dev'
config = options[:config] || 'Debug'
directory = 'build/'
appName = 'aaa'
ipaName = "#{appName}##{version}(#{scheme}, #{config}).ipa"
gym(
scheme: scheme,
configuration: config,
output_directory: directory,
output_name: ipaName,
)
end

buildlaneを変えました。ふふ・・・ついでにビルド番号をゲットして出力先を変更してやったぜ
ここで

$ fastlane buildAll

で、
151023_aaa_buildall.png
このように、それぞれ分かれて出てきます。

どうせなら、アプリ名(出力appファイル名)も取得したい・・・

しかし、アプリ名(PRODUCT_NAME)を取得するActionはありません・・・
なので作ってみました。

kassy-hub/fastlane-actions-xcode_get_product_name
https://github.com/kassy-hub/fastlane-actions-xcode_get_product_name

これで、

appName = xcode_get_product_name(
target: scheme,
configuration: config,
)

などでPRODUCT_NAMEが取れるようになりました!
151023_aaa_build2.pngこんなかんじ

RubyのXcodeprojモジュールを使用しています。
ただし、gymschemeXcodeprojtargetしか取れない?ので、schemetargetが同じ名前である必要があります・・・(改良の余地あり)

さらにEMLauncherにアップしたい!

弊社ではアプリのテスト配布にEMLauncherを導入しています。ビルドが自動化できたのはいいけど、どうせならそのまま勝手にアップしといてほしいですよね!

keqh/fastlane-actions-emlauncher
https://github.com/keqh/fastlane-actions-emlauncher

神はいた

Error when trying to upload ipa to EMLauncher
んん〜

調べたところ、curlのエラーっぽい感じでした。どうやら()(カッコ)や,(コンマ)が含まれていることが原因のようです。
ので、とりあえず自分なりに修正してみました。今から初めてプルリクエストを送ります・・・(その話は別で)

fastlane.tools finished successfully 🎉
よっしゃ〜

151023_aaa_em.png
こんなふうに上がっていますよ!

というわけで、一度に複数の設定でビルドが出来、ファイル名も明快で、バージョン管理もしやすい。そんな方法が確立できました。
1つしかいらない場合でも、従来よりも手軽にアップロードできるようになったと思います。
空いた時間で音ゲー・・・さらに仕事がはかどりますね!

posted by Seesaa京都スタッフ at 00:00| Comment(0) | iOS | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: