iOS 模拟器崩溃,设备没有(dyld:找不到符号)

iOS Simulator crashes, device doesn't (dyld: Symbol not found)

我花了一些时间来解决这个问题,所以我想如果有人搜索过它,他们也可能会在这里找到解决方案。

当我有一个名为CoreUI 的框架时出现了问题。这在我的 iPhone 和 iPad 上运行良好,但它在模拟器上崩溃并向终端显示以下错误

dyld: Symbol not found: _OBJC_CLASS_$_CUICatalog
Referenced from: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks/UIKit.framework/UIKit
Expected in: /Users/sareninden/Library/Developer/Xcode/DerivedData/Treinplanner-bcfwuvntuwetsmavibxtvaiczpfg/Build/Products/Debug-iphonesimulator/CoreUI.framework/CoreUI
 in /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks/UIKit.framework/UIKit

在查看了所有构建设置但一无所获后,我尝试使用名为 CoreUI 的框架创建一个空项目。没有添加任何逻辑,它崩溃并出现同样的错误。

看来在模拟器中CoreUI也是Apple使用的框架名称。即使它是一个 swift 唯一的框架,它仍然会导致冲突。

解决方案是不使用 Apple 使用的模块名称(用于您的应用程序或框架)。我在这里找到了一个框架列表 (https://github.com/jonathanpenn/ui-auto-monkey/issues/8)。我不知道它是否完整,但这是一个好的开始。

这就是 DYLD_FRAMEWORK_PATH 的工作原理。因为您的 DYLD_FRAMEWORK_PATH 中有您自己的 CoreUI.framework,所以使用那个而不是系统的来满足来自 UIKit.framework 的链接。

不要选择系统框架使用的框架名称,即:

ls $(xcrun --sdk iphonesimulator --show-sdk-path)/System/Library/*Frameworks