From 515a4cdd648d1d66c7aaabf721f010f7bb5adadc Mon Sep 17 00:00:00 2001 From: Baptiste DUPUCH Date: Tue, 16 Jan 2024 10:43:39 +0100 Subject: [PATCH 1/7] Adding SiriKit permissions (#1140) * Adding SiriKit permissions * Fix tests --------- Co-authored-by: Maurits van Beusekom --- permission_handler/example/ios/Podfile | 5 +- permission_handler_apple/example/ios/Podfile | 5 +- .../ios/Classes/PermissionHandlerEnums.h | 9 ++- .../ios/Classes/PermissionManager.h | 1 + .../ios/Classes/PermissionManager.m | 2 + .../strategies/AssistantPermissionStrategy.h | 22 +++++++ .../strategies/AssistantPermissionStrategy.m | 63 +++++++++++++++++++ .../lib/src/permissions.dart | 6 ++ .../test/src/permissions_test.dart | 2 +- 9 files changed, 111 insertions(+), 4 deletions(-) create mode 100644 permission_handler_apple/ios/Classes/strategies/AssistantPermissionStrategy.h create mode 100644 permission_handler_apple/ios/Classes/strategies/AssistantPermissionStrategy.m diff --git a/permission_handler/example/ios/Podfile b/permission_handler/example/ios/Podfile index b3d32b450..0eef7cfb8 100644 --- a/permission_handler/example/ios/Podfile +++ b/permission_handler/example/ios/Podfile @@ -71,7 +71,7 @@ post_install do |installer| ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse] 'PERMISSION_LOCATION=1', - + ## dart: PermissionGroup.notification 'PERMISSION_NOTIFICATIONS=1', @@ -89,6 +89,9 @@ post_install do |installer| ## dart: PermissionGroup.criticalAlerts 'PERMISSION_CRITICAL_ALERTS=1', + + ## dart: PermissionGroup.assistant + 'PERMISSION_ASSISTANT=1', ] end diff --git a/permission_handler_apple/example/ios/Podfile b/permission_handler_apple/example/ios/Podfile index 6fed7cd5e..b4e8864f5 100644 --- a/permission_handler_apple/example/ios/Podfile +++ b/permission_handler_apple/example/ios/Podfile @@ -71,7 +71,7 @@ post_install do |installer| ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse] 'PERMISSION_LOCATION=1', - + ## dart: PermissionGroup.notification 'PERMISSION_NOTIFICATIONS=1', @@ -89,6 +89,9 @@ post_install do |installer| ## dart: PermissionGroup.criticalAlerts 'PERMISSION_CRITICAL_ALERTS=1', + + ## dart: PermissionGroup.criticalAlerts + 'PERMISSION_ASSISTANT=1', ] end diff --git a/permission_handler_apple/ios/Classes/PermissionHandlerEnums.h b/permission_handler_apple/ios/Classes/PermissionHandlerEnums.h index 8c3f916e3..31f3f1595 100644 --- a/permission_handler_apple/ios/Classes/PermissionHandlerEnums.h +++ b/permission_handler_apple/ios/Classes/PermissionHandlerEnums.h @@ -102,7 +102,6 @@ #define PERMISSION_APP_TRACKING_TRANSPARENCY 0 #endif - // ios: PermissionGroupCriticalAlerts // Info.plist: UNAuthorizationOptionCriticalAlert // dart: PermissionGroup.criticalAlerts @@ -110,6 +109,13 @@ #define PERMISSION_CRITICAL_ALERTS 0 #endif +// ios: PermissionGroupAssistant +// Info.plist: [NSSiriUsageDescription] +// dart: PermissionGroup.assistant +#ifndef PERMISSION_ASSISTANT + #define PERMISSION_ASSISTANT 0 +#endif + // ios: PermissionGroupCalendarFullAccess // Info.plist: [NSCalendarFullAccessUsageDescription] // dart: PermissionGroup.calendarFullAccess @@ -154,6 +160,7 @@ typedef NS_ENUM(int, PermissionGroup) { PermissionGroupAudio, PermissionGroupScheduleExactAlarm, PermissionGroupSensorsAlways, + PermissionGroupAssistant PermissionGroupCalendarWriteOnly, PermissionGroupCalendarFullAccess }; diff --git a/permission_handler_apple/ios/Classes/PermissionManager.h b/permission_handler_apple/ios/Classes/PermissionManager.h index 4625f8dd6..abaab28af 100644 --- a/permission_handler_apple/ios/Classes/PermissionManager.h +++ b/permission_handler_apple/ios/Classes/PermissionManager.h @@ -25,6 +25,7 @@ #import "UnknownPermissionStrategy.h" #import "NotificationPermissionStrategy.h" #import "CriticalAlertsPermissionStrategy.h" +#import "AssistantPermissionStrategy.h" #import "PermissionHandlerEnums.h" #import "Codec.h" diff --git a/permission_handler_apple/ios/Classes/PermissionManager.m b/permission_handler_apple/ios/Classes/PermissionManager.m index ad54b992c..c4d9548d8 100644 --- a/permission_handler_apple/ios/Classes/PermissionManager.m +++ b/permission_handler_apple/ios/Classes/PermissionManager.m @@ -147,6 +147,8 @@ + (id)createPermissionStrategy:(PermissionGroup)permission { return [AppTrackingTransparencyPermissionStrategy new]; case PermissionGroupCriticalAlerts: return [CriticalAlertsPermissionStrategy new]; + case PermissionGroupAssistant: + return [AssistantPermissionStrategy new]; default: return [UnknownPermissionStrategy new]; } diff --git a/permission_handler_apple/ios/Classes/strategies/AssistantPermissionStrategy.h b/permission_handler_apple/ios/Classes/strategies/AssistantPermissionStrategy.h new file mode 100644 index 000000000..eed630b59 --- /dev/null +++ b/permission_handler_apple/ios/Classes/strategies/AssistantPermissionStrategy.h @@ -0,0 +1,22 @@ +// +// Created by Baptiste Dupuch(dupuchba) on 2023-09-04. +// Copyright (c) 2019 The Chromium Authors. All rights reserved. +// + +#import +#import "PermissionStrategy.h" + +#if PERMISSION_ASSISTANT + +#import + +@interface AssistantPermissionStrategy : NSObject +@end + +#else + +#import "UnknownPermissionStrategy.h" +@interface AssistantPermissionStrategy : UnknownPermissionStrategy +@end + +#endif diff --git a/permission_handler_apple/ios/Classes/strategies/AssistantPermissionStrategy.m b/permission_handler_apple/ios/Classes/strategies/AssistantPermissionStrategy.m new file mode 100644 index 000000000..a40af4290 --- /dev/null +++ b/permission_handler_apple/ios/Classes/strategies/AssistantPermissionStrategy.m @@ -0,0 +1,63 @@ +// +// Assistant.m +// permission_handler +// +// Created by Baptiste Dupuch (dupuchba) on Tue Sep 5 08:50:04 2023 +// + +#import "AssistantPermissionStrategy.h" + +#if PERMISSION_ASSISTANT + +@implementation AssistantPermissionStrategy + +- (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission { + if (@available(iOS 10, *)) { + INSiriAuthorizationStatus assistantPermission = [INPreferences siriAuthorizationStatus]; + return [AssistantPermissionStrategy parsePermission:assistantPermission]; + } + + return PermissionStatusGranted; +} + +- (void)checkServiceStatus:(PermissionGroup)permission completionHandler:(ServiceStatusHandler)completionHandler { + completionHandler(ServiceStatusNotApplicable); +} + +- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler { + PermissionStatus status = [self checkPermissionStatus:permission]; + if (status != PermissionStatusDenied) { + completionHandler(status); + return; + } + + if (@available(iOS 10, *)){ + [INPreferences requestSiriAuthorization:^(INSiriAuthorizationStatus status) { + PermissionStatus permissionStatus = [AssistantPermissionStrategy parsePermission:status]; + completionHandler(permissionStatus); + }]; + } else { + completionHandler(PermissionStatusGranted); + } +} + ++ (PermissionStatus)parsePermission:(INSiriAuthorizationStatus)assistantPermission API_AVAILABLE(ios(10)){ + switch(assistantPermission){ + case INSiriAuthorizationStatusAuthorized: + return PermissionStatusGranted; + case INSiriAuthorizationStatusRestricted: + return PermissionStatusRestricted; + case INSiriAuthorizationStatusDenied: + return PermissionStatusPermanentlyDenied; + case INSiriAuthorizationStatusNotDetermined: + return PermissionStatusDenied; + } +} +@end + +#else + +@implementation AssistantPermissionStrategy +@end + +#endif diff --git a/permission_handler_platform_interface/lib/src/permissions.dart b/permission_handler_platform_interface/lib/src/permissions.dart index 29688ef74..7b1cbf58c 100644 --- a/permission_handler_platform_interface/lib/src/permissions.dart +++ b/permission_handler_platform_interface/lib/src/permissions.dart @@ -318,6 +318,10 @@ class Permission { /// Permission for reading from and writing to the device's calendar. static const calendarFullAccess = Permission._(37); + + /// Android: Nothing + /// iOS: SiriKit + static const assistant = Permission._(38); /// Returns a list of all possible [PermissionGroup] values. static const List values = [ @@ -360,6 +364,7 @@ class Permission { sensorsAlways, calendarWriteOnly, calendarFullAccess, + assistant, ]; static const List _names = [ @@ -401,6 +406,7 @@ class Permission { 'sensorsAlways', 'calendarWriteOnly', 'calendarFullAccess', + 'assistant', ]; @override diff --git a/permission_handler_platform_interface/test/src/permissions_test.dart b/permission_handler_platform_interface/test/src/permissions_test.dart index c5c1b4d2d..43994b4f7 100644 --- a/permission_handler_platform_interface/test/src/permissions_test.dart +++ b/permission_handler_platform_interface/test/src/permissions_test.dart @@ -6,7 +6,7 @@ void main() { () { const values = Permission.values; - expect(values.length, 38); + expect(values.length, 39); }); test('check if byValue returns corresponding PermissionGroup value', () { From a3ab557bdefb545d7312825cabd425203a526aa9 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Tue, 16 Jan 2024 10:54:16 +0100 Subject: [PATCH 2/7] Reserves the assistant permission on no-op platforms --- .../com/baseflow/permissionhandler/PermissionConstants.java | 4 +++- permission_handler_apple/ios/Classes/PermissionHandlerEnums.h | 4 ++-- permission_handler_platform_interface/CHANGELOG.md | 4 ++++ permission_handler_platform_interface/pubspec.yaml | 2 +- permission_handler_windows/windows/permission_constants.h | 3 ++- 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/permission_handler_android/android/src/main/java/com/baseflow/permissionhandler/PermissionConstants.java b/permission_handler_android/android/src/main/java/com/baseflow/permissionhandler/PermissionConstants.java index 27691ecbb..6065a8031 100644 --- a/permission_handler_android/android/src/main/java/com/baseflow/permissionhandler/PermissionConstants.java +++ b/permission_handler_android/android/src/main/java/com/baseflow/permissionhandler/PermissionConstants.java @@ -60,6 +60,7 @@ final class PermissionConstants { static final int PERMISSION_GROUP_SENSORS_ALWAYS = 35; static final int PERMISSION_GROUP_CALENDAR_WRITE_ONLY = 36; static final int PERMISSION_GROUP_CALENDAR_FULL_ACCESS = 37; + static final int PERMISSION_GROUP_ASSISTANT = 38; @Retention(RetentionPolicy.SOURCE) @IntDef({ @@ -97,7 +98,8 @@ final class PermissionConstants { PERMISSION_GROUP_AUDIO, PERMISSION_GROUP_SCHEDULE_EXACT_ALARM, PERMISSION_GROUP_CALENDAR_WRITE_ONLY, - PERMISSION_GROUP_CALENDAR_FULL_ACCESS + PERMISSION_GROUP_CALENDAR_FULL_ACCESS, + PERMISSION_GROUP_ASSISTANT }) @interface PermissionGroup { } diff --git a/permission_handler_apple/ios/Classes/PermissionHandlerEnums.h b/permission_handler_apple/ios/Classes/PermissionHandlerEnums.h index 31f3f1595..f84daaab3 100644 --- a/permission_handler_apple/ios/Classes/PermissionHandlerEnums.h +++ b/permission_handler_apple/ios/Classes/PermissionHandlerEnums.h @@ -160,9 +160,9 @@ typedef NS_ENUM(int, PermissionGroup) { PermissionGroupAudio, PermissionGroupScheduleExactAlarm, PermissionGroupSensorsAlways, - PermissionGroupAssistant PermissionGroupCalendarWriteOnly, - PermissionGroupCalendarFullAccess + PermissionGroupCalendarFullAccess, + PermissionGroupAssistant }; typedef NS_ENUM(int, PermissionStatus) { diff --git a/permission_handler_platform_interface/CHANGELOG.md b/permission_handler_platform_interface/CHANGELOG.md index c7a940245..839ce07e6 100644 --- a/permission_handler_platform_interface/CHANGELOG.md +++ b/permission_handler_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.1.0 + +* Adds the `Permission.assistant` which allows users to request permissions to access Siri on iOS and macOS platforms. This is a no-op on all other platforms. + ## 4.0.2 * Improved the documentation around the `PermissionStatus`, `PermissionStatusGetters` and `FuturePermissionStatusGetters`. diff --git a/permission_handler_platform_interface/pubspec.yaml b/permission_handler_platform_interface/pubspec.yaml index 53d72ef56..392bc0475 100644 --- a/permission_handler_platform_interface/pubspec.yaml +++ b/permission_handler_platform_interface/pubspec.yaml @@ -3,7 +3,7 @@ description: A common platform interface for the permission_handler plugin. homepage: https://github.com/baseflow/flutter-permission-handler/tree/master/permission_handler_platform_interface # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 4.0.2 +version: 4.1.0 dependencies: flutter: diff --git a/permission_handler_windows/windows/permission_constants.h b/permission_handler_windows/windows/permission_constants.h index 15ea81368..3c3c4b077 100644 --- a/permission_handler_windows/windows/permission_constants.h +++ b/permission_handler_windows/windows/permission_constants.h @@ -48,7 +48,8 @@ class PermissionConstants { SCHEDULE_EXACT_ALARM = 34, SENSORS_ALWAYS = 35, CALENDAR_WRITE_ONLY = 36, - CALENDAR_FULL_ACCESS = 37 + CALENDAR_FULL_ACCESS = 37, + ASSISTANT = 38 }; //PERMISSION_STATUS From d5f95539520e6061d1c124cf51e5c17038058d46 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Tue, 16 Jan 2024 16:31:53 +0100 Subject: [PATCH 3/7] Adds support to example application --- .../example/ios/Runner.xcodeproj/project.pbxproj | 3 +++ permission_handler/example/ios/Runner/Info.plist | 5 +++++ .../example/ios/Runner/RunnerDebug.entitlements | 8 ++++++++ permission_handler/example/lib/main.dart | 3 ++- permission_handler/pubspec.yaml | 2 +- permission_handler_android/example/lib/main.dart | 3 ++- permission_handler_android/pubspec.yaml | 2 +- permission_handler_android/pubspec_overrides.yaml | 3 +++ .../example/ios/Flutter/AppFrameworkInfo.plist | 2 +- permission_handler_apple/example/ios/Podfile | 2 +- .../example/ios/Runner.xcodeproj/project.pbxproj | 9 ++++++--- permission_handler_apple/example/ios/Runner/Info.plist | 5 +++++ .../example/ios/Runner/RunnerDebug.entitlements | 8 ++++++++ permission_handler_apple/example/pubspec_overrides.yaml | 3 +++ permission_handler_apple/pubspec_overrides.yaml | 3 +++ 15 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 permission_handler/example/ios/Runner/RunnerDebug.entitlements create mode 100644 permission_handler_android/pubspec_overrides.yaml create mode 100644 permission_handler_apple/example/ios/Runner/RunnerDebug.entitlements create mode 100644 permission_handler_apple/example/pubspec_overrides.yaml create mode 100644 permission_handler_apple/pubspec_overrides.yaml diff --git a/permission_handler/example/ios/Runner.xcodeproj/project.pbxproj b/permission_handler/example/ios/Runner.xcodeproj/project.pbxproj index 04a88e7a7..5b918732b 100644 --- a/permission_handler/example/ios/Runner.xcodeproj/project.pbxproj +++ b/permission_handler/example/ios/Runner.xcodeproj/project.pbxproj @@ -47,6 +47,7 @@ C446183715B92022DDB68882 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; CEA40B36DE135D81D16B7399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; DA7CB50DE8057A7A8D126AC9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + F6BD02752B56D87600C59EAA /* RunnerDebug.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerDebug.entitlements; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -112,6 +113,7 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( + F6BD02752B56D87600C59EAA /* RunnerDebug.entitlements */, 97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, @@ -494,6 +496,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/RunnerDebug.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 7624MWN53C; ENABLE_BITCODE = NO; diff --git a/permission_handler/example/ios/Runner/Info.plist b/permission_handler/example/ios/Runner/Info.plist index 2a8e885cf..2bf38dd8b 100644 --- a/permission_handler/example/ios/Runner/Info.plist +++ b/permission_handler/example/ios/Runner/Info.plist @@ -101,6 +101,11 @@ NSUserTrackingUsageDescription appTrackingTransparency + + + NSSiriUsageDescription + The example app would like access to Siri Kit to demonstrate requesting authorization. + CADisableMinimumFrameDurationOnPhone UIApplicationSupportsIndirectInputEvents diff --git a/permission_handler/example/ios/Runner/RunnerDebug.entitlements b/permission_handler/example/ios/Runner/RunnerDebug.entitlements new file mode 100644 index 000000000..21d95c45f --- /dev/null +++ b/permission_handler/example/ios/Runner/RunnerDebug.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.developer.siri + + + diff --git a/permission_handler/example/lib/main.dart b/permission_handler/example/lib/main.dart index 9648d4cc6..b1615f332 100644 --- a/permission_handler/example/lib/main.dart +++ b/permission_handler/example/lib/main.dart @@ -63,7 +63,8 @@ class _PermissionHandlerWidgetState extends State { permission != Permission.reminders && permission != Permission.bluetooth && permission != Permission.appTrackingTransparency && - permission != Permission.criticalAlerts; + permission != Permission.criticalAlerts && + permission != Permission.assistant; } }) .map((permission) => PermissionWidget(permission)) diff --git a/permission_handler/pubspec.yaml b/permission_handler/pubspec.yaml index c14eda0b9..3c3c102d9 100644 --- a/permission_handler/pubspec.yaml +++ b/permission_handler/pubspec.yaml @@ -28,7 +28,7 @@ dependencies: permission_handler_apple: ^9.2.0 permission_handler_html: ^0.1.0+1 permission_handler_windows: ^0.2.0 - permission_handler_platform_interface: ^4.0.2 + permission_handler_platform_interface: ^4.1.0 dev_dependencies: flutter_lints: ^1.0.4 diff --git a/permission_handler_android/example/lib/main.dart b/permission_handler_android/example/lib/main.dart index ce1cef03c..8fb6d53b1 100644 --- a/permission_handler_android/example/lib/main.dart +++ b/permission_handler_android/example/lib/main.dart @@ -41,7 +41,8 @@ class _PermissionHandlerWidgetState extends State { permission != Permission.reminders && permission != Permission.bluetooth && permission != Permission.appTrackingTransparency && - permission != Permission.criticalAlerts; + permission != Permission.criticalAlerts && + permission != Permission.assistant; }) .map((permission) => PermissionWidget(permission)) .toList()), diff --git a/permission_handler_android/pubspec.yaml b/permission_handler_android/pubspec.yaml index 98daf0ab9..1bbdb2ccc 100644 --- a/permission_handler_android/pubspec.yaml +++ b/permission_handler_android/pubspec.yaml @@ -18,7 +18,7 @@ flutter: dependencies: flutter: sdk: flutter - permission_handler_platform_interface: ^4.0.0 + permission_handler_platform_interface: ^4.1.0 dev_dependencies: flutter_lints: ^1.0.4 diff --git a/permission_handler_android/pubspec_overrides.yaml b/permission_handler_android/pubspec_overrides.yaml new file mode 100644 index 000000000..5e0fe4d58 --- /dev/null +++ b/permission_handler_android/pubspec_overrides.yaml @@ -0,0 +1,3 @@ +dependency_overrides: + permission_handler_platform_interface: + path: ../permission_handler_platform_interface \ No newline at end of file diff --git a/permission_handler_apple/example/ios/Flutter/AppFrameworkInfo.plist b/permission_handler_apple/example/ios/Flutter/AppFrameworkInfo.plist index 9625e105d..7c5696400 100644 --- a/permission_handler_apple/example/ios/Flutter/AppFrameworkInfo.plist +++ b/permission_handler_apple/example/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/permission_handler_apple/example/ios/Podfile b/permission_handler_apple/example/ios/Podfile index b4e8864f5..8c752e9e9 100644 --- a/permission_handler_apple/example/ios/Podfile +++ b/permission_handler_apple/example/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '11.0' +# platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/permission_handler_apple/example/ios/Runner.xcodeproj/project.pbxproj b/permission_handler_apple/example/ios/Runner.xcodeproj/project.pbxproj index 04a88e7a7..1f057e1e9 100644 --- a/permission_handler_apple/example/ios/Runner.xcodeproj/project.pbxproj +++ b/permission_handler_apple/example/ios/Runner.xcodeproj/project.pbxproj @@ -47,6 +47,7 @@ C446183715B92022DDB68882 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; CEA40B36DE135D81D16B7399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; DA7CB50DE8057A7A8D126AC9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + F6BD02742B56D78D00C59EAA /* RunnerDebug.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerDebug.entitlements; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -112,6 +113,7 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( + F6BD02742B56D78D00C59EAA /* RunnerDebug.entitlements */, 97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, @@ -342,7 +344,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -428,7 +430,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -477,7 +479,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -494,6 +496,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/RunnerDebug.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 7624MWN53C; ENABLE_BITCODE = NO; diff --git a/permission_handler_apple/example/ios/Runner/Info.plist b/permission_handler_apple/example/ios/Runner/Info.plist index 6a2b947c9..e31eecab1 100644 --- a/permission_handler_apple/example/ios/Runner/Info.plist +++ b/permission_handler_apple/example/ios/Runner/Info.plist @@ -101,6 +101,11 @@ NSUserTrackingUsageDescription appTrackingTransparency + + + NSSiriUsageDescription + The example app would like access to Siri Kit to demonstrate requesting authorization. + CADisableMinimumFrameDurationOnPhone UIApplicationSupportsIndirectInputEvents diff --git a/permission_handler_apple/example/ios/Runner/RunnerDebug.entitlements b/permission_handler_apple/example/ios/Runner/RunnerDebug.entitlements new file mode 100644 index 000000000..21d95c45f --- /dev/null +++ b/permission_handler_apple/example/ios/Runner/RunnerDebug.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.developer.siri + + + diff --git a/permission_handler_apple/example/pubspec_overrides.yaml b/permission_handler_apple/example/pubspec_overrides.yaml new file mode 100644 index 000000000..c36344112 --- /dev/null +++ b/permission_handler_apple/example/pubspec_overrides.yaml @@ -0,0 +1,3 @@ +dependency_overrides: + permission_handler_platform_interface: + path: ../../permission_handler_platform_interface \ No newline at end of file diff --git a/permission_handler_apple/pubspec_overrides.yaml b/permission_handler_apple/pubspec_overrides.yaml new file mode 100644 index 000000000..5e0fe4d58 --- /dev/null +++ b/permission_handler_apple/pubspec_overrides.yaml @@ -0,0 +1,3 @@ +dependency_overrides: + permission_handler_platform_interface: + path: ../permission_handler_platform_interface \ No newline at end of file From f03bdb16bedca8f0344039869a14ae379d98f560 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Tue, 16 Jan 2024 16:33:35 +0100 Subject: [PATCH 4/7] Remove pubspec overrides --- permission_handler_android/pubspec_overrides.yaml | 3 --- permission_handler_apple/example/pubspec_overrides.yaml | 3 --- permission_handler_apple/pubspec_overrides.yaml | 3 --- 3 files changed, 9 deletions(-) delete mode 100644 permission_handler_android/pubspec_overrides.yaml delete mode 100644 permission_handler_apple/example/pubspec_overrides.yaml delete mode 100644 permission_handler_apple/pubspec_overrides.yaml diff --git a/permission_handler_android/pubspec_overrides.yaml b/permission_handler_android/pubspec_overrides.yaml deleted file mode 100644 index 5e0fe4d58..000000000 --- a/permission_handler_android/pubspec_overrides.yaml +++ /dev/null @@ -1,3 +0,0 @@ -dependency_overrides: - permission_handler_platform_interface: - path: ../permission_handler_platform_interface \ No newline at end of file diff --git a/permission_handler_apple/example/pubspec_overrides.yaml b/permission_handler_apple/example/pubspec_overrides.yaml deleted file mode 100644 index c36344112..000000000 --- a/permission_handler_apple/example/pubspec_overrides.yaml +++ /dev/null @@ -1,3 +0,0 @@ -dependency_overrides: - permission_handler_platform_interface: - path: ../../permission_handler_platform_interface \ No newline at end of file diff --git a/permission_handler_apple/pubspec_overrides.yaml b/permission_handler_apple/pubspec_overrides.yaml deleted file mode 100644 index 5e0fe4d58..000000000 --- a/permission_handler_apple/pubspec_overrides.yaml +++ /dev/null @@ -1,3 +0,0 @@ -dependency_overrides: - permission_handler_platform_interface: - path: ../permission_handler_platform_interface \ No newline at end of file From 4550d1bc3d7b377d8238fe367a61a1d9444718b2 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Tue, 16 Jan 2024 16:40:15 +0100 Subject: [PATCH 5/7] Fix formatting --- permission_handler_platform_interface/lib/src/permissions.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/permission_handler_platform_interface/lib/src/permissions.dart b/permission_handler_platform_interface/lib/src/permissions.dart index 7b1cbf58c..5f1b28be0 100644 --- a/permission_handler_platform_interface/lib/src/permissions.dart +++ b/permission_handler_platform_interface/lib/src/permissions.dart @@ -318,7 +318,7 @@ class Permission { /// Permission for reading from and writing to the device's calendar. static const calendarFullAccess = Permission._(37); - + /// Android: Nothing /// iOS: SiriKit static const assistant = Permission._(38); From 8ad33d8c808068ad1441cc406f462a49ef84b117 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Wed, 17 Jan 2024 14:29:49 +0100 Subject: [PATCH 6/7] Add support for Permission.assistant to the app facing package. --- permission_handler/CHANGELOG.md | 5 +++++ permission_handler/README.md | 19 +++++++++++++++++++ permission_handler/pubspec.yaml | 10 +++++----- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/permission_handler/CHANGELOG.md b/permission_handler/CHANGELOG.md index 330b516ff..43c0d8273 100644 --- a/permission_handler/CHANGELOG.md +++ b/permission_handler/CHANGELOG.md @@ -1,4 +1,9 @@ +## 11.2.0 + +* Adds the `Permission.assistant` which allows users to request permissions to access SiriKit on iOS and macOS platforms. This is a no-op on all other platforms. + ## 11.1.0 + * Adds support for iOS 17+ [Calendar access levels](https://developer.apple.com/documentation/technotes/tn3152-migrating-to-the-latest-calendar-access-levels). * Deprecates `Permission.calendar`. Use `Permission.calendarWriteOnly` to request a write-only access to the calendar. For full access to calendar use `Permission.calendarFullAccess`. * For `Permission.calendarFullAccess` on iOS 17+ use `PERMISSION_EVENTS_FULL_ACCESS` in Podfile instead of `PERMISSION_EVENTS`. diff --git a/permission_handler/README.md b/permission_handler/README.md index 68dfd199c..160341557 100644 --- a/permission_handler/README.md +++ b/permission_handler/README.md @@ -283,6 +283,25 @@ If your application needs access to Android's file system, it is possible to req Starting with Android 10, apps are required to first obtain permission to read the device's location in the foreground, before requesting to read the location in the background as well. When requesting the 'location always' permission directly, or when requesting both permissions at the same time, the system will ignore the request. So, instead of calling only `Permission.location.request()`, make sure to first call either `Permission.location.request()` or `Permission.locationWhenInUse.request()`, and obtain permission to read the GPS. Once you obtain this permission, you can call `Permission.locationAlways.request()`. This will present the user with the option to update the settings so the location can always be read in the background. For more information, visit the [Android documentation on requesting location permissions](https://developer.android.com/training/location/permissions#request-only-foreground). +### Checking or requesting a permission terminates the application on iOS. What can I do? + +First of all make sure all that the `ios/Runner/Info.plist` file contains entries for all the permissions the application requires. If an entry is missing iOS will terminate the application as soon as the particular permission is being checked or requested. + +If the application requires access to SiriKit (by requesting the `Permission.assistant` permission), also make sure to add the `com.apple.developer.siri` entitlement to the application configuration. To do so create a file (if it doesn't exists already) called `Runner.entitlements` in the `ios/Runner` folder that is part of the project. Open the file and add the following contents: + +```xml + + + + + com.apple.developer.siri + + + +``` + +The important part here is the `key` with value `com.apple.developer.siri` and the element ``. It is possible that this file also contains other entitlements depending on the needs of the application. + ## Issues Please file any issues, bugs, or feature requests as an issue on our [GitHub](https://github.com/Baseflow/flutter-permission-handler/issues) page. Commercial support is available if you need help with integration with your app or services. You can contact us at [hello@baseflow.com](mailto:hello@baseflow.com). diff --git a/permission_handler/pubspec.yaml b/permission_handler/pubspec.yaml index 3c3c102d9..5da5b7691 100644 --- a/permission_handler/pubspec.yaml +++ b/permission_handler/pubspec.yaml @@ -2,7 +2,7 @@ name: permission_handler description: Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions. repository: https://github.com/baseflow/flutter-permission-handler issue_tracker: https://github.com/Baseflow/flutter-permission-handler/issues -version: 11.1.0 +version: 11.2.0 environment: sdk: ">=2.15.0 <4.0.0" @@ -24,10 +24,10 @@ dependencies: flutter: sdk: flutter meta: ^1.7.0 - permission_handler_android: ^12.0.1 - permission_handler_apple: ^9.2.0 - permission_handler_html: ^0.1.0+1 - permission_handler_windows: ^0.2.0 + permission_handler_android: ^12.0.3 + permission_handler_apple: ^9.3.0 + permission_handler_html: ^0.1.1 + permission_handler_windows: ^0.2.1 permission_handler_platform_interface: ^4.1.0 dev_dependencies: From 10af7d8027d66e1ed0a43ec9a6cdbebd634bb3c0 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Wed, 17 Jan 2024 16:53:06 +0100 Subject: [PATCH 7/7] Fix formatting --- permission_handler/example/ios/Runner/Info.plist | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/permission_handler/example/ios/Runner/Info.plist b/permission_handler/example/ios/Runner/Info.plist index 2bf38dd8b..e31eecab1 100644 --- a/permission_handler/example/ios/Runner/Info.plist +++ b/permission_handler/example/ios/Runner/Info.plist @@ -106,9 +106,9 @@ NSSiriUsageDescription The example app would like access to Siri Kit to demonstrate requesting authorization. - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents +