gpt4 book ai didi

ios - 为什么在针对模拟器时框架包路径解析为 DerivedData 构建目录?

转载 作者:行者123 更新时间:2023-11-28 13:36:13 24 4
gpt4 key购买 nike

差异

Xcode 工作区子项目产品(Cocoa Touch Framework)在运行时使用框架实现的本地 Bundle(for:) 检索。

在设备上运行时,返回的路径正确指向应用程序主包容器中的框架位置(Frameworks 文件夹,它嵌入的位置):

/var/containers/Bundle/Application/[UUID]/App.app/Frameworks/Subproject.framework

但是如果为 Simulator 构建相同的应用程序,则框架包路径解析为构建目录:

/Users/username/Library/Developer/Xcode/DerivedData/App-gudzsitepqiiqaemjvwsloxbjobv/Build/Products/Debug-iphonesimulator/Subproject.framework

Bundle.main.resourcePath 已正确解析为构建应用程序的模拟器容器。

问题

错误的 DerivedData 路径在运行时不可访问,因为它不是应用程序包的子目录。这使得无法确定所需的文件名 GKScene 使用模拟器时在运行时动态初始化。

上下文

以下便捷初始化器:

public extension GKScene {
convenience init?(fileNamed filename: String, in bundle: Bundle) {
guard
let main = Bundle.main.resourcePath,
let full = bundle.url(forResource: filename, withExtension: "sks")?.path
else {
return nil
}

let relative = full.replacingOccurrences(of: "\(main)/", with: "")
self.init(fileNamed: relative)
}
}

是这样调用的:

GKScene(fileNamed: "GameScene", in: Bundle(for: type(of: self)))

Simulator 上的 Bundle(for: type(of: self)) 调用将生成 DerivedData 路径,并且初始化程序将失败,因为它 requires成为“主包”子路径的路径

最佳答案

从 Xcode 启动时,Xcode 将 DYLD_FRAMEWORK_PATH 和 DYLD_LIBRARY_PATH 设置为构建产品路径,以便在针对它们执行测试时将链接解析为您构建的框架。

这在 Xcode 中已经存在很长时间了。如果您从 SpringBoard“手指启动”它,您应该得到您正在寻找的行为。

关于ios - 为什么在针对模拟器时框架包路径解析为 DerivedData 构建目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56590127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com