当前位置: 首页 > 面试题库 >

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

尉迟俊能
2023-03-14
问题内容

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

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

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

在确保应用程序的运行时兼容性的同时,Swift语言本身将继续发展,并且二进制接口也将发生变化。为了安全起见,应使用相同版本的Xcode和Swift编译器构建应用程序的所有组件,以确保它们可以一起使用。

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

这个消息真的使我感到震惊,他为其他开发人员编写了供其使用并包含在其应用程序中的组件。这是否意味着我必须分发源代码或等待两年?还有其他方法可以在不公开代码的情况下分发库(公司政策)吗?

更新:

Swift代码混淆现在是一种选择吗?


问题答案:

Swift现在是beta版,甚至对于1.0 Apple来说,它也很明显地遵循了受限制的功能集-做好一些事情比尝试做任何事情都要好。

因此,目前尚无法分发二进制静态库。大概这会在Swift 1.0之后的某个时候改变。现在,您可以:

  • 分发源
  • 如果您认为ABI脆弱,请运送一个二进制 框架 (而不是一个库)
  • 将ObjC用于库代码

您也可以始终结合使用各种方法:例如,在ObjC中实现库的关键(秘密)细节,并提供将其包装在一个不错的Swift API中的Swift源代码。

混淆以极易改变的语言编写的代码听起来像是维护噩梦的秘诀。



 类似资料:
  • 问题内容: 我正在创建一个应用程序,并且需要连接到数据库。数据库需要登录名/密码,因此应用程序可以执行选择和插入之类的操作。 在应用程序中,我需要使用登录名和密码连接到数据库,因此应用程序可以自由地在数据库上执行某些任务。 我的问题是:如何在不暴露密码的情况下存储和使用密码来连接数据库? 我不能简单地使用哈希或加密来存储密码,因为数据库必须能够识别密码(我认为大多数或所有数据库都必须以纯文本形式接

  • 8.1. 源码暴露 你的WEB服务器必须要能够读取你的源确并执行它,这就意味着任意人所写的代码被服务器运行时,它同样可以读取你的源码。在一个共享主机上,最大的风险是由于WEB服务器是共享的,因此其它开发者所写的PHP代码可以读取任意文件。 <?php header('Content-Type: text/plain'); readfile($_GET['file']); ?> 通过在你的源码所在的

  • 5.1. 源码暴露 关于包含的一个重要问题是源代码的暴露。产生这个问题主要原因是下面的常见情况: l对包含文件使用.inc的扩展名 l包含文件保存在网站主目录下 lApache未设定.inc文件的类型 lApache的默认文件类型是text/plain 上面情况造成了可以通过URL直接访问包含文件。更糟的是,它们会被作为普通文本处理而不会被PHP所解析,这样你的源代码就会显示在用户的浏览器上(见图

  • 首先,我不是Docker新手(或专家),只是不确定如何在不炸毁我当前容器的情况下完成此操作。 我在玩Postgres,并使用这个命令构建了一个容器,但没有意识到它不会将Postgres暴露在Docker之外 我希望其他系统能够访问这些数据。我不想删除容器,因为我已经做了相当多的配置。 在停止实例后,我尝试过在 中编辑容器 文件,但是在启动容器备份后,该文件被覆盖。 将端口暴露在容器之外的最佳实践是

  • 我们有一个应用程序,将部署在具有不同IP的服务器上。JNLP是在构建时生成的。因此,我们定义了没有代码库的JNLP: 然而,当第二次启动这个应用程序时(从第一次启动时创建的桌面图标),代码库被设置为本地文件系统,这是绝对无用的。我希望Java Webstart在第一次启动应用程序时使用实际的源地址设置代码库。这似乎不是真的。 我如何准备一个通用的JNLP,它可以在不同的服务器上使用而无需修改?

  • 我是UI自动测试的新手,当只有.apk文件时,我无法弄清楚如何设置UI测试。 在线教程和其他示例没有显示如何使用我的3P. apk文件。我知道在Appium中,只需将文件/目录和名称添加到所需的功能,服务器就会安装它。