Xcode 11:无法在 iOS 13 上的自定义包中实例化资产目录(.car 文件)中的图像

R3D*_*vil 5 assets resourcebundle swift ios13 xcode11

我们的 iOS 应用程序有一个自定义包,其中包含一个资产目录(.car 文件)。这是自 iOS 9 以来的设置。直到现在,在 Xcode 11 上使用 iOS 13 获取图像资源并使用它们一直不是问题(不确定当应用程序使用 xcode 10 构建并在 iOS 13 上运行时它是否有效)。

这是在应用程序中使用捆绑包的方式: 截屏

使用以下代码获取包:

let bundlePath = Bundle.main.path(forResource: "TheResource", ofType: "bundle")!
var bundle = Bundle(path: bundlePath)

现在,当我打印这个bundle变量时,我得到以下信息:

(lldb) po bundle
? Optional<NSBundle>
  - some : NSBundle </Users/xyz/Library/Developer/CoreSimulator/Devices/SE8C7E9D-76AF-4564-B21B-78DC990F3D2E/data/Containers/Bundle/Application/PD422A04-B4C8-42F0-A5CB-9465AC70D3A2/abc.app/TheResource.bundle> (not yet loaded)
Run Code Online (Sandbox Code Playgroud)
(lldb) po bundle.loadAndReturnError()
Error Domain=NSCocoaErrorDomain Code=4 "The bundle “TheResource” couldn’t be loaded because its executable couldn’t be located." UserInfo={NSLocalizedFailureReason=The bundle’s executable couldn’t be located., NSLocalizedRecoverySuggestion=Try reinstalling the bundle., NSBundlePath=/Users/xyz/Library/Developer/CoreSimulator/Devices/SE8C7E9D-76AF-4564-B21B-78DC990F3D2E/data/Containers/Bundle/Application/PD422A04-B4C8-42F0-A5CB-9465AC70D3A2/abc.app/TheResource.bundle, NSLocalizedDescription=The bundle “TheResource” couldn’t be loaded because its executable couldn’t be located.}
Run Code Online (Sandbox Code Playgroud)

这是我在 iOS 12 设备和 iOS 13 设备上得到的响应。但是资产在 iOS 12 上加载良好。

我尝试了以下方法但无济于事:
1. 由于 Xcode 11 存在问题,抛出多个路径生成相同的文件错误,我将 .car 资产目录从 Assets.car 重命名为更具描述性的内容。
2. 在 bundle 变量上调用 .load() 以尝试加载它,因为它一直说未加载。
3.尝试加载带有扩展名的图像,也尝试添加一些特征并使用该UIImage(named: <name>, in: <bundle>, compatibleWith: <traits>)方法。

在苹果论坛上发现了这个问题,但这与我所看到的行为几乎没有什么不同。

不知道为什么当应用程序使用 Xcode 11 构建并在 iOS 12 上运行时资产加载良好,但在 iOS 13 设备/模拟器上运行时不加载。

任何帮助将不胜感激,我对这个问题感到目瞪口呆。谢谢!

Ale*_*ylo 0

您用于加载区分大小写的名称是否与资产目录名称完全相同?

迁移到 Xcode 11 时遇到这个问题,问题本质是

UIImage(named: "fooImage"...

当目录中的实际名称是“FooImage”时。

因此,请先检查您的区分大小写的名称...