【发布时间】:2022-01-06 06:57:15
【问题描述】:
我的应用中有这样的代码:
NSString* version = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
在大多数情况下它有效,并返回 Bundle version,但有时(假设在 2% 的情况下)它返回 nil。
代码在函数[AppDelegate application:didFinishLaunchingWithOptions:]中被调用,在主线程中,一个应用在前台。
我可以想象这是一个 Apple 的错误,带有一些文件读取错误,但与罕见的 Apple 错误相比,该百分比相当高。
我也知道一个人可能会弄乱版本/捆绑包/Info.plist - 但对于这种情况,百分比太小了。
那么,第一个问题:在这种情况下,[[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey] 返回nil 的原因是什么?
第二个问题:你知道这些假设是否有意义/是否容易验证:
- 用户在更新后第一次启动应用,
[NSBundle mainBundle]变为完全配置之后application:didFinishLaunchingWithOptions? - 应用正在自动更新(来自 AppStore),用户打开它,系统当前正在写入新数据到
Info.plist。 - 我的应用程序中的一些后台线程也在读取
[NSBundle mainBundle],系统使用了一些奇怪的锁,因此从主线程读取失败。
UPD:我见过this question,但不相关。
【问题讨论】:
标签: ios versioning info.plist nsbundle