diff --git a/packages/device_info_plus/device_info_plus/ios/device_info_plus/Package.swift b/packages/device_info_plus/device_info_plus/ios/device_info_plus/Package.swift index a4defdd79c..0df8fc6b68 100644 --- a/packages/device_info_plus/device_info_plus/ios/device_info_plus/Package.swift +++ b/packages/device_info_plus/device_info_plus/ios/device_info_plus/Package.swift @@ -11,11 +11,15 @@ let package = Package( products: [ .library(name: "device-info-plus", targets: ["device_info_plus"]) ], - dependencies: [], + dependencies: [ + .package(name: "FlutterFramework", path: "../FlutterFramework") + ], targets: [ .target( name: "device_info_plus", - dependencies: [], + dependencies: [ + .product(name: "FlutterFramework", package: "FlutterFramework") + ], resources: [ .process("PrivacyInfo.xcprivacy"), ], diff --git a/packages/device_info_plus/device_info_plus/ios/device_info_plus/Sources/device_info_plus/FPPDeviceInfoPlusPlugin.m b/packages/device_info_plus/device_info_plus/ios/device_info_plus/Sources/device_info_plus/FPPDeviceInfoPlusPlugin.m index 83a9a00e75..c330a24261 100644 --- a/packages/device_info_plus/device_info_plus/ios/device_info_plus/Sources/device_info_plus/FPPDeviceInfoPlusPlugin.m +++ b/packages/device_info_plus/device_info_plus/ios/device_info_plus/Sources/device_info_plus/FPPDeviceInfoPlusPlugin.m @@ -32,7 +32,9 @@ - (void)handleMethodCall:(FlutterMethodCall *)call } NSNumber *isiOSAppOnVision = [NSNumber numberWithBool:NO]; if (@available(iOS 26.1, *)) { - isiOSAppOnVision = [NSNumber numberWithBool:[info isiOSAppOnVision]]; + if ([info respondsToSelector:@selector(isiOSAppOnVision)]) { + isiOSAppOnVision = [NSNumber numberWithBool:[info isiOSAppOnVision]]; + } } NSError *error = nil; NSDictionary *fsAttributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error]; diff --git a/packages/device_info_plus/device_info_plus/macos/device_info_plus/Package.swift b/packages/device_info_plus/device_info_plus/macos/device_info_plus/Package.swift index 9cd83e6e27..8f4de6266d 100644 --- a/packages/device_info_plus/device_info_plus/macos/device_info_plus/Package.swift +++ b/packages/device_info_plus/device_info_plus/macos/device_info_plus/Package.swift @@ -11,11 +11,15 @@ let package = Package( products: [ .library(name: "device-info-plus", targets: ["device_info_plus"]) ], - dependencies: [], + dependencies: [ + .package(name: "FlutterFramework", path: "../FlutterFramework") + ], targets: [ .target( name: "device_info_plus", - dependencies: [], + dependencies: [ + .product(name: "FlutterFramework", package: "FlutterFramework") + ], resources: [ .process("PrivacyInfo.xcprivacy"), ] diff --git a/packages/device_info_plus/device_info_plus/test/ios_device_info_native_source_test.dart b/packages/device_info_plus/device_info_plus/test/ios_device_info_native_source_test.dart new file mode 100644 index 0000000000..7642bb0cb2 --- /dev/null +++ b/packages/device_info_plus/device_info_plus/test/ios_device_info_native_source_test.dart @@ -0,0 +1,20 @@ +import 'dart:io'; + +import 'package:flutter_test/flutter_test.dart'; + +void main() { + test('guards iOS vision process info selector before invocation', () { + final source = File( + 'ios/device_info_plus/Sources/device_info_plus/FPPDeviceInfoPlusPlugin.m', + ).readAsStringSync(); + + final guardIndex = source.indexOf( + 'respondsToSelector:@selector(isiOSAppOnVision)', + ); + final invocationIndex = source.indexOf('[info isiOSAppOnVision]'); + + expect(guardIndex, isNonNegative); + expect(invocationIndex, isNonNegative); + expect(guardIndex, lessThan(invocationIndex)); + }); +}