这个工具叫 PermissionsKit,专为 iOS App 开发者准备。它不面向普通用户,但如果你正用 Xcode 写 App,它能帮你省掉至少 20 行重复代码。
每次加一个新功能——比如拍照、读日历、调用定位——你都得手动补权限申请逻辑、填 Info.plist 描述、处理不同状态返回。写错一处,审核就卡住;漏写一条,用户点开就崩溃。
而 PermissionsKit 把所有这些变成「导入即用」:选你要的权限模块,调一个方法,状态自动识别。不用自己拼字符串,也不用记每个 key 叫什么。
能替代什么 / 能省多少钱
它不直接替代某款付费软件,而是替代你花在「反复写权限逻辑」上的时间。iOS 开发者每上线一个带权限的功能,平均要额外花 30–60 分钟配置和调试,这还没算被 App Store 打回重改的次数。
不是代码写得少,是 Apple 要求的那些描述文案和状态判断,全被它包圆了。
官方没提价格,因为它压根不收钱。MIT 协议,可商用,无隐藏条款。你不用买任何插件、模板或「权限管理 SDK」服务,也无需订阅开发者工具平台。
价格直接砍到零。
主要能干这几件事
- 把「请求相机权限」这种操作,缩成一行 Swift 代码:
Permission.camera.request { status in if status == .authorized { ... } }。不用再手动调AVCaptureDevice.requestAccess(for: .video),也不用自己判断是否已授权、是否被永久拒绝、是否首次弹窗。 - 自动帮你生成 Info.plist 里必须写的那串英文 key,比如
NSCameraUsageDescription。你只要写中文描述,它连 key 名都给你返出来,粘贴过去就能编译通过。调用Permission.camera.usageDescriptionKey就返回字符串字面量,不是占位符,不是宏,就是真实可用的 key 名。 - 支持 16 类系统权限,从基础的相机、麦克风,到敏感的健康数据、FaceID、追踪 ID。每类权限单独打包,你只引入用得到的,App 审核时看不到多余权限声明。比如只用相机,就只勾
CameraPermission,Xcode 不会把HealthPermission的符号链进二进制。 - 读取权限当前状态变得可靠:.authorized、.denied、.notDetermined 三种值清清楚楚。不像原生 API 有时返回模糊结果,尤其对 Location 和 Health 这类复杂权限。比如
CLLocationManager.authorizationStatus()在某些系统版本下对后台定位返回值不一致,而Permission.location.authorized统一按 Apple 文档语义做封装。 - 本地化更省事。它能一键导出 xliff 文件,帮你把所有权限描述文案按语言分好,不用手动建 InfoPlist.strings、再一个个对齐 key。导出后,Xcode 自动识别
NSCameraUsageDescription等 key,并在对应语言的 strings 文件里留空待填。 - FaceID 权限虽然不能区分 .authorized 和 .notDetermined,但它明确告诉你:只有 .denied 是确定的。这点文档里写了,你不用猜,也不会误判。调用
Permission.faceID.authorized返回的是.notDetermined,不代表用户没设置 FaceID,只是系统不暴露该状态,工具不掩盖事实,只如实转译。
怎么开始用
- 打开 Xcode,在菜单栏点 File → Add Package Dependencies,粘贴地址:https://github.com/sparrowcode/PermissionsKit,回车确认。
- 在弹出窗口里,只勾选你实际要用的权限模块,比如 CameraPermission 或 LocationPermission,别全选,Xcode 会只编译你勾的那些。注意:每个模块名严格对应表格里的 Product 列,大小写不能错。
- 在 Swift 文件顶部加两行:
import PermissionsKit和import CameraPermission(换成你选的模块名),然后就能直接调Permission.camera.request了。请求回调闭包里,参数是枚举值,不是布尔,避免歧义。
项目信息
Universal API for request permission and get its statuses.
5.8k
Stars
480
Forks
Swift
MIT
它不承诺“零 Bug”,但承诺“零冗余”,没多一行代码,也没少一个必要判断。


