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