我知道Mac应用程序中的应用程序版本是由位于软件包内的 Info.plist 文件定义的。
我的案例中的应用程序版本号不仅提供了信息,还定义了我的应用程序中的一些行为。 如果有人编辑此文件,我的应用程序可能会中断。最快的解决方案是在可执行文件中编译应用程序版本。
是否存在在可执行文件中编译应用程序版本的常见模式?
应用程序版本应该是静态/全局恕我直言。
答案 0 :(得分:2)
在目标的构建设置中,转到版本控制类别,然后将Versioning System
从None
更改为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;
然后你可以像普通变量一样使用它们。