1

我有一个基于 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.modulemapPortSIPLib框架

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 框架一起存储

4

0 回答 0