BlueberryStream Technical

@blueberrystreamが技術的なことを書くときに使うblogです。

Growlを自力でビルドする

この記事はGrowlを自力でビルドする - BlueberryStream@ついったー部 - はてなグループ::ついったー部で書いたものを移植したものです。


ちょっと前、といっても半年以上前?だっけか、それくらいからGrowlが有料になってしまったけど、変わらずにオープンソースなままなのでビルドする人はどうぞって状態になっていて、んじゃいっちょビルドしてみますかーってことで試行錯誤したので最善な手順を書き残しておこうかなって。

環境

MacOSX Mountain Lion

手順

  1. App StoreからXcodeをインストールする
    • 1.7GBくらいあってすごい時間かかった。App Storeってなんであんなにダウンロード遅いんだろうね。
  2. $ defaults write com.apple.dt.XCode IDEIndexDisable 1
  3. Apple's Command Line Developer Toolsをインストールする
    • Xcodeから入れられるらしい。知らずに専用のpkgをDLしてインストールした。
  4. $ xcodebuild -license
  5. MacPortsをpkgからインストールする
  6. Mercurialをインストールする
    1. $ port installed mercurial
    2. $ port deps mercurial
    3. $ port variants mercurial
    4. $ sudo port install mercurial
    5. $ port installed mercurial
  7. Growlソースコードを取得する
    1. 取得する前にワークスペースを mkdir & cd しておくとか
    2. $ export LC_ALL="en_US.UTF-8"
    3. $ hg clone https://code.google.com/p/growl/
    4. $ hg tags | sort
      • Growl.appのlatest stableのtagを覚えておく
    5. hg update "Growl.app 2.0"
      • tagは覚えておいたやつを入れる
  8. Growlのビルド時に必要になるコードサイニング証明書を作る
    1. ユーティリティからキーチェインアクセスを起動
    2. メニューのキーチェインアクセス→証明書アシスタント→証明書を作成...を選択
    3. [続ける]をクリック
    4. 以下の内容で入力
      • 名前: 3rd Party Mac Developer Application: The Growl Project, LLC
      • 固有名のタイプ: 自己署名ルート
      • 証明書のタイプ: コード署名
    5. [作成]をクリックして[続ける]をクリックして[完了]をクリック
    6. キーチェインアクセスの分類から自分の証明書を選択して 3rd Party Mac Developer Application: The Growl Project, LLC をダブルクリック
    7. [信頼]を開いてこの証明書を使用するとき: 常に信頼 にして閉じる
  9. Growl.xcodeprojを開く
  10. ビルドする…といきたいところだけれど、ここからがまたひどい。
Growl.app 2.0で手直ししないといけないところ

めんどうなのでdiffでそのまま

diff -r 30319c3f160c Core/Source/GrowlOnSwitch.h
--- a/Core/Source/GrowlOnSwitch.h	Wed Sep 05 21:41:58 2012 -0500
+++ b/Core/Source/GrowlOnSwitch.h	Mon Oct 08 18:01:09 2012 +0900
@@ -9,7 +9,10 @@
 #import <Foundation/Foundation.h>
 #import "TMSliderControl.h"
 
-@interface GrowlOnSwitch : TMSliderControl
+@interface GrowlOnSwitch : TMSliderControl {
+    NSTextField *_onLabel;
+    NSTextField *_offLabel;
+}
 
 @property (nonatomic, retain) IBOutlet NSTextField *onLabel;
 @property (nonatomic, retain) IBOutlet NSTextField *offLabel;
diff -r 30319c3f160c Extras/HardwareGrowler/HardwareGrowler/AppDelegate.h
--- a/Extras/HardwareGrowler/HardwareGrowler/AppDelegate.h	Wed Sep 05 21:41:58 2012 -0500
+++ b/Extras/HardwareGrowler/HardwareGrowler/AppDelegate.h	Mon Oct 08 18:01:09 2012 +0900
@@ -54,6 +54,8 @@
 	NSString *iconInDock;
 	NSString *iconInBoth;
 	NSString *noIcon;
+    
+    ProcessSerialNumber previousPSN;
 }
 
 @property (nonatomic, retain) IBOutlet NSString *showDevices;

つづきの手順

  1. XcodeのメニューのProduct→Buildで一度Debugビルドしておく
    • コードサイニング関係で失敗するときはプロジェクトの設定でコードサイニング証明書が先の手順で作ったものになるようにがんばる。
  2. Product→Build For→ArchivingでReleaseビルド
  3. /Users/<UserName>/Library/Developer/Xcode/DerivedData/Growl-/Build/Products にDebugフォルダやReleaseフォルダがあるのでお好きなビルドのGrowl.appを選んでアプリケーションフォルダに突っ込んで起動

HardwareGrowlerのビルド

HardwareGrowlerのビルドについても書きたかったけど、やることは基本的にはGrowl.appと同じ。hg updateで目的のtagにするのだけ忘れないように。なんかビルドエラー出たらがんばってコードを直すとかプロジェクトの設定いじってコードサイニングのところいじるとか。
diffは上記のやつに混じっちゃってるっぽい。