skip

skip

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

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

Skip移动应用开发Swift跨平台开源项目Github

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
<img alt="终端 skip checkup 命令输出的截图" src="https://yellow-cdn.veclightyear.com/835a84d5/05fc05fc-c22d-4041-8b3a-edd201169017.png" style="width: 100%;" />

如果检查通过,你就可以开始使用 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 模拟器。

<img alt="Android Studio 设备管理器的截图" src="https://yellow-cdn.veclightyear.com/835a84d5/67aacf71-43e8-44f1-9e0d-638565dfd0bd.png" style="width: 100%;" />

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

<img alt="Skip 在 iOS 模拟器和 Android 模拟器中运行的截图" src="https://yellow-cdn.veclightyear.com/835a84d5/36163710-dc26-4534-b3d8-9c8b5debb20b.png" style="width: 100%;" />

浏览到 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显示错误的行号时,通常只偏差一行。

编辑推荐精选

博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
商汤小浣熊

商汤小浣熊

最强AI数据分析助手

小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。

imini AI

imini AI

像人一样思考的AI智能体

imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。

下拉加载更多