apple_bundle/info_plist/protected_resources.rs
1//! # Protected Resources
2//!
3//! Control an app’s access to protected system services and user data.
4//!
5//! ### Overview
6//! Before your app can access certain protected resources, like the Bluetooth interface,
7//! location information, or the user’s photos, the system asks the user for permission on
8//! behalf of your app. To signal that your app needs the access, you add a
9//! UsageDescription key to your app’s Information Property List. You set the value
10//! associated with the key to a string that explains why your app needs access.
11//! The system displays this string when prompting the user, as described in Requesting
12//! Access to Protected Resources.
13
14use serde::{Deserialize, Serialize};
15
16/// Bluetooth
17#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
18pub struct Bluetooth {
19 /// A message that tells the user why the app needs access to Bluetooth.
20 ///
21 /// This key is required if your app uses the device’s Bluetooth interface.
22 ///
23 /// ### Important
24 /// If your app has a deployment target earlier than iOS 13, add the
25 /// NSBluetoothPeripheralUsageDescription key to your app’s Information Property List
26 /// file in addition to this key.
27 ///
28 /// ## Availability
29 /// * iOS 13.0+
30 /// * tvOS 13.0+
31 /// * watchOS 6.0+
32 ///
33 /// ## Framework
34 /// * Core Bluetooth
35 #[serde(
36 rename = "NSBluetoothAlwaysUsageDescription",
37 serialize_with = "crate::serialize_option",
38 skip_serializing_if = "Option::is_none"
39 )]
40 pub bluetooth_always_usage_description: Option<String>,
41 /// A message that tells the user why the app is requesting the ability to connect to
42 /// Bluetooth peripherals.
43 ///
44 /// For apps with a deployment target of iOS 13 and later, use
45 /// NSBluetoothAlwaysUsageDescription instead.
46 ///
47 /// For deployment targets earlier than iOS 13, add both
48 /// NSBluetoothAlwaysUsageDescription and NSBluetoothPeripheralUsageDescription to
49 /// your app’s Information Property List file. Devices running earlier versions of
50 /// iOS rely on NSBluetoothPeripheralUsageDescription, while devices running later
51 /// versions rely on NSBluetoothAlwaysUsageDescription.
52 ///
53 /// ### Important
54 /// This key is required if your app uses APIs that access Bluetooth peripherals and
55 /// has a deployment target earlier than iOS 13.
56 ///
57 /// ## Availability
58 /// * iOS 6.0–13.0
59 ///
60 /// ## Framework
61 /// * Core Bluetooth
62 #[deprecated(since = "iOS 6.0-13.0")]
63 #[serde(
64 rename = "NSBluetoothPeripheralUsageDescription",
65 serialize_with = "crate::serialize_option",
66 skip_serializing_if = "Option::is_none"
67 )]
68 pub bluetooth_peripheral_usage_description: Option<String>,
69}
70
71/// Calendar and Reminders
72///
73/// [Accessing the Event Store](https://developer.apple.com/documentation/eventkit/accessing_the_event_store)
74#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
75pub struct CalendarAndReminders {
76 /// A message that tells the user why the app is requesting access to the user’s
77 /// calendar data.
78 ///
79 /// ### Important
80 /// This key is required if your app uses APIs that access the user’s calendar data.
81 ///
82 /// ## Availability
83 /// * iOS 6.0+
84 /// * macOS 10.14+
85 ///
86 /// ## Framework
87 /// * EventKit
88 #[serde(
89 rename = "NSCalendarsUsageDescription",
90 serialize_with = "crate::serialize_option",
91 skip_serializing_if = "Option::is_none"
92 )]
93 pub calendars_usage_description: Option<String>,
94 /// A message that tells the user why the app is requesting access to the user’s
95 /// reminders.
96 ///
97 /// ### Important
98 /// This key is required if your app uses APIs that access the user’s reminders.
99 ///
100 /// ## Availability
101 /// * iOS 6.0+
102 /// * macOS 10.14+
103 ///
104 /// ## Framework
105 /// * EventKit
106 #[serde(
107 rename = "NSRemindersUsageDescription",
108 serialize_with = "crate::serialize_option",
109 skip_serializing_if = "Option::is_none"
110 )]
111 pub reminders_usage_description: Option<String>,
112}
113
114/// Camera and Microphone
115///
116/// ## Articles
117/// * [Requesting Authorization for Media Capture on iOS](https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture/requesting_authorization_for_media_capture_on_ios)
118/// * [Requesting Authorization for Media Capture on macOS](https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture/requesting_authorization_for_media_capture_on_macos)
119#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
120pub struct CameraAndMicrophone {
121 /// A message that tells the user why the app is requesting access to the device’s
122 /// camera.
123 ///
124 /// ### Important
125 /// This key is required if your app uses APIs that access the device’s camera.
126 ///
127 /// ## Availability
128 /// * iOS 7.0+
129 /// * macOS 10.14+
130 ///
131 /// ## Framework
132 /// * AVFoundation
133 #[serde(
134 rename = "NSCameraUsageDescription",
135 serialize_with = "crate::serialize_option",
136 skip_serializing_if = "Option::is_none"
137 )]
138 pub camera_usage_description: Option<String>,
139 /// A message that tells the user why the app is requesting access to the device’s
140 /// microphone.
141 ///
142 /// ### Important
143 /// This key is required if your app uses APIs that access the device’s microphone.
144 ///
145 /// ## Availability
146 /// * iOS 7.0+
147 /// * macOS 10.14+
148 /// * watchOS 4.0+
149 ///
150 /// ## Framework
151 /// * AVFoundation
152 #[serde(
153 rename = "NSMicrophoneUsageDescription",
154 serialize_with = "crate::serialize_option",
155 skip_serializing_if = "Option::is_none"
156 )]
157 pub microphone_usage_description: Option<String>,
158}
159
160/// Contacts
161///
162/// [Requesting Authorization to Access Contacts](https://developer.apple.com/documentation/contacts/requesting_authorization_to_access_contacts)
163#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
164pub struct Contacts {
165 /// A message that tells the user why the app is requesting access to the user’s
166 /// contacts.
167 ///
168 /// ### Important
169 /// This key is required if your app uses APIs that access the user’s contacts.
170 ///
171 /// ## Availability
172 /// * iOS 6.0+
173 /// * macOS 10.8+
174 ///
175 /// ## Framework
176 /// * Contacts
177 #[serde(
178 rename = "NSContactsUsageDescription",
179 serialize_with = "crate::serialize_option",
180 skip_serializing_if = "Option::is_none"
181 )]
182 pub contacts_usage_description: Option<String>,
183}
184
185/// FaceID
186#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
187pub struct FaceId {
188 /// A message that tells the user why the app is requesting the ability to
189 /// authenticate with Face ID.
190 ///
191 /// ### Important
192 /// This key is required if your app uses APIs that access Face ID.
193 ///
194 /// ## Availability
195 /// * iOS 11.0+
196 ///
197 /// ## Framework
198 /// * Local Authentication
199 #[serde(
200 rename = "NSFaceIDUsageDescription",
201 serialize_with = "crate::serialize_option",
202 skip_serializing_if = "Option::is_none"
203 )]
204 pub face_id_usage_description: Option<String>,
205}
206
207/// Files and Folders
208#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
209pub struct FilesAndFolders {
210 /// A message that tells the user why the app needs access to the user’s Desktop
211 /// folder.
212 ///
213 /// The user implicitly grants your app access to a file in the Desktop folder when
214 /// selecting the file in an Open or Save panel, dragging it onto your app, or opening
215 /// it in Finder. Your app can access that file right away and any time in the
216 /// future. In addition, if your app creates a new file in the Desktop folder, the
217 /// app can access that file without user consent.
218 ///
219 /// The first time your app tries to access a file in the user’s Desktop folder
220 /// without implied user consent, the system prompts the user for permission to access
221 /// the folder’s contents. Add the NSDesktopFolderUsageDescription key to your
222 /// app’s Information Property List file to provide a message that explains why your
223 /// app needs access. The usage description is optional, but highly recommended.
224 ///
225 /// App Sandbox enforces stricter limits on Desktop folder access, so that policy may
226 /// supersede this one if your app enables sandboxing. See App Sandbox for more
227 /// information.
228 ///
229 /// After the user chooses whether to grant access, the system remembers the user’s
230 /// choice. To reset permissions, use the tccutil command line utility with your
231 /// app’s bundle ID:
232 ///
233 /// ```swift
234 /// $ tccutil reset SystemPolicyDesktopFolder <bundleID>
235 /// ```
236 ///
237 /// ## Availability
238 /// * macOS 10.15+
239 ///
240 /// ## Framework
241 /// * Foundation
242 #[serde(
243 rename = "NSDesktopFolderUsageDescription",
244 serialize_with = "crate::serialize_option",
245 skip_serializing_if = "Option::is_none"
246 )]
247 pub desktop_folder_usage_description: Option<String>,
248 /// A message that tells the user why the app needs access to the user’s Documents
249 /// folder.
250 ///
251 /// The user implicitly grants your app access to a file in the Documents folder when
252 /// selecting the file in an Open or Save panel, dragging it onto your app, or opening
253 /// it in Finder. Your app can access that file right away and any time in the
254 /// future. In addition, if your app creates a new file in the Documents folder,
255 /// the app can access that file without user consent.
256 ///
257 /// The first time your app tries to access a file in the user’s Documents folder
258 /// without implied user consent, the system prompts the user for permission to access
259 /// the folder’s contents. Add the NSDocumentsFolderUsageDescription key to your
260 /// app’s Information Property List file to provide a message that explains why your
261 /// app needs access. The usage description is optional, but highly recommended.
262 ///
263 /// App Sandbox enforces stricter limits on Documents folder access, so that policy
264 /// may supersede this one if your app enables sandboxing. See App Sandbox for
265 /// more information.
266 ///
267 /// After the user chooses whether to grant access, the system remembers the user’s
268 /// choice. To reset permissions, use the tccutil command line utility with your
269 /// app’s bundle ID:
270 ///
271 /// ```swift
272 /// $ tccutil reset SystemPolicyDocumentsFolder <bundleID>
273 /// ```
274 ///
275 /// ## Availability
276 /// * macOS 10.15+
277 ///
278 /// ## Framework
279 /// * Foundation
280 #[serde(
281 rename = "NSDocumentsFolderUsageDescription",
282 serialize_with = "crate::serialize_option",
283 skip_serializing_if = "Option::is_none"
284 )]
285 pub documents_folder_usage_description: Option<String>,
286 /// A message that tells the user why the app needs access to the user’s Documents
287 /// folder.
288 ///
289 /// The user implicitly grants your app access to a file in the Documents folder when
290 /// selecting the file in an Open or Save panel, dragging it onto your app, or opening
291 /// it in Finder. Your app can access that file right away and any time in the
292 /// future. In addition, if your app creates a new file in the Documents folder,
293 /// the app can access that file without user consent.
294 ///
295 /// The first time your app tries to access a file in the user’s Documents folder
296 /// without implied user consent, the system prompts the user for permission to access
297 /// the folder’s contents. Add the NSDocumentsFolderUsageDescription key to your
298 /// app’s Information Property List file to provide a message that explains why your
299 /// app needs access. The usage description is optional, but highly recommended.
300 ///
301 /// App Sandbox enforces stricter limits on Documents folder access, so that policy
302 /// may supersede this one if your app enables sandboxing. See App Sandbox for
303 /// more information.
304 ///
305 /// After the user chooses whether to grant access, the system remembers the user’s
306 /// choice. To reset permissions, use the tccutil command line utility with your
307 /// app’s bundle ID:
308 ///
309 /// ```swift
310 /// $ tccutil reset SystemPolicyDownloadsFolder <bundleID>
311 /// ```
312 ///
313 /// ## Availability
314 /// * macOS 10.15+
315 ///
316 /// ## Framework
317 /// * Foundation
318 #[serde(
319 rename = "NSDownloadsFolderUsageDescription",
320 serialize_with = "crate::serialize_option",
321 skip_serializing_if = "Option::is_none"
322 )]
323 pub downloads_folder_usage_description: Option<String>,
324 /// A message that tells the user why the app needs access to files on a network
325 /// volume.
326 ///
327 /// The user implicitly grants your app access to a file on a network volume when
328 /// selecting the file in an Open or Save panel, dragging it onto your app, or opening
329 /// it in Finder. Your app can access that file right away and any time in the
330 /// future. In addition, if your app creates a new file on a network volume, the
331 /// app can access that file without user consent.
332 ///
333 /// The first time your app tries to access a file on a network volume without implied
334 /// user consent, the system prompts the user for permission to access network
335 /// volumes. Add the NSNetworkVolumesUsageDescription key to your app’s
336 /// Information Property List file to provide a string for the prompt that explains
337 /// why your app needs access. The usage description is optional, but highly
338 /// recommended.
339 ///
340 /// After the user chooses whether to grant access, the system remembers the user’s
341 /// choice. To reset permissions, use the tccutil command line utility with your
342 /// app’s bundle ID:
343 ///
344 /// ```swift
345 /// $ tccutil reset SystemPolicyNetworkVolumes <bundleID>
346 /// ```
347 ///
348 /// ## Availability
349 /// * macOS 10.15+
350 ///
351 /// ## Framework
352 /// * Foundation
353 #[serde(
354 rename = "NSNetworkVolumesUsageDescription",
355 serialize_with = "crate::serialize_option",
356 skip_serializing_if = "Option::is_none"
357 )]
358 pub network_volumes_usage_description: Option<String>,
359 /// A message that tells the user why the app needs access to files on a removable
360 /// volume.
361 ///
362 /// The user implicitly grants your app access to a file on a removable volume—like a
363 /// USB thumb drive—when selecting the file in an Open or Save panel, dragging it onto
364 /// your app, or opening it in Finder. Your app can access that file right away
365 /// and any time in the future. In addition, if your app creates a new file on a
366 /// removable volume, the app can access that file without user consent.
367 ///
368 /// The first time your app tries to access a file on a removable volume without
369 /// implied user consent, the system prompts the user for permission to access
370 /// removable volumes. Add the NSRemovableVolumesUsageDescription key to your
371 /// app’s Information Property List file to provide a string for the prompt that
372 /// explains why your app needs access. The usage description is optional, but
373 /// highly recommended.
374 ///
375 /// After the user chooses whether to grant access, the system remembers the user’s
376 /// choice. To reset permissions, use the tccutil command line utility with your
377 /// app’s bundle ID:
378 ///
379 /// ```swift
380 /// $ tccutil reset SystemPolicyRemovableVolumes <bundleID>
381 /// ```
382 /// ## Availability
383 /// * macOS 10.15+
384 ///
385 /// ## Framework
386 /// * Foundation
387 #[serde(
388 rename = "NSRemovableVolumesUsageDescription",
389 serialize_with = "crate::serialize_option",
390 skip_serializing_if = "Option::is_none"
391 )]
392 pub removable_volumes_usage_description: Option<String>,
393 /// A message that tells the user why the app needs to be informed when other apps
394 /// access files that it manages
395 ///
396 /// An app that adopts the File Provider framework can see when and with which other
397 /// apps the user accesses managed files. Before providing this kind of
398 /// information to a file provider, the system prompts the user to grant access.
399 /// Add the NSFileProviderPresenceUsageDescription key to your file provider app’s
400 /// Information Property List file to provide a string for the prompt that explains
401 /// why your app needs this information.
402 ///
403 /// After the user chooses whether to grant access, the system remembers the user’s
404 /// choice. To reset permissions, use the tccutil command line utility with your
405 /// app’s bundle ID:
406 ///
407 /// ```swift
408 /// $ tccutil reset FileProviderPresence <bundleID>
409 /// ```
410 ///
411 /// ## Availability
412 /// * macOS 10.15+
413 ///
414 /// ## Framework
415 /// * Foundation
416 #[serde(
417 rename = "NSFileProviderPresenceUsageDescription",
418 serialize_with = "crate::serialize_option",
419 skip_serializing_if = "Option::is_none"
420 )]
421 pub file_provider_presence_usage_description: Option<String>,
422 /// A message that tells the user why the app needs access to files managed by a file
423 /// provider.
424 ///
425 /// The user implicitly grants your app access to a file managed by a file provider
426 /// when selecting the file in an Open or Save panel, dragging it onto your app, or
427 /// opening it in Finder. Your app can access that file right away and any time in
428 /// the future. In addition, if your app creates a new file managed by a file
429 /// provider, the app can access that file without user consent.
430 ///
431 /// The first time your app tries to access a file managed by a file provider without
432 /// implied user consent, the system prompts the user for permission.
433 /// Add the NSFileProviderDomainUsageDescription key to your app’s Information
434 /// Property List file to provide a string for the prompt that explains why your app
435 /// needs access. The usage description is optional, but highly recommended.
436 ///
437 /// After the user chooses whether to grant access, the system remembers the user’s
438 /// choice. To reset permissions, use the tccutil command line utility with your
439 /// app’s bundle ID:
440 ///
441 /// ```swift
442 /// $ tccutil reset FileProviderDomain <bundleID>
443 /// ```
444 ///
445 /// ## Availability
446 /// * macOS 10.15+
447 ///
448 /// ## Framework
449 /// * Foundation
450 #[serde(
451 rename = "NSFileProviderDomainUsageDescription",
452 serialize_with = "crate::serialize_option",
453 skip_serializing_if = "Option::is_none"
454 )]
455 pub file_provider_domain_usage_description: Option<String>,
456}
457
458/// Game Center
459#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
460pub struct GameCenter {
461 /// A message that tells the user why the app needs access to their Game Center
462 /// friends list.
463 ///
464 /// ## Availability
465 /// * iOS 14.5+
466 ///
467 /// ## Framework
468 /// * GameKit
469 #[serde(
470 rename = "NSGKFriendListUsageDescription",
471 skip_serializing_if = "Option::is_none"
472 )]
473 pub friend_list_usage_description: Option<String>,
474}
475
476/// Health
477///
478/// [Setting Up HealthKit](https://developer.apple.com/documentation/healthkit/setting_up_healthkit)
479#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
480pub struct Health {
481 /// A Boolean value that indicates whether the app may request user authorization to
482 /// access health and activity data that appears in the Health app.
483 ///
484 /// To add this entitlement to your app, enable the HealthKit capability in Xcode.
485 ///
486 /// ## Availability
487 /// * iOS 8.0+
488 ///
489 /// ## Framework
490 /// * HealthKit
491 #[serde(
492 rename = "com.apple.developer.healthkit",
493 serialize_with = "crate::serialize_option",
494 skip_serializing_if = "Option::is_none"
495 )]
496 pub healthkit: Option<bool>,
497 /// Health data types that require additional permission.
498 ///
499 /// The HealthKit Entitlement provides access to most HealthKit data types.
500 /// However, because of their highly sensitive nature, some data types require
501 /// additional entitlements. The HealthKit Capabilities Entitlement provides
502 /// access to these data types.
503 ///
504 /// To add this entitlement to your app, first enable the HealthKit capability in
505 /// Xcode, and then check any values that you want to add to the HealthKit
506 /// Capabilities Entitlement.
507 ///
508 /// Only add values for data types that your app needs to access.
509 /// App Review may reject apps that don’t use the data appropriately.
510 /// For more information, see the Health and Health Research section of the App Store
511 /// Review Guidelines.
512 ///
513 /// ## Availability
514 /// * iOS 8.0+
515 ///
516 /// ## Framework
517 /// * HealthKit
518 #[serde(
519 rename = "com.apple.developer.healthkit.access",
520 skip_serializing_if = "Option::is_none",
521 serialize_with = "crate::serialize_vec_enum_option"
522 )]
523 pub healthkit_access: Option<Vec<HealthKitCapabilities>>,
524 /// A message to the user that explains why the app requested permission to read
525 /// clinical records.
526 ///
527 /// ### Important
528 /// This key is required if your app uses APIs that access the user's clinical
529 /// records.
530 ///
531 /// ## Availability
532 /// * iOS 12.0+
533 ///
534 /// ## Framework
535 /// * HealthKit
536 #[serde(
537 rename = "NSHealthClinicalHealthRecordsShareUsageDescription",
538 serialize_with = "crate::serialize_option",
539 skip_serializing_if = "Option::is_none"
540 )]
541 pub health_clinical_health_records_share_usage_description: Option<String>,
542 /// A message to the user that explains why the app requested permission to read
543 /// samples from the HealthKit store.
544 ///
545 /// ### Important
546 /// This key is required if your app uses APIs that access the user’s heath data.
547 ///
548 /// ## Availability
549 /// * iOS 8.0+
550 ///
551 /// ## Framework
552 /// * HealthKit
553 #[serde(
554 rename = "NSHealthShareUsageDescription",
555 serialize_with = "crate::serialize_option",
556 skip_serializing_if = "Option::is_none"
557 )]
558 pub health_share_usage_description: Option<String>,
559 /// A message to the user that explains why the app requested permission to save
560 /// samples to the HealthKit store.
561 ///
562 /// ### Important
563 /// This key is required if your app uses APIs that update the user’s health data.
564 ///
565 /// ## Availability
566 /// * iOS 8.0+
567 ///
568 /// ## Framework
569 /// * HealthKit
570 #[serde(
571 rename = "NSHealthUpdateUsageDescription",
572 serialize_with = "crate::serialize_option",
573 skip_serializing_if = "Option::is_none"
574 )]
575 pub health_update_usage_description: Option<String>,
576 /// The clinical record data types that your app must get permission to read.
577 ///
578 /// Use this key to indicate that your app requires access to specific clinical record
579 /// data types to function properly. Set the value to an array of strings
580 /// containing the type identifiers for your required types. For a list of type
581 /// identifiers, see HKClinicalTypeIdentifier.
582 ///
583 /// To protect the user’s privacy, you must specify three or more required clinical
584 /// record types. If the user denies authorization to any of the types,
585 /// authorization fails with an HKError.Code.errorRequiredAuthorizationDenied error.
586 /// Your app is not told the record types to which the user denied access.
587 ///
588 /// ## Availability
589 /// * iOS 12.0+
590 ///
591 /// ## Framework
592 /// * HealthKit
593 #[serde(
594 rename = "NSHealthRequiredReadAuthorizationTypeIdentifiers",
595 serialize_with = "crate::serialize_option",
596 skip_serializing_if = "Option::is_none"
597 )]
598 pub health_required_read_authorization_type_identifiers: Option<Vec<String>>,
599}
600
601/// Home
602///
603/// [Enabling HomeKit in Your App](https://developer.apple.com/documentation/homekit/enabling_homekit_in_your_app)
604#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
605pub struct Home {
606 /// A message that tells the user why the app is requesting access to the user’s
607 /// HomeKit configuration data.
608 ///
609 /// ### Important
610 /// This key is required if your app uses APIs that access the user’s HomeKit
611 /// configuration data.
612 ///
613 /// For more information about using HomeKit in your app, see Enabling HomeKit in Your
614 /// App.
615 ///
616 /// ## Availability
617 /// * iOS 8.0+
618 /// * watchOS 2.0+
619 ///
620 /// ## Framework
621 /// * HomeKit
622 #[serde(
623 rename = "NSHomeKitUsageDescription",
624 serialize_with = "crate::serialize_option",
625 skip_serializing_if = "Option::is_none"
626 )]
627 pub home_kit_usage_description: Option<String>,
628}
629
630/// Location
631///
632/// [Choosing the Location Services Authorization to Request](https://developer.apple.com/documentation/corelocation/choosing_the_location_services_authorization_to_request)
633#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
634pub struct Location {
635 /// A message that tells the user why the app is requesting access to the user’s
636 /// location information at all times.
637 ///
638 /// Use this key if your iOS app accesses location information while running in the
639 /// background. If your app only needs location information when in the
640 /// foreground, use NSLocationWhenInUseUsageDescription instead.
641 /// For more information, see Choosing the Location Services Authorization to Request.
642 ///
643 /// If you need location information in a macOS app, use NSLocationUsageDescription
644 /// instead. If your iOS app deploys to versions earlier than iOS 11, see
645 /// NSLocationAlwaysUsageDescription.
646 ///
647 /// ### Important
648 /// This key is required if your iOS app uses APIs that access the user’s location
649 /// information at all times.
650 ///
651 /// ## Availability
652 /// * iOS 11.0+
653 ///
654 /// ## Framework
655 /// * Core Location
656 #[serde(
657 rename = "NSLocationAlwaysAndWhenInUseUsageDescription",
658 serialize_with = "crate::serialize_option",
659 skip_serializing_if = "Option::is_none"
660 )]
661 pub location_always_and_when_in_use_usage_description: Option<String>,
662 /// A message that tells the user why the app is requesting access to the user’s
663 /// location information.
664 ///
665 /// Use this key in a macOS app that accesses the user’s location information.
666 /// In an iOS app, use NSLocationWhenInUseUsageDescription or
667 /// NSLocationAlwaysAndWhenInUseUsageDescription instead.
668 ///
669 /// ### Important
670 /// This key is required if your macOS app uses APIs that access the user’s location
671 /// information.
672 ///
673 /// ## Availability
674 /// * iOS 6.0–8.0
675 /// * macOS 10.14+
676 ///
677 /// ## Framework
678 /// * Core Location
679 #[deprecated(since = "iOS 6.0-8.0")]
680 #[serde(
681 rename = "NSLocationUsageDescription",
682 serialize_with = "crate::serialize_option",
683 skip_serializing_if = "Option::is_none"
684 )]
685 pub location_usage_description: Option<String>,
686 /// A message that tells the user why the app is requesting access to the user’s
687 /// location information while the app is running in the foreground.
688 ///
689 /// Use this key if your iOS app accesses location information only when running in
690 /// the foreground. If your app needs location information when in the background,
691 /// use NSLocationAlwaysAndWhenInUseUsageDescription instead.
692 /// For more information, see Choosing the Location Services Authorization to Request.
693 ///
694 /// If you need location information in a macOS app, use NSLocationUsageDescription
695 /// instead.
696 ///
697 /// ### Important
698 /// This key is required if your iOS app uses APIs that access the user’s location
699 /// information while the app is in use.
700 ///
701 /// ## Availability
702 /// * iOS 11.0+
703 ///
704 /// ## Framework
705 /// * Core Location
706 #[serde(
707 rename = "NSLocationWhenInUseUsageDescription",
708 serialize_with = "crate::serialize_option",
709 skip_serializing_if = "Option::is_none"
710 )]
711 pub location_when_in_use_usage_description: Option<String>,
712 /// A collection of messages that explain why the app is requesting temporary access
713 /// to the user’s location.
714 ///
715 /// Use this key if your app needs temporary access to full accuracy location
716 /// information. Provide a dictionary of messages that address different use
717 /// cases, keyed by strings that you define. For example, if your app suggests
718 /// nearby coffee shops in one part of the app, and finds nearby friends in another,
719 /// you could include two entries
720 ///
721 /// When you request access, select among the messages at run time by providing the
722 /// associated key to the requestTemporaryFullAccuracyAuthorization(withPurposeKey:)
723 /// method:
724 ///
725 /// ```swift
726 /// // Request location access to find coffee shops.
727 /// manager.requestTemporaryFullAccuracyAuthorization(withPurposeKey: "coffee")
728 /// ````
729 ///
730 /// ## Availability
731 /// * iOS 14.0+
732 /// * macOS 11.0+
733 ///
734 /// ## Framework
735 /// * Core Location
736 #[serde(
737 rename = "NSLocationTemporaryUsageDescriptionDictionary",
738 serialize_with = "crate::serialize_option",
739 skip_serializing_if = "Option::is_none"
740 )]
741 pub location_temporary_usage_description_dictionary: Option<DefaultDictionary>,
742 /// A message that tells the user why the app is requesting access to the user's
743 /// location at all times.
744 ///
745 /// Use this key if your iOS app accesses location information in the background, and
746 /// you deploy to a target earlier than iOS 11. In that case, add both this key
747 /// and NSLocationAlwaysAndWhenInUseUsageDescription to your app’s Info.plist file
748 /// with the same message. Apps running on older versions of the OS use the
749 /// message associated with NSLocationAlwaysUsageDescription, while apps running on
750 /// later versions use the one associated with
751 /// NSLocationAlwaysAndWhenInUseUsageDescription.
752 ///
753 /// If your app only needs location information when in the foreground, use
754 /// NSLocationWhenInUseUsageDescription instead. For more information, see
755 /// Choosing the Location Services Authorization to Request.
756 ///
757 /// If you need location information in a macOS app, use NSLocationUsageDescription
758 /// instead.
759 ///
760 /// ### Important
761 /// This key is required if your iOS app uses APIs that access the user’s location at
762 /// all times and deploys to targets earlier than iOS 11.
763 ///
764 /// ## Availability
765 /// * iOS 8.0–10.0
766 ///
767 /// ## Framework
768 /// * Core Location
769 #[deprecated(
770 since = "iOS 8.0-10.0",
771 note = "For apps deployed to targets in iOS 11 and later, use NSLocationAlwaysAndWhenInUseUsageDescription instead."
772 )]
773 #[serde(
774 rename = "NSLocationAlwaysUsageDescription",
775 serialize_with = "crate::serialize_option",
776 skip_serializing_if = "Option::is_none"
777 )]
778 pub location_always_usage_description: Option<String>,
779 /// A Boolean value that indicates a widget uses the user’s location information.
780 ///
781 /// To access the user’s location information from a widget, set the value to true in
782 /// the widget extension’s Info.plist file.
783 ///
784 /// Before a widget can access location information, the containing app must request
785 /// authorization from the user. The containing app’s Info.plist file must also
786 /// contain relevant purpose strings. For more information, see Requesting
787 /// Authorization for Location Services.
788 ///
789 /// ## Availability
790 /// * iOS 14.0+
791 /// * macOS 11.0+
792 ///
793 /// ## Framework
794 /// * WidgetKit
795 #[serde(
796 rename = "NSWidgetWantsLocation",
797 serialize_with = "crate::serialize_option",
798 skip_serializing_if = "Option::is_none"
799 )]
800 pub widget_wants_location: Option<bool>,
801 /// A Boolean value that indicates whether the app requests reduced location accuracy
802 /// by default.
803 ///
804 /// Include this key in your information property list to set your app’s default
805 /// behavior for location accuracy when it calls the Core Location framework.
806 /// Set the key value to true to prompt the user for reduced accuracy by default; set
807 /// it to false to prompt for full location accuracy. If you don't include that
808 /// key in your Info.plist, that's equivalent to setting it to false.
809 ///
810 /// Include the key pair in your Info.plist file as shown:
811 ///
812 /// <!-- Info.plist -->
813 /// <key>NSLocationDefaultAccuracyReduced</key>
814 /// <true/>
815 ///
816 /// When this key is set to true, all Core Location services (location updates, visit
817 /// monitoring, significant location change, fence monitoring) receive service at the
818 /// reduced-accuracy service level. Users will see that your app is asking for
819 /// reduced accuracy because the location authorization prompt will show a map with an
820 /// approximate location, and your app will have the Precise Location toggled off in
821 /// Settings > Privacy > Location Services . These indicators of an app's improved
822 /// privacy are ones that users may value.
823 ///
824 /// If you want to leverage the reduced-accuracy feature to improve privacy in a
825 /// particular operation without setting this key, use the desiredAccuracy constant
826 /// kCLLocationAccuracyReduced. This constant causes startUpdatingLocation() to
827 /// deliver results as if the app were authorized for approximate location until you
828 /// change the desiredAccuracy constant again.
829 ///
830 /// Setting NSLocationDefaultAccuracyReduced determines the default type of
831 /// authorization your app gets, but users can override it any time in Settings.
832 /// Users always control the level of location accuracy they want to share, and can
833 /// change precision settings in Settings > Privacy > Location Services by selecting
834 /// Precise Location for your app.
835 ///
836 /// ## Availability
837 /// * iOS 14.0+
838 /// * watchOS 7.0+
839 ///
840 /// ## Framework
841 /// * Core Location
842 #[serde(
843 rename = "NSLocationDefaultAccuracyReduced",
844 serialize_with = "crate::serialize_option",
845 skip_serializing_if = "Option::is_none"
846 )]
847 pub location_default_accuracy_reduced: Option<bool>,
848}
849
850/// DefaultDictionary
851#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
852pub struct DefaultDictionary {
853 pub default: String,
854}
855
856/// Media Player
857///
858/// [Requesting Access to Apple Music Library](https://developer.apple.com/documentation/storekit/skcloudservicecontroller/requesting_access_to_apple_music_library)
859#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
860pub struct MediaPlayer {
861 /// A message that tells the user why the app is requesting access to the user’s media
862 /// library.
863 ///
864 /// Set the value of this key to a user-readable description of how you intend to use
865 /// the user's media library. The first time your app access the user's media
866 /// library, the system prompts the user to grant or deny authorization for your app
867 /// to do so. The system includes this key's description in the dialog it displays
868 /// to the user.
869 ///
870 /// ### Important
871 /// This key is required if your app uses APIs that access the user’s media library.
872 ///
873 /// ## Availability
874 /// * iOS 2.0+
875 ///
876 /// ## Framework
877 /// * Media Player
878 #[serde(
879 rename = "NSAppleMusicUsageDescription",
880 serialize_with = "crate::serialize_option",
881 skip_serializing_if = "Option::is_none"
882 )]
883 pub apple_music_usage_description: Option<String>,
884}
885
886/// Motion
887#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
888pub struct Motion {
889 /// A message that tells the user why the app is requesting access to the device’s
890 /// motion data.
891 ///
892 /// ### Important
893 /// This key is required if your app uses APIs that access the device’s motion data,
894 /// including CMSensorRecorder, CMPedometer, CMMotionActivityManager, and
895 /// CMMovementDisorderManager. If you don’t include this key, your app will crash
896 /// when it attempts to access motion data.
897 ///
898 /// ## Availability
899 /// * iOS 7.0+
900 /// * macOS 10.15+
901 ///
902 /// ## Framework
903 /// * Core Motion
904 #[serde(
905 rename = "NSMotionUsageDescription",
906 serialize_with = "crate::serialize_option",
907 skip_serializing_if = "Option::is_none"
908 )]
909 pub motion_usage_description: Option<String>,
910 /// A message to the user that explains the app’s request for permission to access
911 /// fall detection event data.
912 ///
913 /// ### Important
914 /// If your app uses the CMFallDetectionManager, the app requires this key.
915 ///
916 /// ## Availability
917 /// * watchOS 7.2+
918 ///
919 /// ## Framework
920 /// * Core Motion
921 #[serde(
922 rename = "NSFallDetectionUsageDescription",
923 serialize_with = "crate::serialize_option",
924 skip_serializing_if = "Option::is_none"
925 )]
926 pub fall_detection_usage_description: Option<String>,
927}
928
929/// Networking
930#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
931pub struct Networking {
932 /// A message that tells the user why the app is requesting access to the local
933 /// network.
934 ///
935 /// Any app that uses the local network, directly or indirectly, should include this
936 /// description. This includes apps that use Bonjour and services implemented with
937 /// Bonjour, as well as direct unicast or multicast connections to local hosts.
938 ///
939 /// ## Availability
940 /// * iOS 14.0+
941 /// * macOS 11.0+
942 /// * tvOS 14.0+
943 ///
944 /// ## Framework
945 /// * Network
946 #[serde(
947 rename = "NSLocalNetworkUsageDescription",
948 serialize_with = "crate::serialize_option",
949 skip_serializing_if = "Option::is_none"
950 )]
951 pub local_network_usage_description: Option<String>,
952 /// A request for user permission to begin an interaction session with nearby devices.
953 ///
954 /// Before an app starts an interaction session, the system requests permission to
955 /// share the user’s relative distance and direction with a nearby peer.
956 /// The framework presents a prompt that displays the string value of this key
957 /// contained in your project’s Info.plist. Define text that explains your
958 /// interaction session's purpose to the user. For more information, see
959 /// Initiating and Maintaining a Session.
960 ///
961 /// This property is localizable.
962 ///
963 /// ## Availability
964 /// * iOS 14.0+
965 ///
966 /// ## Framework
967 /// * Nearby Interaction
968 #[serde(
969 rename = "NSNearbyInteractionAllowOnceUsageDescription",
970 serialize_with = "crate::serialize_option",
971 skip_serializing_if = "Option::is_none"
972 )]
973 pub nearby_interaction_allow_once_usage_description: Option<String>,
974}
975
976/// NFC
977#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
978pub struct Nfc {
979 /// A message that tells the user why the app is requesting access to the device’s NFC
980 /// hardware.
981 ///
982 /// ### Important
983 /// You’re required to provide this key if your app uses APIs that access the NFC
984 /// hardware.
985 ///
986 /// ## Availability
987 /// * iOS 11.0+
988 ///
989 /// ## Framework
990 /// * Core NFC
991 #[serde(
992 rename = "NFCReaderUsageDescription",
993 serialize_with = "crate::serialize_option",
994 skip_serializing_if = "Option::is_none"
995 )]
996 pub nfc_reader_usage_description: Option<String>,
997}
998
999/// Photos
1000///
1001/// [Delivering a Great Privacy Experience in Your Photos App](https://developer.apple.com/documentation/photokit/delivering_a_great_privacy_experience_in_your_photos_app)
1002#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
1003pub struct Photos {
1004 /// A message that tells the user why the app is requesting add-only access to the
1005 /// user’s photo library.
1006 ///
1007 /// ### Important
1008 /// This key is required if your app uses APIs that have write access to the user’s
1009 /// photo library.
1010 ///
1011 /// ## Availability
1012 /// * iOS 11.0+
1013 ///
1014 /// ## Framework
1015 /// * Photos
1016 #[serde(
1017 rename = "NSPhotoLibraryAddUsageDescription",
1018 serialize_with = "crate::serialize_option",
1019 skip_serializing_if = "Option::is_none"
1020 )]
1021 pub photo_library_add_usage_description: Option<String>,
1022 /// A message that tells the user why the app is requesting access to the user’s photo
1023 /// library.
1024 ///
1025 /// If your app only adds assets to the photo library and does not read assets, use
1026 /// the NSPhotoLibraryAddUsageDescription key instead.
1027 ///
1028 /// ### Important
1029 /// This key is required if your app uses APIs that have read or write access to the
1030 /// user’s photo library.
1031 ///
1032 /// ## Availability
1033 /// * iOS 6.0+
1034 /// * macOS 10.14+
1035 ///
1036 /// ## Framework
1037 /// * Photos
1038 #[serde(
1039 rename = "NSPhotoLibraryUsageDescription",
1040 serialize_with = "crate::serialize_option",
1041 skip_serializing_if = "Option::is_none"
1042 )]
1043 pub photo_library_usage_description: Option<String>,
1044}
1045
1046/// Scripting
1047#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
1048pub struct Scripting {
1049 /// A Boolean value indicating whether AppleScript is enabled.
1050 ///
1051 /// ## Availability
1052 /// * macOS 10.0+
1053 ///
1054 /// ## Framework
1055 /// * Foundation
1056 #[serde(
1057 rename = "NSAppleScriptEnabled",
1058 serialize_with = "crate::serialize_option",
1059 skip_serializing_if = "Option::is_none"
1060 )]
1061 pub apple_script_enabled: Option<bool>,
1062}
1063
1064/// Security
1065#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
1066pub struct Security {
1067 /// A message that informs the user why an app is requesting permission to use data
1068 /// for tracking the user or the device.
1069 ///
1070 /// If your app calls the App Tracking Transparency API, you must provide custom text,
1071 /// known as a usage-description string, which displays as a system-permission alert
1072 /// request. The usage-description string tells the user why the app is requesting
1073 /// permission to use data for tracking the user or the device. The user has the
1074 /// option to grant or deny the authorization request. If you don’t include a
1075 /// usage-description string, your app may crash when a user first launches it.
1076 ///
1077 /// Make sure your app requests permission to track sometime before tracking occurs.
1078 /// This could be at first launch or when using certain features in your app.
1079 /// For example, when signing on with a third-party SSO.
1080 ///
1081 /// Set the NSUserTrackingUsageDescription key in the Information Property List
1082 /// (Info.plist):
1083 ///
1084 /// 1. Select your project’s Info.plist file in Xcode Project navigator.
1085 ///
1086 /// 2. Modify the file using the Xcode Property List Editor: Privacy - Tracking Usage
1087 /// Description.
1088 ///
1089 /// * Use sentence-style capitalization and appropriate ending punctuation.
1090 /// Keep the text short and specific.
1091 /// You don’t need to include your app name because the system already identifies your
1092 /// app.
1093 ///
1094 /// * If the title is a sentence fragment, don’t add ending punctuation.
1095 ///
1096 /// See Apple’s Human Interface Guidelines for example usage descriptions.
1097 ///
1098 /// ## Availability
1099 /// * iOS 14.0+
1100 /// * tvOS 14.0+
1101 ///
1102 /// ## Framework
1103 /// * Security
1104 #[serde(
1105 rename = "NSUserTrackingUsageDescription",
1106 serialize_with = "crate::serialize_option",
1107 skip_serializing_if = "Option::is_none"
1108 )]
1109 pub user_tracking_usage_description: Option<String>,
1110 /// A message that tells the user why the app is requesting the ability to send Apple
1111 /// events.
1112 ///
1113 /// An app using Apple events to control another app might be able to gain access to
1114 /// sensitive user data. For example, the Mail app stores a lot of personal
1115 /// information in its local database that other apps can’t access directly.
1116 /// But because Mail can be automated with Apple events, other apps can use Mail to
1117 /// gain access to the data indirectly.
1118 ///
1119 /// ### Important
1120 /// This key is required if your app uses APIs that send Apple events.
1121 ///
1122 /// ## Availability
1123 /// * macOS 10.14+
1124 ///
1125 /// ## Framework
1126 /// * Security
1127 #[serde(
1128 rename = "NSAppleEventsUsageDescription",
1129 serialize_with = "crate::serialize_option",
1130 skip_serializing_if = "Option::is_none"
1131 )]
1132 pub apple_events_usage_description: Option<String>,
1133 /// A message in macOS that tells the user why the app is requesting to manipulate the
1134 /// system configuration.
1135 ///
1136 /// Use this key if your app uses certain APIs that manipulate system configuration,
1137 /// like ODRecordSetValue(_:_:_:_:).
1138 ///
1139 /// ### Important
1140 /// This key is required if your app uses APIs that manipulate the system
1141 /// configuration.
1142 ///
1143 /// ## Availability
1144 /// * macOS 10.14+
1145 ///
1146 /// ## Framework
1147 /// * Security
1148 #[serde(
1149 rename = "NSSystemAdministrationUsageDescription",
1150 serialize_with = "crate::serialize_option",
1151 skip_serializing_if = "Option::is_none"
1152 )]
1153 pub system_administration_usage_description: Option<String>,
1154 /// A Boolean value indicating whether the app uses encryption.
1155 ///
1156 /// Set the value for this key to NO in your app’s Information Property List file to
1157 /// indicate that your app—including any third-party libraries you link against—either
1158 /// uses no encryption, or only uses encryption that’s exempt from export compliance
1159 /// requirements, as described in Determine your export compliance requirements.
1160 /// Set the value to YES to indicate that your app uses non-exempt encryption.
1161 ///
1162 /// If you set the value to YES, you typically also provide a value for the
1163 /// ITSEncryptionExportComplianceCode key. You set that key’s value using a code
1164 /// Apple provides after successfully reviewing your export compliance documentation.
1165 ///
1166 /// If you don’t have the ITSAppUsesNonExemptEncryption key in your app’s Info.plist
1167 /// file, App Store Connect walks you through an export compliance questionnaire every
1168 /// time you upload a new version of your app. Including the key streamlines the
1169 /// app submission process.
1170 ///
1171 /// For additional information, see Complying with Encryption Export Regulations.
1172 ///
1173 /// ## Availability
1174 /// * macOS 10.0+
1175 ///
1176 /// ## Framework
1177 /// * Security
1178 #[serde(
1179 rename = "ITSAppUsesNonExemptEncryption",
1180 serialize_with = "crate::serialize_option",
1181 skip_serializing_if = "Option::is_none"
1182 )]
1183 pub app_uses_non_exempt_encryption: Option<bool>,
1184 /// The export compliance code provided by App Store Connect for apps that require it.
1185 ///
1186 /// Include this key in your app’s Information Property List file if you set the
1187 /// ITSAppUsesNonExemptEncryption key’s value to YES. Set the value for this key
1188 /// to the code that Apple sends you after successfully reviewing export compliance
1189 /// documentation that you provide through App Store Connect.
1190 ///
1191 /// For additional information, see Complying with Encryption Export Regulations.
1192 ///
1193 /// ## Availability
1194 /// * macOS 10.0+
1195 ///
1196 /// ## Framework
1197 /// * Security
1198 #[serde(
1199 rename = "ITSEncryptionExportComplianceCode",
1200 serialize_with = "crate::serialize_option",
1201 skip_serializing_if = "Option::is_none"
1202 )]
1203 pub encryption_export_compliance_code: Option<String>,
1204}
1205
1206/// Sensors
1207#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
1208pub struct Sensors {
1209 /// ## Availability
1210 /// * iOS 14.0+
1211 ///
1212 /// ## Framework
1213 /// * SensorKit
1214 #[serde(
1215 rename = "NSSensorKitUsageDescription",
1216 serialize_with = "crate::serialize_option",
1217 skip_serializing_if = "Option::is_none"
1218 )]
1219 pub sensor_kit_usage_description: Option<String>,
1220 /// ## Availability
1221 /// * iOS 14.0+
1222 ///
1223 /// ## Framework
1224 /// * SensorKit
1225 #[serde(
1226 rename = "NSSensorKitUsageDetail",
1227 serialize_with = "crate::serialize_option",
1228 skip_serializing_if = "Option::is_none"
1229 )]
1230 pub sensor_kit_usage_detail: Option<DefaultDictionary>,
1231 /// ## Availability
1232 /// * iOS 14.0+
1233 ///
1234 /// ## Framework
1235 /// * SensorKit
1236 #[serde(
1237 rename = "NSSensorKitPrivacyPolicyURL",
1238 serialize_with = "crate::serialize_option",
1239 skip_serializing_if = "Option::is_none"
1240 )]
1241 pub sensor_kit_privacy_policy_url: Option<String>,
1242}
1243
1244/// Siri
1245///
1246/// [Requesting Authorization to Use SiriKit](https://developer.apple.com/documentation/sirikit/requesting_authorization_to_use_sirikit)
1247#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
1248pub struct Siri {
1249 /// A message that tells the user why the app is requesting to send user data to Siri.
1250 ///
1251 /// ### important
1252 /// This key is required if your app uses APIs that send user data to Siri
1253 ///
1254 /// ## Availability
1255 /// * iOS 10.0+
1256 ///
1257 /// ## Framework
1258 /// * Intents
1259 #[serde(
1260 rename = "NSSiriUsageDescription",
1261 serialize_with = "crate::serialize_option",
1262 skip_serializing_if = "Option::is_none"
1263 )]
1264 pub siri_usage_description: Option<String>,
1265}
1266
1267/// Speech
1268///
1269/// [Asking Permission to Use Speech Recognition](https://developer.apple.com/documentation/speech/asking_permission_to_use_speech_recognition)
1270#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
1271pub struct Speech {
1272 /// A message that tells the user why the app is requesting to send user data to
1273 /// Apple’s speech recognition servers.
1274 ///
1275 /// ### Important
1276 /// This key is required if your app uses APIs that send user data to Apple’s speech
1277 /// recognition servers.
1278 ///
1279 /// ## Availability
1280 /// * iOS 10.0+
1281 /// * macOS 10.15+
1282 ///
1283 /// ## Framework
1284 /// * Speech
1285 #[serde(
1286 rename = "NSSpeechRecognitionUsageDescription",
1287 serialize_with = "crate::serialize_option",
1288 skip_serializing_if = "Option::is_none"
1289 )]
1290 pub speech_recognition_usage_description: Option<String>,
1291}
1292
1293/// TV Resource
1294#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
1295pub struct TvResource {
1296 /// A message that tells the user why the app is requesting access to the user’s TV
1297 /// provider account.
1298 ///
1299 /// ### Important
1300 /// This key is required if your app uses APIs that access the user’s TV provider
1301 /// account.
1302 ///
1303 /// ## Availability
1304 /// * tvOS 12.0+
1305 ///
1306 /// ## Framework
1307 /// * TVUIKit
1308 #[serde(
1309 rename = "NSVideoSubscriberAccountUsageDescription",
1310 serialize_with = "crate::serialize_option",
1311 skip_serializing_if = "Option::is_none"
1312 )]
1313 pub video_subscriber_account_usage_description: Option<String>,
1314}
1315
1316/// Wi-Fi
1317#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
1318pub struct WiFi {
1319 /// A Boolean value indicating whether the app requires a Wi-Fi connection.
1320 ///
1321 /// ## Availability
1322 /// * iOS 2.0+
1323 ///
1324 /// ## Framework
1325 /// * UIKit
1326 #[serde(
1327 rename = "UIRequiresPersistentWiFi",
1328 serialize_with = "crate::serialize_option",
1329 skip_serializing_if = "Option::is_none"
1330 )]
1331 pub requires_persistent_wifi: Option<bool>,
1332}
1333
1334/// Health Kit Capabilities
1335#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
1336pub enum HealthKitCapabilities {
1337 /// The app can request access to FHIR-backed clinical records.
1338 #[serde(rename = "health-records")]
1339 HealthRecords,
1340}