Grand access 和 Permission async/await

为什么?!而不是前言

在进行一些项目时,我不断遇到需要在不同可视化组件中使用权限请求功能的设计。为了避免到处复制粘贴相同的代码,我决定通过将该功能提取到自己的软件包中来简化操作。

我决定在我的项目中分离某些权限获取功能,因为每种类型的权限都有其独特的实现要求。我甚至考虑将它们分别放在不同的软件包中。稍后我将根据实践经验来考虑这一点。

SwiftUI 示例

演示如何在 iOS 应用程序中处理相机权限的项目此处

CoreLocation

探索 GitHub 上的 Async location 仓库。它提供了关于如何在 iOS 应用程序中设置和管理位置服务权限的实用示例。

概述

此软件包包含两个主要组件:GrandAccessModifierPermission。这些组件旨在帮助管理 SwiftUI 应用程序中的权限和显示提示。

功能特性

请求访问以下权限

GrandAccessModifier

Permission

simulate locations

用法

GrandAccessModifier

要使用 GrandAccessModifier,请将其应用于任何 SwiftUI 视图。当 showingAlert 绑定设置为 true 时,此修饰符将显示一个提示框。

示例

import SwiftUI

struct ContentView: View {
    @State private var showingAlert = false

    var body: some View {
        VStack {
            Text("Hello, World!")
                .modifier(GrandAccessModifier(
                    title: "Access Required",
                    message: "This app requires access to your settings.",
                    showingAlert: $showingAlert
                ))

            Button("Show Alert") {
                showingAlert = true
            }
        }
    }
}

Permission

Permission 提供了异步属性来检查是否已授予对通讯录或相机的访问权限,以及在未授予权限时请求访问权限的方法。

示例

权限键和描述

添加到 Info.plist 文件以包含必要的权限描述

NS 键 描述
NSCameraUsageDescription 隐私 - 相机使用描述 一个字符串,描述了您的应用程序为什么需要访问相机。这会在权限对话框中显示。
NSContactsUsageDescription 隐私 - 通讯录使用描述 一个字符串,解释了您的应用程序为什么需要访问用户的通讯录。
NSMicrophoneUsageDescription 隐私 - 麦克风使用描述 一个字符串,详细说明了您的应用程序为什么需要访问麦克风。
NSPhotoLibraryUsageDescription 隐私 - 照片图库使用描述 一个字符串,证明了您的应用程序为什么需要访问照片图库。
示例描述
import AVFoundation
import Contacts
import Photos

// Check if contacts access is granted
let isContactsGranted = await Permission.isContactsGranted

// Request contacts access if not granted
if !isContactsGranted {
    let granted = await Permission.requestContactsAccess
    if granted {
        // Access granted
    } else {
        // Access denied
    }
}

// Similarly, check and request access for Camera, Microphone, and Photo Library
let isCameraGranted = await Permission.isCameraGranted
let isMicrophoneGranted = await Permission.isMicrophoneGranted
let isPhotoLibraryGranted = await Permission.isPhotoLibraryGranted
import SwiftUI

struct PermissionView: View {
    @State private var isCameraGranted = false
    @State private var isContactsGranted = false

    var body: some View {
        VStack {
            Button("Check Camera Permission") {
                Task {
                    isCameraGranted = await Permission.isCameraGranted
                    print("Camera Access: \(isCameraGranted)")
                }
            }

            Button("Check Contacts Permission") {
                Task {
                    isContactsGranted = await Permission.isContactsGranted
                    print("Contacts Access: \(isContactsGranted)")
                }
            }
        }
    }
}

文档

GrandAccessModifier

变量 描述
title 提示框的标题。
message 提示框的主要消息。
showingAlert 用于控制提示框可见性的绑定。
url 按下设置按钮时要打开的 URL。默认为应用程序设置 URL。

Permission

方法 描述 访问
isContactsGranted 检查是否已授予通讯录访问权限。 public
isCameraGranted 检查是否已授予相机访问权限。 public
isMicrophoneGranted 检查是否已授予麦克风访问权限。 public
isPhotoLibraryGranted 检查是否已授予照片图库访问权限。 public
requestContactsAccess 请求访问通讯录。 internal
requestCameraAccess 请求访问相机。 internal
requestMicrophoneAccess 请求访问麦克风。 internal
requestPhotoLibraryAccess 请求访问照片图库。 internal

许可证

本项目根据 MIT 许可证获得许可。有关更多详细信息,请参阅 LICENSE 文件。