Skip to content

Commit 59fee21

Browse files
Adds support for when in use only. (#1295)
* Adds support for when in use only * Update permission_handler_apple/CHANGELOG.md Co-authored-by: TimHoogstrate <tim566@hotmail.com> * Update permission_handler_apple/CHANGELOG.md Co-authored-by: TimHoogstrate <tim566@hotmail.com> * Apply PR feedback --------- Co-authored-by: TimHoogstrate <tim566@hotmail.com>
1 parent 22cddbe commit 59fee21

27 files changed

+97
-37
lines changed

permission_handler_apple/CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
## 9.4.3
2+
3+
* Adds the `PERMISSION_LOCATION_WHENINUSE` macro, which can be used instead of
4+
the `PERMISSION_LOCATION` macro, and exclusively enables the `requestWhenInUseAuthorization`
5+
and remove the `requestAlwaysAuthorization` when requesting location permission.
6+
* Improves error handling when `Info.plist` doesn't contain the correct declarations.
7+
* Adds support for the `NSLocationAlwaysAndWhenInUseUsageDescription` property list
8+
key.
9+
110
## 9.4.2
211

312
* Updates the privacy manifest to include the use of the `NSUserDefaults` API.

permission_handler_apple/example/ios/Podfile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,13 @@ post_install do |installer|
6969
## dart: PermissionGroup.photos
7070
'PERMISSION_PHOTOS=1',
7171

72+
## The 'PERMISSION_LOCATION' macro enables the `locationWhenInUse` and `locationAlways` permission. If
73+
## the application only requires `locationWhenInUse`, only specify the `PERMISSION_LOCATION_WHENINUSE`
74+
## macro.
75+
##
7276
## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
7377
'PERMISSION_LOCATION=1',
78+
'PERMISSION_LOCATION_WHENINUSE=0',
7479

7580
## dart: PermissionGroup.notification
7681
'PERMISSION_NOTIFICATIONS=1',

permission_handler_apple/example/ios/Runner.xcodeproj/project.pbxproj

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@
141141
9705A1C41CF9048500538489 /* Embed Frameworks */,
142142
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
143143
D38B08CB85942E5D11545EE3 /* [CP] Embed Pods Frameworks */,
144+
A7B07F67421488A414C73AAD /* [CP] Copy Pods Resources */,
144145
);
145146
buildRules = (
146147
);
@@ -157,7 +158,7 @@
157158
97C146E61CF9000F007C117D /* Project object */ = {
158159
isa = PBXProject;
159160
attributes = {
160-
LastUpgradeCheck = 1430;
161+
LastUpgradeCheck = 1510;
161162
ORGANIZATIONNAME = "";
162163
TargetAttributes = {
163164
97C146ED1CF9000F007C117D = {
@@ -252,6 +253,23 @@
252253
shellPath = /bin/sh;
253254
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
254255
};
256+
A7B07F67421488A414C73AAD /* [CP] Copy Pods Resources */ = {
257+
isa = PBXShellScriptBuildPhase;
258+
buildActionMask = 2147483647;
259+
files = (
260+
);
261+
inputFileListPaths = (
262+
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
263+
);
264+
name = "[CP] Copy Pods Resources";
265+
outputFileListPaths = (
266+
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
267+
);
268+
runOnlyForDeploymentPostprocessing = 0;
269+
shellPath = /bin/sh;
270+
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
271+
showEnvVarsInLog = 0;
272+
};
255273
D38B08CB85942E5D11545EE3 /* [CP] Embed Pods Frameworks */ = {
256274
isa = PBXShellScriptBuildPhase;
257275
buildActionMask = 2147483647;

permission_handler_apple/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1430"
3+
LastUpgradeVersion = "1510"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

permission_handler_apple/ios/Classes/PermissionHandlerPlugin.m

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,11 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result
4747
}
4848

4949
self->_methodResult = nil;
50-
}];
50+
} errorHandler:^(NSString *errorCode, NSString *errorDescription) {
51+
self->_methodResult([FlutterError errorWithCode:errorCode message:errorDescription details:nil]);
52+
self->_methodResult = nil;
53+
}
54+
];
5155

5256
} else if ([@"shouldShowRequestPermissionRationale" isEqualToString:call.method]) {
5357
result(@false);

permission_handler_apple/ios/Classes/PermissionManager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ typedef void (^PermissionRequestCompletion)(NSDictionary *permissionRequestResul
3535
@interface PermissionManager : NSObject
3636

3737
- (instancetype)initWithStrategyInstances;
38-
- (void)requestPermissions:(NSArray *)permissions completion:(PermissionRequestCompletion)completion;
38+
- (void)requestPermissions:(NSArray *)permissions completion:(PermissionRequestCompletion)completion errorHandler:(PermissionErrorHandler)errorHandler;
3939

4040
+ (void)checkPermissionStatus:(enum PermissionGroup)permission result:(FlutterResult)result;
4141
+ (void)checkServiceStatus:(enum PermissionGroup)permission result:(FlutterResult)result;

permission_handler_apple/ios/Classes/PermissionManager.m

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ + (void)checkServiceStatus:(enum PermissionGroup)permission result:(FlutterResul
3939
}];
4040
}
4141

42-
- (void)requestPermissions:(NSArray *)permissions completion:(PermissionRequestCompletion)completion {
42+
- (void)requestPermissions:(NSArray *)permissions completion:(PermissionRequestCompletion)completion errorHandler:(PermissionErrorHandler)errorHandler {
4343
NSMutableDictionary *permissionStatusResult = [[NSMutableDictionary alloc] init];
4444

4545
if (permissions.count == 0) {
@@ -57,22 +57,24 @@ - (void)requestPermissions:(NSArray *)permissions completion:(PermissionRequestC
5757
__block id <PermissionStrategy> permissionStrategy = [PermissionManager createPermissionStrategy:permission];
5858
[_strategyInstances addObject:permissionStrategy];
5959

60-
6160
[permissionStrategy requestPermission:permission completionHandler:^(PermissionStatus permissionStatus) {
6261
permissionStatusResult[@(permission)] = @(permissionStatus);
6362
[requestQueue removeObject:@(permission)];
64-
63+
6564
[self->_strategyInstances removeObject:permissionStrategy];
66-
65+
6766
if (requestQueue.count == 0) {
6867
completion(permissionStatusResult);
6968
}
70-
69+
7170
// Make sure `completion` is called before cleaning up the reference
7271
// otherwise the `completion` block is also dereferenced on iOS 12 and
7372
// below (this is most likely a bug in Objective-C which is solved in
7473
// later versions of the runtime).
7574
permissionStrategy = nil;
75+
} errorHandler: ^(NSString* errorCode, NSString* errorDesciption) {
76+
errorHandler(errorCode, errorDesciption);
77+
permissionStrategy = nil;
7678
}];
7779
}
7880
}
@@ -108,7 +110,7 @@ + (id)createPermissionStrategy:(PermissionGroup)permission {
108110
case PermissionGroupLocation:
109111
case PermissionGroupLocationAlways:
110112
case PermissionGroupLocationWhenInUse:
111-
#if PERMISSION_LOCATION
113+
#if PERMISSION_LOCATION || PERMISSION_LOCATION_WHENINUSE || PERMISSION_LOCATION_ALWAYS
112114
return [[LocationPermissionStrategy alloc] initWithLocationManager];
113115
#else
114116
return [LocationPermissionStrategy new];

permission_handler_apple/ios/Classes/strategies/AppTrackingTransparencyPermissionStrategy.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ - (void)checkServiceStatus:(PermissionGroup)permission completionHandler:(Servic
2424
completionHandler(ServiceStatusNotApplicable);
2525
}
2626

27-
- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler {
27+
- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler errorHandler:(PermissionErrorHandler)errorHandler{
2828
PermissionStatus status = [self checkPermissionStatus:permission];
2929
if (status != PermissionStatusDenied) {
3030
completionHandler(status);

permission_handler_apple/ios/Classes/strategies/AssistantPermissionStrategy.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ - (void)checkServiceStatus:(PermissionGroup)permission completionHandler:(Servic
2424
completionHandler(ServiceStatusNotApplicable);
2525
}
2626

27-
- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler {
27+
- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler errorHandler:(PermissionErrorHandler)errorHandler {
2828
PermissionStatus status = [self checkPermissionStatus:permission];
2929
if (status != PermissionStatusDenied) {
3030
completionHandler(status);

permission_handler_apple/ios/Classes/strategies/AudioVideoPermissionStrategy.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ - (void)checkServiceStatus:(PermissionGroup)permission completionHandler:(Servic
2626
completionHandler(ServiceStatusNotApplicable);
2727
}
2828

29-
- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler {
29+
- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler errorHandler:(PermissionErrorHandler)errorHandler {
3030
PermissionStatus status = [self checkPermissionStatus:permission];
3131

3232
if (status != PermissionStatusDenied) {

0 commit comments

Comments
 (0)