XCode 5 の CI ツール Bot を試してみました (1)

2013年11月15日
区分
iOS
報告者:
ataka

こんにちは ataka です。

XCode 5 から「Bot」と呼ばれる CI ツールが入りました。OS X Maveriks (10.9) と OS X Server 3.0 が必要です。といっても、Maveriks は無料でアップデートできますし、OS X Server は (通常 2,000 円 ですが) iOS Developer なら iOS Dev Center から無料でダウンロードできますので、iOS 開発者なら出費なく Bot の準備ができます。

とはいえ、設定が一か所に集中していない。細かなハマり所が多い。ということで、Bot を動かすのには随分と苦労させられました。特に既存のプロジェクトで Bot を作ろうとすると大変です。そこで、今回は新規プロジェクト「Foo」をローカルに作って Bot を動かしてみます。

Bot とは

bot1

スクリーン・ショットです。Bot を実行すると、コンパイルを実行し、テストを行ない、分析をして、ダウンロード用のプロダクト (ipa ファイル) やアーカイブを作ってくれます。

Bot の実行結果は XCode でも閲覧できますが、ウェブ・ブラウザーからも見ることができます。スクリーン・ショットは Bot の実行結果を Safari で閲覧したものになります。

まずは、このスクリーン・ショットを到達点にします。

Server の設定

OS X Server をダウンロードし、インストールします。起動してみましょう。初めて使う場合は Mac を選択する画面が現れます。ここでは自分の Mac を選択します。

起動すると、左カラムに「XCode」という項目があるので、選択します。

XCode の選択画面が現れます。複数の XCode を使い分けている人向けの設定と思いますが、普通に自分の使っている XCode を選びます。

server1

この画面では、以下の項目が設定できます:

  • アクセス権の設定
  • ビルドに使う XCode の設定
  • 開発チームの設定
  • デバイスの設定
  • リポジトリの設定

ここで必要なのは XCode と開発チームの設定です。アクセス権やデバイスの設定は、後回しにしても良いでしょう。リポジトリの設定は (今回は) XCode 側から行なうので必要ありません。XCode の設定はほとんど一択なので迷いませんね。開発チームには、開発に使っている Apple ID を入力します。

設定を終えたら、ブラウザーで確認してみましょう。「アクセス」の「状況」に書いてあるホスト名でアクセスできます。私の場合、「mba-ataka.local」ですから、Safari で mba-ataka.local/xcode を開きます。

空の Bot 画面が表示されるでしょう。

XCode の設定

XCode を起動して XCode > Preferences > Accounts を開きます。左下の「+」ボタンを押して、「Add Server...」を選択します。Bot で使う X Server を選びます。ご丁寧にサーバーが選択画面に現れています。これを選んで先に進むと、次の様なエラーが出ました。

The Xcode Service is not enabled on the server 'mba-ataka.local'. Contact the administrator for assistance.

仕方がないので、「Or enter a server address:」に「localhost」と入力して「Next」ボタンを押します。

xcode1

お次はユーザー名とパスワードの入力です。

ユーザー名にフルネーム「安宅 (会社)」を入力すると、ユーザー名とパスワードが違うと怒られました。日本語が通らないのかしらん? では /Users の下にある名前ならどうかしらん。「ataka_work」を入力します。パスワードは「安宅 (会社)」のものを使います。

xcode2

フゥ、なんとか通りました。

Foo プロジェクトの作成

XCode で新しいプロジェクト「Foo」を作ります。Product Name は「Foo」にしました。~/project/Foo にプロジェクトを置きます。

xcode3

プロジェクトの置き場を決める時に、「Source Control」にチェックを入れます。また、Create git repository on 「My Mac」を「localhost」に変更します (もし時間があったら、X Server > XCode > リポジトリ を見てみましょう。「ホストされたリポジトリ」に「Foo」「http://mba-ataka.local/git/Foo.git」が追加されているのが見れるはずです)。

Bot を作る前にもう一つ、Scheme の設定変更が残っています。

XCode のメニューから Product > Scheme > Manage Schemes... を選びます。

xcode4

右端の「Shared」にチェックを入れます。

xcode5

設定を保存したら、git commit して push します。Bot は git のローカル・リポジトリーではなく、push 先のリモート・リポジトリーをベースに動いてくれるようです。

Bot の作成

ようやく Bot が作る準備が整いました。

XCode から Product > Create Bot... を選択します。

bot2

全てデフォールト値で構いません。「Next」です。

bot3

スケジュール設定です。時間ごと、日ごと、週ごと。もしくはコミット時。もしくは手動の三種類が選べます。今回はテストなので手動に当たる「Manual」を選択しておきます。慣れたら、Bot の設定を変えると良いと思います。

また、この画面では、Bot を実行する時に「解析」「テスト」「アーカイブ」も行なうかどうか設定できます。デフォールトでは全てにチェックが入っています。そのままにしておいて良いでしょう。「Cleaning」は Bot 実行前に clean を実行するかどうかです。デフォールトではオフです。

bot4

デバイスの設定画面です。デフォールトでは全ての iOS デバイスになっています。私は「Specific Devices」から「iPhone Retina (4-inch)(7.0)」と「iPhone Retina (3.5-inch)(7.0)」を選びました。

bot5

最後はメール通知の設定です。「Create Bot」を押して Bot を完成させます。

自動で Bot が走って、結果が表示されます。ウェブ・ブラウザーでは http://localhost/xcode から確認できます。上のスクリーン・ショットと同じになったら成功です。

もう一度 Bot を実行

上のスクリーン・ショットでは一つテストがエラーになっています。おざなりですが、直してみます。

Foo Project から FooTests > FooTests.m を開きます。この中の testExample が原因です。

- (void)testExample
{
    XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__);
}

必ず成功するように変えてみます。

- (void)testExample
{
    XCTAssertTrue(true, @"Test Example for \"%s\"", __PRETTY_FUNCTION__);
}

変更したら push を忘れずに。

Safari から右上の「インテグレート」を押します。手動実行なので...ね。

bot6

結果は成功です。気持ちがいいですね。

Bot の実行をコミットごとにしたり、毎日にしたり、失敗したらエラー・メールを飛ばしたり、設定を変えてゆくともっと便利で楽になると思います。

Mac 版 Firefox で Redmine の枠が消えてしまうバグの修正方法

2013年04月15日
区分
Redmine
報告者:
ataka

こんにちは、ataka です。

今回も、Redmine の話をつらつらと書き連ねてみます。

Redmine をアップグレードしてからというもの、Mac 版 Firefox で嫌らしい現象が起きるようになりました。それは、Redmine の「更新」ボタンを押すと、フォームの枠がマウスホバーに応じて消えてしまうという現象です (私はメインに Linux を使っているので、Mac 使いの方にその現象を見せてもらったのですが)。

さて、困ったなと悩んでいたら同じ現象で悩んでいるツイートに出会いました。

当に同じ症状です。このツイートに @g_maeda さんがリプライを付けていました。URL が一つ。

Redmine 本家のチケットで、パッチも上がっていますが、他の影響があってまだ Redmine 本家に取り込まれる様子はなさそうです。パッチはたった一行なので、取り込んでみました。対象のファイルは public/stylesheets/application.css。最新 Redmine ソースコードに対するパッチは以下の通りです:

diff --git a/public/stylesheets/application.css b/public/stylesheets/application
.css
index 33add95..a1ebdc9 100644
--- a/public/stylesheets/application.css
+++ b/public/stylesheets/application.css
@@ -469,7 +469,7 @@ p.pagination {margin-top:8px; font-size: 90%}
   clear:left;
 }

-html>body .tabular p {overflow:hidden;}
+html>body .tabular p {overflow:visible;}

 .tabular label{
   font-weight: bold;

対策だけなら他にも

  • テーマを farend_basic に差し替える
  • テーマを farend_fancy に差し替える

といった方法もあるそうです。

ちなみに前田さんは、「入門Redmine Linux/Windows対応」の作者で、Redmine のコミットも精力的になさっていらっしゃいます。前田さん、本当にありがとうございます。

Redmine のチケット・タイトルにチケット番号・プロジェクト名を含める

2013年04月09日
区分
Redmine
報告者:
ataka

こんにちは、ataka です。

挨拶記事の続きで、Redmine のチケット・タイトル文について。

過去記事「Stumpwm で Redmine のチケットのタイトルを簡単にコピペ」における tahara さんの言葉を引用します。

Redmine を 0.8.5 というすごく古いものか最新にアップデート (中略) チケット詳細画面で以前はチケットの ID とタイトルが同じ行に 並んで表示さていたのに、別の行に表示されようになってしまいました。

これから

これになった

git のコミットメッセージに

refs #9999 いこーよ: 口コミタグ付大作戦!

というようなコメントを入れていたので、簡単にコピペできないのは大きな問題です。

はい。git にコミット・ログを残す場合、大きな問題です。

幸いなことに一行の修正だけで旧スタイルに戻りましたので、patch を載せます。

diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb
index 816b227..c0aff1e 100644
--- a/app/helpers/issues_helper.rb
+++ b/app/helpers/issues_helper.rb
@@ -68,7 +68,7 @@ module IssuesHelper
       s << '<div>' + content_tag('p', link_to_issue(ancestor, :project => (issu
e.project_id != ancestor.project_id)))
     end
     s << '<div>'
-    subject = h(issue.subject)
+    subject = h("##{issue.id} #{issue.project}: #{issue.subject}")
     if issue.is_private?
       subject = content_tag('span', l(:field_is_private), :class => 'private') + ' ' + subject
     end

ね、簡単でしょ。これで旧スタイルに戻ります。プロジェクト名が要らない場合は #{issue.project} を消して下さい。

これなら修正点が小さいので、最新版にアップグレードする時も安心です。子チケットを作っても問題なしです。

最後に、弊社ではエンジニアデザイナ募集をしています。 まずはランチを食べながらお話だけでも!

2013-02-27 入社の安宅です

2013年04月09日
区分
あいさつ
報告者:
ataka

はじめまして。

2013 年 2 月 27 日に入社した安宅正之と申します。システム・チームの一員として微力を尽くしています。

入社して、随分と自由に仕事をさせてもらっています。与えられた「自由」に対して、見合う結果を返せているかというと、力不足を痛感する毎日ですが... こればかりは日々努力を重ねるしかないと感じています。

幸いなことにチャレンジする機会は沢山あるので、

  • Redmine を最新版にアップグレードしたり
  • 自分で nginx サーバーを立ててみたり
  • RSpec を使ったテスト駆動開発に取り組んでみたり
  • 社内に自分用ツールの git リポジトリーを立てさせてもらったり

と、飽きることがありません。学んだことを自分のブログに技術情報メモとして残す自由があるのも、ブロガーとしては嬉しいところです。そのせいか、こちらの技術ブログに顔を出すのがすっかり遅くなってしまいました。

ここで、話を閉じるのも区切りが悪いので、先の記事tahara さんが書いた Redmine のチケット・タイトルの問題を連投してみます。

技師部隊からの
お知らせ

【求人】エンジニア募集しています。

本頁の来客数
八十七万千百七十六名以上(計測停止中)

メンバー一覧

アクトインディ技師部隊員名簿

アクトインディ技師部元隊員

アクトインディへ

カテゴリー

アクトインディ

aaaa