如何分发Swift Library而不暴露源代码?

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

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

我希望苹果能够在下一个Beta版本或GA版本中添加这个function,但是我在他们的博客上阅读了以下内容:

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

这意味着框架需要仔细pipe理。 例如,如果您的项目使用框架与embedded式扩展共享代码,则需要一起构build框架,应用程序和扩展。 依赖使用Swift的二进制框架(尤其是来自第三方)是危险的 。 随着Swift的变化,这些框架将与您的应用程序的其余部分不兼容。 当二进制接口在一两年内稳定后,Swift运行时将成为主机操作系统的一部分,这个限制将不再存在。

这个消息让我非常震惊,一个为其他开发者编写组件的人使用并包含在他们的应用程序中。 这是否意味着我必须分发源代码或等待两年? 有没有其他的方式来分发图书馆而不暴露代码(公司政策)?

更新:

在这一点上,Swift代码混淆是一个选项吗?

Swift现在正在testing,甚至1.0版本,苹果已经非常清楚,他们正在经历一个有限的function设置 – 更好地做less数事情,而不是尝试做任何事情。

所以现在,没有办法分发二进制静态库。 大概在Swift 1.0之后会有所改变。 现在,您可以:

  • 分配源
  • 运送一个二进制框架 (而不是一个库),如果你没有问题,ABI是脆弱的
  • 使用ObjC库代码

你也可以总是把方法结合起来:例如,在ObjC中实现你的库的关键(秘密)细节,并且把Swift源码包装在一个漂亮的Swift API中。

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

我相信整个方法是错误的。 你不能做一些你所尝试使用的技术还没有做到的事情。

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

build议:在Objective-C(或C或任何“非beta”)中编写静态库。 需要第三方库(比如你的)的开发者在Swift稳定之前不应该期待他们被写入Swift。 你不使用实验材料build立真正的桥梁,对吧? 您使用经过充分testing的,可预测的。