前回リビジョン番号の自動置換に成功しましたが、もっと楽をするため、そしてブログネタのため、以下の2つをやってみました。
しょっぱなからなんですが、Snow Leopard の Finder の情報ウインドウのバージョン欄、Leopard から変わっていて、CFBundleGetInfoString はどこにも使わなくなってました。
やっとシンプルになって良かった。
気を取り直して最初の Subversion パスの判断。
前回のあの perl スクリプトを改造します。
perl もさっぱりなので、いつにも増してコードが見苦しいと思いますがすいません。
パスを変数に入れる所で、存在するディレクトリかチェックしてみました。
とりあえず希望通りに動いたのでOK!
### HOME ###
my $REV = `/usr/bin/svnversion -n ./`;
if (-d "/opt/subversion/bin"){
### OFFICE ###
$REV = `/opt/subversion/bin/svnversion -n ./`;
}
次はプロジェクトに version.h というファイルを追加して、中にはアプリのリリースバージョンだけ書いておきます。
そして前回 CFBundleVersion には [BUILD] を入れておいて置換したように、CFBundleShortVersionString は [APP_VERSION]、CFBundleGetInfoString は [VERSION_INFO] を入れておくことにします。
CFBundleGetInfoString は version.h から持ってきたバージョン番号と、Info.plist に設定してある NSHumanReadableCopyright を使って
アプリ名 version アプリバージョン番号 著作権表示
という形になるようにします。
私は NSHumanReadableCopyright を Info.plist に書いちゃうのですが、 InfoPlist.strings の方に書く方は、そっちのファイルから読むように変更してください。
[BUILD] を置換してる行の次にコードを挿入します。
# version.h
open(FH, "$ENV{SOURCE_ROOT}/version.h");
my $appversion = join("", <FH>) or die "$0: $ENV{SOURCE_ROOT}/version.h: $!";
close(FH);
$info =~ s/([\t ]+<key>CFBundleShortVersionString<\/key>\n[\t ]+<string>)\[APP_VERSION\](<\/string>)/$1$appversion$2/;
# Info.plist NSHumanReadableCopyright
my $copyright = $info;
if ($copyright =~ /[\t ]+<key>NSHumanReadableCopyright<\/key>\n[\t ]+<string>(.*?)<\/string>/) {
$copyright = $1;
} else {
$copyright = "Err";
}
$info =~ s/([\t ]+<key>CFBundleGetInfoString<\/key>\n[\t ]+<string>)\[VERSION_INFO\](<\/string>)/$1$ENV{PRODUCT_NAME} version $appversion, $copyright\.$2/;
ビルドしてみると、アプリの Info.plist はきちんと書き変わっています。
これで少しはバージョン上げ忘れが減るといいなー。
クリボウの Blogger Tipsさんのクリボウの Blogger Tips: 「Blogger Syntax Highlighter」を Perl 対応にする方法エントリを参考にさせて頂いて Blogger Syntax Highlighter を導入してみました。
AppleScript には対応してないのが残念。
byT