我刚刚提交了我的应用程序以供商店审核,并收到了一些包含此错误的 Crashlytics 报告:
致命错误:无法在捆绑包中找到 CountryNumbers.json。
在本地运行期间,通过调试和发布(以及模拟器和真实设备),应用程序可以正常工作。我已经检查了副本捆绑资源,文件就在那里。
我在变量静态初始化期间读取文件
static let allCountries: [CPData] = Bundle.main.decode("CountryNumbers.json")
和解码扩展代码
extension Bundle {
func decode<T: Decodable>(_ file: String) -> T {
guard let url = self.url(forResource: file, withExtension: nil) else {
fatalError("Failed to locate \(file) in bundle.")
}
.....
有谁知道我是否错过了配置或者为什么会发生这种情况?
您的捆绑扩展名错误。你说的是
self.url(forResource: file, withExtension: nil)
但是从捆绑包中获取此文件 CountryNumbers.json 的方法是提供
"CountryNumber"
作为 file
值,并提供 "json"
作为 withExtension
值。您没有这样做,因此获取失败。您将需要重写此扩展及其使用。
(而且我看不出这与“解码”有什么关系。json 文件未在捆绑包中进行编码。)
顺便说一句,关于测试:
在本地运行期间,通过调试和发布(以及模拟器和真实设备),应用程序可以正常工作
但这还不是一个充分的测试。您还应该将应用程序提交到 TestFlight,下载 TestFlight 版本并运行它。这就会暴露问题。