apple_bundle/info_plist/app_services.rs
1//! # App Services
2//!
3//! Configure services provided by the app, like support for giving directions or using
4//! game controllers.
5//!
6//! Add keys to your app’s Information Property List file that tell the system about
7//! services that your app provides.
8//!
9//! ## Framework
10//! * Bundle Resources
11
12use super::DefaultDictionary;
13use serde::{Deserialize, Serialize};
14
15/// Car Play
16#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
17pub struct CarPlay {
18 /// ## Availability
19 /// * iOS 13.1+
20 ///
21 /// ## Framework
22 /// * CarPlay
23 #[serde(
24 rename = "CPSupportsDashboardNavigationScene",
25 serialize_with = "crate::serialize_option",
26 skip_serializing_if = "Option::is_none"
27 )]
28 pub supports_dashboard_navigation_scene: Option<bool>,
29 /// ## Availability
30 /// * iOS 13.1+
31 ///
32 /// ## Framework
33 /// * CarPlay
34 #[serde(
35 rename = "CPTemplateApplicationDashboardSceneSessionRoleApplication",
36 serialize_with = "crate::serialize_option",
37 skip_serializing_if = "Option::is_none"
38 )]
39 pub template_application_dashboard: Option<Vec<TemplateApplicationDashboard>>,
40 /// ## Availability
41 /// * iOS 13.0+
42 ///
43 /// ## Framework
44 /// * CarPlay
45 #[serde(
46 rename = "CPTemplateApplicationSceneSessionRoleApplication",
47 serialize_with = "crate::serialize_option",
48 skip_serializing_if = "Option::is_none"
49 )]
50 pub template_application_scene_session_role: Option<Vec<TemplateApplicationSceneSessionRole>>,
51}
52
53/// Template Application Dashboard
54#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
55pub struct TemplateApplicationDashboard {
56 /// ## Availability
57 /// * iOS 13.1+
58 ///
59 /// ## Framework
60 /// * CarPlay
61 #[serde(rename = "UISceneClassName")]
62 pub scene_class_name: ClassName,
63 /// ## Availability
64 /// * iOS 13.1+
65 ///
66 /// ## Framework
67 /// * CarPlay
68 #[serde(rename = "UISceneConfigurationName")]
69 pub scene_configuration_name: String,
70 /// ## Availability
71 /// * iOS 13.1+
72 ///
73 /// ## Framework
74 /// * CarPlay
75 #[serde(rename = "UISceneDelegateClassName")]
76 pub scene_delegate_class_name: String,
77}
78
79/// Class Name
80#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
81pub enum ClassName {
82 #[serde(rename = "CPTemplateApplicationDashboardScene")]
83 #[default]
84 TemplateApplicationDashboardScene,
85}
86
87/// Template Application Scene Session Role
88#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
89pub struct TemplateApplicationSceneSessionRole {
90 /// ## Availability
91 /// * iOS 13.0+
92 ///
93 /// ## Framework
94 /// * CarPlay
95 #[serde(rename = "UISceneClassName")]
96 pub scene_class_name: TemplateApplication,
97 /// ## Availability
98 /// * iOS 13.1+
99 ///
100 /// ## Framework
101 /// * CarPlay
102 #[serde(rename = "UISceneConfigurationName")]
103 pub scene_configuration_name: String,
104 /// ## Availability
105 /// * iOS 13.1+
106 ///
107 /// ## Framework
108 /// * CarPlay
109 #[serde(rename = "UISceneDelegateClassName")]
110 pub scene_delegate_class_name: String,
111}
112
113/// Template Application
114#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
115pub enum TemplateApplication {
116 #[serde(rename = "CPTemplateApplicationScene")]
117 #[default]
118 Scene,
119}
120
121/// Exposure Notification
122#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
123pub struct ExposureNotification {
124 /// A number that specifies the version of the API to use.
125 ///
126 /// ### Important
127 /// This type is available in iOS 12.5, and in iOS 13.7 and later.
128 ///
129 /// iOS 13.7 introduces a new method to calculate the user’s Exposure Risk Value,
130 /// described in ENExposureConfiguration. Set this value to 2 to use this new
131 /// version and its calculation method, or set this value to 1 to use the earlier API
132 /// and its calculation method. If you don’t explicitly set this value, the
133 /// default is 1.
134 ///
135 /// ## Availability
136 /// * iOS 13.7+
137 ///
138 /// ## Framework
139 /// * Exposure Notification
140 #[serde(
141 rename = "ENAPIVersion",
142 skip_serializing_if = "Option::is_none",
143 serialize_with = "crate::serialize_enum_option"
144 )]
145 pub version: Option<Version>,
146 /// A string that specifies the region that the app supports.
147 ///
148 /// ### Important
149 /// This type is available in iOS 12.5, and in iOS 13.7 and later.
150 ///
151 /// All ExposureNotification apps must specify the region for which they work by
152 /// adding this key to the app’s Info.plist file. The value is a string that
153 /// represents the app’s region. This value can be an ISO 3166-1 country code
154 /// (e.g. “CA” for Canada), or the ISO 3166-1/3166-2 country code plus subdivision
155 /// code (“US-CA” for California).
156 ///
157 /// ## Availability
158 /// * iOS 13.7+
159 ///
160 /// ## Framework
161 /// * Exposure Notification
162 #[serde(
163 rename = "ENDeveloperRegion",
164 serialize_with = "crate::serialize_option",
165 skip_serializing_if = "Option::is_none"
166 )]
167 pub developer_region: Option<String>,
168}
169
170/// Version
171#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
172pub enum Version {
173 /// Use version 1 of the API.
174 #[serde(rename = "1")]
175 One,
176 /// Use version 2 of the API.
177 #[serde(rename = "2")]
178 Two,
179}
180
181/// Pointer Interactions
182#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
183pub struct PointerInteractions {
184 /// A Boolean value indicating that the app generally supports indirect input
185 /// mechanisms.
186 ///
187 /// If this key is not present or returns NO:
188 /// * When the user clicks an indirect pointing device, UIKit generates a UITouch of
189 /// type UITouch.TouchType.direct.
190 /// * When pinching or rotating using an indirect touch surface, UIKit creates touches
191 /// a fixed distance apart that simulate the gesture on the indirect touch surface.
192 /// * Because these are normal UITouch events, they may incidentally activate other
193 /// gesture recognizers
194 ///
195 /// If the key is present and returns YES:
196 /// * When the user clicks an indirect pointing device, UIKit generates a UITouch of
197 /// type UITouch.TouchType.indirectPointer.
198 /// * When pinching or rotating using an indirect touch surface, UIKit drives
199 /// UIPinchGestureRecognizer and UIRotationGestureRecognizer with an event of type
200 /// UIEvent.EventType.transform.
201 /// * Currently, only certain prepackaged gestures in UIKit, like
202 /// UIPinchGestureRecognizer and UIRotationGestureRecognizer, are capable of
203 /// handling this event.
204 /// Other gestures may be added to this list in future releases.
205 /// * Gestures that may have worked previously with the simulated touches no longer
206 /// work.
207 /// * Be careful with certain UIGestureRecognizer APIs when gestures are driven by
208 /// events of type UIEvent.EventType.scroll or
209 /// UIEvent.EventType.transform.numberOfTouches returns 0, andlocation(ofTouch:in:)
210 /// raises an exception because there are no touches driving these gestures with
211 /// those events.
212 ///
213 /// For the case when exceptions might be raised, use either shouldReceive(_:) or the
214 /// delegate call of gestureRecognizer(_:shouldReceive:) to determine that gesture
215 /// recognizers are acting on a non-touch-based event.
216 ///
217 /// ### Important
218 /// UIApplicationSupportsIndirectInputEvents is a compatibility affordance to ease the
219 /// adoption of indirect input for a UIKit application. In a future release, this
220 /// new behavior will become the default and this key will no longer be consulted.
221 ///
222 /// ## Availability
223 /// * iOS 13.4+
224 ///
225 /// ## Framework
226 /// * UIKit
227 #[serde(
228 rename = "UIApplicationSupportsIndirectInputEvents",
229 serialize_with = "crate::serialize_option",
230 skip_serializing_if = "Option::is_none"
231 )]
232 pub application_supports_indirect_input_events: Option<bool>,
233}
234
235/// Games
236#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
237pub struct Games {
238 /// A Boolean value indicating whether GameKit can add badges to a turn-based game
239 /// icon.
240 ///
241 /// ## Availability
242 /// * iOS 7.0+
243 ///
244 /// ## Framework
245 /// * GameKit
246 #[serde(
247 rename = "GKGameCenterBadgingDisabled",
248 serialize_with = "crate::serialize_option",
249 skip_serializing_if = "Option::is_none"
250 )]
251 pub game_center_badging_disabled: Option<bool>,
252 /// A Boolean value that indicates whether GameKit can display challenge banners in a
253 /// game.
254 ///
255 /// ## Availability
256 /// * iOS 7.0+
257 ///
258 /// ## Framework
259 /// * GameKit
260 #[serde(
261 rename = "GKShowChallengeBanners",
262 serialize_with = "crate::serialize_option",
263 skip_serializing_if = "Option::is_none"
264 )]
265 pub show_challenge_banners: Option<bool>,
266 /// The types of game controllers allowed or required by the app.
267 ///
268 /// ## Availability
269 /// * iOS 7.0+
270 /// * macOS 10.9+
271 /// * tvOS 9.0+
272 ///
273 /// ## Framework
274 /// * Game Controller
275 #[serde(
276 rename = "GCSupportedGameControllers",
277 skip_serializing_if = "Option::is_none",
278 serialize_with = "crate::serialize_vec_enum_option"
279 )]
280 pub supported_game_controllers: Option<Vec<ProfileName>>,
281 /// A Boolean value indicating whether the app supports a game controller.
282 ///
283 /// To add this key to the Information Property List, enable the Game Controllers
284 /// capability in Xcode.
285 ///
286 /// ## Availability
287 /// * iOS 7.0+
288 /// * macOS 10.9+
289 /// * tvOS 9.0+
290 ///
291 /// ## Framework
292 /// * Game Controller
293 #[serde(
294 rename = "GCSupportsControllerUserInteraction",
295 serialize_with = "crate::serialize_option",
296 skip_serializing_if = "Option::is_none"
297 )]
298 pub supports_controller_user_interaction: Option<bool>,
299 /// A Boolean value indicating whether the physical Apple TV Remote and the Apple TV
300 /// Remote app operate as separate game controllers.
301 ///
302 /// ## Availability
303 /// * tvOS 9.0+
304 ///
305 /// ## Framework
306 /// * Game Controller
307 #[serde(
308 rename = "GCSupportsMultipleMicroGamepads",
309 serialize_with = "crate::serialize_option",
310 skip_serializing_if = "Option::is_none"
311 )]
312 pub supports_multiple_micro_gamepads: Option<bool>,
313}
314
315#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
316pub enum ProfileName {
317 #[serde(rename = "ExtendedGamepad")]
318 ExtendedGamepad,
319 #[serde(rename = "MicroGamepad")]
320 MicroGamepad,
321}
322
323/// Intents
324#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
325pub struct Intents {
326 /// The names of the intent classes your app handles directly.
327 ///
328 /// Provide the class name of each INIntent subclass your app can handle.
329 /// To specify this information in Xcode, add the class names in the Supported Intents
330 /// section of your app target in the Project Editor.
331 ///
332 /// For more information on handling intents in your app, see
333 /// application(_:handlerFor:).
334 ///
335 /// ### Tip
336 /// You can start handling an intent in your app even if you want to support the
337 /// intent in iOS 13. List the intent in the Supported Intents sections for both
338 /// the app target and the extension target. For an app running on iOS 13, the
339 /// system routes the intent with handler(for:), and for later iOS versions, it routes
340 /// the intent with application(_:handlerFor:).
341 ///
342 /// ## Availability
343 /// * iOS 14.0+
344 /// * tvOS 14.0+
345 ///
346 /// ## Framework
347 /// * Intents
348 #[serde(
349 rename = "INIntentsSupported",
350 serialize_with = "crate::serialize_option",
351 skip_serializing_if = "Option::is_none"
352 )]
353 pub intents_supported: Option<Vec<String>>,
354 /// The names of the intent classes your app can’t handle when the user locks the
355 /// device.
356 ///
357 /// To specify this information in Xcode, add the intent class name to your app
358 /// target’s Supported Intents in the Project Editor. Then set the Authentication
359 /// level to Restricted While Locked.
360 ///
361 /// ## Availability
362 /// * iOS 14.0+
363 /// * tvOS 14.0+
364 ///
365 /// ## Framework
366 /// * Intents
367 #[serde(
368 rename = "INIntentsRestrictedWhileLocked",
369 serialize_with = "crate::serialize_option",
370 skip_serializing_if = "Option::is_none"
371 )]
372 pub intents_restricted_while_locked: Option<Vec<String>>,
373 /// The names of the intent classes your app can’t handle when the user locks the
374 /// device or the system blocks access to protected data.
375 ///
376 /// To specify this information in Xcode, add the intent class name to your app
377 /// target’s Supported Intents in the Project Editor. Then set the Authentication
378 /// level to Restricted While Locked or Protected Data Unavailable.
379 ///
380 /// ## Availability
381 /// * iOS 14.0+
382 /// * tvOS 14.0+
383 ///
384 /// ## Framework
385 /// * Intents
386 #[serde(
387 rename = "INIntentsRestrictedWhileProtectedDataUnavailable",
388 serialize_with = "crate::serialize_option",
389 skip_serializing_if = "Option::is_none"
390 )]
391 pub intents_restricted_while_protected_data_unavailable: Option<Vec<String>>,
392 /// Types of media supported by your app’s media-playing intents.
393 ///
394 /// Specify one or more media categories to allow Siri to invoke your app’s intent
395 /// handling when a user asks to play media. Use INMediaCategoryGeneral for media
396 /// that doesn’t fit into any of the other categories, like white noise or sound
397 /// effects.
398 ///
399 /// To specify this information in Xcode, add INPlayMediaIntent to your app’s list of
400 /// Supported Intents. Then select the relevant media types in the list that
401 /// appears.
402 ///
403 /// ## Availability
404 /// * iOS 14.0+
405 /// * tvOS 14.0+
406 ///
407 /// ## Framework
408 /// * Intents
409 #[serde(
410 rename = "INSupportedMediaCategories",
411 skip_serializing_if = "Option::is_none",
412 serialize_with = "crate::serialize_vec_enum_option"
413 )]
414 pub supported_media_categories: Option<Vec<SupportedMediaCategories>>,
415}
416
417/// Supported Media Categories
418#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
419pub enum SupportedMediaCategories {
420 /// Audiobooks
421 #[serde(rename = "INMediaCategoryAudiobooks")]
422 InMediaCategoryAudiobooks,
423 /// Music
424 #[serde(rename = "INMediaCategoryMusic")]
425 InMediaCategoryMusic,
426 /// General
427 #[serde(rename = "INMediaCategoryGeneral")]
428 InMediaCategoryGeneral,
429 /// Podcasts
430 #[serde(rename = "INMediaCategoryPodcasts")]
431 InMediaCategoryPodcasts,
432 /// Radio
433 #[serde(rename = "INMediaCategoryRadio")]
434 InMediaCategoryRadio,
435}
436
437/// Maps
438#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
439pub struct Maps {
440 /// The modes of transportation for which the app is capable of giving directions.
441 ///
442 /// ## Availability
443 /// * iOS 6.0+
444 ///
445 /// ## Framework
446 /// * Intents
447 #[serde(
448 rename = "MKDirectionsApplicationSupportedModes",
449 skip_serializing_if = "Option::is_none",
450 serialize_with = "crate::serialize_vec_enum_option"
451 )]
452 pub directions_application_supported_modes: Option<Vec<DirectionsApplicationSupportedModes>>,
453}
454
455/// Directions Application Supported Modes
456#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
457pub enum DirectionsApplicationSupportedModes {
458 #[serde(rename = "MKDirectionsModePlane")]
459 MkDirectionsModePlane,
460 #[serde(rename = "MKDirectionsModeBike")]
461 MkDirectionsModeBike,
462 #[serde(rename = "MKDirectionsModeBus")]
463 MkDirectionsModeBus,
464 #[serde(rename = "MKDirectionsModeCar")]
465 MkDirectionsModeCar,
466 #[serde(rename = "MKDirectionsModeFerry")]
467 MkDirectionsModeFerry,
468 #[serde(rename = "MKDirectionsModePedestrian")]
469 MkDirectionsModePedestrian,
470 #[serde(rename = "MKDirectionsModeRideShare")]
471 MkDirectionsModeRideShare,
472 #[serde(rename = "MKDirectionsModeStreetCar")]
473 MkDirectionsModeStreetCar,
474 #[serde(rename = "MKDirectionsModeSubway")]
475 MkDirectionsModeSubway,
476 #[serde(rename = "MKDirectionsModeTaxi")]
477 MkDirectionsModeTaxi,
478 #[serde(rename = "MKDirectionsModeTrain")]
479 MkDirectionsModeTrain,
480 #[serde(rename = "MKDirectionsModeOther")]
481 MkDirectionsModeOther,
482}
483
484/// NFC
485#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
486pub struct NfcAppServices {
487 /// A list of FeliCa system codes that the app supports.
488 ///
489 /// Each system code must be a discrete value. The wild card value (0xFF) isn't
490 /// allowed.
491 ///
492 /// ## Availability
493 /// * iOS 13.0+
494 ///
495 /// ## Framework
496 /// * Core NFC
497 #[serde(
498 rename = "com.apple.developer.nfc.readersession.felica.systemcodes",
499 serialize_with = "crate::serialize_option",
500 skip_serializing_if = "Option::is_none"
501 )]
502 pub nfc_readersession_felica_systemcodes: Option<Vec<String>>,
503 /// A list of application identifiers that the app supports.
504 ///
505 /// ## Availability
506 /// * iOS 13.0+
507 ///
508 /// ## Framework
509 /// * Core NFC
510 #[serde(
511 rename = "com.apple.developer.nfc.readersession.iso7816.select-identifiers",
512 serialize_with = "crate::serialize_option",
513 skip_serializing_if = "Option::is_none"
514 )]
515 pub nfc_readersession_iso7816_select_identifiers: Option<Vec<String>>,
516}
517
518/// Authentication
519#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
520pub struct Authentication {
521 /// A Boolean value that indicates the system shouldn’t show security recommendation
522 /// prompts when users sign in using the app.
523 ///
524 /// Each system code must be a discrete value. The wild card value (0xFF) isn't
525 /// allowed.
526 ///
527 /// ## Availability
528 /// * iOS 14.0+
529 ///
530 /// ## Framework
531 /// * Authentication Services
532 #[serde(
533 rename = "ASAccountAuthenticationModificationOptOutOfSecurityPromptsOnSignIn",
534 serialize_with = "crate::serialize_option",
535 skip_serializing_if = "Option::is_none"
536 )]
537 pub account_authentication_modification_opt_out_of_security_prompts_on_sign_in: Option<bool>,
538 /// A collection of keys that a browser app uses to declare its ability to handle
539 /// authentication requests from other apps.
540 ///
541 /// Add a dictionary for this key to your app’s Information Property List if your app
542 /// is a web browser and it supports web authentication. In the dictionary, include
543 /// the keys IsSupported and EphemeralBrowserSessionIsSupported to indicate your
544 /// browser app’s capabilities. For more information, see Supporting Single
545 /// Sign-On in a Web Browser App.
546 ///
547 /// ## Availability
548 /// * macOS 10.15+
549 ///
550 /// ## Framework
551 /// * Authentication Services
552 #[serde(
553 rename = "ASWebAuthenticationSessionWebBrowserSupportCapabilities",
554 serialize_with = "crate::serialize_option",
555 skip_serializing_if = "Option::is_none"
556 )]
557 pub web_authentication_session_web_browser_support_capabilities:
558 Option<WebAuthenticationSession>,
559}
560
561/// Web Authentication Session
562#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
563pub struct WebAuthenticationSession {
564 /// A Boolean that indicates whether the app acts as a browser that supports
565 /// authentication sessions.
566 ///
567 /// Set the corresponding value to YES to indicate that your browser app can handle
568 /// authentication requests that other apps generate with ASWebAuthenticationSession.
569 /// For details, see Supporting Single Sign-On in a Web Browser App.
570 ///
571 /// ## Availability
572 /// * macOS 10.15+
573 ///
574 /// ## Framework
575 /// * Authentication Services
576 #[serde(
577 rename = "IsSupported",
578 serialize_with = "crate::serialize_option",
579 skip_serializing_if = "Option::is_none"
580 )]
581 pub is_supported: Option<bool>,
582 /// A Boolean that indicates whether the app supports ephemeral browsing when
583 /// conducting authentication sessions.
584 ///
585 /// Set the corresponding value to YES to indicate that your browser app, when
586 /// handling authentication requests, offers ephemeral browsing.
587 ///
588 /// If you don’t provide the key, or if you set its value to NO and an app tries to
589 /// conduct an ephemeral authentication session, the system warns the user.
590 /// If do you declare support by setting the value to YES, be sure to respect the
591 /// shouldUseEphemeralSession property on any incoming authentication requests, as
592 /// described in Supporting Single Sign-On in a Web Browser App.
593 ///
594 /// ### Note
595 /// It’s strongly recommended that your web browser support ephemeral sessions.
596 /// Apps can specifically request this kind of session, and it’s important to honor
597 /// the request.
598 ///
599 /// ## Availability
600 /// * macOS 10.15+
601 ///
602 /// ## Framework
603 /// * Authentication Services
604 #[serde(
605 rename = "EphemeralBrowserSessionIsSupported",
606 serialize_with = "crate::serialize_option",
607 skip_serializing_if = "Option::is_none"
608 )]
609 pub ephemeral_browser_session_is_supported: Option<bool>,
610}
611
612/// External Accessories
613#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
614pub struct ExternalAccessories {
615 /// The protocols that the app uses to communicate with external accessory hardware.
616 ///
617 /// Add this key to your app’s Info.plist file, and set the value to the names of the
618 /// hardware protocols your app supports. You format protocol names as reverse-DNS
619 /// strings. For example, the string "com.apple.myProtocol" might represent a
620 /// custom protocol that Apple defines. Manufacturers can define custom protocols
621 /// for their accessories or work with other manufacturers and organizations to define
622 /// standard protocols for different accessory types.
623 ///
624 /// ## Availability
625 /// * iOS 3.0+
626 ///
627 /// ## Framework
628 /// * UIKit
629 #[serde(
630 rename = "UISupportedExternalAccessoryProtocols",
631 serialize_with = "crate::serialize_option",
632 skip_serializing_if = "Option::is_none"
633 )]
634 pub supported_external_accessory_protocols: Option<Vec<String>>,
635}
636
637/// Service Management
638#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
639pub struct ServiceManagement {
640 /// The Service Management clients authorized to add and remove tools.
641 ///
642 /// ## Availability
643 /// * iOS 12.1+
644 /// * macOS 10.6+
645 /// * tvOS 12.1+
646 /// * watchOS 5.1+
647 ///
648 /// ## Framework
649 /// * Service Management
650 #[serde(
651 rename = "SMAuthorizedClients",
652 serialize_with = "crate::serialize_option",
653 skip_serializing_if = "Option::is_none"
654 )]
655 pub authorized_clients: Option<Vec<String>>,
656 /// The Service Management tools owned by the app.
657 ///
658 /// ## Availability
659 /// * iOS 12.1+
660 /// * macOS 10.6+
661 /// * tvOS 12.1+
662 /// * watchOS 5.1+
663 ///
664 /// ## Framework
665 /// * Service Management
666 #[serde(
667 rename = "SMPrivilegedExecutables",
668 serialize_with = "crate::serialize_option",
669 skip_serializing_if = "Option::is_none"
670 )]
671 pub privileged_executables: Option<DefaultDictionary>,
672}
673
674/// Interprocess Communication
675#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
676pub struct InterprocessCommunication {
677 /// ## Availability
678 /// * iOS 6.0+
679 /// * macOS 10.8+
680 /// * tvOS 9.0+
681 /// * watchOS 2.0+
682 ///
683 /// ## Framework
684 /// * Foundation
685 #[serde(
686 rename = "XPCService",
687 serialize_with = "crate::serialize_option",
688 skip_serializing_if = "Option::is_none"
689 )]
690 pub service: Option<Service>,
691}
692
693/// Service
694#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
695pub struct Service {
696 #[serde(
697 rename = "EnvironmentVariables",
698 serialize_with = "crate::serialize_option",
699 skip_serializing_if = "Option::is_none"
700 )]
701 pub environment_variables: Option<DefaultDictionary>,
702 #[serde(
703 rename = "JoinExistingSession",
704 serialize_with = "crate::serialize_option",
705 skip_serializing_if = "Option::is_none"
706 )]
707 pub join_existing_session: Option<bool>,
708 #[serde(
709 rename = "RunLoopType",
710 serialize_with = "crate::serialize_enum_option",
711 skip_serializing_if = "Option::is_none"
712 )]
713 pub run_loop_type: Option<RunLoopType>,
714 #[serde(
715 rename = "ServiceType",
716 serialize_with = "crate::serialize_enum_option",
717 skip_serializing_if = "Option::is_none"
718 )]
719 pub service_type: Option<ServiceType>,
720}
721
722/// Run Loop Type
723#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
724pub enum RunLoopType {
725 #[serde(rename = "dispatch_main")]
726 DispatchMain,
727 #[serde(rename = "NSRunLoop")]
728 RunLoop,
729}
730
731/// Service Type
732#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
733pub enum ServiceType {
734 #[serde(rename = "Application")]
735 Application,
736}
737
738/// Store
739#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
740pub struct Store {
741 /// An array of dictionaries containing a list of ad network identifiers.
742 ///
743 /// Apps that display ads and initiate install validation information shared with ad
744 /// networks, must include the ad network identifiers in this key.
745 ///
746 /// Each dictionary contains one SKAdNetworkIdentifier.
747 /// Provide one dictionary for each ad network with which you work.
748 ///
749 /// ### Important
750 /// Ad network identifiers are case-sensitive, and are in lowercase.
751 ///
752 /// ## Availability
753 /// * iOS 11.3+
754 ///
755 /// ## Framework
756 /// * StoreKit
757 #[serde(
758 rename = "SKAdNetworkItems",
759 serialize_with = "crate::serialize_option",
760 skip_serializing_if = "Option::is_none"
761 )]
762 pub ad_network_items: Option<Vec<AdNetworkItems>>,
763}
764
765/// Ad Network Items
766#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
767pub struct AdNetworkItems {
768 /// A string that contains an ad network identifier.
769 ///
770 /// Contact the ad network to learn their ad network identifier.
771 ///
772 /// Include this key, and the value of the ad network identifier as a string, as a
773 /// dictionary in the SKAdNetworkItems key.
774 ///
775 /// ## Availability
776 /// * iOS 11.3+
777 ///
778 /// ## Framework
779 /// * StoreKit
780 #[serde(
781 rename = "SKAdNetworkIdentifier",
782 serialize_with = "crate::serialize_option",
783 skip_serializing_if = "Option::is_none"
784 )]
785 pub ad_network_identifier: Option<String>,
786}