ios - 在 Swift 中将外部框架嵌入到自制的私有(private)框架中

标签 ios swift ios-frameworks

我使用 Xcode 6 和 Swift 构建了一个框架,我的框架使用 SwiftyJSON作为依赖 - 通过 Carthage 添加.我存档了我的框架,并使用 lipo 创建了一个适用于模拟器和 iOS 设备的构建,当我尝试将我的框架用于一个空应用程序时,我在运行时遇到了崩溃:

dyld: Library not loaded: @rpath/SwiftyJSON.framework/SwiftyJSON
Referenced from: /Users/hd/Library/Developer/CoreSimulator/Devices/324FD1CD-4A06-459B-AE6D-318197B5697E/data/Containers/Bundle/Application/555871BB-7AA1-4AED-90CE-EE0A628A794F/CollaborativeTodo.app/Frameworks/XXXXX.framework/XXXXX
Reason: no suitable image found.  Did find:
/Users/hd/Library/Developer/CoreSimulator/Devices/324FD1CD-4A06-459B-AE6D-318197B5697E/data/Containers/Bundle/Application/555871BB-7AA1-4AED-90CE-EE0A628A794F/CollaborativeTodo.app/Frameworks/SwiftyJSON.framework/SwiftyJSON: no matching architecture in universal wrapper

这是我的树状结构的样子——我的框架名称被故意模糊了:

Project arborescence

常规选项卡:

General

构建阶段: Build Phases

如果我在我的项目中包含使用 Carthage 的 SwiftyJSON,它会起作用,但我不希望用户被迫包含第三方库。 如何将 SwiftyJSON 嵌入到我的框架中并告诉 Xcode 在运行时使用嵌入式版本,而不是尝试在项目中查找框架?

最佳答案

您无法避免让应用程序直接包含 SwiftlyJSON。更好的说法是,您应该避免让应用包含 SwiftlyJSON。如果该应用程序由于某些其他原因已经具有 SwiftlyJSON,那么由于重复的符号,您将给他们带来巨大的痛苦。根据他们做事的具体方式,他们可能不会出错,只会出现未定义的行为,这更糟。自动包含是一种非常好的功能,直到它完全爆炸并且没有人能弄清楚如何修复它。如果您在 StackOverflow 上搜索“ios 重复符号”,我估计其中大约一半是由于框架试图自动包含子框架(通常是 SBJSON)。

记录您所依赖的内容并将其作为嵌套依赖项包含在您的 Cartfile 中。 Carthage 将为他们构建它(他们仍然需要将它拖到他们的项目中)。

关于ios - 在 Swift 中将外部框架嵌入到自制的私有(private)框架中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31115731/

相关文章:

ios - UICollectionView 中的动画自定义布局

ios - 警告 ITMS-90080 : "The executable ' Payload/myapp. app/Frameworks/some-framework.framework' 不是与位置无关的可执行文件

ios - 在 Widget/Today View Extension 中使用核心数据模型?

ios - 在 Swift 中将结构重构为枚举

ios - 使用 MVVM 和 ReactiveCocoa,如何处理 iOS 中的委托(delegate)模式?

swift - 在 Swift 中使用模板键入别名声明

objective-c - respondsToSelector 的 Swift 等价物是什么?

ios - 在 Swift 中使用 CommonCrypto 会生成不安全的扩展警告

objective-c - 以编程方式绘制粗略的线条

arrays - Swift Vapor 对对象数组的错误解码