Mac OS X YosemiteでAppiumがうまく動作しない件
会社から帰ってきて、早速Appiumの環境構築を開始した。ところが。。。。appium-doctorで、必要な環境が整ったか確認するも、以下のエラーが発生。
$ appium-doctor --ios
Running iOS Checks
✖ Could not detect Mac OS X Version
Appium-Doctor detected problems. Please fix and rerun Appium-Doctor.
いろいろ調べても原因がわからない。ふと、以下の投稿を発見した。
なんだかバグっぽい。え!いきなり行き止まり?
会社のMacは、まだ10.8だったのを思い出し、会社のMac上に環境構築してみた。appium-doctorで全チェックOKになった。
やっぱりOSX Yosemite 10.10固有のバグっぽい。
早く解決されることを祈る。
いよいよTestFlightをJenkinsに組み込み、バイナリの自動配布を行う。
以前の投稿までで、GitにiOSプロジェクトをコミット後、自動的にビルドとテストを実行する、いわゆるContinuous Inetgration環境が構築できた。
今回は、さらにContinuous Deploymentっぽく、TestFlightによるバイナリの自動配布まで自動化するぜ!
おおまかに以下の3つのStepを実行する必要があるよ。
- [Step1] まずは、ここまでで作成できた.ipaファイルを、TestFlightで自分のiphone端末に配布できるようにする。
- [Step2] Jenkinsに、TestFlight Pluginをインストールし、システム設定を行う。
- [Step3] JenkinsジョブのPost-build Actionに、組み込んで、作成されたipaファイルを自動的にTestFlightにアップロードし、TestFlightに登録されているDistribution Listに配布する。
(1) IPAファイルを、TestFlightで自分のiPhoneに配布できるようにする。
- まずは、自分を含むテスターに、配布するには、該当のアプリを選択し、Permissionsタブを選択し、配布先のUserの左側のチェックボックをクリックして、右下の[Update & Notify]をクリックする。これで自分を含むテスターにEmailが送信される。
- ちゃんと以下のようなメールを受信したぜ!
- メール中の[Install]ボタンをクリックし、手順に従って進むことで、iphoneにアプリがインストールできたぜ。
(2) Jenkinsに、TestFlight Pluginをインストールし、システム設定を行う。
[1] まずは、JenkinsにTestFlight Pluginを導入する。
続きを読むJenkinsにジョブを組み込み、iOSアプリのビルドとテストを自動実行するぜ
Jenkinsを起動できる環境は整備されていることを前提とする。もしまだ整備されていないなら、以前の投稿をみてくれ!
もうひとつ、以下ではiOSのテストのフレームワークにKiwiを導入している。iOSアプリのプロジェクトにKiwiを組み込む方法は、この投稿を見てくれ!
(1) Jenkinsにプラグインをインストールする。
まずは、Jenkinsのダッシュボードから、iOSアプリのビルドとテストを実行するために必要となる各種プラグインをインストールする。
Jenkinsのプラグインをインストールするには、ダッシュボード画面の左側に表示されているメニューから[Manage Jenkins]を選択し、[Manage Plugins]を開く。
[Available]タブを開き、プラグインを選択し[Install without restart]をクリックしてインストールします。上部の検索バーにインストールしたいプラグインの名称を入力すると、目的のプラグインをすぐに探し出せる。
設定するのは、以下の4つのプラグイン
[1] Git Plugin
Gitリポジトリからソースコードをクローンするためのプラグイン
[2] Xcode Plugin
Xcodeプロジェクトのビルドやテストを実行するために必要なプラグイン。Xcodeに付属している「xcodebuild」というXcodeプロジェクトをビルドするためのコマンドラインツールの各コマンドを実行する。
[3] CocoaPods Plugin
CocoaPodsのコマンドを実行するプラグイン。「pod install」などのコマンドを実行できます。
[4] Cobertura Plugin
テストのコードカバレッジを解析するためのプラグインです。コードカバレッジをJenkinsのダッシュボードにグラフィカルに表示する。
(2) Xcodeプロジェクトの設定変更
XcodeプロジェクトをJenkinsでビルド/テストするには、Xcodeでワークスペースを開き、メニューから[Product]->[Scheme]->[Manage Schemes]を選択する。
この中の、対象のTarget Projectと同じ名前のSchemeの[Shared]にチェックを入れてくれ!。これにより、Schemeをリポジトリに共有できるようになるらしい。
んでもって、プロジェクト設定の[Build settings]にも変更を入れるぜ。
[Generate Test Coverage Files]と、[Instrument Program Flow]を[Yes]に変更しよう。これで、テストのカバレッジファイルが書き出されるそうだ。
いよいよ、Jenkinsのジョブを作成するぞ!
(3) Jenkinsジョブの作成
Jenkinsジョブを作成するには、ダッシュボード画面の左上の[New Item]を押し、Item nameに、例えばMyLocations-developと入力し、[Freestyle project]を選択、OKボタンをクリックする。
次にジョブ設定画面が表示される。ジョブの対象となるGitレポジトリや、ジョブがどのようなビルドを実行するか、ビルド実行後にどのような処理を行うかなどをジョブの詳細を設定していく。
(4) Source Code Management
- Gitにチェックボックスを入れて、対象となるiOSアプリのGit RepositoryURLを指定する。
- Credentialsは-none-で良い。
- Branches to buildは、デフォルトでは、masterになっているので適宜変更する。
- そのほかの設定は、特に変更する必要はない。
(5) Build Triggers
ジョブをどのタイミングで実行するかは[Build Triggers]セクションで設定できる。とりあえず、SCMをpollingという設定を試してみた。これは、リポジトリをpollingで更新がないか定期的にチェックする設定だ。
15分ごとにpollingを実行するには、以下のような設定をすべし。
(6) Build
次にビルドの設定だが、ここでは、ジョブを行う時の処理の流れと処理の設定を行う。今回は、以下の順番で処理を実行させる。
[1] CocoaPodsの実行(pod install)
[2] Xcodeプロジェクトのビルド(ipaファイルの生成)
[3] xcodebuildコマンドによるテスト実行
[4] Gcovrによるテストのカバレッジファイルの出力
- [1] CocoaPodsの実行について
WordpressをHerokuにdeployしたがいろいろ制限がありHatenaを使うことにした
Herokuアプリを再起動すると、Gitでバージョン管理されていないファイルは消えてしまうそうです。そんなの知らなかった。なので、画像はアップロードはできるけれども、アップロードしたファイルは消えてしまうのだ。
再起動時というのがポイントで、HerokuはDynosという単位でCPUを使っているのですが、こいつ、24時間に1回勝手に再起動してしまう。
従って、うっかり管理画面からテーマをインストールして設定すると、次の日には、テーマが壊れており、アクセスできないという問題が発生します。同様に、アップロードした画像もおそらく消えてしまう。これでは、ブログとして使えない。
ただし、画像をAmazon S3にあげるなど、いろいろ方法はあるようですが、私の場合は、諦めて、Hatena blogに引っ越しました。さよならHerokuさん。残念。
iOSアプリのUnitTestテストをKiWiで実現するぜ!
前回の投稿までで、MacにJenkins環境を構築できたので、次にiOSアプリの自動テストをJenkinsに組み込みたい。BDD(Behavior Driven Development) FrameworkのKiwiを導入することにしたぜ!Kiwiは、BDD framework for Objective-Cで、詳しい解説は、ここにあるぞ。
(1) まずは、CocoaPodsをインストールする。これはiOSプロジェクトに、Kiwiを組み込むために必須。
まずは、CocoaPodsをインストール。
$ [sudo] gem install cocoapods $ pod setup
(2) 次に、Unit Test Targetをセットアップ。
Project Navigatorで、Projectを選択した際に、既にUnit Test Targetが存在するなら、このステップは不要。
なければ、Unit Test Targetを追加しておこう。
1. Project Navigatorで、Projectを選択。
2. 以下で、Cocoa Touch Unit Testing BundleをProjectに追加。
File -> New -> Target... -> Other -> Cocoa Touch Unit Testing Bundle
3. 適切な名前をつけて"Finish"をクリック。
こんな感じで、Unit Test Targetがprojectに追加されていればOK。以下の例では、MyLocationsTestsが、Unit Test Targetだ。
(3)Podsのインストール
次にiOS project用のPodfileを作成する。このファイルには、CocoaPodsが管理すべきlibraryを記載する。
1. まず、Xcodeプロジェクトを終了させる。
2. .xcodeprojがあるのと同じディレクトリにPodfileという名前のファイルを作成し、以下のように記載する。
前のステップまでに作成したUnit Test Targetの名前を使う必要がある(この例では、MyLocationsTest)。
# Podfile # Uncomment this line to define a global platform for your project platform :ios, '7.0' source 'https://github.com/CocoaPods/Specs.git' target 'MyLocationsTests' do pod "Kiwi" end
3. Podsのインストール。
以下を実行すると、CocoaPodsが必要なlibraryをダウンロードし、設定してくれる。
$ pod install
4.今後は、xcode projectをオープンする、.xcworkspaceを使う。
$ open myproject.xcworkspace
(4) Unit Test Targetの設定
Build settingタブを選択し、Other Linker flagsに、-ObjC -framework SenTestingKit を設定しよう。これがないとWikiが動かないぞ!
(5) Schemesの設定
Xcodeは、Schemeと呼ばれる仕組みを使って、どのTargetをどんな設定でビルドするかを決定している。
1. Scheme Managementを開く。
Product -> Scheme -> Manage Schemes...
2. Projectと同じ名前のSchemeがあると思うので、それをShared設定してください。
3. 今度は、Edit Schemeする。
4. 左側のPaneからTestを選択し、Unit Test Target (MyLocationsTests)がリストされており、右端のTestフィールドにチェックが入っていることを確認する。もしなければ、"+"を押して追加しよう。以下のようになっていればOKだ。
(6) テストを書く
やっと、環境が構築できたので、試しに何かのテストを書いてみよう。
1. Test caseをprojectに追加する。すでに.mファイルが、存在する場合は必要ない。
多分、ここまでで、MyLocationsTests.mがMyLocationsTestフォルダに存在するので、それを使えば良い。もし存在しないなら、以下のようにしてファイルを作成する。
File -> New -> File -> Test Case Class
以下のようにすれば、Unit Test TargetのMyLocationsTestsフォルダに、SampleTest.mが作成されるはずだ。
2. Unit Test TargetのMyLocationsTestsフォルダにある、.mファイルに、以下のようなテストを書く。
#import "Kiwi.h" SPEC_BEGIN(MathSpec) describe(@"Math", ^{ it(@"is correctly answered", ^{ NSUInteger a = 16; NSUInteger b = 26; [[theValue(a + b) should] equal:theValue(42)]; }); }); describe(@"Math", ^{ it(@"is wonglyy answered", ^{ NSUInteger a = 20; NSUInteger b = 10; [[theValue(a - b) should] equal:theValue(9)]; }); });
3. テストを実行する。
以下で実行するか、デフォルトホットキーの Command-Uで、テストを実行する。
Product -> Test
ビルドが開始され、Simulator上でアプリが起動した後、さらに、テストが自動的に実行される。
この例では、2つめのテストでエラーになる。
すると、デスクトップ上に、以下のような画面が表示される。
この画面をクリックすると、以下のようなテスト結果が表示されるぜ。テストでFailした箇所がわかるので、Debugしよう。
デバッグ後、再度、Command-Uでテストを実行すると、以下のようになり、2つのテストケースがパスしたことがわかる。
やったー。これで、iOSのUnitTestをKiwiで組み込み成功したぜ。次は、いよいよJenkinsで、Gitにコードをコミットするたびに、自動的にビルドとテストを実行させるぜ!
iOSアプリ開発にCIツールJenkinsを導入するぜ!
まずは、CIツールJenkinsをMacにインストールする。
(1) Command Line Toolsのインストール
忘れずに、Command Line Toolsをインストールしよう。
$ xcode-select --install
(2)Gcovrのインストール
よくわからんが、GcovrはXcodeが出力するコードカバレッジファイルをXML形式に変換するツールらしい。Jenkinsでテストのカバレッジを表示するために必要となる。
$ easy_install gcovr
(3)OCLintのインストール
OCLintはObjective-Cの静的解析ツール。Xcodeに標準搭載されている「Clang」よりも強力な解析を行ってくれるそうです。最新版は、「OCLint」からインストールしようね。
$ curl -O http://archives.oclint.org/nightly/oclint-0.9.dev.6a4451b-x86_64- $ darwin-12.4.0.tar.gz $ tar xvf oclint-0.9.dev.6a4451b-x86_64-darwin-12.4.0.tar.gz $ mv oclint-0.9.dev.6a4451b /usr/local/oclint
(4) Homebrewをインストール
もしかしてHomebrewインストールしていない? なら、以下を実行しよう。
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
インストールが終わったら、doctorコマンドを実行してく。doctorコマンドは、Homebrewの動作環境に不備がないか診断してくれるぞ。
$ brew doctor
もちろん問題あれば、メッセージと対処コマンドが表示されるので、それに従って問題解決すべし。
(5) Jenkinsのインストール
Jenkinsはターミナルからhomebrewを使ってインストールするぞ。
$ brew install jenkins
こんな感じのメッセージがでるぞ。
==> Downloading http://mirrors.jenkins-ci.org/war/1.549/jenkins.war ######################################################################## 100.0% ==> Caveats Note: When using launchctl the port will be 8080. ! To reload jenkins after an upgrade: launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist ==> Summary /usr/local/Cellar/jenkins/1.549: 3 files, 64M, built in 4.2 minutes
(6) Jenkinsの起動
$ java -jar /usr/local/opt/jenkins/libexec/jenkins.war
確認には http://127.0.0.1:8080/ にアクセスする。
なお、JenkinsがOS起動時に自動的に起動するように設定することもできる。
$ ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents $ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
確認には http://127.0.0.1:8080/ にアクセスする。
こんな感じで、立ち上がったら成功だぜ。
次に、iOSアプリプロジェクトに、KiwiのBDD (Behavior Driven Development)環境を取り込み、Jenkinsで自動テストをできるようにするぜ!
ちょっと疲れたので、次の投稿でこの辺りをやってみるぞ。