【问题标题】:Convert a static library target into a framework target in an Xcode project将静态库目标转换为 Xcode 项目中的框架目标
【发布时间】:2016-01-10 07:58:18
【问题描述】:

我有一个生成静态库的 Xcode 项目。我的团队计划在 Swift 中进行所有新的开发。 It is not possible to add Swift files to the static library project。我们正在放弃对 iOS 7 的支持,因此现在可以在我们的 iOS 应用程序中包含框架。因此,我打算将我的静态库项目转换为框架项目。

我已经查看过,但找不到任何有关如何执行此转换的工具或建议。静态库很大(超过 100 个 .m 文件)。

我希望得到比创建新的并行框架目标更好的答案。我已经尝试过两次了。第一次作为 swift 目标,但我无法轻松导入所有 Objective C 文件。接下来,作为 Objective C 目标,但不再有 .pch。

【问题讨论】:

  • 我遇到了同样的问题,创建了一个混合 objC + swift 代码的框架。 @Jeffery Thomas 找到任何解决方案了吗?
  • @LouWeed 不。这只是一天的工作。我创建了一个新的 Objective C 目标,然后重新创建了所有目标设置(包括 .pch)。
  • 很好的问题,很遗憾听到没有找到非手动解决方案。 :(

标签: ios swift frameworks static-libraries


【解决方案1】:

我看到有人手动创建了框架,创建了一个 module.framework 文件并将所有头文件复制到一个 module.framework/Headers 文件夹中。该解决方案似乎有效,项目可以正确导入文件并将它们正确地视为框架。

我不确定这是否是解决问题的最佳方法,我正在一个大型项目中尝试它,ATM 正在通过 cocoapods 导入静态库,但似乎我对某些内容的可见性有一些问题使用框架的类。

【讨论】:

  • 我可以将其他框架的头文件包含到我自己的框架中,以便最终用户可以看到我的框架并可以从我的框架访问其他框架的类吗?
  • 你还记得他是如何将它们全部粘贴到框架的 Compile Sources 部分的吗?我有几千个文件需要处理。
【解决方案2】:

要从静态链接库转换静态/动态链接框架,

  1. 在您现有的静态链接库项目中添加一个新的 cocoa touch 框架作为 TARGET。
  2. 在构建阶段,将所有 .m、.mm、.c、.cpp、.metal 等添加到静态链接框架目标的“\Build Phases\Compile Sources”阶段。
  3. 将要公开的标头放入“\Build Phases\Headers”。
  4. 对于动态链接框架,请记住检查您的构建设置中的 Mach-O 类型设置。如果要使用 swift,则需要确保将 Mach-O 类型设置为动态库,以便它成为动态链接框架。对于静态链接框架,您需要将 Mach-O 类型设置为静态库,但您不能在转换后的静态链接框架中使用 swift(仅允许使用 Objective-c、objective-c++、C++、C 等) .

然后对于想要使用此框架的应用程序,只需将标题包含为#import 并将框架添加到您的应用程序目标的“构建阶段\链接二进制文件”中。如果转换后的框架是动态链接框架,则需要将其放入“Embedded Binaries”中。

【讨论】:

  • 当我将 swift 文件添加到我的新项目时,我得到'静态库不支持 Swift'
  • 建议的方法是将“静态链接库”转换为“静态链接框架”。虽然 Swift 目前不支持静态库,但您不能只将 swift 添加到新创建的“静态”链接框架中。
  • 我对你在@joseph 上面的回答感到困惑,你说“你不能只将 swift 添加到新创建的“静态”链接框架中。”,你的步骤有什么意义?如果结果仍然与 Swift 不兼容,请回答?也许您的意思是说“可以”而不是“不能”?另外,如果这确实适用于 Swift,你能提出更详细的步骤吗?我遇到了同样的问题,我似乎无法完全理解上述步骤(我是 iOS 开发的新手)
  • 您是否知道一种方法,该方法允许从静态库的构建阶段、编译源部分复制所有文件(是的,复制命令),但允许将它们全部粘贴到编译源部分框架?
  • Franco,静态链接库适用于objectie-c 或objective-c++ 项目。如果需要添加 swift,则需要将 Macho-O 类型设置为“动态库”。
猜你喜欢
  • 2012-10-22
  • 2015-05-07
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 2011-06-17
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
相关资源
最近更新 更多