29
31

More than 5 years have passed since last update.

AppStore向けiOSアプリをJenkinsでEnterprise配布するときのTips

Last updated at Posted at 2013-11-21

はじめに

AppStore向けiOSアプリをテストやお客様に確認して頂く目的で、Enterprise配布版を作成することがあると思います。
その際の色々な手間や手作業ミスの混入を防ぐためにJenkinsを使う際のTipsです。

主な前提

前準備

AppStore用のアプリをEnterprise配布版にするときの作業

今回はよくやりそうな以下の作業をやることを想定して話をすすめます。

  • AppのBundleID を変更する(必須)
  • 接続先サーバのURLやTwitterのURLなど複数の定義項目を変更する(よくある)
    • それらの設定は一つの Env.h ファイルにまとめてある
  • 環境は「本番用」「Enterprise用」「開発用」の3種類あって、それを上記Env.hで切り替えるとします。
  • 異なるBranchやRivisionを指定してビルドする必要がある(よくある)

方針

設定ミスに備えて、デフォルトではAppStore用の設定が生きるようにします

うっかり、テスト環境用の設定をリリースしたら大惨事です。
そこで、以下のようにしておきます。

  • 異なるBundleIDでビルドする必要があるが、git本体にはAppStore版を記述しておく
    • まあ、どちらにせよ AppStore用のバイナリを作る段階で判明しますが
    • この部分のEnterprise用の書き換えは、jenkinsでビルドする直前に行う
  • Env.hのようなファイルの内容も「本番用」(AppStore用)をデフォルトとします
    • 但し、開発時に本番環境に接続しても困るので、そこは #if DEBUG などで分けておきます
    • この部分のEnterprise用の書き換えは、Jenkinsでビルドする直前に行う

Env.hはこんな感じになります。

Env.h
#ifdef DEBUG
//  「開発用の環境設定」
#else
//  「本番用の環境設定」
#endif

注意事項

Enterprise版は、JenkinsでEnv.hを更新するので、開発者は環境設定を追加、変更した場合は、Jenkinsの設定も書き換える必要があることを覚えておいてください。
必要最低限に絞れば、それほど頻度は多くないはずです。

Jenkinsの設定

以下、Jobの設定です。
以前の投稿も参考にしてみてください。
http://qiita.com/mokemokechicken/items/5ea39c87512a515071f5

ビルドのパラメータ化で指定のRevisionをビルドするようにする

「ビルドのパラメータ化」を有効にして、「パラメータの追加」→「選択」を選びます

kobito.1385018028.773555.png

変数名REVISIONに ブランチ名やTAG名を記述しておきます

最初は、master develop とかその程度だと思いますが、随時更新して増やしていく感じです。

kobito.1385017889.731882.png

ソースコード管理の「Branch Specifier」に $REVISION と書きます

kobito.1385018499.774444.png

Enterprise用のファイルを書き換える

「ビルド手順の追加」をクリックし、「シェルの実行」を追加します。
もし追加した「シェルの実行」が「Xcode」のビルドより下にある場合は「Xcode」のビルドよりも前にくるようにドラッグします。

以下の様なスクリプトを書きます。 Env.h の部分は必要に応じて変更します。

APP_INFO_PLIST=PATH/TO/myapp-Info.plist
APPSTORE_BUNDLE_ID=com.example.appstore.myapp
ENTERPRISE_BUNDLE_ID=com.example.enterprise.myapp
ENV_H_PATH=PATH/TO/Env.h

# Bundle IDの書き換え
perl -p -i -e "s|<string>${APPSTORE_BUNDLE_ID}</string>|<string>${ENTERPRISE_BUNDLE_ID}</string>|" $APP_INFO_PLIST

# Env.h の書き込み
cat <<EOF >$ENV_H_PATH
#ifndef myapp_Env_h
#define myapp_Env_h

#define API_HOST @"http://ent.myapp.example.com"
#define API_PATH @"/api/500/"

#define TWITTER_SHARER_URL @"http://twitter.com/intent/tweet?hashtags=myapp&text="

#endif
EOF

わりとこんな感じにやんちゃに書き換えても大丈夫です。

これに起因する問題と対処

ここを変更すると、Localで変更があるため、次回のgit cloneで失敗する可能性があります。
従って、このJobの終わり頃に、git reset --hardしておく方が安全です(後述します)。
もし、それでもエラーが出て治らない場合は、「ワークスペースのクリア」をすると良いです。

XCodeビルドの設定をする

ここは完全にそのProject依存になります。
例えばこんな感じです。
kobito.1385019900.468401.png

  • clean before build は、チェックしておいた方が安全だとは思います(ここではしていませんが)
  • 「Xcode Workspace File」「Xcode Schema File」を指定してビルドする方が色々汎用的な気がします
    • CocoaPodsなどを使う場合は、この2つで指定する必要があると思います(たぶん)
  • SYMROOT は 、Cannot remove *.ipa files from a non-existing directory などでIPAの作成が失敗する場合指定してみると良いです

Enterprise版をWebからDownloadするのに必要なplist, html ファイルを作成する

XCodeビルドの後に「 シェルの実行 」を追加して、下記のようなスクリプトを貼り付けます。

PACKAGE_NAME, BUNDLE_IDENTIFIER, MASTER_JENKINS, LOGO_IMG_URL は適切に設定してください。

そして、上記のスクリプトの最後に

git reset --hard

と書いておきます(Env.hBundleIDなど書き換えたものを戻しています)。

生成した ipa, plist, html ファイルを保存する

最後に、ビルド後の処理で「 成果物の保存 」を追加して、build/**/*.ipa,build/*.plist,build/*.html と書いておきます。

kobito.1385020475.906307.png

おわりに

おおよそこんな感じの設定で、特に手作業など行わず、Enterprise版の作成ができるようになると思います。

29
31
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
29
31