Project Icon

skip

Swift驱动的iOS和Android应用开发框架

Skip是一个基于Swift的开源框架,支持同时开发iOS和Android应用。它提供完整的开发工具链,支持模块化项目结构,并集成Xcode工作流。Skip能帮助开发者快速构建双平台应用,提高开发效率。该框架拥有详细文档和活跃的社区支持,适合各类移动应用开发需求。

Skip

Skip 是一种使用 Swift 创建双平台移动应用的技术。阅读这篇介绍以了解更多关于 Skip 的信息。

这个仓库托管了 Skip 开发工具链,也称为 SkipStone。它还托管了 Skip 论坛,用于一般讨论以及特定的问题和错误报告

入门

系统要求

Skip 需要一台安装了 Xcode 15Android Studio 2023Homebrew 的 macOS 13 开发机器。

安装

通过运行以下终端命令安装 Skip:

brew install skiptools/skip/skip

这将下载并安装 skip 工具本身,以及构建和测试应用程序 Kotlin/Android 端所需的 gradle 和 JDK 依赖项。注意:如果你的机器上还没有安装兼容的 JDK+,你可能需要输入管理员密码来完成安装。

通过运行以下命令确保满足开发先决条件:

skip checkup
终端 skip checkup 命令输出的截图

如果检查通过,你就可以开始使用 Skip 进行开发了!

创建应用 {#app_development}

使用以下命令创建新的应用项目:

skip init --open-xcode --appid=bundle.id project-name AppName

例如:

skip init --open-xcode --appid=com.xyz.HelloSkip hello-skip HelloSkip

这将创建一个 hello-skip/ 文件夹,其中包含一个新的 SwiftPM 包,包含一个名为 HelloSkip 的单一模块,以及名为 DarwinAndroid 的文件夹和共享的 Skip.env 应用配置文件。Darwin 文件夹将包含一个带有 HelloSkip 目标的 HelloSkip.xcodeproj 项目,可以在 Xcode 中打开。

Xcode 将打开新项目,但在你可以构建和启动转译后的应用之前,需要运行一个 Android 模拟器。启动 Android Studio.app 并从欢迎对话框的省略号菜单中打开 Virtual Device Manager。从那里,Create Device(例如,"Pixel 6"),然后 Launch 模拟器。

Android Studio 设备管理器的截图

一旦 Android 模拟器运行,在 Xcode 中选择并运行 HelloSkip 目标。第一次构建将花费一些时间来编译 Skip 库,你可能会看到一个对话框,确认你信任 Skip 插件。一旦构建和运行操作完成,SwiftUI 应用将在选定的 iOS 模拟器中打开,同时转译后的应用将在当前运行的 Android 模拟器中启动。

Skip 在 iOS 模拟器和 Android 模拟器中运行的截图

浏览到 ContentView.swift 文件,做一些小的修改并重新运行目标:应用将在两个平台上同时重新构建和重新运行,包含你的更改。

查看产品文档以获取有关使用 Skip 开发的更多信息。祝你使用 Skip 愉快!

创建多模块应用

Skip 设计用于适应和鼓励使用多模块项目。默认的 skip init 命令为简单起见创建单模块应用,但你可以通过在命令末尾指定额外的模块名称来创建模块化项目。例如:

skip init --open-xcode --appid=com.xyz.HelloSkip multi-project HelloSkip HelloModel HelloCore

这个命令将创建一个包含三个模块的 SwiftPM 项目:HelloSkipHelloModelHelloCore。这种模块创建的规则是,所有模块都依赖于其后续的对等模块,第一个模块(HelloSkip)最初依赖于 SkipUI,第二个模块依赖于 SkipModel,链中的最后一个模块依赖于 SkipFoundation。可以手动编辑 Package.swift 文件来重新安排依赖关系,或添加对外部 Skip 框架的新依赖,如新兴的 SkipSQLSkipXML 库。

创建双平台框架 {#framework_development}

Skip 框架项目是封装通用功能的纯 SwiftPM 包。它们比应用项目更简单,因为它们不需要 Darwin/Android/ 文件夹。

每个核心 Skip 兼容性框架(skip-libskip-unitskip-foundationskip-ui)都是 Skip 框架项目。其他常用项目包括 skip-sqlskip-scriptskip-zip

可以使用以下命令创建并打开新的框架项目:

skip init --build --test lib-name ModuleName

这将创建一个新的 lib-name 文件夹,其中包含一个带有 ModuleNameModuleNameTests 目标的 Package.swift

可以在 Xcode.app 中打开这个项目,你可以用它来构建和运行单元测试。从终端运行 swift buildswift test 也可以用于作为持续集成过程的一部分进行无头测试。

Skip 框架结构

Skip 框架的结构与任何其他 SPM 包完全相同:

lib-name
├── Package.resolved
├── Package.swift
├── README.md
├── Sources
│   └── ModuleName
│       ├── ModuleName.swift
│       ├── Resources
│       │   └── Localizable.xcstrings
│       └── Skip
│           └── skip.yml
└── Tests
    └── ModuleNameTests
        ├── ModuleNameTests.swift
        ├── Resources
        │   └── TestData.json
        ├── Skip
        │   └── skip.yml
        └── XCSkipTests.swift

Skip 框架使用标准的 Package.swift 文件,但增加了对 skip 的依赖和使用 skipstone 插件进行转译:

// swift-tools-version: 5.8
import PackageDescription

let package = Package(
    name: "lib-name",
    defaultLocalization: "en",
    platforms: [.iOS(.v16), .macOS(.v13), .tvOS(.v16), .watchOS(.v9), .macCatalyst(.v16)],
    products: [
        .library(name: "ModuleName", targets: ["ModuleName"]),
    ],
    dependencies: [
        .package(url: "https://source.skip.tools/skip.git", from: "1.0.4"),
        .package(url: "https://source.skip.tools/skip-foundation.git", from: "0.0.0"),
    ],
    targets: [
        .target(name: "ModuleName", plugins: [.plugin(name: "skipstone", package: "skip")]),
        .testTarget(name: "ModuleNameTests", dependencies: ["ModuleName"], plugins: [.plugin(name: "skipstone", package: "skip")]),
    ]
)

skip init 参考

zap /tmp % skip init --help
概述: 初始化一个新的Skip项目

用法: skip init [<选项>] <项目名称> <模块名称> ...

参数:
  <项目名称>              项目文件夹名称
  <模块名称>              要创建的模块名称

输出选项:
  -o, --output <路径>     将输出发送到指定文件(stdout: -)
  -E, --message-errout    将消息输出到输出而不是stderr
  -v, --verbose           是否显示详细消息
  -q, --quiet             安静模式:禁止输出
  -J, --json              以格式化JSON输出
  -j, --json-compact      以紧凑JSON输出
  -M, --message-plain     以纯文本而非JSON显示控制台消息
  -A, --json-array        将JSON输出包装并分隔为数组
  --plain/--no-plain      不显示颜色或进度动画(默认:--no-plain)

创建选项:
  --id <id>               应用程序标识符(默认:net.example.MyApp)
  -d, --dir <目录>        项目创建的基础文件夹
  -c, --configuration <c> 配置调试/发布(默认:调试)
  -t, --template <id>     新项目的模板名称/ID(默认:skipapp)
  -h, --template-host <主机>
                          模板仓库的主机名(默认:https://github.com)
  -f, --template-file <zip>
                          要使用的模板zip文件路径
  --resource-path <资源路径>
                          资源文件夹名称(默认:Resources)
  --chain/--no-chain      在模块间创建库依赖(默认:--chain)
  --zero/--no-zero        在Package.swift中添加SKIP_ZERO环境检查(默认:--zero)
  --git-repo/--no-git-repo
                          为应用创建本地git仓库(默认:--no-git-repo)
  --free                  以免费模式创建包
  --show-tree/--no-show-tree
                          显示新文件的文件系统树摘要(默认:--no-show-tree)
  --module-tests/--no-module-tests
                          是否创建测试模块(默认:--module-tests)
  --validate-package/--no-validate-package
                          验证生成的Package.swift文件(默认:--validate-package)

工具选项:
  --xcodebuild <路径>     Xcode命令路径
  --swift <路径>          Swift命令路径
  --gradle <路径>         Gradle命令路径
  --adb <路径>            ADB命令路径
  --emulator <路径>       Android模拟器路径
  --android-home <路径>   Android SDK路径(ANDROID_HOME)

构建选项:
  --build/--no-build      运行项目构建(默认:--build)
  --test/--no-test        运行项目测试(默认:--no-test)
  --verify/--no-verify    验证项目输出(默认:--verify)

选项:
  --appid <appid>         将库嵌入具有给定包ID的应用
  --icon-color <RGB>      图标背景的RGB十六进制颜色(默认:4994EC)
  --version <版本>        将初始版本设置为给定值
  --open-xcode            打开生成的Xcode项目
  --open-gradle           打开生成的Gradle项目
  -h, --help              显示帮助信息。

故障排除

Skip的架构依赖于Xcode 15和Swift Package Manager 5.9使用的插件系统的最新进展。当出现意外问题时,通常最好的第一步是清理Xcode构建("产品"→"清理构建文件夹")并重置包("文件"→"包"→"重置包缓存")。有时需要重启Xcode,甚至可能需要删除本地的"DerivedData/"文件夹。

下面列出了具体的已知错误情况。请搜索文档、问题和讨论以获取更多信息并报告问题。

  • Xcode有时会报告如下错误消息:

    Internal inconsistency error (didStartTask): targetID (174) not found in _activeTargets.
    Internal inconsistency error (didEndTask): '12' missing from _activeTasks.
    

    当这些错误发生时,构建似乎成功完成,但更改未被应用。不幸的是,这是Xcode的一个错误。我们发现以下解决方法:

    • 继续重试构建。最终Xcode可能会成功完成,尽管错误通常会变得越来越频繁,直到你被迫采用下面的其他解决方案。
    • 构建不同的目标然后重新构建你的应用目标可能会清除错误。
    • 重启Xcode。
    • 清理并重新构建。

    你可以在Swift.org论坛上阅读更多关于这个Xcode错误的信息。

  • Skip可能会在构建错误中高亮显示错误的行。当Skip显示错误的行号时,通常只偏差一行。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号