Skip to content

Commit 24ee667

Browse files
committed
fix(device_info_plus): guard iOS vision selector
1 parent 6427bc6 commit 24ee667

2 files changed

Lines changed: 23 additions & 1 deletion

File tree

packages/device_info_plus/device_info_plus/ios/device_info_plus/Sources/device_info_plus/FPPDeviceInfoPlusPlugin.m

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ - (void)handleMethodCall:(FlutterMethodCall *)call
3232
}
3333
NSNumber *isiOSAppOnVision = [NSNumber numberWithBool:NO];
3434
if (@available(iOS 26.1, *)) {
35-
isiOSAppOnVision = [NSNumber numberWithBool:[info isiOSAppOnVision]];
35+
if ([info respondsToSelector:@selector(isiOSAppOnVision)]) {
36+
isiOSAppOnVision = [NSNumber numberWithBool:[info isiOSAppOnVision]];
37+
}
3638
}
3739
NSError *error = nil;
3840
NSDictionary *fsAttributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import 'dart:io';
2+
3+
import 'package:flutter_test/flutter_test.dart';
4+
5+
void main() {
6+
test('guards iOS vision process info selector before invocation', () {
7+
final source = File(
8+
'ios/device_info_plus/Sources/device_info_plus/FPPDeviceInfoPlusPlugin.m',
9+
).readAsStringSync();
10+
11+
final guardIndex = source.indexOf(
12+
'respondsToSelector:@selector(isiOSAppOnVision)',
13+
);
14+
final invocationIndex = source.indexOf('[info isiOSAppOnVision]');
15+
16+
expect(guardIndex, isNonNegative);
17+
expect(invocationIndex, isNonNegative);
18+
expect(guardIndex, lessThan(invocationIndex));
19+
});
20+
}

0 commit comments

Comments
 (0)