Cocoa Touch Frameworks提供版本控制支持,可以在版本控制部分的构建设置中找到.
要在运行时访问此值,我们可以使用FrameworkVersionNumber和FrameworkVersionString []变量,这些变量是我们在构建过程中自动生成的.
使用Swift项目时,可以在Objective-C兼容性标头的顶部自动生成这些项目:
//! Project version number for Framework. FOUNDATION_EXPORT double FrameworkVersionNumber; //! Project version string for Framework. FOUNDATION_EXPORT const unsigned char FrameworkVersionString[];
但是,虽然可以从Swift访问FrameworkVersionNumber,但FrameworkVersionString []却不是.实际上看一下框架模块的内容,我可以看到只有第一个变量暴露给Swift:
//! Project version number for Framework. var FrameworkVersionNumber: Double
这个问题是,由于FrameworkVersionNumber是Double,任何版本号如3.2.1只需更改为3.200000 ……
有谁知道这是否是我的项目设置中的缺陷,Xcode中的一个错误,或者是否有一种方法可以将Swift中的框架版本作为String或数组获取,这样我可以提供比major.minor更精细的版本控制?
解决方法
我实际上找到了这个问题的潜在解决方法,它不是那么干净但它确实有效:
默认情况下,当Xcode创建框架时,它将Version设置为1.0,Build设置为$(CURRENT_PROJECT_VERSION),这很好,因为这个值实际上是从Build Settings>中的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中的变量轻松访问的东西感觉非常迂回.