我有一个基于 Swift 的 Cocoa 框架库,它使用 amodule.modulemap
来支持基于 C 的库(PortSIPLib)。该项目在 Xcode 中构建良好。
我通过使用针对 iOS 10 的 Carthage 在另一个项目中使用该框架。
当 Carthage 构建框架时 ( carthage update --platform ios
) 它失败了
ld: warning: ignoring file /Users/.../Carthage/Checkouts/wesipkit/PortSIPLib/PortSIPLib.framework/PortSIPLib, missing required architecture i386 in file /Users/.../Carthage/Checkouts/wesipkit/PortSIPLib/PortSIPLib.framework/PortSIPLib (3 slices)
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_PortSIPSDK", referenced from:
objc-class-ref in SIPServiceProvider.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
但是,如果我将项目和框架都定位为使用 iOS 11,Carthage 会成功构建吗?
我试过同时使用调试和发布配置设置,都失败了
我可以采取不同的方法吗?我应该配置其他设置吗?
无论如何我可以告诉 Carthage/Xcode 忽略为模拟器构建的尝试吗?我不需要在模拟器中运行它
问题不在于 (PortSIPLib) 缺少i386
实现,而是为什么它在针对 iOS 11 而不是 iOS 10 时有效?
我确实花了一周的时间试图诊断这个问题,甚至重新创建框架项目,直到现在我才意识到问题出在 iOS 目标级别
Xcode 版本 9.1 测试版 (9B46)
module.modulemap
PortSIPLib框架
module PortSIPLib {
umbrella header "PortSIPLib.framework/Headers/PortSIPSDK.h"
header "PortSIPLib.framework/Headers/PortSIPErrors.hxx"
header "PortSIPLib.framework/Headers/PortSIPEventDelegate.h"
header "PortSIPLib.framework/Headers/PortSIPTypes.hxx"
header "PortSIPLib.framework/Headers/PortSIPVideoRenderView.h"
export *
module * { export * }
}
这$(SRCROOT)/PortSIPLib
与 PortSIPLib 框架一起存储