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

    2009-09-11

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



    タイトルだけだとなんのことやらですが、↑これです。
    アプリの「○○について」のウインドウに表示される数字です。

  • 左側のはアプリバージョン(Info.plist の CFBundleShortVersionString)

  • 右側のはビルドバージョン(Info.plist の CFBundleVersion)


  • というのが純正アプリを見ると通例みたいです。
    ビルドバージョンてビルド回数ってことなんでしょうか、でもそんなものは数えてません。
    バージョン管理システムのリビジョン番号っぽいものを使っているアプリが多い気がします。

    と言う訳で丁度 Subversion でプロジェクト管理をしているので、ここにリビジョン番号を入れようと思います。
    でも現在のリビジョン番号を毎回調べて Info.plist に入力するというのは大変面倒です。
    Xcode はビルド時に任意のスクリプトを実行できるようですし、なんとか自動化したいと思います。
    ウロウロして見つけたここの perl スクリプトを使ってみます。

    設定の仕方 いち


    Xcode で自動化したいプロジェクトを開いて「グループとファイル」>「ターゲット」を展開してアプリを選択>右クリックで「新規スクリプトを実行」
    これで「ターゲット」のアプリを展開すると「スクリプトを実行」が追加されています。


    設定の仕方 に


    手順1で追加した「スクリプトを実行」を右クリックして「情報を見る」してウインドウを開きます。
    「シェル」には perl のパスを(わからない方はターミナルで which perl すると表示されます)
    「スクリプト」には先ほどの perl スクリプトをコピペします。


    この時

    my $REV = `/usr/bin/svnversion -n ./`;

    ここは`/自分の Mac の Subversion パス/svnversion -n ./`; に変えます。

    設定の仕方 さん


    「ターゲット」のアプリの「情報を見る」>「プロパティ」>「バージョン」に [BUILD] を設定します。


    Info.plist から設定する場合はこんな感じ。


    これでビルドする度に、現在のリビジョン番号が[BUILD]と置換され、自動的に設定されます。便利!

    CFBundleVersion とか CFBundleGetInfoString とか区別がつかないって方は MyCometG3 さんのinfo.plistとか。 [開発系とか]エントリーが理解しやすかったです。



    何でもいいから更新しよう月間続いての更新予定(成功したら)

  • 2台の Mac で Subversion のパスが違ったので片方でエラーになる…。自動でどうにか判別できるといいなぁ。

  • CFBundleShortVersionString と CFBundleGetInfoString (Finder の情報ウインドウのバージョン欄はなぜかこっちを使う)は同じアプリバージョン値だから、ちょっと楽できそう。



  • byT

    2009-09-06

    Applescript/HTMLシンタックスカラーリング


    何でもいいから更新しよう月間その2。

    AppleScript を Blog に張るのにシンタックスカラーリングしてくれるモノを、かなり今更ながら探してみました。

    最初に見つけたわかばマークのMacの備忘録さんで紹介されていたScript factoryさんの AppleScriptHTML が完全に希望通りのアプリなのですが、Snow Leopard のせいかエラーが出てうまく動かない。
    マメに更新されているようなので、きっとそのうち対応して頂けると期待しつつ今回は他の方法を探すことに。


    10/26のアップデートで Snow Leopard に対応したようです。
    続・Applescript/HTMLシンタックスカラーリング

    (11/03追記)


    次に発見したのがザリガニが見ていた...。さんの
    シンタックスハイライトなHTMLに変換するオブジェクト指向AppleScript その1
    シンタックスハイライトなHTMLに変換するオブジェクト指向AppleScript その2
    シンタックスハイライトなHTMLに変換するオブジェクト指向AppleScript その3
    シンタックスハイライトなHTMLに変換するオブジェクト指向AppleScript その4
    の AppleScript。

    このスクリプトのすごい所は、リッチテキスト形式でカラーリングやら太文字やらにされていれば AppleScript に限らず変換可能な所なのです。
    一番前面のアプリウインドウからリッチテキストを取得して変換してくれるよう。
    AppleScript 以外のソースコードにも色々使えそうです。

    準備


    シンタックスハイライトなHTMLに変換するオブジェクト指向AppleScript その4
    の最後辺りのダウンロードページへのリンクから「_lib.scpt」「_rtf.scpt」「rtf_to_html.scpt」の3つのソースを貰ってきます。
    ※私は一番上のダウンロードボタンが使えなかったので、それぞれのソースの raw リンクからダウンロードしました。この方法だと?AppleScript エディタでスクリプトとして保存し直さないとだめでした。

    これを「ユーザー/ライブラリ/Scripts」に置いて準備完了です。
    ※Snow Leopard からスクリプトメニューの表示は AppleScript エディタの環境設定で行うようになりましたので注意。

    いち


    変換したい AppleScript をコンパイルしてカラーリングされた状態にする。


    AppleScript エディタ(カラーリングされていれば、テキストエディットでも大丈夫)を一番手前にして、スクリプトメニューから「rtf_to_html.scpt」を実行

    さん


    クリップボードにHTML化された AppleScript が!


    ↓以前使った AppleScript もこんな感じになります。1色より確実に見やすい。
    Xillion Script Tipsさんのスクリプトリンク作成スクリプトで更に便利。




    on handle_string(s)
    try
    set tagString to s

    tell application "Finder"
    try

    set theFiles to selection

    repeat with theItem in theFiles

    -- Set Label Color On/Off
    -- set label index of theItem to 0

    -- Set SpotlightComment
    set newSptcomString to ""
    set sptcomString to comment of theItem
    if sptcomString is "" then
    set newSptcomString to tagString
    else
    set newSptcomString to sptcomString & " " & tagString
    end if

    set comment of theItem to newSptcomString

    end repeat

    open location "x-launchbar:hide"

    on error msg number val
    {errMsg:msg, errVal:val}
    end try
    end tell

    end try
    end handle_string






    byT

    Tagsのメニューバーアイコン



    何でもいいから更新しよう月間。

    Snow Leopard入れました。幸せになれました。
    んでアプリをインストールし直していて、ふとTagsのメニューバーアイコンが浮くなぁと思ったので作ってみました。
    元のも好きでずっと使っていたのですが、せっかくだから統一感を出してみようかと。

    TagMenuBar.zipをダウンロード後解凍し、 Tags/Contents/Resources の中に入れてTagsを再起動してください。

    ※元の画像「TagMenuBar.tiff」は戻すときに必要ですので上書き前に避けておいてください。


    byT