迁移到Xcode 12.5时出现dyld:库未加载错误

9

环境

  • MacBook Pro(13英寸,2017年,两个Thunderbolt 3端口)
  • Big Sur 11.3.1
  • Xcode 12.5
  • Apple Swift版本5.4(swiftlang-1205.0.26.9 clang-1205.0.19.55)
  • 目标:x86_64-apple-darwin20.4.0

问题

在Xcode 12.4之前,我们使用此解决方法为项目获取框架,这些框架以bundle的形式存在(黄色文件夹图标)。此外,我需要为每个目标手动创建一个Carthage Copy File脚本(位于Build Phase下),这很烦人且容易出错。

几天前,我阅读了Carthage官方文档,它建议使用xcframework。从步骤来看,似乎不再需要烦人的copy file步骤,于是我决定尝试一下。

我完全按照迁移步骤进行操作。我还更改了框架搜索路径,使其从$(PROJECT_DIR)/YOUR_PROJECT/Carthage/Build/iOS指向$(PROJECT_DIR)/YOUR_PROJECT/Carthage/Build。应用程序可以在模拟器上运行,但为时过早,当我尝试在iPhone上运行它时,它会崩溃。在调试器控制台中,它报告以下错误:

dyld: Library not loaded: @rpath/Auth0.framework/Auth0
  Referenced from: /private/var/containers/Bundle/Application/9575D8AA-BD35-447B-ACC3-F8545CDB62EE/FIT dev.app/FIT dev
  Reason: image not found
dyld: launch, loading dependent libraries
DYLD_LIBRARY_PATH=/usr/lib/system/introspection
DYLD_INSERT_LIBRARIES=/Developer/usr/lib/libBacktraceRecording.dylib:/Developer/usr/lib/libMainThreadChecker.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib

解决方案

最终我找到了这篇两年前的Medium博客文章,在其中建议将拖放到项目中的frameworks设置为嵌入并签名。我通过更改一些frameworks的嵌入状态,从不嵌入更改为嵌入并签名(从选项卡General/Frameworks, Libraries and Embedded Content)做了同样的事情。

太好了!该项目可以在模拟器和真实设备上运行,UI测试也与之前一样运行。

Carthage官方文档中的迁移步骤并没有提到这一步。此外,我找不到任何解决类似问题的帖子。因此,我想分享我的迁移步骤,希望对其他人有所帮助。

  • 按照迁移步骤进行操作(如果您有多个目标,请将所有xcframeworks放在文件导航器中的/Frameworks组下,这样您就可以同时将xcframeworks链接到所有目标)

enter image description here

enter image description here

  • 为您新添加的xcframeworks设置嵌入状态,请参见下面的快照,我将frameworks分成了三组

    • 绿色,第三方库,例如auth0,alamofire -> 嵌入并签名
    • 橙色 -> 开发库 -> 嵌入并签名
    • 其余部分,在我的情况下是Firebase的xcframeworks -> 不嵌入

Set embed status

1个回答

2

我已经在问题本身中回答了我的问题,请查看问题,谢谢 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接