跳到主要内容
本页目录

项目模板

新建项目时可选的 11 个内置模板,模板目录的结构,以及如何添加自定义模板。VS Code 向导和命令行使用同一份模板。

内置模板

共 11 个,按向导中的顺序排列。id 用于命令行 kxbuild project create -t。所有模板的部署目标为 iOS 15,不包含签名材料,证书按证书与签名配置。

原生应用

模板id内容
iOS 应用(SwiftUI)app_swiftuiApp 入口和 ContentView,无 Storyboard
iOS 应用(Swift · UIKit)app_swift单页 UIKit 应用,Storyboard、SceneDelegate、资源目录
iOS 应用(WKWebView 套壳 / H5)app_webview整个界面是一个 WKWebView,加载打包的 www/ 目录或远程 URL,带进度条、返回手势和 JS 与原生互调示例
iOS 应用(Objective-C · UIKit)app_objcObjective-C 单页 UIKit 应用,Storyboard、资源目录
iOS 应用(Objective-C + Swift 混编)app_objc_swiftObjective-C 主体加 Swift 文件,桥接头和 -Swift.h 双向调用示例
iOS 应用(Swift · CocoaPods)app_swift_cocoapodsSwift UIKit 应用加 Podfile,创建后自动执行 pod install

跨平台应用

这三个模板通过各框架的脚手架生成工程,再由 kxbuild doctor 完成 iOS 端配置,需要几分钟。

模板id内容需要
Flutter 应用flutter_appflutter create 生成的 iOS 和 Android 工程,Bundle ID 写入 Runner targetFlutter SDK
React Native 应用react_native_appReact Native 社区 CLI 初始化,完成 pod installNode.js、CocoaPods,随工具链安装
Expo 应用expo_appcreate-expo-app 初始化,执行 expo prebuild 和 pod installNode.js、CocoaPods,随工具链安装

库

模板id内容
Framework(Swift 动态库)framework_swiftiOS 动态 Framework,带伞头文件和一个 public 示例类
静态库(Objective-C)lib_static_objclib<Name>.a,公开头文件输出到 include/<Name>/

模板结构

一个模板就是一个目录,目录名即模板 id。除 template.json 和 template.sh 外,其余文件原样复制到新工程中。

app_swift/ template.json 名字、说明、排序、依赖 template.sh 可选,复制完成后在新工程目录中执行 .gitignore __NAME__.xcodeproj/ __NAME__/ AppDelegate.swift …

文件内容和文件名中的占位符都会被替换,二进制文件原样复制。

占位符替换为
__NAME__项目名
__BUNDLE_ID__Bundle ID
__DATE__创建日期,格式 yyyy/MM/dd

template.json 示例

{ "name": { "en": "iOS App (Swift, UIKit)", "zh": "iOS 应用(Swift · UIKit)" }, "description": { "en": "…", "zh": "…" }, "category": "app", // app | library | hybrid "order": 10, // 列表中的位置,小的在前 "requires": ["cocoapods"] // 可选,依赖的外部工具,向导中标注在名字后面 }

template.sh 在复制和占位符替换之后用 bash 执行,Windows 上使用工具链自带的 MSYS2 bash,工作目录为新工程目录。脚本可以读取以下环境变量。

变量值
KXBUILD_PROJECT_NAME / KXBUILD_BUNDLE_ID项目名、Bundle ID
KXBUILD_PROJECT_DIR新工程目录
KXBUILD_TEMPLATE_ID / KXBUILD_TEMPLATE_DIR模板 id、模板目录
KXBUILD_HOME / KXBUILD_BIN工具链目录、kxbuild 可执行文件

脚本退出码非 0 视为创建失败,工程目录保留。模板可以不带任何文件,只用 template.sh 生成整个工程,Flutter、React Native、Expo 三个内置模板就是这样。Windows 上调用原生工具要用 pod.bat、npx.cmd、flutter.bat 这样的名字。

自定义模板

把常用的工程结构做成模板,新建项目时直接选用。

步骤说明
1 准备工程用最接近的内置模板新建一个工程,改成需要的样子并编译通过。删除 build/、xcuserdata/ 等产物,不要包含证书
2 替换占位符工程名出现的地方全部换成 __NAME__,包括 .xcodeproj 目录名、源码目录名、pbxproj 中的 target 和产品名、Info.plist。Bundle ID 换成 __BUNDLE_ID__
3 添加 template.json目录名作为 id,不要和内置模板重名,例如 mycorp_app
4 放入模板目录整个目录复制到 KXBUILD_HOME\resources\templates\,重新打开新建向导即可看到

也可以不带文件,只写一个 template.sh,用现有脚手架或 git clone 生成工程。工具链更新只覆盖同名目录,自定义模板会保留,因此 id 不能和内置模板重名。模板可以复制到其他机器的同一位置使用。

接下来