【发布时间】:2021-08-17 01:58:04
【问题描述】:
环境
- MacBook Pro(13 英寸,2017 年,两个雷雳 3 端口)
- 大苏尔 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 之前,我们使用 this workaround 为我们的项目获取框架,这些框架采用捆绑包的形式(黄色公文包图标)。另外,我需要为我的每个目标手动雕刻一个 Carthage Copy File 脚本(在构建阶段),这很烦人且容易出错。
几天前我阅读了 Carthage 官方文档,它建议使用xcframework。从步骤来看,这听起来烦人的copy file 步骤不再需要了,我决定试一试。
我完全遵循migration steps。我还更改了框架搜索路径,使其指向从 $(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
解决方案
我终于在 2 年前遇到了这个 Medium post,它向 embed & sign 建议了被拖放到项目中的框架。我通过将一些框架的Embed 状态从Do not embed 更改为Embed & Sign(来自标签General/Frameworks, Libraries and Embedded Content),对我的项目做了同样的事情。
宾果!项目在模拟器和真机上运行,UI测试也和以前一样运行。
迦太基官方文档中的migration steps 根本没有提到这一步。另外,我找不到任何解决类似问题的帖子。所以我只想分享我的迁移步骤,希望这可能会有所帮助
- 完全遵循migration steps(如果您有多个目标,这里的技巧是将所有xcframeworks 放到文件导航器中
/Frameworks组下,这样您就可以将xcframeworks 一次性链接到所有目标)
-
为您新添加的 xcframeworks 设置
embed状态,请参见下面的快照,其中我将框架分为三组- 绿色,第三方库,例如auth0, alamofire ->
Embed and Sign - 橙色 -> 开发库 ->
Embed and Sign - 其余的,在我的例子中是用于 Firebase 的 xcframeworks ->
Do not embed
- 绿色,第三方库,例如auth0, alamofire ->
【问题讨论】:
标签: ios xcode carthage xcframework xcode12.5