从 Testflight 加载应用程序时捆绑资产检索中断
Bundle asset retrieval broken when app is loaded from Testflight
我遇到了一个问题,涉及我的 iOS SDK 以及当从 Testflight 下载应用程序时它如何检索和显示图像(来自捆绑资产)。
SDK可以通过SPM、Cocoapods和Carthage集成。这个问题是关于 Cocoapods 集成的。
在本地,即使是发布版本,当 运行 在设备上时,一切 运行 都很好并且正在显示图像:
当使用“发布”构建配置在本地构建时,图标显示。当完全相同的应用程序被存档然后通过 Testflight 下载时,所有图标都消失了。
这是我从捆绑包中检索图像的方式:
let background = UIImage(named: "select_chevrons", in: .current, compatibleWith: nil)?.withRenderingMode(.alwaysTemplate)
并且因为我以 3 种方式分发我的 SDK(Swift 包、cocoapods 和迦太基),我必须实现一个 BundleFinder,它定义 .current
:
import Foundation
private class BundleFinder {}
extension Foundation.Bundle {
/// Returns the resource bundle associated with the current Swift module.
var moduleName = "NAME_OF_MY_SDK"
static var current: Bundle = {
#if SWIFT_PACKAGE
let bundleName = "\(moduleName)_\(moduleName)"
#else
let bundleName = moduleName
#endif
let candidates = [
// Bundle should be present here when the package is linked into an App.
Bundle.main.resourceURL,
// Bundle should be present here when the package is linked into a framework.
Bundle(for: BundleFinder.self).resourceURL,
// For command-line tools.
Bundle.main.bundleURL,
]
for candidate in candidates {
let bundlePath = candidate?.appendingPathComponent(bundleName + ".bundle")
if let bundle = bundlePath.flatMap(Bundle.init(url:)) {
return bundle
}
}
print("unable to find bundle named \(bundleName)")
return Bundle(for: BundleFinder.self)
}()
}
问:为什么应用来自Testflight时图片不显示?我如何在本地重现此行为?
我发现这个问题有完全相同的问题:
Pod install has required target membership unchecked
问题是,包与模块同名。将包名称更改为其他名称可以解决问题,请参阅我的回答:
我遇到了一个问题,涉及我的 iOS SDK 以及当从 Testflight 下载应用程序时它如何检索和显示图像(来自捆绑资产)。
SDK可以通过SPM、Cocoapods和Carthage集成。这个问题是关于 Cocoapods 集成的。
在本地,即使是发布版本,当 运行 在设备上时,一切 运行 都很好并且正在显示图像:
当使用“发布”构建配置在本地构建时,图标显示。当完全相同的应用程序被存档然后通过 Testflight 下载时,所有图标都消失了。
这是我从捆绑包中检索图像的方式:
let background = UIImage(named: "select_chevrons", in: .current, compatibleWith: nil)?.withRenderingMode(.alwaysTemplate)
并且因为我以 3 种方式分发我的 SDK(Swift 包、cocoapods 和迦太基),我必须实现一个 BundleFinder,它定义 .current
:
import Foundation
private class BundleFinder {}
extension Foundation.Bundle {
/// Returns the resource bundle associated with the current Swift module.
var moduleName = "NAME_OF_MY_SDK"
static var current: Bundle = {
#if SWIFT_PACKAGE
let bundleName = "\(moduleName)_\(moduleName)"
#else
let bundleName = moduleName
#endif
let candidates = [
// Bundle should be present here when the package is linked into an App.
Bundle.main.resourceURL,
// Bundle should be present here when the package is linked into a framework.
Bundle(for: BundleFinder.self).resourceURL,
// For command-line tools.
Bundle.main.bundleURL,
]
for candidate in candidates {
let bundlePath = candidate?.appendingPathComponent(bundleName + ".bundle")
if let bundle = bundlePath.flatMap(Bundle.init(url:)) {
return bundle
}
}
print("unable to find bundle named \(bundleName)")
return Bundle(for: BundleFinder.self)
}()
}
问:为什么应用来自Testflight时图片不显示?我如何在本地重现此行为?
我发现这个问题有完全相同的问题:
Pod install has required target membership unchecked
问题是,包与模块同名。将包名称更改为其他名称可以解决问题,请参阅我的回答: