Windows 上开发 Swift iOS App
Xcode 工程打开就能编,SPM 依赖直接解析,纯 Swift Package 也能转成 App 出 ipa。
Swift 的 iOS 工程在 Windows 上可以直接编译、安装到 iPhone 并断点调试。支持 SwiftUI、Swift Package Manager 和与 Objective-C 混编,工程设置、target 依赖和编译参数按 Xcode 的规则读取,不需要改造。Swift 项目分两类,Xcode 工程和只有 Package.swift 的纯 Swift Package,下面分开介绍。使用 CocoaPods 的工程见 CocoaPods。
Xcode 工程
有 .xcodeproj 或 .xcworkspace 的工程,依赖可以用 Swift Package 管理,构建前自动解析。
体检
检查并修好编译需要的环境。
以下两种做法任选其一
-
VS Code 插件
KXBuild 视图标题栏「···」中运行「体检并修复开发环境」。
-
命令行
> kxbuild doctor .\MyApp.xcodeproj
添加 Swift Package 依赖
相当于 Xcode 的 Add Package Dependencies。远程包默认用最新版本,允许升级到下一个主版本之前,和 Xcode 一样,添加时需要联网。
以下两种做法任选其一
-
VS Code 插件
命令面板运行 KXBuild: 添加 Swift Package 依赖…,或在 KXBuild 视图中右键 target 选择它。按提示输入包的 Git 地址或选择本地包目录,再选要用的产品。
-
命令行
按包的位置执行其中一条。
远程包
> kxbuild project add-package -P .\MyApp.xcodeproj --url https://github.com/Alamofire/Alamofire.git --product Alamofire本地包
> kxbuild project add-package -P .\MyApp.xcodeproj --path ..\MyKit指定版本、target 的写法见 project add-package。
编码
打开 .swift 文件就有补全、跳转定义和错误提示,SwiftUI 和系统框架的 API 也能补全。引用工程里其他 target 或 Swift Package 的模块时先构建一次。提示异常时见代码提示与索引。
调试
USB 连接 iPhone,在 KXBuild 视图中选中设备,按 F5 编译、安装并停在断点上。Swift 和 Objective-C 代码都能设断点。
发布
用 Release 配置构建,工程目录下生成 build\MyApp.ipa。上传到 App Store Connect 见发布与上架。
以下两种做法任选其一
-
VS Code 插件
在 KXBuild 视图的「构建配置」节点切到 Release,命令面板运行 KXBuild: 构建。
-
命令行
按工程类型执行其中一条。
.xcodeproj 工程
> kxbuild build .\MyApp.xcodeproj -c Release.xcworkspace 工作区
> kxbuild build .\MyApp.xcworkspace -c Release
纯 Swift Package
只有 Package.swift、没有 Xcode 工程的项目,在 VS Code 中打开 Package.swift 所在目录就能编写和编译检查。Swift Package 本身打包不成 App,在 Mac 上也一样,所以要装到 iPhone 或出 ipa 时分两种情况。
- 包本身是一个 App,可执行 target 里是 SwiftUI 或 UIKit 的 App 入口。按下面的步骤转为 App 工程。
- 包只提供库,它是给 App 用的。在 App 工程里按上面第 3 步添加 Swift Package 依赖即可。
编码与编译检查
打开 .swift 文件就有补全、跳转定义和错误提示,SwiftUI、UIKit 等 iOS 框架的 API 也能补全。编译检查在 Package.swift 所在目录执行。
> kxbuild build .转为 App 工程
转换后包目录下多出一个 MyApp 子目录,里面是 App 工程。App 的代码还是包里的那份,改包里的代码就是改 App。把这个子目录和包一起提交到版本库。
App 用到的同包 target 没有对应的 library 产品时,转换会在 Package.swift 的 products 里补一行 .library。转换完成后检查并提交 Package.swift 的这处改动。
以下两种做法任选其一
-
VS Code 插件
命令面板运行 KXBuild: 将 Swift Package 转为 App 工程(或点 KXBuild 视图里的提示行),按提示填写 App 名和 Bundle ID。完成后新工程自动设为启动项目。
-
命令行
在 Package.swift 所在目录执行。
> kxbuild project spm2app . -n MyApp -b com.example.myapp
常见问题
| 现象 | 处理 |
|---|---|
| Debug 构建链接时报 undefined symbol: …vpfi | 开源 Swift 编译器的已知问题,出现在 @State private var count = 0 这类带初始值的属性上,而结构体的 init 写在另一个文件里。设置环境变量 KXBUILD_SWIFT_WHOLE_MODULE=all 后重开 VS Code 再构建,Swift 目标改为整模块编译。详见常见问题 |
接下来
构建与配置
Debug 和 Release 的区别,scheme / target / 配置怎么选,怎么覆盖构建设置,产物在哪,.ipa 什么时候出,Swift Package 依赖何时解析。
发布与上架
用 Distribution 证书构建 Release 直接得到 .ipa,用 Appuploader 或 Transporter 传到 App Store Connect,走 TestFlight 和提审;Ad Hoc / 企业分发同一条路。
没找到你的工程类型?
kxbuild是通用编译工具,只要最终能产出 Xcode 工程,KXBuild 就能编。列出来的技术支持只是一些技术领域的应用,遇到问题随时联系我们