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