在Xcode工作区中获取库版本号

时间:2013-12-10 01:37:18

标签: ios xcode xcode5 versioning workspace

问题

我正在开发一个Xcode项目,该项目旨在构建到一个库中,并作为CocoaPod或工作区包含在其他项目中。我正在使用agvtool来设置捆绑和营销版本。我想添加一个简单的方法来读取API的一部分作为API的一部分,它变成了比我预期的更复杂的东西。我最初实现了我的versionString方法,如下所示:

+ (NSString *)versionString {
  return [NSString stringWithFormat:@"%@.%@", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"], [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]];
}

但是,当工作区中包含库时,CFBundleShortVersionStringCFBundleVersion会从工作区中获取其值,来自库!因此,如果库是营销版本1.2并且捆绑版本是3,但它包含在营销版本2.0和捆绑版本130的工作空间中,则此方法将返回2.0.130而不是1.2.3

有没有人知道我可以访问图书馆CFBundleShortVersionString而不是工作区的方式?

其他信息

我开始深入研究agvtool的一些比较模糊的方面,我发现了一种可靠的方式来访问捆绑版本,但我真的更喜欢的是营销版本,因为那是什么我会用来表示API兼容性。

agvtool会在您的构建设置中设置Current Project Version属性,因此如果您将Versioning System设置为Apple Generic,Xcode将生成一个带有一些全局常量的.c文件你作为构建过程的一部分。要获得对这些值的访问权限,您需要做的就是在自己的标题中公开它们,如下所示:

extern const unsigned char {PRODUCT NAME}VersionString[];
extern const double {PRODUCT NAME}VersionNumber;

当我看到这个时,我想我肯定是在正确的轨道上。 VersionNumber确实是3.0,但VersionString是@(#)PROGRAM:{PRODUCT NAME} PROJECT:{PRODUCT NAME}-3

似乎我可以通过在构建设置中设置Generated Versioning Variables参数来获得我想要的东西,但我也怀疑我是从错误的方向开始的,而我只是得到了进一步偏离轨道。

非常感谢任何帮助。

0 个答案:

没有答案