Skip to content

Commit 25bbcce

Browse files
feat(device_info_plus): Add support for isiOSAppOnVision property in iOS device info (#3716)
Co-authored-by: Volodymyr Buberenko <vbuberen@users.noreply.github.com>
1 parent 0074628 commit 25bbcce

File tree

5 files changed

+18
-0
lines changed

5 files changed

+18
-0
lines changed

packages/device_info_plus/device_info_plus/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Get current device information from within the Flutter application.
2424
- Kotlin 2.2.0
2525
- Android Gradle Plugin >=8.12.1
2626
- Gradle wrapper >=8.13
27+
- Xcode >= 26.1.1
2728

2829
# Usage
2930

packages/device_info_plus/device_info_plus/example/lib/main.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ class _MyAppState extends State<MyApp> {
129129
'identifierForVendor': data.identifierForVendor,
130130
'isPhysicalDevice': data.isPhysicalDevice,
131131
'isiOSAppOnMac': data.isiOSAppOnMac,
132+
'isiOSAppOnVision': data.isiOSAppOnVision,
132133
'freeDiskSize': data.freeDiskSize,
133134
'totalDiskSize': data.totalDiskSize,
134135
'physicalRamSize': data.physicalRamSize,

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ - (void)handleMethodCall:(FlutterMethodCall *)call
3030
if (@available(iOS 14.0, *)) {
3131
isiOSAppOnMac = [NSNumber numberWithBool:[info isiOSAppOnMac]];
3232
}
33+
NSNumber *isiOSAppOnVision = [NSNumber numberWithBool:NO];
34+
if (@available(iOS 26.1, *)) {
35+
isiOSAppOnVision = [NSNumber numberWithBool:[info isiOSAppOnVision]];
36+
}
3337
NSError *error = nil;
3438
NSDictionary *fsAttributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];
3539
NSNumber *freeSize = [NSNumber numberWithInt:-1];
@@ -64,6 +68,7 @@ - (void)handleMethodCall:(FlutterMethodCall *)call
6468
@"totalDiskSize" : totalSize,
6569
@"isPhysicalDevice" : isPhysicalNumber,
6670
@"isiOSAppOnMac" : isiOSAppOnMac,
71+
@"isiOSAppOnVision" : isiOSAppOnVision,
6772
@"physicalRamSize" : physicalRamSize,
6873
@"availableRamSize" : availableRamSize,
6974
@"utsname" : @{

packages/device_info_plus/device_info_plus/lib/src/model/ios_device_info.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class IosDeviceInfo extends BaseDeviceInfo {
2525
required this.physicalRamSize,
2626
required this.availableRamSize,
2727
required this.isiOSAppOnMac,
28+
required this.isiOSAppOnVision,
2829
required this.utsname,
2930
}) : super(data);
3031

@@ -73,6 +74,10 @@ class IosDeviceInfo extends BaseDeviceInfo {
7374
/// https://developer.apple.com/documentation/foundation/nsprocessinfo/3608556-iosapponmac
7475
final bool isiOSAppOnMac;
7576

77+
/// Indicates whether the process is an iPhone or iPad app running on visionOS.
78+
/// https://developer.apple.com/documentation/foundation/processinfo/isiosapponvision
79+
final bool isiOSAppOnVision;
80+
7681
/// Operating system information derived from `sys/utsname.h`.
7782
final IosUtsname utsname;
7883

@@ -99,6 +104,7 @@ class IosDeviceInfo extends BaseDeviceInfo {
99104
physicalRamSize: map['physicalRamSize'],
100105
availableRamSize: map['availableRamSize'],
101106
isiOSAppOnMac: map['isiOSAppOnMac'],
107+
isiOSAppOnVision: map['isiOSAppOnVision'],
102108
utsname: IosUtsname._fromMap(
103109
map['utsname']?.cast<String, dynamic>() ?? {},
104110
),
@@ -119,6 +125,7 @@ class IosDeviceInfo extends BaseDeviceInfo {
119125
String? identifierForVendor,
120126
required bool isPhysicalDevice,
121127
required bool isiOSAppOnMac,
128+
required bool isiOSAppOnVision,
122129
required int physicalRamSize,
123130
required int availableRamSize,
124131
required IosUtsname utsname,
@@ -135,6 +142,7 @@ class IosDeviceInfo extends BaseDeviceInfo {
135142
'totalDiskSize': totalDiskSize,
136143
'isPhysicalDevice': isPhysicalDevice,
137144
'isiOSAppOnMac': isiOSAppOnMac,
145+
'isiOSAppOnVision': isiOSAppOnVision,
138146
'physicalRamSize': physicalRamSize,
139147
'availableRamSize': availableRamSize,
140148
'utsname': {
@@ -158,6 +166,7 @@ class IosDeviceInfo extends BaseDeviceInfo {
158166
totalDiskSize: totalDiskSize,
159167
isPhysicalDevice: isPhysicalDevice,
160168
isiOSAppOnMac: isiOSAppOnMac,
169+
isiOSAppOnVision: isiOSAppOnVision,
161170
physicalRamSize: physicalRamSize,
162171
availableRamSize: availableRamSize,
163172
utsname: utsname,

packages/device_info_plus/device_info_plus/test/model/ios_device_info_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ void main() {
2222
'systemName': 'systemName',
2323
'isPhysicalDevice': true,
2424
'isiOSAppOnMac': true,
25+
'isiOSAppOnVision': true,
2526
'physicalRamSize': 8192,
2627
'availableRamSize': 4096,
2728
'systemVersion': 'systemVersion',
@@ -40,6 +41,7 @@ void main() {
4041
expect(iosDeviceInfo.modelName, 'modelName');
4142
expect(iosDeviceInfo.isPhysicalDevice, isTrue);
4243
expect(iosDeviceInfo.isiOSAppOnMac, isTrue);
44+
expect(iosDeviceInfo.isiOSAppOnVision, isTrue);
4345
expect(iosDeviceInfo.physicalRamSize, 8192);
4446
expect(iosDeviceInfo.availableRamSize, 4096);
4547
expect(iosDeviceInfo.systemName, 'systemName');

0 commit comments

Comments
 (0)