Apple 的 iPad 版 Swift Playgrounds 应用程序如何执行代码?

Posted

技术标签:

【中文标题】Apple 的 iPad 版 Swift Playgrounds 应用程序如何执行代码?【英文标题】:How does Apple's Swift Playgrounds app for iPad execute code? 【发布时间】:2016-11-14 16:54:42 【问题描述】:

适用于 iPad 的 Swift Playgrounds 应用程序如何执行代码?

他们是否将 LLVM 工具链移植到 ARM 并进行了动态编译,或者他们是否使用完全不同的方式来执行 Swift 代码?

如何在 ios 中完成类似的事情(即动态执行 Swift 代码)?

【问题讨论】:

使用前请阅读apple标签的说明。它清楚地标明“请勿使用”。 【参考方案1】:

Apple 的 general-audience 和 developer 营销材料都没有说明 Swift Playgrounds 是“真正的代码”。但您可以自己验证(或至少找到一些强有力的证据)Swift Playgrounds 确实运行完整的编译器工具链并生成原生 arm64 代码。

提示:如果您在 Mac 上的 iTunes 中下载 App Store 应用程序(或者我猜也是 Windows 设备?),您可以在本地文件系统中找到相应的 .ipa 文件。除非您是啤酒爱好者,否则 IPA 只是 zip 存档,其中包含在您同步时安装到 iOS 设备上的应用程序包,因此您可以使用您喜欢的实用程序(包括 macOS 中的内置存档实用程序,或 @987654330 @ 命令行工具)并稍微研究一下它们的内部工作原理。

如果您使用 Swift Playgrounds 执行此操作,您会发现 Xcode 中的 SDK 和工具链几乎完整的副本,包括一些特定于链接 arm64 架构的二进制文件的文件。 (您不会找到编译器和相关工具的任何命令行二进制文件,但运行 LLVM 工具链的一部分 as libraries 并没有什么新鲜事。)您还可以在 Swift 编译器的开源代码中找到 arm64 as a compiler-host architecture 的一些证据.

所以,是的——没有得到 Apple 的官方确认,看起来 Swift Playgrounds 可以在 iOS 设备上编译和运行本机代码。 (如果你想一想,否则这样做没有多大意义——在某种解释/模拟环境中运行 Swift 代码会降低性能。并且可能会让 Apple 的 stated goal 提供对整个 iOS 的访问工具包非常困难。)

不,third-party apps still can't do that。自 2010 年以来,第三方应用程序可以使用提供嵌入式脚本环境的工具——游戏引擎使用它来加速游戏设计和开发,而其他应用程序则为 Python 和 Lua 提供编码环境。但您大概可以想象,允许第三方应用编译和运行原生代码可能是一场安全噩梦……

【讨论】:

以上是关于Apple 的 iPad 版 Swift Playgrounds 应用程序如何执行代码?的主要内容,如果未能解决你的问题,请参考以下文章

在 iPad 版 Swift Playgrounds 中显示 TableView

将图像插入 iPad 版 Swift Playgrounds

UIDocumentBrowser 在 iPad 上不工作,而在模拟器上工作正常 [iOS,Swift]

ipad版简单美团界面功能实现(纯swift编写)

ipad版Qzone(纯swift编写)

苹果发布 Mac 版 Swift Playgrounds 应用