開発ブログ - FireMonkey - OS X でバージョン情報を取得する
OS X でバージョン情報を取得する
この投稿は Delphi Advent Calendar 2013 の 12/8 の記事です。
アプリケーションを作るときに必ず作るのは About ダイアログですよね。
About ダイアログにはバージョン情報を表示すると思いますが、バージョン情報はIDE上でアプリケーションに設定した値を使いたいものです。
このバージョン情報、
Windows で バージョン情報を取得する方法については、ネット上にたくさん情報があります。
たとえば→
リソースにあるバージョン情報を取得したい - Delphi Tips
では、MacOSX 用のアプリケーションの場合はどうすればいいのでしょう?
Objective-C のコード
Objective-C の場合は次のようなコードで Short Version Stringが取得できます。
NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
from EZ-NET: プログラム内から Info.plist の内容を参照する - Objective-C プログラミング
Delphi で書いてみよう
それでは Delphi で書いてみましょう。
function GetAppString(const Key: String): String;
var
AppBundle: NSBundle;
BundleKey: Pointer;
version: NSString;
begin
AppBundle := TNSBundle.Wrap(TNSBundle.OCClass.mainBundle);
BundleKey := (NSSTR(Key) as ILocalObject).GetObjectID;
version := TNSString.Wrap(AppBundle.infoDictionary.objectForKey(BundleKey));
Result := UTF8ToString(version.UTF8String);
end;
function GetShortVersionString: String;
begin
Result := GetAppString('CFBundleShortVersionString')
end;
function GetBundleVersionString: String;
begin
Result := GetAppString('CFBundleVersion');
end;
ちなみに MacOSX ではバージョン文字列として BundleVersion と ShortVersionString があります。
どう使い分けるのでしょう?
以下は プロパティリスト キー リファレンス - ポッチンコンバート からの引用です。
CFBundleShortVersionString
このキーは、アプリケーションのリリースされた回数を識別する、バンドルのリリースバージョン番号【release version number】を指定します。
CFBundleVersion
このキーは、バンドルの(リリースされた、またはリリースされていない)回数を識別する、バンドルのビルドバージョン番号【build version number】を指定します。
Delphi で作ったアプリケーションの CFBundleVersion は x.x.x という形になっていて、それぞれメジャーバージョン、マイナーバージョン、ビルドの番号を表しています。
ShortVersionString を表示すると x.x という形になってビルド番号は表示されません。
これは、Finder から情報表示したときのバージョン情報と同じ形です。
About に表示するのはもう少し細かいバージョンを表示したいので、私は CFBundleVersion の方を表示するようにしています。
こちらであれば x.x.x の形で表示されます。
[参考サイト]
リソースにあるバージョン情報を取得したい - Delphi Tips
EZ-NET: プログラム内から Info.plist の内容を参照する - Objective-C プログラミング
プロパティリスト キー リファレンス - ポッチンコンバート