如何在不暴露源代码的情况下分发Swift库?

时间:2014-07-29 16:50:49

标签: ios xcode swift

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

  

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

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

  

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

     

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

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

更新:

此时Swift代码混淆是一种选择吗?

3 个答案:

答案 0 :(得分:20)

Swift现在已经发布了测试版,即使对于1.0,Apple也非常清楚他们是在一个受限制的功能集之后 - 更好地完成少量事情而不是尝试做所有事情。

所以现在,没有办法分发二进制静态库。据推测,在Swift 1.0之后某个时候会发生变化。现在,你可以:

  • 分发来源
  • 如果ABI很脆弱,可以发送二进制框架(而不是库)
  • 使用ObjC作为库代码

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

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

答案 1 :(得分:7)

我认为整个方法都是错误的。您无法通过您尝试使用的技术做一些尚未完成的事情。

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

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

答案 2 :(得分:0)

Xcode 9 beta 4开始,Xcode支持static library源的Swift