@@ -263,6 +263,10 @@ enum Serialization {
263
263
let name : String
264
264
let targets : [ String ]
265
265
let productType : ProductType
266
+
267
+ #if ENABLE_APPLE_PRODUCT_TYPES
268
+ let settings : [ ProductSetting ]
269
+ #endif
266
270
}
267
271
268
272
// MARK: - trait serialization
@@ -301,3 +305,125 @@ enum Serialization {
301
305
let cxxLanguageStandard : CXXLanguageStandard ?
302
306
}
303
307
}
308
+
309
+ #if ENABLE_APPLE_PRODUCT_TYPES
310
+ extension Serialization {
311
+ enum ProductSetting : Codable {
312
+ case bundleIdentifier( String )
313
+ case teamIdentifier( String )
314
+ case displayVersion( String )
315
+ case bundleVersion( String )
316
+ case iOSAppInfo( IOSAppInfo )
317
+
318
+ struct IOSAppInfo : Codable {
319
+ var appIcon : AppIcon ?
320
+ var accentColor : AccentColor ?
321
+ var supportedDeviceFamilies : [ DeviceFamily ]
322
+ var supportedInterfaceOrientations : [ InterfaceOrientation ]
323
+ var capabilities : [ Capability ] = [ ]
324
+ var appCategory : AppCategory ?
325
+ var additionalInfoPlistContentFilePath : String ?
326
+
327
+ enum AccentColor : Codable {
328
+ struct PresetColor : Codable {
329
+ var rawValue : String
330
+ }
331
+
332
+ case presetColor( PresetColor )
333
+ case asset( String )
334
+ }
335
+
336
+ enum AppIcon : Codable {
337
+ struct PlaceholderIcon : Codable {
338
+ var rawValue : String
339
+ }
340
+
341
+ case placeholder( icon: PlaceholderIcon )
342
+ case asset( String )
343
+ }
344
+
345
+ enum DeviceFamily : String , Codable {
346
+ case phone
347
+ case pad
348
+ case mac
349
+ }
350
+
351
+ struct DeviceFamilyCondition : Codable {
352
+ var deviceFamilies : [ DeviceFamily ]
353
+ }
354
+
355
+ enum InterfaceOrientation : Codable {
356
+ case portrait( _ condition: DeviceFamilyCondition ? = nil )
357
+ case portraitUpsideDown( _ condition: DeviceFamilyCondition ? = nil )
358
+ case landscapeRight( _ condition: DeviceFamilyCondition ? = nil )
359
+ case landscapeLeft( _ condition: DeviceFamilyCondition ? = nil )
360
+ }
361
+
362
+ enum Capability : Codable {
363
+ case appTransportSecurity( configuration: AppTransportSecurityConfiguration , _ condition: DeviceFamilyCondition ? = nil )
364
+ case bluetoothAlways( purposeString: String , _ condition: DeviceFamilyCondition ? = nil )
365
+ case calendars( purposeString: String , _ condition: DeviceFamilyCondition ? = nil )
366
+ case camera( purposeString: String , _ condition: DeviceFamilyCondition ? = nil )
367
+ case contacts( purposeString: String , _ condition: DeviceFamilyCondition ? = nil )
368
+ case faceID( purposeString: String , _ condition: DeviceFamilyCondition ? = nil )
369
+ case fileAccess( _ location: FileAccessLocation , mode: FileAccessMode , _ condition: DeviceFamilyCondition ? = nil )
370
+ case incomingNetworkConnections( _ condition: DeviceFamilyCondition ? = nil )
371
+ case localNetwork( purposeString: String , bonjourServiceTypes: [ String ] ? = nil , _ condition: DeviceFamilyCondition ? = nil )
372
+ case locationAlwaysAndWhenInUse( purposeString: String , _ condition: DeviceFamilyCondition ? = nil )
373
+ case locationWhenInUse( purposeString: String , _ condition: DeviceFamilyCondition ? = nil )
374
+ case mediaLibrary( purposeString: String , _ condition: DeviceFamilyCondition ? = nil )
375
+ case microphone( purposeString: String , _ condition: DeviceFamilyCondition ? = nil )
376
+ case motion( purposeString: String , _ condition: DeviceFamilyCondition ? = nil )
377
+ case nearbyInteractionAllowOnce( purposeString: String , _ condition: DeviceFamilyCondition ? = nil )
378
+ case outgoingNetworkConnections( _ condition: DeviceFamilyCondition ? = nil )
379
+ case photoLibrary( purposeString: String , _ condition: DeviceFamilyCondition ? = nil )
380
+ case photoLibraryAdd( purposeString: String , _ condition: DeviceFamilyCondition ? = nil )
381
+ case reminders( purposeString: String , _ condition: DeviceFamilyCondition ? = nil )
382
+ case speechRecognition( purposeString: String , _ condition: DeviceFamilyCondition ? = nil )
383
+ case userTracking( purposeString: String , _ condition: DeviceFamilyCondition ? = nil )
384
+ }
385
+
386
+ struct AppTransportSecurityConfiguration : Codable {
387
+ var allowsArbitraryLoadsInWebContent : Bool ? = nil
388
+ var allowsArbitraryLoadsForMedia : Bool ? = nil
389
+ var allowsLocalNetworking : Bool ? = nil
390
+ var exceptionDomains : [ ExceptionDomain ] ? = nil
391
+ var pinnedDomains : [ PinnedDomain ] ? = nil
392
+
393
+ struct ExceptionDomain : Codable {
394
+ var domainName : String
395
+ var includesSubdomains : Bool ? = nil
396
+ var exceptionAllowsInsecureHTTPLoads : Bool ? = nil
397
+ var exceptionMinimumTLSVersion : String ? = nil
398
+ var exceptionRequiresForwardSecrecy : Bool ? = nil
399
+ var requiresCertificateTransparency : Bool ? = nil
400
+ }
401
+
402
+ struct PinnedDomain : Codable {
403
+ var domainName : String
404
+ var includesSubdomains : Bool ? = nil
405
+ var pinnedCAIdentities : [ [ String : String ] ] ? = nil
406
+ var pinnedLeafIdentities : [ [ String : String ] ] ? = nil
407
+ }
408
+ }
409
+
410
+ enum FileAccessLocation : String , Codable {
411
+ case userSelectedFiles
412
+ case downloadsFolder
413
+ case pictureFolder
414
+ case musicFolder
415
+ case moviesFolder
416
+ }
417
+
418
+ enum FileAccessMode : String , Codable {
419
+ case readOnly
420
+ case readWrite
421
+ }
422
+
423
+ struct AppCategory : Codable {
424
+ var rawValue : String
425
+ }
426
+ }
427
+ }
428
+ }
429
+ #endif
0 commit comments