2009-09-12

Aboutパネル - リビジョン番号を自動でplistに設定する(2)


前回リビジョン番号の自動置換に成功しましたが、もっと楽をするため、そしてブログネタのため、以下の2つをやってみました。


  • 2台の Mac で Subversion のパスが違った場合、自動で判別して正しいパスを使う。

  • CFBundleGetInfoString (Finder の情報ウインドウのバージョン欄はなぜかこっちを使う)の入力で楽をする。


  • しょっぱなからなんですが、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

    0 件のコメント: