From 5d3ce582d5e7c6fe0fd3466ee94bb2bfb4db2bc6 Mon Sep 17 00:00:00 2001 From: Axel Zuziak Date: Tue, 17 Nov 2020 12:08:50 +0100 Subject: [PATCH 1/7] Added sample application for ios game loop --- .../ios/FlankGameLoopExample/export.sh | 15 + .../FlankGameLoopExample/exportOptions.plist | 10 + .../flankgameloop.xcodeproj/project.pbxproj | 598 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../flankgameloop/Actions.sks | Bin 0 -> 1892 bytes .../flankgameloop/AppDelegate.swift | 27 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 +++ .../Assets.xcassets/Contents.json | 6 + .../flankgameloop/Base.lproj/Main.storyboard | 24 + .../flankgameloop/FTLGameLoop.swift | 63 ++ .../flankgameloop/GameScene.sks | Bin 0 -> 4694 bytes .../flankgameloop/GameScene.swift | 88 +++ .../flankgameloop/GameViewController.swift | 49 ++ .../flankgameloop/Info.plist | 60 ++ .../flankgameloopTests/Info.plist | 22 + .../flankgameloopTests.swift | 33 + .../flankgameloopUITests/Info.plist | 22 + .../flankgameloopUITests.swift | 42 ++ test_projects/ios/FlankGameLoopExample/ftl.sh | 3 + 21 files changed, 1186 insertions(+) create mode 100755 test_projects/ios/FlankGameLoopExample/export.sh create mode 100644 test_projects/ios/FlankGameLoopExample/exportOptions.plist create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.pbxproj create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloop/Actions.sks create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloop/AppDelegate.swift create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloop/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloop/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloop/Assets.xcassets/Contents.json create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloop/Base.lproj/Main.storyboard create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloop/FTLGameLoop.swift create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloop/GameScene.sks create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloop/GameScene.swift create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloop/GameViewController.swift create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloop/Info.plist create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloopTests/Info.plist create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloopTests/flankgameloopTests.swift create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloopUITests/Info.plist create mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloopUITests/flankgameloopUITests.swift create mode 100755 test_projects/ios/FlankGameLoopExample/ftl.sh diff --git a/test_projects/ios/FlankGameLoopExample/export.sh b/test_projects/ios/FlankGameLoopExample/export.sh new file mode 100755 index 0000000000..479588cf76 --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/export.sh @@ -0,0 +1,15 @@ +rm -rf build/ + +echo "Archiving..." +xcodebuild -project "flankgameloop.xcodeproj" \ +-scheme flankgameloop \ +-sdk iphoneos \ +-allowProvisioningUpdates \ +archive -archivePath "build/gameloop.xcarchive" | xcpretty + +echo "Exporting..." +xcodebuild -exportArchive \ +-archivePath "build/gameloop.xcarchive" \ +-allowProvisioningUpdates \ +-exportOptionsPlist "exportOptions.plist" \ +-exportPath "build/ipa/" diff --git a/test_projects/ios/FlankGameLoopExample/exportOptions.plist b/test_projects/ios/FlankGameLoopExample/exportOptions.plist new file mode 100644 index 0000000000..de1f315ed0 --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/exportOptions.plist @@ -0,0 +1,10 @@ + + + + + method + ad-hoc + teamID + L2UF9MLSM6 + + diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.pbxproj b/test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..eab49f2aeb --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.pbxproj @@ -0,0 +1,598 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 3201E305255D3E9D00347837 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3201E304255D3E9D00347837 /* AppDelegate.swift */; }; + 3201E307255D3E9D00347837 /* GameScene.sks in Resources */ = {isa = PBXBuildFile; fileRef = 3201E306255D3E9D00347837 /* GameScene.sks */; }; + 3201E309255D3E9D00347837 /* Actions.sks in Resources */ = {isa = PBXBuildFile; fileRef = 3201E308255D3E9D00347837 /* Actions.sks */; }; + 3201E30B255D3E9D00347837 /* GameScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3201E30A255D3E9D00347837 /* GameScene.swift */; }; + 3201E30D255D3E9D00347837 /* GameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3201E30C255D3E9D00347837 /* GameViewController.swift */; }; + 3201E310255D3E9D00347837 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3201E30E255D3E9D00347837 /* Main.storyboard */; }; + 3201E312255D3E9E00347837 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3201E311255D3E9E00347837 /* Assets.xcassets */; }; + 3201E31D255D3E9E00347837 /* flankgameloopTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3201E31C255D3E9E00347837 /* flankgameloopTests.swift */; }; + 3201E328255D3E9E00347837 /* flankgameloopUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3201E327255D3E9E00347837 /* flankgameloopUITests.swift */; }; + 3201E33F255D48D900347837 /* FTLGameLoop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3201E33E255D48D900347837 /* FTLGameLoop.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 3201E319255D3E9E00347837 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 3201E2F9255D3E9D00347837 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3201E300255D3E9D00347837; + remoteInfo = flankgameloop; + }; + 3201E324255D3E9E00347837 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 3201E2F9255D3E9D00347837 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3201E300255D3E9D00347837; + remoteInfo = flankgameloop; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 3201E301255D3E9D00347837 /* flankgameloop.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = flankgameloop.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 3201E304255D3E9D00347837 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 3201E306255D3E9D00347837 /* GameScene.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = GameScene.sks; sourceTree = ""; }; + 3201E308255D3E9D00347837 /* Actions.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = Actions.sks; sourceTree = ""; }; + 3201E30A255D3E9D00347837 /* GameScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameScene.swift; sourceTree = ""; }; + 3201E30C255D3E9D00347837 /* GameViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameViewController.swift; sourceTree = ""; }; + 3201E30F255D3E9D00347837 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 3201E311255D3E9E00347837 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 3201E313255D3E9E00347837 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3201E318255D3E9E00347837 /* flankgameloopTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = flankgameloopTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3201E31C255D3E9E00347837 /* flankgameloopTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = flankgameloopTests.swift; sourceTree = ""; }; + 3201E31E255D3E9E00347837 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3201E323255D3E9E00347837 /* flankgameloopUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = flankgameloopUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3201E327255D3E9E00347837 /* flankgameloopUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = flankgameloopUITests.swift; sourceTree = ""; }; + 3201E329255D3E9E00347837 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3201E33E255D48D900347837 /* FTLGameLoop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FTLGameLoop.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 3201E2FE255D3E9D00347837 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3201E315255D3E9E00347837 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3201E320255D3E9E00347837 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 3201E2F8255D3E9D00347837 = { + isa = PBXGroup; + children = ( + 3201E303255D3E9D00347837 /* flankgameloop */, + 3201E31B255D3E9E00347837 /* flankgameloopTests */, + 3201E326255D3E9E00347837 /* flankgameloopUITests */, + 3201E302255D3E9D00347837 /* Products */, + ); + sourceTree = ""; + }; + 3201E302255D3E9D00347837 /* Products */ = { + isa = PBXGroup; + children = ( + 3201E301255D3E9D00347837 /* flankgameloop.app */, + 3201E318255D3E9E00347837 /* flankgameloopTests.xctest */, + 3201E323255D3E9E00347837 /* flankgameloopUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 3201E303255D3E9D00347837 /* flankgameloop */ = { + isa = PBXGroup; + children = ( + 3201E304255D3E9D00347837 /* AppDelegate.swift */, + 3201E306255D3E9D00347837 /* GameScene.sks */, + 3201E308255D3E9D00347837 /* Actions.sks */, + 3201E30A255D3E9D00347837 /* GameScene.swift */, + 3201E30C255D3E9D00347837 /* GameViewController.swift */, + 3201E30E255D3E9D00347837 /* Main.storyboard */, + 3201E311255D3E9E00347837 /* Assets.xcassets */, + 3201E313255D3E9E00347837 /* Info.plist */, + 3201E33E255D48D900347837 /* FTLGameLoop.swift */, + ); + path = flankgameloop; + sourceTree = ""; + }; + 3201E31B255D3E9E00347837 /* flankgameloopTests */ = { + isa = PBXGroup; + children = ( + 3201E31C255D3E9E00347837 /* flankgameloopTests.swift */, + 3201E31E255D3E9E00347837 /* Info.plist */, + ); + path = flankgameloopTests; + sourceTree = ""; + }; + 3201E326255D3E9E00347837 /* flankgameloopUITests */ = { + isa = PBXGroup; + children = ( + 3201E327255D3E9E00347837 /* flankgameloopUITests.swift */, + 3201E329255D3E9E00347837 /* Info.plist */, + ); + path = flankgameloopUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 3201E300255D3E9D00347837 /* flankgameloop */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3201E32C255D3E9E00347837 /* Build configuration list for PBXNativeTarget "flankgameloop" */; + buildPhases = ( + 3201E2FD255D3E9D00347837 /* Sources */, + 3201E2FE255D3E9D00347837 /* Frameworks */, + 3201E2FF255D3E9D00347837 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = flankgameloop; + productName = flankgameloop; + productReference = 3201E301255D3E9D00347837 /* flankgameloop.app */; + productType = "com.apple.product-type.application"; + }; + 3201E317255D3E9E00347837 /* flankgameloopTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3201E32F255D3E9E00347837 /* Build configuration list for PBXNativeTarget "flankgameloopTests" */; + buildPhases = ( + 3201E314255D3E9E00347837 /* Sources */, + 3201E315255D3E9E00347837 /* Frameworks */, + 3201E316255D3E9E00347837 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 3201E31A255D3E9E00347837 /* PBXTargetDependency */, + ); + name = flankgameloopTests; + productName = flankgameloopTests; + productReference = 3201E318255D3E9E00347837 /* flankgameloopTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 3201E322255D3E9E00347837 /* flankgameloopUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3201E332255D3E9E00347837 /* Build configuration list for PBXNativeTarget "flankgameloopUITests" */; + buildPhases = ( + 3201E31F255D3E9E00347837 /* Sources */, + 3201E320255D3E9E00347837 /* Frameworks */, + 3201E321255D3E9E00347837 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 3201E325255D3E9E00347837 /* PBXTargetDependency */, + ); + name = flankgameloopUITests; + productName = flankgameloopUITests; + productReference = 3201E323255D3E9E00347837 /* flankgameloopUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 3201E2F9255D3E9D00347837 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1210; + LastUpgradeCheck = 1210; + TargetAttributes = { + 3201E300255D3E9D00347837 = { + CreatedOnToolsVersion = 12.1; + }; + 3201E317255D3E9E00347837 = { + CreatedOnToolsVersion = 12.1; + TestTargetID = 3201E300255D3E9D00347837; + }; + 3201E322255D3E9E00347837 = { + CreatedOnToolsVersion = 12.1; + TestTargetID = 3201E300255D3E9D00347837; + }; + }; + }; + buildConfigurationList = 3201E2FC255D3E9D00347837 /* Build configuration list for PBXProject "flankgameloop" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 3201E2F8255D3E9D00347837; + productRefGroup = 3201E302255D3E9D00347837 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 3201E300255D3E9D00347837 /* flankgameloop */, + 3201E317255D3E9E00347837 /* flankgameloopTests */, + 3201E322255D3E9E00347837 /* flankgameloopUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 3201E2FF255D3E9D00347837 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3201E310255D3E9D00347837 /* Main.storyboard in Resources */, + 3201E307255D3E9D00347837 /* GameScene.sks in Resources */, + 3201E312255D3E9E00347837 /* Assets.xcassets in Resources */, + 3201E309255D3E9D00347837 /* Actions.sks in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3201E316255D3E9E00347837 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3201E321255D3E9E00347837 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 3201E2FD255D3E9D00347837 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3201E30B255D3E9D00347837 /* GameScene.swift in Sources */, + 3201E30D255D3E9D00347837 /* GameViewController.swift in Sources */, + 3201E33F255D48D900347837 /* FTLGameLoop.swift in Sources */, + 3201E305255D3E9D00347837 /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3201E314255D3E9E00347837 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3201E31D255D3E9E00347837 /* flankgameloopTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3201E31F255D3E9E00347837 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3201E328255D3E9E00347837 /* flankgameloopUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 3201E31A255D3E9E00347837 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3201E300255D3E9D00347837 /* flankgameloop */; + targetProxy = 3201E319255D3E9E00347837 /* PBXContainerItemProxy */; + }; + 3201E325255D3E9E00347837 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3201E300255D3E9D00347837 /* flankgameloop */; + targetProxy = 3201E324255D3E9E00347837 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 3201E30E255D3E9D00347837 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 3201E30F255D3E9D00347837 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 3201E32A255D3E9E00347837 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 3201E32B255D3E9E00347837 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 3201E32D255D3E9E00347837 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = L2UF9MLSM6; + INFOPLIST_FILE = flankgameloop/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.gogoapps.flankgameloop; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 3201E32E255D3E9E00347837 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = L2UF9MLSM6; + INFOPLIST_FILE = flankgameloop/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.gogoapps.flankgameloop; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 3201E330255D3E9E00347837 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = L2UF9MLSM6; + INFOPLIST_FILE = flankgameloopTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.gogoapps.flankgameloopTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/flankgameloop.app/flankgameloop"; + }; + name = Debug; + }; + 3201E331255D3E9E00347837 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = L2UF9MLSM6; + INFOPLIST_FILE = flankgameloopTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.gogoapps.flankgameloopTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/flankgameloop.app/flankgameloop"; + }; + name = Release; + }; + 3201E333255D3E9E00347837 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = L2UF9MLSM6; + INFOPLIST_FILE = flankgameloopUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.gogoapps.flankgameloopUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = flankgameloop; + }; + name = Debug; + }; + 3201E334255D3E9E00347837 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = L2UF9MLSM6; + INFOPLIST_FILE = flankgameloopUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.gogoapps.flankgameloopUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = flankgameloop; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 3201E2FC255D3E9D00347837 /* Build configuration list for PBXProject "flankgameloop" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3201E32A255D3E9E00347837 /* Debug */, + 3201E32B255D3E9E00347837 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3201E32C255D3E9E00347837 /* Build configuration list for PBXNativeTarget "flankgameloop" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3201E32D255D3E9E00347837 /* Debug */, + 3201E32E255D3E9E00347837 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3201E32F255D3E9E00347837 /* Build configuration list for PBXNativeTarget "flankgameloopTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3201E330255D3E9E00347837 /* Debug */, + 3201E331255D3E9E00347837 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3201E332255D3E9E00347837 /* Build configuration list for PBXNativeTarget "flankgameloopUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3201E333255D3E9E00347837 /* Debug */, + 3201E334255D3E9E00347837 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 3201E2F9255D3E9D00347837 /* Project object */; +} diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..919434a625 --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop/Actions.sks b/test_projects/ios/FlankGameLoopExample/flankgameloop/Actions.sks new file mode 100644 index 0000000000000000000000000000000000000000..053052001e4f4fd4d597c1c74f1ab1919ec27642 GIT binary patch literal 1892 zcmZ`)Yj6`)6uz&eFQ92@dGy_G5(=enKp96$L5ff*(6lru;IeI&c1yYm*-fOibnb+L ziXbnkh*;Vbc~r*AOL@vLhztS(Eh-2K3jT3q#^DDlI*vCFpjFt+-Fx=z-gC}(zVF^t zIc&13<>Xv}2or9=_dl5RZpo?2cEzl>SJg??nrhLD&gxp3xy$sL-4PAo%Jy#ExRB7O z=;0$qjm{X8nUz1WVA9l@TDfkqtzNM^URk~7t+ngczrESpxqbJc!$*#v{qo#bm#=+y z{YJT7aoKFWVc`)22kRh)+mNN=`{lyd%r-RrS+&|N#FSadQUV85ii(Z)Lojir=Xgp25sf#I^mi%JG^u!s( zDK90>ESWVseojKEiRVofW{c67zTjnHp|OhRCDS|~Hp#}|yCp#v&7R6cXN{zpHl6qjc~w zO^^60c+l0=&Y0pK8ex^M=H}##Nny8TJxiRbRvFNpBGyahfGMdJrec2&I#rk3Y$`7F z3(;I+n&saXPvL;~aj>kJao}0*@fbZkzslsVHh?CDCI!(X(?pugej#l5uqHea4dM%e z66;^_hK+3V6gr(^gLi|QA=uPf$*Pr>xFn@o>U_uL?(_Iqi|;ZmzHivZr&D84a(X5? z1Iyk=+z&g+B=nU9kANsdi(Vlc;w};)px&M>h$e%Kt=8c|UIN$CZ z!@_0y!zDj4-1!TP&S_4&%h7q>Ck6S(A!oZEoOf^keleoobaeyEEu6&wVy4H$NJL0wCxjOH9R5gJdlX z9-cinZ~gdFxgaZx>}5{7U86Y^vM-}R96L}lK^}Mp*ntZ)ffle9w1UlG3)l+UKs(q4 zy1`zs9~=aqg2UhhxCE|&+u$zv6A~B+<6$C9hN+N;1~?Lqf*Eiud>$6TX>d9$fpee< zmct5I2baSY@HO}bd=svLYvFph5pIHQa3|aYyWw8AA0C9a;I9ax5Htj(pbRtx%|SA9 zqZYIdwW7^v3)+g>P&@LX?Pv$ug}Trl^bz_P?L!C9C+HA5f{vlj&>3_I^`PtM4!Vo( zqu(*YAvhYxV;+yhId}rL;zhU?*I^r0umd}>hTV86Zp2Nv8B^@REqEn<9k0Tx@h04c z+wpFE03XID@#pv~zJjmf+xR~I13$oj<9`Ssh!8S>gpw!{N0Lbz(Gw#{Ck12%5s5+^ z#7Q*bCQC^pX(G*p5)Wx1Ye*}3k9f%ra-5tXC&?*tnw%kL$vJX?TqKuCFS$W}Cclt- zP%{{=8& BT4?|P literal 0 HcmV?d00001 diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop/AppDelegate.swift b/test_projects/ios/FlankGameLoopExample/flankgameloop/AppDelegate.swift new file mode 100644 index 0000000000..e9e6b84fc4 --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/flankgameloop/AppDelegate.swift @@ -0,0 +1,27 @@ +// +// AppDelegate.swift +// flankgameloop +// +// Created by Axel Zuziak on 12/11/2020. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + return true + } + + func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { + let gameLoop = FTLGameLoopScenario(url: url) + gameLoop?.start() + + return true + } +} + diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop/Assets.xcassets/AccentColor.colorset/Contents.json b/test_projects/ios/FlankGameLoopExample/flankgameloop/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000000..eb87897008 --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/flankgameloop/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop/Assets.xcassets/AppIcon.appiconset/Contents.json b/test_projects/ios/FlankGameLoopExample/flankgameloop/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..9221b9bb1a --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/flankgameloop/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop/Assets.xcassets/Contents.json b/test_projects/ios/FlankGameLoopExample/flankgameloop/Assets.xcassets/Contents.json new file mode 100644 index 0000000000..73c00596a7 --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/flankgameloop/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop/Base.lproj/Main.storyboard b/test_projects/ios/FlankGameLoopExample/flankgameloop/Base.lproj/Main.storyboard new file mode 100644 index 0000000000..2cc971a4a2 --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/flankgameloop/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop/FTLGameLoop.swift b/test_projects/ios/FlankGameLoopExample/flankgameloop/FTLGameLoop.swift new file mode 100644 index 0000000000..53b5b4d373 --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/flankgameloop/FTLGameLoop.swift @@ -0,0 +1,63 @@ +import Foundation +import UIKit + +class FTLGameLoopScenario { + let scenarioNumber: Int? + + var scenarioName: String { + if let n = scenarioNumber { return "\(n)" } + return "default" + } + + init?(url: URL) { + guard let components = URLComponents(url: url, resolvingAgainstBaseURL: true) else { + print("[FTLGameLoopScenario] Incorrect URL") + return nil + } + guard components.scheme == "firebase-game-loop" else { + print("[FTLGameLoopScenario] Incorrect URL scheme") + return nil + } + + if let queryItem = components.queryItems?.first(where: { $0.name == "scenario" })?.value, let scenarioNum = Int(queryItem) { + self.scenarioNumber = scenarioNum + } else { + self.scenarioNumber = nil + } + + print("[FTLGameLoopScenario] FTLGameLoopScenario initialized with scenario number: \(scenarioNumber ?? -1)") + } + + func start() { + print("[FTLGameLoopScenario] FTLGameLoopScenario started") + DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { + self.finishGameLoop() + } + } + + func finishGameLoop() { + writeResults() + print("[FTLGameLoopScenario] FTLGameLoopScenario finished") + let url = URL(string: "firebase-game-loop-complete://")! + UIApplication.shared.open(url) + } + + func writeResults() { + let text = "Greetings from game loops!" + let fileName = "results_scenario_\(scenarioName).txt" + let fileManager = FileManager.default + + print("[FTLGameLoopScenario] Saving results to: \(fileName)") + do { + let docs = try fileManager.url(for: .documentDirectory, + in: .userDomainMask, + appropriateFor: nil, + create: true) + let resultsDir = docs.appendingPathComponent("GameLoopResults") + try fileManager.createDirectory(at: resultsDir, withIntermediateDirectories: true, attributes: nil) + let fileURL = resultsDir.appendingPathComponent(fileName) + try text.write(to: fileURL, atomically: false, encoding: .utf8) + } catch { + } + } +} diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop/GameScene.sks b/test_projects/ios/FlankGameLoopExample/flankgameloop/GameScene.sks new file mode 100644 index 0000000000000000000000000000000000000000..4fe4d9f41e763cb136277f8a00e3f7ce3ea3daa1 GIT binary patch literal 4694 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 literal 0 HcmV?d00001 diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop/GameScene.swift b/test_projects/ios/FlankGameLoopExample/flankgameloop/GameScene.swift new file mode 100644 index 0000000000..2bce7fdaa8 --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/flankgameloop/GameScene.swift @@ -0,0 +1,88 @@ +// +// GameScene.swift +// flankgameloop +// +// Created by Axel Zuziak on 12/11/2020. +// + +import SpriteKit +import GameplayKit + +class GameScene: SKScene { + + private var label : SKLabelNode? + private var spinnyNode : SKShapeNode? + + override func didMove(to view: SKView) { + + // Get label node from scene and store it for use later + self.label = self.childNode(withName: "//helloLabel") as? SKLabelNode + if let label = self.label { + label.alpha = 0.0 + label.run(SKAction.fadeIn(withDuration: 2.0)) + } + + // Create shape node to use during mouse interaction + let w = (self.size.width + self.size.height) * 0.05 + self.spinnyNode = SKShapeNode.init(rectOf: CGSize.init(width: w, height: w), cornerRadius: w * 0.3) + + if let spinnyNode = self.spinnyNode { + spinnyNode.lineWidth = 2.5 + + spinnyNode.run(SKAction.repeatForever(SKAction.rotate(byAngle: CGFloat(Double.pi), duration: 1))) + spinnyNode.run(SKAction.sequence([SKAction.wait(forDuration: 0.5), + SKAction.fadeOut(withDuration: 0.5), + SKAction.removeFromParent()])) + } + } + + + func touchDown(atPoint pos : CGPoint) { + if let n = self.spinnyNode?.copy() as! SKShapeNode? { + n.position = pos + n.strokeColor = SKColor.green + self.addChild(n) + } + } + + func touchMoved(toPoint pos : CGPoint) { + if let n = self.spinnyNode?.copy() as! SKShapeNode? { + n.position = pos + n.strokeColor = SKColor.blue + self.addChild(n) + } + } + + func touchUp(atPoint pos : CGPoint) { + if let n = self.spinnyNode?.copy() as! SKShapeNode? { + n.position = pos + n.strokeColor = SKColor.red + self.addChild(n) + } + } + + override func touchesBegan(_ touches: Set, with event: UIEvent?) { + if let label = self.label { + label.run(SKAction.init(named: "Pulse")!, withKey: "fadeInOut") + } + + for t in touches { self.touchDown(atPoint: t.location(in: self)) } + } + + override func touchesMoved(_ touches: Set, with event: UIEvent?) { + for t in touches { self.touchMoved(toPoint: t.location(in: self)) } + } + + override func touchesEnded(_ touches: Set, with event: UIEvent?) { + for t in touches { self.touchUp(atPoint: t.location(in: self)) } + } + + override func touchesCancelled(_ touches: Set, with event: UIEvent?) { + for t in touches { self.touchUp(atPoint: t.location(in: self)) } + } + + + override func update(_ currentTime: TimeInterval) { + // Called before each frame is rendered + } +} diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop/GameViewController.swift b/test_projects/ios/FlankGameLoopExample/flankgameloop/GameViewController.swift new file mode 100644 index 0000000000..958a02fbe1 --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/flankgameloop/GameViewController.swift @@ -0,0 +1,49 @@ +// +// GameViewController.swift +// flankgameloop +// +// Created by Axel Zuziak on 12/11/2020. +// + +import UIKit +import SpriteKit +import GameplayKit + +class GameViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + if let view = self.view as! SKView? { + // Load the SKScene from 'GameScene.sks' + if let scene = SKScene(fileNamed: "GameScene") { + // Set the scale mode to scale to fit the window + scene.scaleMode = .aspectFill + + // Present the scene + view.presentScene(scene) + } + + view.ignoresSiblingOrder = true + + view.showsFPS = true + view.showsNodeCount = true + } + } + + override var shouldAutorotate: Bool { + return true + } + + override var supportedInterfaceOrientations: UIInterfaceOrientationMask { + if UIDevice.current.userInterfaceIdiom == .phone { + return .allButUpsideDown + } else { + return .all + } + } + + override var prefersStatusBarHidden: Bool { + return true + } +} diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop/Info.plist b/test_projects/ios/FlankGameLoopExample/flankgameloop/Info.plist new file mode 100644 index 0000000000..bc063be2b7 --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/flankgameloop/Info.plist @@ -0,0 +1,60 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLName + + CFBundleURLSchemes + + firebase-game-loop + + + + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIApplicationSupportsIndirectInputEvents + + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UIStatusBarHidden + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloopTests/Info.plist b/test_projects/ios/FlankGameLoopExample/flankgameloopTests/Info.plist new file mode 100644 index 0000000000..64d65ca495 --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/flankgameloopTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloopTests/flankgameloopTests.swift b/test_projects/ios/FlankGameLoopExample/flankgameloopTests/flankgameloopTests.swift new file mode 100644 index 0000000000..95db8711ba --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/flankgameloopTests/flankgameloopTests.swift @@ -0,0 +1,33 @@ +// +// flankgameloopTests.swift +// flankgameloopTests +// +// Created by Axel Zuziak on 12/11/2020. +// + +import XCTest +@testable import flankgameloop + +class flankgameloopTests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() throws { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloopUITests/Info.plist b/test_projects/ios/FlankGameLoopExample/flankgameloopUITests/Info.plist new file mode 100644 index 0000000000..64d65ca495 --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/flankgameloopUITests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloopUITests/flankgameloopUITests.swift b/test_projects/ios/FlankGameLoopExample/flankgameloopUITests/flankgameloopUITests.swift new file mode 100644 index 0000000000..31b73c8c20 --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/flankgameloopUITests/flankgameloopUITests.swift @@ -0,0 +1,42 @@ +// +// flankgameloopUITests.swift +// flankgameloopUITests +// +// Created by Axel Zuziak on 12/11/2020. +// + +import XCTest + +class flankgameloopUITests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // UI tests must launch the application that they test. + let app = XCUIApplication() + app.launch() + + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testLaunchPerformance() throws { + if #available(macOS 10.15, iOS 13.0, tvOS 13.0, *) { + // This measures how long it takes to launch your application. + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } + } +} diff --git a/test_projects/ios/FlankGameLoopExample/ftl.sh b/test_projects/ios/FlankGameLoopExample/ftl.sh new file mode 100755 index 0000000000..0c0f433c9b --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/ftl.sh @@ -0,0 +1,3 @@ +gcloud alpha firebase test ios run \ +--type game-loop --app build/ipa/flankgameloop.ipa --scenario-numbers 1 \ +--device model=iphone11,version=13.6 \ No newline at end of file From 60293a2305836754c2d955a8d1149ee047fc850a Mon Sep 17 00:00:00 2001 From: Axel Zuziak Date: Tue, 17 Nov 2020 12:10:02 +0100 Subject: [PATCH 2/7] Removed unused test targets from example project --- .../flankgameloop.xcodeproj/project.pbxproj | 252 ------------------ .../flankgameloopTests/Info.plist | 22 -- .../flankgameloopTests.swift | 33 --- .../flankgameloopUITests/Info.plist | 22 -- .../flankgameloopUITests.swift | 42 --- 5 files changed, 371 deletions(-) delete mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloopTests/Info.plist delete mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloopTests/flankgameloopTests.swift delete mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloopUITests/Info.plist delete mode 100644 test_projects/ios/FlankGameLoopExample/flankgameloopUITests/flankgameloopUITests.swift diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.pbxproj b/test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.pbxproj index eab49f2aeb..da57f6f1a1 100644 --- a/test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.pbxproj +++ b/test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.pbxproj @@ -14,28 +14,9 @@ 3201E30D255D3E9D00347837 /* GameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3201E30C255D3E9D00347837 /* GameViewController.swift */; }; 3201E310255D3E9D00347837 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3201E30E255D3E9D00347837 /* Main.storyboard */; }; 3201E312255D3E9E00347837 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3201E311255D3E9E00347837 /* Assets.xcassets */; }; - 3201E31D255D3E9E00347837 /* flankgameloopTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3201E31C255D3E9E00347837 /* flankgameloopTests.swift */; }; - 3201E328255D3E9E00347837 /* flankgameloopUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3201E327255D3E9E00347837 /* flankgameloopUITests.swift */; }; 3201E33F255D48D900347837 /* FTLGameLoop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3201E33E255D48D900347837 /* FTLGameLoop.swift */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - 3201E319255D3E9E00347837 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 3201E2F9255D3E9D00347837 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 3201E300255D3E9D00347837; - remoteInfo = flankgameloop; - }; - 3201E324255D3E9E00347837 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 3201E2F9255D3E9D00347837 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 3201E300255D3E9D00347837; - remoteInfo = flankgameloop; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXFileReference section */ 3201E301255D3E9D00347837 /* flankgameloop.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = flankgameloop.app; sourceTree = BUILT_PRODUCTS_DIR; }; 3201E304255D3E9D00347837 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -46,12 +27,6 @@ 3201E30F255D3E9D00347837 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 3201E311255D3E9E00347837 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 3201E313255D3E9E00347837 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 3201E318255D3E9E00347837 /* flankgameloopTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = flankgameloopTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3201E31C255D3E9E00347837 /* flankgameloopTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = flankgameloopTests.swift; sourceTree = ""; }; - 3201E31E255D3E9E00347837 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 3201E323255D3E9E00347837 /* flankgameloopUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = flankgameloopUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3201E327255D3E9E00347837 /* flankgameloopUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = flankgameloopUITests.swift; sourceTree = ""; }; - 3201E329255D3E9E00347837 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 3201E33E255D48D900347837 /* FTLGameLoop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FTLGameLoop.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -63,20 +38,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 3201E315255D3E9E00347837 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3201E320255D3E9E00347837 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -84,8 +45,6 @@ isa = PBXGroup; children = ( 3201E303255D3E9D00347837 /* flankgameloop */, - 3201E31B255D3E9E00347837 /* flankgameloopTests */, - 3201E326255D3E9E00347837 /* flankgameloopUITests */, 3201E302255D3E9D00347837 /* Products */, ); sourceTree = ""; @@ -94,8 +53,6 @@ isa = PBXGroup; children = ( 3201E301255D3E9D00347837 /* flankgameloop.app */, - 3201E318255D3E9E00347837 /* flankgameloopTests.xctest */, - 3201E323255D3E9E00347837 /* flankgameloopUITests.xctest */, ); name = Products; sourceTree = ""; @@ -116,24 +73,6 @@ path = flankgameloop; sourceTree = ""; }; - 3201E31B255D3E9E00347837 /* flankgameloopTests */ = { - isa = PBXGroup; - children = ( - 3201E31C255D3E9E00347837 /* flankgameloopTests.swift */, - 3201E31E255D3E9E00347837 /* Info.plist */, - ); - path = flankgameloopTests; - sourceTree = ""; - }; - 3201E326255D3E9E00347837 /* flankgameloopUITests */ = { - isa = PBXGroup; - children = ( - 3201E327255D3E9E00347837 /* flankgameloopUITests.swift */, - 3201E329255D3E9E00347837 /* Info.plist */, - ); - path = flankgameloopUITests; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -154,42 +93,6 @@ productReference = 3201E301255D3E9D00347837 /* flankgameloop.app */; productType = "com.apple.product-type.application"; }; - 3201E317255D3E9E00347837 /* flankgameloopTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3201E32F255D3E9E00347837 /* Build configuration list for PBXNativeTarget "flankgameloopTests" */; - buildPhases = ( - 3201E314255D3E9E00347837 /* Sources */, - 3201E315255D3E9E00347837 /* Frameworks */, - 3201E316255D3E9E00347837 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 3201E31A255D3E9E00347837 /* PBXTargetDependency */, - ); - name = flankgameloopTests; - productName = flankgameloopTests; - productReference = 3201E318255D3E9E00347837 /* flankgameloopTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 3201E322255D3E9E00347837 /* flankgameloopUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3201E332255D3E9E00347837 /* Build configuration list for PBXNativeTarget "flankgameloopUITests" */; - buildPhases = ( - 3201E31F255D3E9E00347837 /* Sources */, - 3201E320255D3E9E00347837 /* Frameworks */, - 3201E321255D3E9E00347837 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 3201E325255D3E9E00347837 /* PBXTargetDependency */, - ); - name = flankgameloopUITests; - productName = flankgameloopUITests; - productReference = 3201E323255D3E9E00347837 /* flankgameloopUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -202,14 +105,6 @@ 3201E300255D3E9D00347837 = { CreatedOnToolsVersion = 12.1; }; - 3201E317255D3E9E00347837 = { - CreatedOnToolsVersion = 12.1; - TestTargetID = 3201E300255D3E9D00347837; - }; - 3201E322255D3E9E00347837 = { - CreatedOnToolsVersion = 12.1; - TestTargetID = 3201E300255D3E9D00347837; - }; }; }; buildConfigurationList = 3201E2FC255D3E9D00347837 /* Build configuration list for PBXProject "flankgameloop" */; @@ -226,8 +121,6 @@ projectRoot = ""; targets = ( 3201E300255D3E9D00347837 /* flankgameloop */, - 3201E317255D3E9E00347837 /* flankgameloopTests */, - 3201E322255D3E9E00347837 /* flankgameloopUITests */, ); }; /* End PBXProject section */ @@ -244,20 +137,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 3201E316255D3E9E00347837 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3201E321255D3E9E00347837 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -272,37 +151,8 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 3201E314255D3E9E00347837 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 3201E31D255D3E9E00347837 /* flankgameloopTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3201E31F255D3E9E00347837 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 3201E328255D3E9E00347837 /* flankgameloopUITests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - 3201E31A255D3E9E00347837 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 3201E300255D3E9D00347837 /* flankgameloop */; - targetProxy = 3201E319255D3E9E00347837 /* PBXContainerItemProxy */; - }; - 3201E325255D3E9E00347837 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 3201E300255D3E9D00347837 /* flankgameloop */; - targetProxy = 3201E324255D3E9E00347837 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin PBXVariantGroup section */ 3201E30E255D3E9D00347837 /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -469,90 +319,6 @@ }; name = Release; }; - 3201E330255D3E9E00347837 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = L2UF9MLSM6; - INFOPLIST_FILE = flankgameloopTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = io.gogoapps.flankgameloopTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/flankgameloop.app/flankgameloop"; - }; - name = Debug; - }; - 3201E331255D3E9E00347837 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = L2UF9MLSM6; - INFOPLIST_FILE = flankgameloopTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = io.gogoapps.flankgameloopTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/flankgameloop.app/flankgameloop"; - }; - name = Release; - }; - 3201E333255D3E9E00347837 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = L2UF9MLSM6; - INFOPLIST_FILE = flankgameloopUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = io.gogoapps.flankgameloopUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = flankgameloop; - }; - name = Debug; - }; - 3201E334255D3E9E00347837 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = L2UF9MLSM6; - INFOPLIST_FILE = flankgameloopUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = io.gogoapps.flankgameloopUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = flankgameloop; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -574,24 +340,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3201E32F255D3E9E00347837 /* Build configuration list for PBXNativeTarget "flankgameloopTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3201E330255D3E9E00347837 /* Debug */, - 3201E331255D3E9E00347837 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3201E332255D3E9E00347837 /* Build configuration list for PBXNativeTarget "flankgameloopUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3201E333255D3E9E00347837 /* Debug */, - 3201E334255D3E9E00347837 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ }; rootObject = 3201E2F9255D3E9D00347837 /* Project object */; diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloopTests/Info.plist b/test_projects/ios/FlankGameLoopExample/flankgameloopTests/Info.plist deleted file mode 100644 index 64d65ca495..0000000000 --- a/test_projects/ios/FlankGameLoopExample/flankgameloopTests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloopTests/flankgameloopTests.swift b/test_projects/ios/FlankGameLoopExample/flankgameloopTests/flankgameloopTests.swift deleted file mode 100644 index 95db8711ba..0000000000 --- a/test_projects/ios/FlankGameLoopExample/flankgameloopTests/flankgameloopTests.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// flankgameloopTests.swift -// flankgameloopTests -// -// Created by Axel Zuziak on 12/11/2020. -// - -import XCTest -@testable import flankgameloop - -class flankgameloopTests: XCTestCase { - - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. - } - - override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - func testExample() throws { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. - } - - func testPerformanceExample() throws { - // This is an example of a performance test case. - self.measure { - // Put the code you want to measure the time of here. - } - } - -} diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloopUITests/Info.plist b/test_projects/ios/FlankGameLoopExample/flankgameloopUITests/Info.plist deleted file mode 100644 index 64d65ca495..0000000000 --- a/test_projects/ios/FlankGameLoopExample/flankgameloopUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloopUITests/flankgameloopUITests.swift b/test_projects/ios/FlankGameLoopExample/flankgameloopUITests/flankgameloopUITests.swift deleted file mode 100644 index 31b73c8c20..0000000000 --- a/test_projects/ios/FlankGameLoopExample/flankgameloopUITests/flankgameloopUITests.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// flankgameloopUITests.swift -// flankgameloopUITests -// -// Created by Axel Zuziak on 12/11/2020. -// - -import XCTest - -class flankgameloopUITests: XCTestCase { - - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. - - // In UI tests it is usually best to stop immediately when a failure occurs. - continueAfterFailure = false - - // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. - } - - override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - func testExample() throws { - // UI tests must launch the application that they test. - let app = XCUIApplication() - app.launch() - - // Use recording to get started writing UI tests. - // Use XCTAssert and related functions to verify your tests produce the correct results. - } - - func testLaunchPerformance() throws { - if #available(macOS 10.15, iOS 13.0, tvOS 13.0, *) { - // This measures how long it takes to launch your application. - measure(metrics: [XCTApplicationLaunchMetric()]) { - XCUIApplication().launch() - } - } - } -} From d23d3b51fa2fe6bdb83ffc63ffbf398904d72e27 Mon Sep 17 00:00:00 2001 From: Axel Zuziak Date: Thu, 19 Nov 2020 18:38:08 +0100 Subject: [PATCH 3/7] Flank scripts for generating test artifacts * scripts for archive/export IPA for ios game loop * scripts for creating test artifacts for iOS Multiple test targets example (test plans) --- .../flank/scripts/shell/ios/BuildExample.kt | 5 +- .../flank/scripts/shell/ios/BuildFtl.kt | 2 +- .../scripts/shell/ios/IosBuildCommand.kt | 18 ++++- .../scripts/shell/ios/SetupIosEnvCommand.kt | 4 +- .../shell/ops/BuildEarlGreyExampleCommand.kt | 2 +- .../shell/ops/BuildFlankExampleCommand.kt | 2 +- .../shell/ops/BuildGameLoopExampleCommand.kt | 32 ++++++++ .../flank/scripts/shell/ops/BuildIosIPA.kt | 47 +++++++++++ .../{BuildIos.kt => BuildIosTestArtifacts.kt} | 20 ++--- .../shell/ops/BuildMultiTestTargetsExample.kt | 32 ++++++++ .../flank/scripts/shell/ops/OpsCommand.kt | 2 + .../flank/scripts/utils/DownloadSoftware.kt | 5 +- .../project.pbxproj | 20 ++--- .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcschemes/FlankGameLoopExample.xcscheme | 79 +++++++++++++++++++ 16 files changed, 239 insertions(+), 31 deletions(-) create mode 100644 flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildGameLoopExampleCommand.kt create mode 100644 flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIosIPA.kt rename flank-scripts/src/main/kotlin/flank/scripts/shell/ops/{BuildIos.kt => BuildIosTestArtifacts.kt} (86%) create mode 100644 flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildMultiTestTargetsExample.kt rename test_projects/ios/FlankGameLoopExample/{flankgameloop.xcodeproj => FlankGameLoopExample.xcodeproj}/project.pbxproj (94%) rename test_projects/ios/FlankGameLoopExample/{flankgameloop.xcodeproj => FlankGameLoopExample.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (100%) rename test_projects/ios/FlankGameLoopExample/{flankgameloop.xcodeproj => FlankGameLoopExample.xcodeproj}/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) create mode 100644 test_projects/ios/FlankGameLoopExample/FlankGameLoopExample.xcodeproj/xcshareddata/xcschemes/FlankGameLoopExample.xcscheme diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/BuildExample.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/BuildExample.kt index bdbf611155..a2d25b847d 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/BuildExample.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/BuildExample.kt @@ -26,14 +26,13 @@ private fun buildExample() { toFile().deleteRecursively() } - val xcodeCommandSwiftTests = createIosBuildCommand( + val xcodeCommandSwiftTests = createXcodeBuildForTestingCommand( dataPath.toString(), - "./EarlGreyExample.xcworkspace", "EarlGreyExampleSwiftTests" ) xcodeCommandSwiftTests pipe "xcpretty" - val xcodeCommandTests = createIosBuildCommand(dataPath.toString(), "./EarlGreyExample.xcworkspace", "EarlGreyExampleTests") + val xcodeCommandTests = createXcodeBuildForTestingCommand(dataPath.toString(), "EarlGreyExampleTests") xcodeCommandTests pipe "xcpretty" copyExampleOutputFiles(dataPath.toString()) diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/BuildFtl.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/BuildFtl.kt index 8b355490e0..e29de1561d 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/BuildFtl.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/BuildFtl.kt @@ -22,7 +22,7 @@ private fun buildFtl() { val dataPath = Paths.get("", "dd_tmp").apply { toFile().deleteRecursively() }.toString() - val xcodeCommand = createIosBuildCommand(dataPath, "./EarlGreyExample.xcworkspace", "\"EarlGreyExampleSwiftTests\"") + val xcodeCommand = createXcodeBuildForTestingCommand(dataPath, "\"EarlGreyExampleSwiftTests\"") xcodeCommand pipe "xcpretty" copyFtlOutputFiles(dataPath) diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/IosBuildCommand.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/IosBuildCommand.kt index 947fe99784..43a06ce824 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/IosBuildCommand.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/IosBuildCommand.kt @@ -1,6 +1,6 @@ package flank.scripts.shell.ios -fun createIosBuildCommand(buildDir: String, workspace: String, scheme: String, project: String = "") = +fun createXcodeBuildForTestingCommand(buildDir: String, scheme: String, project: String = "", workspace: String = "") = "xcodebuild build-for-testing" + " -allowProvisioningUpdates" + (if (workspace.isBlank()) "" else " -workspace $workspace") + @@ -8,3 +8,19 @@ fun createIosBuildCommand(buildDir: String, workspace: String, scheme: String, p " -scheme $scheme" + " -derivedDataPath $buildDir" + " -sdk iphoneos" + +fun createXcodeArchiveCommand(archivePath: String, scheme: String, project: String = "", workspace: String = "") = + "xcodebuild" + + " -allowProvisioningUpdates" + + (if (workspace.isBlank()) "" else " -workspace $workspace") + + (if (project.isBlank()) "" else " -project $project") + + " -scheme $scheme" + + " archive" + + " -archivePath $archivePath" + +fun createXcodeExportArchiveCommand(archivePath: String, exportOptionsPlistPath: String, exportPath: String = "") = + "xcodebuild -exportArchive" + + " -allowProvisioningUpdates" + + " -archivePath $archivePath" + + " -exportOptionsPlist $exportOptionsPlistPath" + + " -exportPath $exportPath" diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/SetupIosEnvCommand.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/SetupIosEnvCommand.kt index 47eac9ee68..b7d2f160a6 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/SetupIosEnvCommand.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/SetupIosEnvCommand.kt @@ -5,13 +5,13 @@ import flank.scripts.shell.ops.EARL_GREY_EXAMPLE import flank.scripts.shell.utils.failIfWindows import flank.scripts.shell.utils.iOSTestProjectsPath import flank.scripts.utils.downloadCocoaPodsIfNeeded -import flank.scripts.utils.installPods +import flank.scripts.utils.installPodsIfNeeded import java.nio.file.Paths object SetupIosEnvCommand : CliktCommand(name = "setup_ios_env", help = "Build ios app with tests") { override fun run() { failIfWindows() downloadCocoaPodsIfNeeded() - installPods(Paths.get(iOSTestProjectsPath, EARL_GREY_EXAMPLE)) + installPodsIfNeeded(Paths.get(iOSTestProjectsPath, EARL_GREY_EXAMPLE)) } } diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildEarlGreyExampleCommand.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildEarlGreyExampleCommand.kt index 8f92a88303..af206db320 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildEarlGreyExampleCommand.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildEarlGreyExampleCommand.kt @@ -26,7 +26,7 @@ object BuildEarlGreyExampleCommand : CliktCommand(name = "build_earl_grey_exampl useWorkspace = true, generate = generate ?: true, copy = copy ?: true - ).generateIos() + ).generateIosTestArtifacts() } } diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildFlankExampleCommand.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildFlankExampleCommand.kt index 5cd940f831..873339867e 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildFlankExampleCommand.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildFlankExampleCommand.kt @@ -25,7 +25,7 @@ object BuildFlankExampleCommand : CliktCommand(name = "build_flank_example", hel useWorkspace = false, generate = generate ?: true, copy = copy ?: true - ).generateIos() + ).generateIosTestArtifacts() } } diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildGameLoopExampleCommand.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildGameLoopExampleCommand.kt new file mode 100644 index 0000000000..3e16908be5 --- /dev/null +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildGameLoopExampleCommand.kt @@ -0,0 +1,32 @@ +package flank.scripts.shell.ops + +import com.github.ajalt.clikt.core.CliktCommand +import com.github.ajalt.clikt.parameters.options.flag +import com.github.ajalt.clikt.parameters.options.option +import flank.scripts.shell.utils.failIfWindows +import flank.scripts.shell.utils.iOSTestProjectsPath +import java.nio.file.Paths + +object BuildGameLoopExampleCommand : CliktCommand(name = "build_ios_gameloop_example", help = "Build ios game loop example app") { + + private val generate: Boolean? by option(help = "Make build").flag("-g", default = true) + + private val copy: Boolean? by option(help = "Copy output files to tmp").flag("-c", default = true) + + override fun run() { + failIfWindows() + + IosBuildConfiguration( + projectPath = Paths.get(iOSTestProjectsPath, FLANK_GAME_LOOP_EXAMPLE).toString(), + projectName = FLANK_GAME_LOOP_EXAMPLE, + buildConfigurations = listOf( + IosTestBuildConfiguration(FLANK_GAME_LOOP_EXAMPLE, "tests"), + ), + useWorkspace = false, + generate = generate ?: true, + copy = copy ?: true + ).generateIPA() + } +} + +private const val FLANK_GAME_LOOP_EXAMPLE = "FlankGameLoopExample" diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIosIPA.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIosIPA.kt new file mode 100644 index 0000000000..16d26f6679 --- /dev/null +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIosIPA.kt @@ -0,0 +1,47 @@ +package flank.scripts.shell.ops + +import flank.scripts.shell.ios.createXcodeArchiveCommand +import flank.scripts.shell.ios.createXcodeExportArchiveCommand +import flank.scripts.shell.utils.pipe +import flank.scripts.utils.downloadCocoaPodsIfNeeded +import flank.scripts.utils.downloadXcPrettyIfNeeded +import flank.scripts.utils.installPodsIfNeeded +import java.nio.file.Path +import java.nio.file.Paths + +fun IosBuildConfiguration.generateIPA() { + downloadCocoaPodsIfNeeded() + installPodsIfNeeded(Paths.get(projectPath)) + downloadXcPrettyIfNeeded() + if (generate) archiveProject() +} + +private fun IosBuildConfiguration.archiveProject() = Paths.get(projectPath, "Build") + .runXcodeArchiveBuilds(this) + +private fun Path.runXcodeArchiveBuilds(configuration: IosBuildConfiguration) = apply { + toFile().deleteRecursively() + val parent = toFile().parent + val workspace = + if (configuration.useWorkspace) Paths.get(parent, configuration.workspaceName).toString() + else "" + + val project = if (configuration.useWorkspace) "" + else Paths.get(parent, "${configuration.projectName}.xcodeproj").toString() + configuration.buildConfigurations.forEach { + val archiveCommand = createXcodeArchiveCommand( + "${toString()}/${it.scheme}.xcarchive", + scheme = it.scheme, + project = project, + workspace = workspace + ) + + val exportArchiveCommand = createXcodeExportArchiveCommand( + archivePath = "${toString()}/${it.scheme}.xcarchive", + exportOptionsPlistPath = Paths.get(parent, "exportOptions.plist").toString(), + exportPath = "${toString()}/ipa/" + ) + archiveCommand pipe "xcpretty" + exportArchiveCommand pipe "xcpretty" + } +} diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIos.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIosTestArtifacts.kt similarity index 86% rename from flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIos.kt rename to flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIosTestArtifacts.kt index d10e9ccc33..b7be6695ac 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIos.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIosTestArtifacts.kt @@ -1,24 +1,24 @@ package flank.scripts.shell.ops -import flank.scripts.shell.ios.createIosBuildCommand +import flank.scripts.shell.ios.createXcodeBuildForTestingCommand import flank.scripts.shell.utils.flankFixturesIosTmpPath import flank.scripts.shell.utils.pipe import flank.scripts.utils.archive import flank.scripts.utils.downloadCocoaPodsIfNeeded import flank.scripts.utils.downloadXcPrettyIfNeeded -import flank.scripts.utils.installPods +import flank.scripts.utils.installPodsIfNeeded import java.io.File import java.nio.file.Path import java.nio.file.Paths -fun IosBuildConfiguration.generateIos() { +fun IosBuildConfiguration.generateIosTestArtifacts() { downloadCocoaPodsIfNeeded() - installPods(Paths.get(projectPath)) + installPodsIfNeeded(Paths.get(projectPath)) downloadXcPrettyIfNeeded() - if (generate) buildEarlGreyExample() + if (generate) buildProject() } -private fun IosBuildConfiguration.buildEarlGreyExample() = Paths.get(projectPath, "Build") +private fun IosBuildConfiguration.buildProject() = Paths.get(projectPath, "Build") .runBuilds(this) .resolve("Products") .apply { renameXctestFiles().filterFilesToCopy().archiveProject(projectName).copyIosProductFiles(projectName) } @@ -34,11 +34,11 @@ private fun Path.runBuilds(configuration: IosBuildConfiguration) = apply { val project = if (configuration.useWorkspace) "" else Paths.get(parent, "${configuration.projectName}.xcodeproj").toString() configuration.buildConfigurations.forEach { - val buildCommand = createIosBuildCommand( + val buildCommand = createXcodeBuildForTestingCommand( parent, - workspace, scheme = it.scheme, - project, + project = project, + workspace = workspace ) buildCommand pipe "xcpretty" } @@ -95,5 +95,5 @@ data class IosBuildConfiguration( data class IosTestBuildConfiguration(val scheme: String, val outputDirectoryName: String) -private val IosBuildConfiguration.workspaceName + val IosBuildConfiguration.workspaceName get() = "$projectName.xcworkspace" diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildMultiTestTargetsExample.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildMultiTestTargetsExample.kt new file mode 100644 index 0000000000..a61464a143 --- /dev/null +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildMultiTestTargetsExample.kt @@ -0,0 +1,32 @@ +package flank.scripts.shell.ops + +import com.github.ajalt.clikt.core.CliktCommand +import com.github.ajalt.clikt.parameters.options.flag +import com.github.ajalt.clikt.parameters.options.option +import flank.scripts.shell.utils.failIfWindows +import flank.scripts.shell.utils.iOSTestProjectsPath +import java.nio.file.Paths + +object BuildMultiTestTargetsExample : CliktCommand(name = "build_ios_multi_test_targets_example", help = "Build ios multi test targets example app") { + + private val generate: Boolean? by option(help = "Make build").flag("-g", default = true) + + private val copy: Boolean? by option(help = "Copy output files to tmp").flag("-c", default = true) + + override fun run() { + failIfWindows() + + IosBuildConfiguration( + projectPath = Paths.get(iOSTestProjectsPath, FLANK_IOS_MULTIPLE_TEST_TARGETS_EXAMPLE).toString(), + projectName = FLANK_IOS_MULTIPLE_TEST_TARGETS_EXAMPLE, + buildConfigurations = listOf( + IosTestBuildConfiguration("AllTests", "AllTests"), + ), + useWorkspace = false, + generate = generate ?: true, + copy = copy ?: true + ).generateIosTestArtifacts() + } +} + +private const val FLANK_IOS_MULTIPLE_TEST_TARGETS_EXAMPLE = "FlankMultiTestTargetsExample" diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/OpsCommand.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/OpsCommand.kt index c13d24ab81..501dc98ce2 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/OpsCommand.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/OpsCommand.kt @@ -8,6 +8,8 @@ object OpsCommand : CliktCommand(name = "ops", help = "Contains all ops command: subcommands( AndroidOpsCommand, BuildEarlGreyExampleCommand, + BuildGameLoopExampleCommand, + BuildMultiTestTargetsExample, BuildFlankExampleCommand, GoOpsCommand ) diff --git a/flank-scripts/src/main/kotlin/flank/scripts/utils/DownloadSoftware.kt b/flank-scripts/src/main/kotlin/flank/scripts/utils/DownloadSoftware.kt index ca67f9a98d..f2fa676bd0 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/utils/DownloadSoftware.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/utils/DownloadSoftware.kt @@ -10,8 +10,9 @@ fun downloadCocoaPodsIfNeeded() { "xcpretty".checkAndInstallIfNeed("gem install cocoapods -v 1.9.3") } -fun installPods(path: Path) { - "pod install --project-directory=$path --verbose".runCommand() +fun installPodsIfNeeded(path: Path) { + if (path.toFile().listFiles().map { it.name }.contains("Podfile")) + "pod install --project-directory=$path --verbose".runCommand() } fun checkIfPipInstalled() { diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.pbxproj b/test_projects/ios/FlankGameLoopExample/FlankGameLoopExample.xcodeproj/project.pbxproj similarity index 94% rename from test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.pbxproj rename to test_projects/ios/FlankGameLoopExample/FlankGameLoopExample.xcodeproj/project.pbxproj index da57f6f1a1..9aeca5bf38 100644 --- a/test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.pbxproj +++ b/test_projects/ios/FlankGameLoopExample/FlankGameLoopExample.xcodeproj/project.pbxproj @@ -18,7 +18,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 3201E301255D3E9D00347837 /* flankgameloop.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = flankgameloop.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 3201E301255D3E9D00347837 /* FlankGameLoopExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FlankGameLoopExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 3201E304255D3E9D00347837 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 3201E306255D3E9D00347837 /* GameScene.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = GameScene.sks; sourceTree = ""; }; 3201E308255D3E9D00347837 /* Actions.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = Actions.sks; sourceTree = ""; }; @@ -52,7 +52,7 @@ 3201E302255D3E9D00347837 /* Products */ = { isa = PBXGroup; children = ( - 3201E301255D3E9D00347837 /* flankgameloop.app */, + 3201E301255D3E9D00347837 /* FlankGameLoopExample.app */, ); name = Products; sourceTree = ""; @@ -76,9 +76,9 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 3201E300255D3E9D00347837 /* flankgameloop */ = { + 3201E300255D3E9D00347837 /* FlankGameLoopExample */ = { isa = PBXNativeTarget; - buildConfigurationList = 3201E32C255D3E9E00347837 /* Build configuration list for PBXNativeTarget "flankgameloop" */; + buildConfigurationList = 3201E32C255D3E9E00347837 /* Build configuration list for PBXNativeTarget "FlankGameLoopExample" */; buildPhases = ( 3201E2FD255D3E9D00347837 /* Sources */, 3201E2FE255D3E9D00347837 /* Frameworks */, @@ -88,9 +88,9 @@ ); dependencies = ( ); - name = flankgameloop; + name = FlankGameLoopExample; productName = flankgameloop; - productReference = 3201E301255D3E9D00347837 /* flankgameloop.app */; + productReference = 3201E301255D3E9D00347837 /* FlankGameLoopExample.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -107,7 +107,7 @@ }; }; }; - buildConfigurationList = 3201E2FC255D3E9D00347837 /* Build configuration list for PBXProject "flankgameloop" */; + buildConfigurationList = 3201E2FC255D3E9D00347837 /* Build configuration list for PBXProject "FlankGameLoopExample" */; compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; @@ -120,7 +120,7 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 3201E300255D3E9D00347837 /* flankgameloop */, + 3201E300255D3E9D00347837 /* FlankGameLoopExample */, ); }; /* End PBXProject section */ @@ -322,7 +322,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 3201E2FC255D3E9D00347837 /* Build configuration list for PBXProject "flankgameloop" */ = { + 3201E2FC255D3E9D00347837 /* Build configuration list for PBXProject "FlankGameLoopExample" */ = { isa = XCConfigurationList; buildConfigurations = ( 3201E32A255D3E9E00347837 /* Debug */, @@ -331,7 +331,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3201E32C255D3E9E00347837 /* Build configuration list for PBXNativeTarget "flankgameloop" */ = { + 3201E32C255D3E9E00347837 /* Build configuration list for PBXNativeTarget "FlankGameLoopExample" */ = { isa = XCConfigurationList; buildConfigurations = ( 3201E32D255D3E9E00347837 /* Debug */, diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/test_projects/ios/FlankGameLoopExample/FlankGameLoopExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to test_projects/ios/FlankGameLoopExample/FlankGameLoopExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/test_projects/ios/FlankGameLoopExample/FlankGameLoopExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from test_projects/ios/FlankGameLoopExample/flankgameloop.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to test_projects/ios/FlankGameLoopExample/FlankGameLoopExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/test_projects/ios/FlankGameLoopExample/FlankGameLoopExample.xcodeproj/xcshareddata/xcschemes/FlankGameLoopExample.xcscheme b/test_projects/ios/FlankGameLoopExample/FlankGameLoopExample.xcodeproj/xcshareddata/xcschemes/FlankGameLoopExample.xcscheme new file mode 100644 index 0000000000..981fdbed44 --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/FlankGameLoopExample.xcodeproj/xcshareddata/xcschemes/FlankGameLoopExample.xcscheme @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From fa906e3c2c79981b30005ebfa8464814b68a8b1d Mon Sep 17 00:00:00 2001 From: Michael Wright Date: Mon, 23 Nov 2020 15:37:04 +0100 Subject: [PATCH 4/7] Flank IOS gameloop --- test_runner/src/test/kotlin/Debug.kt | 6 +++--- .../test_app_cases/flank-single-gameloop-ios.yml | 10 ++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 test_runner/src/test/kotlin/ftl/fixtures/test_app_cases/flank-single-gameloop-ios.yml diff --git a/test_runner/src/test/kotlin/Debug.kt b/test_runner/src/test/kotlin/Debug.kt index c50bc2bc83..09a77cf576 100644 --- a/test_runner/src/test/kotlin/Debug.kt +++ b/test_runner/src/test/kotlin/Debug.kt @@ -14,8 +14,8 @@ fun main() { ?: "YOUR PROJECT ID" val quantity = "single" - val type = "shards" - val extra = "simple" + val type = "gameloop" + val extra = "ios" // Bugsnag keeps the process alive so we must call exitProcess // https://github.com/bugsnag/bugsnag-java/issues/151 @@ -24,7 +24,7 @@ fun main() { // "--debug", "firebase", "test", - "android", + "ios", "run", // "--dry", // "--dump-shards", diff --git a/test_runner/src/test/kotlin/ftl/fixtures/test_app_cases/flank-single-gameloop-ios.yml b/test_runner/src/test/kotlin/ftl/fixtures/test_app_cases/flank-single-gameloop-ios.yml new file mode 100644 index 0000000000..ddcf65dbce --- /dev/null +++ b/test_runner/src/test/kotlin/ftl/fixtures/test_app_cases/flank-single-gameloop-ios.yml @@ -0,0 +1,10 @@ +gcloud: + app: test_projects/ios/FlankGameLoopExample/ipa/FlankGameLoopExample.ipa + type: game-loop + scenario-numbers: + - 1 + device: + - model: iphone11 + version: 13.6 + orientation: portrait + locale: en_US \ No newline at end of file From b5e64f8c1bef979dc4e3f772d81f55140447659f Mon Sep 17 00:00:00 2001 From: Michael Wright Date: Mon, 23 Nov 2020 15:37:37 +0100 Subject: [PATCH 5/7] Flank IOS gameloop files --- .../ipa/DistributionSummary.plist | 53 ++ .../ipa/ExportOptions.plist | 18 + .../ipa/FlankGameLoopExample.ipa | Bin 0 -> 43206 bytes .../FlankGameLoopExample/ipa/Packaging.log | 882 ++++++++++++++++++ 4 files changed, 953 insertions(+) create mode 100644 test_projects/ios/FlankGameLoopExample/ipa/DistributionSummary.plist create mode 100644 test_projects/ios/FlankGameLoopExample/ipa/ExportOptions.plist create mode 100644 test_projects/ios/FlankGameLoopExample/ipa/FlankGameLoopExample.ipa create mode 100644 test_projects/ios/FlankGameLoopExample/ipa/Packaging.log diff --git a/test_projects/ios/FlankGameLoopExample/ipa/DistributionSummary.plist b/test_projects/ios/FlankGameLoopExample/ipa/DistributionSummary.plist new file mode 100644 index 0000000000..719d2679c0 --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/ipa/DistributionSummary.plist @@ -0,0 +1,53 @@ + + + + + FlankGameLoopExample.ipa + + + architectures + + arm64 + + certificate + + SHA1 + 8D0B1E4D3E6B2C8DC40B88081C4B47B35DC8EA32 + dateExpires + 12/11/2021 + type + Apple Distribution + + entitlements + + application-identifier + L2UF9MLSM6.io.gogoapps.flankgameloop + com.apple.developer.team-identifier + L2UF9MLSM6 + get-task-allow + + keychain-access-groups + + L2UF9MLSM6.io.gogoapps.flankgameloop + + + name + FlankGameLoopExample.app + profile + + UUID + 2ae4df9b-e4ab-494a-8d61-80d08ca668ad + name + iOS Team Ad Hoc Provisioning Profile: io.gogoapps.flankgameloop + + team + + id + L2UF9MLSM6 + name + + + + + + diff --git a/test_projects/ios/FlankGameLoopExample/ipa/ExportOptions.plist b/test_projects/ios/FlankGameLoopExample/ipa/ExportOptions.plist new file mode 100644 index 0000000000..58ca335f20 --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/ipa/ExportOptions.plist @@ -0,0 +1,18 @@ + + + + + compileBitcode + + method + ad-hoc + signingStyle + automatic + stripSwiftSymbols + + teamID + L2UF9MLSM6 + thinning + <none> + + diff --git a/test_projects/ios/FlankGameLoopExample/ipa/FlankGameLoopExample.ipa b/test_projects/ios/FlankGameLoopExample/ipa/FlankGameLoopExample.ipa new file mode 100644 index 0000000000000000000000000000000000000000..1b7d85ed2179ca66783f3b265f3f9e502abf5465 GIT binary patch literal 43206 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 XdW`@H^{b&kdU<=j>@nv2`u6_-0p{2j literal 0 HcmV?d00001 diff --git a/test_projects/ios/FlankGameLoopExample/ipa/Packaging.log b/test_projects/ios/FlankGameLoopExample/ipa/Packaging.log new file mode 100644 index 0000000000..06272fd24b --- /dev/null +++ b/test_projects/ios/FlankGameLoopExample/ipa/Packaging.log @@ -0,0 +1,882 @@ +2020-11-23 12:31:54 +0000 [MT] Initial pipeline context: '> + Chain (13, self inclusive): + '> + '> + '> + '> + '> + '> + '> + '> + '> + + + + + +2020-11-23 12:31:54 +0000 [MT] Processing step: IDEDistributionCreateDestRootStep +2020-11-23 12:31:54 +0000 [MT] Processing step: IDEDistributionCopyItemStep +2020-11-23 12:31:54 +0000 [MT] Running /usr/bin/ditto '-V' '/Users/zuziakaxel/dev/gogo/flank/test_projects/ios/FlankGameLoopExample/build/gameloop.xcarchive/Products/Applications/FlankGameLoopExample.app' '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app' +2020-11-23 12:31:54 +0000 >>> Copying /Users/zuziakaxel/dev/gogo/flank/test_projects/ios/FlankGameLoopExample/build/gameloop.xcarchive/Products/Applications/FlankGameLoopExample.app +2020-11-23 12:31:54 +0000 copying file ./_CodeSignature/CodeResources ... +2020-11-23 12:31:54 +0000 3399 bytes for ./_CodeSignature/CodeResources +2020-11-23 12:31:54 +0000 copying file ./FlankGameLoopExample ... +368544 bytes for ./FlankGameLoopExample +2020-11-23 12:31:54 +0000 copying file ./Base.lproj/Main.storyboardc/UIViewController-BV1-FR-VrT.nib ... +2020-11-23 12:31:54 +0000 948 bytes for ./Base.lproj/Main.storyboardc/UIViewController-BV1-FR-VrT.nib +2020-11-23 12:31:54 +0000 copying file ./Base.lproj/Main.storyboardc/BV1-FR-VrT-view-3se-qz-xqx.nib ... +2020-11-23 12:31:54 +0000 1298 bytes for ./Base.lproj/Main.storyboardc/BV1-FR-VrT-view-3se-qz-xqx.nib +copying file ./Base.lproj/Main.storyboardc/Info.plist ... +2020-11-23 12:31:54 +0000 258 bytes for ./Base.lproj/Main.storyboardc/Info.plist +2020-11-23 12:31:54 +0000 copying file ./GameScene.sks ... +2020-11-23 12:31:54 +0000 4694 bytes for ./GameScene.sks +copying file ./embedded.mobileprovision ... +2020-11-23 12:31:54 +0000 7394 bytes for ./embedded.mobileprovision +2020-11-23 12:31:54 +0000 copying file ./Info.plist ... +2020-11-23 12:31:54 +0000 1307 bytes for ./Info.plist +copying file ./Actions.sks ... +2020-11-23 12:31:54 +0000 1892 bytes for ./Actions.sks +copying file ./PkgInfo ... +2020-11-23 12:31:54 +0000 8 bytes for ./PkgInfo +2020-11-23 12:31:54 +0000 [MT] /usr/bin/ditto exited with 0 +2020-11-23 12:31:54 +0000 [MT] Processing step: IDEDistributionEmbedProfileStep +2020-11-23 12:31:54 +0000 [MT] Processing step: IDEDistributionInfoPlistStep +2020-11-23 12:31:54 +0000 [MT] Skipping step: IDEDistributionInfoPlistStep because it said so +2020-11-23 12:31:54 +0000 [MT] Processing step: IDEDistributionAppThinningPlistStep +2020-11-23 12:31:54 +0000 [MT] Skipping step: IDEDistributionAppThinningPlistStep because it said so +2020-11-23 12:31:54 +0000 [MT] Processing step: IDEDistributionCompileBitcodeStep +2020-11-23 12:31:54 +0000 [MT] Running /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root' '--json' '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool-json-filepath-~~~HTr4kE' '--output' '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.~~~vfqiYR' '--toolchain' '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr' '--platforms' '/Applications/Xcode.app/Contents/Developer/Platforms' '--app-store-tools-build-version' '12B45b' '--compile-bitcode' +2020-11-23 12:31:54 +0000 ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin20] +2020-11-23 12:31:54 +0000 /Library/Ruby/Gems/2.6.0/gems/CFPropertyList-3.0.2/lib/cfpropertylist/rbCFPropertyList.rb:83: warning: assigned but unused variable - temp +2020-11-23 12:31:54 +0000 Ignoring ffi-1.12.2 because its extensions are not built. Try: gem pristine ffi --version 1.12.2 +2020-11-23 12:31:55 +0000 OS X 11.1 20C5048k +2020-11-23 12:31:55 +0000 ENV: {"JAVA_HOME"=>"/Users/zuziakaxel/Library/Java/JavaVirtualMachines/openjdk-14.0.2/Contents/Home", "SSH_AUTH_SOCK"=>"/private/tmp/com.apple.launchd.UZtRQUXQck/Listeners", "FLANK_PROJECT_ID"=>"flank-open-source", "PAGER"=>"less", "SHELL"=>"/bin/zsh", "LESS"=>"-R", "__CFBundleIdentifier"=>"com.apple.Terminal", "ANDROID_SDK_ROOT"=>"/Users/zuziakaxel/Library/Android/sdk", "XPC_SERVICE_NAME"=>"0", "POD_LOCAL_HOME"=>"/Users/zuziakaxel/.cocoapods/repos", "TERM_PROGRAM_VERSION"=>"440", "GOOGLE_CLOUD_PROJECT"=>"flank-open-source", "LANG"=>"en_US.UTF-8", "HOME"=>"/Users/zuziakaxel", "PWD"=>"/Users/zuziakaxel/dev/gogo/flank/test_projects/ios/FlankGameLoopExample", "LC_ALL"=>"en_US.UTF-8", "icloud"=>"~/Library/Mobile\\ Documents/com~apple~CloudDocs", "TMPDIR"=>"/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/", "SHLVL"=>"2", "XPC_FLAGS"=>"0x0", "PATH"=>"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/local/bin:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/libexec:/Applications/Xcode.app/Contents/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/local/bin:/Applications/Xcode.app/Contents/Developer/Tools:/usr/bin:/bin:/usr/sbin:/sbin", "TERM"=>"xterm-256color", "WORKON_HOME"=>"/Users/zuziakaxel/Envs", "GITHUB_TOKEN"=>"6fe729f37094fd10cf07a4a69f594ad29bd58d5f", "TERM_PROGRAM"=>"Apple_Terminal", "LSCOLORS"=>"Gxfxcxdxbxegedabagacad", "USER"=>"zuziakaxel", "TERM_SESSION_ID"=>"E5064C45-222C-42B5-B7F3-CFC65DAD6461", "ZSH"=>"/Users/zuziakaxel/.oh-my-zsh", "LOGNAME"=>"zuziakaxel", "_"=>"/usr/bin/xcodebuild", "LC_CTYPE"=>"UTF-8", "__CF_USER_TEXT_ENCODING"=>"0x1F5:0x0:0x0"} +ARGV: ["/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root", "--json", "/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool-json-filepath-~~~HTr4kE", "--output", "/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.~~~vfqiYR", "--toolchain", "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr", "--platforms", "/Applications/Xcode.app/Contents/Developer/Platforms", "--app-store-tools-build-version", "12B45b", "--compile-bitcode"] +2020-11-23 12:31:55 +0000 IPA contents: +2020-11-23 12:31:55 +0000 /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root +/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload +/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app +/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app/Actions.sks +/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app/Base.lproj +/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app/Base.lproj/Main.storyboardc +/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app/Base.lproj/Main.storyboardc/BV1-FR-VrT-view-3se-qz-xqx.nib +/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app/Base.lproj/Main.storyboardc/Info.plist +/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app/Base.lproj/Main.storyboardc/UIViewController-BV1-FR-VrT.nib +/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app/FlankGameLoopExample +/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app/GameScene.sks +/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app/Info.plist +/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app/PkgInfo +/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app/_CodeSignature +/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app/_CodeSignature/CodeResources +/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app/embedded.mobileprovision + +2020-11-23 12:31:55 +0000 Platform thinningVariants for 'appletvos' +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j42dap", :productType=>"AppleTV5,3", :displayName=>"Apple TV"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"tv", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j105aap", :productType=>"AppleTV6,2", :displayName=>"Apple TV 4K"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"tv", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>3840, :artworkDisplayGamut=>"P3", :artworkDynamicDisplayMode=>"1080pSDR", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j33ap", :productType=>"AppleTV3,1", :displayName=>"AppleTV"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7", :artworkDevIdiom=>"tv", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j33ap", :productType=>"AppleTV3,1", :displayName=>"AppleTV"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7", :artworkDevIdiom=>"tv", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j33iap", :productType=>"AppleTV3,2", :displayName=>"AppleTV"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7", :artworkDevIdiom=>"tv", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j33iap", :productType=>"AppleTV3,2", :displayName=>"AppleTV"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7", :artworkDevIdiom=>"tv", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j42dap", :productType=>"AppleTV5,3", :displayName=>"Apple TV"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"tv", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j42dap", :productType=>"AppleTV5,3", :displayName=>"Apple TV"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"tv", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j42dap", :productType=>"AppleTV5,3", :displayName=>"Apple TV"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"tv", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j42dap", :productType=>"AppleTV5,3", :displayName=>"Apple TV"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"tv", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j42dap", :productType=>"AppleTV5,3", :displayName=>"Apple TV"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"tv", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j42dap", :productType=>"AppleTV5,3", :displayName=>"Apple TV"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"tv", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j105aap", :productType=>"AppleTV6,2", :displayName=>"Apple TV 4K"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"tv", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>3840, :artworkDisplayGamut=>"P3", :artworkDynamicDisplayMode=>"1080pSDR", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j105aap", :productType=>"AppleTV6,2", :displayName=>"Apple TV 4K"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"tv", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>3840, :artworkDisplayGamut=>"P3", :artworkDynamicDisplayMode=>"1080pSDR", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j105aap", :productType=>"AppleTV6,2", :displayName=>"Apple TV 4K"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"tv", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>3840, :artworkDisplayGamut=>"P3", :artworkDynamicDisplayMode=>"1080pSDR", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j105aap", :productType=>"AppleTV6,2", :displayName=>"Apple TV 4K"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"tv", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>3840, :artworkDisplayGamut=>"P3", :artworkDynamicDisplayMode=>"1080pSDR", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +warning: Configuration issue: platform AppleTVSimulator.platform doesn't have any non-simulator SDKs; ignoring it +2020-11-23 12:31:55 +0000 Platform thinningVariants for 'watchos' +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n111sap", :productType=>"Watch3,1", :displayName=>"Apple Watch Series 3 (GPS + Cellular) 38mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>320, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n111bap", :productType=>"Watch3,2", :displayName=>"Apple Watch Series 3 (GPS + Cellular) 42mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>384, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n121sap", :productType=>"Watch3,3", :displayName=>"Apple Watch Series 3 (GPS) 38mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>320, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n121bap", :productType=>"Watch3,4", :displayName=>"Apple Watch Series 3 (GPS) 42mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>384, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n131sap", :productType=>"Watch4,1", :displayName=>"Apple Watch Series 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>340, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n131bap", :productType=>"Watch4,2", :displayName=>"Apple Watch Series 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>390, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n141sap", :productType=>"Watch4,3", :displayName=>"Apple Watch Series 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>340, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n141bap", :productType=>"Watch4,4", :displayName=>"Apple Watch Series 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>390, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n144sap", :productType=>"Watch5,1", :displayName=>"Apple Watch Series 5"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>340, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n140bap", :productType=>"Watch5,10", :displayName=>"Apple Watch SE (GPS)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>390, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n142sap", :productType=>"Watch5,11", :displayName=>"Apple Watch SE (GPS + Cellular)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>340, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n142bap", :productType=>"Watch5,12", :displayName=>"Apple Watch SE (GPS + Cellular)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>390, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n144bap", :productType=>"Watch5,2", :displayName=>"Apple Watch Series 5"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>390, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n146sap", :productType=>"Watch5,3", :displayName=>"Apple Watch Series 5"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>340, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n146bap", :productType=>"Watch5,4", :displayName=>"Apple Watch Series 5"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>390, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n140sap", :productType=>"Watch5,9", :displayName=>"Apple Watch SE (GPS)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>340, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n157sap", :productType=>"Watch6,1", :displayName=>"Apple Watch Series 6 (GPS)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>340, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>15, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n157bap", :productType=>"Watch6,2", :displayName=>"Apple Watch Series 6 (GPS)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>390, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>15, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n158sap", :productType=>"Watch6,3", :displayName=>"Apple Watch Series 6 (GPS + Cellular)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>340, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>15, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n158bap", :productType=>"Watch6,4", :displayName=>"Apple Watch Series 6 (GPS + Cellular)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>390, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>15, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n27aap", :productType=>"Watch1,1", :displayName=>"Apple Watch (1st generation) 38mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>320, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n28aap", :productType=>"Watch1,2", :displayName=>"Apple Watch (1st generation) 42mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>384, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n74ap", :productType=>"Watch2,3", :displayName=>"Apple Watch Series 2 38mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>320, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n74ap", :productType=>"Watch2,3", :displayName=>"Apple Watch Series 2 38mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>320, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n75ap", :productType=>"Watch2,4", :displayName=>"Apple Watch Series 2 42mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>384, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n75ap", :productType=>"Watch2,4", :displayName=>"Apple Watch Series 2 42mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>384, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n27dap", :productType=>"Watch2,6", :displayName=>"Apple Watch Series 1 38mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>320, :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatch +2020-11-23 12:31:55 +0000 App=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n27dap", :productType=>"Watch2,6", :displayName=>"Apple Watch Series 1 38mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>320, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n28dap", :productType=>"Watch2,7", :displayName=>"Apple Watch Series 1 42mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>384, :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n28dap", :productType=>"Watch2,7", :displayName=>"Apple Watch Series 1 42mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>384, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n111sap", :productType=>"Watch3,1", :displayName=>"Apple Watch Series 3 (GPS + Cellular) 38mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>320, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n111sap", :productType=>"Watch3,1", :displayName=>"Apple Watch Series 3 (GPS + Cellular) 38mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>320, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n111bap", :productType=>"Watch3,2", :displayName=>"Apple Watch Series 3 (GPS + Cellular) 42mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>384, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n111bap", :productType=>"Watch3,2", :displayName=>"Apple Watch Series 3 (GPS + Cellular) 42mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>384, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass= +2020-11-23 12:31:55 +0000 >"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n121sap", :productType=>"Watch3,3", :displayName=>"Apple Watch Series 3 (GPS) 38mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>320, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n121sap", :productType=>"Watch3,3", :displayName=>"Apple Watch Series 3 (GPS) 38mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>320, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n121bap", :productType=>"Watch3,4", :displayName=>"Apple Watch Series 3 (GPS) 42mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>384, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n121bap", :productType=>"Watch3,4", :displayName=>"Apple Watch Series 3 (GPS) 42mm"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"armv7k", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>384, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n131sap", :productType=>"Watch4,1", :displayName=>"Apple Watch Series 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>340, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL3,2", "MTL2,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n131sap", :productType=>"Watch4,1", :displayName=>"Apple Watch Series 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>340, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n131bap", :productType=>"Watch4,2", :displayName=>"Apple Watch Series 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"wat +2020-11-23 12:31:55 +0000 ch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>390, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL3,2", "MTL2,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n131bap", :productType=>"Watch4,2", :displayName=>"Apple Watch Series 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>390, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n141sap", :productType=>"Watch4,3", :displayName=>"Apple Watch Series 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>340, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL3,2", "MTL2,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n141sap", :productType=>"Watch4,3", :displayName=>"Apple Watch Series 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>340, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n141bap", :productType=>"Watch4,4", :displayName=>"Apple Watch Series 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>390, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL3,2", "MTL2,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n141bap", :productType=>"Watch4,4", :displayName=>"Apple Watch Series 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>390, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n144sap", :productType=>"Watch5,1", :displayName=>"Apple Watch Series 5"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>340, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 + {:device=>{:target=>"n144bap", :productType=>"Watch5,2", :displayName=>"Apple Watch Series 5"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>390, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n146sap", :productType=>"Watch5,3", :displayName=>"Apple Watch Series 5"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>340, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n146bap", :productType=>"Watch5,4", :displayName=>"Apple Watch Series 5"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"watch", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>390, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +warning: Configuration issue: platform WatchSimulator.platform doesn't have any non-simulator SDKs; ignoring it +2020-11-23 12:31:55 +0000 Platform thinningVariants for 'iphoneos' +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j210ap", :productType=>"iPad11,1", :displayName=>"iPad mini (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j211ap", :productType=>"iPad11,2", :displayName=>"iPad mini (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j217ap", :productType=>"iPad11,3", :displayName=>"iPad Air (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j218ap", :productType=>"iPad11,4", :displayName=>"iPad Air (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j171aap", :productType=>"iPad11,6", :displayName=>"iPad (8th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2160, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j172aap", :productType=>"iPad11,7", :displayName=>"iPad (8th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2160, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j307ap", :productType=>"iPad13,1", :displayName=>"iPad Air (4th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2360, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE7", :gfxFeatureSetFallbacks=>["APPLE6", "APPLE5", "APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j308ap", :productType=>"iPad13,2", :displayName=>"iPad Air (4th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2360, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE7", :gfxFeatureSetFallbacks=>["APPLE6", "APPLE5", "APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j96ap", :productType=>"iPad5,1", :displayName=>"iPad mini 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j97ap", :productType=>"iPad5,2", :displayName=>"iPad mini 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j81ap", :productType=>"iPad5,3", :displayName=>"iPad Air 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j82ap", :productType=>"iPad5,4", :displayName=>"iPad Air 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j71sap", :productType=>"iPad6,11", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j71tap", :productType=>"iPad6,11", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j72sap", :productType=>"iPad6,12", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j72tap", :productType=>"iPad6,12", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j127ap", :productType=>"iPad6,3", :displayName=>"iPad Pro (9.7-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j128ap", :productType=>"iPad6,4", :displayName=>"iPad Pro (9.7-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j98aap", :productType=>"iPad6,7", :displayName=>"iPad Pro (12.9-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j99aap", :productType=>"iPad6,8", :displayName=>"iPad Pro (12.9-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j120ap", :productType=>"iPad7,1", :displayName=>"iPad Pro (12.9-inch) (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j171ap", :productType=>"iPad7,11", :displayName=>"iPad (7th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j172ap", :productType=>"iPad7,12", :displayName=>"iPad (7th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j121ap", :productType=>"iPad7,2", :displayName=>"iPad Pro (12.9-inch) (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j207ap", :productType=>"iPad7,3", :displayName=>"iPad Pro (10.5-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j208ap", :productType=>"iPad7,4", :displayName=>"iPad Pro (10.5-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j71bap", :productType=>"iPad7,5", :displayName=>"iPad (6th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j72bap", :productType=>"iPad7,6", :displayName=>"iPad (6th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j317ap", :productType=>"iPad8,1", :displayName=>"iPad Pro (11-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j418ap", :productType=>"iPad8,10", :displayName=>"iPad Pro (11-inch) (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j420ap", :productType=>"iPad8,11", :displayName=>"iPad Pro (12.9-inch) (4th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j421ap", :productType=>"iPad8,12", :displayName=>"iPad Pro (12.9-inch) (4th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j317xap", :productType=>"iPad8,2", :displayName=>"iPad Pro (11-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j318ap", :productType=>"iPad8,3", :displayName=>"iPad Pro (11-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j318xap", :productType=>"iPad8,4", :displayName=>"iPad Pro (11-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j320ap", :productType=>"iPad8,5", :displayName=>"iPad Pro (12.9-inch) (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j320xap", :productType=>"iPad8,6", :displayName=>"iPad Pro (12.9-inch) (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j321ap", :productType=>"iPad8,7", :displayName=>"iPad Pro (12.9-inch) (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j321xap", :productType=>"iPad8,8", :displayName=>"iPad Pro (12.9-inch) (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j417ap", :productType=>"iPad8,9", :displayName=>"iPad Pro (11-inch) (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d20ap", :productType=>"iPhone10,1", :displayName=>"iPhone 8"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"d21ap", :productType=>"iPhone10,2", :displayName=>"iPhone 8 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d22ap", :productType=>"iPhone10,3", :displayName=>"iPhone X"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2436, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d201ap", :productType=>"iPhone10,4", :displayName=>"iPhone 8"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d211ap", :productType=>"iPhone10,5", :displayName=>"iPhone 8 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"d221ap", :productType=>"iPhone10,6", :displayName=>"iPhone X"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2436, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d321ap", :productType=>"iPhone11,2", :displayName=>"iPhone XS"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2436, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d331ap", :productType=>"iPhone11,4", :displayName=>"iPhone XS Max"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2688, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d331pap", :productType=>"iPhone11,6", :displayName=>"iPhone XS Max"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2688, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n841ap", :productType=>"iPhone11,8", :displayName=>"iPhone XR"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>1792, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n104ap", :productType=>"iPhone12,1", :displayName=>"iPhone 11"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>1792, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE6", :gfxFeatureSetFallbacks=>["APPLE5", "APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d421ap", :productType=>"iPhone12,3", :displayName=>"iPhone 11 Pro"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2436, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE6", :gfxFeatureSetFallbacks=>["APPLE5", "APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d431ap", :productType=>"iPhone12,5", :displayName=>"iPhone 11 Pro Max"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2688, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE6", :gfxFeatureSetFallbacks=>["APPLE5", "APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d79ap", :productType=>"iPhone12,8", :displayName=>"iPhone SE (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE6", :gfxFeatureSetFallbacks=>["APPLE5", "APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"d52gap", :productType=>"iPhone13,1", :displayName=>"iPhone 12 mini"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2340, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE7", :gfxFeatureSetFallbacks=>["APPLE6", "APPLE5", "APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d53gap", :productType=>"iPhone13,2", :displayName=>"iPhone 12"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2532, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE7", :gfxFeatureSetFallbacks=>["APPLE6", "APPLE5", "APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d53pap", :productType=>"iPhone13,3", :displayName=>"iPhone 12 Pro"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2532, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE7", :gfxFeatureSetFallbacks=>["APPLE6", "APPLE5", "APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d54pap", :productType=>"iPhone13,4", :displayName=>"iPhone 12 Pro Max"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2778, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE7", :gfxFeatureSetFallbacks=>["APPLE6", "APPLE5", "APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n71map", :productType=>"iPhone8,1", :displayName=>"iPhone 6s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n71ap", :productType=>"iPhone8,1", :displayName=>"iPhone 6s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n66map", :productType=>"iPhone8,2", :displayName=>"iPhone 6s Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n66ap", :productType=>"iPhone8,2", :displayName=>"iPhone 6s Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n69uap", :productType=>"iPhone8,4", :displayName=>"iPhone SE (1st generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n69ap", :productType=>"iPhone8,4", :displayName=>"iPhone SE (1st generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d10ap", :productType=>"iPhone9,1", :displayName=>"iPhone 7"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d11ap", :productType=>"iPhone9,2", :displayName=>"iPhone 7 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d101ap", :productType=>"iPhone9,3", :displayName=>"iPhone 7"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"d111ap", :productType=>"iPhone9,4", :displayName=>"iPhone 7 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n112ap", :productType=>"iPod9,1", :displayName=>"iPod touch (7th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j129aap", :productType=>"MacFamily20,1", :displayName=>"Mac"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>32401, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>16, :gfxFeatureSetClass=>"APPLE6", :gfxFeatureSetFallbacks=>["APPLE5", "APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j210ap", :productType=>"iPad11,1", :displayName=>"iPad mini (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j210ap", :productType=>"iPad11,1", :displayName=>"iPad mini (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j211ap", :productType=>"iPad11,2", :displayName=>"iPad mini (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j211ap", :productType=>"iPad11,2", :displayName=>"iPad mini (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j217ap", :productType=>"iPad11,3", :displayName=>"iPad Air (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j217ap", :productType=>"iPad11,3", :displayName=>"iPad Air (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j218ap", :productType=>"iPad11,4", :displayName=>"iPad Air (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j218ap", :productType=>"iPad11,4", :displayName=>"iPad Air (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"k93ap", :productType=>"iPad2,1", :displayName=>"iPad 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"k94ap", :productType=>"iPad2,2", :displayName=>"iPad 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"k95ap", :productType=>"iPad2,3", :displayName=>"iPad 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"k93aap", :productType=>"iPad2,4", :displayName=>"iPad 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"p105ap", :productType=>"iPad2,5", :displayName=>"iPad mini"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"p106ap", :productType=>"iPad2,6", :displayName=>"iPad mini"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"p107ap", :productType=>"iPad2,7", :displayName=>"iPad mini"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>1, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j1ap", :productType=>"iPad3,1", :displayName=>"iPad (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j2ap", :productType=>"iPad3,2", :displayName=>"iPad (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j2aap", :productType=>"iPad3,3", :displayName=>"iPad (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"p101ap", :productType=>"iPad3,4", :displayName=>"iPad (4th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7s", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"p101ap", :productType=>"iPad3,4", :displayName=>"iPad (4th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7s", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"p102ap", :productType=>"iPad3,5", :displayName=>"iPad (4th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7s", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"p102ap", :productType=>"iPad3,5", :displayName=>"iPad (4th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7s", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"p103ap", :productType=>"iPad3,6", :displayName=>"iPad (4th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7s", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"p103ap", :productType=>"iPad3,6", :displayName=>"iPad (4th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7s", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j71ap", :productType=>"iPad4,1", :displayName=>"iPad Air"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j71ap", :productType=>"iPad4,1", :displayName=>"iPad Air"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j71ap", :productType=>"iPad4,1", :displayName=>"iPad Air"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j71ap", :productType=>"iPad4,1", :displayName=>"iPad Air"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j71ap", :productType=>"iPad4,1", :displayName=>"iPad Air"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j72ap", :productType=>"iPad4,2", :displayName=>"iPad Air"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j72ap", :productType=>"iPad4,2", :displayName=>"iPad Air"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j72ap", :productType=>"iPad4,2", :displayName=>"iPad Air"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artwork +2020-11-23 12:31:55 +0000 DisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j72ap", :productType=>"iPad4,2", :displayName=>"iPad Air"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j72ap", :productType=>"iPad4,2", :displayName=>"iPad Air"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j73ap", :productType=>"iPad4,3", :displayName=>"iPad Air"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j73ap", :productType=>"iPad4,3", :displayName=>"iPad Air"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j73ap", :productType=>"iPad4,3", :displayName=>"iPad Air"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j73ap", :productType=>"iPad4,3", :displayName=>"iPad Air"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j73ap", :productType=>"iPad4,3", :displayName=>"iPad Air"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>fals +2020-11-23 12:31:55 +0000 e, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j85ap", :productType=>"iPad4,4", :displayName=>"iPad mini 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j85ap", :productType=>"iPad4,4", :displayName=>"iPad mini 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j85ap", :productType=>"iPad4,4", :displayName=>"iPad mini 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j85ap", :productType=>"iPad4,4", :displayName=>"iPad mini 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j85ap", :productType=>"iPad4,4", :displayName=>"iPad mini 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j86ap", :productType=>"iPad4,5", :displayName=>"iPad mini 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j86ap", :productType=>"iPad4,5", :displayName=>"iPad mini 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j86ap", :prod +2020-11-23 12:31:55 +0000 uctType=>"iPad4,5", :displayName=>"iPad mini 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j86ap", :productType=>"iPad4,5", :displayName=>"iPad mini 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j86ap", :productType=>"iPad4,5", :displayName=>"iPad mini 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j87ap", :productType=>"iPad4,6", :displayName=>"iPad mini 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j87ap", :productType=>"iPad4,6", :displayName=>"iPad mini 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j87ap", :productType=>"iPad4,6", :displayName=>"iPad mini 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j87ap", :productType=>"iPad4,6", :displayName=>"iPad mini 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j87ap", :productType=>"iPad4,6", :displayName=>"iPad mini 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :arch +2020-11-23 12:31:55 +0000 itecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j85map", :productType=>"iPad4,7", :displayName=>"iPad mini 3"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j85map", :productType=>"iPad4,7", :displayName=>"iPad mini 3"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j85map", :productType=>"iPad4,7", :displayName=>"iPad mini 3"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j85map", :productType=>"iPad4,7", :displayName=>"iPad mini 3"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j85map", :productType=>"iPad4,7", :displayName=>"iPad mini 3"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j86map", :productType=>"iPad4,8", :displayName=>"iPad mini 3"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j86map", :productType=>"iPad4,8", :displayName=>"iPad mini 3"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemory +2020-11-23 12:31:55 +0000 Class=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j86map", :productType=>"iPad4,8", :displayName=>"iPad mini 3"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j86map", :productType=>"iPad4,8", :displayName=>"iPad mini 3"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j86map", :productType=>"iPad4,8", :displayName=>"iPad mini 3"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j87map", :productType=>"iPad4,9", :displayName=>"iPad mini 3"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j87map", :productType=>"iPad4,9", :displayName=>"iPad mini 3"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j87map", :productType=>"iPad4,9", :displayName=>"iPad mini 3"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j87map", :productType=>"iPad4,9", :displayName=>"iPad mini 3"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :sup +2020-11-23 12:31:55 +0000 portsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j87map", :productType=>"iPad4,9", :displayName=>"iPad mini 3"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j96ap", :productType=>"iPad5,1", :displayName=>"iPad mini 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j96ap", :productType=>"iPad5,1", :displayName=>"iPad mini 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j96ap", :productType=>"iPad5,1", :displayName=>"iPad mini 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j96ap", :productType=>"iPad5,1", :displayName=>"iPad mini 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j96ap", :productType=>"iPad5,1", :displayName=>"iPad mini 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j96ap", :productType=>"iPad5,1", :displayName=>"iPad mini 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat +2020-11-23 12:31:55 +0000 2=>false}} + {:device=>{:target=>"j97ap", :productType=>"iPad5,2", :displayName=>"iPad mini 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j97ap", :productType=>"iPad5,2", :displayName=>"iPad mini 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j97ap", :productType=>"iPad5,2", :displayName=>"iPad mini 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j97ap", :productType=>"iPad5,2", :displayName=>"iPad mini 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j97ap", :productType=>"iPad5,2", :displayName=>"iPad mini 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j97ap", :productType=>"iPad5,2", :displayName=>"iPad mini 4"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j81ap", :productType=>"iPad5,3", :displayName=>"iPad Air 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j81ap", :productType=>"iPad5,3", :displayNa +2020-11-23 12:31:55 +0000 me=>"iPad Air 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j81ap", :productType=>"iPad5,3", :displayName=>"iPad Air 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j81ap", :productType=>"iPad5,3", :displayName=>"iPad Air 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j81ap", :productType=>"iPad5,3", :displayName=>"iPad Air 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j81ap", :productType=>"iPad5,3", :displayName=>"iPad Air 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j82ap", :productType=>"iPad5,4", :displayName=>"iPad Air 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j82ap", :productType=>"iPad5,4", :displayName=>"iPad Air 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j82ap", :productType=>"iPad5,4", :displayName=>"iPad Air 2"}, :traits=>{:deploymentTarget=>#, :passDeployme +2020-11-23 12:31:55 +0000 ntTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j82ap", :productType=>"iPad5,4", :displayName=>"iPad Air 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j82ap", :productType=>"iPad5,4", :displayName=>"iPad Air 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j82ap", :productType=>"iPad5,4", :displayName=>"iPad Air 2"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE2", :gfxFeatureSetFallbacks=>["APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j71sap", :productType=>"iPad6,11", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j71sap", :productType=>"iPad6,11", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j71sap", :productType=>"iPad6,11", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j71sap", :productType=>"iPad6,11", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j71sap", :productType=>"iPad6,11", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j71tap", :productType=>"iPad6,11", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j71tap", :productType=>"iPad6,11", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j71tap", :productType=>"iPad6,11", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j71tap", :productType=>"iPad6,11", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j72sap", :productType=>"iPad6,12", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFor +2020-11-23 12:31:55 +0000 mat2=>false}} + {:device=>{:target=>"j72sap", :productType=>"iPad6,12", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j72sap", :productType=>"iPad6,12", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j72sap", :productType=>"iPad6,12", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j72sap", :productType=>"iPad6,12", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j72tap", :productType=>"iPad6,12", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j72tap", :productType=>"iPad6,12", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j72tap", :productType=>"iPad6,12", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0 +2020-11-23 12:31:55 +0000 "], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j72tap", :productType=>"iPad6,12", :displayName=>"iPad (5th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j127ap", :productType=>"iPad6,3", :displayName=>"iPad Pro (9.7-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j127ap", :productType=>"iPad6,3", :displayName=>"iPad Pro (9.7-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j127ap", :productType=>"iPad6,3", :displayName=>"iPad Pro (9.7-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j127ap", :productType=>"iPad6,3", :displayName=>"iPad Pro (9.7-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j127ap", :productType=>"iPad6,3", :displayName=>"iPad Pro (9.7-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j127ap", :productType=>"iPad6,3", :displayName=>"iPad Pro (9.7-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j128ap", :productType=>"iPad6,4", :displayName=>"iPad Pro (9.7-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j128ap", :productType=>"iPad6,4", :displayName=>"iPad Pro (9.7-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j128ap", :productType=>"iPad6,4", :displayName=>"iPad Pro (9.7-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j128ap", :productType=>"iPad6,4", :displayName=>"iPad Pro (9.7-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j128ap", :productType=>"iPad6,4", :displayName=>"iPad Pro (9.7-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j128ap", :productType=>"iPad6,4", :displayName=>"iPad Pro (9.7-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j98aap", :productType=>"iPad6,7", :displayName=>"iPad Pro (12.9-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j98aap", :productType=>"iPad6,7", :displayName=>"iPad Pro (12.9-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j98aap", :productType=>"iPad6,7", :displayName=>"iPad Pro (12.9-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j98aap", :productType=>"iPad6,7", :displayName=>"iPad Pro (12.9-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j98aap", :productType=>"iPad6,7", :displayName=>"iPad Pro (12.9-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j98aap", :productType=>"iPad6,7", :displayName=>"iPad Pro (12.9-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j99aap", :productType=>"iPad6,8", :displayName=>"iPad Pro (12.9-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j99aap", :productType=>"iPad6,8", :displayName=>"iPad Pro (12.9-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j99aap", :productType=>"iPad6,8", :displayName=>"iPad Pro (12.9-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j99aap", :productType=>"iPad6,8", :displayName=>"iPad Pro (12.9-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j99aap", :productType=>"iPad6,8", :displayName=>"iPad Pro (12.9-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j99aap", :productType=>"iPad6,8", :displayName=>"iPad Pro (12.9-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j120ap", :productType=>"iPad7,1", :displayName=>"iPad Pro (12.9-inch) (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j120ap", :productType=>"iPad7,1", :displayName=>"iPad Pro (12.9-inch) (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j120ap", :productType=>"iPad7,1", :displayName=>"iPad Pro (12.9-inch) (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j120ap", :productType=>"iPad7,1", :displayName=>"iPad Pro (12.9-inch) (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j120ap", :productType=>"iPad7,1", :displayName=>"iPad Pro (12.9-inch) (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j171ap", :productType=>"iPad7,11", :displayName=>"iPad (7th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j172ap", :productType=>"iPad7,12", :displayName=>"iPad (7th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j121ap", :productType=>"iPad7,2", :displayName=>"iPad Pro (12.9-inch) (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j121ap", :productType=>"iPad7,2", :displayName=>"iPad Pro (12.9-inch) (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j121ap", :productType=>"iPad7,2", :displayName=>"iPad Pro (12.9-inch) (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j121ap", :productType=>"iPad7,2", :displayName=>"iPad Pro (12.9-inch) (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j121ap", :productType=>"iPad7,2", :displayName=>"iPad Pro (12.9-inch) (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j207ap", :productType=>"iPad7,3", :displayName=>"iPad Pro (10.5-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j207ap", :productType=>"iPad7,3", :displayName=>"iPad Pro (10.5-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j207ap", :productType=>"iPad7,3", :displayName=>"iPad Pro (10.5-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j207ap", :productType=>"iPad7,3", :displayName=>"iPad Pro (10.5-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j207ap", :productType=>"iPad7,3", :displayName=>"iPad Pro (10.5-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j208ap", :productType=>"iPad7,4", :displayName=>"iPad Pro (10.5-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j208ap", :productType=>"iPad7,4", :displayName=>"iPad Pro (10.5-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j208ap", :productType=>"iPad7,4", :displayName=>"iPad Pro (10.5-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j208ap", :productType=>"iPad7,4", :displayName=>"iPad Pro (10.5-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j208ap", :productType=>"iPad7,4", :displayName=>"iPad Pro (10.5-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2224, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j71bap", :productType=>"iPad7,5", :displayName=>"iPad (6th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j71bap", :productType=>"iPad7,5", :displayName=>"iPad (6th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j71bap", :productType=>"iPad7,5", :displayName=>"iPad (6th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j71bap", :productType=>"iPad7,5", :displayName=>"iPad (6th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j72bap", :productType=>"iPad7,6", :displayName=>"iPad (6th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j72bap", :productType=>"iPad7,6", :displayName=>"iPad (6th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j72bap", :productType=>"iPad7,6", :displayName=>"iPad (6th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j72bap", :productType=>"iPad7,6", :displayName=>"iPad (6th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j317ap", :productType=>"iPad8,1", :displayName=>"iPad Pro (11-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j317ap", :productType=>"iPad8,1", :displayName=>"iPad Pro (11-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j317ap", :productType=>"iPad8,1", :displayName=>"iPad Pro (11-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j418ap", :productType=>"iPad8,10", :displayName=>"iPad Pro (11-inch) (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j420ap", :productType=>"iPad8,11", :displayName=>"iPad Pro (12.9-inch) (4th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j421ap", :productType=>"iPad8,12", :displayName=>"iPad Pro (12.9-inch) (4th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j317xap", :productType=>"iPad8,2", :displayName=>"iPad Pro (11-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j317xap", :productType=>"iPad8,2", :displayName=>"iPad Pro (11-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j317xap", :productType=>"iPad8,2", :displayName=>"iPad Pro (11-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j318ap", :productType=>"iPad8,3", :displayName=>"iPad Pro (11-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j318ap", :productType=>"iPad8,3", :displayName=>"iPad Pro (11-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j318ap", :productType=>"iPad8,3", :displayName=>"iPad Pro (11-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j318xap", :productType=>"iPad8,4", :displayName=>"iPad Pro (11-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j318xap", :productType=>"iPad8,4", :displayName=>"iPad Pro (11-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j318xap", :productType=>"iPad8,4", :displayName=>"iPad Pro (11-inch)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j320ap", :productType=>"iPad8,5", :displayName=>"iPad Pro (12.9-inch) (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j320ap", :productType=>"iPad8,5", :displayName=>"iPad Pro (12.9-inch) (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j320ap", :productType=>"iPad8,5", :displayName=>"iPad Pro (12.9-inch) (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j320xap", :productType=>"iPad8,6", :displayName=>"iPad Pro (12.9-inch) (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j320xap", :productType=>"iPad8,6", :displayName=>"iPad Pro (12.9-inch) (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j320xap", :productType=>"iPad8,6", :displayName=>"iPad Pro (12.9-inch) (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j321ap", :productType=>"iPad8,7", :displayName=>"iPad Pro (12.9-inch) (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j321ap", :productType=>"iPad8,7", :displayName=>"iPad Pro (12.9-inch) (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j321ap", :productType=>"iPad8,7", :displayName=>"iPad Pro (12.9-inch) (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j321xap", :productType=>"iPad8,8", :displayName=>"iPad Pro (12.9-inch) (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"j321xap", :productType=>"iPad8,8", :displayName=>"iPad Pro (12.9-inch) (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"j321xap", :productType=>"iPad8,8", :displayName=>"iPad Pro (12.9-inch) (3rd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2732, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"j417ap", :productType=>"iPad8,9", :displayName=>"iPad Pro (11-inch) (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"pad", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>2388, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>6, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d20ap", :productType=>"iPhone10,1", :displayName=>"iPhone 8"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d20ap", :productType=>"iPhone10,1", :displayName=>"iPhone 8"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL4,1", :gfxFeatureSetFallbacks=>["MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"d20ap", :productType=>"iPhone10,1", :displayName=>"iPhone 8"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL4,1", :gfxFeatureSetFallbacks=>["MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d20ap", :productType=>"iPhone10,1", :displayName=>"iPhone 8"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d21ap", :productType=>"iPhone10,2", :displayName=>"iPhone 8 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d21ap", :productType=>"iPhone10,2", :displayName=>"iPhone 8 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL4,1", :gfxFeatureSetFallbacks=>["MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d21ap", :productType=>"iPhone10,2", :displayName=>"iPhone 8 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL4,1", :gfxFeatureSetFallbacks=>["MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"d21ap", :productType=>"iPhone10,2", :displayName=>"iPhone 8 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d22ap", :productType=>"iPhone10,3", :displayName=>"iPhone X"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2436, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d22ap", :productType=>"iPhone10,3", :displayName=>"iPhone X"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>2436, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL4,1", :gfxFeatureSetFallbacks=>["MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d22ap", :productType=>"iPhone10,3", :displayName=>"iPhone X"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>2436, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL4,1", :gfxFeatureSetFallbacks=>["MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"d22ap", :productType=>"iPhone10,3", :displayName=>"iPhone X"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2436, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d201ap", :productType=>"iPhone10,4", :displayName=>"iPhone 8"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d201ap", :productType=>"iPhone10,4", :displayName=>"iPhone 8"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL4,1", :gfxFeatureSetFallbacks=>["MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d201ap", :productType=>"iPhone10,4", :displayName=>"iPhone 8"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL4,1", :gfxFeatureSetFallbacks=>["MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d201ap", :productType=>"iPhone10,4", :displayName=>"iPhone 8"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"d211ap", :productType=>"iPhone10,5", :displayName=>"iPhone 8 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d211ap", :productType=>"iPhone10,5", :displayName=>"iPhone 8 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL4,1", :gfxFeatureSetFallbacks=>["MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d211ap", :productType=>"iPhone10,5", :displayName=>"iPhone 8 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL4,1", :gfxFeatureSetFallbacks=>["MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d211ap", :productType=>"iPhone10,5", :displayName=>"iPhone 8 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"d221ap", :productType=>"iPhone10,6", :displayName=>"iPhone X"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2436, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d221ap", :productType=>"iPhone10,6", :displayName=>"iPhone X"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>2436, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL4,1", :gfxFeatureSetFallbacks=>["MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d221ap", :productType=>"iPhone10,6", :displayName=>"iPhone X"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>2436, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL4,1", :gfxFeatureSetFallbacks=>["MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d221ap", :productType=>"iPhone10,6", :displayName=>"iPhone X"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2436, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE4", :gfxFeatureSetFallbacks=>["APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"d321ap", :productType=>"iPhone11,2", :displayName=>"iPhone XS"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>2436, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d321ap", :productType=>"iPhone11,2", :displayName=>"iPhone XS"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>2436, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d321ap", :productType=>"iPhone11,2", :displayName=>"iPhone XS"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2436, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d331ap", :productType=>"iPhone11,4", :displayName=>"iPhone XS Max"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>2688, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d331ap", :productType=>"iPhone11,4", :displayName=>"iPhone XS Max"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>2688, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"d331ap", :productType=>"iPhone11,4", :displayName=>"iPhone XS Max"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2688, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d331pap", :productType=>"iPhone11,6", :displayName=>"iPhone XS Max"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>2688, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d331pap", :productType=>"iPhone11,6", :displayName=>"iPhone XS Max"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>2688, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d331pap", :productType=>"iPhone11,6", :displayName=>"iPhone XS Max"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2688, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n841ap", :productType=>"iPhone11,8", :displayName=>"iPhone XR"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>1792, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n841ap", :productType=>"iPhone11,8", :displayName=>"iPhone XR"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>1792, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL5,1", :gfxFeatureSetFallbacks=>["MTL4,1", "MTL3,2", "MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n841ap", :productType=>"iPhone11,8", :displayName=>"iPhone XR"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>1792, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE5", :gfxFeatureSetFallbacks=>["APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n104ap", :productType=>"iPhone12,1", :displayName=>"iPhone 11"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>1792, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE6", :gfxFeatureSetFallbacks=>["APPLE5", "APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"d421ap", :productType=>"iPhone12,3", :displayName=>"iPhone 11 Pro"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2436, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE6", :gfxFeatureSetFallbacks=>["APPLE5", "APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d431ap", :productType=>"iPhone12,5", :displayName=>"iPhone 11 Pro Max"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>2688, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>3, :gfxFeatureSetClass=>"APPLE6", :gfxFeatureSetFallbacks=>["APPLE5", "APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d79ap", :productType=>"iPhone12,8", :displayName=>"iPhone SE (2nd generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64e", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE6", :gfxFeatureSetFallbacks=>["APPLE5", "APPLE4", "APPLE3", "APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n94ap", :productType=>"iPhone4,1", :displayName=>"iPhone 4S"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n41ap", :productType=>"iPhone5,1", :displayName=>"iPhone 5"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7s", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n41ap", :productType=>"iPhone5,1", :displayName=>"iPhone 5"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7s", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n42ap", :productType=>"iPhone5,2", :displayName=>"iPhone 5"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7s", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n42ap", :productType=>"iPhone5,2", :displayName=>"iPhone 5"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7s", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n48ap", :productType=>"iPhone5,3", :displayName=>"iPhone 5c"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7s", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n48ap", :productType=>"iPhone5,3", :displayName=>"iPhone 5c"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7s", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n49ap", :productType=>"iPhone5,4", :displayName=>"iPhone 5c"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7s", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n49ap", :productType=>"iPhone5,4", :displayName=>"iPhone 5c"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7s", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n51ap", :productType=>"iPhone6,1", :displayName=>"iPhone 5s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n51ap", :productType=>"iPhone6,1", :displayName=>"iPhone 5s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n51ap", :productType=>"iPhone6,1", :displayName=>"iPhone 5s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n51ap", :productType=>"iPhone6,1", :displayName=>"iPhone 5s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n51ap", :productType=>"iPhone6,1", :displayName=>"iPhone 5s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n53ap", :productType=>"iPhone6,2", :displayName=>"iPhone 5s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n53ap", :productType=>"iPhone6,2", :displayName=>"iPhone 5s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n53ap", :productType=>"iPhone6,2", :displayName=>"iPhone 5s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n53ap", :productType=>"iPhone6,2", :displayName=>"iPhone 5s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n53ap", :productType=>"iPhone6,2", :displayName=>"iPhone 5s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL1,2", :gfxFeatureSetFallbacks=>["GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n56ap", :productType=>"iPhone7,1", :displayName=>"iPhone 6 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n56ap", :productType=>"iPhone7,1", :displayName=>"iPhone 6 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n56ap", :productType=>"iPhone7,1", :displayName=>"iPhone 6 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n56ap", :productType=>"iPhone7,1", :displayName=>"iPhone 6 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n56ap", :productType=>"iPhone7,1", :displayName=>"iPhone 6 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n61ap", :productType=>"iPhone7,2", :displayName=>"iPhone 6"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n61ap", :productType=>"iPhone7,2", :displayName=>"iPhone 6"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n61ap", :productType=>"iPhone7,2", :displayName=>"iPhone 6"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n61ap", :productType=>"iPhone7,2", :displayName=>"iPhone 6"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n61ap", :productType=>"iPhone7,2", :displayName=>"iPhone 6"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n71map", :productType=>"iPhone8,1", :displayName=>"iPhone 6s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n71map", :productType=>"iPhone8,1", :displayName=>"iPhone 6s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n71map", :productType=>"iPhone8,1", :displayName=>"iPhone 6s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n71map", :productType=>"iPhone8,1", :displayName=>"iPhone 6s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n71map", :productType=>"iPhone8,1", :displayName=>"iPhone 6s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n71map", :productType=>"iPhone8,1", :displayName=>"iPhone 6s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n71ap", :productType=>"iPhone8,1", :displayName=>"iPhone 6s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :ar +2020-11-23 12:31:55 +0000 tworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n71ap", :productType=>"iPhone8,1", :displayName=>"iPhone 6s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n71ap", :productType=>"iPhone8,1", :displayName=>"iPhone 6s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n71ap", :productType=>"iPhone8,1", :displayName=>"iPhone 6s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n71ap", :productType=>"iPhone8,1", :displayName=>"iPhone 6s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n71ap", :productType=>"iPhone8,1", :displayName=>"iPhone 6s"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n66map", :productType=>"iPhone8,2", :displayName=>"iPhone 6s Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n66map", :productType=>"iPhone8,2", :displayName=>"iPhone 6s Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n66map", :productType=>"iPhone8,2", :displayName=>"iPhone 6s Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n66map", :productType=>"iPhone8,2", :displayName=>"iPhone 6s Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n66map", :productType=>"iPhone8,2", :displayName=>"iPhone 6s Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n66map", :productType=>"iPhone8,2", :displayName=>"iPhone 6s Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n66ap", :productType=>"iPhone8,2", :displayName=>"iPhone 6s Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n66ap", :productType=>"iPhone8,2", :displayName=>"iPhone 6s Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3 +2020-11-23 12:31:55 +0000 , :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n66ap", :productType=>"iPhone8,2", :displayName=>"iPhone 6s Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n66ap", :productType=>"iPhone8,2", :displayName=>"iPhone 6s Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n66ap", :productType=>"iPhone8,2", :displayName=>"iPhone 6s Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n66ap", :productType=>"iPhone8,2", :displayName=>"iPhone 6s Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n69uap", :productType=>"iPhone8,4", :displayName=>"iPhone SE (1st generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n69uap", :productType=>"iPhone8,4", :displayName=>"iPhone SE (1st generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWa +2020-11-23 12:31:55 +0000 tchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n69uap", :productType=>"iPhone8,4", :displayName=>"iPhone SE (1st generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n69uap", :productType=>"iPhone8,4", :displayName=>"iPhone SE (1st generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n69uap", :productType=>"iPhone8,4", :displayName=>"iPhone SE (1st generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n69ap", :productType=>"iPhone8,4", :displayName=>"iPhone SE (1st generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n69ap", :productType=>"iPhone8,4", :displayName=>"iPhone SE (1st generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n69ap", :productType=>"iPhone8,4", :displayName=>"iPhone SE (1st generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n69ap", :productType=>"iPhone8,4", :displayName=>"iPhone SE (1st generation)"}, :traits=>{:deploymentTarget=># +2020-11-23 12:31:55 +0000 , :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n69ap", :productType=>"iPhone8,4", :displayName=>"iPhone SE (1st generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n69ap", :productType=>"iPhone8,4", :displayName=>"iPhone SE (1st generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d10ap", :productType=>"iPhone9,1", :displayName=>"iPhone 7"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d10ap", :productType=>"iPhone9,1", :displayName=>"iPhone 7"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d10ap", :productType=>"iPhone9,1", :displayName=>"iPhone 7"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d10ap", :productType=>"iPhone9,1", :displayName=>"iPhone 7"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureS +2020-11-23 12:31:55 +0000 etFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d10ap", :productType=>"iPhone9,1", :displayName=>"iPhone 7"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d11ap", :productType=>"iPhone9,2", :displayName=>"iPhone 7 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d11ap", :productType=>"iPhone9,2", :displayName=>"iPhone 7 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d11ap", :productType=>"iPhone9,2", :displayName=>"iPhone 7 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d11ap", :productType=>"iPhone9,2", :displayName=>"iPhone 7 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d11ap", :productType=>"iPhone9,2", :displayName=>"iPhone 7 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d101ap", :productType=>"iPhone9,3", :displayName=>"iPhone 7"}, :traits=>{:dep +2020-11-23 12:31:55 +0000 loymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d101ap", :productType=>"iPhone9,3", :displayName=>"iPhone 7"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d101ap", :productType=>"iPhone9,3", :displayName=>"iPhone 7"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d101ap", :productType=>"iPhone9,3", :displayName=>"iPhone 7"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d101ap", :productType=>"iPhone9,3", :displayName=>"iPhone 7"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>2, :artworkDevSubtype=>569, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"d111ap", :productType=>"iPhone9,4", :displayName=>"iPhone 7 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d111ap", :productType=>"iPhone9,4", :displayName=>"iPhone 7 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["AP +2020-11-23 12:31:55 +0000 PLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d111ap", :productType=>"iPhone9,4", :displayName=>"iPhone 7 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d111ap", :productType=>"iPhone9,4", :displayName=>"iPhone 7 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car", "watch"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"d111ap", :productType=>"iPhone9,4", :displayName=>"iPhone 7 Plus"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>["car"], :artworkScaleFactor=>3, :artworkDevSubtype=>570, :artworkDisplayGamut=>"P3", :devPerfMemoryClass=>4, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} + {:device=>{:target=>"n78ap", :productType=>"iPod5,1", :displayName=>"iPod touch"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"armv7", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>0, :gfxFeatureSetClass=>"GLES2,0", :gfxFeatureSetFallbacks=>[], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n102ap", :productType=>"iPod7,1", :displayName=>"iPod touch (6th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n102ap", :productType=>"iPod7,1", :displayName=>"iPod touch (6th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} +2020-11-23 12:31:55 +0000 {:device=>{:target=>"n102ap", :productType=>"iPod7,1", :displayName=>"iPod touch (6th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n102ap", :productType=>"iPod7,1", :displayName=>"iPod touch (6th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n102ap", :productType=>"iPod7,1", :displayName=>"iPod touch (6th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>false, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>1, :gfxFeatureSetClass=>"MTL2,2", :gfxFeatureSetFallbacks=>["MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>false, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n112ap", :productType=>"iPod9,1", :displayName=>"iPod touch (7th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"MTL3,2", :gfxFeatureSetFallbacks=>["MTL3,1", "MTL2,2", "MTL1,2", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>true, :supportsEmbeddedUniversalWatchApp=>true, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>false}} + {:device=>{:target=>"n112ap", :productType=>"iPod9,1", :displayName=>"iPod touch (7th generation)"}, :traits=>{:deploymentTarget=>#, :passDeploymentTargetToAssetutil=>true, :architecture=>"arm64", :artworkDevIdiom=>"phone", :artworkHostedIdioms=>[], :artworkScaleFactor=>2, :artworkDevSubtype=>568, :artworkDisplayGamut=>"sRGB", :devPerfMemoryClass=>2, :gfxFeatureSetClass=>"APPLE3", :gfxFeatureSetFallbacks=>["APPLE3v1", "APPLE2", "APPLE1", "GLES2,0"], :featuresToRemove=>[], :supportsEmbeddedWatchApp=>false, :supportsEmbeddedUniversalWatchApp=>false, :hasSwiftRuntime=>true, :supportsEncryptionFormat2=>true}} +2020-11-23 12:31:55 +0000 warning: Configuration issue: platform iPhoneSimulator.platform doesn't have any non-simulator SDKs; ignoring it +2020-11-23 12:31:55 +0000 Scanning IPA... +2020-11-23 12:31:55 +0000 Complete LinkageGraph: + FlankGameLoopExample.app/FlankGameLoopExample arm64 -> + +2020-11-23 12:31:55 +0000 Root IPAs: +["/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root"] +Validating IPA structure... +2020-11-23 12:31:55 +0000 Compiling bitcode... +2020-11-23 12:31:55 +0000 FlankGameLoopExample.app (identifier: io.gogoapps.flankgameloop, platform: iphoneos) + mh_execute 'FlankGameLoopExample.app/FlankGameLoopExample'... +2020-11-23 12:31:55 +0000 $ mkdir -p /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-in/arm64/Payload/FlankGameLoopExample.app +2020-11-23 12:31:55 +0000 $ mkdir -p /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app +2020-11-23 12:31:55 +0000 $ mkdir -p /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-in/arm64/Payload/FlankGameLoopExample.app +2020-11-23 12:31:55 +0000 $ cp /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.\~\~\~FE2bSA/Root/Payload/FlankGameLoopExample.app/FlankGameLoopExample /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-in/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample +2020-11-23 12:31:55 +0000 .arm64 (compile) + Compiling bitcode for arm64... +2020-11-23 12:31:55 +0000 Compiling arm64 bitcode in 'FlankGameLoopExample' +2020-11-23 12:31:55 +0000 $ mkdir -p /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app +2020-11-23 12:31:56 +0000 $ /Applications/Xcode.app/Contents/Developer/usr/bin/python3 /Applications/Xcode.app/Contents/Developer/usr/bin/bitcode-build-tool -v -t /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin --sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk -o /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample --generate-dsym /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample.dSYM --strip-swift-symbols /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-in/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample + Status: pid 16045 exit 0 + Stdout: + SDK path: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk + SDK version: 14.2 + PATH: ['/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin', '/Applications/Xcode.app/Contents/Developer/usr/bin'] + Using: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo + MachoInfo: cd / + ['/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo', '-info', '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-in/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample'] + -= Output =- + Non-fat file: /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-in/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample is architecture: arm64 + Exited with 0 + + Command took 0 seconds + Using: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/dwarfdump + GetUUID: cd / + ['/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/dwarfdump', '-u', '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-in/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample'] + -= Output =- + UUID: 71515402-A864-3520-985A-9C0020398A13 (arm64) /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-in/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample + Exited with 0 + + Command took 0 seconds + Using: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/segedit + ExtractXAR: cd / + ['/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/segedit', '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-in/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample', '-extract', '__LLVM', '__bundle', '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/FlankGameLoopExampledpcwevd5/FlankGameLoopExample.arm64.xar'] + -= Output =- + Exited with 0 + + Command took 0 seconds + Bitcode bundle version: 1.0 + Setting platform to: iOS + Using: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld + Using: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc + Using: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang + Swift: cd /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/tempv_gax5_m + ['/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc', '-frontend', '-emit-object', '-target', 'arm64-apple-ios13.0', '-Xllvm', '-aarch64-use-tbi', '-O', '-disable-llvm-optzns', '-module-name', 'FlankGameLoopExample', '1.bc', '-o', '1.o'] + -= Output =- + Exited with 0 + + Command took 0 seconds + Swift: cd /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/tempv_ +2020-11-23 12:31:56 +0000 gax5_m + ['/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc', '-frontend', '-emit-object', '-target', 'arm64-apple-ios13.0', '-Xllvm', '-aarch64-use-tbi', '-O', '-disable-llvm-optzns', '-module-name', 'FlankGameLoopExample', '2.bc', '-o', '2.o'] + -= Output =- + Exited with 0 + + Command took 0 seconds + Swift: cd /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/tempv_gax5_m + ['/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc', '-frontend', '-emit-object', '-target', 'arm64-apple-ios13.0', '-Xllvm', '-aarch64-use-tbi', '-O', '-disable-llvm-optzns', '-module-name', 'FlankGameLoopExample', '3.bc', '-o', '3.o'] + -= Output =- + Exited with 0 + + Command took 0 seconds + Swift: cd /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/tempv_gax5_m + ['/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc', '-frontend', '-emit-object', '-target', 'arm64-apple-ios13.0', '-Xllvm', '-aarch64-use-tbi', '-O', '-disable-llvm-optzns', '-module-name', 'FlankGameLoopExample', '4.bc', '-o', '4.o'] + -= Output =- + Exited with 0 + + Command took 0 seconds + Clang: cd /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/tempv_gax5_m + ['/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang', '-cc1', '-triple', 'arm64-apple-ios7.0.0', '-emit-obj', '-disable-llvm-passes', '-faligned-alloc-unavailable', '-target-sdk-version=14.2', '-target-abi', 'darwinpcs', '-O2', '-x', 'ir', '5', '-o', '5.o'] + -= Output =- + Exited with 0 + + Command took 0 seconds + Clang: cd /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/tempv_gax5_m + ['/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang', '-cc1', '-triple', 'arm64-apple-ios7.0.0', '-emit-obj', '-disable-llvm-passes', '-faligned-alloc-unavailable', '-target-sdk-version=14.2', '-target-abi', 'darwinpcs', '-O2', '-x', 'ir', '6', '-o', '6.o'] + -= Output =- + Exited with 0 + + Command took 0 seconds + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/System/Library/Frameworks/Foundation.framework/Foundation.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/libobjc.A.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/libSystem.B.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/System/Library/Frameworks/SpriteKit.framework/SpriteKit.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/System/Library/Frameworks/UIKit.framework/UIKit.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftCore.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftCoreFoundation.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftCoreGraphics.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftCoreImage.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftDarwin.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPho +2020-11-23 12:31:56 +0000 neOS14.2.sdk/usr/lib/swift/libswiftDispatch.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftFoundation.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftGLKit.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftGameplayKit.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftMetal.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftModelIO.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftObjectiveC.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftQuartzCore.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftSceneKit.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftSpriteKit.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftUIKit.tbd + Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftsimd.tbd + Ld: cd /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/tempv_gax5_m + ['/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld', '-arch', 'arm64', '-execute', '-platform_version', 'ios', '13.0', '14.2', '-e', '_main', '-rpath', '@executable_path/Frameworks', '-executable_path', '/Users/zuziakaxel/Library/Developer/Xcode/DerivedData/FlankGameLoopExample-ctttwdecncwnhdgjmkmmdknazrrs/Build/Intermediates.noindex/ArchiveIntermediates/FlankGameLoopExample/InstallationBuildProductsLocation/Applications/FlankGameLoopExample.app/FlankGameLoopExample', '-dead_strip', '-syslibroot', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk', '-sdk_version', '14.2', '-filelist', '/private/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/FlankGameLoopExampledpcwevd5/FlankGameLoopExample.arm64.out.LinkFileList', '-ignore_auto_link', '-allow_dead_duplicates', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/System/Library/Frameworks/Foundation.framework/Foundation.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/libobjc.A.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/libSystem.B.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/System/Library/Frameworks/SpriteKit.framework/SpriteKit.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/System/Library/Frameworks/UIKit.framework/UIKit.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftCore.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftCoreFoundation.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftCoreGraphics.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneO +2020-11-23 12:31:56 +0000 S.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftCoreImage.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftDarwin.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftDispatch.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftFoundation.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftGLKit.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftGameplayKit.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftMetal.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftModelIO.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftObjectiveC.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftQuartzCore.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftSceneKit.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftSpriteKit.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftUIKit.tbd', '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.2.sdk/usr/lib/swift/libswiftsimd.tbd', '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/12.0.0/lib/darwin/libclang_rt.ios.a', '-o', '/private/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/FlankGameLoopExampledpcwevd5/FlankGameLoopExample.arm64.out'] + -= Output =- + ld: warning: -sdk_version and -platform_version are not compatible, ignoring -sdk_version + Exited with 0 + + Command took 0 seconds + Cannot generate useful dsym from input macho file: /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-in/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample + GetUUID: cd / + ['/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/dwarfdump', '-u', '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample'] + -= Output =- + UUID: 85A4D313-8F5C-3C05-8AAA-96B87EBB2BA5 (arm64) /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample + Exited with 0 + + Command took 0 seconds + Using: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/dsymutil + Dsymutil: cd / + ['/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/dsymutil', '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample', '-o', '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample.dSYM'] + -= Output =- + Exited with 0 + + Command took 0 seconds + Using: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip + StripSymbols: cd / + ['/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip', '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-160 +2020-11-23 12:31:56 +0000 20-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample'] + -= Output =- + Exited with 0 + + Command took 0 seconds + + Stderr: + + +2020-11-23 12:31:56 +0000 bitcode-build-tool built /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample arm64:85A4D313-8F5C-3C05-8AAA-96B87EBB2BA5 from arm64:71515402-A864-3520-985A-9C0020398A13 +2020-11-23 12:31:56 +0000 $ /Applications/Xcode.app/Contents/Developer/usr/bin/symbols -failIfMissingDsym -symbolsPackageDir /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/symcache-FlankGameLoopExample20201123-16020-1nuuoxb /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample + Status: pid 16067 exit 0 + Stdout: + /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample [arm64, 0.003710 seconds]: + + Stderr: + + +2020-11-23 12:31:56 +0000 SymbolsStore: Added .symbols for 85A4D313-8F5C-3C05-8AAA-96B87EBB2BA5: /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/symcache-FlankGameLoopExample20201123-16020-1nuuoxb/85A4D313-8F5C-3C05-8AAA-96B87EBB2BA5.symbols +2020-11-23 12:31:56 +0000 Renaming '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample.dSYM' -> '85A4D313-8F5C-3C05-8AAA-96B87EBB2BA5.dSYM') +2020-11-23 12:31:56 +0000 $ mv /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample.dSYM /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app/85A4D313-8F5C-3C05-8AAA-96B87EBB2BA5.dSYM +2020-11-23 12:31:56 +0000 SymbolsStore: Added .dSYM for 85A4D313-8F5C-3C05-8AAA-96B87EBB2BA5: /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app/85A4D313-8F5C-3C05-8AAA-96B87EBB2BA5.dSYM +2020-11-23 12:31:56 +0000 Reassembling FlankGameLoopExample.app/FlankGameLoopExample [arm64] +2020-11-23 12:31:56 +0000 $ mkdir -p /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/universal-MachOs/Payload/FlankGameLoopExample.app +2020-11-23 12:31:56 +0000 $ cp /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/universal-MachOs/Payload/FlankGameLoopExample.app/FlankGameLoopExample +2020-11-23 12:31:56 +0000 [cp /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app/FlankGameLoopExample /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/universal-MachOs/Payload/FlankGameLoopExample.app/FlankGameLoopExample] +2020-11-23 12:31:56 +0000 Creating universal IPA contents for all variants +2020-11-23 12:31:56 +0000 Creating directory /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos +$ mkdir -p /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos +2020-11-23 12:31:56 +0000 Copying FlankGameLoopExample.app output payload directory + bndl FlankGameLoopExample.app (iphoneos) +$ mkdir -p /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/Payload/FlankGameLoopExample.app +2020-11-23 12:31:56 +0000 copy Actions.sks +2020-11-23 12:31:56 +0000 $ cp /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.\~\~\~FE2bSA/Root/Payload/FlankGameLoopExample.app/Actions.sks /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/Payload/FlankGameLoopExample.app/Actions.sks +2020-11-23 12:31:56 +0000 mkdr Base.lproj/ +2020-11-23 12:31:56 +0000 $ mkdir -p /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/Payload/FlankGameLoopExample.app/Base.lproj + mkdr Main.storyboardc/ +$ mkdir -p /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/Payload/FlankGameLoopExample.app/Base.lproj/Main.storyboardc +2020-11-23 12:31:56 +0000 copy BV1-FR-VrT-view-3se-qz-xqx.nib +$ cp /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.\~\~\~FE2bSA/Root/Payload/FlankGameLoopExample.app/Base.lproj/Main.storyboardc/BV1-FR-VrT-view-3se-qz-xqx.nib /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/Payload/FlankGameLoopExample.app/Base.lproj/Main.storyboardc/BV1-FR-VrT-view-3se-qz-xqx.nib +2020-11-23 12:31:56 +0000 copy Info.plist +2020-11-23 12:31:56 +0000 $ cp /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.\~\~\~FE2bSA/Root/Payload/FlankGameLoopExample.app/Base.lproj/Main.storyboardc/Info.plist /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/Payload/FlankGameLoopExample.app/Base.lproj/Main.storyboardc/Info.plist +2020-11-23 12:31:56 +0000 copy UIViewController-BV1-FR-VrT.nib +2020-11-23 12:31:56 +0000 $ cp /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.\~\~\~FE2bSA/Root/Payload/FlankGameLoopExample.app/Base.lproj/Main.storyboardc/UIViewController-BV1-FR-VrT.nib /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/Payload/FlankGameLoopExample.app/Base.lproj/Main.storyboardc/UIViewController-BV1-FR-VrT.nib +2020-11-23 12:31:56 +0000 $ mkdir -p /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/dSYMs +2020-11-23 12:31:56 +0000 $ cp -r /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/thinned-out/arm64/Payload/FlankGameLoopExample.app/85A4D313-8F5C-3C05-8AAA-96B87EBB2BA5.dSYM /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/dSYMs/85A4D313-8F5C-3C05-8AAA-96B87EBB2BA5.dSYM +2020-11-23 12:31:56 +0000 $ mkdir -p /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/Symbols +2020-11-23 12:31:56 +0000 $ cp -r /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/symcache-FlankGameLoopExample20201123-16020-1nuuoxb/85A4D313-8F5C-3C05-8AAA-96B87EBB2BA5.symbols /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/Symbols/85A4D313-8F5C-3C05-8AAA-96B87EBB2BA5.symbols +2020-11-23 12:31:56 +0000 copy FlankGameLoopExample +2020-11-23 12:31:56 +0000 $ cp /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e/universal-MachOs/Payload/FlankGameLoopExample.app/FlankGameLoopExample /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/Payload/FlankGameLoopExample.app/FlankGameLoopExample +2020-11-23 12:31:56 +0000 copy GameScene.sks +2020-11-23 12:31:56 +0000 $ cp /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.\~\~\~FE2bSA/Root/Payload/FlankGameLoopExample.app/GameScene.sks /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/Payload/FlankGameLoopExample.app/GameScene.sks +2020-11-23 12:31:56 +0000 copy Info.plist +2020-11-23 12:31:56 +0000 $ cp /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.\~\~\~FE2bSA/Root/Payload/FlankGameLoopExample.app/Info.plist /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/Payload/FlankGameLoopExample.app/Info.plist +2020-11-23 12:31:56 +0000 copy PkgInfo +2020-11-23 12:31:56 +0000 $ cp /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.\~\~\~FE2bSA/Root/Payload/FlankGameLoopExample.app/PkgInfo /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/Payload/FlankGameLoopExample.app/PkgInfo +2020-11-23 12:31:56 +0000 mkdr _CodeSignature/ +2020-11-23 12:31:56 +0000 $ mkdir -p /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/Payload/FlankGameLoopExample.app/_CodeSignature + copy CodeResources +2020-11-23 12:31:56 +0000 $ cp /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.\~\~\~FE2bSA/Root/Payload/FlankGameLoopExample.app/_CodeSignature/CodeResources /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/Payload/FlankGameLoopExample.app/_CodeSignature/CodeResources +2020-11-23 12:31:56 +0000 copy embedded.mobileprovision +2020-11-23 12:31:56 +0000 $ cp /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.\~\~\~FE2bSA/Root/Payload/FlankGameLoopExample.app/embedded.mobileprovision /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/Payload/FlankGameLoopExample.app/embedded.mobileprovision +2020-11-23 12:31:56 +0000 $ rm -f /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.\~\~\~vfqiYR/universal-iphoneos/Payload/FlankGameLoopExample.app/Info.plist +2020-11-23 12:31:56 +0000 /Library/Ruby/Gems/2.6.0/gems/CFPropertyList-3.0.2/lib/cfpropertylist/rbCFPropertyList.rb:378: warning: File.exists? is a deprecated name, use File.exist? instead +2020-11-23 12:31:56 +0000 Removing temporary directory /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e... +2020-11-23 12:31:56 +0000 $ rm -r /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/ipatool20201123-16020-1en1k5e +2020-11-23 12:31:56 +0000 [MT] /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool exited with 0 +2020-11-23 12:31:56 +0000 [MT] ipatool JSON: { + alerts = ( + { + code = 3736; + description = "Configuration issue: platform AppleTVSimulator.platform doesn't have any non-simulator SDKs; ignoring it"; + info = { + }; + level = WARN; + }, + { + code = 3736; + description = "Configuration issue: platform WatchSimulator.platform doesn't have any non-simulator SDKs; ignoring it"; + info = { + }; + level = WARN; + }, + { + code = 3736; + description = "Configuration issue: platform iPhoneSimulator.platform doesn't have any non-simulator SDKs; ignoring it"; + info = { + }; + level = WARN; + } + ); + universalIPA = { + path = "/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.~~~vfqiYR/universal-iphoneos"; + platform = iphoneos; + }; + universalIPAs = ( + { + path = "/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/IDEIPAProcessor.AppThinning.~~~vfqiYR/universal-iphoneos"; + platform = iphoneos; + } + ); +} +2020-11-23 12:31:56 +0000 [MT] Processing step: IDEDistributionCodeSlimmingStep +2020-11-23 12:31:56 +0000 [MT] Processing step: IDEDistributionCopyBCSymbolMapsStep +2020-11-23 12:31:56 +0000 [MT] Processing step: IDEDistributionSymbolsStep +2020-11-23 12:31:56 +0000 [MT] Skipping step: IDEDistributionSymbolsStep because it said so +2020-11-23 12:31:56 +0000 [MT] Processing step: IDEDistributionAppThinningStep +2020-11-23 12:31:56 +0000 [MT] Skipping step: IDEDistributionAppThinningStep because it said so +2020-11-23 12:31:56 +0000 [MT] Processing step: IDEDistributionArchThinningStep +2020-11-23 12:31:56 +0000 [MT] Running /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app/FlankGameLoopExample' '-verify_arch' 'arm64e' +2020-11-23 12:31:56 +0000 [MT] /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo exited with 1 +2020-11-23 12:31:56 +0000 [MT] Skipping architecture thinning for item "FlankGameLoopExample" because arch "arm64e" wasn't found +2020-11-23 12:31:56 +0000 [MT] Processing step: IDEDistributionODRStep +2020-11-23 12:31:56 +0000 [MT] Processing step: IDEDistributionStripXattrsStep +2020-11-23 12:31:56 +0000 [MT] Running /usr/bin/xattr '-crs' '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app' +2020-11-23 12:31:56 +0000 [MT] /usr/bin/xattr exited with 0 +2020-11-23 12:31:56 +0000 [MT] Processing step: IDEDistributionCodesignStep +2020-11-23 12:31:56 +0000 [MT] Entitlements for ', codeSigningInfo='<_DVTCodeSigningInformation_Path: 0x7f9973408250; isSigned='1', isAdHocSigned='0', signingCertificate='', entitlements='{ + "application-identifier" = "L2UF9MLSM6.io.gogoapps.flankgameloop"; + "com.apple.developer.team-identifier" = L2UF9MLSM6; + "get-task-allow" = 1; + "keychain-access-groups" = ( + "L2UF9MLSM6.io.gogoapps.flankgameloop" + ); +}', teamID='L2UF9MLSM6', identifier='io.gogoapps.flankgameloop', executablePath='', hardenedRuntime='0'>'>: { + "application-identifier" = "L2UF9MLSM6.io.gogoapps.flankgameloop"; + "com.apple.developer.team-identifier" = L2UF9MLSM6; + "get-task-allow" = 0; + "keychain-access-groups" = ( + "L2UF9MLSM6.io.gogoapps.flankgameloop" + ); +} +2020-11-23 12:31:56 +0000 [MT] Writing entitlements for ', codeSigningInfo='<_DVTCodeSigningInformation_Path: 0x7f9973408250; isSigned='1', isAdHocSigned='0', signingCertificate='', entitlements='{ + "application-identifier" = "L2UF9MLSM6.io.gogoapps.flankgameloop"; + "com.apple.developer.team-identifier" = L2UF9MLSM6; + "get-task-allow" = 1; + "keychain-access-groups" = ( + "L2UF9MLSM6.io.gogoapps.flankgameloop" + ); +}', teamID='L2UF9MLSM6', identifier='io.gogoapps.flankgameloop', executablePath='', hardenedRuntime='0'>'> to: /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/entitlements~~~PCGN3o +2020-11-23 12:31:56 +0000 [MT] Running /usr/bin/codesign '-vvv' '--force' '--sign' '8D0B1E4D3E6B2C8DC40B88081C4B47B35DC8EA32' '--entitlements' '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/entitlements~~~PCGN3o' '--preserve-metadata=identifier,flags,runtime' '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app' +2020-11-23 12:31:59 +0000 /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root/Payload/FlankGameLoopExample.app: signed app bundle with Mach-O thin (arm64) [io.gogoapps.flankgameloop] +2020-11-23 12:31:59 +0000 [MT] /usr/bin/codesign exited with 0 +2020-11-23 12:31:59 +0000 [MT] Processing step: IDEDistributionZipODRItemStep +2020-11-23 12:31:59 +0000 [MT] Skipping step: IDEDistributionZipODRItemStep because it said so +2020-11-23 12:31:59 +0000 [MT] Processing step: IDEDistributionCreateIPAStep +2020-11-23 12:31:59 +0000 [MT] Running /usr/bin/ditto '-V' '-c' '-k' '--norsrc' '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root' '/var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Packages/FlankGameLoopExample.ipa' +2020-11-23 12:31:59 +0000 >>> Copying /var/folders/4g/0w3f6q4j1c37h2c_rq9gx3mc0000gn/T/XcodeDistPipeline.~~~FE2bSA/Root +2020-11-23 12:31:59 +0000 copying file ./Payload/FlankGameLoopExample.app/_CodeSignature/CodeResources ... +2020-11-23 12:31:59 +0000 3399 bytes for ./Payload/FlankGameLoopExample.app/_CodeSignature/CodeResources +2020-11-23 12:31:59 +0000 copying file ./Payload/FlankGameLoopExample.app/FlankGameLoopExample ... +2020-11-23 12:31:59 +0000 120864 bytes for ./Payload/FlankGameLoopExample.app/FlankGameLoopExample +2020-11-23 12:31:59 +0000 copying file ./Payload/FlankGameLoopExample.app/Base.lproj/Main.storyboardc/UIViewController-BV1-FR-VrT.nib ... +2020-11-23 12:31:59 +0000 948 bytes for ./Payload/FlankGameLoopExample.app/Base.lproj/Main.storyboardc/UIViewController-BV1-FR-VrT.nib +2020-11-23 12:31:59 +0000 copying file ./Payload/FlankGameLoopExample.app/Base.lproj/Main.storyboardc/BV1-FR-VrT-view-3se-qz-xqx.nib ... +2020-11-23 12:31:59 +0000 1298 bytes for ./Payload/FlankGameLoopExample.app/Base.lproj/Main.storyboardc/BV1-FR-VrT-view-3se-qz-xqx.nib +copying file ./Payload/FlankGameLoopExample.app/Base.lproj/Main.storyboardc/Info.plist ... +2020-11-23 12:31:59 +0000 258 bytes for ./Payload/FlankGameLoopExample.app/Base.lproj/Main.storyboardc/Info.plist +2020-11-23 12:31:59 +0000 copying file ./Payload/FlankGameLoopExample.app/GameScene.sks ... +2020-11-23 12:31:59 +0000 4694 bytes for ./Payload/FlankGameLoopExample.app/GameScene.sks +2020-11-23 12:31:59 +0000 copying file ./Payload/FlankGameLoopExample.app/embedded.mobileprovision ... +2020-11-23 12:31:59 +0000 7539 bytes for ./Payload/FlankGameLoopExample.app/embedded.mobileprovision +2020-11-23 12:31:59 +0000 copying file ./Payload/FlankGameLoopExample.app/Info.plist ... +2020-11-23 12:31:59 +0000 2817 bytes for ./Payload/FlankGameLoopExample.app/Info.plist +copying file ./Payload/FlankGameLoopExample.app/Actions.sks ... +2020-11-23 12:31:59 +0000 1892 bytes for ./Payload/FlankGameLoopExample.app/Actions.sks +2020-11-23 12:31:59 +0000 copying file ./Payload/FlankGameLoopExample.app/PkgInfo ... +8 bytes for ./Payload/FlankGameLoopExample.app/PkgInfo +2020-11-23 12:31:59 +0000 [MT] /usr/bin/ditto exited with 0 +2020-11-23 12:31:59 +0000 [MT] Processing step: IDEDistributionAppStoreInformationStep +2020-11-23 12:31:59 +0000 [MT] Skipping step: IDEDistributionAppStoreInformationStep because it said so +2020-11-23 12:31:59 +0000 [MT] Processing step: IDEDistributionGenerateProcessedDistributionItems +2020-11-23 12:31:59 +0000 [MT] IDEDistributionItem init +2020-11-23 12:31:59 +0000 [MT] Processing step: IDEDistributionCreateManifestStep From e4b7944b47b69d2e743b92da502d183a99177e89 Mon Sep 17 00:00:00 2001 From: Axel Zuziak Date: Tue, 24 Nov 2020 13:51:08 +0100 Subject: [PATCH 6/7] Revert "Flank scripts for generating test artifacts" This reverts commit bc03d6487eb8b6a448e4d24dde4c615a1d6200fc. Flank scripts for generating game loop artifacts will be added in #1345 --- .../flank/scripts/shell/ios/BuildExample.kt | 5 +- .../flank/scripts/shell/ios/BuildFtl.kt | 2 +- .../scripts/shell/ios/IosBuildCommand.kt | 18 +------ .../scripts/shell/ios/SetupIosEnvCommand.kt | 4 +- .../shell/ops/BuildEarlGreyExampleCommand.kt | 2 +- .../shell/ops/BuildFlankExampleCommand.kt | 2 +- .../shell/ops/BuildGameLoopExampleCommand.kt | 32 ------------- .../{BuildIosTestArtifacts.kt => BuildIos.kt} | 20 ++++---- .../flank/scripts/shell/ops/BuildIosIPA.kt | 47 ------------------- .../shell/ops/BuildMultiTestTargetsExample.kt | 32 ------------- .../flank/scripts/shell/ops/OpsCommand.kt | 2 - .../flank/scripts/utils/DownloadSoftware.kt | 5 +- 12 files changed, 21 insertions(+), 150 deletions(-) delete mode 100644 flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildGameLoopExampleCommand.kt rename flank-scripts/src/main/kotlin/flank/scripts/shell/ops/{BuildIosTestArtifacts.kt => BuildIos.kt} (86%) delete mode 100644 flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIosIPA.kt delete mode 100644 flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildMultiTestTargetsExample.kt diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/BuildExample.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/BuildExample.kt index a2d25b847d..bdbf611155 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/BuildExample.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/BuildExample.kt @@ -26,13 +26,14 @@ private fun buildExample() { toFile().deleteRecursively() } - val xcodeCommandSwiftTests = createXcodeBuildForTestingCommand( + val xcodeCommandSwiftTests = createIosBuildCommand( dataPath.toString(), + "./EarlGreyExample.xcworkspace", "EarlGreyExampleSwiftTests" ) xcodeCommandSwiftTests pipe "xcpretty" - val xcodeCommandTests = createXcodeBuildForTestingCommand(dataPath.toString(), "EarlGreyExampleTests") + val xcodeCommandTests = createIosBuildCommand(dataPath.toString(), "./EarlGreyExample.xcworkspace", "EarlGreyExampleTests") xcodeCommandTests pipe "xcpretty" copyExampleOutputFiles(dataPath.toString()) diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/BuildFtl.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/BuildFtl.kt index e29de1561d..8b355490e0 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/BuildFtl.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/BuildFtl.kt @@ -22,7 +22,7 @@ private fun buildFtl() { val dataPath = Paths.get("", "dd_tmp").apply { toFile().deleteRecursively() }.toString() - val xcodeCommand = createXcodeBuildForTestingCommand(dataPath, "\"EarlGreyExampleSwiftTests\"") + val xcodeCommand = createIosBuildCommand(dataPath, "./EarlGreyExample.xcworkspace", "\"EarlGreyExampleSwiftTests\"") xcodeCommand pipe "xcpretty" copyFtlOutputFiles(dataPath) diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/IosBuildCommand.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/IosBuildCommand.kt index 43a06ce824..947fe99784 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/IosBuildCommand.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/IosBuildCommand.kt @@ -1,6 +1,6 @@ package flank.scripts.shell.ios -fun createXcodeBuildForTestingCommand(buildDir: String, scheme: String, project: String = "", workspace: String = "") = +fun createIosBuildCommand(buildDir: String, workspace: String, scheme: String, project: String = "") = "xcodebuild build-for-testing" + " -allowProvisioningUpdates" + (if (workspace.isBlank()) "" else " -workspace $workspace") + @@ -8,19 +8,3 @@ fun createXcodeBuildForTestingCommand(buildDir: String, scheme: String, project: " -scheme $scheme" + " -derivedDataPath $buildDir" + " -sdk iphoneos" - -fun createXcodeArchiveCommand(archivePath: String, scheme: String, project: String = "", workspace: String = "") = - "xcodebuild" + - " -allowProvisioningUpdates" + - (if (workspace.isBlank()) "" else " -workspace $workspace") + - (if (project.isBlank()) "" else " -project $project") + - " -scheme $scheme" + - " archive" + - " -archivePath $archivePath" - -fun createXcodeExportArchiveCommand(archivePath: String, exportOptionsPlistPath: String, exportPath: String = "") = - "xcodebuild -exportArchive" + - " -allowProvisioningUpdates" + - " -archivePath $archivePath" + - " -exportOptionsPlist $exportOptionsPlistPath" + - " -exportPath $exportPath" diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/SetupIosEnvCommand.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/SetupIosEnvCommand.kt index b7d2f160a6..47eac9ee68 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/SetupIosEnvCommand.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ios/SetupIosEnvCommand.kt @@ -5,13 +5,13 @@ import flank.scripts.shell.ops.EARL_GREY_EXAMPLE import flank.scripts.shell.utils.failIfWindows import flank.scripts.shell.utils.iOSTestProjectsPath import flank.scripts.utils.downloadCocoaPodsIfNeeded -import flank.scripts.utils.installPodsIfNeeded +import flank.scripts.utils.installPods import java.nio.file.Paths object SetupIosEnvCommand : CliktCommand(name = "setup_ios_env", help = "Build ios app with tests") { override fun run() { failIfWindows() downloadCocoaPodsIfNeeded() - installPodsIfNeeded(Paths.get(iOSTestProjectsPath, EARL_GREY_EXAMPLE)) + installPods(Paths.get(iOSTestProjectsPath, EARL_GREY_EXAMPLE)) } } diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildEarlGreyExampleCommand.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildEarlGreyExampleCommand.kt index af206db320..8f92a88303 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildEarlGreyExampleCommand.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildEarlGreyExampleCommand.kt @@ -26,7 +26,7 @@ object BuildEarlGreyExampleCommand : CliktCommand(name = "build_earl_grey_exampl useWorkspace = true, generate = generate ?: true, copy = copy ?: true - ).generateIosTestArtifacts() + ).generateIos() } } diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildFlankExampleCommand.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildFlankExampleCommand.kt index 873339867e..5cd940f831 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildFlankExampleCommand.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildFlankExampleCommand.kt @@ -25,7 +25,7 @@ object BuildFlankExampleCommand : CliktCommand(name = "build_flank_example", hel useWorkspace = false, generate = generate ?: true, copy = copy ?: true - ).generateIosTestArtifacts() + ).generateIos() } } diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildGameLoopExampleCommand.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildGameLoopExampleCommand.kt deleted file mode 100644 index 3e16908be5..0000000000 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildGameLoopExampleCommand.kt +++ /dev/null @@ -1,32 +0,0 @@ -package flank.scripts.shell.ops - -import com.github.ajalt.clikt.core.CliktCommand -import com.github.ajalt.clikt.parameters.options.flag -import com.github.ajalt.clikt.parameters.options.option -import flank.scripts.shell.utils.failIfWindows -import flank.scripts.shell.utils.iOSTestProjectsPath -import java.nio.file.Paths - -object BuildGameLoopExampleCommand : CliktCommand(name = "build_ios_gameloop_example", help = "Build ios game loop example app") { - - private val generate: Boolean? by option(help = "Make build").flag("-g", default = true) - - private val copy: Boolean? by option(help = "Copy output files to tmp").flag("-c", default = true) - - override fun run() { - failIfWindows() - - IosBuildConfiguration( - projectPath = Paths.get(iOSTestProjectsPath, FLANK_GAME_LOOP_EXAMPLE).toString(), - projectName = FLANK_GAME_LOOP_EXAMPLE, - buildConfigurations = listOf( - IosTestBuildConfiguration(FLANK_GAME_LOOP_EXAMPLE, "tests"), - ), - useWorkspace = false, - generate = generate ?: true, - copy = copy ?: true - ).generateIPA() - } -} - -private const val FLANK_GAME_LOOP_EXAMPLE = "FlankGameLoopExample" diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIosTestArtifacts.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIos.kt similarity index 86% rename from flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIosTestArtifacts.kt rename to flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIos.kt index b7be6695ac..d10e9ccc33 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIosTestArtifacts.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIos.kt @@ -1,24 +1,24 @@ package flank.scripts.shell.ops -import flank.scripts.shell.ios.createXcodeBuildForTestingCommand +import flank.scripts.shell.ios.createIosBuildCommand import flank.scripts.shell.utils.flankFixturesIosTmpPath import flank.scripts.shell.utils.pipe import flank.scripts.utils.archive import flank.scripts.utils.downloadCocoaPodsIfNeeded import flank.scripts.utils.downloadXcPrettyIfNeeded -import flank.scripts.utils.installPodsIfNeeded +import flank.scripts.utils.installPods import java.io.File import java.nio.file.Path import java.nio.file.Paths -fun IosBuildConfiguration.generateIosTestArtifacts() { +fun IosBuildConfiguration.generateIos() { downloadCocoaPodsIfNeeded() - installPodsIfNeeded(Paths.get(projectPath)) + installPods(Paths.get(projectPath)) downloadXcPrettyIfNeeded() - if (generate) buildProject() + if (generate) buildEarlGreyExample() } -private fun IosBuildConfiguration.buildProject() = Paths.get(projectPath, "Build") +private fun IosBuildConfiguration.buildEarlGreyExample() = Paths.get(projectPath, "Build") .runBuilds(this) .resolve("Products") .apply { renameXctestFiles().filterFilesToCopy().archiveProject(projectName).copyIosProductFiles(projectName) } @@ -34,11 +34,11 @@ private fun Path.runBuilds(configuration: IosBuildConfiguration) = apply { val project = if (configuration.useWorkspace) "" else Paths.get(parent, "${configuration.projectName}.xcodeproj").toString() configuration.buildConfigurations.forEach { - val buildCommand = createXcodeBuildForTestingCommand( + val buildCommand = createIosBuildCommand( parent, + workspace, scheme = it.scheme, - project = project, - workspace = workspace + project, ) buildCommand pipe "xcpretty" } @@ -95,5 +95,5 @@ data class IosBuildConfiguration( data class IosTestBuildConfiguration(val scheme: String, val outputDirectoryName: String) - val IosBuildConfiguration.workspaceName +private val IosBuildConfiguration.workspaceName get() = "$projectName.xcworkspace" diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIosIPA.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIosIPA.kt deleted file mode 100644 index 16d26f6679..0000000000 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildIosIPA.kt +++ /dev/null @@ -1,47 +0,0 @@ -package flank.scripts.shell.ops - -import flank.scripts.shell.ios.createXcodeArchiveCommand -import flank.scripts.shell.ios.createXcodeExportArchiveCommand -import flank.scripts.shell.utils.pipe -import flank.scripts.utils.downloadCocoaPodsIfNeeded -import flank.scripts.utils.downloadXcPrettyIfNeeded -import flank.scripts.utils.installPodsIfNeeded -import java.nio.file.Path -import java.nio.file.Paths - -fun IosBuildConfiguration.generateIPA() { - downloadCocoaPodsIfNeeded() - installPodsIfNeeded(Paths.get(projectPath)) - downloadXcPrettyIfNeeded() - if (generate) archiveProject() -} - -private fun IosBuildConfiguration.archiveProject() = Paths.get(projectPath, "Build") - .runXcodeArchiveBuilds(this) - -private fun Path.runXcodeArchiveBuilds(configuration: IosBuildConfiguration) = apply { - toFile().deleteRecursively() - val parent = toFile().parent - val workspace = - if (configuration.useWorkspace) Paths.get(parent, configuration.workspaceName).toString() - else "" - - val project = if (configuration.useWorkspace) "" - else Paths.get(parent, "${configuration.projectName}.xcodeproj").toString() - configuration.buildConfigurations.forEach { - val archiveCommand = createXcodeArchiveCommand( - "${toString()}/${it.scheme}.xcarchive", - scheme = it.scheme, - project = project, - workspace = workspace - ) - - val exportArchiveCommand = createXcodeExportArchiveCommand( - archivePath = "${toString()}/${it.scheme}.xcarchive", - exportOptionsPlistPath = Paths.get(parent, "exportOptions.plist").toString(), - exportPath = "${toString()}/ipa/" - ) - archiveCommand pipe "xcpretty" - exportArchiveCommand pipe "xcpretty" - } -} diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildMultiTestTargetsExample.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildMultiTestTargetsExample.kt deleted file mode 100644 index a61464a143..0000000000 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/BuildMultiTestTargetsExample.kt +++ /dev/null @@ -1,32 +0,0 @@ -package flank.scripts.shell.ops - -import com.github.ajalt.clikt.core.CliktCommand -import com.github.ajalt.clikt.parameters.options.flag -import com.github.ajalt.clikt.parameters.options.option -import flank.scripts.shell.utils.failIfWindows -import flank.scripts.shell.utils.iOSTestProjectsPath -import java.nio.file.Paths - -object BuildMultiTestTargetsExample : CliktCommand(name = "build_ios_multi_test_targets_example", help = "Build ios multi test targets example app") { - - private val generate: Boolean? by option(help = "Make build").flag("-g", default = true) - - private val copy: Boolean? by option(help = "Copy output files to tmp").flag("-c", default = true) - - override fun run() { - failIfWindows() - - IosBuildConfiguration( - projectPath = Paths.get(iOSTestProjectsPath, FLANK_IOS_MULTIPLE_TEST_TARGETS_EXAMPLE).toString(), - projectName = FLANK_IOS_MULTIPLE_TEST_TARGETS_EXAMPLE, - buildConfigurations = listOf( - IosTestBuildConfiguration("AllTests", "AllTests"), - ), - useWorkspace = false, - generate = generate ?: true, - copy = copy ?: true - ).generateIosTestArtifacts() - } -} - -private const val FLANK_IOS_MULTIPLE_TEST_TARGETS_EXAMPLE = "FlankMultiTestTargetsExample" diff --git a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/OpsCommand.kt b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/OpsCommand.kt index 501dc98ce2..c13d24ab81 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/OpsCommand.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/shell/ops/OpsCommand.kt @@ -8,8 +8,6 @@ object OpsCommand : CliktCommand(name = "ops", help = "Contains all ops command: subcommands( AndroidOpsCommand, BuildEarlGreyExampleCommand, - BuildGameLoopExampleCommand, - BuildMultiTestTargetsExample, BuildFlankExampleCommand, GoOpsCommand ) diff --git a/flank-scripts/src/main/kotlin/flank/scripts/utils/DownloadSoftware.kt b/flank-scripts/src/main/kotlin/flank/scripts/utils/DownloadSoftware.kt index f2fa676bd0..ca67f9a98d 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/utils/DownloadSoftware.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/utils/DownloadSoftware.kt @@ -10,9 +10,8 @@ fun downloadCocoaPodsIfNeeded() { "xcpretty".checkAndInstallIfNeed("gem install cocoapods -v 1.9.3") } -fun installPodsIfNeeded(path: Path) { - if (path.toFile().listFiles().map { it.name }.contains("Podfile")) - "pod install --project-directory=$path --verbose".runCommand() +fun installPods(path: Path) { + "pod install --project-directory=$path --verbose".runCommand() } fun checkIfPipInstalled() { From 07672a8f68b291ac5ec9720c48b802876afa48a8 Mon Sep 17 00:00:00 2001 From: Axel Zuziak Date: Tue, 24 Nov 2020 14:15:54 +0100 Subject: [PATCH 7/7] Removed unused shell scripts --- test_projects/ios/FlankGameLoopExample/export.sh | 15 --------------- test_projects/ios/FlankGameLoopExample/ftl.sh | 3 --- 2 files changed, 18 deletions(-) delete mode 100755 test_projects/ios/FlankGameLoopExample/export.sh delete mode 100755 test_projects/ios/FlankGameLoopExample/ftl.sh diff --git a/test_projects/ios/FlankGameLoopExample/export.sh b/test_projects/ios/FlankGameLoopExample/export.sh deleted file mode 100755 index 479588cf76..0000000000 --- a/test_projects/ios/FlankGameLoopExample/export.sh +++ /dev/null @@ -1,15 +0,0 @@ -rm -rf build/ - -echo "Archiving..." -xcodebuild -project "flankgameloop.xcodeproj" \ --scheme flankgameloop \ --sdk iphoneos \ --allowProvisioningUpdates \ -archive -archivePath "build/gameloop.xcarchive" | xcpretty - -echo "Exporting..." -xcodebuild -exportArchive \ --archivePath "build/gameloop.xcarchive" \ --allowProvisioningUpdates \ --exportOptionsPlist "exportOptions.plist" \ --exportPath "build/ipa/" diff --git a/test_projects/ios/FlankGameLoopExample/ftl.sh b/test_projects/ios/FlankGameLoopExample/ftl.sh deleted file mode 100755 index 0c0f433c9b..0000000000 --- a/test_projects/ios/FlankGameLoopExample/ftl.sh +++ /dev/null @@ -1,3 +0,0 @@ -gcloud alpha firebase test ios run \ ---type game-loop --app build/ipa/flankgameloop.ipa --scenario-numbers 1 \ ---device model=iphone11,version=13.6 \ No newline at end of file