如何使用Swift应用+(Swift框架+ Objective C静态框架)没有警告

我在做什么:

  • 创build一个快速的dynamic框架 – 说SwiftDemo.framework
  • Swift.framework依赖于一个外部的Objective-C静态框架(没有源代码可用) – 说ObjCDemo.framework。 这个框架有它的模块文件,放在ObjCDemo.framework / Modules / module.modulemap里面
  • 把这个SwiftDemo.framework放到一个Swift应用程序中。 理想情况下,我想我的swift应用程序能够使用SwiftDemo.framework和ObjCDemo.framework没有任何错误或警告。

我曾经尝试过:

  • 创build一个SwiftDemo.framework的Swiftdynamic框架

  • “链接的框架和库”中添加了ObjCDemo.framework。 如果不自动添加ObjCDemo.frameworkspath在“框架searchpath”中。 使用“import ObjCDemo”访问ObjCDemo.framework。 构buildSwiftDemo.framework。 它build立好,没有错误,没有警告

  • 创build一个SwiftDemo应用程序。

  • “embedded式二进制文件”部分添加SwiftDemo.framework。

尝试构buildSwiftDemo.app,下面是错误:

ld:架构x86_64找不到ObjCDemo

很明显,SwiftDemo.app无法findSwiftDemo.framework使用的ObjCDemo.framework,接下来我做了:

  • “链接的框架和库”中添加了ObjCDemo.framework,并相应地设置了SwiftDemo.app目标的“框架searchpath”

尝试构buildSwiftDemo.app,没有错误,但是这是控制台警告我得到ObjCDemo.framework中的每个文件:

objc:在/ Users / tarun / Library / Developer / CoreSimulator / Devices / 4391A259-64DF-4893-BE09-31B5D2D5BC8C / data / Containers / Bundle / Application / CD896A7B-1868-44D1-BFEA-6CC081AD41DB /SwiftDemo.app/Frameworks/SwiftDemo.framework/Swift和/ Users / tarun / Library / Developer / CoreSimulator / Devices / 4391A259-64DF-4893-BE09-31B5D2D5BC8C / data / Containers / Bundle / Application / CD896A7B-1868-44D1- BFEA-6CC081AD41DB / SwiftDemo.app / SwiftDemo。 将使用两者之一。 哪一个是未定义的

显然,这些文件在SwiftDemo.framework和SwiftDemo.app中都是重复的,所以为了避免接下来我做了:

  • 删除SwiftDemo.app目标的ObjCDemo.framework表单“Linked Frameworks and Libraries” ,但保持“Frameworks Search Paths”仍然指向ObjCDemo.frameworkpath。

尝试构buildSwiftDemo.app,没有错误,但这是编译时警告:

ld:警告:提供自动链接“… / SwiftDemo / ObjCDemo.framework / ObjCDemo”,框架链接器选项在…. / SwiftDemo / ObjCDemo.framework / ObjCDemo不是一个dylib

不pipe我只是无法通过这些错误或警告。 任何人有任何解决这个?