我尝试的第一件事是创建一个静态库,但后来我发现尚不支持该库。Apple Xcode Beta 4发行说明:
Xcode不支持构建包含Swift代码的静态库。(17181019)
我希望Apple能够在下一个Beta版本或GA版本中添加它,但我在他们的博客上阅读了以下内容:
在确保应用程序的运行时兼容性的同时,Swift语言本身将继续发展,并且二进制接口也将发生变化。为了安全起见,应使用相同版本的Xcode和Swift编译器构建应用程序的所有组件,以确保它们可以一起使用。 这意味着需要仔细管理框架。例如,如果您的项目使用框架与嵌入式扩展共享代码,则将需要一起构建框架,应用程序和扩展。 依靠使用Swift的二进制框架(尤其是来自第三方的二进制框架)是危险的 。随着Swift的变化,这些框架将与您的其他应用程序不兼容。当二进制接口稳定 一两年后,Swift运行时将成为主机操作系统的一部分,并且此限制将不再存在。
在确保应用程序的运行时兼容性的同时,Swift语言本身将继续发展,并且二进制接口也将发生变化。为了安全起见,应使用相同版本的Xcode和Swift编译器构建应用程序的所有组件,以确保它们可以一起使用。
这意味着需要仔细管理框架。例如,如果您的项目使用框架与嵌入式扩展共享代码,则将需要一起构建框架,应用程序和扩展。 依靠使用Swift的二进制框架(尤其是来自第三方的二进制框架)是危险的 。随着Swift的变化,这些框架将与您的其他应用程序不兼容。当二进制接口稳定 一两年后,Swift运行时将成为主机操作系统的一部分,并且此限制将不再存在。
这个消息真的使我感到震惊,他为其他开发人员编写了供其使用并包含在其应用程序中的组件。这是否意味着我必须分发源代码或等待两年?还有其他方法可以在不公开代码的情况下分发库(公司政策)吗?
更新:
Swift代码混淆现在是一种选择吗?
Swift现在是beta版,甚至对于1.0 Apple来说,它也很明显地遵循了受限制的功能集-做好一些事情比尝试做任何事情都要好。
因此,目前尚无法分发二进制静态库。大概这会在Swift 1.0之后的某个时候改变。现在,您可以:
您也可以始终结合使用各种方法:例如,在ObjC中实现库的关键(秘密)细节,并提供将其包装在一个不错的Swift API中的Swift源代码。
混淆以极易改变的语言编写的代码听起来像是维护噩梦的秘诀。