From afd4f0b2ae410afec9934a2b9e3a783733bcd5bb Mon Sep 17 00:00:00 2001 From: Michael Cavallaro Date: Mon, 18 Dec 2023 14:18:33 -0700 Subject: [PATCH] Fixed survey tracking and identifying users, restructured options and public classes --- .../CommandBarIOS.xcodeproj/project.pbxproj | 52 +- .../xcshareddata/swiftpm/Package.resolved | 14 - Example/CommandBarIOS/Views/HomeView.swift | 2 +- Example/Pods/Pods.xcodeproj/project.pbxproj | 521 +++++++++--------- Package.swift | 2 +- .../CommandBarIOS/Analytics/Analytics.swift | 139 +++++ .../Events.swift} | 111 +--- .../CommandBarIOS/CommandBar/CommandBar.swift | 4 +- .../CommandBar/InternalSDK.swift | 25 +- .../CommandBarIOS/CommandBar/Options.swift | 96 ++++ Sources/CommandBarIOS/CommandBar/SDK.swift | 31 +- .../HelpHub/HelpHubViewController.swift | 4 +- .../HelpHub/HelpHubWebView.swift | 2 +- .../Nudges/NudgeWindowManager.swift | 4 +- 14 files changed, 553 insertions(+), 454 deletions(-) delete mode 100644 Example/CommandBarIOS.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 Sources/CommandBarIOS/Analytics/Analytics.swift rename Sources/CommandBarIOS/{CommandBar/Analytics.swift => Analytics/Events.swift} (53%) create mode 100644 Sources/CommandBarIOS/CommandBar/Options.swift diff --git a/Example/CommandBarIOS.xcodeproj/project.pbxproj b/Example/CommandBarIOS.xcodeproj/project.pbxproj index 47b1671..7a27a23 100644 --- a/Example/CommandBarIOS.xcodeproj/project.pbxproj +++ b/Example/CommandBarIOS.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 46; objects = { /* Begin PBXBuildFile section */ @@ -22,7 +22,6 @@ FF409B522B30995800D2A3CD /* Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF409B512B30995800D2A3CD /* Color.swift */; }; FFB6A38B2B1BC93D0036D16F /* App.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFB6A38A2B1BC93D0036D16F /* App.swift */; }; FFB6A38D2B1E27850036D16F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFB6A38C2B1E27850036D16F /* AppDelegate.swift */; }; - FFB6A3902B1F98860036D16F /* ConfettiSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = FFB6A38F2B1F98860036D16F /* ConfettiSwiftUI */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -68,7 +67,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FFB6A3902B1F98860036D16F /* ConfettiSwiftUI in Frameworks */, DA41BFB8BED6A51CE50A6D1A /* Pods_CommandBarIOS_Example.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -207,7 +205,6 @@ ); name = CommandBarIOS_Example; packageProductDependencies = ( - FFB6A38F2B1F98860036D16F /* ConfettiSwiftUI */, ); productName = CommandBarIOS; productReference = 607FACD01AFB9204008FA782 /* CommandBarIOS_Example.app */; @@ -244,10 +241,12 @@ TargetAttributes = { 607FACCF1AFB9204008FA782 = { CreatedOnToolsVersion = 6.3.1; + DevelopmentTeam = 7AFRVF8235; LastSwiftMigration = 0900; }; 607FACE41AFB9204008FA782 = { CreatedOnToolsVersion = 6.3.1; + DevelopmentTeam = 7AFRVF8235; LastSwiftMigration = 0900; TestTargetID = 607FACCF1AFB9204008FA782; }; @@ -264,7 +263,6 @@ ); mainGroup = 607FACC71AFB9204008FA782; packageReferences = ( - FFB6A38E2B1F98860036D16F /* XCRemoteSwiftPackageReference "ConfettiSwiftUI" */, ); productRefGroup = 607FACD11AFB9204008FA782 /* Products */; projectDirPath = ""; @@ -491,8 +489,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; VALIDATE_PRODUCT = YES; }; name = Release; @@ -505,10 +502,7 @@ DEVELOPMENT_TEAM = 7AFRVF8235; INFOPLIST_FILE = CommandBarIOS/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MODULE_NAME = ExampleApp; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -525,10 +519,7 @@ DEVELOPMENT_TEAM = 7AFRVF8235; INFOPLIST_FILE = CommandBarIOS/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MODULE_NAME = ExampleApp; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -552,11 +543,7 @@ ); INFOPLIST_FILE = Tests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; @@ -576,11 +563,7 @@ ); INFOPLIST_FILE = Tests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; @@ -620,25 +603,6 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - FFB6A38E2B1F98860036D16F /* XCRemoteSwiftPackageReference "ConfettiSwiftUI" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/simibac/ConfettiSwiftUI.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 1.1.0; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - FFB6A38F2B1F98860036D16F /* ConfettiSwiftUI */ = { - isa = XCSwiftPackageProductDependency; - package = FFB6A38E2B1F98860036D16F /* XCRemoteSwiftPackageReference "ConfettiSwiftUI" */; - productName = ConfettiSwiftUI; - }; -/* End XCSwiftPackageProductDependency section */ }; rootObject = 607FACC81AFB9204008FA782 /* Project object */; } diff --git a/Example/CommandBarIOS.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Example/CommandBarIOS.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index 21c5f93..0000000 --- a/Example/CommandBarIOS.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,14 +0,0 @@ -{ - "pins" : [ - { - "identity" : "confettiswiftui", - "kind" : "remoteSourceControl", - "location" : "https://github.com/simibac/ConfettiSwiftUI.git", - "state" : { - "revision" : "f45961f97bbae6fff6e2e64546fea0189425ad92", - "version" : "1.1.0" - } - } - ], - "version" : 2 -} diff --git a/Example/CommandBarIOS/Views/HomeView.swift b/Example/CommandBarIOS/Views/HomeView.swift index 0b4496b..95d0033 100644 --- a/Example/CommandBarIOS/Views/HomeView.swift +++ b/Example/CommandBarIOS/Views/HomeView.swift @@ -45,7 +45,7 @@ struct HomeView: View { .onAppear { if (ORG_ID != "") { // 2. Boot CommandBar by using the shared instance - CommandBarSDK.shared.boot(orgId: ORG_ID) + CommandBarSDK.shared.boot(ORG_ID, with: CommandBarOptions(user_id: UUID().uuidString )) } } } diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index 5faad8f..082c7da 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -7,116 +7,118 @@ objects = { /* Begin PBXBuildFile section */ - 0EEA9D74EB1C0F4363924586E74E3921 /* Analytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F78AA6E11324C035F3C1FB09D21932D /* Analytics.swift */; }; - 2558A22F47C94E0FC15DBA90E535989D /* Rules.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64E31CC77A6CDC8607AB4E1FBDC9DACE /* Rules.swift */; }; + 1476DB70E8DA67490EDFC70BCEB037D9 /* Options.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5EBDEBFBD6F726F8EBF4597C8608C66 /* Options.swift */; }; + 1F7191CF57EDFE93F59BA6BCFAE50BA1 /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D67889A306BFA0BE242BDA1423722CD /* Util.swift */; }; + 2334A2E1EEDD1DEB1A561434EDF522D4 /* Spinner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60807E3BF783150AAB83EEAE7B676384 /* Spinner.swift */; }; 271D9ACDEFF8DA9BE018220CA3EE381F /* Pods-CommandBarIOS_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 515BD9511ECA7252E62981CE3B475040 /* Pods-CommandBarIOS_Tests-dummy.m */; }; - 29E690C12E0440121F7656316CED778E /* SurveyRatingBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95431D89A687B3AE01BFC4F3B8033A84 /* SurveyRatingBlock.swift */; }; - 310BB6DDA0FFC640CAA4194117929186 /* CloseButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B6229C7A0C408120570A27093162D37 /* CloseButton.swift */; }; - 363CFF288B0710A39477A600003BCC7E /* InternalSDK.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B349C7D66536CF7E1898EED21F24803 /* InternalSDK.swift */; }; + 2DB9BF8A8C9AB30BC82165C4519AACC0 /* ContentBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD066775C7E795798DC1D2DCBBAD15E7 /* ContentBlock.swift */; }; 375A3570C873DC3BB5E444CC77533135 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; - 3FC779F3D00883EF7C678ECF7BC2961C /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD0E5DA0C889B73D5C26A14CFD6C02D4 /* Config.swift */; }; - 4270250030C10424F5743C4F6D5D9CE2 /* CommandBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EC8B65A81141F645EB7908FEE6E201F /* CommandBar.swift */; }; - 45215FB740DE6CB12F2A43CF64337E76 /* NudgeWindowManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CEBC9E66B038D4BDEF0457C5100D1A2 /* NudgeWindowManager.swift */; }; - 489C4865FD8FEF1E835ABE205BAB7E5E /* CommandBarIOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A107A2CB88EE02D3A7C29FD6B20AF41 /* CommandBarIOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52D898099DD9C7C999BD3FBA44446BBD /* Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12B0DAE275088FAAE65F1AED0F540DC7 /* Color.swift */; }; + 39CDDFBE0C1C10BD0D8D6042E9E80F5B /* SurveyRatingBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5BCD3701DEF15FE6865CA6B331F2B3 /* SurveyRatingBlock.swift */; }; + 39F9ECB7C8F1D0D291DB6854ECC34224 /* InternalSDK.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3173CDABAFD028DC489C96410149DD92 /* InternalSDK.swift */; }; + 3AD72E99FB9A44A4209AE8653A0C2924 /* CommandBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DB2BB6A3EB79EE8C0425AF20B239A3F /* CommandBar.swift */; }; + 4016542B80ED91AFE3FCB98EF548DD2B /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 779B544D8CA45922AB3279411740AC6D /* Actions.swift */; }; 5E33BB68E15225681C221A7BCE83EF73 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; - 7858489A8AE99870C47F982E1139AE03 /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = B90AB9501F6AACF424A013E505D08D33 /* Button.swift */; }; - 7C87871B1AF530BD40CFF40191C09C38 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 87343D0EEF929A8DB14EC1B063F86FE6 /* Images.xcassets */; }; - 828569FE1DBFD7405B017B5F8706AA24 /* HelpHubWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4062C79CC3ADE643DB28775FFCD13A58 /* HelpHubWebView.swift */; }; - 87A796FDCB4FF5509523673FCCA2F29C /* NudgeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 006EEE49BCB7DC3913B294717351AD07 /* NudgeView.swift */; }; - 9AA29F9FC10A356A1B5DADDF6B7331DE /* SDK.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAC5AD508189E7828E62FDAC8528B6CE /* SDK.swift */; }; - 9E5FD5EAB70C5CDD9FEFE775116D7801 /* Nudges.swift in Sources */ = {isa = PBXBuildFile; fileRef = 369830509485106AF21471517DCD739C /* Nudges.swift */; }; - BA3A3E26036B0751ED3AA401F1FFD30B /* BottomSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51F4428EC251715085EE078B44D8E3E7 /* BottomSheet.swift */; }; - BDEB8179C2E910AEF7DC3EBD3CD87616 /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8987A95212896656A03FA644E285C73D /* Actions.swift */; }; - CAF28B291579F05247B26ADDEF189F73 /* Video.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5949EC9255721E489559DFD43EB8FA2B /* Video.swift */; }; + 617FE8F789F0B5914A5992CE092A5FA3 /* ButtonGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D6B9B33E50490394761EF613B4FB2C5 /* ButtonGroup.swift */; }; + 76EBDBA8598F1EC1D2EBB5BD56EFB291 /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0907E99C01A2CE39B17BCDDD7BC2609E /* Config.swift */; }; + 7A8A04B085D0D8CF487D3A290DB86820 /* SDK.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33A6A4112E276D47CC5FB7980D382CA /* SDK.swift */; }; + 8123A31D6B12CBD5801028A2EC17A622 /* Events.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D3F3B33DBCFB99BADD0B359D97CA0A3 /* Events.swift */; }; + 8DE5C943D6C5CCA2117CF0F0DC9B0B36 /* CloseButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DFFE3FD3F497ACFA066B7822F19A462 /* CloseButton.swift */; }; + 8F8F46E301A273B8D91D77FB67B90663 /* CommandBarIOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 583F02EB2636F145BE08595A470C84D2 /* CommandBarIOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3DE18786419431EBD4C4452DC6D544E /* HelpHubWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DF3AAE9C1EC2822EB299EEDDCC79B86 /* HelpHubWebView.swift */; }; + A9C7428059FEC2846FCBD57F6634D21C /* BottomSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56F9C72F84FAA22EFCCA80A96E3F7843 /* BottomSheet.swift */; }; + AA24585A59FAF417CEBFF5FDE3A97254 /* Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55F5203E0A897505E2FC72351841BEAE /* Color.swift */; }; + AB865F316991E11BB34B14E40325AE9D /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03012A70096844B1E367B8E6F737AEE0 /* Button.swift */; }; + BDCA75ED374B8C15AEEDAA2AFC79A593 /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = E60B0515E7E71905AD2E32AC6A09A57A /* Image.swift */; }; + C2D20D6A48A4E415A28ECFAB8DCA5D31 /* Rules.swift in Sources */ = {isa = PBXBuildFile; fileRef = 765760F6145C9C21E9ECC6ED667C45CB /* Rules.swift */; }; + CA0070C6242C50069BDEE3C16BD6A8DC /* NudgeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73E2FDCECB52A12C7B0B8B4956F5CAA6 /* NudgeView.swift */; }; CB7D63194963AD3D7DCF1C50EC3A89DD /* Pods-CommandBarIOS_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E43CB0041A0E679ADCCC403A77DC49B /* Pods-CommandBarIOS_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CC23426C17360BB1849C100B437B4914 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; - CDA7BCAE089294C1A41B928C49F94C7C /* HelpHubViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D70367BF4EE0E9B321E760ED754A7021 /* HelpHubViewController.swift */; }; - CF485AFA4F6C289925875A0AAD1D5E7D /* Spinner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B21C1D7EAB3E4756229E75A4345812F /* Spinner.swift */; }; - D70E86B390E8DC47AC3C7B9949160FAE /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80A5E092FC5CA7BA7CFBC893706B9429 /* Image.swift */; }; + D65A89EEB33FB906D267E2E00B2FE7CE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; + D78417CAF277564CBE73786786360248 /* HelpHubViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8EDB9297FE6FF616EDB873D76314ED1 /* HelpHubViewController.swift */; }; + D8B36E1EF6BAD1D05FD827BE59B90B50 /* Nudges.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6549D2B34727781499A85DBEEB993454 /* Nudges.swift */; }; + D92141CF573820FD3CAA2E3946444B31 /* NudgeWindowManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5AAF8F0395DD95E0FC4F15327D74639 /* NudgeWindowManager.swift */; }; + DCDC24267D2CF22E53F28CE2411707F4 /* Video.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71FC52B9EB8CF85A3A0C1782D417D24A /* Video.swift */; }; DE8966D9DDC32BD5E1F32594D92F0B3B /* Pods-CommandBarIOS_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AFFE2B6A0D4157DAE9916DDB711EDDB5 /* Pods-CommandBarIOS_Example-dummy.m */; }; - E421629DB6F15F755EE5D3C1D6C319BA /* CommandBarIOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9544B201AE62043CC6385614054D5CFC /* CommandBarIOS-dummy.m */; }; + E461CA29B8985E46FC904C40B2020363 /* CommandBarIOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 40B4B40E5342EB16654738BF938EC588 /* CommandBarIOS-dummy.m */; }; EBD4CDE6E5BC08A713742DA9B53A5BD6 /* Pods-CommandBarIOS_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0335B849997FEDD72AD0635B88000E91 /* Pods-CommandBarIOS_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ED8698162788E934CA60C0B19E40D6A9 /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DD3225B911C8B5156F98066215B3048 /* Util.swift */; }; - FA072BBB5A2EF522EA12BE49A7480A79 /* ButtonGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 296170C385E074CF91034815EC9D6B06 /* ButtonGroup.swift */; }; - FE4DF7CF9FECA50A5E0AFF8C5918B8C8 /* ContentBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDE9C65A3FACA596D7E4EF08B6A20335 /* ContentBlock.swift */; }; + FFFCEB1D36A4A44580CF8F5AE3AC253A /* Analytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE767260FDC18E34E0DDCE0C0B75A034 /* Analytics.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 1232CA79748B9CF6BFB5A77FD2348F4F /* PBXContainerItemProxy */ = { + 077A2A22662D7EE329C53F2EDFEF2669 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = BEF9C21ABF8843AD6FC046F2A58B2B1D; - remoteInfo = "Pods-CommandBarIOS_Example"; + remoteGlobalIDString = 1A5C426E3579F3BD712FDAB630F0FBA8; + remoteInfo = CommandBarIOS; }; - BF9EC3FBB97B361D3C61688831C084D5 /* PBXContainerItemProxy */ = { + 42E8D5F3AFF14ED9F40357540F713DC4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 1A5C426E3579F3BD712FDAB630F0FBA8; - remoteInfo = CommandBarIOS; + remoteGlobalIDString = BEF9C21ABF8843AD6FC046F2A58B2B1D; + remoteInfo = "Pods-CommandBarIOS_Example"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 006EEE49BCB7DC3913B294717351AD07 /* NudgeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NudgeView.swift; sourceTree = ""; }; + 03012A70096844B1E367B8E6F737AEE0 /* Button.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Button.swift; sourceTree = ""; }; 0335B849997FEDD72AD0635B88000E91 /* Pods-CommandBarIOS_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-CommandBarIOS_Example-umbrella.h"; sourceTree = ""; }; 05463FACEB0440DF91273FE265F92F67 /* Pods-CommandBarIOS_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-CommandBarIOS_Tests.modulemap"; sourceTree = ""; }; 0560156DCF68BC126399FC40E13C8CCF /* Pods-CommandBarIOS_Example */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-CommandBarIOS_Example"; path = Pods_CommandBarIOS_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0602D83F2A5B774AF60B67B9144875A2 /* CommandBarIOS.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = CommandBarIOS.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 0A107A2CB88EE02D3A7C29FD6B20AF41 /* CommandBarIOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CommandBarIOS-umbrella.h"; sourceTree = ""; }; + 0907E99C01A2CE39B17BCDDD7BC2609E /* Config.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = ""; }; 10633049ABF6884985AD82B2E6D4B49F /* Pods-CommandBarIOS_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-CommandBarIOS_Example-frameworks.sh"; sourceTree = ""; }; - 12B0DAE275088FAAE65F1AED0F540DC7 /* Color.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Color.swift; sourceTree = ""; }; - 1B6229C7A0C408120570A27093162D37 /* CloseButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CloseButton.swift; sourceTree = ""; }; - 1CEBC9E66B038D4BDEF0457C5100D1A2 /* NudgeWindowManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NudgeWindowManager.swift; sourceTree = ""; }; 24C3F0AC5FD53EE187421A98F864CD9A /* CommandBarIOS */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = CommandBarIOS; path = CommandBarIOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 296170C385E074CF91034815EC9D6B06 /* ButtonGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ButtonGroup.swift; sourceTree = ""; }; 2BC933536484A6A526982634D8F81096 /* Pods-CommandBarIOS_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CommandBarIOS_Example-Info.plist"; sourceTree = ""; }; - 2C8E8007F3CC350015934A41AC689667 /* CommandBarIOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CommandBarIOS.debug.xcconfig; sourceTree = ""; }; - 2DD3225B911C8B5156F98066215B3048 /* Util.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Util.swift; sourceTree = ""; }; + 3173CDABAFD028DC489C96410149DD92 /* InternalSDK.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = InternalSDK.swift; sourceTree = ""; }; 34834821C4E0424E5D67E57EE20156F7 /* Pods-CommandBarIOS_Tests */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-CommandBarIOS_Tests"; path = Pods_CommandBarIOS_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 369830509485106AF21471517DCD739C /* Nudges.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Nudges.swift; sourceTree = ""; }; 3CE81AB79FEBAB0C8FC662A559E23A3E /* Pods-CommandBarIOS_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-CommandBarIOS_Tests-acknowledgements.markdown"; sourceTree = ""; }; - 3F78AA6E11324C035F3C1FB09D21932D /* Analytics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Analytics.swift; sourceTree = ""; }; - 4062C79CC3ADE643DB28775FFCD13A58 /* HelpHubWebView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HelpHubWebView.swift; sourceTree = ""; }; + 3DF3AAE9C1EC2822EB299EEDDCC79B86 /* HelpHubWebView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HelpHubWebView.swift; sourceTree = ""; }; + 40B4B40E5342EB16654738BF938EC588 /* CommandBarIOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CommandBarIOS-dummy.m"; sourceTree = ""; }; + 4D67889A306BFA0BE242BDA1423722CD /* Util.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Util.swift; sourceTree = ""; }; + 4D6B9B33E50490394761EF613B4FB2C5 /* ButtonGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ButtonGroup.swift; sourceTree = ""; }; 4DF207E3341C6E9BE8D8E7EF8A73A7C5 /* Pods-CommandBarIOS_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-CommandBarIOS_Example-acknowledgements.markdown"; sourceTree = ""; }; + 4DFFE3FD3F497ACFA066B7822F19A462 /* CloseButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CloseButton.swift; sourceTree = ""; }; 515BD9511ECA7252E62981CE3B475040 /* Pods-CommandBarIOS_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CommandBarIOS_Tests-dummy.m"; sourceTree = ""; }; - 51F4428EC251715085EE078B44D8E3E7 /* BottomSheet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BottomSheet.swift; sourceTree = ""; }; - 5949EC9255721E489559DFD43EB8FA2B /* Video.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Video.swift; sourceTree = ""; }; - 5B349C7D66536CF7E1898EED21F24803 /* InternalSDK.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = InternalSDK.swift; sourceTree = ""; }; + 55F5203E0A897505E2FC72351841BEAE /* Color.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Color.swift; sourceTree = ""; }; + 56F9C72F84FAA22EFCCA80A96E3F7843 /* BottomSheet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BottomSheet.swift; sourceTree = ""; }; + 583F02EB2636F145BE08595A470C84D2 /* CommandBarIOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CommandBarIOS-umbrella.h"; sourceTree = ""; }; 5C3927EA1AE23CAE7644367F26683AAE /* Pods-CommandBarIOS_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CommandBarIOS_Example-acknowledgements.plist"; sourceTree = ""; }; - 5EC8B65A81141F645EB7908FEE6E201F /* CommandBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CommandBar.swift; sourceTree = ""; }; - 64E31CC77A6CDC8607AB4E1FBDC9DACE /* Rules.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Rules.swift; sourceTree = ""; }; + 60807E3BF783150AAB83EEAE7B676384 /* Spinner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Spinner.swift; sourceTree = ""; }; + 6549D2B34727781499A85DBEEB993454 /* Nudges.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Nudges.swift; sourceTree = ""; }; + 6DB2BB6A3EB79EE8C0425AF20B239A3F /* CommandBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CommandBar.swift; sourceTree = ""; }; + 6E5BCD3701DEF15FE6865CA6B331F2B3 /* SurveyRatingBlock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SurveyRatingBlock.swift; sourceTree = ""; }; + 71FC52B9EB8CF85A3A0C1782D417D24A /* Video.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Video.swift; sourceTree = ""; }; 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 755F5AE531BAFEDD3D888AA9686E758D /* CommandBar.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = CommandBar.png; path = docs/img/CommandBar.png; sourceTree = ""; }; - 80A5E092FC5CA7BA7CFBC893706B9429 /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Image.swift; sourceTree = ""; }; - 836E4FEC98C15BF31168508C56BE204A /* CommandBarIOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CommandBarIOS.modulemap; sourceTree = ""; }; + 73E2FDCECB52A12C7B0B8B4956F5CAA6 /* NudgeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NudgeView.swift; sourceTree = ""; }; + 765760F6145C9C21E9ECC6ED667C45CB /* Rules.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Rules.swift; sourceTree = ""; }; + 779B544D8CA45922AB3279411740AC6D /* Actions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Actions.swift; sourceTree = ""; }; 842D42AB8A2A2ED88FF8117E26013859 /* Pods-CommandBarIOS_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CommandBarIOS_Example.debug.xcconfig"; sourceTree = ""; }; - 87343D0EEF929A8DB14EC1B063F86FE6 /* Images.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Sources/CommandBarIOS/Resources/Images.xcassets; sourceTree = ""; }; - 8987A95212896656A03FA644E285C73D /* Actions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Actions.swift; sourceTree = ""; }; 8D6010A0F46B835115A6155B19217F7F /* Pods-CommandBarIOS_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CommandBarIOS_Tests-Info.plist"; sourceTree = ""; }; - 95431D89A687B3AE01BFC4F3B8033A84 /* SurveyRatingBlock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SurveyRatingBlock.swift; sourceTree = ""; }; - 9544B201AE62043CC6385614054D5CFC /* CommandBarIOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CommandBarIOS-dummy.m"; sourceTree = ""; }; + 90610A84481FAF3ACAFBD5926368FB39 /* CommandBar.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = CommandBar.png; path = docs/img/CommandBar.png; sourceTree = ""; }; + 92D158746C522D82EE04AA9F35E094CE /* CommandBarIOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CommandBarIOS.modulemap; sourceTree = ""; }; 95CC59761A02B39CD10A5754E533418E /* Pods-CommandBarIOS_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CommandBarIOS_Tests.debug.xcconfig"; sourceTree = ""; }; - 9B21C1D7EAB3E4756229E75A4345812F /* Spinner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Spinner.swift; sourceTree = ""; }; + 9D3F3B33DBCFB99BADD0B359D97CA0A3 /* Events.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Events.swift; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 9E43CB0041A0E679ADCCC403A77DC49B /* Pods-CommandBarIOS_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-CommandBarIOS_Tests-umbrella.h"; sourceTree = ""; }; 9E4E8584E88649AAFE86983BE725CD08 /* Pods-CommandBarIOS_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CommandBarIOS_Tests-acknowledgements.plist"; sourceTree = ""; }; A1BFF639C3F37F0714D100DBBD4B2971 /* Pods-CommandBarIOS_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-CommandBarIOS_Example.modulemap"; sourceTree = ""; }; - A373FCBCFA059F6C3D77514C28BD14E9 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; - AAC5AD508189E7828E62FDAC8528B6CE /* SDK.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SDK.swift; sourceTree = ""; }; + A408E16BCAB18CD395B3539751445809 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; + A70AF0F873154ACD2FEC4FA4E521C288 /* CommandBarIOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CommandBarIOS.release.xcconfig; sourceTree = ""; }; AFFE2B6A0D4157DAE9916DDB711EDDB5 /* Pods-CommandBarIOS_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CommandBarIOS_Example-dummy.m"; sourceTree = ""; }; + B80A4E2FC20C6930C00947A7E3B3CD06 /* CommandBarIOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CommandBarIOS-Info.plist"; sourceTree = ""; }; B88F91FB460AFB11775FE964C05AB3CF /* Pods-CommandBarIOS_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CommandBarIOS_Example.release.xcconfig"; sourceTree = ""; }; - B90AB9501F6AACF424A013E505D08D33 /* Button.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Button.swift; sourceTree = ""; }; - C9EEE7EBCA220E432A4C282007BE9E0D /* CommandBarIOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CommandBarIOS.release.xcconfig; sourceTree = ""; }; - D70367BF4EE0E9B321E760ED754A7021 /* HelpHubViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HelpHubViewController.swift; sourceTree = ""; }; - D7632EB7508EA0D68CBD84DD2B852BB8 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; - DDE9C65A3FACA596D7E4EF08B6A20335 /* ContentBlock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContentBlock.swift; sourceTree = ""; }; - DEF3A91162B8325954F2B29D5884540C /* CommandBarIOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CommandBarIOS-prefix.pch"; sourceTree = ""; }; + BF3DD2F30B9E4E8075DADAEAFD6006A9 /* CommandBarIOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CommandBarIOS-prefix.pch"; sourceTree = ""; }; + C33A6A4112E276D47CC5FB7980D382CA /* SDK.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SDK.swift; sourceTree = ""; }; + C5EBDEBFBD6F726F8EBF4597C8608C66 /* Options.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Options.swift; sourceTree = ""; }; + CD066775C7E795798DC1D2DCBBAD15E7 /* ContentBlock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContentBlock.swift; sourceTree = ""; }; + CE767260FDC18E34E0DDCE0C0B75A034 /* Analytics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Analytics.swift; sourceTree = ""; }; + D1CB82D62C785A83172511B3556124DB /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; + DCA101DFC3A3C70F13B86D01500DD11E /* CommandBarIOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CommandBarIOS.debug.xcconfig; sourceTree = ""; }; + E4E4437B683BA58024D225BBD44D9270 /* CommandBarIOS.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = CommandBarIOS.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + E60B0515E7E71905AD2E32AC6A09A57A /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Image.swift; sourceTree = ""; }; + E8EDB9297FE6FF616EDB873D76314ED1 /* HelpHubViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HelpHubViewController.swift; sourceTree = ""; }; + F5AAF8F0395DD95E0FC4F15327D74639 /* NudgeWindowManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NudgeWindowManager.swift; sourceTree = ""; }; FBA3F61958993B363D52C4934D7FF3B4 /* Pods-CommandBarIOS_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CommandBarIOS_Tests.release.xcconfig"; sourceTree = ""; }; - FD0E5DA0C889B73D5C26A14CFD6C02D4 /* Config.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = ""; }; - FEBFAF8A292C68FED3FC551559F12C54 /* CommandBarIOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CommandBarIOS-Info.plist"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -128,11 +130,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 5C14F7D168DB6A329DC2B0FC7C753B03 /* Frameworks */ = { + E4F2788DA3EF28A09ADE8CA60521CE1C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CC23426C17360BB1849C100B437B4914 /* Foundation.framework in Frameworks */, + D65A89EEB33FB906D267E2E00B2FE7CE /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -147,51 +149,69 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 037E4DE1873B99C13A6C694C26F00EFF /* Nudges */ = { + isa = PBXGroup; + children = ( + 73E2FDCECB52A12C7B0B8B4956F5CAA6 /* NudgeView.swift */, + F5AAF8F0395DD95E0FC4F15327D74639 /* NudgeWindowManager.swift */, + 21BA53554CECBF0B0D395F8A188D60C0 /* Content */, + ); + name = Nudges; + path = Sources/CommandBarIOS/Nudges; + sourceTree = ""; + }; 0450770A5684A155963DEAEB78281A3C /* Development Pods */ = { isa = PBXGroup; children = ( - 07CD46F4AD748A24760C463176B39B28 /* CommandBarIOS */, + 4DFFE718A3D890A06DA23F122AEF293E /* CommandBarIOS */, ); name = "Development Pods"; sourceTree = ""; }; - 07CD46F4AD748A24760C463176B39B28 /* CommandBarIOS */ = { + 215B74F409046960CDD7F8D1C32BC5A3 /* HelpHub */ = { isa = PBXGroup; children = ( - 87343D0EEF929A8DB14EC1B063F86FE6 /* Images.xcassets */, - BD46014713C8E458FF6052D0096BDE21 /* CommandBar */, - E00BF7D518B78667665940DB7E0B1E63 /* Components */, - 730642F1262C80825A096C9116C4460F /* Helpers */, - C6A32BB345F9B1361400E732DF374072 /* HelpHub */, - FDD566C3D1A4AD2CE4ABF717400269EE /* Nudges */, - 4453F0EC5C02648F1D664B4A632C48DC /* Pod */, - F70D5B7D4B2D88C28F8F44B014ACC386 /* Support Files */, - C615D765F38EBF0DC418CBB97443CE04 /* Types */, + E8EDB9297FE6FF616EDB873D76314ED1 /* HelpHubViewController.swift */, + 3DF3AAE9C1EC2822EB299EEDDCC79B86 /* HelpHubWebView.swift */, ); - name = CommandBarIOS; - path = ../..; + name = HelpHub; + path = Sources/CommandBarIOS/HelpHub; sourceTree = ""; }; - 30FB0E68EABA289E18EB0E4FCAAC7B5C /* Buttons */ = { + 21BA53554CECBF0B0D395F8A188D60C0 /* Content */ = { isa = PBXGroup; children = ( - B90AB9501F6AACF424A013E505D08D33 /* Button.swift */, - 296170C385E074CF91034815EC9D6B06 /* ButtonGroup.swift */, - 1B6229C7A0C408120570A27093162D37 /* CloseButton.swift */, + CD066775C7E795798DC1D2DCBBAD15E7 /* ContentBlock.swift */, + 6E5BCD3701DEF15FE6865CA6B331F2B3 /* SurveyRatingBlock.swift */, ); - name = Buttons; - path = Buttons; + name = Content; + path = Content; sourceTree = ""; }; - 4453F0EC5C02648F1D664B4A632C48DC /* Pod */ = { + 4C903CA161F82BC5A9BDC1FAE5DC2859 /* Helpers */ = { isa = PBXGroup; children = ( - 755F5AE531BAFEDD3D888AA9686E758D /* CommandBar.png */, - 0602D83F2A5B774AF60B67B9144875A2 /* CommandBarIOS.podspec */, - A373FCBCFA059F6C3D77514C28BD14E9 /* LICENSE */, - D7632EB7508EA0D68CBD84DD2B852BB8 /* README.md */, + 55F5203E0A897505E2FC72351841BEAE /* Color.swift */, ); - name = Pod; + name = Helpers; + path = Sources/CommandBarIOS/Helpers; + sourceTree = ""; + }; + 4DFFE718A3D890A06DA23F122AEF293E /* CommandBarIOS */ = { + isa = PBXGroup; + children = ( + D7FF65D903FFF4FD2D80862F2558A4A0 /* Analytics */, + DBBE1E9D5FC714EA0696AF0A9EF9CC4E /* CommandBar */, + 57233A9DB7307EF381B5E3E293C8AE6C /* Components */, + 4C903CA161F82BC5A9BDC1FAE5DC2859 /* Helpers */, + 215B74F409046960CDD7F8D1C32BC5A3 /* HelpHub */, + 037E4DE1873B99C13A6C694C26F00EFF /* Nudges */, + A0651B63A56D5A8C4E66954576F59705 /* Pod */, + B3946BCD92B2DB2748C915A8222A9B40 /* Support Files */, + 5DC71E5D6B713F727450D7DD9A8D9B14 /* Types */, + ); + name = CommandBarIOS; + path = ../..; sourceTree = ""; }; 537C51C83D7B3AFF6AC3238E0C1195AF /* Pods-CommandBarIOS_Example */ = { @@ -211,6 +231,19 @@ path = "Target Support Files/Pods-CommandBarIOS_Example"; sourceTree = ""; }; + 57233A9DB7307EF381B5E3E293C8AE6C /* Components */ = { + isa = PBXGroup; + children = ( + 56F9C72F84FAA22EFCCA80A96E3F7843 /* BottomSheet.swift */, + E60B0515E7E71905AD2E32AC6A09A57A /* Image.swift */, + 60807E3BF783150AAB83EEAE7B676384 /* Spinner.swift */, + 71FC52B9EB8CF85A3A0C1782D417D24A /* Video.swift */, + E2F4B5396F41E9A3E692E2B4A586241D /* Buttons */, + ); + name = Components; + path = Sources/CommandBarIOS/Components; + sourceTree = ""; + }; 578452D2E740E91742655AC8F1636D1F /* iOS */ = { isa = PBXGroup; children = ( @@ -228,6 +261,19 @@ name = "Targets Support Files"; sourceTree = ""; }; + 5DC71E5D6B713F727450D7DD9A8D9B14 /* Types */ = { + isa = PBXGroup; + children = ( + 779B544D8CA45922AB3279411740AC6D /* Actions.swift */, + 0907E99C01A2CE39B17BCDDD7BC2609E /* Config.swift */, + 6549D2B34727781499A85DBEEB993454 /* Nudges.swift */, + 765760F6145C9C21E9ECC6ED667C45CB /* Rules.swift */, + 4D67889A306BFA0BE242BDA1423722CD /* Util.swift */, + ); + name = Types; + path = Sources/CommandBarIOS/Types; + sourceTree = ""; + }; 63B684BAB2A0BA095C0F4A63D4CB3D8C /* Pods-CommandBarIOS_Tests */ = { isa = PBXGroup; children = ( @@ -244,25 +290,6 @@ path = "Target Support Files/Pods-CommandBarIOS_Tests"; sourceTree = ""; }; - 730642F1262C80825A096C9116C4460F /* Helpers */ = { - isa = PBXGroup; - children = ( - 12B0DAE275088FAAE65F1AED0F540DC7 /* Color.swift */, - ); - name = Helpers; - path = Sources/CommandBarIOS/Helpers; - sourceTree = ""; - }; - 8B33513770B852B27B488A85B3E1D2A1 /* Content */ = { - isa = PBXGroup; - children = ( - DDE9C65A3FACA596D7E4EF08B6A20335 /* ContentBlock.swift */, - 95431D89A687B3AE01BFC4F3B8033A84 /* SurveyRatingBlock.swift */, - ); - name = Content; - path = Content; - sourceTree = ""; - }; 939D723E41CDF8FE51E6A6A8595112F1 /* Products */ = { isa = PBXGroup; children = ( @@ -273,39 +300,30 @@ name = Products; sourceTree = ""; }; - BD46014713C8E458FF6052D0096BDE21 /* CommandBar */ = { + A0651B63A56D5A8C4E66954576F59705 /* Pod */ = { isa = PBXGroup; children = ( - 3F78AA6E11324C035F3C1FB09D21932D /* Analytics.swift */, - 5EC8B65A81141F645EB7908FEE6E201F /* CommandBar.swift */, - 5B349C7D66536CF7E1898EED21F24803 /* InternalSDK.swift */, - AAC5AD508189E7828E62FDAC8528B6CE /* SDK.swift */, + 90610A84481FAF3ACAFBD5926368FB39 /* CommandBar.png */, + E4E4437B683BA58024D225BBD44D9270 /* CommandBarIOS.podspec */, + A408E16BCAB18CD395B3539751445809 /* LICENSE */, + D1CB82D62C785A83172511B3556124DB /* README.md */, ); - name = CommandBar; - path = Sources/CommandBarIOS/CommandBar; - sourceTree = ""; - }; - C615D765F38EBF0DC418CBB97443CE04 /* Types */ = { - isa = PBXGroup; - children = ( - 8987A95212896656A03FA644E285C73D /* Actions.swift */, - FD0E5DA0C889B73D5C26A14CFD6C02D4 /* Config.swift */, - 369830509485106AF21471517DCD739C /* Nudges.swift */, - 64E31CC77A6CDC8607AB4E1FBDC9DACE /* Rules.swift */, - 2DD3225B911C8B5156F98066215B3048 /* Util.swift */, - ); - name = Types; - path = Sources/CommandBarIOS/Types; + name = Pod; sourceTree = ""; }; - C6A32BB345F9B1361400E732DF374072 /* HelpHub */ = { + B3946BCD92B2DB2748C915A8222A9B40 /* Support Files */ = { isa = PBXGroup; children = ( - D70367BF4EE0E9B321E760ED754A7021 /* HelpHubViewController.swift */, - 4062C79CC3ADE643DB28775FFCD13A58 /* HelpHubWebView.swift */, + 92D158746C522D82EE04AA9F35E094CE /* CommandBarIOS.modulemap */, + 40B4B40E5342EB16654738BF938EC588 /* CommandBarIOS-dummy.m */, + B80A4E2FC20C6930C00947A7E3B3CD06 /* CommandBarIOS-Info.plist */, + BF3DD2F30B9E4E8075DADAEAFD6006A9 /* CommandBarIOS-prefix.pch */, + 583F02EB2636F145BE08595A470C84D2 /* CommandBarIOS-umbrella.h */, + DCA101DFC3A3C70F13B86D01500DD11E /* CommandBarIOS.debug.xcconfig */, + A70AF0F873154ACD2FEC4FA4E521C288 /* CommandBarIOS.release.xcconfig */, ); - name = HelpHub; - path = Sources/CommandBarIOS/HelpHub; + name = "Support Files"; + path = "Example/Pods/Target Support Files/CommandBarIOS"; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { @@ -327,69 +345,63 @@ name = Frameworks; sourceTree = ""; }; - E00BF7D518B78667665940DB7E0B1E63 /* Components */ = { + D7FF65D903FFF4FD2D80862F2558A4A0 /* Analytics */ = { isa = PBXGroup; children = ( - 51F4428EC251715085EE078B44D8E3E7 /* BottomSheet.swift */, - 80A5E092FC5CA7BA7CFBC893706B9429 /* Image.swift */, - 9B21C1D7EAB3E4756229E75A4345812F /* Spinner.swift */, - 5949EC9255721E489559DFD43EB8FA2B /* Video.swift */, - 30FB0E68EABA289E18EB0E4FCAAC7B5C /* Buttons */, + CE767260FDC18E34E0DDCE0C0B75A034 /* Analytics.swift */, + 9D3F3B33DBCFB99BADD0B359D97CA0A3 /* Events.swift */, ); - name = Components; - path = Sources/CommandBarIOS/Components; + name = Analytics; + path = Sources/CommandBarIOS/Analytics; sourceTree = ""; }; - F70D5B7D4B2D88C28F8F44B014ACC386 /* Support Files */ = { + DBBE1E9D5FC714EA0696AF0A9EF9CC4E /* CommandBar */ = { isa = PBXGroup; children = ( - 836E4FEC98C15BF31168508C56BE204A /* CommandBarIOS.modulemap */, - 9544B201AE62043CC6385614054D5CFC /* CommandBarIOS-dummy.m */, - FEBFAF8A292C68FED3FC551559F12C54 /* CommandBarIOS-Info.plist */, - DEF3A91162B8325954F2B29D5884540C /* CommandBarIOS-prefix.pch */, - 0A107A2CB88EE02D3A7C29FD6B20AF41 /* CommandBarIOS-umbrella.h */, - 2C8E8007F3CC350015934A41AC689667 /* CommandBarIOS.debug.xcconfig */, - C9EEE7EBCA220E432A4C282007BE9E0D /* CommandBarIOS.release.xcconfig */, + 6DB2BB6A3EB79EE8C0425AF20B239A3F /* CommandBar.swift */, + 3173CDABAFD028DC489C96410149DD92 /* InternalSDK.swift */, + C5EBDEBFBD6F726F8EBF4597C8608C66 /* Options.swift */, + C33A6A4112E276D47CC5FB7980D382CA /* SDK.swift */, ); - name = "Support Files"; - path = "Example/Pods/Target Support Files/CommandBarIOS"; + name = CommandBar; + path = Sources/CommandBarIOS/CommandBar; sourceTree = ""; }; - FDD566C3D1A4AD2CE4ABF717400269EE /* Nudges */ = { + E2F4B5396F41E9A3E692E2B4A586241D /* Buttons */ = { isa = PBXGroup; children = ( - 006EEE49BCB7DC3913B294717351AD07 /* NudgeView.swift */, - 1CEBC9E66B038D4BDEF0457C5100D1A2 /* NudgeWindowManager.swift */, - 8B33513770B852B27B488A85B3E1D2A1 /* Content */, + 03012A70096844B1E367B8E6F737AEE0 /* Button.swift */, + 4D6B9B33E50490394761EF613B4FB2C5 /* ButtonGroup.swift */, + 4DFFE3FD3F497ACFA066B7822F19A462 /* CloseButton.swift */, ); - name = Nudges; - path = Sources/CommandBarIOS/Nudges; + name = Buttons; + path = Buttons; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 3A1D4B0E6730DB63E8FA8AF3A54A73C8 /* Headers */ = { + 1F9D71747368A6CBCCEAE4847185E601 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - EBD4CDE6E5BC08A713742DA9B53A5BD6 /* Pods-CommandBarIOS_Example-umbrella.h in Headers */, + 8F8F46E301A273B8D91D77FB67B90663 /* CommandBarIOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3EE0616E46C3740C074C3D92A9CC201C /* Headers */ = { + 3A1D4B0E6730DB63E8FA8AF3A54A73C8 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - CB7D63194963AD3D7DCF1C50EC3A89DD /* Pods-CommandBarIOS_Tests-umbrella.h in Headers */, + EBD4CDE6E5BC08A713742DA9B53A5BD6 /* Pods-CommandBarIOS_Example-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 51DBBAE9ED6598B5F6FC83990E27992A /* Headers */ = { + 3EE0616E46C3740C074C3D92A9CC201C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 489C4865FD8FEF1E835ABE205BAB7E5E /* CommandBarIOS-umbrella.h in Headers */, + CB7D63194963AD3D7DCF1C50EC3A89DD /* Pods-CommandBarIOS_Tests-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -398,12 +410,12 @@ /* Begin PBXNativeTarget section */ 1A5C426E3579F3BD712FDAB630F0FBA8 /* CommandBarIOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 8D9C39CCAB87D9C176BE9A04CF46CAB2 /* Build configuration list for PBXNativeTarget "CommandBarIOS" */; + buildConfigurationList = 8C5B9841815BFDC0BA3F7328313D1579 /* Build configuration list for PBXNativeTarget "CommandBarIOS" */; buildPhases = ( - 51DBBAE9ED6598B5F6FC83990E27992A /* Headers */, - 2160C1401EBBBDEB40C5422D06EE96A6 /* Sources */, - 5C14F7D168DB6A329DC2B0FC7C753B03 /* Frameworks */, - C44028E4F255A7F944327BD3AAEF0105 /* Resources */, + 1F9D71747368A6CBCCEAE4847185E601 /* Headers */, + 573769A31DD58F421C3E073BDBEECBC4 /* Sources */, + E4F2788DA3EF28A09ADE8CA60521CE1C /* Frameworks */, + 7CB7487CD1FA3DC1F56F1BD23A42AB87 /* Resources */, ); buildRules = ( ); @@ -426,7 +438,7 @@ buildRules = ( ); dependencies = ( - 54EEBABA1D1D31E80F87CEAD2CE2C014 /* PBXTargetDependency */, + BB42077FD34445F543352A35FB9C6DDC /* PBXTargetDependency */, ); name = "Pods-CommandBarIOS_Tests"; productName = Pods_CommandBarIOS_Tests; @@ -445,7 +457,7 @@ buildRules = ( ); dependencies = ( - 925297806CE80D4B9A9EE1893347AD23 /* PBXTargetDependency */, + 8B47AFA9452E78F57FBE514C323BA95D /* PBXTargetDependency */, ); name = "Pods-CommandBarIOS_Example"; productName = Pods_CommandBarIOS_Example; @@ -489,52 +501,53 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - BED0F03111C88D077F5D74D3509870F4 /* Resources */ = { + 7CB7487CD1FA3DC1F56F1BD23A42AB87 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - C44028E4F255A7F944327BD3AAEF0105 /* Resources */ = { + BED0F03111C88D077F5D74D3509870F4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7C87871B1AF530BD40CFF40191C09C38 /* Images.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 2160C1401EBBBDEB40C5422D06EE96A6 /* Sources */ = { + 573769A31DD58F421C3E073BDBEECBC4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BDEB8179C2E910AEF7DC3EBD3CD87616 /* Actions.swift in Sources */, - 0EEA9D74EB1C0F4363924586E74E3921 /* Analytics.swift in Sources */, - BA3A3E26036B0751ED3AA401F1FFD30B /* BottomSheet.swift in Sources */, - 7858489A8AE99870C47F982E1139AE03 /* Button.swift in Sources */, - FA072BBB5A2EF522EA12BE49A7480A79 /* ButtonGroup.swift in Sources */, - 310BB6DDA0FFC640CAA4194117929186 /* CloseButton.swift in Sources */, - 52D898099DD9C7C999BD3FBA44446BBD /* Color.swift in Sources */, - 4270250030C10424F5743C4F6D5D9CE2 /* CommandBar.swift in Sources */, - E421629DB6F15F755EE5D3C1D6C319BA /* CommandBarIOS-dummy.m in Sources */, - 3FC779F3D00883EF7C678ECF7BC2961C /* Config.swift in Sources */, - FE4DF7CF9FECA50A5E0AFF8C5918B8C8 /* ContentBlock.swift in Sources */, - CDA7BCAE089294C1A41B928C49F94C7C /* HelpHubViewController.swift in Sources */, - 828569FE1DBFD7405B017B5F8706AA24 /* HelpHubWebView.swift in Sources */, - D70E86B390E8DC47AC3C7B9949160FAE /* Image.swift in Sources */, - 363CFF288B0710A39477A600003BCC7E /* InternalSDK.swift in Sources */, - 9E5FD5EAB70C5CDD9FEFE775116D7801 /* Nudges.swift in Sources */, - 87A796FDCB4FF5509523673FCCA2F29C /* NudgeView.swift in Sources */, - 45215FB740DE6CB12F2A43CF64337E76 /* NudgeWindowManager.swift in Sources */, - 2558A22F47C94E0FC15DBA90E535989D /* Rules.swift in Sources */, - 9AA29F9FC10A356A1B5DADDF6B7331DE /* SDK.swift in Sources */, - CF485AFA4F6C289925875A0AAD1D5E7D /* Spinner.swift in Sources */, - 29E690C12E0440121F7656316CED778E /* SurveyRatingBlock.swift in Sources */, - ED8698162788E934CA60C0B19E40D6A9 /* Util.swift in Sources */, - CAF28B291579F05247B26ADDEF189F73 /* Video.swift in Sources */, + 4016542B80ED91AFE3FCB98EF548DD2B /* Actions.swift in Sources */, + FFFCEB1D36A4A44580CF8F5AE3AC253A /* Analytics.swift in Sources */, + A9C7428059FEC2846FCBD57F6634D21C /* BottomSheet.swift in Sources */, + AB865F316991E11BB34B14E40325AE9D /* Button.swift in Sources */, + 617FE8F789F0B5914A5992CE092A5FA3 /* ButtonGroup.swift in Sources */, + 8DE5C943D6C5CCA2117CF0F0DC9B0B36 /* CloseButton.swift in Sources */, + AA24585A59FAF417CEBFF5FDE3A97254 /* Color.swift in Sources */, + 3AD72E99FB9A44A4209AE8653A0C2924 /* CommandBar.swift in Sources */, + E461CA29B8985E46FC904C40B2020363 /* CommandBarIOS-dummy.m in Sources */, + 76EBDBA8598F1EC1D2EBB5BD56EFB291 /* Config.swift in Sources */, + 2DB9BF8A8C9AB30BC82165C4519AACC0 /* ContentBlock.swift in Sources */, + 8123A31D6B12CBD5801028A2EC17A622 /* Events.swift in Sources */, + D78417CAF277564CBE73786786360248 /* HelpHubViewController.swift in Sources */, + A3DE18786419431EBD4C4452DC6D544E /* HelpHubWebView.swift in Sources */, + BDCA75ED374B8C15AEEDAA2AFC79A593 /* Image.swift in Sources */, + 39F9ECB7C8F1D0D291DB6854ECC34224 /* InternalSDK.swift in Sources */, + D8B36E1EF6BAD1D05FD827BE59B90B50 /* Nudges.swift in Sources */, + CA0070C6242C50069BDEE3C16BD6A8DC /* NudgeView.swift in Sources */, + D92141CF573820FD3CAA2E3946444B31 /* NudgeWindowManager.swift in Sources */, + 1476DB70E8DA67490EDFC70BCEB037D9 /* Options.swift in Sources */, + C2D20D6A48A4E415A28ECFAB8DCA5D31 /* Rules.swift in Sources */, + 7A8A04B085D0D8CF487D3A290DB86820 /* SDK.swift in Sources */, + 2334A2E1EEDD1DEB1A561434EDF522D4 /* Spinner.swift in Sources */, + 39CDDFBE0C1C10BD0D8D6042E9E80F5B /* SurveyRatingBlock.swift in Sources */, + 1F7191CF57EDFE93F59BA6BCFAE50BA1 /* Util.swift in Sources */, + DCDC24267D2CF22E53F28CE2411707F4 /* Video.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -557,57 +570,21 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 54EEBABA1D1D31E80F87CEAD2CE2C014 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Pods-CommandBarIOS_Example"; - target = BEF9C21ABF8843AD6FC046F2A58B2B1D /* Pods-CommandBarIOS_Example */; - targetProxy = 1232CA79748B9CF6BFB5A77FD2348F4F /* PBXContainerItemProxy */; - }; - 925297806CE80D4B9A9EE1893347AD23 /* PBXTargetDependency */ = { + 8B47AFA9452E78F57FBE514C323BA95D /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = CommandBarIOS; target = 1A5C426E3579F3BD712FDAB630F0FBA8 /* CommandBarIOS */; - targetProxy = BF9EC3FBB97B361D3C61688831C084D5 /* PBXContainerItemProxy */; + targetProxy = 077A2A22662D7EE329C53F2EDFEF2669 /* PBXContainerItemProxy */; + }; + BB42077FD34445F543352A35FB9C6DDC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Pods-CommandBarIOS_Example"; + target = BEF9C21ABF8843AD6FC046F2A58B2B1D /* Pods-CommandBarIOS_Example */; + targetProxy = 42E8D5F3AFF14ED9F40357540F713DC4 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 130859B9EA14964D816C0549DA291179 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C9EEE7EBCA220E432A4C282007BE9E0D /* CommandBarIOS.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/CommandBarIOS/CommandBarIOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/CommandBarIOS/CommandBarIOS-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/CommandBarIOS/CommandBarIOS.modulemap"; - PRODUCT_MODULE_NAME = CommandBarIOS; - PRODUCT_NAME = CommandBarIOS; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; 41C22AA2B6FF5FA2834A81E3AD216439 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = FBA3F61958993B363D52C4934D7FF3B4 /* Pods-CommandBarIOS_Tests.release.xcconfig */; @@ -787,6 +764,41 @@ }; name = Debug; }; + 8F7C035CE43AD59B3092FD03C151BB7A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DCA101DFC3A3C70F13B86D01500DD11E /* CommandBarIOS.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/CommandBarIOS/CommandBarIOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/CommandBarIOS/CommandBarIOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/CommandBarIOS/CommandBarIOS.modulemap"; + PRODUCT_MODULE_NAME = CommandBarIOS; + PRODUCT_NAME = CommandBarIOS; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 9E406C6AAF85E580207CD97B0044DEAB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -849,9 +861,9 @@ }; name = Release; }; - B515982921341965FCB5123AC6398A6A /* Debug */ = { + DF2F6763DB9C0605E1200A82B20F5BC7 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2C8E8007F3CC350015934A41AC689667 /* CommandBarIOS.debug.xcconfig */; + baseConfigurationReference = A70AF0F873154ACD2FEC4FA4E521C288 /* CommandBarIOS.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -879,10 +891,11 @@ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; FF39763F025F2AE03351DC56A0C387BE /* Debug */ = { isa = XCBuildConfiguration; @@ -951,11 +964,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 8D9C39CCAB87D9C176BE9A04CF46CAB2 /* Build configuration list for PBXNativeTarget "CommandBarIOS" */ = { + 8C5B9841815BFDC0BA3F7328313D1579 /* Build configuration list for PBXNativeTarget "CommandBarIOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - B515982921341965FCB5123AC6398A6A /* Debug */, - 130859B9EA14964D816C0549DA291179 /* Release */, + 8F7C035CE43AD59B3092FD03C151BB7A /* Debug */, + DF2F6763DB9C0605E1200A82B20F5BC7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Package.swift b/Package.swift index 4c80ecf..94c98d3 100644 --- a/Package.swift +++ b/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "CommandBarIOS", - platforms: [.iOS("15.0")], + platforms: [.iOS("13.0")], products: [ // Products define the executables and libraries a package produces, making them visible to other packages. .library( diff --git a/Sources/CommandBarIOS/Analytics/Analytics.swift b/Sources/CommandBarIOS/Analytics/Analytics.swift new file mode 100644 index 0000000..8cf37c9 --- /dev/null +++ b/Sources/CommandBarIOS/Analytics/Analytics.swift @@ -0,0 +1,139 @@ +import Foundation + +class Analytics { + static let shared = Analytics() + + private var orgId: String? = nil + private var options: CommandBarInternalOptions? = nil + private var userId: String? = nil + private var session: String? = nil + private var serverQueue: [EventPayload] = [] + + func setup(orgId: String, with options: CommandBarInternalOptions? = nil) { + self.orgId = orgId + self.options = options + self.session = genSession() + + Analytics.shared.identify() + } + + func identify() { + guard let organization = Analytics.shared.orgId else { return } + + let properties = UserProperties(id: self.options?.user_id) + let body = AnalyticsIdentifyBody(organization_id: organization, distinct_id: self.options?.user_id, properties: properties) + guard let bodyData = try? JSONEncoder().encode(body) else { + print("CommandBar Analytics: Error building identity request") + return + } + + + guard let url = self.options?.getAPIUrl(for: .analytics, with: "/t/identify/") else { + print("CommandBar Analytics: Error building identity request") + return + } + + var request = URLRequest(url: url) + + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + request.httpBody = bodyData + + let task = URLSession.shared.dataTask(with: request) { (data, response, error) in + if let error = error { + print("CommandBar Analytics: Error identifying user") + print(error) + } + } + + task.resume() + } + + func log(eventName: EventName, data: EventAttributes) { + switch(eventName) { + case .surveyResponse: + self.addEventToServerQueue(type: .log, name: eventName, attrs: data) + // Always flush until full analytics is built out + self.flushServerQueue() + } + } + + // Generated in the same way we do on the web + private func genSession() -> String { + let len = 12 + let factor = pow(10.0, Double(len)) + let randomValue = Double.random(in: 1...9) + let result = floor(factor + randomValue * factor) + return String(Int(result)) + } + + + // Just handles one event in the queue but it will support multiple as soon as that is setup (if we want it to be) + private func flushServerQueue() { + guard let organization = Analytics.shared.orgId else { return } + + + let events = self.serverQueue + + let body = AnalyticsTrackBody(events: events, organization: organization, id: Analytics.shared.userId) + + guard let bodyData = try? JSONEncoder().encode(body) else { + print("Error decoding body") + return + } + + guard let url = self.options?.getAPIUrl(for: .analytics, with: "/t/") else { + print("Error forming URL") + return + } + var request = URLRequest(url: url) + + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + request.httpBody = bodyData + + let task = URLSession.shared.dataTask(with: request) { (data, response, error) in + if let error = error { + print(error) + } + } + + task.resume() + } + + + private func enrichEvent(type: AnalyticsType, name: EventName, attrs: EventAttributes) -> EventPayload { + let context = EventPayload.Context(page: nil, userAgent: nil, groupId: nil, cbSource: nil) + let payload = EventPayload( + context: context, + userType: .endUser, + type: type, + attrs: attrs, + name: name, + id: Analytics.shared.userId, + session: session, + search: nil, + reportToSegment: false, + fingerprint: nil, + clientEventTimestamp: Date().getCurrentTimeStamp(), + clientFlushedTimestamp: Date().getCurrentTimeStamp() + ) + + return payload + } + + private func addEventToServerQueue(type: AnalyticsType, name: EventName, attrs: EventAttributes) { + let enrichedEvent = self.enrichEvent(type: type, name: name, attrs: attrs); + self.serverQueue.append(enrichedEvent); + } + +} + +extension Date { + func getCurrentTimeStamp() -> String { + let formatter = DateFormatter() + formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSSSZ" + formatter.timeZone = TimeZone(abbreviation: "UTC") + return formatter.string(from: self) + } +} diff --git a/Sources/CommandBarIOS/CommandBar/Analytics.swift b/Sources/CommandBarIOS/Analytics/Events.swift similarity index 53% rename from Sources/CommandBarIOS/CommandBar/Analytics.swift rename to Sources/CommandBarIOS/Analytics/Events.swift index 816c3a4..b6d072b 100644 --- a/Sources/CommandBarIOS/CommandBar/Analytics.swift +++ b/Sources/CommandBarIOS/Analytics/Events.swift @@ -1,4 +1,4 @@ -import Foundation +// TODO: Organize better struct NumberResponseEvent: Codable { var type: String @@ -6,7 +6,7 @@ struct NumberResponseEvent: Codable { let emoji: String? let max: Int - init(value: Int, max: Int, emoji: String?) { + init(value: Int, max: Int, emoji: String? = nil) { type = "number" self.value = value self.emoji = emoji @@ -168,107 +168,12 @@ struct AnalyticsTrackBody: Codable { } -class Analytics { - static let shared = Analytics() - - private var orgId: String? = nil - private var userId: String? = nil - private var session: String? = nil - - func setup(orgId: String, userId: String? = nil) { - self.orgId = orgId - self.userId = userId - self.session = genSession() - } - - func getOrgId() -> String? { - return orgId - } - - private func genSession() -> String { - let len = 12 - let factor = pow(10.0, Double(len)) - let randomValue = Double.random(in: 1...9) - let result = floor(factor + randomValue * factor) - return String(Int(result)) - } - - private var serverQueue: [EventPayload] = [] - - func log(eventName: EventName, data: EventAttributes) { - switch(eventName) { - case .surveyResponse: - self.addEventToServerQueue(type: .log, name: eventName, attrs: data) - // Always flush until full analytics is built out - self.flushServerQueue() - } - } - - func flushServerQueue() { - guard let organization = Analytics.shared.orgId else { return } - - - let events = self.serverQueue - - let body = AnalyticsTrackBody(events: events, organization: organization, id: Analytics.shared.userId) - - guard let bodyData = try? JSONEncoder().encode(body) else { - print("Error decoding body") - return - } - - guard let url = URL(string: "https://t.commandbar.com/t/") else { - print("Error forming URL") - return - } - var request = URLRequest(url: url) - - request.httpMethod = "POST" - request.setValue("application/json", forHTTPHeaderField: "Content-Type") - request.httpBody = bodyData - - let task = URLSession.shared.dataTask(with: request) { (data, response, error) in - if let error = error { - print(error) - } - } - - task.resume() - } - - - private func enrichEvent(type: AnalyticsType, name: EventName, attrs: EventAttributes) -> EventPayload { - let context = EventPayload.Context(page: nil, userAgent: nil, groupId: nil, cbSource: nil) - let payload = EventPayload( - context: context, - userType: .endUser, - type: type, - attrs: attrs, - name: name, - id: Analytics.shared.userId, - session: session, - search: nil, - reportToSegment: false, - fingerprint: nil, - clientEventTimestamp: Date().getCurrentTimeStamp(), - clientFlushedTimestamp: Date().getCurrentTimeStamp() - ) - - return payload - } - - private func addEventToServerQueue(type: AnalyticsType, name: EventName, attrs: EventAttributes) { - let enrichedEvent = self.enrichEvent(type: type, name: name, attrs: attrs); - self.serverQueue.append(enrichedEvent); - } - +struct UserProperties: Codable { + var id: String? = nil; } -extension Date { - func getCurrentTimeStamp() -> String { - let formatter = DateFormatter() - formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSSS" - formatter.timeZone = TimeZone(abbreviation: "UTC") - return formatter.string(from: self) - } +struct AnalyticsIdentifyBody:Codable { + var organization_id: String + var distinct_id: String? + var properties: UserProperties } diff --git a/Sources/CommandBarIOS/CommandBar/CommandBar.swift b/Sources/CommandBarIOS/CommandBar/CommandBar.swift index 596f157..0b33352 100644 --- a/Sources/CommandBarIOS/CommandBar/CommandBar.swift +++ b/Sources/CommandBarIOS/CommandBar/CommandBar.swift @@ -1,12 +1,12 @@ import WebKit class CommandBar { - private var options: CommandBarOptions; + private var options: CommandBarOptions_Deprecated; weak var delegate: HelpHubWebViewDelegate? // Add this property private weak var presentedNavigationController: UINavigationController? // Add this property - init(options: CommandBarOptions) { + init(options: CommandBarOptions_Deprecated) { self.options = options } diff --git a/Sources/CommandBarIOS/CommandBar/InternalSDK.swift b/Sources/CommandBarIOS/CommandBar/InternalSDK.swift index 0eca909..cd1cb4a 100644 --- a/Sources/CommandBarIOS/CommandBar/InternalSDK.swift +++ b/Sources/CommandBarIOS/CommandBar/InternalSDK.swift @@ -8,24 +8,31 @@ protocol CommandBarInternalSDKDelegate: AnyObject { // MARK: Internal SDK final class CommandBarInternalSDK : CommandBarInternalSDKDelegate { + internal final var LAUNCH_CODE: LaunchCode = .prod + var orgId: String? = nil + var options: CommandBarInternalOptions = CommandBarInternalOptions(launch_code: .prod) var config: Config? = nil + // Update when you need to test localhost + weak var delegate: CommandBarInternalSDKDelegate? static let shared = CommandBarInternalSDK() var isReady: Bool = false - func boot(orgId: String) { + func boot(orgId: String, with options: CommandBarOptions? = nil) { self.orgId = orgId + self.options = options != nil ? CommandBarInternalOptions(from: options!, with: LAUNCH_CODE) : self.options - Analytics.shared.setup(orgId: orgId, userId: nil) - - let baseURL = "https://api.commandbar.com" - let url = URL(string: "\(baseURL)/organizations/\(self.orgId!)/config/")! + guard let url = self.options.getAPIUrl(with: "/organizations/\(self.orgId!)/config/") else { + print("Warning: Could not boot CommandBar") + return + } let task = URLSession.shared.dataTask(with: url) {(data, response, error) in guard let data = data else { + print("Warning: Could not boot CommandBar") CommandBarInternalSDK.shared.didBootFail(withError: error) return } @@ -34,12 +41,16 @@ final class CommandBarInternalSDK : CommandBarInternalSDKDelegate { let decoder = JSONDecoder() let config = try decoder.decode(Config.self, from: data) + // Once we've decoded the condig, setup Analytics + Analytics.shared.setup(orgId: orgId, with: self.options) + DispatchQueue.main.async { CommandBarInternalSDK.shared.isReady = true CommandBarInternalSDK.shared.didBootComplete(withConfig: config) } } catch let error { + print("Warning: Could not boot CommandBar") DispatchQueue.main.async { CommandBarInternalSDK.shared.didBootFail(withError: error) } @@ -70,9 +81,6 @@ final class CommandBarInternalSDK : CommandBarInternalSDKDelegate { } } - func openHelpHub() { - } - public func trackEvent(event: String) { CommandBarInternalSDK.shared.triggerNudges(withEvent: event) @@ -81,7 +89,6 @@ final class CommandBarInternalSDK : CommandBarInternalSDKDelegate { func didBootComplete(withConfig config: Config) { CommandBarInternalSDK.shared.config = config - // TODO: Triggers CommandBarInternalSDK.shared.triggerNudges() CommandBarInternalSDK.shared.delegate?.didBootComplete(withConfig: config) diff --git a/Sources/CommandBarIOS/CommandBar/Options.swift b/Sources/CommandBarIOS/CommandBar/Options.swift new file mode 100644 index 0000000..39468e2 --- /dev/null +++ b/Sources/CommandBarIOS/CommandBar/Options.swift @@ -0,0 +1,96 @@ + +// MARK: Public +protocol CommandBarOptionsDelegate: Codable { + var user_id: String? { get set } +} + +public struct CommandBarOptions : CommandBarOptionsDelegate, Codable { + public var user_id: String? = nil + + public init(user_id: String? = nil) { + self.user_id = user_id + } +} + + +// MARK: Internal +internal enum LaunchCode: String, Codable { + case prod = "prod" + case labs = "labs" + case localDev = "local-dev" +} + +internal struct CommandBarInternalOptions : CommandBarOptionsDelegate, Codable { + var user_id: String? + internal var launch_code: LaunchCode + + internal init() { + self.launch_code = .prod + self.user_id = nil + } + + internal init(launch_code: LaunchCode, user_id: String? = nil) { + self.user_id = user_id + self.launch_code = launch_code + } + + internal init(from options: CommandBarOptions, with launch_code: LaunchCode = .prod) { + self.user_id = options.user_id + self.launch_code = launch_code + } + + internal func getAPIUrl(for resource: InternalAPIResource = .api, with path: String) -> URL? { + let baseURLStr = self.getBaseURLStr(for: resource) + if var components = URLComponents(string: baseURLStr) { + components.path = path + + return components.url + } + + return nil + } + + internal func getBaseURL(for resource: InternalAPIResource = .api) -> URL? { + let urlStr = self.getBaseURLStr(for: resource) + return URL(string: urlStr) + } + + internal func getBaseURLStr(for resource: InternalAPIResource = .api) -> String { + var baseURLStr = "https://api.commandbar.com" + + switch(self.launch_code) { + case .labs: + baseURLStr = "https://api-labs.commandbar.com" + break; + case .localDev: + baseURLStr = "http://localhost:8000" + break + default: + if resource == .analytics { + baseURLStr = "https://t.commandbar.com" + } + } + + return baseURLStr + } + + enum InternalAPIResource { + case analytics + case api + } +} + +public struct CommandBarOptions_Deprecated { + var orgId: String + var userId: String? + var spinnerColor: String; + var launchCode: String; + + public init(_ dict: [String: Any]) { + orgId = dict["orgId"] as! String + userId = dict["userId"] as? String + spinnerColor = dict["spinnerColor"] as? String ?? "#3662F1" + launchCode = dict["launchCode"] as? String ?? "prod" + } +} + diff --git a/Sources/CommandBarIOS/CommandBar/SDK.swift b/Sources/CommandBarIOS/CommandBar/SDK.swift index 87e6d8c..8bcb5a8 100644 --- a/Sources/CommandBarIOS/CommandBar/SDK.swift +++ b/Sources/CommandBarIOS/CommandBar/SDK.swift @@ -6,28 +6,31 @@ public protocol CommandBarSDKDelegate : AnyObject { func didTriggerOpenChat(withType type: String) } - // MARK: Public SDK public final class CommandBarSDK { private static let sharedInternal = CommandBarInternalSDK.shared private var commandbar: CommandBar? = nil public static let shared = CommandBarSDK() - + var isReady: Bool = false var orgId: String? = nil + var options: CommandBarOptions? = nil weak var delegate: CommandBarSDKDelegate? weak var privateDelagate: CommandBarInternalSDK? - public init(orgId: String? = nil) { - self.orgId = orgId + public init() { + self.orgId = nil + self.options = nil } - public func boot(orgId: String) { + public func boot(_ orgId: String, with options: CommandBarOptions? = nil) { self.orgId = orgId - self.commandbar = CommandBar(options: CommandBarOptions(["orgId": orgId, "launchCode": "prod" ])) - CommandBarSDK.sharedInternal.boot(orgId: orgId) + self.options = options + self.commandbar = CommandBar(options: CommandBarOptions_Deprecated(["orgId": orgId, "launchCode": "prod" ])) + + CommandBarSDK.sharedInternal.boot(orgId: orgId, with: options) } @@ -59,17 +62,3 @@ extension CommandBarSDK : CommandBarInternalSDKDelegate { } } -// MARK: Old SDK Options -public struct CommandBarOptions { - var orgId: String - var userId: String? - var spinnerColor: String; - var launchCode: String; - - public init(_ dict: [String: Any]) { - orgId = dict["orgId"] as! String - userId = dict["userId"] as? String - spinnerColor = dict["spinnerColor"] as? String ?? "#3662F1" - launchCode = dict["launchCode"] as? String ?? "prod" - } -} diff --git a/Sources/CommandBarIOS/HelpHub/HelpHubViewController.swift b/Sources/CommandBarIOS/HelpHub/HelpHubViewController.swift index d84d552..360d0af 100644 --- a/Sources/CommandBarIOS/HelpHub/HelpHubViewController.swift +++ b/Sources/CommandBarIOS/HelpHub/HelpHubViewController.swift @@ -3,10 +3,10 @@ import WebKit public class HelpHubViewController: UIViewController { var helpHubView: HelpHubWebView! - private var options: CommandBarOptions + private var options: CommandBarOptions_Deprecated public var delegate: HelpHubWebViewDelegate? // Add this property - public init(options: CommandBarOptions) { + public init(options: CommandBarOptions_Deprecated) { self.options = options super.init(nibName: nil, bundle: nil) } diff --git a/Sources/CommandBarIOS/HelpHub/HelpHubWebView.swift b/Sources/CommandBarIOS/HelpHub/HelpHubWebView.swift index a1d7f1e..a885bf3 100644 --- a/Sources/CommandBarIOS/HelpHub/HelpHubWebView.swift +++ b/Sources/CommandBarIOS/HelpHub/HelpHubWebView.swift @@ -2,7 +2,7 @@ import UIKit import WebKit public class HelpHubWebView: WKWebView, WKNavigationDelegate, WKScriptMessageHandler { - public var options: CommandBarOptions? = nil { + public var options: CommandBarOptions_Deprecated? = nil { didSet { self.loadContent() } diff --git a/Sources/CommandBarIOS/Nudges/NudgeWindowManager.swift b/Sources/CommandBarIOS/Nudges/NudgeWindowManager.swift index 801ef34..7fce216 100644 --- a/Sources/CommandBarIOS/Nudges/NudgeWindowManager.swift +++ b/Sources/CommandBarIOS/Nudges/NudgeWindowManager.swift @@ -106,8 +106,8 @@ class NudgeWindowManager { Analytics.shared.log(eventName: .surveyResponse, data: attrs) } case "stars", "numbers": - let responseEvent = StringResponseEvent(value: surveyTextValue) - let attrs = EventAttributes(type: .log, response: .string(responseEvent), nudge: nudgeEvent) + let responseEvent = NumberResponseEvent(value: surveyValue, max: meta.options ?? 0) + let attrs = EventAttributes(type: .log, response: .number(responseEvent), nudge: nudgeEvent) Analytics.shared.log(eventName: .surveyResponse, data: attrs) default: return