[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-6809":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":15,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":42,"readmeContent":43,"aiSummary":44,"trendingCount":16,"starSnapshotCount":16,"syncStatus":45,"lastSyncTime":46,"discoverSource":47},6809,"PermissionsKit","sparrowcode\u002FPermissionsKit","sparrowcode","Universal API for request permission and get its statuses.","https:\u002F\u002Fx.com\u002Fsparrowcode_ios",null,"Swift",5817,477,90,4,0,1,39.04,"MIT License",false,"main",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"calendar","camera","dialog","interface","ios","location","notification","permission","permissionkit","permissions","photo-gallery","reminder","request","scope","sparrow","sppermissions","ui","wizard","xcode","2026-06-12 02:01:30","# PermissionsKit \n\nUniversal API for request permission and get its statuses — available `.authorized`, `.denied` & `.notDetermined`.\n\n\u003Cp float=\"left\">\n    \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fcamera.png\" width=\"38\">\n    \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fphotos.png\" width=\"38\">\n    \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fnotifications.png\" width=\"38\">\n    \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Flocation.png\" width=\"38\">\n    \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fmicrophone.png\" width=\"38\">\n    \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fcalendar.png\" width=\"38\">\n    \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fcontacts.png\" width=\"38\">\n    \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Freminders.png\" width=\"38\">\n    \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fmotion.png\" width=\"38\">\n    \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fmusic.png\" width=\"38\">\n    \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fspeech.png\" width=\"38\">\n    \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fbluetooth.png\" width=\"38\">\n    \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fhealth.png\" width=\"38\">\n    \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Ftracking.png\" width=\"38\">\n    \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Ffaceid.png\" width=\"38\">\n    \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fsiri.png\" width=\"38\">\n\u003C\u002Fp>\n\n### iOS Dev Community\n\n\u003Cp float=\"left\">\n    \u003Ca href=\"https:\u002F\u002Ftwitter.com\u002Fi\u002Fcommunities\u002F1730194338489987403\">\n        \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fbadges\u002Fx-community.png?version=1\" height=\"52\">\n    \u003C\u002Fa>\n    \u003Ca href=\"#apps-using\">\n        \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fbadges\u002Fdownload-on-the-appstore.png?version=4\" height=\"52\">\n    \u003C\u002Fa>\n\u003C\u002Fp>\n\n## Navigate\n\n- [Permissions](#permissions)\n- [Installation](#installation)\n    - [Swift Package Manager](#swift-package-manager)\n    - [CocoaPods](#cocoapods)\n    - [Why Modules](#why-modules)\n- [Usage](#request-permission)\n    - [Request Permission](#request-permission)\n    - [Get Status Permission](#get-status-permission)\n- [Keys in Info.plist](#keys-in-infoplist)\n    - [Localisations](#localisation)\n- [Apps Using](#apps-using)\n\n### Permissions\n\n| Icon |  Permission | Key for `Info.plist` | Get Status | Make Request |\n| :--: | :---------- | :------------------- | :--------: | :----------: |\n| \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fbluetooth.png\" width=\"38\"> | Bluetooth | NSBluetoothAlwaysUsageDescription, NSBluetoothPeripheralUsageDescription | ✅ | ✅ |\n| \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fcalendar.png\" width=\"38\"> | Calendar | NSCalendarsUsageDescription, NSCalendarsFullAccessUsageDescription, NSCalendarsWriteOnlyAccessUsageDescription | ✅ | ✅ |\n| \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fcamera.png\" width=\"38\"> | Camera | NSCameraUsageDescription | ✅ | ✅ |\n| \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fcontacts.png\" width=\"38\"> | Contacts | NSContactsUsageDescription | ✅ | ✅ |\n| \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Ffaceid.png\" width=\"38\"> | FaceID | NSFaceIDUsageDescription | ☑️ | ✅ |\n| \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fhealth.png\" width=\"38\"> | Health | NSHealthUpdateUsageDescription, NSHealthShareUsageDescription | ✅ | ✅ |\n| \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Flocation.png\" width=\"38\"> | Location | NSLocationAlwaysAndWhenInUseUsageDescription NSLocationWhenInUseUsageDescription | ✅ | ✅ |\n| \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fmusic.png\" width=\"38\"> | Media Library | NSAppleMusicUsageDescription | ✅ | ✅ |\n| \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fmicrophone.png\" width=\"38\"> | Microphone | NSMicrophoneUsageDescription | ✅ | ✅ |\n| \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fmotion.png\" width=\"38\"> | Motion | NSMotionUsageDescription | ✅ | ✅ |\n| \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fnotifications.png\" width=\"38\"> | Notification | | ✅ | ✅ |\n| \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fphotos.png\" width=\"38\"> | Photo Library | NSPhotoLibraryUsageDescription, NSPhotoLibraryAddUsageDescription | ✅ | ✅ |\n| \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Freminders.png\" width=\"38\"> | Reminders | NSRemindersUsageDescription, NSRemindersFullAccessUsageDescription | ✅ | ✅ |\n| \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fsiri.png\" width=\"38\"> | Siri | NSSiriUsageDescription | ✅ | ✅ |\n| \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Fspeech.png\" width=\"38\"> | Speech Recognizer | NSSpeechRecognitionUsageDescription | ✅ | ✅ |\n| \u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fpermissionskit\u002Ficons\u002Ftracking.png\" width=\"38\"> | Tracking | NSUserTrackingUsageDescription | ✅ | ✅ |\n\n## Installation\n\nReady to use on iOS 12+. Supports iOS, macOS, visionOS, tvOS & watchOS. Working with `UIKit` and `SwiftUI`.\n\n### Swift Package Manager\n\nIn Xcode go to Project -> Your Project Name -> `Package Dependencies` -> Tap *Plus*. Insert url:\n\n```\nhttps:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit\n```\n\nNext, choose the permissions that you need. But don't add all of them, because apple will reject app.\nOr adding it to the `dependencies` of your `Package.swift`:\n\n```swift\ndependencies: [\n    .package(url: \"https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit\", .upToNextMajor(from: \"11.0.0\"))\n]\n```\n\nand choose valid targets.\n\n### CocoaPods:\n\nThis is an outdated way. I advise you to use [SPM](#swift-package-manager). However, I will continue to support Cocoapods for some time.\n\n\u003Cdetails>\u003Csummary>Cocoapods Installation\u003C\u002Fsummary>\n\n[CocoaPods](https:\u002F\u002Fcocoapods.org) is a dependency manager. For usage and installation instructions, visit their website. To integrate using CocoaPods, specify it in your `Podfile`:\n\n```ruby\npod 'PermissionsKit\u002FNotificationPermission', :git => 'https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit'\n```\n\nDue to Apple's new policy regarding permission access you need to specifically define what kind of permissions you want to access using subspecs.\n\n```ruby\npod 'PermissionsKit\u002FCameraPermission', :git => 'https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit'\npod 'PermissionsKit\u002FContactsPermission', :git => 'https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit'\npod 'PermissionsKit\u002FCalendarPermission', :git => 'https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit'\npod 'PermissionsKit\u002FPhotoLibraryPermission', :git => 'https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit'\npod 'PermissionsKit\u002FNotificationPermission', :git => 'https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit'\npod 'PermissionsKit\u002FMicrophonePermission', :git => 'https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit'\npod 'PermissionsKit\u002FRemindersPermission', :git => 'https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit'\npod 'PermissionsKit\u002FSpeechRecognizerPermission', :git => 'https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit'\npod 'PermissionsKit\u002FLocationPermission', :git => 'https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit'\npod 'PermissionsKit\u002FMotionPermission', :git => 'https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit'\npod 'PermissionsKit\u002FMediaLibraryPermission', :git => 'https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit'\npod 'PermissionsKit\u002FBluetoothPermission', :git => 'https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit'\npod 'PermissionsKit\u002FTrackingPermission', :git => 'https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit'\npod 'PermissionsKit\u002FFaceIDPermission', :git => 'https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit'\npod 'PermissionsKit\u002FSiriPermission', :git => 'https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit'\npod 'PermissionsKit\u002FHealthPermission', :git => 'https:\u002F\u002Fgithub.com\u002Fsparrowcode\u002FPermissionsKit'\n```\n\u003C\u002Fdetails>\n\n## Why Modules\n\nIf you put all your code into one package and compile it, the Apple Review Team will see a lot of calls to the permissions API. Most likely, they will ask you to provide a valid reason for why you really need those permissions. Using modules allows you to compile only the parts of the code that are actually in use. Just select only what you need.\n\n> [!WARNING]\n> Import only the permissions you really need.\n\n## Request Permission\n\n```swift\nimport PermissionsKit\nimport NotificationPermission\n\nPermissionsKit.Permission.notification([.alert, .badge, .sound]).request {\n\n}\n```\n\n## Get Status Permission\n\n```swift\nimport PermissionsKit\nimport NotificationPermission\n\nlet authorized = Permission.notification.authorized\n```\n\n> [!WARNING]\n> For FaceID permission no way detect if request `.authorized` or `.notDetermined` accurate. Status `.denied` detect well. For now for both states return `.notDetermined`. \n\n## Keys in `Info.plist`\n\nYou need to add some strings to the `Info.plist` file with descriptions per Apple's requirements. You can get a plist of keys for permissions as follows:\n\n```swift\nlet key = Permission.bluetooth.usageDescriptionKey\n```\n\n> [!NOTE]\n> Do not use the description as the name of the key. Xcode can't build this.\n\n### Localisation\n\nIf you use xliff localization export, keys will be create automatically. If you prefer do the localization file manually, you need to create `InfoPlist.strings`, select languages on the right side menu and add keys as keys in plist-file. See:\n\n```\n\"NSCameraUsageDescription\" = \"Here description of usage camera\";\n```\n\n## Apps Using\n\n\u003Cp float=\"left\">\n    \u003Ca href=\"https:\u002F\u002Fapps.apple.com\u002Fapp\u002Fid1487937127\">\u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fapps-using\u002Fid1487937127.png?version=2\" height=\"65\">\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fapps.apple.com\u002Fapp\u002Fid1624477055\">\u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fapps-using\u002Fid1624477055.png?version=2\" height=\"65\">\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fapps.apple.com\u002Fapp\u002Fid1625641322\">\u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fapps-using\u002Fid1625641322.png?version=2\" height=\"65\">\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fapps.apple.com\u002Fapp\u002Fid1625641322\">\u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fapps-using\u002Fid6449774982.png?version=2\" height=\"65\">\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fapps.apple.com\u002Fapp\u002Fid875280793\">\u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fapps-using\u002Fid875280793.png?version=2\" height=\"65\">\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fapps.apple.com\u002Fapp\u002Fid743843090\">\u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fapps-using\u002Fid743843090.png?version=2\" height=\"65\">\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fapps.apple.com\u002Fapp\u002Fid537070378\">\u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fapps-using\u002Fid537070378.png?version=2\" height=\"65\">\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fapps.apple.com\u002Fapp\u002Fid1617055933\">\u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fapps-using\u002Fid1617055933.png?version=2\" height=\"65\">\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fapps.apple.com\u002Fapp\u002Fid1596657751\">\u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fapps-using\u002Fid1596657751.png?version=2\" height=\"65\">\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fapps.apple.com\u002Fapp\u002Fid1459483980\">\u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fapps-using\u002Fid1459483980.png?version=2\" height=\"65\">\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fapps.apple.com\u002Fapp\u002Fid1544749600\">\u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fapps-using\u002Fid1544749600.png\" height=\"65\">\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fapps.apple.com\u002Fapp\u002Fid6452079114\">\u003Cimg src=\"https:\u002F\u002Fcdn.sparrowcode.io\u002Fgithub\u002Fapps-using\u002Fid6452079114.png\" height=\"65\">\u003C\u002Fa>\n\u003C\u002Fp>\n\nIf you use a `PermissionsKit`, add your app via Pull Request.\n","PermissionsKit 是一个用于请求权限并获取其状态的通用API。它支持多种iOS权限管理，如相机、照片库、通知、位置等，并提供授权、拒绝和未确定三种状态。该项目采用Swift编写，具有简洁易用的接口，能够帮助开发者轻松集成权限请求逻辑到应用中，同时确保良好的用户体验。适用于需要处理复杂权限请求场景的iOS应用程序开发。",2,"2026-06-11 03:09:01","top_language"]