酔いどれエンジニアのブログ

有限会社wisdomのスタッフブログです。主にプログラミングやアプリケーション開発の話題を書いていきます。

XCodeのBDDツールであるKiwiのGetting Started with Kiwi 2.0を和訳してみた。その1

前回はReadmeを訳しましたが今回はGetting Startedを和訳して見たいと思います。

今回も前回同様、意訳している箇所があります。 間違っているところがあれば、ご指摘頂けると幸いです。

途中でいやになってきたので、2回に分けたいと思います。

Getting Started with Kiwi 2.0

このガイドは、iOSOS XプロジェクトにKiwiを使用する方法を学ぶための出発点です。

このガイド(またKiwi)のゴールはアプリケーションのコードを実行したり、プロファイリングしたりするのと同じぐらい簡単に、テストを行うことが出来るワークスペースを設定することです。

必要条件:

Xcode iOS OS X
4.5+ 5.0+ 10.7+

Step -1: CocoaPods

すでにCocoaPodsをインストールしている場合は、この手順を省略します。 現代のiOSOS Xの開発では、必然的にプロジェクトでオープンソースのライブラリ(例えばAFNetworking)を使用することになります。 その結果、ライブラリ管理をさらに複雑にします。 CocoaPodsはこの苦痛を少なくしてくれる、私達が好むライブラリ管理ツールです。

1.CocoaPodsのインストール

$ [sudo] gem install cocoapods
$ pod setup

2.最後に、Xcodeツールがコマンドラインから使用可能であることを確認する必要があります。 Xcodeを開き、Command Line Toolsがインストールされているか確認して下さい。インストールされてなければ、インストールして下さい。

Preferences -> Downloads -> Components -> Command Line Tools -> Install

(訳注:私の環境ではコンポーネント一覧にある「Command Line Tools」をダブルクリックするとダウンロードが始まりました。)

Step 0: Setting Up a Unit Test Target

既にプロジェクトにUnit Test Targetを設定している場合は、このステップを飛ばして下さい。 プロジェクトにKiwiを加えるには、テスト時にXcodeから実行されるユニットテスト・ターゲットが必要です。 プロジェクト作成時にプロジェクト・ウィザードで「Add Unit Tests」にチェックを入れて作成したか、作成後にユニットテストターゲットをプロジェクトに追加してあれば、準備は完了しています。

Project Navigatorでプロジェクトを選択し、プロジェクトのTargetsを確認して下さい。ユニットテストのターゲットが既に存在する場合は、この手順を省きます。ユニットテストのターゲットがなければ、次の手順を実行し追加して下さい。

ユニットテスト・ターゲットは既にあるかもしれません 無ければユニットテスト・ターゲットを追加して下さい
設定済 未設定

1.Project Navigatorでプロジェクトを選択します。 2.プロジェクトに"Cocoa Touch Unit Testing Bundle"を追加して下さい。:

File -> New -> Target... -> Other -> Cocoa Touch Unit Testing Bundle

3.ユニットテスト・ターゲットに適切な名前(例えば、 "AmazingAppTests")を設定します。 テストをしたいプロジェクトが "Project" に反映されていることを確認したら "Finish"をクリックして下さい。

ユニットテスト・ターゲットは、プロジェクトに設定されたことでしょう。 先に進む前に、ユニットテスト・ターゲットの名前(上記の"AmazingAppTests")をしっかりと覚えておいて下さい。

Step 1: Installing Pods

次のステップでは、プロジェクトのPodfileを作成、または更新します。 CocoaPodsでライブラリ管理を行うと、どのようになるかを説明します。 Kiwiをインストールするために、ファイルにKiwiのエントリーを加えましょう。

1.後ほど再度開くことがありますが、まずXcodeを閉じます。 2..xcodeprojファイルがあるディレクトリにPodfileという名前の新しいファイルを作成します。すでにPodfileが存在する場合は、それを編集します。 下記のようにPodfileを変更して下さい。前のステップで指定したターゲット名を使用して下さい。

 # Podfile

# 下記の適切なプラットフォームを選択
# Kiwiでサポートされている最小限なiOSのバージョン(またはそれ以降)を指定
platform :ios, '5.0'
# platform :osx

#
# 他にいくつかのエントリーが、既にファイルに存在するかもしれません。
# ...
#

# AmazingAppTestsターゲットの排他的な依存関係としてKiwiを追加
target :AmazingAppTests, :exclusive => true do
   pod 'Kiwi'
end

#Xcode 5で作った新しいプロジェクト
#(OCUnitベースの代わりにXCTestベース)では、こちらを使用します:
target :AmazingAppTests, :exclusive => true do
   pod 'Kiwi/XCTest'
end

3.プロジェクトのpodsをインストールします。 CocoaPodsはプロジェクトに必要なライブラリをダウンロードして設定します。

$ pod install

4.CocoaPodsがアドバイスを示しますので、それに従って下さい。今後、プロジェクトへの作業は .xcworkspace ファイルを開いて作業して下さい。

$ open myproject.xcworkspace

Step 2: Unit Test Target Configuration

この部分はトリッキーです。よく読んでください。 このステップの目的は以下を確実にこなすことです。 1. ユニットテストのターゲットが正しく構築すること 2. 構築したユニットテスト・ターゲットがロードされ、テストを実行するときに、アプリケーションの実行可能ファイルに正しく注入されること

次に移る前に少しだけユニットテスト・ターゲットについてお話しします。 Kiwiを動かすにはアプリケーションのコードをテストするための、テスト(スペックとも呼ばれる)を書かなければなりません。 アプリケーションのコード(例えば.mファイルなど)はアプリケーション・ターゲットに構築するだろうし、テストはユニットテスト・ターゲットに構築するべきです。 ですので、作成するすべてのテストファイルがユニットテスト・ターゲットに追加されていることを確認してください。

以下のすべての手順は、"Debug"と"Release"の該当する箇所が対象となります。

  1. .xcworkspaceをまだ開いてなければ、開いて下さい。 プロジェクト内に"Pods-.xcconfig"というファイルがあることを確認して下さい。このファイルは、CocoaPodsによって生成されたもので、ユニットテスト・ターゲットのビルド時に使用される特別な設定を含んでいます。

  2. Project Navigatorでプロジェクトを選択し、 "Info"ペインでプロジェクト(ユニットテスト・ターゲットではない方)を選択します。 (訳注:XCode5では、Project Navigatorでプロジェクトを選択し、Project(Targetではなく)の中のプロジェクトを選択、"Info"を選択)

  3. Pods-.xcconfigはConfigurations内の全てのユニットテスト・ターゲットに設定されていることを確認します。 これが設定されているとユニットテスト・ターゲットはxcconfigファイルから構成されている設定を取得することができます。

  4. ユニットテスト・ターゲットを選択し、さらに"Build Settings"ペインを選択します。

  5. "Other Linker Flags"に -ObjC -framework SenTestingKit が設定されていることを確認します。 (訳注: 'Kiwi/XCTest'をインストールした場合は、-ObjC -framework XCTest) これは、(i) SenTestingKitに対してバイナリをリンクすると、(ⅱ )ビルドした時にその他のコードから使用されていないと、リンカーが判断しても、バイナリーから、Kiwiのシンボルが削除されないことを保証します。

  6. このステップでは、アプリケーションの実行可能ファイルが、テストを実行した時にロードされるように設定します。(static libraryが対象の場合は、この手順は必要ありません。このフィールドを空白のままにしておけます。) 以下の"MyProject"をアプリケーションのプロジェクト名に、"ApplicationTargetName"をターゲット名に替えて下さい。その際には大文字と小文字を区別して下さい。(デフォルトではプロジェクト名とターゲット名は同じです。)
    iOSが対象の場合は、"Bundle Loader" を以下のように設定します。 $(BUILT_PRODUCTS_DIR)/MyProject.app/ApplicationTargetName.
    OS Xが対象の場合は、"Bundle Loader" を以下のように設定します。 $(BUILT_PRODUCTS_DIR)/MyProject.app/Contents/MacOS/ApplicationTargetName.

(訳注:XCode5の場合、"Bundle Loader"はProject Navigator→対象プロジェクト→Build Settings→All→Linking の中にあります)

  1. "Test Host"に$(BUNDLE_LOADER)が設定されていることを確認します。 これは、ユニットテストに注入される実行可能ファイルを指定することになります。 $(BUNDLE_LOADER)の値は"Bundle Loader"に設定した値と一致します。 (static libraryが対象の場合は、この手順は必要ありません。このフィールドを空白のままにしておけます。) (訳注:XCode5の場合、"Test Host"はProject Navigator→対象プロジェクト→Build Settings→All→Unit Testingの中にあります)