読者です 読者をやめる 読者になる 読者になる

itochin2の日記(仮)

主に備忘録。Perl、MySQL、Unity、開発管理などについて情報を残していきたい。

Growl 2.0を自力ビルドした時のメモ

growlはMac OS X Lionから有料アプリになったけど、
ソースコードは公開されているので、自力でビルドすればOKと
Google先生が教えてくれた。

ビルドした環境

・mac 10.8.2
・growl-2.0.1
Xcode 4.6.1

参考ブログ

大体のことは、この記事を参考にしたら出来た。ありがたき幸せ。
[Growlを自力でビルドする]
http://blueberrystream-technical.hatenablog.com/entry/2012/10/08/190410

growl-2.0.1では、「Growl.app 2.0で手直ししないといけないところ」の修正は
すでに反映済みで不要だった。

ビルドエラーの対応

なんかXcode4.6だと、ビルドエラーが出るっぽい。

エラーその1:GrowlDisplayWindowController.m
NSInteger startPercentage = (NSInteger) NSMapGet(startTimes, transition);
NSInteger endPercentage   = (NSInteger) NSMapGet(endTimes, transition);

Error:Cast from function call of type 'void *' to non-matching type 'NSInteger' (aka 'long')

NSInteger型(別名long型)にvoid*型はキャストできないよ、と言っている。
なので型キャストを外した。

NSInteger startPercentage = NSMapGet(startTimes, transition);
NSInteger endPercentage   = NSMapGet(endTimes, transition);
エラーその2:GrowlSMSDisplay.m
CFStringRef contentLength = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("%l"), CFDataGetLength(postData));

Error:Format specifies type 'unsigned int' but the argument has type 'CFIndex' (aka 'long')

フォーマットのタイプがunsigned intだけど、引数はCFIndex型(別名long型)になってるよ、と言っている。
なのでフォーマットタイプを変更した。

CFStringRef contentLength = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("%lu"), CFDataGetLength(postData));


無事コンパイル成功!

他にもコードサイニング証明書でエラー出てたけど、いつの間にか出なくなってた。
avast!消した後からだったような・・・

おまけ

ついでに、ビルドしたアプリが
/Users/xxxx/Library/Developer/Xcode/DerivedData/Growl-/Build/Products
にあるんだけど、Finder開いてもLibraryってフォルダないじゃん!ってなったけど
デフォルトで非表示になってるだけだった。

常に表示しておくには、ターミナルでコマンドを叩く。
chflags nohidden ~/Library/



170円くらい払ってしまおうかと思ったけど、頑張ってよかった。
BUILD SUCCEEDEDを見た時の感動はプライスレス。