【问题标题】:How to distribute Swift Library without exposing the source code?如何在不暴露源代码的情况下分发 Swift 库?
【发布时间】:2014-07-29 16:50:49
【问题描述】:

我尝试的第一件事是创建一个static library,但后来我发现它还不支持。 Apple Xcode Beta 4 发行说明:

Xcode 不支持构建包含 Swift 的静态库 代码。 (17181019)

我希望 Apple 能够在下一个 Beta 版本或 GA 版本中添加此功能,但我在 their blog 上阅读了以下内容:

当您的应用运行时 兼容性得到保证,Swift 语言本身将继续 进化,二进制接口也会改变。为了安全起见,所有 您的应用程序的组件应该使用相同版本的 Xcode 构建 和 Swift 编译器,以确保它们一起工作。

这意味着需要谨慎管理框架。例如, 如果您的项目使用框架与嵌入式共享代码 扩展,您将需要构建框架、应用程序和扩展 一起。 依赖二进制框架会很危险 使用 Swift——尤其是来自第三方的。随着 Swift 的变化,那些 框架将与您的应用程序的其余部分不兼容。当。。。的时候 二进制接口在一两年内稳定,Swift 运行时将 成为主机操作系统的一部分,此限制将不再存在。

对于为其他开发人员编写组件以供其他开发人员使用和包含在他们的应用程序中的人来说,这个消息确实令人震惊。这是否意味着我必须分发源代码或等待两年?有没有其他方法可以在不暴露代码的情况下分发库(公司政策)?

更新:

目前是否可以选择 Swift 代码混淆?

【问题讨论】:

  • 恐怕在这种情况下你只需要使用 Objective-C 代码。此外,TIL Swift 有一个博客。谢谢。
  • 听起来你需要继续用 Objective C 编写你的库,直到 Apple 将 Swift 运行时整合到操作系统中。
  • 我认为对于 iOS 开发人员来说,学会快速使用 Swift 更为重要,但使用 Swift 快速交付代码并不那么重要。
  • “另外,TIL Swift 有一个博客。”是的。接下来你知道它会在 Instagram 上发布它的饭菜。

标签: ios xcode swift


【解决方案1】:

Swift 现在是测试版,即使是 1.0,Apple 也很清楚他们在追求一个受限的功能集——最好把少数事情做好,而不是尝试做所有事情。

因此,目前还没有办法分发二进制静态库。据推测,这会在 Swift 1.0 之后的某个时候发生变化。目前,您可以:

  • 分发源
  • 如果您对 ABI 的脆弱性感到满意,请提供二进制 框架(而不是库)
  • 将 ObjC 用于库代码

您也可以随时组合方法:例如,在 ObjC 中实现库的关键(秘密)细节,并发布 Swift 源代码,将其包装在一个漂亮的 Swift API 中。

用一种非常容易更改的语言编写的混淆代码听起来像是维护噩梦的秘诀。

【讨论】:

  • 我们现在已经达到了 Swift 的 1.2 版本,但这个问题仍然存在。苹果为二进制兼容性设定了 1-2 年的时间框架,还是我错了?
【解决方案2】:

我认为整个方法都是错误的。你不能做一些你正在尝试使用的技术(还)不能做的事情。

理由:Swift 是一种新语言,目前处于测试阶段,因此正在发生变化。在我看来,这个事实不仅意味着您无法发布静态库,而且(真正的)开发人员实际上不会使用第三方静态库。在编译器的下一个版本中可能无法工作的库的实际用途是什么?如果您想使用多个库,问题会变得更大,因为它们可能不兼容!因此,即使您能够发布静态库,它们实际上对生产环境也没有用处。那么,有什么意义呢?

建议:用 Objective-C(或 C 或任何“非 beta”)编写您的静态库。在 Swift 稳定之前,需要第三方库(例如您的)的开发人员不应该期望它们是用 Swift 编写的。您不会使用实验材料来建造真正的桥梁,对吧?您使用经过充分测试的、可预测的。

【讨论】:

  • 这个帖子是从 2014 年开始的。这个“2 年内”的业务是否有任何更新?我如何才能全职切换到使用 Exclusively Swift,尤其是现在 Swift 4 即将推出?我需要能够快速生成闭源 Swift 库,而无需跳过太多的环节。
  • 是的,我相信您可以在 Xcode 中编译 Swift 库,至少使用 Xcode 9(测试版),也可能使用 Xcode 8(但我没有尝试过)。您还可以使用包管理器 (swift.org/package-manager) 创建库。
【解决方案3】:

Xcode 9 beta 4 开始,Xcode 支持static librarySwift 来源。

【讨论】:

    猜你喜欢
    • 2016-05-23
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    相关资源
    最近更新 更多