XcodeのArchiveを自動化しよう


いやー、お久しぶりです。
昨年の12月に更新して依頼、かなりご無沙でした。

最近、髪型を2ブロックにしたら、風通しが良くなりすぎて、ほんと寒くて、
2ブロックにしたのを若干後悔してる阿部です。
それでは本題。




ipaファイルの生成が面倒すぎる

最近はめっきりXcode(Objective-C)でアプリ制作に没頭しています。
そんな中で実機確認のため、よくipaファイル(アプリ本体)を
Xcodeから生成するんですが、これが何度も作るとなるととても面倒で。。

  1. [Scheme]からアーカイブしたスキームの選択
  2. メニューの[Product]から[Archive]選択
  3. [Share...]ボタンクリック
  4. Identityから生成したプロビジョニングファイルを選択し、[next]ボタン押下
  5. ipaファイルのファイル名を設定
  6. 「Save for Enterprise Distribution」のチェックリストにチェック
  7. 「Apprication URL」にDL用URLを設定
  8. 「Title」に文言設定
  9. [save]ボタン押下
  10. 生成されるファイルをサーバにアップ
    ipaファイルの生成方法はこちらの記事に詳しく書かれてます(「IPAファイルの作成方法」 @ HAPPYTRAP)

こんなこと何度も何度もやってられませんし、ヒューマンエラーの原因ですね。




自動化しちゃおう

そこで、この一連の操作をシェルスクリプト使って自動化*1してしまおうという話に。
とはいえ、Xcodeに依存する操作のため、自動化なんて出来るのかなぁと思っていたのですが、
さすがApple。そういったSDKを用意して下さってるんですね( ´∀`)
Appleのデベロッパーサイトを参考にipa作成シェルスクリプトを作成してみましたので紹介します。

#!/bin/sh

#SDK
SDK="iphoneos5.0"

# コンフィグレーション(「Debug」、「Release」、「Ad hoc」)
CONFIGURATION="Release"

# Xcodeのプロジェクト名
PROJ_FILE_PATH="hoge.xcodeproj"

# ターゲット名
TARGET_NAME="hogeTarget"

#「Build Settings」にある、プロダクト名
PRODUCT_NAME="hogeProduct"

# app出力先ディレクトリ名
OUT_APP_DIR="out_app"

# 出力先ipaディレクトリ名
OUT_IPA_DIR="out_ipa"

# 出力されるipaファイル名 
IPA_FILE_NAME="hogeIpa"

# ライセンス取得時の開発者名
DEVELOPPER_NAME="iPhone Distribution: hoge Developper"

# アプリのプロビジョニングファイルのパス
PROVISIONING_PATH="${HOME}/Library/MobileDevice/Provisioning\ Profiles/hoge.mobileprovision"



# 出力先ipaディレクトリ作成
# -------------------------
if [ ! -d ${OUT_IPA_DIR} ]; then
    mkdir "${OUT_IPA_DIR}"
fi

# クリーン
# -------------------------
xcodebuild clean -project "${PROJ_FILE_PATH}"

# ビルド
# -------------------------
xcodebuild -project "${PROJ_FILE_PATH}" -sdk "${SDK}" -configuration "${CONFIGURATION}" -target "${TARGET_NAME}" install DSTROOT="${OUT_APP_DIR}"

# Create ipa File
# -------------------------
xcrun -sdk "${SDK}" PackageApplication "${PWD}/${OUT_APP_DIR}/Applications/${PRODUCT_NAME}.app" -o "${PWD}/${OUT_IPA_DIR}/${IPA_FILE_NAME}.ipa" -embed "${PROVISIONING_PATH}"


※ 設置場所はプロジェクトファイルと同階層に設置する
処理の流れとしては下記の通り。

1. 出力用ディレクトリの作成
2. ビルドを行うと「DSTROOT」で指定したディレクトリにappファイルが生成される
3. そのappファイルをxcrunコマンドを介すことにより、ipaファイルが生成される
シェルスクリプト実行後、「** BUILD SUCCEEDED **」の後にエラーや何も出なければOK。




他にもこんなのもコマンドラインから実行可能

  • $xcodebuild -list

選択可能な、Targets(ターゲット名)、Build Configurations(DebugやRelease)、Schemesが一覧で表示される

  • $xcodebuild clean

Xcodeで言う、メニュー[Product] → [Clean]が可能

まとめ

いやー、これでアーカイブ化の作業がだいぶ楽になりました。
IDEに頼るとマウス作業が増え、単純作業でも何度も何度もやると手間になりますもんね。
こういった作業は出来るだけ自動化するにつきますね。


それでは今日はこのへんで。またね。





参考サイト

iOSのプロジェクトをJenkinsでビルドする @ soutaroにっき
This manual page is part of Xcode Tools version 3.2.5
iPhoneアプリのテスト用ビルドをTestFlightに簡単に登録する @ はこべブログ

よくわかるiPhoneアプリ開発の教科書【Xcode 4対応版】

よくわかるiPhoneアプリ開発の教科書【Xcode 4対応版】

*1: 自分は初め「シェルスクリプトを使った自動化」のことを「シェル化」と表現しておりましたが、 @t2yさんに「シェルというのはコマンドの実行などを OS とやり取りする中間にあるソフトウェアですよ」とご指摘頂きましたので、その後修正致しました。