如何在没有警告的情况下使用Swift App +(Swift Framework + Objective C静态框架)

tar*_*rma 5 frameworks objective-c ios swift

我想做什么:

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

我尝试过的:

  • 创建一个快速动态框架SwiftDemo.framework

  • "链接的框架和库"中添加了ObjCDemo.framework .如果没有自动添加,请将ObjCDemo.frameworks路径放在"框架搜索路径"中.使用"import ObjCDemo"访问ObjCDemo.framework .构建SwiftDemo.framework.它构建良好,没有错误,没有警告

  • 创建一个SwiftDemo应用程序.

  • "嵌入式二进制文件"部分中添加SwiftDemo.framework .

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

ld:未找到框架objCDemo用于体系结构x86_64

显然SwiftDemo.app无法找到SwiftDemo.framework使用的ObjCDemo.framework,接下来我做了:

  • "链接的框架和库"中添加了ObjCDemo.framework,并相应地设置了SwiftDemo.app目标的"框架搜索路径"

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

objc [15127]:类在/ 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.framework路径.

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

ld:警告:自动链接提供的'.../SwiftDemo/ObjCDemo.framework/ObjCDemo',..../SwiftDemo/ObjCDemo.framework/ObjCDemo中的框架链接器选项不是dylib

无论我怎么都无法通过这些错误或警告.有人解决了这个问题吗?