1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
//! # Data and Storage
//!
//! Regulate documents, URLs, and other kinds of data movement and storage.
//!
//! ### Overview
//! The system needs to know what kinds of data your app stores, provides, or consumes.
//! Add keys to your app’s Information Property List that declare your app’s data
//! management capabilities.
use serde::{Deserialize, Serialize};
/// Documents
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct Documents {
/// The document types supported by the bundle.
///
/// ## Availability
/// * iOS 2.0+
/// * macOS 10.0+
/// * tvOS 9.0+
/// * watchOS 2.0+
///
/// ## Framework
/// * Core Foundation
#[serde(
rename = "CFBundleDocumentTypes",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub bundle_document_types: Option<Vec<BundleDocumentTypes>>,
/// A Boolean value indicating whether the app is a document-based app.
///
/// ## Availability
/// * iOS 12.0+
///
/// ## Framework
/// * Core Services
#[serde(
rename = "UISupportsDocumentBrowser",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub supports_document_browser: Option<bool>,
/// A Boolean value indicating whether the app may open the original document from a
/// file provider, rather than a copy of the document.
///
/// ## Availability
/// * iOS 12.0+
///
/// ## Framework
/// * Core Services
#[serde(
rename = "LSSupportsOpeningDocumentsInPlace",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub supports_opening_documents_in_place: Option<bool>,
/// The Core Data persistent store type associated with a document type.
///
/// ## Availability
/// * macOS 10.4+
///
/// ## Framework
/// * Core Data
#[serde(
rename = "NSPersistentStoreTypeKey",
skip_serializing_if = "Option::is_none",
serialize_with = "crate::serialize_enum_option"
)]
pub persistent_store_type_key: Option<PersistentStoreTypeKey>,
/// A Boolean value that indicates whether the system should download documents before
/// handing them over to the app.
///
/// By default, the system displays the download progress. Set the value to YES if you
/// want your app to display a custom download progress indicator instead.
///
/// ## Availability
/// * macOS 11.0+
///
/// ## Framework
/// * AppKit
#[serde(
rename = "NSDownloadsUbiquitousContents",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub downloads_ubiquitous_contents: Option<bool>,
}
/// Persistent Store Type Key
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub enum PersistentStoreTypeKey {
#[serde(rename = "SQLite")]
SqLite,
#[serde(rename = "XML")]
Xml,
#[serde(rename = "Binary")]
Binary,
#[serde(rename = "InMemory")]
InMemory,
}
/// URL Schemes
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct UrlSchemes {
/// A list of URL schemes (http, ftp, and so on) supported by the app.
///
/// ## Availability
/// * iOS 2.0+
/// * macOS 10.0+
/// * tvOS 9.0+
/// * watchOS 2.0+
///
/// ## Framework
/// * Core Foundation
#[serde(
rename = "CFBundleURLTypes",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub bundle_url_types: Option<Vec<BundleUrlTypes>>,
}
/// Bundle Document Types
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct BundleDocumentTypes {
/// The icon to associate with the document type.
///
/// ## Availability
/// * iOS 2.0+
/// * macOS 10.0+
/// * tvOS 9.0+
/// * watchOS 2.0+
///
/// ## Framework
/// * Core Foundation
#[serde(
rename = "CFBundleTypeIconFile",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub bundle_type_icon_file: Option<String>,
/// The abstract name for the document type.
///
/// ## Availability
/// * iOS 2.0+
/// * macOS 10.0+
/// * tvOS 9.0+
/// * watchOS 2.0+
///
/// ## Framework
/// * Core Foundation
#[serde(rename = "CFBundleTypeName")]
pub bundle_type_name: String,
/// The app's role with respect to the document type.
///
/// ## Availability
/// * iOS 2.0+
/// * macOS 10.0+
/// * tvOS 9.0+
/// * watchOS 2.0+
///
/// ## Framework
/// * Core Foundation
#[serde(
rename = "CFBundleTypeRole",
skip_serializing_if = "Option::is_none",
serialize_with = "crate::serialize_enum_option"
)]
pub bundle_type_role: Option<BundleTypeRole>,
/// The ranking of this app among apps that declare themselves as editors or viewers
/// of the given file type.
///
/// ## Availability
/// * iOS 2.0+
/// * macOS 10.0+
/// * tvOS 9.0+
/// * watchOS 2.0+
///
/// ## Framework
/// * Core Foundation
#[serde(
rename = "LSHandlerRank",
skip_serializing_if = "Option::is_none",
serialize_with = "crate::serialize_enum_option"
)]
pub handler_rank: Option<HandlerRank>,
/// The document file types the app supports.
///
/// ## Availability
/// * iOS 2.0+
/// * macOS 10.0+
/// * tvOS 9.0+
/// * watchOS 2.0+
///
/// ## Framework
/// * Core Foundation
#[serde(
rename = "LSItemContentTypes",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub item_content_types: Option<Vec<String>>,
/// A Boolean value indicating whether the document is distributed as a bundle.
///
/// ## Availability
/// * iOS 2.0+
/// * macOS 10.0+
/// * tvOS 9.0+
/// * watchOS 2.0+
///
/// ## Framework
/// * Core Foundation
#[serde(
rename = "LSTypeIsPackage",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub type_is_package: Option<bool>,
/// The subclass used to create instances of this document.
///
/// ## Availability
/// * iOS 2.0+
/// * macOS 10.0+
/// * tvOS 9.0+
/// * watchOS 2.0+
///
/// ## Framework
/// * Core Foundation
#[serde(
rename = "NSDocumentClass",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub document_class: Option<String>,
/// The file types that this document can be exported to.
///
/// ## Availability
/// * iOS 2.0+
/// * macOS 10.0+
/// * tvOS 9.0+
/// * watchOS 2.0+
///
/// ## Framework
/// * Core Foundation
#[serde(
rename = "NSExportableTypes",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub exportable_types: Option<Vec<String>>,
}
/// Bundle Type Role
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
pub enum BundleTypeRole {
#[serde(rename = "Editor")]
Editor,
#[serde(rename = "Viewer")]
Viewer,
#[serde(rename = "Shell")]
Shell,
#[serde(rename = "QLGenerator")]
QlGenerator,
#[serde(rename = "None")]
None,
}
/// Handler Rank
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
pub enum HandlerRank {
#[serde(rename = "Owner")]
Owner,
#[serde(rename = "Default")]
Default,
#[serde(rename = "Alternate")]
Alternate,
#[serde(rename = "None")]
None,
}
/// Bundle URL Types
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct BundleUrlTypes {
/// The app’s role with respect to the type.
///
/// ## Availability
/// * iOS 2.0+
/// * macOS 10.0+
/// * tvOS 9.0+
/// * watchOS 2.0+
///
/// ## Framework
/// * Core Foundation
#[serde(
rename = "CFBundleTypeRole",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub bundle_type_role: Option<BundleTypeRole>,
/// The name of the icon image file, without the extension, to be used for this type.
///
/// ## Availability
/// * iOS 2.0+
/// * macOS 10.0+
/// * tvOS 9.0+
/// * watchOS 2.0+
///
/// ## Framework
/// * Core Foundation
#[serde(
rename = "CFBundleURLIconFile",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub bundle_url_icon_file: Option<String>,
/// The abstract name for this type.
///
/// ## Availability
/// * iOS 2.0+
/// * macOS 10.0+
/// * tvOS 9.0+
/// * watchOS 2.0+
///
/// ## Framework
/// * Core Foundation
#[serde(rename = "CFBundleURLName")]
pub bundle_url_name: String,
/// The URL schemes supported by this type.
///
/// ## Availability
/// * iOS 2.0+
/// * macOS 10.0+
/// * tvOS 9.0+
/// * watchOS 2.0+
///
/// ## Framework
/// * Core Foundation
#[serde(
rename = "CFBundleURLSchemes",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub bundle_url_schemes: Option<Vec<String>>,
}
/// Universal Type Identifiers
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct UniversalTypeIdentifiers {
/// The uniform type identifiers owned and exported by the app.
///
/// ## Availability
/// * iOS 5.0+
/// * macOS 10.7+
///
/// ## Framework
/// * Core Services
#[serde(
rename = "UTExportedTypeDeclarations",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub exported_type_declarations: Option<Vec<ExportedTypeDeclarations>>,
/// The uniform type identifiers inherently supported, but not owned, by the app.
///
/// ## Availability
/// * iOS 3.2+
/// * macOS 10.5+
///
/// ## Framework
/// * Core Services
#[serde(
rename = "UTImportedTypeDeclarations",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub imported_type_declarations: Option<Vec<ImportedTypeDeclarations>>,
}
/// Exported Type Declarations
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct ExportedTypeDeclarations {
/// The Uniform Type Identifier types that this type conforms to.
///
/// ## Availability
/// * iOS 5.0+
/// * macOS 10.7+
///
/// ## Framework
/// * Core Services
#[serde(rename = "UTTypeConformsTo")]
pub type_conforms_to: Vec<String>,
/// A description for this type.
///
/// ## Availability
/// * iOS 5.0+
/// * macOS 10.7+
///
/// ## Framework
/// * Core Services
#[serde(
rename = "UTTypeDescription",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub type_description: Option<String>,
/// The bundle icon resource to associate with this type.
///
/// ## Availability
/// * iOS 5.0+
/// * macOS 10.7+
///
/// ## Framework
/// * Core Services
#[serde(
rename = "UTTypeIconFile",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub type_icon_file: Option<String>,
/// One or more bundle icon resources to associate with this type.
///
/// ## Availability
/// * iOS 5.0+
/// * macOS 10.7+
///
/// ## Framework
/// * Core Services
#[serde(
rename = "UTTypeIconFiles",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub type_icon_files: Option<Vec<String>>,
/// The Uniform Type Identifier to assign to this type.
///
/// ## Availability
/// * iOS 5.0+
/// * macOS 10.7+
///
/// ## Framework
/// * Core Services
#[serde(rename = "UTTypeIdentifier")]
pub type_identifier: String,
/// The webpage for a reference document that describes this type.
///
/// ## Availability
/// * iOS 5.0+
/// * macOS 10.7+
///
/// ## Framework
/// * Core Services
#[serde(
rename = "UTTypeReferenceURL",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub type_reference_url: Option<String>,
/// A dictionary defining one or more equivalent type identifiers.
///
/// ## Availability
/// * iOS 5.0+
/// * macOS 10.7+
///
/// ## Framework
/// * Core Services
#[serde(rename = "UTTypeTagSpecification")]
pub type_tag_specification: DefaultDictionary,
}
/// Imported Type Declarations
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct ImportedTypeDeclarations {
/// The Uniform Type Identifier types that this type conforms to.
///
/// ## Availability
/// * iOS 3.2+
/// * macOS 10.5+
///
/// ## Framework
/// * Core Services
#[serde(rename = "UTTypeConformsTo")]
pub type_conforms_to: Vec<String>,
/// A description for this type.
///
/// ## Availability
/// * iOS 3.2+
/// * macOS 10.5+
///
/// ## Framework
/// * Core Services
#[serde(
rename = "UTTypeDescription",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub type_description: Option<String>,
/// The bundle icon resource to associate with this type.
///
/// ## Availability
/// * iOS 3.2+
/// * macOS 10.5+
///
/// ## Framework
/// * Core Services
#[serde(
rename = "UTTypeIconFile",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub type_icon_file: Option<String>,
/// One or more bundle icon resources to associate with this type.
///
/// ## Availability
/// * iOS 3.2+
/// * macOS 10.5+
///
/// ## Framework
/// * Core Services
#[serde(
rename = "UTTypeIconFiles",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub type_icon_files: Option<Vec<String>>,
/// The Uniform Type Identifier to assign to this type.
///
/// ## Availability
/// * iOS 3.2+
/// * macOS 10.5+
///
/// ## Framework
/// * Core Services
#[serde(rename = "UTTypeIdentifier")]
pub type_identifier: String,
/// The webpage for a reference document that describes this type.
///
/// ## Availability
/// * iOS 3.2+
/// * macOS 10.5+
///
/// ## Framework
/// * Core Services
#[serde(
rename = "UTTypeReferenceURL",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub type_reference_url: Option<String>,
/// A dictionary defining one or more equivalent type identifiers.
///
/// ## Availability
/// * iOS 3.2+
/// * macOS 10.5+
///
/// ## Framework
/// * Core Services
#[serde(rename = "UTTypeTagSpecification")]
pub type_tag_specification: DefaultDictionary,
}
/// Default Dictionary
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct DefaultDictionary {
pub default: String,
}
/// Network
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct Network {
/// The URL where Private Click Measurement sends event attribution information.
///
/// Include this key in your app to specify where the system sends event attribution
/// data it receives from launched websites that support Private Click Measurement
/// (PCM). The value provided for this key is a string that contains a valid URL
/// that points to a server endpoint. PCM won’t work if your app doesn’t include
/// this key.
///
/// For more information on PCM and setting up a server to receive event attribution
/// data, see Introducing Private Click Measurement.
///
/// ### Note
/// Mac apps built with Mac Catalyst don’t support PCM.
///
/// ## Availability
/// * iOS 14.5+
///
/// ## Framework
/// * UIKit
#[serde(
rename = "NSAdvertisingAttributionReportEndpoint",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub advertising_attribution_report_endpoint: Option<String>,
/// A description of changes made to the default security for HTTP connections.
///
/// On Apple platforms, a networking feature called App Transport Security (ATS)
/// improves privacy and data integrity for all apps and app extensions.
/// ATS requires that all HTTP connections made with the URL Loading System—typically
/// using the URLSession class—use HTTPS. It further imposes extended security
/// checks that supplement the default server trust evaluation prescribed by the
/// Transport Layer Security (TLS) protocol. ATS blocks connections that fail to
/// meet minimum security specifications. For additional details, see Preventing
/// Insecure Network Connections.
///
/// You can circumvent or augment these protections by adding the
/// NSAppTransportSecurity key to your app’s Information Property List file and
/// providing an ATS configuration dictionary as the value. For example, you can:
/// * Allow insecure loads for web views while maintaining ATS protections elsewhere
/// in your app using the NSAllowsArbitraryLoadsInWebContent key.
/// * Enable additional security features like Certificate Transparency using the
/// NSRequiresCertificateTransparency key, or Certificate Pinning using the
/// NSPinnedDomains key.
/// * Reduce or remove security requirements for communication with particular servers
/// using the NSExceptionDomains key.
///
/// ### Important
/// Always look for ways to improve server security before adding ATS exceptions.
/// Loosening ATS restrictions reduces the security of your app.
///
/// All keys in the ATS configuration dictionary are optional, with default values
/// that are suitable for most apps. Keys that define global exceptions apply to
/// all network connections made by your app, except connections to domains specified
/// in the NSExceptionDomains sub-dictionary. That sub-dictionary allows you to
/// separately manage settings for individual domains.
///
/// ### Versioning
/// ATS operates by default for apps linked against the iOS 9.0 or macOS 10.11 SDKs or
/// later. When you link your app against an older SDK, ATS is disabled no matter
/// which version of operating system your app runs on.
///
/// If you specify a value for any of the global exceptions besides
/// NSAllowsArbitraryLoads, then the ATS behavior depends on the version of the OS on
/// which your app runs:
/// * iOS 9.0 or macOS 10.11
/// ATS uses the NSAllowsArbitraryLoads value that you set, or NO by default, and
/// ignores the other global exceptions.
/// * iOS 10.0 or later or macOS 10.12 or later
/// ATS ignores the NSAllowsArbitraryLoads value that you set and instead obeys the
/// other key or keys.
///
/// This behavior enables you to manage differences between OS versions.
/// You provide a coarse exception (NSAllowsArbitraryLoads) for older versions, and a
/// more targeted exception, like NSAllowsArbitraryLoadsInWebContent, for when it’s
/// available.
///
/// ## Availability
/// * iOS 9.0+
/// * macOS 10.11+
///
/// ## Framework
/// * Security
#[serde(
rename = "NSAppTransportSecurity",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub app_transport_security: Option<AppTransportSecurity>,
/// Bonjour service types browsed by the app.
///
/// The value associated with this key is an array of strings that represent Bonjour
/// service types. Include all service types that your app expects to use.
/// Bonjour service type strings look like _ipp._tcp, and _myservice._udp, where the
/// first substring identifies the application protocol and the second identifies the
/// transport protocol.
///
/// ## Availability
/// * iOS 14.0+
/// * macOS 11.0+
/// * tvOS 14.0+
///
/// ## Framework
/// * Network
#[serde(
rename = "NSBonjourServices",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub bonjour_services: Option<Vec<String>>,
/// A Boolean value that indicates your app supports CloudKit Sharing.
///
/// If your app supports CloudKit Sharing, add this key to your app’s Info.plist file
/// with a value of true. This tells the system to launch your app when the user
/// taps or clicks a share’s URL. For example, one they receive in an email or an
/// iMessage from the share’s owner.
///
/// Before your app launches, CloudKit verifies that the user has an active iCloud
/// account and, for private shares, that it matches their participant details.
/// Following successful verification, CloudKit provides the share’s metadata to your
/// app’s scene, or application, delegate. The method it calls varies by platform
/// and app configuration. For more information, see CKShare.Metadata.
///
/// To indicate that your app supports CloudKit Sharing:
/// 1. Select your project’s Info.plist file in the Project navigator in Xcode.
/// 2. Click the Add button (+) next to any key in the property list editor and press
/// Return. 3. Type the key name CKSharingSupported.
/// 4. Choose Boolean from the pop-up menu in the Type column.
/// 5. Choose YES from the pop-up menu in the Value column.
/// 6. Save your changes.
///
/// ## Availability
/// * iOS 10.0+
/// * macOS 10.12+
///
/// ## Framework
/// * CloudKit
#[serde(
rename = "CKSharingSupported",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub sharing_supported: Option<bool>,
}
/// App Transport Security
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct AppTransportSecurity {
/// A Boolean value indicating whether App Transport Security restrictions are
/// disabled for all network connections.
///
/// Set this key’s value to YES to disable App Transport Security (ATS) restrictions
/// for all domains not specified in the NSExceptionDomains dictionary.
/// Domains you specify in that dictionary aren’t affected by this key’s value.
///
/// ### Important
/// You must supply a justification during App Store review if you set the key’s value
/// to YES, as described in Provide Justification for Exceptions. Use this key
/// with caution because it significantly reduces the security of your app.
/// In most cases, it’s better to upgrade your servers to meet the requirements
/// imposed by ATS, or at least to use a narrower exception.
///
/// Disabling ATS means that unsecured HTTP connections are allowed.
/// HTTPS connections are also allowed, and are still subject to default server trust
/// evaluation, as described in Ensure the Network Server Meets Minimum Requirements.
/// However, extended security checks—like requiring a minimum Transport Layer
/// Security (TLS) protocol version—are disabled. Without ATS, you’re also free to
/// loosen the default server trust requirements, as described in Performing Manual
/// Server Trust Authentication.
///
/// In iOS 10 and later and macOS 10.12 and later, the value of the
/// NSAllowsArbitraryLoads key is ignored—and the default value of NO used instead—if
/// any of the following keys are present in your app’s Information Property List
/// file:
/// * NSAllowsArbitraryLoadsForMedia
/// * NSAllowsArbitraryLoadsInWebContent
/// * NSAllowsLocalNetworking
///
/// For more information about how the OS version affects ATS behavior, see the
/// NSAppTransportSecurity key’s Versioning section.
///
/// ## Availability
/// * iOS 9.0+
/// * macOS 10.11+
///
/// ## Framework
/// * Security
#[serde(
rename = "NSAllowsArbitraryLoads",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub allows_arbitrary_loads: Option<bool>,
/// A Boolean value indicating whether all App Transport Security restrictions are
/// disabled for requests made using the AV Foundation framework.
///
/// Set this key’s value to YES to disable App Transport Security restrictions for
/// media loaded using the AVFoundation framework, without affecting your URLSession
/// connections. Domains you specify in the NSExceptionDomains dictionary aren’t
/// affected by this key’s value.
///
/// Employ this key only for loading encrypted media—like files protected by FairPlay
/// or by secure HTTP Live Streaming—that don’t contain personalized information.
///
/// In iOS 10 and later and in macOS 10.12 and later, if you include this key with any
/// value, then App Transport Security ignores the value of the NSAllowsArbitraryLoads
/// key, instead using that key’s default value of NO. For more information about
/// how the OS version affects ATS behavior, see the NSAppTransportSecurity key’s
/// Versioning section.
///
/// ### Important
/// You must supply a justification during App Store review if you set the key’s value
/// to YES, as described in Provide Justification for Exceptions.
///
/// ## Availability
/// * iOS 10.0+
/// * macOS 10.12+
///
/// ## Framework
/// * Security
#[serde(
rename = "NSAllowsArbitraryLoadsForMedia",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub allows_arbitrary_loads_for_media: Option<bool>,
/// A Boolean value indicating whether all App Transport Security restrictions are
/// disabled for requests made from web views.
///
/// Set this key’s value to YES to exempt your app’s web views from App Transport
/// Security restrictions without affecting your URLSession connections.
/// Domains you specify in the NSExceptionDomains dictionary aren’t affected by this
/// key’s value.
///
/// A web view is an instance of any of the following classes:
/// * WKWebView
/// * UIWebView (iOS only)
/// * WebView (macOS only)
///
/// In iOS 10 and later and in macOS 10.12 and later, if you include this key with any
/// value, then App Transport Security ignores the value of the NSAllowsArbitraryLoads
/// key, instead using that key’s default value of NO. For more information about
/// how the OS version affects ATS behavior, see the NSAppTransportSecurity key’s
/// Versioning section.
///
/// ### Important
/// You must supply a justification during App Store review if you set the key’s value
/// to YES, as described in Provide Justification for Exceptions.
///
/// ## Availability
/// * iOS 10.0+
/// * macOS 10.12+
///
/// ## Framework
/// * Security
#[serde(
rename = "NSAllowsArbitraryLoadsInWebContent",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub allows_arbitrary_loads_in_web_content: Option<bool>,
/// A Boolean value indicating whether to allow loading of local resources.
///
/// In iOS 9 and macOS 10.11, App Transport Security (ATS) disallows connections to
/// unqualified domains, .local domains, and IP addresses. You can add exceptions
/// for unqualified domains and .local domains in the NSExceptionDomains dictionary,
/// but you can’t add numerical IP addresses. Instead you use
/// NSAllowsArbitraryLoads when you want to load directly from an IP address.
///
/// In iOS 10 and macOS 10.12 and later, ATS allows all three of these connections by
/// default, so you no longer need an exception for any of them. However, if you
/// need to maintain compatibility with older versions of the OS, set both of the
/// NSAllowsArbitraryLoads and NSAllowsLocalNetworking keys to YES.
///
/// The local networking exception tells newer versions of the OS—which already allow
/// unqualified domains, .local domains, and IP addresses—to ignore the arbitrary
/// loads key. Meanwhile, the arbitrary loads key tells older versions of the OS,
/// which don’t process the local networking exception key, to bypass ATS completely.
/// This allows your app to work on different OS versions while minimizing the use of
/// the wider exception. For more information about how global ATS exceptions
/// interact across OS versions, see the NSAppTransportSecurity key’s Versioning
/// section.
///
/// ### Note
/// While ATS doesn’t block local loads by default in newer versions of the OS,
/// consider setting NSAllowsLocalNetworking to YES as a declaration of intent, if
/// appropriate, even if you don’t support older OS versions.
///
/// ## Availability
/// * iOS 10.0+
/// * macOS 10.12+
///
/// ## Framework
/// * Security
#[serde(
rename = "NSAllowsLocalNetworking",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub allows_local_networking: Option<bool>,
/// Custom App Transport Security configurations for named domains.
///
/// The value for this key is a dictionary with keys that name specific domains for
/// which you want to set exceptions. The value for each domain key is another
/// dictionary that indicates the exceptions for that domain.
///
/// ```swift
/// NSExceptionDomains : Dictionary {
/// <domain-name-string> : Dictionary {
/// NSIncludesSubdomains : Boolean
/// NSExceptionAllowsInsecureHTTPLoads : Boolean
/// NSExceptionMinimumTLSVersion : String
/// NSExceptionRequiresForwardSecrecy : Boolean
/// NSRequiresCertificateTransparency : Boolean
/// }
/// }
/// ```
/// Follow these rules when setting a domain name string:
/// * Use lowercase. Use example.com, not EXAMPLE.COM.
/// * Don’t include a port number. Use example.com, not example.com:443.
/// * Don’t use numerical IP addresses. Don’t use 1.2.3.4. For information about how
/// ATS handles IP addresses, see NSAllowsLocalNetworking.
/// * Don’t include a trailing dot, unless you only want to match a domain string with
/// a trailing dot. For example, example.com. (with a trailing dot) matches
/// “example.com.” but not “example.com”.
/// Similarly, example.com matches “example.com” but not “example.com.”.
/// * Don’t use wildcard domains. Don’t use *.example.com. Instead, use example.com
/// and set NSIncludesSubdomains to YES.
///
/// The values for the keys in each individual domain’s dictionary control how ATS
/// treats connections made to that domain.
///
/// ### Note
/// If you specify an exception domain dictionary, ATS ignores any global
/// configuration keys, like NSAllowsArbitraryLoads, for that domain. This is true
/// even if you leave the domain-specific dictionary empty and rely entirely on its
/// keys’ default values.
///
/// ## Availability
/// * iOS 9.0+
/// * macOS 10.11+
///
/// ## Framework
/// * Security
#[serde(
rename = "NSExceptionDomains",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub exception_domains: Option<ExceptionDomains>,
/// A collection of certificates that App Transport Security expects when connecting
/// to named domains.
///
/// The value for this optional key is a dictionary with keys that specify the domain
/// names for which you want to set the expected certificates. The value for each
/// domain name key is another dictionary that configures the expected certificates
/// for that domain.
///
/// ```swift
/// NSPinnedDomains : Dictionary {
/// <domain-name-string> : Dictionary {
/// NSIncludesSubdomains : Boolean
/// NSPinnedCAIdentities : Array
/// NSPinnedLeafIdentities : Array
/// }
/// }
/// ```
///
/// For any domain that you specify, you must include one or more expected Certificate
/// Authority (CA) or sub-CA certificates as the value for the NSPinnedCAIdentities
/// key, one or more expected leaf certificates as the value for the
/// NSPinnedLeafIdentities key, or both. If you specify both, App Transport
/// Security (ATS) requires a match in each category.
///
/// To specify a domain name string, follow the rules for domain names given in
/// NSExceptionDomains. You can also extend the pinning to cover subdomains by
/// setting the value for the NSIncludesSubdomains key to YES.
///
/// Pinning a certificate for a given domain has no impact on other security
/// requirements or configuration. For example, pinning a CA certificate doesn’t
/// change the way the system evaluates that certificate’s suitability as an anchor
/// certificate. For information about securing network connections, see
/// Preventing Insecure Network Connections.
///
/// ## Availability
/// * iOS 14.0+
/// * macOS 11.0+
///
/// ## Framework
/// * Security
#[serde(
rename = "NSPinnedDomains",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub pinned_domains: Option<PinnedDomains>,
}
/// Exception Domains
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct ExceptionDomains {
/// A Boolean value that indicates whether to extend the configuration to subdomains
/// of the given domain.
///
/// You can include this key in any of the domain-specific dictionaries that you add
/// to the NSExceptionDomains and NSPinnedDomains dictionaries. Adding the
/// NSIncludesSubdomains key affects the applicability of the other configuration in
/// the same domain-specific dictionary. The key is optional, with a default value
/// of NO.
///
/// Set the value for this key to YES to apply the configuration for the given domain
/// to all subdomains of the domain that have one additional path component.
/// For example, if you set this value to YES and the domain name string is
/// example.com, then the configuration applies to example.com, as well as
/// math.example.com and history.example.com. However, it doesn’t apply to the
/// subdomains advanced.math.example.com or ancient.history.example.com because those
/// subdomains have two additional path components. If the value is NO the
/// configuration applies only to example.com.
///
/// ## Availability
/// * iOS 9.0+
/// * macOS 10.11+
///
/// ## Framework
/// * Security
#[serde(
rename = "NSIncludesSubdomains",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub includes_subdomains: Option<bool>,
/// A Boolean value indicating whether to allow insecure HTTP loads.
///
/// Set the value for this key to YES to allow insecure HTTP loads for the given
/// domain, or to be able to loosen the server trust evaluation requirements for HTTPS
/// connections to the domain, as described in Performing Manual Server Trust
/// Authentication.
///
/// Using this key doesn’t by itself change default server trust evaluation
/// requirements for HTTPS connections, described in Ensure the Network Server Meets
/// Minimum Requirements. Using only this key also doesn’t change the TLS or
/// forward secrecy requirements imposed by ATS. As a result, you might need to
/// combine this key with the NSExceptionMinimumTLSVersion or
/// NSExceptionRequiresForwardSecrecy key in certain cases.
///
/// This key is optional.
/// The default value is NO.
///
/// ### Important
/// You must supply a justification during App Store review if you set the key’s value
/// to YES, as described in Provide Justification for Exceptions.
///
/// ## Availability
/// * iOS 9.0+
/// * macOS 10.11+
///
/// ## Framework
/// * Security
#[serde(
rename = "NSExceptionAllowsInsecureHTTPLoads",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub exception_allows_insecure_http_loads: Option<bool>,
/// The minimum Transport Layer Security (TLS) version for network connections.
///
/// This key is optional. The value is a string, with a default value of TLSv1.2.
///
/// ### Important
/// You must supply a justification during App Store review if you use this key to set
/// a protocol version lower than 1.2, as described in Provide Justification for
/// Exceptions.
///
/// ## Availability
/// * iOS 9.0+
/// * macOS 10.11+
///
/// ## Framework
/// * Security
#[serde(
rename = "NSExceptionMinimumTLSVersion",
skip_serializing_if = "Option::is_none",
serialize_with = "crate::serialize_enum_option"
)]
pub exception_minimum_tls_version: Option<ExceptionMinimumTlsVersion>,
/// A Boolean value indicating whether to override the perfect forward secrecy
/// requirement.
///
/// Set the value for this key to NO to override the requirement that a server support
/// perfect forward secrecy (PFS) for the given domain. Disabling this requirement
/// also removes the key length check described in Ensure the Network Server Meets
/// Minimum Requirements. However, it doesn’t impact the TLS version requirement.
/// To control that, use NSExceptionMinimumTLSVersion.
///
/// This key is optional.
/// The default value is YES, which limits the accepted ciphers to those that support
/// PFS through Elliptic Curve Diffie-Hellman Ephemeral (ECDHE) key exchange.
///
/// ## Availability
/// * iOS 9.0+
/// * macOS 10.11+
///
/// ## Framework
/// * Security
#[serde(
rename = "NSExceptionRequiresForwardSecrecy",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub exception_requires_forward_secrecy: Option<bool>,
/// A Boolean value indicating whether to require Certificate Transparency.
///
/// Certificate Transparency (CT) is a protocol that ATS can use to identify
/// mistakenly or maliciously issued X.509 certificates. Set the value for the
/// NSRequiresCertificateTransparency key to YES to require that for a given domain,
/// server certificates are supported by valid, signed CT timestamps from at least two
/// CT logs trusted by Apple. For more information about Certificate Transparency,
/// see RFC6962.
///
/// Unlike most other ATS exceptions, using a non-default value in this case tightens
/// security requirements.
///
/// This key is optional.
/// The default value is NO.
///
/// ## Availability
/// * iOS 9.0+
/// * macOS 10.11+
///
/// ## Framework
/// * Security
#[serde(
rename = "NSRequiresCertificateTransparency",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub requires_certificate_transparency: Option<bool>,
}
/// Exception Minimum TLS Version
#[derive(Deserialize, Serialize, Clone, Debug, PartialEq, Eq)]
pub enum ExceptionMinimumTlsVersion {
/// Require a minimum TLS version of 1.0.
#[serde(rename = "TLSv1.0")]
TlSv10,
/// Require a minimum TLS version of 1.1.
#[serde(rename = "TLSv1.1")]
TlSv11,
/// Require a minimum TLS version of 1.2.
#[serde(rename = "TLSv1.2")]
TlSv12,
/// Require a minimum TLS version of 1.3.
#[serde(rename = "TLSv1.3")]
TlSv13,
}
/// Pinned Domains
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct PinnedDomains {
/// A Boolean value that indicates whether to extend the configuration to subdomains
/// of the given domain.
///
/// You can include this key in any of the domain-specific dictionaries that you add
/// to the NSExceptionDomains and NSPinnedDomains dictionaries. Adding the
/// NSIncludesSubdomains key affects the applicability of the other configuration in
/// the same domain-specific dictionary. The key is optional, with a default value
/// of NO.
///
/// Set the value for this key to YES to apply the configuration for the given domain
/// to all subdomains of the domain that have one additional path component.
/// For example, if you set this value to YES and the domain name string is
/// example.com, then the configuration applies to example.com, as well as
/// math.example.com and history.example.com. However, it doesn’t apply to the
/// subdomains advanced.math.example.com or ancient.history.example.com because those
/// subdomains have two additional path components.
///
/// If the value is NO the configuration applies only to example.com.
///
/// ## Availability
/// * iOS 9.0+
/// * macOS 10.11+
///
/// ## Framework
/// * Security
#[serde(
rename = "NSIncludesSubdomains",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub includes_subdomains: Option<bool>,
/// A list of allowed Certificate Authority certificates for a given domain name.
///
/// Provide an array of dictionaries as the value for this key.
/// Each dictionary in the array contains the SPKI-SHA256-BASE64 key with a value that
/// represents the Base64-encoded SHA-256 digest of an X.509 certificate’s DER-encoded
/// ASN.1 Subject Public Key Info (SPKI) structure.
///
/// ```swift
/// NSPinnedCAIdentities : Array {
/// Dictionary {
/// SPKI-SHA256-BASE64 : String
/// }
/// }
/// ```
///
/// When making a network connection to a named domain, App Transport Security (ATS)
/// blocks the connection unless it can find the SPKI digest of at least one
/// Certificate Authority (CA) or sub-CA certificate in the chain presented by the
/// server.
///
/// You must include this key or the NSPinnedLeafIdentities key or both in each
/// domain-specific NSPinnedDomains subdictionary. If you include both, then both
/// must produce a match.
///
/// ## Availability
/// * iOS 14.0+
/// * macOS 11.0+
///
/// ## Framework
/// * Security
#[serde(
rename = "NSPinnedCAIdentities",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub pinned_ca_identities: Option<Vec<Spkisha256Base64>>,
}
/// SPKI-SHA256-BASE64
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct Spkisha256Base64 {
/// The digest of an X.509 certificate’s Subject Public Key Info structure.
///
/// You represent a pinned certificate using the Base64-encoded SHA-256 digest of an
/// X.509 certificate’s DER-encoded ASN.1 Subject Public Key Info (SPKI) structure.
/// For a PEM-encoded public-key certificate stored in the file ca.pem, you can
/// calculate the SPKI-SHA256-BASE64 value with the following openssl commands:
///
/// ```swift
/// % cat ca.pem |
/// openssl x509 -inform pem -noout -outform pem -pubkey |
/// openssl pkey -pubin -inform pem -outform der |
/// openssl dgst -sha256 -binary |
/// openssl enc -base64
/// ```
///
/// ## Availability
/// * iOS 14.0+
/// * macOS 11.0+
///
/// ## Framework
/// * Security
#[serde(
rename = "SPKI-SHA256-BASE64",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub spki_sha256_base64: Option<String>,
}
/// Storage
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct Storage {
/// Describes the files or directories the app installs on the system.
///
/// ## Availability
/// * macOS 10.0+
///
/// ## Framework
/// * AppKit
#[serde(
rename = "APFiles",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub files: Option<Files>,
/// The base path to the files or directories the app installs.
///
/// ## Availability
/// * macOS 10.0+
///
/// ## Framework
/// * AppKit
#[serde(
rename = "APInstallerURL",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub installer_url: Option<String>,
/// A Boolean value indicating whether the app continues working if the system purges
/// the local storage.
///
/// ## Availability
/// * iOS 9.3+
///
/// ## Framework
/// * Foundation
#[serde(
rename = "NSSupportsPurgeableLocalStorage",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub supports_purgeable_local_storage: Option<bool>,
/// A Boolean value indicating whether the files this app creates are quarantined by
/// default.
///
/// ## Availability
/// * macOS 10.0+
///
/// ## Framework
/// * Core Services
#[serde(
rename = "LSFileQuarantineEnabled",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub file_quarantine_enabled: Option<bool>,
/// A Boolean value indicating whether the app shares files through iTunes.
///
/// ## Availability
/// * iOS 3.2+
/// * tvOS 9.0+
/// * watchOS 2.0+
///
/// ## Framework
/// * UIKit
#[serde(
rename = "UIFileSharingEnabled",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub file_sharing_enabled: Option<bool>,
/// A Boolean value indicating whether the app's resources files should be mapped into
/// memory.
///
/// ## Availability
/// * macOS 10.0+
///
/// ## Framework
/// * Core Foundation
#[serde(
rename = "CSResourcesFileMapped",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub resources_file_mapped: Option<bool>,
/// A Boolean value that indicates whether the system should download documents before
/// handing them over to the app.
///
/// By default, the system displays the download progress.
/// Set the value to YES if you want your app to display a custom download progress
/// indicator instead.
///
/// ## Availability
/// * macOS 11.0+
///
/// ## Framework
/// * AppKit
#[serde(
rename = "NSDownloadsUbiquitousContents",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub downloads_ubiquitous_contents: Option<bool>,
}
/// Files
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct Files {
/// A Boolean value indicating whether the file or a folder icon is displayed in the
/// Info window.
///
/// ## Availability
/// * macOS 10.0+
///
/// ## Framework
/// * AppKit
#[serde(
rename = "APDisplayedAsContainer",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub displayed_as_container: Option<bool>,
/// A short description of the file or folder that appears in the Info window.
///
/// ## Availability
/// * macOS 10.0+
///
/// ## Framework
/// * AppKit
#[serde(rename = "APFileDescriptionKey")]
pub file_description_key: String,
/// The path to use when installing the file or folder, relative to the app bundle.
///
/// ## Availability
/// * macOS 10.0+
///
/// ## Framework
/// * AppKit
#[serde(rename = "APFileDestinationPath")]
pub file_destination_path: String,
/// The name of the file or folder to install.
///
/// ## Availability
/// * macOS 10.0+
///
/// ## Framework
/// * AppKit
#[serde(rename = "APFileName")]
pub file_name: String,
/// The path to the file or folder in the app package, relative to the installer path.
///
/// ## Availability
/// * macOS 10.0+
///
/// ## Framework
/// * AppKit
#[serde(rename = "APFileSourcePath")]
pub file_source_path: String,
/// The action to take on the file or folder.
///
/// ## Availability
/// * macOS 10.0+
///
/// ## Framework
/// * AppKit
#[serde(
rename = "APInstallAction",
skip_serializing_if = "Option::is_none",
serialize_with = "crate::serialize_enum_option"
)]
pub install_action: Option<InstallAction>,
}
/// Install Action
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
pub enum InstallAction {
#[serde(rename = "Copy")]
Copy,
#[serde(rename = "Open")]
Open,
}
/// Core ML Models
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct CoreMlModels {
/// A Boolean value indicating whether the app contains a Core ML model to optimize
/// loading the model.
///
/// ## Availability
/// * iOS 12.0+
/// * macOS 10.0+
/// * tvOS 12.0+
/// * watchOS 5.0+
///
/// ## Framework
/// * Core Services
#[serde(
rename = "LSBundleContainsCoreMLmlmodelc",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub bundle_contains_core_ml_mlmodelc: Option<bool>,
}
/// Java
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
pub struct Java {
/// The root directory for the app’s Java class files.
///
/// ## Availability
/// * macOS 10.0+
///
/// ## Framework
/// * Foundation
#[serde(
rename = "NSJavaRoot",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub java_root: Option<String>,
}