eyemovic inc.

Culture blog会社の活動・働き方

2013.12.18

iOS アプリを ipa ファイル作成から サーバアップまで自動化しよう

夜も更けて来たのでおはようございます

 

アイムービックの高橋です。

よろしくお願いします。

 

今回はタイトル通りに、ipa ファイル並びに plist ファイルの作成後に

サーバアップまでの道のりをシェルスクリプト使って自動化して行きましょう

 

通常ならば、

1,  プロジェクトのクリーン

2,  プロジェクトのアーカイブ

3, オーガナイザを開き、ディストリビューションを選択

4, エンタープライズ版 or アドホック版を選択

5, 使用するプロビジョニングファイルを選択

6, plist の内容を記載する

7, 対象の appファイル, plistファイルをサーバにアップ

8, アプリのインストール

という非常に手間のかかる段階が必要です。

Xcode のバグかよくわからないが、稀によくインストールできない時があり

その際は 1 からやり直した経験があり非常に手間がかかった記憶がある

 

ですので今回は 7, ←までをシェルスクリプトで自動化する方法をやってみます

 

Xcode をインストールした時点で

「xcodebuild」

「xrun」

というコマンドが使えます

処理のフローとしてはこれだ

1, プロジェクトのクリーン

2, プロジェクトをビルドして app ファイルを作成する

3, app ファイルから ipa ファイルを作成する

 

ipa ファイルまで作成は以外と簡単なので一気に説明しましょう

※作成するシェルスクリプトファイルはプロジェクトと同階層のディレクトリに設置しましょう

今回は都合上 “sample” プロジェクトを例とします

まず

xcodebuild clean -project “sample.xcodeproj”

xcodebuild -project “sample.xcodeproj” -sdk “iphoneos7.0” -configuration “Release” -target “sample” install DSTROOT=”app_file”

xcrun -sdk “iphoneos7.0” PackageApplication “${PWD}/app_file/Applications/sample.app” -o “${PWD}/ipa_file/sample.ipa” -embed “~/Library/MobileDevice/Provisioning\  Profiles/sample.mobileprovision”

 

はい、この 3 行で ipa ファイルの完成でございますっ!

何をしているかと言いますと

 

「xcodebuild clean -project “sample.xcodeproj”」 の箇所は見て分かるようにプロジェクトのクリーンですね

 

「xcodebuild -project “sample.xcodeproj” -sdk “iphoneos7.0” -configuration “Release” -target “sample” install DSTROOT=”app_file”」

の箇所ではプロジェクトのビルドをして app ファイルを作成しています。

ちなみに使用出来る SDK は Xcode のバージョンによって違いますが

「xcodebuild -showsdks」 のコマンドで使用出来る SDK 一覧が見れるので一番いいのを頼む

 

xcrun -sdk “iphoneos7.0” PackageApplication “${PWD}/app_file/Applications/sample.app” -o “${PWD}/ipa_file/sample.ipa” -embed “~/Library/MobileDevice/Provisioning\  Profiles/sample.mobileprovision”

ここで sample.app を sample.ipa ファイルに変換しているが .appファイル及び .ipa ファイルは絶対パスで指定しないとエラーで返ってきます

最後のオプションはプロビジョニングファイルを指定します

対象のプロビジョニングファイルは ~/Library/MobileDevice/Provisioning\  Profiles/ に格納されてますので

一度確認しておくのが良いでしょう

中には sample.mobileprovision ではなく、XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.mobileprovisionともあるので

iphone構成ユーティリティを覗いて各プロビジョニングファイルのプロファイル識別子を照らし合わせるのもよいでしょう

 

ここまでで、サーバにアップする ipa ファイルが完成しました

残るは plist ファイルとサーバアップですね

 

ここまでくれば、もう分かりますよね!

残るコマンドは cat コマンドと scp コマンドのみですね!

cat コマンドで sample.plist ファイルを作成します

cat >ipa_file/sample.plist<<EOF

<?xml version=”1.0″ encoding=”UTF-8″?>

<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>

<plist version=”1.0″>

<dict>

<key>items</key>

<array>

<dict>

<key>assets</key>

<array>

<dict>

<key>kind</key>

<string>software-package</string>

<key>url</key>

<string>サーバURL/sample.ipa</string>

</dict>

<dict>

<key>kind</key>

<string>full-size-image</string>

<key>needs-shine</key>

<false/>

<key>url</key>

<string>large 画像のURL</string>

</dict>

<dict>

<key>kind</key>

<string>display-image</string>

<key>needs-shine</key>

<false/>

<key>url</key>

<string>small 画像のURL</string>

</dict>

</array>

<key>metadata</key>

<dict>

<key>bundle-identifier</key>

<string>com.eyemovic.sample</string>

<key>bundle-version</key>

<string>1.0</string>

<key>kind</key>

<string>software</string>

<key>subtitle</key>

<string>testSample</string>

<key>title</key>

<string>sample</string>

</dict>

</dict>

</array>

</dict>

</plist>

EOF

 

で plist ファイルを作成します

あとは scp コマンドでサーバにアップすることで 7. までの処理をシェルスクリプトのみで自動化にできました

 

以上、シェルスクリプトを使ったサーバアップまでの自動化でした

欠点としては、プロジェクトごとに細かい設定をする必要があることぐらいですね

次回のブログでは今までつまずいたエラー等をどう回避したかを挙げていきます

愛媛県松山市でWeb開発一筋15年、700サイト以上の構築実績!

Webサイト制作・システム開発・スマホアプリ開発・組込ソフトウェア開発ならアイムービックにお任せ下さい。