お正月休みにボーッとしておりましたら、ふと、「Xcode のビルド状況を Evernote に送ったら面白いんじゃね?」と思いついたので、やってみました。
現状では収集できる情報が少なく、日時、Debug/Release、build/archive、くらいしかログに残らないため、「ああ、あのときはテンパって何度もビルド繰り返してたっけ」などと遠い目になるくらいにしか役に立ちませんが、よろしければ、どうぞ。
必要なもの
Xcode
Evernote
IFTTT
PHP
まず IFTTT でレシピを作ります。レシピの基本は、「メールを受信したらEvernoteに送る」になります。「Email」と「Evernote」をあらかじめアクティベートしておきます。
IFTTTで「Email」を使ってメールをトリガーとして使うときは、送信元を限定するためメールアドレスを認証します。入力したメールアドレスにPINコードが送信されるので、入力すると認証が完了します。
おおまかな手順は下記のようになります。
1.Createをクリック
2.IfThisThenThat と表示されるので水色になっているThisをクリックします。
3.メールアイコンをクリックします。
4.選択が表示されるので「Send IFTTT any email」をクリックします。
5.Create Trigger をクリックします。
6.続いてthatをクリックします。
7.Evernoteをクリックします。
8.Evernoteに対するActionは「Append to note」を選択します。
これを選択すると、同じタイトルのノートが存在しないときだけ作成し、存在するときは追記されるようになります。(タイトル名で判定されるところがポイントです)
9.Append to noteのパラメータは下記のようにしました。
Title: {{Subject}}
Body: {{Body}} ←デフォルトではHTMLBodyなのでBodyに変更します
Notebook: XcodeBuildLog
Tags: XcodeBuildLog
Notebook と Tags はお好みのものを設定してください。Notebook を空欄にするとデフォルトのノートブックに保存されるようですが、件数が増えそうなのであまりお勧めできません。
xcode_ifttt_action.png
次にPHPスクリプトを手元のMacの適当なフォルダに入れます。今回はとりあえず ~/xcode/ifttt_build.php というファイル名で保存しました。

#!/usr/bin/php
<?php
date_default_timezone_set(‘Asia/Tokyo’);
$to = “trigger@ifttt.com”;
$from = “username@somewhere.xx.xx”; //認証済みメールアドレス
$additional_headers = “From: $from”;
$product_name = $_ENV[‘PRODUCT_NAME’]; //プロダクト名
$configuration = $_ENV[‘CONFIGURATION’]; //Debugなど
$xcode_version_actual = $_ENV[‘XCODE_VERSION_ACTUAL’]; //463
$action = $_ENV[‘ACTION’]; //buildなど
$project_dir = $_ENV[‘PROJECT_DIR’]; //ログ等にアクセスする場合
//引数が指定されていたら上書きする
if($argc > 1) $product_name = $argv[1];
$issue_count = 0;
//parse_latest_log();
//日ごとのビルド記録
$subject = date(“Y/m/d”).” Xcode Build”;
$time = date(“Y/m/d-H:i:s”);
$body = “$time $product_name $configuration $action”;
mail($to, $subject, $body, $additional_headers);

IFTTTでは認証済みのメールアドレスがFromにセットされていれば受け付けてくれるようですので、PHPのmail()関数で送信することにしました。Fromを設定できればシェルスクリプトでも構わないと思います。
メールの Subject に日付をセットしています。それが Evernote のノートのタイトルになるようになっていますので、1日あたり1ノートが作成され、日付が変わると新しいノートが作られるようになっています。

chmod 755 ifttt_build.php

実行可能フラグを立てておきます。
最後に、Xcodeのプロジェクトにスクリプトを設定します。
プロジェクトのTARGETを選択し、Build Phases を選択すると、右下に Add Build Phase というボタンがあるのでクリックし、「Add Run Script」を選択します。
そうすると、Run Script という項目が追加されるので、Shell の下の欄に先ほどのPHPスクリプトを呼び出すスクリプトを記入します。

cd /Users/(ユーザー名)/xcode
./ifttt_build.php (ProductName)

xcode_run_script.png
(ユーザー名)のところはお手元の環境にあった内容にしてください。というか、パス名全体を適切なものにしてください。
(ProductName)のところはプロダクト名を指定します。省略するとプロジェクトに設定されている名前が使用されますが、デバッグ中など別の名前を指定したいときはここにセットした名前が使われます。
ここまでで、ビルドを実行した日時やプロダクト名がEvernoteのノートにずらずらと追加されていきます。

2014/01/08-09:08:51 TestProduct Debug build
2014/01/08-09:12:20 TestProduct Debug build
2014/01/08-09:40:15 TestProduct Debug build
2014/01/08-09:41:35 TestProduct Debug build
2014/01/08-09:41:59 TestProduct Debug build

ちなみに Log Navigator で閲覧できるログの内容は、$project_dir/Build/Logs の中にある *.xcactivitylog というファイルに保存されています。gzip で圧縮されているということはわかったのですが、それ以上の仕様が分からないので、PHPで無理矢理文字列操作を行なってみましたが、いまひとつという段階になっています。未完成なので公開は控えさせていただきたいと思います。
ちなみに、Xcode メニューの中にある Behavior から、ビルド成功時やビルド失敗時にスクリプトを呼び出す設定を行なうことができます。最初はこちらでやろうと思ったのですが、ビルド対象のプロダクト名を取り出すことができないようなので、プロジェクトの Run Script にしました。プロダクト名が取り出せれば、こちらも便利だと思うのですが。。。

カテゴリー: 開発関係

0件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください