在可执行文件中编译应用程序版本的常用模式

时间:2011-09-10 10:09:08

标签: objective-c cocoa

我知道Mac应用程序中的应用程序版本是由位于软件包内的 Info.plist 文件定义的。

我的案例中的应用程序版本号不仅提供了信息,还定义了我的应用程序中的一些行为。 如果有人编辑此文件,我的应用程序可能会中断。最快的解决方案是在可执行文件中编译应用程序版本。

是否存在在可执行文件中编译应用程序版本的常见模式?

应用程序版本应该是静态/全局恕我直言。

1 个答案:

答案 0 :(得分:2)

在目标的构建设置中,转到版本控制类别,然后将Versioning SystemNone更改为Apple Generic。然后,每当您更改应用程序的版本时,请更改Current Project Version设置。如果您不更改其他构建设置,则每个构建将生成一个名为$(PRODUCT_NAME)_vers.c的文件,其中包含两个变量,定义如下:

const unsigned char $(PRODUCT_NAME)VersionString[] = "@(#)PROGRAM:$(PRODUCT_NAME) PROJECT:$(PROJECT_NAME)-$(CURRENT_PROJECT_VERSION)\n";
const double $(PRODUCT_NAME)VersionNumber = (double)$(CURRENT_PROJECT_VERSION);

对于版本号,第二个小数位后的任何内容都被截断,以便它可以表示为double。即,1.2.3存储为1.2。这两个变量也都具有used属性,因此如果您不使用它们,它们将不会被删除。

为了使用这些变量,您需要在它们将被使用的文件中将它们声明为extern。您可以在将使用它们的每个文件中执行此操作,也可以使用这些声明创建标头并将其包含在文件中。声明应如下所示:

extern const unsigned char $(PRODUCT_NAME)VersionString[];
extern const double $(PRODUCT_NAME)VersionNumber;

然后你可以像普通变量一样使用它们。