App Storeへのアプリ公開を前提としたXcodeを使った開発を、継続的インテグレーションするための方法を紹介する。
前回の「継続的インテグレーションを始めるための基礎知識」では、大規模開発とCIの関係、CI製品/サービス7選、選定の3つのポイント、Jenkins導入で解決した問題点などを解説しました。今回はJenkinsを使った開発の事例としてiOSアプリ開発についての具体的な応用方法を紹介します。
iOSアプリを開発する際にはXcodeを使ってObjective-Cでの開発がほとんどだと思います。最近はTitanium Mobile、RubyMotionのようにObjective-C以外の言語を使った開発、あるいは、クラウド上でデザインだけを決めればアプリが作成できるようなサービスもあります。
それぞれ微妙にワークフローが違いますので、今回は代表例として、App Storeへのアプリ公開を前提としたXcodeを使った開発をJenkinsで継続的インテグレーションするための方法を紹介します。
まずは、簡単にアプリ公開までの流れを紹介します。なお、これらの手順はXcodeやiOS Dev Centerの仕様変更などにより変更される可能性がありますので、詳しくはiOS Dev Centerで公開されているマニュアルを参照してください。
App Storeでアプリ公開までには、いくつかの準備が必要です。
まずは開発者登録です。【1】iOS Dev Centerに開発者登録します。開発者登録には年額8400円(2013年3月の原稿執筆時点)の参加費用が掛かります。【2】続いてアプリをビルドするMacをiOS Dev Centerで登録し、【3】証明書をMacにインストールします。細かな手順についてはiOS Dev Centerのマニュアルをご参照ください。
続いて、開発するアプリの登録を行います。アプリの登録では【1】アプリ名や識別名などの登録、【2】プロビジョニングプロファイルを作成しダウンロード、インストールします。
これらの準備が終わったら、App Storeへ公開するためのアプリ開発、パッケージング、アップロードといった流れになります。
このアプリ公開までの作業のうち、いくつかをJenkinsによって自動化することで継続的にアプリを公開できるようになります。通常、アプリのビルドやパッケージングはXcodeから行うことになりますが、Jenkinsから実行する場合にはXcodeのコマンドラインツールである「xcodebuild」などを使って処理を行います。
Jenkinsジョブからシェルを起動してxcodebuildなどのコマンドを直接実行するか、「Jenkins Xcode Integration Plugin」を使います。Xcode Integration Pluginは「xcodebuild」「PackageApplication」といったツールをJenkins上から扱うために処理をラップしてくれるほか、ビルド時にInfo.plistのCFBundleVersionなど変更したり、.ipaファイルへのパッケージングなども対応してくれます。
以下に具体的な操作手順を紹介します。この手順はJenkinsをXcodeがインストールされたMac上で実行していることを想定しています。JenkinsをMac以外で管理している場合の方法は後述します。
まずはJenkinsにXcodeプラグインを導入してみましょう。プラグインの導入はJenkinsのメニュー[Jenkinsの管理]→[プラグインの管理]から[利用可能]タブを開き利用可能なプラグイン一覧を開き、必要なプラグインを選んでインストールできます。
ファイアウォールなどがありJenkins設置サーバから外部へのアクセスがプロキシサーバ経由でなければならない場合は、[高度な設定]からプロキシサーバの設定をあらかじめ行っておいてください。今回の記事で紹介する内容ではGitプラグインも必要になりますので、Gitプラグインも同時に導入しておいてください。
まずはXcodeでプロジェクトを作成しましょう。すでにiOSアプリ開発をされている場合でも、Jenkinsでのビルドについて感覚をつかむためにサンプルプロジェクトを作ってみてください。ここでは「HelloJenkins」という名前でテンプレートからプロジェクトを作成したことにします。新規プロジェクトを作成する際にXcodeが自動的にGit管理下に置いてくれます。
JenkinsにXcodeプロジェクトビルド用の新しいジョブを作成します。今回はフリースタイル・プロジェクトを作成します。名前を適当に決めてプロジェクトを作成してください。下図では、「atmarkit-jenkins-ios」という名前で作成しています。
ジョブを作成したら、Gitレポジトリを指定します。Xcodeで作成したプロジェクトはGitレポジトリとして管理されますので、ここではサンプルとしてXcodeで作成したプロジェクトのパスを指定しています。本格的な運用の際にはGitHubや社内など正式なレポジトリURLを指定してください。
続いて、Xcodeプロジェクトのビルド設定を行います。「ビルド処理の追加」からXcodeを選ぶと、多くの設定項目が表示されます。かなり項目数が多いので少し驚きますが、基本的には何も選択せずとも、ビルドはできるようになっています。デフォルトのままでも良いのですが、今回はいくつか設定をしてみましょう。
今回は、バージョン番号([Marketing version]と[Technical version])にJenkinsが自動的に発行するビルド番号を付与するようにしてみましょう。
設定項目に、[Marketing version]と[Technical version]があるので、ここに「1.$BUILD_NUMBER」と入力してみてください。「$BUILD_NUMBER」のところがJenkinsのビルド番号に置き換えられます。また、成果物としてアプリをIPAとしてパッケージングしてみましょう。[Build IPA?]にチェックをいれてください。
続いてビルド後の処理として、「成果物を保存」を選択して作成したIPAファイルをJenkinsが管理できるようにしてみてください。ここまで設定が終わったら、保存してプロジェクトを実行してみてください。うまくいけば、プロジェクトがビルドされ生成されたIPAファイルがJenkinsからダウンロードできるようになります。
うまくビルドが完了すると、ビルド番号と、それに対応するファイル名でIPAファイルが作成されていると思います。App Storeへアプリを登録する際にCFBundleVersionを更新し忘れてアップロードに失敗するというケースを経験されたことがあるかもしれません。今回の例のようにJenkinsによって自動的に採番されるようにしておけば、そのような細かいミスで時間が無駄になることはありません。
Copyright © ITmedia, Inc. All Rights Reserved.