CordovaでのGradleによるiOS Xcode buildからの〜testFlight!!! 日本語のプロジェクト名もOK


Cordovaによるプロジェクトを進めているが、一つ困ったことがあった。

Xcodeのビルドが面倒なのよ。。。(笑

面倒な理由が以下の例

  • 日本語でプロジェクト名が作れない。・・・Buildさえ出来ないからね。。。
  • なんか、色々とAppleに引きずられて、自動ビルドとかの文化が無いんじゃないの?
  • コマンドラインツールもあるのでshellでなんとかなりそうだけど、コマンドもカオスだよね
  • AdHocリリースするのは良いんだけど、いちいちプロビジョニングとか、開発者に渡さないとならんし、めんどくせぇ。。。
  • まあ、その他諸々。

で、いろいろ調べましたよ。うん、いろいろと。

Gradleの Xcode Build プラグインを作ってくれてる、神な人が・・・!

素晴らしすぎます!
testFlightや、HockeyAppなどにも対応してるので、
gradleコマンドで、一発でAdHocがリリースできます。
※ 残念ながら、testFlightは2015/2/26で終了・・・現在iTunes Connect版を作成中?みたい

ここに、アプリ名や、BundleIDなどの設定をすれば、自由にコントロールできる。

ミニマムだと、こんな感じですかねー(確認はしてないので、調整して下さい)
これを、Cordovaなら、/platforms/ios/build.gradle として保存します。

buildscript {
    repositories {
        maven {
            url('http://openbakery.org/repository/')
        }
        mavenCentral()
    }
    dependencies {
        classpath group: 'org.openbakery', name: 'xcodePlugin', version: '0.9.+'
    }
}
apply plugin: 'xcode'

xcodebuild {
    sdk = 'iphoneos'
    target = 'target-project'
    scheme = 'target-project'
    configuration = 'Debug'
    sdk = 'iphoneos'
    signing {
        identity = 'jp.hoge.target-project'
        certificateURI = 'file://localhost/target-project/platforms/ios/Development.p12'
        certificatePassword = signingCertificatePassword // e.g. 'secret'
        mobileProvisionURI = 'file://localhost/target-project/platforms/ios/Development.mobileprovision'
    }

    infoplist {
        bundleIdentifier = 'テスト用のBundleID'
        bundleDisplayName = 'テスト用のアプリ名(日本語名でもOK)'
        version = 0.0.1 // 適当に日付とかで組み立てればOK
    }

    testflight {
        apiToken = 'testFlight API Token'
        teamToken = 'testFlight team Token'
        notes = 'Release notes for the build'
    }
}

さらに、gulp.jsによるスクリプトと組み合わせるよー

これで、本体ビルドして、gradleを自動実行させることが可能になりました。

まずは準備。次のフォルダを用意します。
src/platforms/ios

このフォルダに、次のファイルをコピー

Development.p12 // CodeSignの鍵
Development.mobileprovision // CodeSignのプロビジョニングファイル
build.gadle // 上記のxcode buildタスクの入った、gradleファイル

このフォルダをリポジトリ管理して、再配布を簡略化してます。
セキュリティ的にどーのこーのとかいうプロジェクトだったら、
どこかセキュリティ的にもーまんたいなサイトに置いておけば良いんじゃ無かろうかと。

そして、Gulpの準備
必要なモジュールをインストールして。。。

npm install --save-dev run-sequence
npm install --save-dev gulp-shell

こちらが、ミニマムなコード

var runSequence = require('run-sequence');
var shell = require("gulp-shell");

////////////////////
// gradle build ios
////////////////////
gulp.task('gradle-ios', function () {
    runSequence('build', 'cordova-build-ios', 'platforms-ios-copy', 'gradle-build-ios');
});
// build ios platform.
gulp.task('cordova-build-ios', shell.task([
    'cordova build ios'
]));

// copy local platform.
gulp.task('platforms-ios-copy', function () {
    return gulp.src(['src/platforms/ios/**/*.*'])
        .pipe(gulp.dest('platforms/ios'));
});

// packaging Android
gulp.task('gradle-build-ios', shell.task([
    'cd ./platforms/ios;gradle --daemon integration' // integrationはGradleタスクなので、プロジェクトに応じて設定してね。 
]));

そして、たぶん、みんなが幸せになれるコマンドを叩く。
gulp gradle-ios

神プラグインに感謝。