跳转到内容
Skip 中文站
3.2k

Ahoy Skipper(拆分式 Fuse)

这是一个 Skip 双平台示例应用:使用同一套 Swift 和 SwiftUI 代码库,同时构建 iOS 与 Android 原生应用。AhoySkipper 是一个原生编译应用,采用 Skip Fuse 模式,并拆分为两个模块:AhoySkipper 应用模块和独立的 SkipperModel 模型层模块。两者都会在 Android 上原生编译,且各自包含单元测试。

Skip 提供了四个示例应用。它们采用相同的标准 Skip 应用项目布局,但模块结构和 Skip 模式不同,如下表所示。

示例模块Skip 模式
skipapp-helloHelloSkip完全转译 — Skip Lite
skipapp-howdyHowdySkip完全原生 — Skip Fuse
skipapp-ahoyAhoySkipper、SkipperModel完全原生 — Skip Fuse
skipapp-hiyaHiyaSkip、HiyaSkipModel、HiyaSkipLogic混合模式 — 原生模型桥接至转译 UI

在转译(Skip Lite)模块中,Swift 会转换为 Kotlin,SwiftUI 会转换为 Jetpack Compose。在原生(Skip Fuse)模块中,Swift 由 Swift 工具链直接编译为 Android 原生代码,并桥接至 Kotlin/Jetpack Compose。两种模式的差异详见原生与转译模式。skipapp-hello、skipapp-ahoy 和 skipapp-hiya 包含可在两个平台运行的单元测试,skipapp-howdy 则未包含测试。

此仓库的内容与 skip init 生成的项目完全一致,持续集成会验证它始终与生成模板保持相同。因此,可以使用以下命令重新创建该项目:

skip init --no-build --native-app --module-tests --appid=ahoy.skipper --version 1.0.0 skipapp-ahoy AhoySkipper SkipperModel

此项目既是一个独立的 Swift Package Manager 包,也是一个 Xcode 项目。它会构建 iOS 应用,并通过 skipstone 插件生成和构建对应的 Android Kotlin Gradle 项目。

可以使用标准的 swift test 命令测试应用,也可以在 Xcode 中选择 macOS 运行目标并运行测试目标。后一种方式既会执行 Swift 测试,也会在 Robolectric Android 模拟环境中执行转译后的 Kotlin JUnit 测试。使用 skip test 还可执行一致性测试,它会输出一张表格,对比两个平台的测试结果。

要分别在 iOS 模拟器和 Android 模拟器中运行此应用,必须同时安装 Xcode 与 Android Studio。请先启动 Android 模拟器,例如从 Android Studio 的设备管理器中启动。

在 Xcode 中打开 Project.xcworkspace,然后运行“AhoySkipper App”方案。构建阶段会执行“Launch Android APK”脚本,在构建 iOS 应用的同时,将 Android 应用部署到正在运行的模拟器或已连接设备。iOS 日志显示在 Xcode 控制台中;Android 日志显示在 Android Studio 的 Logcat 标签页中,也可以通过 adb logcat 查看。

欢迎为此包贡献功能改进和错误修复。

为此包或其他 Skip 包贡献代码的一般流程如下:

  1. Fork 此仓库,并在“Actions”标签页中启用工作流。
  2. 将你的 fork 检出到本地。
  3. 与 Skip 应用一起开发时,将此包加入共享工作区,以便在应用中即时使用你的修改。
  4. 将修改推送到你的 fork,并确认 Actions 标签页中的持续集成检查全部通过。
  5. 将你的名字添加到 Skip 贡献者协议 ↗中。
  6. 从你的 fork 发起 Pull Request,并说明所做的修改。

skiptools/skipapp-ahoy ↗ 最近的 1 个发布版本:

完整发布历史:github.com/skiptools/skipapp-ahoy/releases ↗ — Atom 订阅 ↗