XCode如何创建可打包系统扩展的CLI工具应用
Xcode 打包系统扩展到CLI工具的解决方案
前置说明
Xcode 默认生成的 Command Line Tool 是单二进制文件,无 Bundle 目录结构,无法直接内置资源。你需要先修改配置让CLI工具生成带标准目录结构的 Bundle 包,再按要求放置系统扩展即可。
操作步骤
- 新建基础CLI项目
打开Xcode,选择macOS分类下的Command Line Tool模板创建项目,按需选择开发语言。 - 开启Bundle结构配置
选中项目的CLI目标,进入Build Settings标签页:- 搜索
Enable Bundles,将配置值改为YES - 搜索
Wrapper Extension,将配置值改为app(也可自定义扩展名,只要保留Bundle结构即可)
配置完成后编译产物会变成带Contents目录的Bundle包,而非单二进制文件。
- 搜索
- 添加系统扩展到项目
将预编译好的.systemextension格式系统扩展拖入Xcode项目,弹窗中勾选CLI目标、勾选Copy items if needed完成添加。 - 配置扩展复制路径
进入CLI目标的Build Phases标签页:- 点击左上角+号,选择
New Copy Files Phase - 将该阶段的
Destination选为Custom Path,路径填写Library/SystemExtensions - 将你的系统扩展文件拖入该阶段的文件列表,勾选
Code Sign On Copy
- 点击左上角+号,选择
- 编写安装卸载逻辑
调用OSSystemExtensionRequest系列API执行操作,读取内置扩展路径时通过[NSBundle mainBundle]的路径查询方法即可获取到扩展的完整路径:
NSString *extPath = [[NSBundle mainBundle] pathForResource:@"你的扩展名" ofType:@"systemextension"];
- 权限与签名配置
- 给CLI目标添加
com.apple.developer.system-extension.install权限entitlement - 开启
Hardened Runtime配置 - 确保CLI工具和系统扩展均使用合法的开发者ID签名,两者的团队ID需保持一致
- 给CLI目标添加
验证方式
编译完成后右键点击生成的Bundle包,选择「显示包内容」,确认Contents/Library/SystemExtensions路径下存在你的系统扩展文件即可正常使用。
内容的提问来源于stack exchange,提问作者Aviv David
相关产品推荐
相关产品推荐

