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

编辑推荐精选

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

扣子-AI办公

扣子-AI办公

AI办公助手,复杂任务高效处理

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

TRAE编程

TRAE编程

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

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

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

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

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

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

下拉加载更多