在Swift中获取Cocoa Touch Framework项目版本string
Cocoa Touch框架支持版本控制,可以在版本控制部分的“ 生成设置”中find。
要在运行时访问这个值,我们可以使用FrameworkVersionNumber
和FrameworkVersionString[]
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中很容易获得的东西来说,这感觉是非常迂回的。
- 无法使用AudioFileStreamOpen的AudioFileStream_PacketsProccallback中的AudioConverterFillComplexBuffer将MP3转换成PCM
- 如何在Swift中使用enum和switch()与UITableViewController
- 在Swift中从另一个ViewController访问variables
- 如何在Swift中使用NSCoding存储从ViewController生成的值
- 无法将types“Float”的值转换为期望的参数“CGFloat”
- 如何使用Alamofire上传MultipartFormData进行身份validation
- 如何从同一个故事板访问Objective-C和Swift类?
- 如何检查iOS设备是否使用Swiftlocking/解锁?
- 不能赋值'colorTouched'是'let'常量