在Swift中获取Cocoa Touch Framework项目版本string

Cocoa Touch框架支持版本控制,可以在版本控制部分的“ 生成设置”中find。

要在运行时访问这个值,我们可以使用FrameworkVersionNumberFrameworkVersionString[]variables,这些variables是我们作为构build过程的一部分自动生成的。

在使用Swift项目时,可以在Objective-C兼容性头部的顶部find自动生成的项目:

 //! Project version number for Framework. FOUNDATION_EXPORT double FrameworkVersionNumber; //! Project version string for Framework. FOUNDATION_EXPORT const unsigned char FrameworkVersionString[]; 

但是,虽然FrameworkVersionNumber可以从Swift访问,但FrameworkVersionString[]不是。 实际上查看框架模块的内容,我可以看到只有第一个variables暴露给Swift:

 //! Project version number for Framework. var FrameworkVersionNumber: Double 

这个问题是因为FrameworkVersionNumber是一个Double ,所以像3.2.1这样的任何版本号都可以简单的变成3.200000 …

有没有人知道这是否是我的项目设置中的缺陷,Xcode中的错误,或者是否有方法在Swift中以String或数组的forms获取框架版本,以便提供比major.minor更细的版本控制?

实际上,我发现这个问题有一个潜在的解决方法,它不是那么干净,但它确实有效:

默认情况下,当Xcode创build一个框架时,它将Version设置为1.0 ,并将Build设置$(CURRENT_PROJECT_VERSION) ,因为这个值实际上是从Build Settings> Versioning中的Current Project Version字段复制的。

所以你可以在运行时获得这个值,如下所示:

 let bundle = NSBundle(identifier: "com.yourframework.Framework")! // Get a reference to the bundle from your framework (not the bundle of the app itself!) let build = bundle.infoDictionary![kCFBundleVersionKey] as! String // Get the build from the framework's bundle as a String 

这确实有用,但是对于曾经(我相信)可以从Objective-C中的一个variables中很容易获得的东西来说,这感觉是非常迂回的。