From df0cd148eaf431bc72ba6b2e7f44dbb36953615e Mon Sep 17 00:00:00 2001 From: Wei Yew Teoh Date: Mon, 14 Apr 2025 15:55:33 +1000 Subject: [PATCH 1/4] create example app --- Example/Example.xcodeproj/project.pbxproj | 599 ++++++++++++++++++ .../xcshareddata/xcschemes/Example.xcscheme | 114 ++++ Example/Example/AppDelegate.swift | 21 + Example/Example/HomeViewController.swift | 101 +++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/100.png | Bin 0 -> 3598 bytes .../AppIcon.appiconset/1024.png | Bin 0 -> 57996 bytes .../AppIcon.appiconset/114.png | Bin 0 -> 4061 bytes .../AppIcon.appiconset/120.png | Bin 0 -> 4345 bytes .../AppIcon.appiconset/128.png | Bin 0 -> 4756 bytes .../AppIcon.appiconset/144.png | Bin 0 -> 5365 bytes .../AppIcon.appiconset/152.png | Bin 0 -> 5644 bytes .../Assets.xcassets/AppIcon.appiconset/16.png | Bin 0 -> 395 bytes .../AppIcon.appiconset/167.png | Bin 0 -> 6261 bytes .../AppIcon.appiconset/180.png | Bin 0 -> 6645 bytes .../Assets.xcassets/AppIcon.appiconset/20.png | Bin 0 -> 497 bytes .../AppIcon.appiconset/256.png | Bin 0 -> 10088 bytes .../Assets.xcassets/AppIcon.appiconset/29.png | Bin 0 -> 758 bytes .../Assets.xcassets/AppIcon.appiconset/32.png | Bin 0 -> 805 bytes .../Assets.xcassets/AppIcon.appiconset/40.png | Bin 0 -> 1315 bytes .../Assets.xcassets/AppIcon.appiconset/50.png | Bin 0 -> 1677 bytes .../AppIcon.appiconset/512.png | Bin 0 -> 23278 bytes .../Assets.xcassets/AppIcon.appiconset/57.png | Bin 0 -> 1927 bytes .../Assets.xcassets/AppIcon.appiconset/58.png | Bin 0 -> 1986 bytes .../Assets.xcassets/AppIcon.appiconset/60.png | Bin 0 -> 2050 bytes .../Assets.xcassets/AppIcon.appiconset/64.png | Bin 0 -> 2153 bytes .../Assets.xcassets/AppIcon.appiconset/72.png | Bin 0 -> 2517 bytes .../Assets.xcassets/AppIcon.appiconset/76.png | Bin 0 -> 2637 bytes .../Assets.xcassets/AppIcon.appiconset/80.png | Bin 0 -> 2858 bytes .../Assets.xcassets/AppIcon.appiconset/87.png | Bin 0 -> 3072 bytes .../AppIcon.appiconset/Contents.json | 218 +++++++ .../Colors/AccentColor.colorset/Contents.json | 20 + .../Colors/Border.colorset/Contents.json | 20 + .../Assets.xcassets/Colors/Contents.json | 6 + .../Colors/Gray12.colorset/Contents.json | 20 + .../Colors/Gray3.colorset/Contents.json | 20 + .../Colors/Gray4.colorset/Contents.json | 20 + .../Colors/Gray7.colorset/Contents.json | 20 + .../Colors/Gray9.colorset/Contents.json | 20 + .../Colors/PreDefined/Contents.json | 6 + .../PreDefined1Black.colorset/Contents.json | 20 + .../PreDefined1Gray1.colorset/Contents.json | 20 + .../PreDefined1Gray2.colorset/Contents.json | 20 + .../PreDefined1Gray3.colorset/Contents.json | 20 + .../PreDefined1Green.colorset/Contents.json | 20 + .../PreDefined2Black.colorset/Contents.json | 20 + .../PreDefined2Gray1.colorset/Contents.json | 20 + .../PreDefined2Gray2.colorset/Contents.json | 20 + .../PreDefined2Purple.colorset/Contents.json | 20 + .../PreDefined3Black1.colorset/Contents.json | 20 + .../PreDefined3Black2.colorset/Contents.json | 20 + .../PreDefined3Blue.colorset/Contents.json | 20 + .../PreDefined3Gray1.colorset/Contents.json | 20 + .../PreDefined3Gray2.colorset/Contents.json | 20 + .../PreDefined3Gray3.colorset/Contents.json | 20 + .../PreDefined3Green.colorset/Contents.json | 20 + .../PreDefinedWhite.colorset/Contents.json | 20 + .../Colors/Volcano.colorset/Contents.json | 20 + .../Resources/Assets.xcassets/Contents.json | 6 + .../RoktLogo.imageset/Contents.json | 12 + .../RoktLogo.imageset/rokt-logo.svg | 1 + .../Base.lproj/LaunchScreen.storyboard | 25 + Example/Example/Resources/Info.plist | 5 + Example/Example/SampleViewController.swift | 65 ++ .../Example/Shared/UIColor+extensions.swift | 11 + Example/ExampleTests/ExampleTests.swift | 17 + Example/ExampleUITests/ExampleUITests.swift | 41 ++ .../ExampleUITestsLaunchTests.swift | 33 + Example/README.md | 77 +++ README.md | 9 + mParticle-Rokt/MPKitRokt.m | 2 +- 71 files changed, 1879 insertions(+), 1 deletion(-) create mode 100644 Example/Example.xcodeproj/project.pbxproj create mode 100644 Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme create mode 100644 Example/Example/AppDelegate.swift create mode 100644 Example/Example/HomeViewController.swift create mode 100644 Example/Example/Resources/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/100.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/1024.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/114.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/120.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/128.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/144.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/152.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/16.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/167.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/180.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/20.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/256.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/29.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/32.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/40.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/50.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/512.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/57.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/58.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/60.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/64.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/72.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/76.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/80.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/87.png create mode 100644 Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/AccentColor.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/Border.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/Gray12.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/Gray3.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/Gray4.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/Gray7.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/Gray9.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/PreDefined1Black.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/PreDefined1Gray1.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/PreDefined1Gray2.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/PreDefined1Gray3.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/PreDefined1Green.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/PreDefined2Black.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/PreDefined2Gray1.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/PreDefined2Gray2.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/PreDefined2Purple.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/PreDefined3Black1.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/PreDefined3Black2.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/PreDefined3Blue.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/PreDefined3Gray1.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/PreDefined3Gray2.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/PreDefined3Gray3.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/PreDefined3Green.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/PreDefined/PreDefinedWhite.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Colors/Volcano.colorset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/RoktLogo.imageset/Contents.json create mode 100644 Example/Example/Resources/Assets.xcassets/RoktLogo.imageset/rokt-logo.svg create mode 100644 Example/Example/Resources/Base.lproj/LaunchScreen.storyboard create mode 100644 Example/Example/Resources/Info.plist create mode 100644 Example/Example/SampleViewController.swift create mode 100644 Example/Example/Shared/UIColor+extensions.swift create mode 100644 Example/ExampleTests/ExampleTests.swift create mode 100644 Example/ExampleUITests/ExampleUITests.swift create mode 100644 Example/ExampleUITests/ExampleUITestsLaunchTests.swift create mode 100644 Example/README.md diff --git a/Example/Example.xcodeproj/project.pbxproj b/Example/Example.xcodeproj/project.pbxproj new file mode 100644 index 0000000..2921278 --- /dev/null +++ b/Example/Example.xcodeproj/project.pbxproj @@ -0,0 +1,599 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + B883A4092DAC925400F41C4D /* mParticle-Rokt in Frameworks */ = {isa = PBXBuildFile; productRef = B883A4082DAC925400F41C4D /* mParticle-Rokt */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + B883A3EA2DAC923300F41C4D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B883A3CB2DAC923100F41C4D /* Project object */; + proxyType = 1; + remoteGlobalIDString = B883A3D22DAC923100F41C4D; + remoteInfo = Example; + }; + B883A3F42DAC923300F41C4D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B883A3CB2DAC923100F41C4D /* Project object */; + proxyType = 1; + remoteGlobalIDString = B883A3D22DAC923100F41C4D; + remoteInfo = Example; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + B883A3D32DAC923100F41C4D /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; + B883A3E92DAC923300F41C4D /* ExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + B883A3F32DAC923300F41C4D /* ExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + B883A3FB2DAC923300F41C4D /* Exceptions for "Example" folder in "Example" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Resources/Info.plist, + ); + target = B883A3D22DAC923100F41C4D /* Example */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + B883A3D52DAC923100F41C4D /* Example */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + B883A3FB2DAC923300F41C4D /* Exceptions for "Example" folder in "Example" target */, + ); + path = Example; + sourceTree = ""; + }; + B883A3EC2DAC923300F41C4D /* ExampleTests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = ExampleTests; + sourceTree = ""; + }; + B883A3F62DAC923300F41C4D /* ExampleUITests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = ExampleUITests; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + B883A3D02DAC923100F41C4D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B883A4092DAC925400F41C4D /* mParticle-Rokt in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B883A3E62DAC923300F41C4D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B883A3F02DAC923300F41C4D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + B883A3CA2DAC923100F41C4D = { + isa = PBXGroup; + children = ( + B883A3D52DAC923100F41C4D /* Example */, + B883A3EC2DAC923300F41C4D /* ExampleTests */, + B883A3F62DAC923300F41C4D /* ExampleUITests */, + B883A3D42DAC923100F41C4D /* Products */, + ); + sourceTree = ""; + }; + B883A3D42DAC923100F41C4D /* Products */ = { + isa = PBXGroup; + children = ( + B883A3D32DAC923100F41C4D /* Example.app */, + B883A3E92DAC923300F41C4D /* ExampleTests.xctest */, + B883A3F32DAC923300F41C4D /* ExampleUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + B883A3D22DAC923100F41C4D /* Example */ = { + isa = PBXNativeTarget; + buildConfigurationList = B883A3FC2DAC923300F41C4D /* Build configuration list for PBXNativeTarget "Example" */; + buildPhases = ( + B883A3CF2DAC923100F41C4D /* Sources */, + B883A3D02DAC923100F41C4D /* Frameworks */, + B883A3D12DAC923100F41C4D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + B883A3D52DAC923100F41C4D /* Example */, + ); + name = Example; + packageProductDependencies = ( + B883A4082DAC925400F41C4D /* mParticle-Rokt */, + ); + productName = Example; + productReference = B883A3D32DAC923100F41C4D /* Example.app */; + productType = "com.apple.product-type.application"; + }; + B883A3E82DAC923300F41C4D /* ExampleTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = B883A4012DAC923300F41C4D /* Build configuration list for PBXNativeTarget "ExampleTests" */; + buildPhases = ( + B883A3E52DAC923300F41C4D /* Sources */, + B883A3E62DAC923300F41C4D /* Frameworks */, + B883A3E72DAC923300F41C4D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + B883A3EB2DAC923300F41C4D /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + B883A3EC2DAC923300F41C4D /* ExampleTests */, + ); + name = ExampleTests; + packageProductDependencies = ( + ); + productName = ExampleTests; + productReference = B883A3E92DAC923300F41C4D /* ExampleTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + B883A3F22DAC923300F41C4D /* ExampleUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = B883A4042DAC923300F41C4D /* Build configuration list for PBXNativeTarget "ExampleUITests" */; + buildPhases = ( + B883A3EF2DAC923300F41C4D /* Sources */, + B883A3F02DAC923300F41C4D /* Frameworks */, + B883A3F12DAC923300F41C4D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + B883A3F52DAC923300F41C4D /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + B883A3F62DAC923300F41C4D /* ExampleUITests */, + ); + name = ExampleUITests; + packageProductDependencies = ( + ); + productName = ExampleUITests; + productReference = B883A3F32DAC923300F41C4D /* ExampleUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + B883A3CB2DAC923100F41C4D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1630; + LastUpgradeCheck = 1630; + TargetAttributes = { + B883A3D22DAC923100F41C4D = { + CreatedOnToolsVersion = 16.3; + }; + B883A3E82DAC923300F41C4D = { + CreatedOnToolsVersion = 16.3; + TestTargetID = B883A3D22DAC923100F41C4D; + }; + B883A3F22DAC923300F41C4D = { + CreatedOnToolsVersion = 16.3; + TestTargetID = B883A3D22DAC923100F41C4D; + }; + }; + }; + buildConfigurationList = B883A3CE2DAC923100F41C4D /* Build configuration list for PBXProject "Example" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = B883A3CA2DAC923100F41C4D; + minimizedProjectReferenceProxies = 1; + packageReferences = ( + B883A4072DAC925400F41C4D /* XCLocalSwiftPackageReference "../../mparticle-apple-integration-rokt" */, + ); + preferredProjectObjectVersion = 77; + productRefGroup = B883A3D42DAC923100F41C4D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + B883A3D22DAC923100F41C4D /* Example */, + B883A3E82DAC923300F41C4D /* ExampleTests */, + B883A3F22DAC923300F41C4D /* ExampleUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + B883A3D12DAC923100F41C4D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B883A3E72DAC923300F41C4D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B883A3F12DAC923300F41C4D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + B883A3CF2DAC923100F41C4D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B883A3E52DAC923300F41C4D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B883A3EF2DAC923300F41C4D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + B883A3EB2DAC923300F41C4D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B883A3D22DAC923100F41C4D /* Example */; + targetProxy = B883A3EA2DAC923300F41C4D /* PBXContainerItemProxy */; + }; + B883A3F52DAC923300F41C4D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B883A3D22DAC923100F41C4D /* Example */; + targetProxy = B883A3F42DAC923300F41C4D /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + B883A3FD2DAC923300F41C4D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = EX8W57PJ9C; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Example/Resources/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = ""; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.rokt.Example; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + B883A3FE2DAC923300F41C4D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = EX8W57PJ9C; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Example/Resources/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = ""; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.rokt.Example; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + B883A3FF2DAC923300F41C4D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + 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; + DEVELOPMENT_TEAM = EX8W57PJ9C; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + 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 = 18.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + B883A4002DAC923300F41C4D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + 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"; + DEVELOPMENT_TEAM = EX8W57PJ9C; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + 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 = 18.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + B883A4022DAC923300F41C4D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = EX8W57PJ9C; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.4; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.rokt.ExampleTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Example"; + }; + name = Debug; + }; + B883A4032DAC923300F41C4D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = EX8W57PJ9C; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.4; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.rokt.ExampleTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Example"; + }; + name = Release; + }; + B883A4052DAC923300F41C4D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = EX8W57PJ9C; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.rokt.ExampleUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = Example; + }; + name = Debug; + }; + B883A4062DAC923300F41C4D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = EX8W57PJ9C; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.rokt.ExampleUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = Example; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + B883A3CE2DAC923100F41C4D /* Build configuration list for PBXProject "Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B883A3FF2DAC923300F41C4D /* Debug */, + B883A4002DAC923300F41C4D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B883A3FC2DAC923300F41C4D /* Build configuration list for PBXNativeTarget "Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B883A3FD2DAC923300F41C4D /* Debug */, + B883A3FE2DAC923300F41C4D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B883A4012DAC923300F41C4D /* Build configuration list for PBXNativeTarget "ExampleTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B883A4022DAC923300F41C4D /* Debug */, + B883A4032DAC923300F41C4D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B883A4042DAC923300F41C4D /* Build configuration list for PBXNativeTarget "ExampleUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B883A4052DAC923300F41C4D /* Debug */, + B883A4062DAC923300F41C4D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + B883A4072DAC925400F41C4D /* XCLocalSwiftPackageReference "../../mparticle-apple-integration-rokt" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = "../../mparticle-apple-integration-rokt"; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + B883A4082DAC925400F41C4D /* mParticle-Rokt */ = { + isa = XCSwiftPackageProductDependency; + productName = "mParticle-Rokt"; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = B883A3CB2DAC923100F41C4D /* Project object */; +} diff --git a/Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme b/Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme new file mode 100644 index 0000000..73cf7f2 --- /dev/null +++ b/Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Example/AppDelegate.swift b/Example/Example/AppDelegate.swift new file mode 100644 index 0000000..addb436 --- /dev/null +++ b/Example/Example/AppDelegate.swift @@ -0,0 +1,21 @@ + +import UIKit +import mParticle_Apple_SDK + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + + if let key = ProcessInfo.processInfo.environment["MPARTICLE_KEY"], + let secret = ProcessInfo.processInfo.environment["MPARTICLE_SECRET"] { + MParticle.sharedInstance().start(with: MParticleOptions(key: key, secret: secret)) + } + + window = UIWindow() + window?.rootViewController = HomeViewController() + window?.makeKeyAndVisible() + return true + } +} diff --git a/Example/Example/HomeViewController.swift b/Example/Example/HomeViewController.swift new file mode 100644 index 0000000..7d871cf --- /dev/null +++ b/Example/Example/HomeViewController.swift @@ -0,0 +1,101 @@ + +import UIKit + +class HomeViewController: UIViewController { + + private enum Constants { + static let buttonHeight: CGFloat = 50 + static let padding: CGFloat = 32 + } + + private lazy var displayButton: UIButton = { + let button = UIButton() + var configuration = UIButton.Configuration.filled() + configuration.baseBackgroundColor = .appColor + configuration.baseForegroundColor = .white + configuration.buttonSize = .large + configuration.cornerStyle = .capsule + configuration.title = "Show" + button.configuration = configuration + button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside) + button.translatesAutoresizingMaskIntoConstraints = false + return button + }() + + private lazy var stackView: UIStackView = { + let stackView = UIStackView() + stackView.axis = .vertical + stackView.spacing = 8 + stackView.translatesAutoresizingMaskIntoConstraints = false + stackView.distribution = .fill + return stackView + }() + + private lazy var imageView: UIView = { + let containerView = UIView() + + let imageView = UIImageView(image: UIImage(named: "RoktLogo")) + imageView.contentMode = .scaleAspectFit + imageView.translatesAutoresizingMaskIntoConstraints = false + imageView.setContentHuggingPriority(.required, for: .horizontal) + containerView.addSubview(imageView) + + NSLayoutConstraint.activate([ + imageView.leadingAnchor.constraint(greaterThanOrEqualTo: containerView.leadingAnchor), + imageView.trailingAnchor.constraint(lessThanOrEqualTo: containerView.trailingAnchor), + imageView.topAnchor.constraint(equalTo: containerView.topAnchor), + imageView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor), + imageView.centerXAnchor.constraint(equalTo: containerView.centerXAnchor), + imageView.widthAnchor.constraint(equalToConstant: 200) + ]) + return containerView + }() + + private let titleLabel: UILabel = { + let label = UILabel() + label.text = "Seize the Transaction Moment" + label.font = .systemFont(ofSize: 18, weight: .medium) + label.textAlignment = .center + label.textColor = .titleColor + return label + }() + + private let captionLabel: UILabel = { + let label = UILabel() + label.text = "® Rokt 2024 — All rights reserved" + label.font = .systemFont(ofSize: 12, weight: .regular) + label.textColor = .textColor + label.textAlignment = .center + label.numberOfLines = 0 + return label + }() + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + view.backgroundColor = .white + view.addSubview(stackView) + + [ + imageView, + titleLabel, + UIView(), + displayButton, + UIView(), + captionLabel + ].forEach { stackView.addArrangedSubview($0) } + + NSLayoutConstraint.activate([ + stackView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: Constants.padding), + stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: Constants.padding), + stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -Constants.padding), + stackView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -Constants.padding), + + displayButton.centerYAnchor.constraint(equalTo: view.centerYAnchor), + displayButton.heightAnchor.constraint(equalToConstant: Constants.buttonHeight), + ]) + } + + @objc private func buttonTapped() { + present(SampleViewController(), animated: true) + } +} diff --git a/Example/Example/Resources/Assets.xcassets/AccentColor.colorset/Contents.json b/Example/Example/Resources/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/Example/Example/Resources/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/100.png b/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/100.png new file mode 100644 index 0000000000000000000000000000000000000000..3d1ab91d5eb4699e569ec2e571b1467b8777aaeb GIT binary patch literal 3598 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 HY8(B3L_(Ah literal 0 HcmV?d00001 diff --git a/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/120.png b/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/120.png new file mode 100644 index 0000000000000000000000000000000000000000..7326733eb5543ab2c5c7b974cec71439d4e53e06 GIT binary patch literal 4345 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 Y$ZR=p6d%0n@|OWHh2Ar))OU{lAJ2J4Z~y=R literal 0 HcmV?d00001 diff --git a/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/128.png b/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/128.png new file mode 100644 index 0000000000000000000000000000000000000000..5ae3cff8ac548a7efe29ac4d1ae15f15291227b7 GIT binary patch literal 4756 zcmds5=QrGe(*AA1D$D9UA&96!2txGUMK59X8eMdjND!j;UXl>2M~xn2BYM;*u{yDW zh!%_2{qX(|_uLON&zC7@=A4;l&cx~IsKQB@NB{tUtE(wJxk1!_1V(tH`($i}ZUE%_ zL{$N(8D-f404g1IC3(X@tG#?;FIuBdnCsKKZDz1EC>Z=gO%AG0S09+LM#e@GYZzAn zy9a)Ujq0i6iNcY;EVh|Y0O=zL3C(C$-n2$?jE3kcPk@!^^g~HX<*C5L>c3MzT&s6! z`R@Go13&w*I4Sqe!{cqDbMIa5#!kZWd&l2V#ZvH(&WPF|7TY1)KptR<{2)EB~)FI|wC1 zjMR>8#k;&TK3-u3^{A7_^ck_XuZHptoYl@lK*jtiYD$+0@$m+0D!0=!mM<>DkH-et zXH5&-{O_ZWg08=Ntyk5Ch0BIsi3BN@BvaQ{h9w#Vv4ZrT@n{LsB;P|Ck?V*4_2=T^ zlJMP3h`J*zOv%H;;{+eNprk5iGgQ8d_T^ZC;k`$D+7YKxMZ)eN>|5VII{6ZjS=QlZ z)x6w9wJEgbWh(HgY72TZGc)IzD#o*%7<2XwbYp|?2TOgVmDR1EVW&^smp;+9Ki~U2 zQKqV|r&kQ9>FB5wJn|p!2=evA%~6Ukhd#&^bt!$t4RahHeBd+e*?noe6k|8YUexZl z6E$?d+cM0FAT3IiMcy)$#V2V4x%@sNV`*|BAB3 z?o>r99v?bfAVsg4B{-16p~^C-;O2F)*J8KYAJ_Wl8=p2iLg-V#eqzASAdJtV!%(Kp z0k-#>9|nUd@+~}+l$rZW{t(Z_tRACVD*97*o{~657$1>&XE&+(@K>(ML~Vqu>X_bA zS{MG0W~2L$hVSS8(4I&Lk=OCGiAkQ}M~2l*3ymSqu{V|>O{a@SXv+8|iW zXV+<>c#S%*&jxc65t3JWA1R+W@8M-=@ToDfWS#KNBIX#RI&qE5EcwOBp23(+=JBl}XMm?^R||XH?5_xJ57RGh!v--Pu~q zQo!;Xq)H6*B=&SJCK| z?YNFC2obvIC7wIq;Xbod@tx9DQ}&jC(*8LQ4P3X@^in?>s`D8jA!89$(9NU}c!5zFatcAB(!|8X8XvUt9uABaNTuZFny2u@KH1*d;pH@rEfo5w zE_%Vr9er>RZcwf>(C9MB%P;Q_68b{pM$g~38t1F0XNr2|;_vOR@GLs#T|cG-8+hwV z6fgKUSC**+iKt#^?CpI)L@R0xsAbxTm3Pd{)Lw)Zlb%iU17)87nC;{YEG-jmho6D| zE*Zzj2|0YD(JGR8S}kZcA}J~9JY7k9HmUXD3-XOeG|AQP_WktK5isACPE~KFfQ2E- zc~~vq97x+g(9Q#0iP&O^4XZ%boI~y5M71t!yEA9`Sjlqu{H=8r1BA z*YwmwsND<`D@hEeCYjvE@%Dsbq@rHMVqXk}-4*^k@alX^pk(C|Mi$1okMV{jQ3L-@ zcVpCoE^RJ$Jvl=9X;`FupiSRJQX+oQ2x{x74y`|eWo9~n2_%EI@pHi6{9~9xFGA(Y z;cZm9(ERyTlI)eKgVhAv(3V?mr?G>vF{R9yMMt18gP(OWf6q4p7$CYvHT4z#=C12Z zl^HKpi^y2VW?7PqLJT=8jpExD|J@nd9)_iugx>A&n<0IV#tw29L91W?xa6z|S$Ro+ zFs?`unfaQoN(3F8{Jz6lu;ib~d#?ze2oi0tz;4`u9L4ke+eMw|RKk3?zwdDW8m1S8P#j@G98t-7_?Qr->r{Iyz%^bZ? z`|3O2=<;Gr=0dAliJK0&wyEu$=g(Ex8p3e0KmR6SN{egva1t}_w2f%2o@H1lvU({u zV*hSCD&NwtKm@w=Wi;hF>nqK;iL;}xT}I}Yg-|(s(2e)u zoLy2u6E7(#sgdKsW}auIIm*oA77S{L{F-`DXVd2nkptPTe@!v1Lq)Xo}$uXRwXB--0=nX-gz!}eZx^h!M#%nl2sW5+0sEGj>FkDq$tyv zkvws}UAqk((|aXSE2o(*NK0vj6~xseZ{EUeN$tJ$^U!dbBL1F^Yo_QlN$%v-?1bUg z<&tn)0nSa;ai8b1_V7;mW5`)$od8afo()jT7$JjwobNP+5QbS^;)jn+8LP;EOmDN% zrumFAGB8lBJ68C3i~{v%q{N?jX6QFXWT}K+O903q^t2TK4-wGTk+Gj-5f4x*TM{fK>Q)5 z_j4*WkbU3R!NLsH{A^+MXiT=nA9M$^Y+Td-c*FnoB19HxS590(t)|*TpXB8N#Y4`p zNvCD&XFQGJo44%Ydr!Fdur5IUC&&*L^A?YSc{Ke%yh6^JZm#Gc72rYIeYP5(XbTjc z_CP312_yMi>#UIU5E#(Ftj6`yhxD*}$*BzMEQmPhbHb(BEERJ`uP-|lPs(z0$Z%oj zNCN4A_rZV5ZRgL^%s>`RfedJCDvCPA*c923u2w*&*$8_Vojt(%e1Gnl58`g&n7i!> z?nkDOcX#BQTSg!@Q_HC6et^95;MVh`YbmPTDJ7SCm8ZH@awmX2-1`=3AUV)J!uGp8 ziCKJ9^pxJAp?&LSkJio+tOr_$9=_y-nmvo2LYq)%3H;czYnouERyS>Z$Fc{uH~P4! zm1RH+w0@u-+f2gW2_1JKeC_*ZMKjjqsVpr~wVXGCCu>Hf{FIwr#|%{T&n@7ll8+;7 z#+RnIv5CcISGpVZsQxgwda!g-m`}&=i~a5v+}N55@zA^cx@{TR`iJ~d27(`dmGvCo z@I`Uh#fcFFH8ZefGI7~^Zc!KTEf|Wc>RAj)@sDs)tw)uEgfgQBYKH`oesUPbETcgU z7Cs-*g;eeFv5&;lb0cYvXJIu5l8O-VTMc)wSVjxiTNVWXm?%R%Zb5vhGC|Iwu6=SPz)+*@1YY z#DMVkBCTSfOa8MtGZb%wze=DM-dEj@rDY3b*}~k8FkBd1G)Nj%DHTu8_aIVjiB?bS zjyQ3|<+V-BkTm9qBi`)q8h-dsY^+9RMWLh=srYka)qI0*B+(?VzrB{3 zU-EO0iZ*wd3*8UnHRWy0~T4d6wp<_0isyo6RwL!&bG_XoDko#;ECRCPin zOr$J^r2>9e8Owx_GEU!?dOkcAtVTModA~FI;&*$kxqyw6*vm|leNDq64ETD#jZ1iK!#7~`bn}g3LTas zrK0&2)SK!)X_x%6qNKYBlkgQaae$_*A`n|r3nXV@u{0SLAV;YBj4`$pf}&7T_Ev6C z&Y^6}pmmPdylLlMX-Q5<%{bZ`Q^(FJ5k%;KMKnrsR;t8f(ra*3h99=?{tgE z$JEvXB`^2yB{y<7tu5vWlh*pJ=`i8wf^HV{ z!FAHwi&5Ro^T1>9c0?42z)v3`*6^!zt(hC^^reTRQjiT0YHe~Ow!3fdAYgMsOQbmX zSzT4nq4t%xRQ7onBVbFAJv%wOaNK{m1auW)4yW+xo>bn8wcS_d{=moR;jc?O-j~O- z=UN8D@SvkH{x#V=;{)Mp^cXF3~_TqUuK>?xGj(aIVH+wQW4L3&Ew>C z_J!HAqQ>lmxenWx`e3a5qL{y<(1lZ5W?5O(ymUJ*<-%)su8Kn6egp09F8n}1KFbNJ zEW5Ebmw6vcp=3ljKlXWMcAS0+HWV(>A$ z81Q?fnp~QQxPh>T+SNx_4UP)&-Hl5T0}A!hLKIwq#XJk$gsT6s clwTttd>iDp_kjl~H*Y3DU0Fw|MgbZ1e*-`Dh5!Hn literal 0 HcmV?d00001 diff --git a/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/144.png b/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/144.png new file mode 100644 index 0000000000000000000000000000000000000000..2335dd8c513903113f26ba7a266ef02cbba13ca5 GIT binary patch literal 5365 zcmeI0=Q|u;(D!$(vRV+m6TJk>>Rt4R7Bvx;)rtON5iLSi)D_X9m*~AmC%WjJ=%Tl^ zx^R2`hv(IO-7n6}i+M5Ed}glioO2>{wbh6T=m-D+0I`O;vi_rw`+oqJ76lYegi9lQPIOWoUZ zB*=DbJeN!B^ZHZ#di!o~$#Yb);Z)@r3XI7Xb&IDvaR}Dd_w-Ai2*y{pNq+|IV%tmY<%uu95G6QhHWpGdcZK?FF5n`=udX&?-LFp8zQ(6(@*0;j@EVmOiw#Sjad8!3q*}xt*o)P%SWa+4 z6+hfxZ(r@?#-9A~S+U%oDVu8#lK&DJiHeW^NI=P(V<$he4@aFsonyAxkZ`fVwIRU0hMdPfU-O%8dtiV~|96+4 z_+@YE^b6=hkUr#+J}Yejh|?Zwh}{Uo9cEJJH2hm&;PqD0#!>UJYAlm%Tv{5#*)n$A z^7|Xi?#^OE#n!oN^PyPF#ex&Tf(et}E7LXbm3*6!ll(1J#U*pZ*un!S9(2NS?Y6nf z3T-Nq_2Z|DU~gy6Rg3NICXsi(oli?MDbQv-&(Rg*JAQuo*iS-%M!NJEKANzeDvlnhmi9CMw9 zPT9`@ZZD2hx>chq?M5@?r$G^~M&%zqlv=dkj{*xVyTfAuPub22elbB)8@CEF1L3-g40(g)(ADuE@4l{#IbM0d-k=Bm+%Iol$ASjke|R0t zPWm^Y*=fi->QJ1BFOk2~VsKV1x)#mN|D<^Lz-<{=yR(enFnUwq7sZutDF16utrdrM7g_&XuxoCnMP!^sfD zNhe+`Xw?8f@gxkjDQHR-SP8@DyxVX;m}_GEZ_rrn>!ulnT34Kq90Ni2Ln^gi*{Sc` z*9N?3I#H|w2hnrdb+%^Mob0G5z!abVtT^SF^-XrC+|??m)^+7x0%`3>E9OkIQ$*7s z)CiRZTYC*E{t&7unnk$w3Pss$25JN2dG^)sEoC0Y!2GFVcts&l_JSYlIh$si*!p@5 z5!}bGE4Kk}mj7e>sZC$X6e&3IT1PgY3Yfq)> z)vWF8l5k-k8Xv)1ZuCaawfNR-iJ*ZFt3v|KM45p%4!eU|QB59Onq~p#(}QO;1#%lI zDr7}PMU7YMk>B{Gy$^IXQALwP&rE@~*4C?^nFAFL7wTTNK0EHC;YRTcS9nOsQBqX= z+jNS$za_oHbYB)Gr$pxHLW-|N+!Wske8fF|aeZ`)z%7OrmMP%~K(#OR@-->*E95zl z_2eK(Rz5m6mQ5`NcDmlPGh31Q#=OsC0IMU(A~52mKvN#nSlM;5)Kr9WHN}_4TqiK7 zkI|>FQISXimi!U18iLoc-}?qzJw>W$}MgDf8$PgVna{zu#dp9DetuTCRJ8p zTNHiNd#O(45lvDQ=>`?%j99o-7a1f&YlDGt0pAN%kKR?uo$o^G|POG)?I zTZXiAi#KX^?sQQss>z3YhW}m6K`jG&L0;DCs$!nCO_oaCPws|W?k-^Fmw?7nyC*yM zqjuR!hsChM7o#?pFvl<+D$^d?7uXRmN(@VW$P5+9X-g`|-(PLu10o z!24M37Oy$`tniiv*pQA6+wtrUCvM!yiR1@bp%a&-`S|!;0=ZCw9S$HQ=>SMXJ7-Ar z`^sSiTtKH<}^wg5>{I%>)}P$_UQeJb~#%nRV*uQn^C#j(jsw@wyIChWo6&_ zQt$BasRQXgGvBKPDTCYvV(@eew9`)>^}E>4GUo67 z?XkFMqn6}$x=)5*H#^9=-U_uq4chzh>U$!UMJ^@htXZAoH%%9GB^HvL44%T<#t%gr zC~5l9#mC>7`M@96S{v(~sP8s2Y2;8^lg0aUq+g2rO z!Q-i`33UyF#8L}p72VlCt-~NORE(YPVu_VA`|!ARM4H}PI6ru^=?hO#nwhN^*x123 zl4?+>xBB#2d6jQDfmWo?kDyY>zbm_jQa(ov;z&-SPajvSTzaOz&L?p7+FDgTYP&ly z-XTh~vdMG%jnY8Yzx*U~{csx@ijoA@M||(}%LOi&rGhb~9yC$`P^qOE)9451UMv2) zTXk!L5k(V9J&;5#A4$3@rn{YZ7gc!)3CE5K862kQ?WBBer-xnI#6^defJ4Lqn8KYqE=Y`L@K-d|)!*4g#!QMX|OtJ_tM!ygh# z(n51!D74%z9^2KBg>-gz8Xl=7+4R_*w^5&h5sBcLKUAhyUnxo8U8UQa5)M}M&=L;$ zM;sg+2+%4cJXkoyfjUck8S&y9|L_l$Q%5tp8j{aJ4XIt4vPR7%l?S1hDZxe=TyYE? z%==<+t9>~z7Z8}qObIeA%rGO{`bVq49c6S(tmM6s%JFg^+e6-F29z@W*7};U0_PK? zk5I5Bt7DDkTijyR3ttwo>K?R$7Sv;KV~Uo9g(p&Ia;eT~_BB=zkK}7udyau5ykKc6_zT3-l;mY`OM-o0cg!{pGi! zPvujA!^jdRG3N|JB@ql6m^r-Byg1SsAAsOfRScn+qGEpSBojF<{lBB`$S zN-Ea1EwM-|F41>MWJFX&!)M_=50N&1`f{{gUgfD`fz`UeAp!FowD$L0Pl<95zp(Z@ z8n9Uk8gLq0+L~%Pc*lkhCD+~_Hmn%@Fj)}F!|r5B1wh`pPEQO>Grxsw__6@)2NQUT zANqK4t>!~IDdk;TM0{(;tq5-9V_s`EdUCDv@I_S)6|mK8Ni#W%|=gAg)tt=SXG zQ?q{0rx!dWJGViBYh)pUg*WS>l4Vw0?3?a3Mo2kHNUUPi?fDd~Wb-sj<11&n?i~D* zr38av83(Ate%BLvcU7e;{16WbsUm<=@xeU_7=&QKSpCJ!rsV_E>(a+9@l?UJjRK1@Hyx4C7GzPn!-=5I6{q&d8=e6P0)jsJ8VW-&I%JshF8~@-j`l;oy z82h2b=L9SpkoODFCI91A$f6K7kW3e|E11ma1T!Z=gKgLMW6t`q6Yi&7A;S2& zUecctWJc|#II+_V0_}D>!cMyD8hP)&O463s4g(UZFa}HctY!4$xN$3!B|_Z{CD1Pa z6_26kCY7*|L7K%wJYj81M><1R9qjB}#nPh_D1q2zN7{J}N0b zKzttS_a>A0xjLt$eComBVFPm{v95k_J_JlzARz+C$L^BY`|jGNH{|Ol8xe-BWcxEE zujPE^EqrDjyLf9TspP^`4Z!$4btg=0^p13eIPG)76914%;Yj*pJvp+1UPgdlK4aSa za5EHShe_PU%t3@!9?law$#SM7V^!8W_oH)lu9T_oB8uL%h3wOOX@mNz!=Im`CT~Ts zJ_x@~eu|mX{<8j2snqd-BF1^;a~_2s*H_9Eze?~z+XGm5RM0o1w0hExSYbU33~VLc zf6MVx);!{=$T(q@ORrTigety%#za~;DxmdKoG(MKAyMMI=8%!GHoVG;2Z)4F@53e< zGwpS}Fe3&LVSy>t3{H6M;R%B?<~vInhhv!e_MYgl5xU?gbL8)%rCUlts`dCZdOQxQ z_{@ftKFv%VHx zS*J%FK=#ALw2wPsCaINZr6uzhf?gw%eTj8_Z6?7G{7{%S1S+-SU9w(U+W)KBBz?$; z{3t}+kF?;n3)}isiJt3@WJb1LsEvAW`pGLU6aVZQ0+w9r>Om}eIBR{C$GNQ;YCO~} zlU5d0+oDOGYZ|G}9}7PKtjgMmt6_}W(s+Y4t(cgRbWuGe{nSQYvZ5??>N@ucom z?xy(RGIMy8pW#&TZ+1LiN6TLjf*Tr&-xNa{E8 z==ReyWRH4Td~~ITw-is@r>>R{Q-^<;sAKo3M5u(Zym){w9cAV z4BoWN%b!NHA;{-x$#hKS&EdmBglsp zPpRyg*@F#)HRYNBA{uz^HnPx47*!5)?!Dqc!fy!v^8RZ2S)p?!EK&>Mwk0Dx3)T8w z8Xw}t@z*V$>sZz;0AsGwn752eiCUI$#@-gvw;ZLs2X|5KBb3HwmJ7}ZX%Vf0Wp?H+l^$+mE^3Eq4^5UxN9ybF29(eo=K&UJHmCadvTmF0U$23Zqulxo&KVi+H(M`PZSjE=t!z^Va^60o zn(+b|r4!5)$1-p;^8L5m;P1aABR;~_%$uuu!{-*V6{-=!^VT$YV$#*80^aY*b!K}< z$+5UmgqgdZ@Us4qS~Hu&dmE~(YFq9Gxmeu(vcyxQ868V3&0v|8WAKtAZESx&5RJ@U j;{EY|!TCANi0_w(ffeZ9W6;z zW2KC{RUOjgOAdEMo8G%@9@o;>;7pOVdf<@55nD6ej~()H%tb!n_|JT`Y9-KxesGLf_V25Es6Wz6hs0j z%$61tNw`6T2V8y69KT~}YFhq%$OrTL*uRY;f}V^(Vz&2_2negVVcHm&)IlEPU)|Hy z=vQ$8qjDfLh76Xzb*h8E@_trWSe-U7G&neDG2HPyt&LlZMCLQ~^;={2OkgK1;KKw0( z(ha43#3gUU&9UbGLIWWk9UVvb<>jR`HeJ>CbV76EBTT=$uAi;o>l4$|>c zdh6{;jn7t1D&F2T&xycIz%Dgs(I1Vt*}dgN0^{qe!6jN?{P<=a#X@E&Z)BYki;$@T z$x(z=vu9%H*{;mDX(|V&(|4o{>xKTKe!@R?zwhsRZep9gmL6;uhiv8Tri~x_?m8z% zfAx#Dw6I9%XOCntP`Z^=ygfDU4-Gn4q|3Dn6|8CBebDGW;ncY%VVbaWeu(;A8hQ6` zH`qnsNwMyH$l=Z9iQi${wrqQ)g=Cze**a&)d9mivW+Oue9qu|#)mU=yeis^5)AK9x ziXw2-t7SPZ?01K`f+Q5}&Gt%(lwKHZ=~lG46H#TL5!G?IRX`#pRA#mO0p>o}9{AEG zWHTEq;R*$g5IcK-iTUC(_={fyVSLZJ?-R{3QH|4S_?a6H?d1L`<+H-F(Vy18Gf|dJ zRu)e6AXLP%9?z}NFV5wZlDXr2@g-Q&J^kSJ=;G2kV0|{yv%849-)X7aV7z>lQVln8 zg4@h4k>GRwY8rw~Q@`hGzCMIhHt;ZZecef_O=mC%vX>&Yf{wz$Wx1@>h=R0^+f2#P zZ0j8Iw$W^|2F*LdCEP$)=LavtXx4A)>&0#SM;^oFf@_T84Ugp-s+`J29arD0z3qx2 z+`#a^H-S8%6X$lgy*krn?y`GxW@?SDcDfsEqE|uzro7<^^#|{Emg*(I6Yd3u(xkmh z7pu{X&wY0TRj0jvyxvHGE52!Ox8KE{b1L#XxV?XK-pMZ3z*uU_vvDbD=HgO5IAs^I zNk=C#QkpOzC@9z!vRy<7GJlLCG$W|NnksiFE#@TUwHTnpYQ$~P&N=xo8k62yTZJd# z(}pXmB+g)Ixv-P*lm7BptaNppUAYknOj&B`-pP(s=aC|0j$BFLPLrn&Z;e3YeFXGL zVrZiB6d=@s&>o}RkXPJ=fbf5p+Yd^$Q+xegq&dlO2|*^5lv>d*f{x?|vnFHJp2@MQ zt=uz!2Csx@VsbJ4T>#;lL4KU<;aa<6;=_Nn)^*+^OxVq>GRrEqc4sN|EE*v|7m`vZ zh}LOr$p>fZJ8&({Y_#+3!he0anR`LnzrI@c zynp?^V4L3w+19vUbSU?Iznjoxf41xUA&QaavhuL-U8jB))sgD8MekZqG1}7J^8ozm&0PE9VX5U&)G+qW8W#TOyxwJK92M*{ zbiF;^kC)dZ$arpKK)<~bIA`n7SQ_J;u!-mJYqC5CMn17Iu1aC*5`DOgy3=8p?FVy8 zdCof&RQbCf%zkE8yu`w=xK9TpaGN0%2|$pj5S(F(>^7HAx$&HvMoA+LRn&Sz8h-WB=wXJIMkn$toB0eN5@jlc`G$q)VDLX6WrgnP|aMyx8KCcCW#A zImIn$HpCfEq}hIP!P`N8Q1ENwX5l-gu=B&Gc6O@11dNEJl8;ED9v`;EiK)H~%+EVU zguQLt*NV%kBtEX0Zwg_4y}H3=Lm%uOC)okP{*K+x3BhI3oB^`?F4VswPKfxFshCo4 z%|c=UeT+0GAld!0G)3V1CkV`2GK3A4LzZp}6UWaq@FSHXpC&951m#uL}4gTx=BSHcE(F`65FS1b__N2*@PLsc=+H)%a@;Qjr8;~*dqZAd&qQ9 z()RmEyCNScy+1a2zRtk;M>1X$T;l-K55u8TS^d}fbn->Q>w zEtIMWJ_1Ub>~?}$__E8ME7fUC=Ab5~?vw{*?!qRk)^X1WEOsuX{IyvR%U8?(82voEZAN>bAJg^2a4C<(f6t&?819$ z&76z5Opv`;53oo7BIZYuG(j3T&f3*LU7Feqf2MQoseVBclB*unani7%xrye zu5#mxF{-Ck|5Ln{>KLV4{Ih(?1<}rRWXi4a&+wC!`fS^`FkU=RISrp4`aY53!nV43 z40XbSA>SX6(v2@ZZ&|7_nn;nKMsI!OH1nt2S}cu8#vGM{-XC1QfDw;G?cn9NB~o{l zgM&`lkD6ZJ-pmBAm+{kcv}kjiwmbU!*vS(f0 z2WBW(m^hl$73Ed`lRu>|M?RD*+JX;-0YMpgY=yo@vZ!bt(i&lE) zP3IGcfQIr+ON3P$LBq9eyy2}U-iGpqA)8eksbTsu#r{Z_C>6XBpNB@|L+w!ne5?MYH& z7`!j*RZMchK@YE=ZlMk6r|V_!i9EB47x@IQ~s&l8cWCZ?K$GEB1{#WHV}{;p3P z@XpK?$TJOYb$w;f#PmgvECY;B&8$3cC+{*y`^D2i&xDuJZEkP9H`xp4IWws)hdyY7 za&UnEta;kmzLY9HB1fl?EaMgVb=SO+i6!K%FHiK?*4NbXGPdt)B8!~-Y#Ma&Bd^c4 zXcxJJ5|UWecjW)61YG@o`Z(38iAl^d=aK9}4Y6Tq-*G>CTAI>7i);oc#BkSCHIA$+ zS@fHGJ~o-G*|FBT1>`vtlpm9wn~MNGL^&S35*vjQzvhd=P#ZUX1zIjpA@gp45nm&z z>hrOjOfJa~Wf4YRiY;$Qq7x0J-~a;h&pmnumbc_{5;_^q zlkjrOINO^u$F!f$7CcrQ^hu_SofUn@bU0nJdPW zLZ7v;=6omsWA9)vZOKq9>BOa;G_glhz8*UO{tNNQW4fwQ2+wn4YrnZK%5OrJQu)^y>d5;l+rcFZT%4!wCfy?_ko>g?%Lr}vei`XuO(C0ZUo6ImR8Mj;X; zk~HIiHbM#Vyl~rKrU_XIZx`sZRq2VRxHF}FUOILKw?w64t%ZHQ%q54=MGkqkY0)p| z)%p<#D%^fb{$0-(diARkfoH!MUO3xjB=x2$rRgm|=ZRJ6M)8^Avjc&G5WREqNk^6nWKz=~nRp9OlMNMzZ=bV06MLHz z`g_rKIjrBy6FKJBhjF(tM!SGu~GqsD#0;NgAeHLcP}0qp2%*5OoomKXuBg=Q6s?3962-Rrs@L*2xmWA0_$W5?suc`wPD` zhB`rmfIPL1c+NbHNzr|LJujvz)~@zy4QfcV7GjtUyxV_OI3pS@?ehoRYQbT{P-ZC* zp4fBR>i{f^=gnQVN5#N^t85t($~E~B=jvg>hw7VMEt=k4Nr(MrhuYTV=oWOpInZ}Q zWfy9cRAUy#l>!6gD8f~bX8`*)n;N!T?!-!YodfEtPJ2@RI*jWS0ZUf(1m+#1e}{Hc zEF#YDIKUX4Mxz3j%;dn^A;ZSI4S*&DsSngx!VIUTZdA+$K%fW1HnBMZd>L^PI^P&I zW%-eI|1$Ky*<#nn2Qo>23UI^T#o)t}oMwC`FJFJ>p1+yYB)W(CjQPXw$wVTl>IhWI zGg?GLRALNK?lOvXCu-V8rxdO{$jISxbfyP&zF8pyW7>G6=S8fw)jVgBc}X@l@=`f+ zpa%{!5aiJmxkbdN!oc9OfTl%_x=#!xx8!b>DNcd(_mnooFb76K7}+8rh+eypG%~S_ zcut+cHfw(>(^lE_gXIj~$1aGSD4H|dYg*X;V+{d|9vTYqoH<&Uzv|m2+TP}K%@P!i zG?8&vr(GCfs%CU)eVXd^(5w;%ruE%PK&o68)5{jN|7gaAbB>9hJe-&a<$T%9n8V9+ zr5(Zhg^{7tg)3dQ$9YW2UK?$zX0~()wxp267>x7=eZBz+jb7V3Z}Oh2=WEubTb0T0 zrk+Cd4$mBXtQ$hLMA%naV>A^4m-1~961@vv))FA&0C94(m#G=1Iee5v5piuZoP)jJ zGh8b9HxaVERvr=08q)aCXntP>(`q`SGr zj2rP(fe+D1KO$h3m*7;{q403x1*D^2{LC2#Dx&ej+#~piH!9rm{V`5}2P$A&X0e%1 zr8PcX)uAMX5mY!L%IDJN1Q17$YFiot#RJB>s0NdS)$)<7`^d L_0?)r9HRdZL*(3= literal 0 HcmV?d00001 diff --git a/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/16.png b/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/16.png new file mode 100644 index 0000000000000000000000000000000000000000..f732cab88fc925826ccbd19611fbacfeca4e4a06 GIT binary patch literal 395 zcmV;60d)R}P)Px$MM*?KR5(xVlD|s=VHn3hXWrltEiSeuv^Io`7dSbIV?RLdS`=E%z@beyMG*gj z%0V5viVGJv6>e{JYY;BPh8BmrH{SO$+#TzEd3kvrUOw-`hp#4t5Nxrue*nrs5Clk< zkw^qh(~z}1(P&iNvM09?0l|-R*;DU*-xsE7vREvL#bPv@O{&!@^ZA@osl;S5;o|I^ zPj`mL7Z1ZnR;v}MREkcg69Npwpja%@Xf()VGI*XxtyUwK%aKSVIEo)|ytB{g-7WU> z6TM!K!C;_1RDg6kO){BeJRVc2RG3bu)a!M!*{lLwTUYGe&p2^zco_}pcDvZNt$+T;7Q3(S#EnDV^bZ`zq1|qWfVD&^Wiyn%@1yJb phQu(gGPY~szkn^098U1Z0pEX_y3VrJ;F|yd002ovPDHLkV1iaRu(tpJ literal 0 HcmV?d00001 diff --git a/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/167.png b/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/167.png new file mode 100644 index 0000000000000000000000000000000000000000..a6fbb00d3810b95816cd6420bcc4d3e2c5273696 GIT binary patch literal 6261 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 literal 0 HcmV?d00001 diff --git a/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/180.png b/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/180.png new file mode 100644 index 0000000000000000000000000000000000000000..62925935b3182e4e204701efc8b69a6eadac8d58 GIT binary patch literal 6645 zcmeHM^-~m3+a&~~yOc&sx<#ZzX(Sd{ge7GGm!(5;6+}Qvx}>CAmPNW3L2{80mhMi8 zWr3IXKlpzAX5Js}edf-+cb;d?bLPysbE6FPUy_qNBEiAIA=i4PZgd~v{~Zqr?`MT! zLW%o;>t*y(6{mWHWg7>FxkgJ}#l+uwKZhvYr0+-nouqu$jN^bxu6u6u!_v=Ouf(i+ z9~M)3^`04?74X}{J>=paG*)>)pwat9@%0c_^yhRjCs8KDgjTts*26`eeFZXkulH{m zdlh}!N1+}Y;nmfk>9Xqb1L8irI;OKRHuvvDsw8mkOcQZkO8zmD55@|4%JN0}^qMdL zVfGF#!K{E!xflstV#(xwTffXW;&omMZpnLPn6Gxu(=T{cWX~q?N#MpiCbo27$Idb~ z!@L}$5|Tn?L45sxVR-w=&rO*KfXwdYM0DViKV{wgV}oJ;OYwgKijB~&F8xaB>UU_Q zD(7hi*3<#9&-RKG{Is>ayxf|HTg=)YL8zR}{V4WPSkH3pmFRfa=_UJI-{}rYF`!tF zXz=vih@P*0<@h_BO$q=p2KvATESzUBDK!f549eSehg6!}@5OD4^vvE&B{ zb0S$XL)r?g0=Zmr4bptVAi?2Po{*RU>+Y6*<~AgTJ&l$eTH^f0@*+s*W|D~6b+J7- z*0v5}08|dWnD?83G|syO4XOi>2kLbCxNG!^x;4P_ua{^Ep&>a{vpw3q>+J+59Pe{gw)&!l&$&(0)Ga`ZkOwGlt4~ z;Si-G+Q;gLUJishdwuc3>ui;7x5f%+k~ia-vWu#fq~0kL6d<2Rc5|AfrWOu_LL+q+ z0;!fOKg-=k3s!f|)Y-=d_BlcK)i7z0tCQcN!%JTk>mfR`$`h);pOh(vr4j}%Q&$Xi z?5$CAYc6eML921c2whVL-;=UJYIO{#UT{m zn`_Ic4zHC+J}b32^zIgUm-06da=}w-9NbgJ27keVO4k2R{A^(eH~b@cEo&BX?i6&656{^!uGcERI~&8A&ynP z01iJBtse;$%uB-MJ_bddV!AY@3tL-R3SY(}P0g$v(Vs4(3WCmuBu8yJ!*Hh#A{vDy zT2jIIb7^}^d3N#-Pm&B2qgLaULh2EdvSZS;9R)OKc{{0Zna@})5?LHJ9k_wa8qFRlev_LYU;vM#M>rdGPZ>;@hN=nM|G$^zWdvz)fnUy+) zJ}&M1`X+F{fl1DDjkm_HZsaA4M|f1qoH;8jh1LK3uT!DZ=r{16QffdIFoJ-TAsr!X zi5MbrX`1GYWcgrb9pG5srFpd@A#kRTeH)kaML-q}i$-~_ZOW>fI`R~7au88_L&hF) z8UV)3H@ofN+f&4htsYRlC*jcAzx7Vnb%@E1&F}8hR(|s`unjQx*g#y0pxH_|t-hER zg;MF20?~uRtL>89DP0PJjeCis&VDg#ZYsBlJsp+36l9Nm93@M;Uy+&a?pB%QHj!26TbnMQz$SwpPDim%x zNb?nZ@fuZNG%nGXW+8ocLWao5&}BP|$qm6cgGvKH*8Sf}=Qxw5y zYm^j;{H#6kZ?UVCbZfHWfDBKX!IMFfy}1U#N4K>UL;1g`2Ok!`3#Rr(*O11PCw-Fz@nmHJ%nvI7cht;YeA@Hy5G&+zO7u z&;xYSGwe}MEafkiI`BBx+17Z^?BHnw!eM|0-??CxObZH~sl~lljFu>pBeX+E6Z~-A zZ&6z0i)?Ui^ly)W1kRtX-4E!h=E4GBqNAM-a$(u8D1LZ)8d|)z#gtXT>Bim3didhH zn;Dh57`+%dT5R!q3nr6PiaT_s=vUBktK;oZKlP02Mf3iz(V|0vT4x)T^&{Pd@ro`4 zXNfP_oC}N^^pI=UK%afJJnSCO%j%z{dJ>w&;17(P*E0rR{w_{@R8M21Ttaszl$Zo4Bki$$*ZC&=Jh+89F92dyS%21ZPsz9pNhct#-bH*= zl}Xq+zU=tL9Nm}+Rd9XRMq-`Kd*xK&bo6F~vzL4s^f<34U#y^x|Gn=FsW2eC&h8({eY?w#{Uo`lD+S&}j9h#7 z4c8xZokQ+O3+2Csttd@%e$BD4&mo5X{baZ5vIh@k#BZh(D#DM&V~y!Tu2Yffg(eEP zS(4r?eWc9%^?>rz@xwAu6#|{*>^n;f;X;H8<~KG#X3jf1Ii1?={r(%XNIlWPH+mvms(@rbCucG1xMv zs(yOikTl1}h>4OkCYUW?jT)5KHz*;6q++Hl?lpM6{RHHv928g+>T2A_*DloqJ0ra* z5MN1k*LOb|;G4d@D#MwVsb_xf=oa|{EXT#1QCiCX(jq{BFqQ>YU)?tIt8FE#=x52r zRTlG`;-=p*+8)bUwBv|tHy^|Z$r7i80^H@br<#R?Exf}h`7Q^fhxMZ&Dx!?So&hiyM z7zsCgs@xbQC9V8YGOVCmbxnG(Uz!pfhfl;3S01hH;GijX`e(OxtxR?-&l%SL+$?hY zIr}0}iPCeLH+9|MmsXTMa(3cDw^y4;`d7YUACv`=Oh0nhleFc4TKY0iy1NFJ)hHE` z>A+1F)`9y36mXN3Y)_FCZN?AyTo#rDTau$MCg3`=8BfP@yyk5BKBa)C>+s#a`H0T$ z|HY+uT>mvR((P9xiu@CzrkAgnzivzOlrygYPR7^~tb{m3wOd!#1Gi!sGTm_bTqACOe9i|NP9UN)R5B{1cxrR`!7c@lIcnq zUMfuI3tP9&l)Hb+SNw!U5o9JA=&M2`9IyB4A|=#_KT0@Bko>r1iuVYO9Drf(7cS?zL<$6UJj z2Jo#BPaGCqOPnqn!kgLP67}}i%Zef1UzD3nX@yT22qaWX-+)|f4zA9Mctxz(0YDf+ zd_rp^(Ny4zX6uD)Y z5VY0J{&o!u@437xtPyWJESga)kpnu&sOt0oeqvkx^X-_ieSfKDABN^EQ-N;y;?Pj^ zK36sOnB6*CDAt3DORLl0tjwP=*Ap*usD|E9Uw&VT_E4X3%Y--2JMrfyu@tR*_(V&w z7`|;dm#t8%!_!m)%diir!$S&%OVP>0!4CLm%{1`631WqBt>3LH;dpIz&)N}=Mj;`R z{U169-p4rQ22ZJLuOxAx2EzX!Y(5FrWN>KtnAWwDpU?Y&TJLVJ0UtM$jrGO%wRzr| z36AC0M)A~S-jOq~g)*uJWIW^ny)tg=4pb9(Kb4dM$lC?y2Q;ZGF$v^ZQnR}x=@;ur zyd7eycqY~J*+>WSI41Qp-O$!9f|w!enN&>GOtlG(U<2;(XfLC+KlVXo_63gwsi*78 zXoHVWLyCyz?~i_J@q9aOMfl`!hjF)`%Y^l(2{@d9!~w!;z;VT!7!bkNhv0?yffR?3 zDtJ`is_qweq9>MlMe~cHcWq^J#hws}2qS89Gg3&{Li#cH5GfHlVn~zxD;|VK7>0+^wS*$<}-|$KWMmE2)uT) z=K-W-wViEGlmKLlWnB4g<$HXFTrlM7upCbbNeeS}V1YPNJ2K2Ko;BX|FeK(x4@+-( zxod6`aJ#*wuzyu;XH7?NtS+6{!lTOtYX{)fddF*K4Fd9-F9Zfy;bx)q>z2|$A#&#P zPV(Z(D!nV`k?bKegAL1E*40P0o&q_wR*=WTpHpsE*A42nl3No0K7&?R+?TI%Rmz_h zA}$#uW1%Yd(rCe2Q26fc{DVS9__samEJYLLJV$D_r;V1sSYk?&|J7`R>#&PM$1p?D zLO87{a(Ke3?kjln`_3f4xX_j?g{vZ#II(pv^U;oy?w$a}|uo|EN73kb; zkLnqlYm`OZSE{Yp_A}_+1vNviG_i%=yDD$y_X?qMng3>Zgh4=0(R0&qSKHQ30~8Ekd@oqD-fKibKvLEFT3BG)Lfg>I5GXXY0)r)k5z zRM;dJI!J3Pa;$szwCpfEaIUZXw`+WT!}oNBr#Fg^6w$p2n*%N<4x|q2O+Q}f za=h}J^eY&C)R%UXq3W$cjfh`g;7ei3ATMB1d0SsIc8^TVLd=x z09xyGEh3icItMxfg@MkR^zE1(!Nu!=Q-5~6U+!SAh!;9v|hJr>Zz3qCguSNYq4V0 z|52Cyw_ZGOoi)5bsKG&dc1rv7LLVHvx{3;qn#vIDZnE#V>>m(ncqg@5CBJ;t+6c<1 z=oI>0^_Bkh!eYsRPU?JoiJ8}W$+( zMzr1eQo^e!oLrLD1uvdrq1V(4St4;mL^P(1C(Rhd*r)AS046f3X600ny}l9Ew?1iGy_Z$F(mWikasQCVfaY2Mn@vAVx-E-h z&`%4BJ~dtsPyK?KAD!C`M=Ku;MchEh1Z#=(wj@=NOuhA&AK#%)d2dFCd8gBC7I3*= zx4V2yNf7~Ae%Z$yMz~Fg*8V^ha5n=&0;!_Aw49(V-sE~fOIQ)6-t9qVdmU)M4yTWp zrN>F><}9hKvP{gWH}TjB4|bte14_m(?<=c06qZgFUUnT$~}4HIPp^ELdREM zTUm#iDv9h1?zLX>S{K?S?D6NhWamM-p;|4(=!RT)M2)ALV$zn}F{`%DFjr`^ptr~E zz0cGGv^q^&su~$i@rjIMaQqcvk&|^@#8IfEXcg`%3E7` z`q*MB4XV}E=f`lN@~96K&ohQS)+$C^rRFs_&3o6s9UeN+#g-8t+5+sRkNrBTc1@PItvEBmkEFqldGXFq_kPx$t4TybR5(xVlD}(OVHAd+dkac~iAEe!1fgJ|APxlwaVTiLgFn!;^%}HU;t~j<7QcdNXS)P);NuJ*Jm-DibEM5? zv*ACMbPwD+%{!8zuItQZGbBmE>2!*>Ua#qNI+)F7d_Eu3=@eO(Q51!Xna;KRi|^<9 zE+Uu9g~Q=MSS}O_BY!j^pJOx{$)CL8%jJ0|N nt-`&p`7gj7IqZAOdnNE2d7ip&6AjXz3UfkPc}iC8TTU z8ou-T{14As&kygP_Bm&rweDT_-q(HY8~#FDh2-ADdjJ5CsHrOI0RRa52m%Q3u)_Rx znZti?K6)z8fQn&;EdXEv)D)i@1X}J{5M~*4*U68|5!H4O$0L!EKX5-OQ=rup>ycd~ z@A*AgB9+;@+<)$ zWa;WJ-Bg4@p!6(YR%IB3+-6I-zo8nxotMvvoe+hELgl7)>V({XR-F@MTesQtDMuuDdt7Xl{k^wXq~MbJbZs`d zTL%gA^78GJ05qDyaSkvDBTkP2o`wq>kN)ypcJqaK?tClXLt(C5O`3f_zd8JYU*k3_ zVp44r{mrt?l#idkxViby;8{~slfxk*GgG}Mk#Su`;VNYpb%%M4{d)j}&%k1DZx0{& z`bI0d>HYkyi!GkJIS03mB$`B5@s?3|HnqHIafb-hLGYNCM#xgYu^^~~&TYHiK|`2U z7Ek@vs}J9u$Cds6ICIa2o-f!}ww|sg}+~#@1MhJeiNjE2K#C*_|LhIeKitVIy}t)EWqD-F7*5+=WA!0+%Du z@m4p_5@q(Eh(=A#sxMs4>8$$R`-DRn9{a=hdaq$%33Dd-`SWKrF&{zP?+Sgt%GUmJ zP`1v^R`_fTzn(I2?8BuoXR&DU*CLOgNqv4NyvZEA$ttyx=Oep=e-+!R%^-{VhKa2c zucI7#ufE=VijIxv?lU42O12;xC{kXTs{kXXTg^Y4qF&-zh?ys%PAQ+`RR`u9`Au5{ z^vzV;itcIGVwh&Ywy6IzAZY!;cvHzCkZ0;eN`2EN>J_743ngZfH5P0=d`2hj>!ggs znSYjFi)lG%=QpwpDjqCUQ25P&m&Ne)&_->TGkSQGr6pdlSyixQSAgG0{?HpKX}Xj=Y)Rt@LSfPT-&b zetjLzV;p%@V@5*w#w*^fnW-B(jhOfJlIlrJa%9OKipRg$|_s&MQ4Q+&|(_M2NmxOR@1nn&xAvS^@~ zYAMc=@^6nn$R*l9zNMt_8{4MiVHx}7j))2bL>)+yzbYeUmY){|!K@3h79@}uINk;d z2$ER_T_! z*L|D_+SYji_xVlsTz5asN5)l9>&{10I8MBfgX=YRf7y85 z4EZdG`t3$qMP?r+xi^4-CRbONqN;CoSU)7RxGYq?irTFmk*|5ZuKp?4t*3PU zPqJ1BC5%L!+FclDGeOp6f~V=A{hBgnWr}L_$K7ug=Ir8b^!flvleMt83QSFn6wN9K zcy?qin}R`IRkr%fMWL7vrFOqOE7RVIyB7PYeO{aRRb=#6Fcm?S5m<9zrEqOjVane# zFNRG-iTOc{6MkstYRe6Jz#>GP`rm||mMS3stXzg*rlu>HCPJt|Fr&UFlWB!%eSQ7W z&yKOaDdSR(dS(d zN;|FjOksa2zIdte6<7y+^mG&Qm~LUpmug}#vdR9W{{=a$!k+%Qdc&}Y#lY6NaITO^ zjbiZm{sIr-W&?%c{&;E98+0FcJ8{?salVIZ)noJ2yOvY{Y`xl(W<@9uK?jj>PSuKGleCX5SNQGeH2o08i|M-r(c$FTT1UsV zGj5fmv~`sw7KG8q@$=R5+9yDEJ1OjfBPHVy}qQCRZbd#Ey9s_PD3wc_yQLf_rF3qUPQuO`rI)M$lCyC-t74`T~1TkT^d=bo2Xfo6r_FE zDw1bH$o8caQU|1ztrZbt))m=m{8k;dPF6ic&fc5+GY7yBE@ou?OKfWdrQMb$A>dE_ zz@f6|^FEQ9Mh$8nf0&LwzUqt#8vbiUFSk{cX4kOb@9LW{LunPy2Eb0H%sfp9OGQP9 zX+$^ZJzHOyvsYH+kPZeN|I2QdP+}!&q%!X$lXGPh=W%vl-Xj$ z{1^O;R>#;Ef6q)YgvBl)8Q1g=IyE$*eYgXOBMNusUdg>uqSsmg*8^#88f4~IqY{v#TJ zRD#{!gxTWWOk7x@G|RKY6-R0k1Bp~&`TNi*Qs=rMsw zg=eQdiB;Gr=vf;c@JRo1N?+usmYW{YK95BsGgaEs0draX=;skcc7g_E;ZkI~I1`YqDf46&d3W<}_y%{FTl?Q1mEg0waKQ1hTCCUZ(DwFhLSH9H1iaVdTG_^hgGYQgLAEE8 zsMbm3y^nXX4q^xye2kuN4XXKvTIU*-yn{OyJwcuNN62rEFwDGDwsT*1*$Oqb%Dx$F zt8v&uyxvHz9xKrgp_MNy@}$e&dxp9zZ>s#T6_<5k>kS6l!ca zyvsiv%N*9YY>-7G1Vw;(G(Uz$?1oWvz_|-KjFQ?kE2Kj5-rVio(3j6EDfFss>=!aE-L7puvm|Kk@YzqyJJ*b)gw{x3e=6hvi1TY}NNe?XM{!w2q;o}wLofRA{9r*CbtX|dqoANKM7Ip2m!1Ny> zKeWgO;;9_ekF?$OhcUD_x%^*>t~;XETWLJfo`~RtR-_=@_BmjTaX>N@hYa{!=s^|b zYyD||G31~P(c96Hzc0X|CiWW?>;5@~T_tBGa?XbFO61h{%a<<+d6se7 zYBy4KL#3dy0**MoWIKDU|Q9{O(iOaQgRl@}fv zgHPzi9}T22VH!#qdDlP7Yc`OU{{m(!E>*x)RcHUs0NjV?@l&K+9?_;MW8ihF(db%Xm z8y65n0%ofr1JCgOF(vI^vT#|cn_J&wA465VuG^iiEj5?9CY^OJl(XB(bm`;oMR1Sg z3TQCpad$JSj}K$KZbKL@MWr0~hhofYp!L}NTx|*eC(f&ts)V#%5l$Fs3gs3d zIQfoo{o@TgRNOj)ff zOWm!@6wiIY7wg;A0ndO4I+}D63FP(QZQtIXO40&lZfO#w=-^#7!HV~+-SO) zB-B!;Z;M4K6&Jm|fVVZctLF(FIOTK6RKOIR~PbUxBXI|OeI6@wYrd6&>z2B-2qNv41qz>C$f74Qmen!w4||` z8=HQ%g1|bV!CVTHrY2E_Pq^X}WY_L&J3bOOOskx49);}Q*}ibb0C?2xQGO!z<@3#R zf0%BMk45k;@T^^rCXK94Tg9FRZ{MCT9q@x#2xh)k<=(t#QokahW1E&0vFMks*CED8 zpQ8jl!!cbZ=&`!<>5K#IoLlj-IBOdZ4nA9&1@`>2y_Xw|4naF3&Kf6xfbvUh;V6VE z1|ux|oe$%C(KsOF*jITEN9YFrcNbDVh)%W$Cxv~$zQA$`YeN!gSRiNy)NyK=y$?7s z-#^gTkuxlKgI1f4fSv+kqQ6IIp)GlAv)qf?+H{hpzjRQ)8V`n}q`86%)7aOoFlG)X zbQau{HlRlIR}2}?x&?ibS{R3pwBnrV#*IHZ9>Jx4w3t7*kKCKI#viQB6WmJi(JR}ihk9f|M@L$~-I zcCPm<_bfyX)0wL6?KLb()ZMi<-!=A9L6X1xg5|%f_bi6MA`5wL_cDNFy@ZeKVQx5F zlnIGaFAH+d^CsN7_Y`#%jj6z!%Xcdo0qgCbgfd?ibN-U)a7!xn`~Jdz*p;90wFajG z_wtZv}HmFXIGHm^j$S3kqL$yIrJA~?8|RYmH+p*<3w*~aekwh z=&YPkHU@K!8W;&X6CHuT24r;QXzxzua60^~MI8p6bRohgjUPldvZdfTH-wxWba6eJ zYuu6G%RJDX&$9GX&bn#9^!f(SlxbPd6=?YXIOK+6{|kd zGW=HpX|$?y)Iz-hy5KR3s=S)4472Zd|DbI7rLKt*00%yaq*o*Zii=;^^y`qZEKFKU zU!(jE7%q>q=!@KY@{2Uz*&$l%$GG&|7;pzKjFmS#mXsr;*p70tPQowmIk)L-a2d(B-vd^0oy>@}cfq^WJxuKf zU}Rt)m5%J+93Wj-If0gyOyQDv^CPNQ29phPr$z280_z6?(q$^ zM2S|_+f9^puLCw_TYbPS{e$pJ9F=h+kB!xACuGq9*8AI-@N%Sl zN~B7cOGvGyXYwbLM6`63gG4xRF1@KcGJ&aZv}e#>96e_$v$z!4gZUKPoVdx2KlDUq zry8JyMaPJ60)FMyMu}+wTjs9^eY1|L5(8v*q#Q#g?t1|Nx3?qXccc+(AcQFIv)t3Gm zK;P@jY9eIlvppPh_x*Yu^?GA4s{+VwQ{^eS47iMcrFuWgQ&WJ&G&}6RjYlGegh|QbADPnvJ%_@mwG%`{l~yj~F7T@JzCM7B8Vw;foIh z8SmyPq0QSp*_n`9*8j90j>|^hwvusFe(UuS0Pu0HI*B$5JdN;uswpV47w%? z^4S#YdnBkDMBMl|Um^pmr;{dCqO_luF15KMl$eX7x-lP=UkwZn4rD$O#l`BWpZ|RH zfb|FN1K&}+aL4N+>7b2bjwkJ<5Q4mF+)Yl>kEkCqc@2XS8TiX5;6*0?mTzw^+57m1 zCWspK)SIWdO_k>D9*9*aQ9@T~ITJ@E9)LRHbSX9TecSTzCL-WtGdwBfIC3WD;z0S2 z4S#MZfbL0%l-rlaaL zsSBT2piLY42Z?CKUy$B(nwY?GlL1p&(57ZwL|ksLSKj0v(l;2SI@z5FmBylZ5Wi7{ z7~R{(kPi1}$)pDNX}bS13e81efjO8wQz0;R8Yr_g*xFUmr-VJ`HNT?hOKH%~5?rqo zN}HF6UbF?Vi7Zd@7Y8OaTQDjl5v2j9!XRXr^-_DNT+>hTfhnTVY?|(8x)Hs5gI_nu zy&!Y}q?>{=E&~nrF}V^R_Y#vnc&45oTGNPKoAFv zS{;z)!E&2UktUXS#p6UBvsY%GZQ||%P(toBI%9lRS;C_E73a+tskM4!{i(KnQK;uu z^UZfxduz*uUmBzcplz^&yQ_#+pDBw1s;C5-7nZysd6KGOB12aHYs9W^-XC<*sJ zYtk5OEn3D8dd1B?`Jo6)#IXm;dVpc7#HJ0tO&jh{(_S+4rGSVk(^o1^FRA5sv13GR zG&YfW3gPVxL2D@{=irkNOa3FCbZM3rza6e#)h?yNGMeQ#)`2`KF&{a3Za!;JH;AHM z$|>J~0vOnmv)?V}!~+vV7yH=(YYV#Ps$ngZIzOPN;4m?VDhAyrv0A`~2)p zQG6@jj5w_>r$N>cJf>ogizycqTJjn0zX(Vt>g;RB+LZIG_(>$OC!~ccP%Lo6|8TXz z^qPEY@IPYFw?)(pTdu@D1)AH4KMuN$>#O-Yey94K=X7%UeGZ#H@R5S9>X483Pg|6b z40imgtb4Z+7&dku5tZPoxb2#ta`dMGh{}rl8D@V{n4P5Q%2U?Jy z>-0}JHzdq-7F=(r`W|ChHs>fp89pJ8jqXQnv`!DJYGJM|T+*YHRJuBy8j)%3=J~OH1jLXRY7#ty) z3MV-NZJV$94o0Qfg^<^kWQbc&=|`*oSJzLlXR%SG^80V;$V8tw$TWzS4R=Ub!qOng z3$Yz6OqFZ4pjtyJi{k_A;DqZHfp>IFoTk;Ed5Cqz&5xj1t;rgv<-&b_=Rfe38II>ukA@da1B^<2y5A5OxDp?whbMTbu>{v+S5*x4Y}>6hZ&j z`=@3o383uAvMD40;8Xv17htXIZ|q#yi+6KhX<$pN$D~2$GhZ|U^n`;Bk){;teybuB zvRY3e!|~dOLrZs<^Vgjuk{tDl?jj`li<&+V5Ea);g}G@1kId-X%CsSVevZ__+!PvN zuiu7xSrOQfdp!jjKTi!jHq0-lfGF z?O_V}HkdCneXrKwc9bzf$YBtnQxU9pPa1Qu4<*vq6#GGmYc)`PcM$}WAk8;N39Njyo&U6inEIhomiergFlZGMk-S%TMGD!A^n0SJqqTFc6IUI7`-o_1VG&Uey9@7vK@7h0oYN2M}<>JIYwbLScnO_Nk4T{r}5szvC+6{Xz zWSCuzDj@*N#34{m^XsMXBvFUk6YRLdNHk~s!aLyt%STGgzUjbMQ~X@8_DGsD*1+A{ ziLiiL{SyhD2#4;U)@s%8=P@5cf9;ak2FQ#{kfGIw2P@{HxIn;095!L)*dX!9QfmzI;)?48EbRBhvk9jh*|7IFfta&_%yE zJioFNnMqancI$6;44vCScRjM43jzNdV+m&pe2{4NuC4Wc7s<%jP>nhYN7I|%5X-|O zbR175+XDfUy$?MI#}%c(8@v9(56sfgwDSanQ2I^;D zywIM0)aaG{YhJ6DOZJ&K@>MXh%HA(|Ll@`{N~ow!&e`~|+54*9>i45NW6Ek;?02)N zkEurb28gpCN!`5h|gZ^vciEaA1N~L;n;z?tv&_4>a8rA(7ad uD=b;T#RmWT_CFu|FAx5Iz85;~a3W3U|GJLmfU#HS05v6T#foRvk^c`^bs)R| literal 0 HcmV?d00001 diff --git a/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/29.png b/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/29.png new file mode 100644 index 0000000000000000000000000000000000000000..4ca5e0f62e71eeeb49ef448c8e79bb49e7bf7ca9 GIT binary patch literal 758 zcmVPx%ut`KgR7gwhlwU}bQ5eR5(;QN!wGmMxVJZqb2t_1h-gKp;2+F)ML8ez;bP>u@ z@((H`+P13^QwI)WY!NykguF?;$k-4iM;HFPND4&FB1ejIi*rn2lfavKwF3vf^L^iW zpZ9&9_jwhONF>4~FGT`0o{T5xjVHS#=)D|z!{KlgP*PG-)cN@Mm{2H0N=gc+-%jtG z{TqpJI^JRjokF2NY_X)K;&M|{6M;ZLz7&B=N=oSL>_nwfF+M)dz`y|8+uP*l=QA`k zgjTDirlyAU^mJS<7YD&VO!bd)OLLo7AH8gDZbl_tP*A||@UTqy479Ygl*PqG`uh4< zU0ucDa8O@gkI`tPqN0M_++1pFYq46bWMpJ8J3C8paWQI@inmTT_NOmUe?Q>SXdAZI z4uZiTlarJ3-}3Tua&mI$?(UY=MuCb-S5{Wo+1Zf+i;9ZK%*>RP&dtps5;K`hveJ=} z5&0Yn9@6lj65UM=ceVGZeECEM-rCwCD=Q0~PRIQG{Fx+C^ooFfzh7pwx3|as{yuKE zo58_B78Vv*TU$e;(cpACX>4qytE&r}%|_bQYkcs$W2W9h+4BZ+j1MKP7Y1EgTEb$n zNFY(IICpe(FflQK&*!7Cu#n!~UV3_Zu-omlx3{BKtMN_E@Tt;_QgxlO_a?5SrCuCV z(7Um*A?a*sX_0!?)zwi|RfS%!m(AAN+A66Mbc<#apn>IOzC3%ww{btZegm10^%nze zZf<6MeI2jYOLB5D27`g4qa!>X57X1rvijZKUGnnsFq_S?v8t=9Wupig4!{23bDN9Q zJ2$v*ZQ$qcUozS3>}G+F>{)nJY^759U!O+8CoWYao%r#bkN=q{F?%m( o_Qn+@CU`>AxU!v~H?H*l1$dR7x%5s-Hvj+t07*qoM6N<$g0$an)&Kwi literal 0 HcmV?d00001 diff --git a/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/32.png b/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/32.png new file mode 100644 index 0000000000000000000000000000000000000000..9582a736084e124ccc9499ce18cf482370438e1b GIT binary patch literal 805 zcmV+=1KRwFP)Px%-$_J4R9HvtmO)5UaU93LZ)yeu=R#tXXp}f6NNW&bBq5U9E2Ve1TXKw9X~UXIq*R zOG~4I*Vosf)9KLJ*$MNDS8zOjiP)zQG*&%ywx`(L-9oG7e zaJ&Gs*^K`Fei)5L>R7AQVrORuE|&`A}Rr1RY9T6DQ!DR?> z0qs6J4v;`1kw9Ht9TpZAFgrVos;VkvWMt6$SOP6AEl{h~ltw5Ng2UmUgEu!fsdI@$ zf=DC+u~>}k>}>S)^-;0XYZAPB<3!Lf4%LtrMGx=N0VFeIXdn>4+}s>$YHI#l$&nTC z`F!wrJnZf5p}M*nBpb!W#n|57ra34qEX3B<7JUi?f|P)cjt)Gz(}ZtBE?l`Uh0NIw zhR2*r*Iiv*@OV6!oSdXVBkO2rXh3OcDVm#`=?X{&#-6{%=X(|; z{;-g{jmRpxdU^pCi-o$Xt*wRE>qT#GFWqxxWhD(Bq2l-Z5sSsBDDqVthVZS^iLcK- zBJ%zVMCzNkHU0=-aIzJUfXvU&Q)e2DhB_Y|9i^D9Rx3@r&1OS597bMV9u1>hF2~~H zBBrLMpj0Z+*4Bpjk0`=pelY1gh)oZWo^_FCh@59I7$B3$j?chJnuP@Fu!zp8jJSV7 jjsQo1Bft?jcLM(a%LBi##uQ;)00000NkvXXu0mjfcOGsW literal 0 HcmV?d00001 diff --git a/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/40.png b/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/40.png new file mode 100644 index 0000000000000000000000000000000000000000..42bc91adc44d79625888eedb6f192eb785744186 GIT binary patch literal 1315 zcmV+;1>E|HP)Px(-AP12R9HvtSXoG%R}}vKSrm++Vg}se0^$~{LW-ic7#youv~kxLYh2Kn7^)OQ zwOYi25v!#x4;2(mnz)1DLSo}m3^JDD7RB0{Xi{G)tyO8UxXk=h&LK0XV?%Ua`Y;!U z`RC3#_kQO)-#Pcr2wJUHi~sQuOaP6{j)_4d351D36NAPwV64AMgC+)zWx!bfBN|kz z)hDhel}aH9g8n;E6hSYV)7>?6HuPDe(Xj1dKdq>RC~6>)NFi!Pz28Y2%49PA^cxom z0g^~042<4SGenIDiS%?ny7dK76t%<9KJu_xzW^i_PMpRT36bc2~5G%8@ zv*_yT!iyI#U}a^6@bGXXCMNQl&z?O)dwV-SU%Pe?UG!S?pH0XdG2ju;#qgs-nJT3cI@laqtv za!5%@L1$+t1_lOj_3Bk#V{~j3%1|Xndmo|WlP_Vvp+#`x$N1o*gx4luZ*LDo4guB! zq)2>xe6X^zg5>06l$Mraad8pXuV2UJ<|Z;TGf`Pt2?qxU1{WC_iHeE}Jbd^NWo2cY z`nI+nq4@*l+P_Q}~9RYah(j`29{v3scg{ZEs<|sWqJvnVLF)@gUh+z87&CM}CKM!|z zcee5O_s7i445zxNs0g8g(%KS67FEf&$*Gudfe*fq}5KwdFKW@leqW4-a!Y+1=e`cD=p5xk$K* zM@A8HB?J?3Ut#mfFR*Y@;L7(UkiKOBi6C%MrKhJKN%4O&NNt8HbYo)!si~>Bd-pDO zc6Q+5;eqw_b?$>}Yim4z^X5$kpljUp9335v{{DV$N4hpM{M}=Og};yWkp=t^`!&@6 z?82)!7H{84VgKglW@Kk)^D}9XGGzcz_p_6la6>}_x0HZ@0N#+s(9jT6Dit?rYBi+4 ziHQkxcXxAjTU%Rmb?dZ5sV8mGAk9)i(Wbw)KEeJUf5A*~9?t0@kjSK%otZ&*PY>JX z=jZFQbNE<&?NP^#^3WMf3!UYtGpM>#Oq_UGAW&4HG>Ez57XsbfsV)m@5r7sD1PHIr zW!JKaBtY002ovPDHLkV1k`4V?6)> literal 0 HcmV?d00001 diff --git a/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/50.png b/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/50.png new file mode 100644 index 0000000000000000000000000000000000000000..4313824e8c1665eb0e84b852852c6a66b1edad1b GIT binary patch literal 1677 zcmV;826Fj{P)Px*M@d9MRA@u(S8GgEXAnKR%koBf)dCt7@IfmUL_pfoq`_F)C?G9?5PnFd6by+C zR6q&%s(+}^(oir!tk@b7H4tB^)&OD&P!cR}j4W6o3JM}WN-U4PyUk2{H_Hm5tD6{e zC%FlG@63F2=FH ztI=o{(;IC_xIkn0MoR(o%T?xX!ibqd-=YpiPwzk68*O$wX0L}u^ z)6=5^LYX~q-~gFT3TB8kgTjMWMpK(!NGxpvv;sZe)>1~DLW5u1^VJ`!GXc- zZYhVWx92P-3JMC4nwrY*A|oSFRaG@FQ?nSE56INi6xOa?i^0J`4u;sNtE=PQpx`8sO8DHlbId9w&v1Iq3xw$1xpODX&CSu&)P&~dX3mC- ziwmd(qoSg?j7UmKN|2bCi0SER)~~6l!Imvs_}i*gt8o7OdHDJHVQP8`3Yi=yzb{4H z?gV`MPAsNxKEUU{6~OJo^$bLA_Ft0|kfTSBGMgmf;oUDFaKFF6AI; z8U+UjqoJXJ)ym4skdTnTKxismyLJsBAtAGXP!CN`PQu#K3S<9FKvi%Fe`ZzS%|*^| z{&+q7%aeE%%jB|`3xt}SM&`)K2#Sh|I4GJ#H*VbE#*K-IL1kqnm)6092eE(uems8s zm>ZQ!DK0LKODixi5NFSxg{P+{W@ct!V`Yv0;Xzn-j-x&@A96bj2osYC{xt&*{vOZ@ z8VFj=%VUI^eROn`0nkXMW~QKNGEtz##l=WTN#S7WJB>q8wr}5#3l}c1{+>O1ke!{a zYj&E3s$Lab-CWV|>34Y4paL`+xP0P^fS-3UD}qLNF(CTm*U`}t?d|PYvSbN2cWi7d z*FTjQ?GNe|nq)&mL;Nm2J{~)E?7-ElS9#%4ozo)i?d|1qb9Z;=`X(SZyL;g3=7tBg zU1*Legt?O~)c><$@3R6kQ`1mdnDYSHyLT_=hnk(H)-&~p{z9b5KxIXMs3d4CQ&1$K zp`pAh8XFsVERvp~5a{yqa!!EZLZtmb{YKeu49mlVnl2qH?^dQltr4I!SK`Q#BfNY` zHgDdH>gwvJ0}FK%!IOo)QBAo^=M4*OxhL=KdY>IjdT^biU_j$h0y8Y^3x5Z1Neo*4|TK}7P zZPCA0Qyr6z{?a0lB!+&eyyyxq3SH&(&z$elXcQyQnwj~Sdsh1w(R=RyM_%MGQ`$;E zOqpF{d`pZNlQmP?NQ{^=yT>A_ywPEC6 Xq#@RrbcKys00000NkvXXu0mjf?q51$ literal 0 HcmV?d00001 diff --git a/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/512.png b/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/512.png new file mode 100644 index 0000000000000000000000000000000000000000..06c6deab6848b93cfb8989a45873457d5007d910 GIT binary patch literal 23278 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 Uk6odFp8x;=07*qoM6N<$f@ER3!2kdN literal 0 HcmV?d00001 diff --git a/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/60.png b/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/60.png new file mode 100644 index 0000000000000000000000000000000000000000..14952dfb0d838387ff162ee8dc0c294d3b40ccde GIT binary patch literal 2050 zcmV+d2>thoP)Px+yh%hsRA@u(SP4v2R}?)n!>|arVBA1N5!tJt1*JwrqGF8EVn78EsY_cDHKtVq zv1&9%Ym8U}?tp8xV5|xuiUHJ=iff`QTH}Um1PMkI1eqC{d#CSr99bmlOhf+*34i`u z?mhS1?R`a4Q&SWEM?)b4?%-_840mvXAu}v9+`%j$yL1O5^gTE-!!pAi%mT7YcQ8Wb zq$Rtw?9v^~0jKN2!K+lBZrwtCeLVwqcXvljObq7Eoh#`~XUE3I;@Puj{BFR20Z2_vTI8%x!{hv`@CXUSmp?=zCMp^Y4Gp}mCANj`%a$#}`0?Wz2fd>qF)W0T(E0P{ zw`t6vpdcJOb__jw^x(C`=Je^)k&~0t;@*i9Cn6&w1Gcudc>DG(`u6RMs;Vjp@ZGz2 z*@cxVCCYE!!NzYBf%EsF(lsLC>;a?}Wn)$1Pi^WZ7VO@=8}sJPlML7_;QjmeW6qp8 z%w}U_BZdqa0v8t-R`BxW%Xt3$IV>$L*~-LnW@aXzKW*AH9654?=V)!OUcE4Q@L*iK zc1_wt?;|22cpdHc@$o@2=>&Jn?r<9)fC*_!;o&+6 zwY9YzMk4;3OOEUv8V%CZ(=lt-tkwbV+qVyKadEJ+vSOvkJ;@zu+_`fH!-o&Yix)50 z)#+e*zH;RXf`fy34}l^exw*M;bacey$B!{?+&Fe|VW@(F0*o0m2L1Z=!=p!!_-y~7 z{y1|wA6pi$#%~AH5ilqaZgnP_kiejYR}~c%v3{+MHUS?zcn~vZ&g3)h-@lK5fB$snmMUAh!WNl6l5@|@A5M@vbn)v_eqL@+GeWZ1A_oI%OG ziP_4^N__^^Xs~+qYOGwj5>8G|c>44yE92qefg3k&um=cNqP3o$o}i>egK|P?X({~t z{P>+hsX$lzF38QuLO|FkB!_;7%EFuQ_4Pw!Q4$oEDlk+dz)O}a!KO`{B*16So_z;! zb4<6$umEMeNdO_RD^{%F(nDoO#G<#iH_FP&c$)xBWx>nK3%76ImH?NOlrYo62w(X4 zqPVmKW&88+=l9#;(zibvD__BPOAPwY4n~t!2Zc)Cm6z?K=)YR0l`-&1ong8n5t8jC3ld`lAW$DrqRGqnr zD^Xjau(yJywjOo^dLp=BIaJnaqL}|a3t*9@)6&v7Y31kVbF2#HDdCXo+S%E0j2}LH zSehd+`18iOOEGw-nIF_jcBg20ZmllnOV0h=wol;Af zmzT#imF6feiDimc`b}ksYOmNwfT%W8A~}8fwDdkKEDWbko#OIEasA-I12zoR?(5gD zbEm~DPf0@ch1<+>eZ@-*-S!QfqrPI6wM{w(Oj&yK=FRV9X_9H!N*d>&He1VW+qNM- zKAyWSa!FB##X;0}CnhFxd{V6~EG%rX42~Q*5+_cafP;er115t}=SG7n0hKe6oGNmQ zasKNhSai05wocD-$RDeqwzo#3M#H)+T(}S^DJhaX3cJwI&<_JFtU}gbzka=BHL~KQ zNt0MXD)4mZnl)?K!nB9_VQL~ok|Q^#c&3_7?oEsnm>Dx>V9}yQdgF^z7MFV&Oxthb_9vM^3c)0l>IhF}{Qw&I{&yD2BuMdiWtD`Jk{LFK)lDf=X4sV0His;kVRKmBlrm+8O=)d&$dVa0ht*9fQ)bwd g);5Q%{~g1B13PLcn0Z literal 0 HcmV?d00001 diff --git a/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/64.png b/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/64.png new file mode 100644 index 0000000000000000000000000000000000000000..6be1a6e190a5ccd1f7c5f3ce9d4d9b5885e66ab4 GIT binary patch literal 2153 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 literal 0 HcmV?d00001 diff --git a/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/76.png b/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/76.png new file mode 100644 index 0000000000000000000000000000000000000000..ae8413dab2f413a224a325a6d9fb46d83d2537ce GIT binary patch literal 2637 zcmbW3do&Y_8^`CaMcNp-y()4qljYW!Tt}>7mXM7ZDas;qA0e4aa&N4p+$zZ;GMZc~ z&1G&icXKHtLd5&>^Zxn!?{|LBInVR`>wBK(obP$g`J|#zc9K8^AOHZ6v`1RI?5X3w zEiSq@J93?M_Cz4m#m*8?$yWLf00718t%&frx2flCL;7Qx4_o~k4`W>L#+%3NthOI!(LPhC=K%@5e+7NkE$Mh-KA#0ZP@ zYjdN&kk>})f3Eb9zscvT&nY|^*?1rDr|@UY9EBb0!4Gdx-nveUw-E}ZWsCQ-`Xd7I zR3;26>6jhw%ly5k8S%b#*gVk^q=mkhj-!yP+T%l&kdg!~Fj`^=$YIIs)4X*hdCw#) z(^B&R2DK5SPI~w#?yJmlTd((lSribf#a~d$3J0@ zyj&Oa=j4Z$mQi^x5T}8BO(0^VjwA~Envo`_=gTfIF{bRqWX?oJM-zIV*dU#pAd)2M~#=sKJ4O)B~={y}i9<6%}A054ma( zY5(ZHx6QM~@%OmagT5{<;Jv$#(X-d3-Mi^#l8CPEZG{C&gW%Xk1@y471cW$)+}W08 zZqR#7R*`POjMPIkv2_($>#UZE3VYL*aN)*!Mn>mK3RuV!QNKnOK6EtUz6D zt*oM95UZN_x%Hn541b?FcHuqN2`>w4KefxaAw2hC7=LFP*Yja2&F75S^3T$N`OP%? z<|x8IpEPByWF9koiI&vd3_W-5!du269!pawv-ouM?;t;ae}x%y%8rtd*n!sdg&~`i zXOEOj!;p?&PF)$qFMg{LOv3nJFj@1~pL34enAF$TTV~82*xcSuJDHf6s848@;Ey$O z1%^lawk_NwUBEeq5xZByf~2XpvCYfRE80HK>D>=8mK?Q}YAxg*tBQ)GMs>v*`L>FW zG)50;GF(eh#*x3C7FpMS}iViEQt1VM)X&H3-3GHbcsJy&< z9)e-)g(KOH{e?)6kl_r2%atG@o7ammTaspF%K zBcg_}TVazL{QF%rFc@4#=r|yT$Fz24sI~z$Lt!_0jnW#ZL(d=T&W+TE9x@Fpb5#Uu7Kj3yuSC(%c#1{AN z#zKy>y4ZbLwMLY7SN71pZ77B4%0ACX`IvE^^)&F2S+wkQN4lKWO<^l>3`9(Dtqwi|alCOqd;ilPzr*HY3 zmGY>Lj?2(QZYk1vaboEfxM95AC?{7u-$VlR-Bq!ipD37FjN;6OCk(aU zRcvz!5Hsd4)r$+7+9spQGzOaH$u%zil4{F(8LK3__%(6PZkSkI@GI>ok5V zITzS##MG;(%$afw(}pw0mT>joYq|PsYo(V!TdPLpt)AJjXnfzAw6yf=8w*&0JM!>Q z=;~j0e>{ooo8!TXrJPAg(lRnh4<3LsxK%<)o#l?3XLC>7$ZHxoO3Da9>9`viEStw} z-42gA9j)jP+LW--Eyx-r2e<7{>e_-FHFP4OFE9Yp;BJ|lUyVbd6%(5)(+9MR%Q+*F zAVD8wq6REVDf2?4K6h@mkn)*Wu;TU1%F61ZdZjEgZAr#QnYbdYGA$o2#fH@8~)Eg_iP~&;dkZ zz;5>L!fnlut0Nxe>PTg>6n-rDtgl%&-|1di?tHrp{M(yYC|!JTr!>Nfh%kk&&U&Kk zweRFNnUH3%DHFW*hsq_N`uh5;Q}WC1$s5=Pm3(n9c*QJuB5W^mPvI1>;PWhZyj5#VxhO0K7odGz-0;1;=ZzpeS* ztdx4wv3#hH;Pva*@3;yn!0tXO1+nE6S=skKO{&K(?P0=b9MpcanwYkHD$--6a$4E4 zb~!yooL0kPv1(0*q?N&^k(7(V4u(v^3S6bq4{s-$u0&oBT literal 0 HcmV?d00001 diff --git a/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/80.png b/Example/Example/Resources/Assets.xcassets/AppIcon.appiconset/80.png new file mode 100644 index 0000000000000000000000000000000000000000..8361fdd22aaeb7c1ad93edf480e450065399eba7 GIT binary patch literal 2858 zcmb_eXEYlO7fwjjR-4*wDnwQ7StyPM?_O4Z1)QT-=)TY#^zBQ_LHHcNUimH}M zNo{HqsZ|nR-v8e@-=FWtz4zC1?tSh(_c;&R)L4&&@d_gV0AMlD*Di}m{2INBR>;$}()vO11 z*ZmYWMOqCkOlx~;-M}L->q4xW@nlH4z<^qSwD;fBb4HWcJXaqTB@5F}-bH)8LC0N# zeLaE|9m8!5?83)kyQ-xmaxSSuCvA2oRNJBZISN60KDC`tPFFQxLTj;73G_nMfVg%- zm?r_;3=+@1!Ct6T5ZBl{8bvsQCUxy$?3J>sKt#}6IE!f}>Sf!5GP){#_=K&LDXj&h z%(ITW3JBvcRhVY{?{EaH0UIOd(r9g{0LE+uwuuf_cAkz*J0iwbJI6yi#4gtL=Bx;c zr_Z&`#{Y=k+zwXjmnWZ}rzS}DcJ2vdT;4qdo92$J2KR1y9P-7DTM11=@h>UZ^;6O> ze-%MQU3|8rWewM-JZW!&wwr-sAq#_UT*Tofcb#2F(j_)wQDtQ-{B(^a)6*-89Q(*{ z86_xGkKo-E7Z-P#kI$N(gZ`5jf--BX5_qr>+Qx3J1d3LQadmf3Ju{-o3L+jK>lMnm zMK(#if~%e$?aVG8td2OFftI5TP`Of8x+8hgvcc=7!8}%kuMpzxJIZf%d)U+iU>o)D zP)#2vv4SU0Zg-tI(Jpz6avgV>@U5YT-zh)(3QA@Zx!Ka_ERW-s04n*;a9P#aN@hY? zL^K7xr|S@KI12BkC5nnVJBsa&`18AZag&4Y&d~U{va|CbMkuqS1e3}wl{)ULB(Su! z)DXO3p3w$@La&L50a-hQc+$9|DbYw0OrSa-$baLkyTSlziHpoc$4Ulxavn!m)SI(p z$O-3q-ac?|!cxJ*fL6~58eSRu-=<~tqBrcad$7&R15f)lr`|Zdp9K$bLXFFUeto7% zGEE&>y+1+l#UMJ?#)_8LCn{)!2Md&Zub7*gYj9y5dui^LDhaVxY7>G^9XuM>w~*(N zWbv0$ib+!An4W`jeOx2AK}<=;9r5VpS#aml+j>PM&o6-KdIuSP_{})L*shLp&EN0q z0EgQ@vP>^9j&qElee_};hwk}#|Y>s?dBpujt$wt>m`5q@QU%H2w zt+ct@PZm$pcy%Ll?L*Iwd~wm_nH2PSF%fIq7U+CC(C%<^s*g%`3TSvMP-?y_Dorh9 zlTY>@jcr$?sGgbHL`l6UfG>!tSh-;h?ii&&GGhbQgelKhO6M4#vyEU@*pCpI^uua@GV9m-@BL zMr%MHUcBB^*-d2P{n&ZF)EWG(P~IcewfCNEGU_jfNc2J}$$#|-kpMn1BA)lq~ja|2D+=5F!b^tKMGv#tF zXuCCKGX09bfB(L0^f}V(WdkVlM|znb0UP^V(K}TruS{hEk;cQYZ|){o=`mh{?~G6u zHz`SX8_DCA_^}8wTG^CH)=v;UZ#LAQ`@@^CX8r7Yh=$KU@t29=5NG4M_|m7tcPFKV zQ?p2WbDbTHr|u|PI%Ww_gM>kzek|0agbPs3+P>EwvX!8PRbS&nlGg4KgUEjlpSC~C zuCwn{^ZVI;oeQdLxcj^0cEp!ARx*uSP3wO6hH`(GAZ9Lrw4X&lzHWDwpFTb(wWf5s z=cTUp{=vk3m4h9=RwveIb;wLbi!AL)6<{pHF&Ad3LmUOmopd323&ygudoLDx<5Msg zB|?4~m902o(pJIn(lt+8eQ}9b8Xd4^}t_yI^13w8j}jinpM&>(VZT|6tb_7982Psb`e}2&o2w?An8g zfT6gevPhst3*M--=*1T2B>5!&JzxnX>;S3;$|NHzD-f{XU*Z)oaO&~kmnIx4NF zHrv=@;U+;7R(oyu4@cowi$k9g$SpO`_uh;#3H?TirOcw)v`mleYe^64Y#-(DSO{l0 z;GhZ$7FD&DZyuC!{8LlaYS$53PL+fK{=8cS7IZ9EAcpidtVEJ((3<1X_77pVbY(c@ z{CBCcf8c@~D2GLk%cGLBwpsO1_ zZ{WK1{q2cpVoQA}4{tx#eRs<2o`AC7Z+`<=8d#of71aFbo4D!QyP7yY5+9o?Ciro< z#!AvQzEK+@x)++)ruev}xgg=jgUl%T=yue%zORm)u;9KWk65xL>%+>yC$6px&&VUR zmspVsob>(+J+Yh6OjaSal;|>>*c*!0%p-JCydUK%sM4x?zC^ZF+3JqYV9gN;RW;;^ql=@l9@Np5n;TM5cQuKQAG=IGxUBJA#bz<(0Ko z%QQ0e!NW7pE}BRmMl|?a4+;f$e|99}a2migAtAqXpQ57inHG<~)AjU7+#DQNQ^WSs zqTqu?8WZ1>{e99>(5($$6H~ofR|-I5pD-yY00&;KWAo^03qro4`Mai9M8#gVL-T5E z+QsGL-1T?vX3{URaG^PMk6IV8dl3RwSwyBew?8Ki%#pZ_W$c_w_v82|pw)wgWPJa{ oFIfe6|IcrL|BJ!*r>)M^o$*xFd3_NuoMs{b>`5yzY zo%xW#nV_@49A;-~z|=4*Mq^^)=rA|ZcZl}{4^y z?}(Ga65>X%q;S{Gl{uKqw)kRbHzJ-9Kc-EcOC4E)Yd+vsW({I%5NyC#BkOW8$htfX z5=vUVRzC4zvz@KMghj+klq`Z1VfVio{1QqEJWI6RYdC`?m`s}d3xLy$xFf#+bMvp~ zAi*s&-?ii7;+}6@i~;Bc1k@a?NREBQx&~y%cXPvjS7dLMz795>Ii$A{xi5%~sykGU zEYRh#i@G(T?3w7s+21;|__dGNkBI%o1n@-{VW18lyRLC z=FeQ%*lR14I$qE*@G{`XbY~P82n3eYQrl&$ip!sDQ}8(vZ2A0!y>ys!@PW(<;7Cj_ zc4o+{dqCqw{y=YR@5pkQIKq*%JP6Z3+`j&UaSOa(NFWezCXF zPHyrUSpF;o*;)4$uB>y$E@Rpj3<3icwzjvseo%Wq4Gj3u=i2>eKVVptCb5l;JRlHg z5RVUi61n^--KE)=JtH%7X=4MsVDtH4<~J^!?p`mv{fJ+D-wDYTJjJ7CUG?Deh4}yC zLRJ*!Oko<2XPVE0dybk@0r=$3*u%(=JKyeF+;X}?9U0&k5NOXj+235rD=ArbXq4L< ze{J}Sh%GA?&;s<$YyY`_bhRXqQ0w*k$NOK4Jw1FPOFEmM`1a|Y8~pGSkiWOL6lJUo z+kH53TG0M(=T?o2x*vB%Se>L)y*Pai-#-|yWbk6&#fSh)b1yo*r~ZknMt^flSGd|? zEsICx*^yE;k!6$;%gaZIep4Z87@k4ZFzVsN7(Wjg=dV<$L800K;X_8x3@=% z*<>;q350Y#eLty@iG7PIhhSV=-X(6Ww~Q@kg1c=49ak0X?~avfZ~lN{F%k3YS$ zLX{AGAFL6vx!9f)x0#Ai)Ga85IcoKLjZ3S4USh;eA6>y*R5EO|%-97kcPGWDpZ>^{ zelhC0Lhucd2xzY7JVHWE@$P$fhoMKbAuyzSof#brU}q00E&PyYTBvgWV}qJbYy%i4 zq~f6$9^N`MWSTAVmZ>x8YV^VA2ufpx;0%fIEKK1N)8vttmsj~9V^f+{S$U0`1wuJU z6N*r%%mQWir@iRiDqZir*^LLEv;H=-a!Z=)?@X({k_?&3N;uu^1iG!@BBOnrRdIuT zY(jP7Ce;LM3ugsG;5g;z`Gmx*Q-EkFa-Y*3VBp;!nP zmSLYGksbt1H!>ThaE2(@lj4px2QH}xy#h|Cs;T9R0G=mApC0V4p*aLZWfhNyi`1GP z^s!WFGu!l76@G8@GNdL_$S9#%+aXg%GjwjuA)CI<}L$dVsV41- z>blsAg6`}v+F{cH(H_KmBDWQ`b^W01Ygz_0^BZrk>^Q_vJg9!T5xjoe9%RIx(6aB-QZ5bN3{@ z_SYZ1<#KIIcT2^Q!$U+K*7%z+BAel!G&5%t{#yhiz(bn!bXVEWwS>u6Rljkk zsx$I;|Mr;f#xq3*+!iq3p$C`?qmIg7QB3V6<1Md<3k#=1i4E<~ynD(t*)t2T$&Ys~ z-p}lc-{-NCs^AGkurepBhaZHqtVTYj5Ek+EOTD^-)WG}W_2#TS+kSS6Bx<>SQscuB z5i)l*CH8Qy#@4tTFFS9B_3ZlCuN`~Ps&<_3n{@Ij(lqPRQiX@P)H|E9oF`#aNh;-{ zStcsII2j4x1{kGt;R?}7e>{VEP^zBoAk^Zq_lw$w$s zm4xPmG$0Y{A+T zPaQ3@(x0zFJ#~cTCk)XRDvUX9{Td#MTAyBOdTu^tP#(3h;Akws@Yh#WNawlcMv_p5 zbc^xHSi;i<0eSR9FSjH%u3nMkTgL*3)-WHcyqI{a7&3PXo~YFEBK4`mMoNe$!Cjiv zoK&x~sTs51s4(Rsq}Y-2>eVH3XXVk^KZ21FgjG+c&`KNaFiMtP!!TPMHPLK$Qg-{} z&jU-3{l^A!;A6+Vpt$M9N1$dKkHq+F3EAQ0ImEu>4~OsR*?YEUog=n>n%^3kVJ{G+ zX{f2HYJFEENOAYemc>+fB;Z&>B!^c`a>QuMhyIxy<&|%@IMdBh)%%^qy9&6UjZ6=;v`-3*I(Zxh=z{ zRqw98eiPbrj*YY0*3oi~WpcKzCKY~^eG%lM!J4ytC=ZT>MaQ^@yHRTwQh`Kg?Ly}6 z%ARHW+xax{Uto-vuz+=Svwz49F|Fvv;vcMLheE z-PYO_R^GtCN`2kpVR>Pjg6jkp!tHLX=7#w42kDAP%a`_DQ#);EED=u@?YIr2VcT$! zQOBpUi8Gg~aI8mLUoCirZZHhJ?L)3+dC{&2`@M_`U!MkTQ$`GP#kI8}rCv!cbjQw; zLrjG37OEUCS{u2BQ1FY46_@@)K=u83=}PwRFU>H7J%C(U4 z1^=Rqph%f>jPX~FO%>9Nud>j#dN=RL0iO!(=dFLnm9Byg#bYg5V*UDoJ33Ti&B zz00^;VgDHoz5cft^y}1ppA>(Ld)wZ$r-HJQ3FQRl@Nr1>%`PDJ-R&cm4dSiJD|0&D zi7O5e*RHlR>MN-2d~l}Ry{1c}!`khXI?Xic?lRq_by*e)TlCb}TpOI2B$Q2tYsH(4 z8Gd+tIq^MTcU+Rhp|8_8?<78vQdc57=JZn=-b-cxryk8gJ1R){olZL)hF30q?C;o% u^U6mhULA~)UV`QiwtrEZ{-5&qREX`RRZ@S?g2$PpXEHaoHfk_ \ No newline at end of file diff --git a/Example/Example/Resources/Base.lproj/LaunchScreen.storyboard b/Example/Example/Resources/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/Example/Example/Resources/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Example/Resources/Info.plist b/Example/Example/Resources/Info.plist new file mode 100644 index 0000000..0c67376 --- /dev/null +++ b/Example/Example/Resources/Info.plist @@ -0,0 +1,5 @@ + + + + + diff --git a/Example/Example/SampleViewController.swift b/Example/Example/SampleViewController.swift new file mode 100644 index 0000000..b73a912 --- /dev/null +++ b/Example/Example/SampleViewController.swift @@ -0,0 +1,65 @@ + +import mParticle_Apple_SDK +import Rokt_Widget +import SwiftUI +import SafariServices +import UIKit + +class SampleViewController: UIViewController { + + private lazy var roktEmbeddedView: RoktEmbeddedView = { + let roktView = RoktEmbeddedView() + roktView.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(roktView) + NSLayoutConstraint.activate([ + roktView.topAnchor.constraint(equalTo: view.topAnchor), + roktView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + roktView.trailingAnchor.constraint(equalTo: view.trailingAnchor), + roktView.bottomAnchor.constraint(lessThanOrEqualTo: view.bottomAnchor) + ]) + return roktView + }() + + override func viewDidLoad() { + super.viewDidLoad() + self.setup() + } + + @objc func setup() { + view.backgroundColor = .white + + let attributes = [ + "email": "j.smith@example.com", + "firstname": "Jenny", + "lastname": "Smith", + "mobile": "(555)867-5309", + "postcode": "90210", + "country": "US" + ] + + MParticle + .sharedInstance() + .rokt + .selectPlacements( + "RoktEmbeddedExperience", + attributes: attributes, + placements: ["RoktEmbedded1": roktEmbeddedView], + onLoad: { + // Optional callback for when the Rokt placement loads + }, + onUnLoad: { [weak self] in + // Optional callback for when the Rokt placement unloads + self?.dismiss(animated: true) + }, + onShouldShowLoadingIndicator: { + // Optional callback to show a loading indicator + }, + onShouldHideLoadingIndicator: { + // Optional callback to hide a loading indicator + }, + onEmbeddedSizeChange: { selectedPlacement, widgetHeight in + // Optional callback to get selectedPlacement and height required by the placement every time the height of the placement changes + } + ) + } +} diff --git a/Example/Example/Shared/UIColor+extensions.swift b/Example/Example/Shared/UIColor+extensions.swift new file mode 100644 index 0000000..9d3124e --- /dev/null +++ b/Example/Example/Shared/UIColor+extensions.swift @@ -0,0 +1,11 @@ + +import UIKit + +extension UIColor { + static let appColor = UIColor(named: "AccentColor") + static let titleColor = UIColor(named: "Gray12") + static let subtitleColor = UIColor(named: "Gray7") + static let textColor = UIColor(named: "Gray9") + static let borderColor = UIColor(named: "Border") + static let errorColor = UIColor(named: "Volcano") +} diff --git a/Example/ExampleTests/ExampleTests.swift b/Example/ExampleTests/ExampleTests.swift new file mode 100644 index 0000000..91e2a37 --- /dev/null +++ b/Example/ExampleTests/ExampleTests.swift @@ -0,0 +1,17 @@ +// +// ExampleTests.swift +// ExampleTests +// +// Created by Wei Yew Teoh on 14/4/2025. +// + +import Testing +@testable import Example + +struct ExampleTests { + + @Test func example() async throws { + // Write your test here and use APIs like `#expect(...)` to check expected conditions. + } + +} diff --git a/Example/ExampleUITests/ExampleUITests.swift b/Example/ExampleUITests/ExampleUITests.swift new file mode 100644 index 0000000..67742c9 --- /dev/null +++ b/Example/ExampleUITests/ExampleUITests.swift @@ -0,0 +1,41 @@ +// +// ExampleUITests.swift +// ExampleUITests +// +// Created by Wei Yew Teoh on 14/4/2025. +// + +import XCTest + +final class ExampleUITests: 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. + } + + @MainActor + func testExample() throws { + // UI tests must launch the application that they test. + let app = XCUIApplication() + app.launch() + + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + @MainActor + func testLaunchPerformance() throws { + // This measures how long it takes to launch your application. + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } +} diff --git a/Example/ExampleUITests/ExampleUITestsLaunchTests.swift b/Example/ExampleUITests/ExampleUITestsLaunchTests.swift new file mode 100644 index 0000000..0195bf8 --- /dev/null +++ b/Example/ExampleUITests/ExampleUITestsLaunchTests.swift @@ -0,0 +1,33 @@ +// +// ExampleUITestsLaunchTests.swift +// ExampleUITests +// +// Created by Wei Yew Teoh on 14/4/2025. +// + +import XCTest + +final class ExampleUITestsLaunchTests: XCTestCase { + + override class var runsForEachTargetApplicationUIConfiguration: Bool { + true + } + + override func setUpWithError() throws { + continueAfterFailure = false + } + + @MainActor + func testLaunch() throws { + let app = XCUIApplication() + app.launch() + + // Insert steps here to perform after app launch but before taking a screenshot, + // such as logging into a test account or navigating somewhere in the app + + let attachment = XCTAttachment(screenshot: app.screenshot()) + attachment.name = "Launch Screen" + attachment.lifetime = .keepAlways + add(attachment) + } +} diff --git a/Example/README.md b/Example/README.md new file mode 100644 index 0000000..dea79d4 --- /dev/null +++ b/Example/README.md @@ -0,0 +1,77 @@ +# Rokt Integration Example App + +This example app demonstrates how to integrate and use the mParticle Rokt kit in an iOS application. It shows how to initialize the SDK and display a Rokt embedded view in your app. + +## Features + +- Initializes the mParticle SDK with the Rokt kit +- Demonstrates how to create and display a Rokt embedded view +- Shows how to pass user attributes to personalize the Rokt experience +- Provides a simple UI to trigger the Rokt layout + +## Setup + +1. Clone this repository +2. Open `Example.xcodeproj` in Xcode +3. Set your mParticle API key and initialize the SDK in the AppDelegate within the `application:didFinishLaunchingWithOptions:` method: + ```swift + // In AppDelegate.swift + MParticle.sharedInstance().start(with: MParticleOptions(key: "YOUR_API_KEY", secret: "YOUR_API_SECRET")) + ``` +4. Run the app on a simulator or device + +## How It Works + +The example app consists of two main screens: + +1. **Home Screen (`HomeViewController`)**: + - Displays a simple UI with a button to launch the Rokt experience + - Contains basic styling and layout setup + +2. **Sample Screen (`SampleViewController`)**: + - Creates a Rokt embedded view and adds it to the view hierarchy + - Initializes the Rokt integration with user attributes + - Demonstrates how to use callbacks for various Rokt widget events (loading, unloading, size changes) + +### Code Example + +Here's the key integration code from `SampleViewController.swift`: + +```swift +MParticle + .sharedInstance() + .rokt + .selectPlacements( + "RoktEmbeddedExperience", // View name for the Rokt experience + attributes: attributes, // User attributes + placements: ["RoktEmbedded1": roktEmbeddedView], // Placement name and view + onLoad: { + // Optional callback for when the Rokt placement loads + }, + onUnLoad: { + // Optional callback for when the Rokt placement unloads + }, + onShouldShowLoadingIndicator: { + // Optional callback to show a loading indicator + }, + onShouldHideLoadingIndicator: { + // Optional callback to hide a loading indicator + }, + onEmbeddedSizeChange: { selectedPlacement, widgetHeight in + // Optional callback for placement size changes + } + ) +``` + +## Requirements + +- iOS 12.0+ +- Xcode 15.0+ +- mParticle iOS SDK +- Rokt Widget SDK + +## Notes + +- Replace the placeholder mParticle API key and secret with your actual credentials + +For more details on the mParticle Rokt integration, refer to the [documentation](https://docs.mparticle.com/integrations/rokt/event/). \ No newline at end of file diff --git a/README.md b/README.md index 152fb0d..b664399 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,15 @@ This repository contains the Rokt integration for the [mParticle Apple SDK](http 3. Reference mParticle's integration docs below to enable the integration. +### Example App + +This repository includes an Example app that demonstrates how to use the Rokt integration with mParticle. The example shows how to: +- Initialize the mParticle SDK with the Rokt kit +- Display a Rokt embedded widget within your app +- Pass user attributes to personalize the Rokt experience + +Check out the [Example](./Example) directory for more details. + ### Documentation [Rokt integration](https://docs.mparticle.com/integrations/rokt/event/) diff --git a/mParticle-Rokt/MPKitRokt.m b/mParticle-Rokt/MPKitRokt.m index efbbdb9..b493442 100644 --- a/mParticle-Rokt/MPKitRokt.m +++ b/mParticle-Rokt/MPKitRokt.m @@ -114,7 +114,7 @@ - (MPKitExecStatus *)executeWithViewName:(NSString * _Nullable)viewName onShouldHideLoadingIndicator:onShouldHideLoadingIndicator onEmbeddedSizeChange:onEmbeddedSizeChange ]; - + return [[MPKitExecStatus alloc] initWithSDKCode:[[self class] kitCode] returnCode:MPKitReturnCodeSuccess]; } From a5aa0888586a84c24cf9df5c2e5fdcdc80549e14 Mon Sep 17 00:00:00 2001 From: Wei Yew Teoh Date: Mon, 14 Apr 2025 16:50:51 +1000 Subject: [PATCH 2/4] update embedded view --- .../xcshareddata/xcschemes/Example.xcscheme | 12 --- Example/Example/HomeViewController.swift | 86 +++++++++++++++++-- Example/Example/SampleViewController.swift | 65 -------------- 3 files changed, 77 insertions(+), 86 deletions(-) delete mode 100644 Example/Example/SampleViewController.swift diff --git a/Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme b/Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme index 73cf7f2..9640d75 100644 --- a/Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme +++ b/Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme @@ -74,18 +74,6 @@ ReferencedContainer = "container:Example.xcodeproj"> - - - - - - Date: Mon, 14 Apr 2025 16:56:46 +1000 Subject: [PATCH 3/4] remove tests --- Example/Example.xcodeproj/project.pbxproj | 234 ------------------ Example/ExampleTests/ExampleTests.swift | 17 -- Example/ExampleUITests/ExampleUITests.swift | 41 --- .../ExampleUITestsLaunchTests.swift | 33 --- 4 files changed, 325 deletions(-) delete mode 100644 Example/ExampleTests/ExampleTests.swift delete mode 100644 Example/ExampleUITests/ExampleUITests.swift delete mode 100644 Example/ExampleUITests/ExampleUITestsLaunchTests.swift diff --git a/Example/Example.xcodeproj/project.pbxproj b/Example/Example.xcodeproj/project.pbxproj index 2921278..cdfcf3a 100644 --- a/Example/Example.xcodeproj/project.pbxproj +++ b/Example/Example.xcodeproj/project.pbxproj @@ -10,27 +10,8 @@ B883A4092DAC925400F41C4D /* mParticle-Rokt in Frameworks */ = {isa = PBXBuildFile; productRef = B883A4082DAC925400F41C4D /* mParticle-Rokt */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - B883A3EA2DAC923300F41C4D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = B883A3CB2DAC923100F41C4D /* Project object */; - proxyType = 1; - remoteGlobalIDString = B883A3D22DAC923100F41C4D; - remoteInfo = Example; - }; - B883A3F42DAC923300F41C4D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = B883A3CB2DAC923100F41C4D /* Project object */; - proxyType = 1; - remoteGlobalIDString = B883A3D22DAC923100F41C4D; - remoteInfo = Example; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXFileReference section */ B883A3D32DAC923100F41C4D /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; - B883A3E92DAC923300F41C4D /* ExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - B883A3F32DAC923300F41C4D /* ExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ @@ -52,16 +33,6 @@ path = Example; sourceTree = ""; }; - B883A3EC2DAC923300F41C4D /* ExampleTests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = ExampleTests; - sourceTree = ""; - }; - B883A3F62DAC923300F41C4D /* ExampleUITests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = ExampleUITests; - sourceTree = ""; - }; /* End PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFrameworksBuildPhase section */ @@ -73,20 +44,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B883A3E62DAC923300F41C4D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B883A3F02DAC923300F41C4D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -94,8 +51,6 @@ isa = PBXGroup; children = ( B883A3D52DAC923100F41C4D /* Example */, - B883A3EC2DAC923300F41C4D /* ExampleTests */, - B883A3F62DAC923300F41C4D /* ExampleUITests */, B883A3D42DAC923100F41C4D /* Products */, ); sourceTree = ""; @@ -104,8 +59,6 @@ isa = PBXGroup; children = ( B883A3D32DAC923100F41C4D /* Example.app */, - B883A3E92DAC923300F41C4D /* ExampleTests.xctest */, - B883A3F32DAC923300F41C4D /* ExampleUITests.xctest */, ); name = Products; sourceTree = ""; @@ -136,52 +89,6 @@ productReference = B883A3D32DAC923100F41C4D /* Example.app */; productType = "com.apple.product-type.application"; }; - B883A3E82DAC923300F41C4D /* ExampleTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = B883A4012DAC923300F41C4D /* Build configuration list for PBXNativeTarget "ExampleTests" */; - buildPhases = ( - B883A3E52DAC923300F41C4D /* Sources */, - B883A3E62DAC923300F41C4D /* Frameworks */, - B883A3E72DAC923300F41C4D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - B883A3EB2DAC923300F41C4D /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - B883A3EC2DAC923300F41C4D /* ExampleTests */, - ); - name = ExampleTests; - packageProductDependencies = ( - ); - productName = ExampleTests; - productReference = B883A3E92DAC923300F41C4D /* ExampleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - B883A3F22DAC923300F41C4D /* ExampleUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = B883A4042DAC923300F41C4D /* Build configuration list for PBXNativeTarget "ExampleUITests" */; - buildPhases = ( - B883A3EF2DAC923300F41C4D /* Sources */, - B883A3F02DAC923300F41C4D /* Frameworks */, - B883A3F12DAC923300F41C4D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - B883A3F52DAC923300F41C4D /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - B883A3F62DAC923300F41C4D /* ExampleUITests */, - ); - name = ExampleUITests; - packageProductDependencies = ( - ); - productName = ExampleUITests; - productReference = B883A3F32DAC923300F41C4D /* ExampleUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -195,14 +102,6 @@ B883A3D22DAC923100F41C4D = { CreatedOnToolsVersion = 16.3; }; - B883A3E82DAC923300F41C4D = { - CreatedOnToolsVersion = 16.3; - TestTargetID = B883A3D22DAC923100F41C4D; - }; - B883A3F22DAC923300F41C4D = { - CreatedOnToolsVersion = 16.3; - TestTargetID = B883A3D22DAC923100F41C4D; - }; }; }; buildConfigurationList = B883A3CE2DAC923100F41C4D /* Build configuration list for PBXProject "Example" */; @@ -223,8 +122,6 @@ projectRoot = ""; targets = ( B883A3D22DAC923100F41C4D /* Example */, - B883A3E82DAC923300F41C4D /* ExampleTests */, - B883A3F22DAC923300F41C4D /* ExampleUITests */, ); }; /* End PBXProject section */ @@ -237,20 +134,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B883A3E72DAC923300F41C4D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B883A3F12DAC923300F41C4D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -261,35 +144,8 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B883A3E52DAC923300F41C4D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B883A3EF2DAC923300F41C4D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - B883A3EB2DAC923300F41C4D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = B883A3D22DAC923100F41C4D /* Example */; - targetProxy = B883A3EA2DAC923300F41C4D /* PBXContainerItemProxy */; - }; - B883A3F52DAC923300F41C4D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = B883A3D22DAC923100F41C4D /* Example */; - targetProxy = B883A3F42DAC923300F41C4D /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin XCBuildConfiguration section */ B883A3FD2DAC923300F41C4D /* Debug */ = { isa = XCBuildConfiguration; @@ -468,78 +324,6 @@ }; name = Release; }; - B883A4022DAC923300F41C4D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = EX8W57PJ9C; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.4; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.rokt.ExampleTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Example"; - }; - name = Debug; - }; - B883A4032DAC923300F41C4D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = EX8W57PJ9C; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.4; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.rokt.ExampleTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Example"; - }; - name = Release; - }; - B883A4052DAC923300F41C4D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = EX8W57PJ9C; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.rokt.ExampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = Example; - }; - name = Debug; - }; - B883A4062DAC923300F41C4D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = EX8W57PJ9C; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.rokt.ExampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = Example; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -561,24 +345,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B883A4012DAC923300F41C4D /* Build configuration list for PBXNativeTarget "ExampleTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B883A4022DAC923300F41C4D /* Debug */, - B883A4032DAC923300F41C4D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - B883A4042DAC923300F41C4D /* Build configuration list for PBXNativeTarget "ExampleUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B883A4052DAC923300F41C4D /* Debug */, - B883A4062DAC923300F41C4D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ diff --git a/Example/ExampleTests/ExampleTests.swift b/Example/ExampleTests/ExampleTests.swift deleted file mode 100644 index 91e2a37..0000000 --- a/Example/ExampleTests/ExampleTests.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// ExampleTests.swift -// ExampleTests -// -// Created by Wei Yew Teoh on 14/4/2025. -// - -import Testing -@testable import Example - -struct ExampleTests { - - @Test func example() async throws { - // Write your test here and use APIs like `#expect(...)` to check expected conditions. - } - -} diff --git a/Example/ExampleUITests/ExampleUITests.swift b/Example/ExampleUITests/ExampleUITests.swift deleted file mode 100644 index 67742c9..0000000 --- a/Example/ExampleUITests/ExampleUITests.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// ExampleUITests.swift -// ExampleUITests -// -// Created by Wei Yew Teoh on 14/4/2025. -// - -import XCTest - -final class ExampleUITests: 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. - } - - @MainActor - func testExample() throws { - // UI tests must launch the application that they test. - let app = XCUIApplication() - app.launch() - - // Use XCTAssert and related functions to verify your tests produce the correct results. - } - - @MainActor - func testLaunchPerformance() throws { - // This measures how long it takes to launch your application. - measure(metrics: [XCTApplicationLaunchMetric()]) { - XCUIApplication().launch() - } - } -} diff --git a/Example/ExampleUITests/ExampleUITestsLaunchTests.swift b/Example/ExampleUITests/ExampleUITestsLaunchTests.swift deleted file mode 100644 index 0195bf8..0000000 --- a/Example/ExampleUITests/ExampleUITestsLaunchTests.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// ExampleUITestsLaunchTests.swift -// ExampleUITests -// -// Created by Wei Yew Teoh on 14/4/2025. -// - -import XCTest - -final class ExampleUITestsLaunchTests: XCTestCase { - - override class var runsForEachTargetApplicationUIConfiguration: Bool { - true - } - - override func setUpWithError() throws { - continueAfterFailure = false - } - - @MainActor - func testLaunch() throws { - let app = XCUIApplication() - app.launch() - - // Insert steps here to perform after app launch but before taking a screenshot, - // such as logging into a test account or navigating somewhere in the app - - let attachment = XCTAttachment(screenshot: app.screenshot()) - attachment.name = "Launch Screen" - attachment.lifetime = .keepAlways - add(attachment) - } -} From c8e9564836bacdab17eeb8c449aa8bff2d730c93 Mon Sep 17 00:00:00 2001 From: Wei Yew Teoh Date: Mon, 14 Apr 2025 16:58:50 +1000 Subject: [PATCH 4/4] update readme --- Example/README.md | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/Example/README.md b/Example/README.md index dea79d4..f058430 100644 --- a/Example/README.md +++ b/Example/README.md @@ -25,17 +25,14 @@ This example app demonstrates how to integrate and use the mParticle Rokt kit in The example app consists of two main screens: 1. **Home Screen (`HomeViewController`)**: - - Displays a simple UI with a button to launch the Rokt experience - - Contains basic styling and layout setup - -2. **Sample Screen (`SampleViewController`)**: - - Creates a Rokt embedded view and adds it to the view hierarchy - - Initializes the Rokt integration with user attributes - - Demonstrates how to use callbacks for various Rokt widget events (loading, unloading, size changes) + - Displays a simple UI with a button to launch the Rokt experience + - Creates a Rokt embedded view and adds it to the view hierarchy + - Initializes the Rokt integration with user attributes + - Demonstrates how to use callbacks for various Rokt widget events (loading, unloading, size changes) ### Code Example -Here's the key integration code from `SampleViewController.swift`: +Here's the key integration code from `HomeViewController.swift`: ```swift MParticle