我目前正在尝试创建一种方法来在运行时记录我的 Pod 的当前版本,我想到了几种方法,但我想在这里问一下以确保我没有遗漏一些明显的东西。
到目前为止我做了什么:
发现 Cocoapods 生成一个
myPod-umbrella.h
头文件,导出以下内容:FOUNDATION_EXPORT double myPodVersionNumber; FOUNDATION_EXPORT const unsigned char myPodVersionString[];
他们只有
myPodVersionNumber
似乎可以访问,并且由于某种原因它总是 1.0,有没有办法让它正常工作,因为我觉得这是正确的方法,但我有配置错误。尝试获取构建框架的 Info.plist 并阅读那里的版本,但这似乎有点问题,我无法保证开发人员最终将如何处理 pod 并可能结束改变包的不同位置,甚至让项目无法访问它。
用版本号创建一个硬编码的属性,这显然有效,但它增加了很多出错的空间,并且真的感觉不是实现它的正确方法,但如果没有其他方法可以解决CocoaPods,我可能只需要这样做。
有一个构建步骤将读取 PodSpec 并生成一个简单的类,其中包含有关 Pod 的元数据,感觉比上一点好一点,但对于我正在寻找的东西来说仍然感觉有点矫枉过正。
有没有人有更好的主意或可以指出正确的方向?
我想要实现的是能够运行这样的东西
print("当前版本:\(myPod.version)
")
并让它在控制台中正确注销
#当前版本:1.2.0
最佳答案
使用 URLForResource 怎么样?使用您要求的打印语句在运行时很好地打印。
此版本将整个锁定文件打印到控制台。
override func viewDidLoad() {
super.viewDidLoad()
let url = NSBundle.mainBundle().URLForResource("/lockfilefolder/Podfile", withExtension: "lock")!
let data = try! String(contentsOfURL: url, encoding: NSUTF8StringEncoding)
print(data)
}
/* Prints */
// PODS:
// - Firebase/Analytics (3.3.0):
// - FirebaseAnalytics (= 3.2.1)
// - Firebase/Auth (3.3.0):
// - Firebase/Analytics (= 3.3.0)
// - FirebaseAuth (= 3.0.3)
// - Firebase/Core (3.3.0):
// - Firebase/Analytics (= 3.3.0)
// - Firebase/Database (3.3.0):
// - Firebase/Analytics (= 3.3.0)
// - FirebaseDatabase (= 3.0.2)
// TL;DR
下一个版本打印特定的行号。通过使用 componentsSeparatedByString("-")
我可以删除 pod 名称前的 -
字符,使其看起来更干净。这是有效的,因为锁定文件在 pod 名称列表中的每一行都使用了 -
。请注意,我们在这里使用的是 pathForResource
而不是 URLForResource
。
do {
if let path = NSBundle.mainBundle().pathForResource("/lockfilefolder/Podfile", ofType: "lock"){
let data = try String(contentsOfFile: path, encoding: NSUTF8StringEncoding)
let lockFileData = data.componentsSeparatedByString("-")
print("Current version: \(lockFileData[6])")
}
} catch let err as NSError {
print(err)
}
/* Prints */
// Current version: - Firebase/Core (3.3.0):
下一个版本我们打印两行。我们正在使用 data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet())
方法。在这种情况下删除 -
会变得冗长,因此不值得。
let url = NSBundle.mainBundle().URLForResource("/lockfilefolder/Podfile", withExtension: "lock")!
let data = try! String(contentsOfURL: url, encoding: NSUTF8StringEncoding)
let lockFileData = data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet())
print(lockFileData[72])
print(lockFileData[6])
/* Prints */
// COCOAPODS: 0.39.0
// - Firebase/Core (3.3.0):
关于ios - 在运行时获取特定 CocoaPods 版本的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38300945/