CIの環境(2014/4/15)ではコード署名に失敗する問題があります。その問題の修正については下記の記事にまとめました。CIでCIを動かすことにしたので、そのときの設定などをまとめます。社内のサーバでJenkinsをホストしていて、それがダメということは全然ないのですが、社内でサーバをメンテナンスするのも面倒だし、ビルドスクリプトとかをポータブルな状態にしておくのは手元でサクッと実行できたりいろいろ都合が良さそうだと思い、試しにやってみることにしました。CIを選んだのは個人のOSSで使っていて慣れてるからと、Xcodeのビルド環境をホストしてくれるCIサービスの選択肢はそれほどないからです。あと昨日知ったのですがCloudBeesもiOS/MacのCIをサポートしてるということなので、こちらも試してみようかなと考えています。Requestに対してもテストをしたいの3点です。Profileをメンテナンスしなくてよくなりました。Profileはデバイスの制限がなくなるので)。ビルドスクリプトなどビルドスクリプトはrakeで書きました。.travis.ymlはこちらgist.github.com/kishikawakatsumi/8918365Rakefileの設計は下記を参考にしました。HockeyApp.TestFlightへのアップロードは下記を参考にしました。CICrittercismへのアップロードは下記を参考にしました。Profileをダウンロードするスクリプトは下記を利用しました。GitHub長いので要点だけ解説します。ユニットテストの実行テストの実行は54行目からの下記の部分です。testとすると、下記のようなコマンドが実行されます。bit)のそれぞれのiPadシミュレータでテストが実行されます。-tcアプリケーションのビルドテストが成功したらTestFlightにAdHoc版としてアップロードするので、アプリケーションをビルドしてipaファイルを作ります。ビルドは70行目〜、ipaファイルを作る部分にあたるのは147行目からです。テストの場合とほぼ同じですが、後の工程でビルドされたappパッケージからipaファイルを作ったり、dSYMファイルをzipにしたりするので、OBJROOTとSYMROOTを指定してビルド先のディレクトリを扱いやすくしています。Profileを埋め込むことができなかったので、署名だけしています。Profileの指定は空にしています。このへんは何度か設定を変えながらやってみたらできたという感じで、よくわかりません。archiveendトライ&エラーの内容を整理すると、CODE_SIGN_IDENTITYを指定してPROVISIONING_PROFILEを空にすると下記のエラーでビルドが失敗しました。7.0'CODE_SIGN_IDENTITYとPROVISIONING_PROFILEを両方とも空にすると下記のエラーでビルドが失敗しました。CODE_SIGNING_REQUIRED=NO`と指定して(ビルド時にコード署名しない)、PackageApplicationコマンドにsignオプションとembedオプションを指定すると、ビルドは成功するが下記のエラーでipaファイルの作成が失敗しました。CODE_SIGNING_REQUIRED=NO`と指定して(ビルド時にコード署名しない)、PackageApplicationコマンドにembedオプションだけを指定すると、ipaファイルの作成は成功するが下記のエラーでTestFlightへのアップロードが失敗しました。Profileを埋め込むという手順でうまくいきました。ipaファイルの作成ビルドされたappパッケージからipaファイルを作ります。Profileを指定します。Profileを埋め込むためには証明書と秘密鍵(cerファイルやp12ファイル)が必要なので、それらはキーチェーンからエクスポートして、あらかじめリポジトリに含めておきます。Distribution」の証明書と秘密鍵です。上記のコマンドの前に、一時的なキーチェーンを作成してこれらの各種証明書を追加します。CIで実行する分には後始末は必要ないのですが、手元で実行するときには同じ名前のキーチェーンを作ろうとすると失敗するので、コマンドの実行後には先ほど作ったキーチェーンを削除します。こちらを参考にしました。#{KEYCHAIN_NAME}"endTestFlightとCrittercismにアップロードipaファイルをTestFlightに、dSYMファイルをCrittercismにアップロードします。112行目からのタスクです。/dev/null"endと、こんな感じでGithubにプッシュすると自動的にテストが実行されて、(masterブランチへのPushなら)TestFlightやCrittercismへのアップロードもやってくれるようになりました。testflightと簡単にTestFlightにアップロードすることができるようになりました。faultで失敗しました。1.9.3`としてrubyのバージョンを1.9.3に固定するとのことでした。GitHub1.9.3だとキーワード引数が使えないとかrakeを書くときにちょっと制限ができちゃいますが、とりあえずはそうしました。早く修正されるといいですね。Profileのメンテナンスがあります。Profile(リポジトリに含めるなどする)も更新する必要があるからです。今回はそれも何とかしたいと思って、CIの実行時に毎回最新のものをダウンロードするようにしました。177行目からのタスクになります。Profileをダウンロードしてprofilesディレクトリに保存します。Profileが使用されます。Profileをダウンロードするスクリプトは下記を利用しました。GitHub上記のスクリプトはgemの体裁は整っているのですが、RubyGemsとしては登録されておらず、READMEに載っている使い方もbinのスクリプトを直接利用するように書いてあったので、gemとしてインストールしても使い方がよくわからなかったので、スクリプトごとリポジトリに含めて利用するようにしました。おまけ2:バージョン番号とビルド番号の設定TestFlightにアップロードするときにどのビルドかを区別するためにgitのハッシュがビルド番号に設定されるようにします。revendユビレジではバージョン番号のポリシーとして、「X.XX」という形式で、マイナー番号が偶数がリリース版、奇数ならベータ版という決まりにしているので、申請したらとりあえずマイナーを1つ上げるなどの操作をよくするので、ついでに手元でバージョン番号を簡単に操作できるようにしました。version:bump:minorとすると、2.57になります。version:bump:releaseとすると、現在のバージョンが2.56でも2.57でも2.58になります。このとき、ビルド番号はgitのハッシュではなくて、番号っぽくコミット数になるようにしています。アプリ内にバージョンを表示しているのでこちらのほうが見栄えがなんとなくいいかなと思ってそうしています。下記を参考にしました。月別アーカイブはてなブログをはじめよう!KishikawaKatsumiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。