此项目已被归档,不再维护。原始维护者已无法投入所需时间来使 Gryphon 与最新的 Swift 版本保持同步。代码在此处保留给任何可能需要它的人,并且原始的 Readme.md
内容如下
Gryphon 是一个将 Swift 代码翻译成 Kotlin 代码的程序。它的创建是为了使移动应用程序开发人员能够与 Android 共享 iOS 应用程序代码库的部分内容。
Gryphon 现在处于预览阶段!🎉
这意味着主要的系统和想法已经实现 - 例如,它已经翻译了它自身代码库的完整版本一段时间了。但是,用户经常会发现新的错误需要修复。如果发生这种情况,请随时在 GitHub 上报告新问题。
您还可以在此处查看当前支持的 Swift 标准库翻译。
Gryphon 同时支持 macOS 和 Linux。您可以使用以下方式安装它
使用 Homebrew 自动安装 Gryphon 及其依赖项
$ brew install vinivendra/gryphon/gryphon
使用 Mint 使用 Swift 包管理器安装 Gryphon
$ mint install vinivendra/Gryphon
在下载之前,在 GitPod 上试用一下
克隆仓库并运行安装脚本
$ git clone https://github.com/vinivendra/Gryphon.git
$ cd Gryphon
$ ./Scripts/install.sh
在 Docker 容器中安装它
$ git clone https://github.com/vinivendra/Gryphon.git
$ cd Gryphon
$ docker build -t gryphon .
$ docker run -it --rm --privileged -v /absolute/path/to/current/directory/:/app/Gryphon gryphon
# ./Scripts/install.sh
查看教程以开始入门。它涵盖了开始使用 Gryphon 所需的基本信息,无论您是想翻译命令行程序,将新的 iOS 应用程序翻译成 Android,还是将 Gryphon 添加到现有应用程序。
Gryphon 是一个命令行应用程序,可以将 Swift 代码翻译成 Kotlin 代码。它专门为使应用程序开发人员能够将 iOS 应用程序中与平台无关的部分翻译成他们可以在 Android 应用程序中使用的代码而设计。
Gryphon 的输出代码旨在表现得与其创建的输入代码完全一样。从技术上讲,仍然有可能生成无法编译的 Kotlin 代码 - 例如,如果您尝试翻译不受支持的 Swift 功能,或者如果存在错误 - 但通常情况下,您应该能够翻译、编译和运行受支持的代码,而无需进行翻译后编辑。
Gryphon 的主要目标之一是确保翻译后的代码可以被人理解。通常,如果您理解输入的 Swift 代码,您也应该能够理解翻译后的 Kotlin 代码 - 如果您不理解,请随时提交错误报告。
这是在一些现实的约束条件下完成的:例如,首要任务是翻译后的代码必须正确运行。 Gryphon 试图在“类似机器码的 Kotlin”和“完美地道的 Kotlin”之间找到一个“合理可理解的 Kotlin”的中间地带。
Gryphon 对 Swift 功能的支持在不断发展。 它目前能够翻译人们可能期望的许多主要功能 - 类、结构体、枚举、闭包、扩展、协议等 - 足以使其目前翻译了其自身代码库版本的大约 97%(另外 3% 是特定于平台的文件)。一些 Swift 功能只是等待实现,而另一些功能无法翻译成 Kotlin,并且可能永远不会被支持。
Gryphon 当前支持 Swift 5.2 到 5.5。它将使用用于构建它的 Swift 版本,因此如果您使用 Swift 5.5 构建 Gryphon 二进制文件,那么它将假定您的所有 Swift 代码都使用该版本。您可以通过运行 gryphon --version
来找出您的 Gryphon 二进制文件使用的 Swift 版本。
由于一些技术限制,Gryphon 的最新版本中仅测试了 Swift 5.3、5.4 和 5.5。如果您在使用 Swift 5.2 时遇到任何困难,请告知我们。
可以 - 但它需要进行一些调整(尽管可能比您一般的多平台框架要少)。这取决于您的应用程序 - 应用程序的架构与其 Android 对应部分的相似程度,您的代码使用 Gryphon 不支持的 Swift 功能的频率等等。
值得注意的是,与用于应用程序开发的其他转译器一样,Gryphon 最适合翻译与平台无关的逻辑代码。目前不支持翻译对 UIKit 的调用 - 并且无法确定这种情况是否会在将来发生。
建议您首先仅翻译代码中与平台无关的几个部分,逐步添加新文件。使用在 UI 代码和逻辑代码之间有清晰分离的架构可能会有所帮助 - 例如 MVP 和 MVC 来分离可以翻译的代码。有关更多信息,请查看将 Gryphon 添加到现有应用程序。
是的。 虽然 Gryphon 的主要重点是 iOS 到 Android 的支持,但它主要是一个 Swift 到 Kotlin 的翻译器,并且它不需要任何特定于 iOS 的东西来运行。例如,您可以在 Linux 上使用它来翻译命令行工具。甚至 Gryphon 自己的源代码也可以被翻译,而那只是一个与 iOS 无关的命令行工具。
可能不会。 将 Swift 代码翻译成 Kotlin 代码所涉及的挑战对于这两种语言来说非常具体。将 Kotlin 翻译成 Swift 将需要一个新的 Kotlin 前端,一个新的 Swift 后端,以及中间的所有新逻辑来将一种语言变成另一种语言 - 基本上,一个全新的 Gryphon。其他语言组合也是如此。
感谢您的好意!
如果您想提出改进 Gryphon 的方法,请随时打开新问题。欢迎并鼓励所有错误报告和功能请求 - 如果我们不知道,我们就无法修复它!
如果您想直接贡献,请首先查看贡献者指南以学习如何设置您的环境。然后,如果您正在寻找灵感,请查看一些好的首个问题(如果您是 Gryphon 新手)或对初学者友好的仅限新手(如果您是开源新手) - 或者,如果您已经知道您想做什么,打开一个问题,让我们讨论一下。
如果您要贡献代码,您可能还应该阅读行为准则。