diff --git a/Podfile b/Podfile
index f02d3c8..716f7e5 100644
--- a/Podfile
+++ b/Podfile
@@ -16,8 +16,8 @@ target 'Simcoe' do
end
-target 'mParticleExample' do
- project 'mParticleExample/mParticleExample'
+target 'SimcoeExample' do
+ project 'SimcoeExample/SimcoeExample'
pod 'Simcoe', :path => './', :subspecs => ['Adobe', 'mParticle', 'Mixpanel']
podspec :path => 'Simcoe.podspec'
diff --git a/Podfile.lock b/Podfile.lock
index 2a7a7ee..f2ec764 100644
--- a/Podfile.lock
+++ b/Podfile.lock
@@ -1,11 +1,11 @@
PODS:
- - AdobeMobileSDK (4.13.0):
- - AdobeMobileSDK/iOS (= 4.13.0)
- - AdobeMobileSDK/iOS (4.13.0)
- - Mixpanel-swift (2.1.3)
- - mParticle-Apple-SDK (6.11.1):
- - mParticle-Apple-SDK/mParticle (= 6.11.1)
- - mParticle-Apple-SDK/mParticle (6.11.1)
+ - AdobeMobileSDK (4.13.4):
+ - AdobeMobileSDK/iOS (= 4.13.4)
+ - AdobeMobileSDK/iOS (4.13.4)
+ - Mixpanel-swift (2.1.5)
+ - mParticle-Apple-SDK (6.12.6):
+ - mParticle-Apple-SDK/mParticle (= 6.12.6)
+ - mParticle-Apple-SDK/mParticle (6.12.6)
- Simcoe/Adobe (1.0.0):
- AdobeMobileSDK (~> 4.13)
- Simcoe/Core
@@ -30,11 +30,11 @@ EXTERNAL SOURCES:
:path: "./"
SPEC CHECKSUMS:
- AdobeMobileSDK: 52c3fbf43b5b054132393b1486ecbefca0ba01db
- Mixpanel-swift: a50fe20def8fc2ea0f2c912772ad835bd8524dae
- mParticle-Apple-SDK: 8c7dfc195459870aa33be634f006342cb37d6a24
+ AdobeMobileSDK: c236ba5d17529a002209f9899d38084d80bec337
+ Mixpanel-swift: bcf863981f72c3bb2a51549292da61f13043d944
+ mParticle-Apple-SDK: 78259500f1e06bf8ed7c95a8dccbb7f346dc797f
Simcoe: 3e77a2ef7f0a28b3184cd823cae9682613760d75
-PODFILE CHECKSUM: 3168a08aa3eb292250204b2bc967159b719878a0
+PODFILE CHECKSUM: 45363b8ea226d7146b974db421e971b71efa32b9
-COCOAPODS: 1.1.1
+COCOAPODS: 1.2.0
diff --git a/Simcoe.xcworkspace/contents.xcworkspacedata b/Simcoe.xcworkspace/contents.xcworkspacedata
index f75aa4f..bff6263 100644
--- a/Simcoe.xcworkspace/contents.xcworkspacedata
+++ b/Simcoe.xcworkspace/contents.xcworkspacedata
@@ -5,7 +5,7 @@
location = "group:Simcoe.xcodeproj">
+ location = "group:SimcoeExample/SimcoeExample.xcodeproj">
diff --git a/SimcoeExample/SimcoeExample.xcodeproj/project.pbxproj b/SimcoeExample/SimcoeExample.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..b42118b
--- /dev/null
+++ b/SimcoeExample/SimcoeExample.xcodeproj/project.pbxproj
@@ -0,0 +1,656 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 200562E11E5DE5A60015AD55 /* TrackerAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200562E01E5DE5A60015AD55 /* TrackerAction.swift */; };
+ 200562E31E5DE5BA0015AD55 /* EventTrackerAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200562E21E5DE5BA0015AD55 /* EventTrackerAction.swift */; };
+ 200562E51E5DE5CC0015AD55 /* LifetimeValueIncreasingAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200562E41E5DE5CC0015AD55 /* LifetimeValueIncreasingAction.swift */; };
+ 200562E71E5DE5DD0015AD55 /* LocationTrackingAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200562E61E5DE5DD0015AD55 /* LocationTrackingAction.swift */; };
+ 200562E91E5DE5EB0015AD55 /* PageViewTrackingAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200562E81E5DE5EB0015AD55 /* PageViewTrackingAction.swift */; };
+ 200562EC1E5DEA530015AD55 /* SimcoeAnalyticsEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200562EB1E5DEA530015AD55 /* SimcoeAnalyticsEngine.swift */; };
+ 200562EE1E5DEA780015AD55 /* AnalyticsEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200562ED1E5DEA780015AD55 /* AnalyticsEngine.swift */; };
+ 200562F11E5DEAB20015AD55 /* AnalyticsTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200562F01E5DEAB20015AD55 /* AnalyticsTracker.swift */; };
+ 200562F31E5F43B10015AD55 /* AddToCartLoggingAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200562F21E5F43B10015AD55 /* AddToCartLoggingAction.swift */; };
+ 200562F51E5F45460015AD55 /* RemoveFromCartAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200562F41E5F45460015AD55 /* RemoveFromCartAction.swift */; };
+ 200562F71E5F56030015AD55 /* CheckoutTrackingAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200562F61E5F56030015AD55 /* CheckoutTrackingAction.swift */; };
+ 200562F91E5F56D50015AD55 /* ErrorLoggingAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200562F81E5F56D50015AD55 /* ErrorLoggingAction.swift */; };
+ 200562FB1E5F577D0015AD55 /* PurchaseTrackingAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200562FA1E5F577D0015AD55 /* PurchaseTrackingAction.swift */; };
+ 200562FD1E5F57EC0015AD55 /* UserAttributeTrackingAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200562FC1E5F57EC0015AD55 /* UserAttributeTrackingAction.swift */; };
+ 200562FF1E5F584B0015AD55 /* ViewDetailLoggingAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200562FE1E5F584B0015AD55 /* ViewDetailLoggingAction.swift */; };
+ 200563011E5F597B0015AD55 /* SampleProduct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200563001E5F597B0015AD55 /* SampleProduct.swift */; };
+ 200563031E5F5F4A0015AD55 /* TrackerActionGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200563021E5F5F4A0015AD55 /* TrackerActionGenerator.swift */; };
+ 200563051E5F5F5F0015AD55 /* ActionGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200563041E5F5F5F0015AD55 /* ActionGenerator.swift */; };
+ 200563071E5F87030015AD55 /* AvailableTrackers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200563061E5F87030015AD55 /* AvailableTrackers.swift */; };
+ 200563091E5F87230015AD55 /* AnalyticsProviders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200563081E5F87230015AD55 /* AnalyticsProviders.swift */; };
+ 200563121E5F9D630015AD55 /* AnalyticsDisplayBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200563111E5F9D630015AD55 /* AnalyticsDisplayBuilder.swift */; };
+ 200563141E5F9E770015AD55 /* SimcoeExampleApplication.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200563131E5F9E770015AD55 /* SimcoeExampleApplication.swift */; };
+ 200563181E5FA1BF0015AD55 /* UIStoryboardExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200563161E5FA1BF0015AD55 /* UIStoryboardExtension.swift */; };
+ 200563191E5FA1BF0015AD55 /* UIViewControllerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 200563171E5FA1BF0015AD55 /* UIViewControllerExtension.swift */; };
+ 20C3B1B11E5CE6F70095F185 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20C3B1B01E5CE6F70095F185 /* AppDelegate.swift */; };
+ 20C3B1B61E5CE6F70095F185 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 20C3B1B41E5CE6F70095F185 /* Main.storyboard */; };
+ 20C3B1B81E5CE6F70095F185 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 20C3B1B71E5CE6F70095F185 /* Assets.xcassets */; };
+ 20C3B1BB1E5CE6F70095F185 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 20C3B1B91E5CE6F70095F185 /* LaunchScreen.storyboard */; };
+ 20C3B1C61E5CE6F80095F185 /* SimcoeExampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20C3B1C51E5CE6F80095F185 /* SimcoeExampleTests.swift */; };
+ 20C3B1D11E5CE7D70095F185 /* AnalyticsDisplayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20C3B1D01E5CE7D70095F185 /* AnalyticsDisplayViewController.swift */; };
+ 20C3B1D31E5CED6C0095F185 /* TrackerTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20C3B1D21E5CED6C0095F185 /* TrackerTableViewController.swift */; };
+ 20C3B1D51E5CEEB00095F185 /* Tracker.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 20C3B1D41E5CEEB00095F185 /* Tracker.storyboard */; };
+ 7C053332C270E8F7722BCEC4 /* Pods_SimcoeExample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2CD57B97C112AB0B5961BA41 /* Pods_SimcoeExample.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 20C3B1C21E5CE6F80095F185 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 20C3B1A51E5CE6F70095F185 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 20C3B1AC1E5CE6F70095F185;
+ remoteInfo = SimcoeExample;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 200562E01E5DE5A60015AD55 /* TrackerAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrackerAction.swift; sourceTree = ""; };
+ 200562E21E5DE5BA0015AD55 /* EventTrackerAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventTrackerAction.swift; sourceTree = ""; };
+ 200562E41E5DE5CC0015AD55 /* LifetimeValueIncreasingAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LifetimeValueIncreasingAction.swift; sourceTree = ""; };
+ 200562E61E5DE5DD0015AD55 /* LocationTrackingAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocationTrackingAction.swift; sourceTree = ""; };
+ 200562E81E5DE5EB0015AD55 /* PageViewTrackingAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PageViewTrackingAction.swift; sourceTree = ""; };
+ 200562EB1E5DEA530015AD55 /* SimcoeAnalyticsEngine.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimcoeAnalyticsEngine.swift; sourceTree = ""; };
+ 200562ED1E5DEA780015AD55 /* AnalyticsEngine.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnalyticsEngine.swift; sourceTree = ""; };
+ 200562F01E5DEAB20015AD55 /* AnalyticsTracker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnalyticsTracker.swift; sourceTree = ""; };
+ 200562F21E5F43B10015AD55 /* AddToCartLoggingAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddToCartLoggingAction.swift; sourceTree = ""; };
+ 200562F41E5F45460015AD55 /* RemoveFromCartAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RemoveFromCartAction.swift; sourceTree = ""; };
+ 200562F61E5F56030015AD55 /* CheckoutTrackingAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckoutTrackingAction.swift; sourceTree = ""; };
+ 200562F81E5F56D50015AD55 /* ErrorLoggingAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ErrorLoggingAction.swift; sourceTree = ""; };
+ 200562FA1E5F577D0015AD55 /* PurchaseTrackingAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PurchaseTrackingAction.swift; sourceTree = ""; };
+ 200562FC1E5F57EC0015AD55 /* UserAttributeTrackingAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserAttributeTrackingAction.swift; sourceTree = ""; };
+ 200562FE1E5F584B0015AD55 /* ViewDetailLoggingAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewDetailLoggingAction.swift; sourceTree = ""; };
+ 200563001E5F597B0015AD55 /* SampleProduct.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SampleProduct.swift; sourceTree = ""; };
+ 200563021E5F5F4A0015AD55 /* TrackerActionGenerator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrackerActionGenerator.swift; sourceTree = ""; };
+ 200563041E5F5F5F0015AD55 /* ActionGenerator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionGenerator.swift; sourceTree = ""; };
+ 200563061E5F87030015AD55 /* AvailableTrackers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AvailableTrackers.swift; sourceTree = ""; };
+ 200563081E5F87230015AD55 /* AnalyticsProviders.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnalyticsProviders.swift; sourceTree = ""; };
+ 200563111E5F9D630015AD55 /* AnalyticsDisplayBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnalyticsDisplayBuilder.swift; sourceTree = ""; };
+ 200563131E5F9E770015AD55 /* SimcoeExampleApplication.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimcoeExampleApplication.swift; sourceTree = ""; };
+ 200563161E5FA1BF0015AD55 /* UIStoryboardExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIStoryboardExtension.swift; sourceTree = ""; };
+ 200563171E5FA1BF0015AD55 /* UIViewControllerExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIViewControllerExtension.swift; sourceTree = ""; };
+ 20C3B1AD1E5CE6F70095F185 /* SimcoeExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SimcoeExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 20C3B1B01E5CE6F70095F185 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ 20C3B1B51E5CE6F70095F185 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ 20C3B1B71E5CE6F70095F185 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 20C3B1BA1E5CE6F70095F185 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+ 20C3B1BC1E5CE6F70095F185 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 20C3B1C11E5CE6F80095F185 /* SimcoeExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SimcoeExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 20C3B1C51E5CE6F80095F185 /* SimcoeExampleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimcoeExampleTests.swift; sourceTree = ""; };
+ 20C3B1C71E5CE6F80095F185 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 20C3B1D01E5CE7D70095F185 /* AnalyticsDisplayViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnalyticsDisplayViewController.swift; sourceTree = ""; };
+ 20C3B1D21E5CED6C0095F185 /* TrackerTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrackerTableViewController.swift; sourceTree = ""; };
+ 20C3B1D41E5CEEB00095F185 /* Tracker.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Tracker.storyboard; sourceTree = ""; };
+ 2CD57B97C112AB0B5961BA41 /* Pods_SimcoeExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SimcoeExample.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ E83548EECC7ED7DF5F36D714 /* Pods-SimcoeExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SimcoeExample.release.xcconfig"; path = "../Pods/Target Support Files/Pods-SimcoeExample/Pods-SimcoeExample.release.xcconfig"; sourceTree = ""; };
+ E91AED01048FDD61337E822D /* Pods-SimcoeExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SimcoeExample.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-SimcoeExample/Pods-SimcoeExample.debug.xcconfig"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 20C3B1AA1E5CE6F70095F185 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 7C053332C270E8F7722BCEC4 /* Pods_SimcoeExample.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 20C3B1BE1E5CE6F80095F185 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 200562DE1E5DE59A0015AD55 /* TrackerActions */ = {
+ isa = PBXGroup;
+ children = (
+ 200562E21E5DE5BA0015AD55 /* EventTrackerAction.swift */,
+ 200562E41E5DE5CC0015AD55 /* LifetimeValueIncreasingAction.swift */,
+ 200562E61E5DE5DD0015AD55 /* LocationTrackingAction.swift */,
+ 200562E81E5DE5EB0015AD55 /* PageViewTrackingAction.swift */,
+ 200562F21E5F43B10015AD55 /* AddToCartLoggingAction.swift */,
+ 200562F41E5F45460015AD55 /* RemoveFromCartAction.swift */,
+ 200562F61E5F56030015AD55 /* CheckoutTrackingAction.swift */,
+ 200562F81E5F56D50015AD55 /* ErrorLoggingAction.swift */,
+ 200562FA1E5F577D0015AD55 /* PurchaseTrackingAction.swift */,
+ 200562FC1E5F57EC0015AD55 /* UserAttributeTrackingAction.swift */,
+ 200562FE1E5F584B0015AD55 /* ViewDetailLoggingAction.swift */,
+ );
+ path = TrackerActions;
+ sourceTree = "";
+ };
+ 200562DF1E5DE59A0015AD55 /* Protocols */ = {
+ isa = PBXGroup;
+ children = (
+ 200562E01E5DE5A60015AD55 /* TrackerAction.swift */,
+ 200562ED1E5DEA780015AD55 /* AnalyticsEngine.swift */,
+ 200563041E5F5F5F0015AD55 /* ActionGenerator.swift */,
+ );
+ path = Protocols;
+ sourceTree = "";
+ };
+ 200562EA1E5DEA4D0015AD55 /* Analytics Engine */ = {
+ isa = PBXGroup;
+ children = (
+ 200562EB1E5DEA530015AD55 /* SimcoeAnalyticsEngine.swift */,
+ );
+ path = "Analytics Engine";
+ sourceTree = "";
+ };
+ 200562EF1E5DEAAB0015AD55 /* Helper Classes */ = {
+ isa = PBXGroup;
+ children = (
+ 200562F01E5DEAB20015AD55 /* AnalyticsTracker.swift */,
+ 200563001E5F597B0015AD55 /* SampleProduct.swift */,
+ 200563021E5F5F4A0015AD55 /* TrackerActionGenerator.swift */,
+ 200563061E5F87030015AD55 /* AvailableTrackers.swift */,
+ 200563081E5F87230015AD55 /* AnalyticsProviders.swift */,
+ );
+ path = "Helper Classes";
+ sourceTree = "";
+ };
+ 200563101E5F9D550015AD55 /* Builders */ = {
+ isa = PBXGroup;
+ children = (
+ 200563111E5F9D630015AD55 /* AnalyticsDisplayBuilder.swift */,
+ );
+ path = Builders;
+ sourceTree = "";
+ };
+ 200563151E5FA1BF0015AD55 /* Extensions */ = {
+ isa = PBXGroup;
+ children = (
+ 200563161E5FA1BF0015AD55 /* UIStoryboardExtension.swift */,
+ 200563171E5FA1BF0015AD55 /* UIViewControllerExtension.swift */,
+ );
+ path = Extensions;
+ sourceTree = "";
+ };
+ 20C3B1A41E5CE6F70095F185 = {
+ isa = PBXGroup;
+ children = (
+ 20C3B1AF1E5CE6F70095F185 /* SimcoeExample */,
+ 20C3B1C41E5CE6F80095F185 /* SimcoeExampleTests */,
+ 20C3B1AE1E5CE6F70095F185 /* Products */,
+ C7C320D69EA0D1C563FF3995 /* Pods */,
+ F9408D272EA2E6886CDC6D26 /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ 20C3B1AE1E5CE6F70095F185 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 20C3B1AD1E5CE6F70095F185 /* SimcoeExample.app */,
+ 20C3B1C11E5CE6F80095F185 /* SimcoeExampleTests.xctest */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 20C3B1AF1E5CE6F70095F185 /* SimcoeExample */ = {
+ isa = PBXGroup;
+ children = (
+ 20C3B1B01E5CE6F70095F185 /* AppDelegate.swift */,
+ 200563131E5F9E770015AD55 /* SimcoeExampleApplication.swift */,
+ 20C3B1D01E5CE7D70095F185 /* AnalyticsDisplayViewController.swift */,
+ 20C3B1D21E5CED6C0095F185 /* TrackerTableViewController.swift */,
+ 20C3B1B41E5CE6F70095F185 /* Main.storyboard */,
+ 20C3B1D41E5CEEB00095F185 /* Tracker.storyboard */,
+ 20C3B1B71E5CE6F70095F185 /* Assets.xcassets */,
+ 20C3B1B91E5CE6F70095F185 /* LaunchScreen.storyboard */,
+ 20C3B1BC1E5CE6F70095F185 /* Info.plist */,
+ 200562EA1E5DEA4D0015AD55 /* Analytics Engine */,
+ 200562DE1E5DE59A0015AD55 /* TrackerActions */,
+ 200562DF1E5DE59A0015AD55 /* Protocols */,
+ 200562EF1E5DEAAB0015AD55 /* Helper Classes */,
+ 200563101E5F9D550015AD55 /* Builders */,
+ 200563151E5FA1BF0015AD55 /* Extensions */,
+ );
+ path = SimcoeExample;
+ sourceTree = "";
+ };
+ 20C3B1C41E5CE6F80095F185 /* SimcoeExampleTests */ = {
+ isa = PBXGroup;
+ children = (
+ 20C3B1C51E5CE6F80095F185 /* SimcoeExampleTests.swift */,
+ 20C3B1C71E5CE6F80095F185 /* Info.plist */,
+ );
+ path = SimcoeExampleTests;
+ sourceTree = "";
+ };
+ C7C320D69EA0D1C563FF3995 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ E91AED01048FDD61337E822D /* Pods-SimcoeExample.debug.xcconfig */,
+ E83548EECC7ED7DF5F36D714 /* Pods-SimcoeExample.release.xcconfig */,
+ );
+ name = Pods;
+ sourceTree = "";
+ };
+ F9408D272EA2E6886CDC6D26 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 2CD57B97C112AB0B5961BA41 /* Pods_SimcoeExample.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 20C3B1AC1E5CE6F70095F185 /* SimcoeExample */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 20C3B1CA1E5CE6F80095F185 /* Build configuration list for PBXNativeTarget "SimcoeExample" */;
+ buildPhases = (
+ F6BE0E261E5827888F00C654 /* [CP] Check Pods Manifest.lock */,
+ 20C3B1A91E5CE6F70095F185 /* Sources */,
+ 20C3B1AA1E5CE6F70095F185 /* Frameworks */,
+ 20C3B1AB1E5CE6F70095F185 /* Resources */,
+ 8ACB246C83C58B83E0AEBFF0 /* [CP] Embed Pods Frameworks */,
+ 46EA684A0296F94B24CD361E /* [CP] Copy Pods Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = SimcoeExample;
+ productName = SimcoeExample;
+ productReference = 20C3B1AD1E5CE6F70095F185 /* SimcoeExample.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 20C3B1C01E5CE6F80095F185 /* SimcoeExampleTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 20C3B1CD1E5CE6F80095F185 /* Build configuration list for PBXNativeTarget "SimcoeExampleTests" */;
+ buildPhases = (
+ 20C3B1BD1E5CE6F80095F185 /* Sources */,
+ 20C3B1BE1E5CE6F80095F185 /* Frameworks */,
+ 20C3B1BF1E5CE6F80095F185 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 20C3B1C31E5CE6F80095F185 /* PBXTargetDependency */,
+ );
+ name = SimcoeExampleTests;
+ productName = SimcoeExampleTests;
+ productReference = 20C3B1C11E5CE6F80095F185 /* SimcoeExampleTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 20C3B1A51E5CE6F70095F185 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastSwiftUpdateCheck = 0820;
+ LastUpgradeCheck = 0820;
+ ORGANIZATIONNAME = "Prolific Interactive";
+ TargetAttributes = {
+ 20C3B1AC1E5CE6F70095F185 = {
+ CreatedOnToolsVersion = 8.2.1;
+ DevelopmentTeam = 5ZZ7W4SB26;
+ ProvisioningStyle = Automatic;
+ };
+ 20C3B1C01E5CE6F80095F185 = {
+ CreatedOnToolsVersion = 8.2.1;
+ DevelopmentTeam = 5ZZ7W4SB26;
+ ProvisioningStyle = Automatic;
+ TestTargetID = 20C3B1AC1E5CE6F70095F185;
+ };
+ };
+ };
+ buildConfigurationList = 20C3B1A81E5CE6F70095F185 /* Build configuration list for PBXProject "SimcoeExample" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 20C3B1A41E5CE6F70095F185;
+ productRefGroup = 20C3B1AE1E5CE6F70095F185 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 20C3B1AC1E5CE6F70095F185 /* SimcoeExample */,
+ 20C3B1C01E5CE6F80095F185 /* SimcoeExampleTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 20C3B1AB1E5CE6F70095F185 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 20C3B1BB1E5CE6F70095F185 /* LaunchScreen.storyboard in Resources */,
+ 20C3B1D51E5CEEB00095F185 /* Tracker.storyboard in Resources */,
+ 20C3B1B81E5CE6F70095F185 /* Assets.xcassets in Resources */,
+ 20C3B1B61E5CE6F70095F185 /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 20C3B1BF1E5CE6F80095F185 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 46EA684A0296F94B24CD361E /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "[CP] Copy Pods Resources";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${SRCROOT}/../Pods/Target Support Files/Pods-SimcoeExample/Pods-SimcoeExample-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 8ACB246C83C58B83E0AEBFF0 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${SRCROOT}/../Pods/Target Support Files/Pods-SimcoeExample/Pods-SimcoeExample-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ F6BE0E261E5827888F00C654 /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n";
+ showEnvVarsInLog = 0;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 20C3B1A91E5CE6F70095F185 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 200562E91E5DE5EB0015AD55 /* PageViewTrackingAction.swift in Sources */,
+ 200562E11E5DE5A60015AD55 /* TrackerAction.swift in Sources */,
+ 200563011E5F597B0015AD55 /* SampleProduct.swift in Sources */,
+ 200562E51E5DE5CC0015AD55 /* LifetimeValueIncreasingAction.swift in Sources */,
+ 200563031E5F5F4A0015AD55 /* TrackerActionGenerator.swift in Sources */,
+ 200562FB1E5F577D0015AD55 /* PurchaseTrackingAction.swift in Sources */,
+ 20C3B1D31E5CED6C0095F185 /* TrackerTableViewController.swift in Sources */,
+ 200562EE1E5DEA780015AD55 /* AnalyticsEngine.swift in Sources */,
+ 200563181E5FA1BF0015AD55 /* UIStoryboardExtension.swift in Sources */,
+ 200562F91E5F56D50015AD55 /* ErrorLoggingAction.swift in Sources */,
+ 200562EC1E5DEA530015AD55 /* SimcoeAnalyticsEngine.swift in Sources */,
+ 200563191E5FA1BF0015AD55 /* UIViewControllerExtension.swift in Sources */,
+ 200562F31E5F43B10015AD55 /* AddToCartLoggingAction.swift in Sources */,
+ 200562E31E5DE5BA0015AD55 /* EventTrackerAction.swift in Sources */,
+ 200563071E5F87030015AD55 /* AvailableTrackers.swift in Sources */,
+ 200563051E5F5F5F0015AD55 /* ActionGenerator.swift in Sources */,
+ 200562E71E5DE5DD0015AD55 /* LocationTrackingAction.swift in Sources */,
+ 200562F51E5F45460015AD55 /* RemoveFromCartAction.swift in Sources */,
+ 200562FD1E5F57EC0015AD55 /* UserAttributeTrackingAction.swift in Sources */,
+ 200562FF1E5F584B0015AD55 /* ViewDetailLoggingAction.swift in Sources */,
+ 200563091E5F87230015AD55 /* AnalyticsProviders.swift in Sources */,
+ 200562F71E5F56030015AD55 /* CheckoutTrackingAction.swift in Sources */,
+ 200563141E5F9E770015AD55 /* SimcoeExampleApplication.swift in Sources */,
+ 20C3B1D11E5CE7D70095F185 /* AnalyticsDisplayViewController.swift in Sources */,
+ 200563121E5F9D630015AD55 /* AnalyticsDisplayBuilder.swift in Sources */,
+ 200562F11E5DEAB20015AD55 /* AnalyticsTracker.swift in Sources */,
+ 20C3B1B11E5CE6F70095F185 /* AppDelegate.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 20C3B1BD1E5CE6F80095F185 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 20C3B1C61E5CE6F80095F185 /* SimcoeExampleTests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 20C3B1C31E5CE6F80095F185 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 20C3B1AC1E5CE6F70095F185 /* SimcoeExample */;
+ targetProxy = 20C3B1C21E5CE6F80095F185 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+ 20C3B1B41E5CE6F70095F185 /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 20C3B1B51E5CE6F70095F185 /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+ 20C3B1B91E5CE6F70095F185 /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 20C3B1BA1E5CE6F70095F185 /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 20C3B1C81E5CE6F80095F185 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ 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 = 10.2;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ };
+ name = Debug;
+ };
+ 20C3B1C91E5CE6F80095F185 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ 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 = 10.2;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 20C3B1CB1E5CE6F80095F185 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = E91AED01048FDD61337E822D /* Pods-SimcoeExample.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ DEVELOPMENT_TEAM = 5ZZ7W4SB26;
+ INFOPLIST_FILE = SimcoeExample/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = com.prolificinteractive.SimcoeExample;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 3.0;
+ };
+ name = Debug;
+ };
+ 20C3B1CC1E5CE6F80095F185 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = E83548EECC7ED7DF5F36D714 /* Pods-SimcoeExample.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ DEVELOPMENT_TEAM = 5ZZ7W4SB26;
+ INFOPLIST_FILE = SimcoeExample/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = com.prolificinteractive.SimcoeExample;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 3.0;
+ };
+ name = Release;
+ };
+ 20C3B1CE1E5CE6F80095F185 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ DEVELOPMENT_TEAM = 5ZZ7W4SB26;
+ INFOPLIST_FILE = SimcoeExampleTests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = com.prolificinteractive.SimcoeExampleTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 3.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SimcoeExample.app/SimcoeExample";
+ };
+ name = Debug;
+ };
+ 20C3B1CF1E5CE6F80095F185 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ DEVELOPMENT_TEAM = 5ZZ7W4SB26;
+ INFOPLIST_FILE = SimcoeExampleTests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = com.prolificinteractive.SimcoeExampleTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 3.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SimcoeExample.app/SimcoeExample";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 20C3B1A81E5CE6F70095F185 /* Build configuration list for PBXProject "SimcoeExample" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 20C3B1C81E5CE6F80095F185 /* Debug */,
+ 20C3B1C91E5CE6F80095F185 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 20C3B1CA1E5CE6F80095F185 /* Build configuration list for PBXNativeTarget "SimcoeExample" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 20C3B1CB1E5CE6F80095F185 /* Debug */,
+ 20C3B1CC1E5CE6F80095F185 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 20C3B1CD1E5CE6F80095F185 /* Build configuration list for PBXNativeTarget "SimcoeExampleTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 20C3B1CE1E5CE6F80095F185 /* Debug */,
+ 20C3B1CF1E5CE6F80095F185 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 20C3B1A51E5CE6F70095F185 /* Project object */;
+}
diff --git a/SimcoeExample/SimcoeExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SimcoeExample/SimcoeExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..ffd30a0
--- /dev/null
+++ b/SimcoeExample/SimcoeExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/SimcoeExample/SimcoeExample/Analytics Engine/SimcoeAnalyticsEngine.swift b/SimcoeExample/SimcoeExample/Analytics Engine/SimcoeAnalyticsEngine.swift
new file mode 100644
index 0000000..3faca6a
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/Analytics Engine/SimcoeAnalyticsEngine.swift
@@ -0,0 +1,65 @@
+//
+// SimcoeAnalyticsEngine.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/22/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+import CoreLocation
+
+internal class SimcoeAnalyticsEngine: AnalyticsEngine {
+
+ func run(with providers: [AnalyticsTracking]) {
+ Simcoe.run(with: providers)
+ }
+
+ func track(event: String, withAdditionalProperties properties: Properties?) {
+ Simcoe.track(event: event, withAdditionalProperties: properties)
+ }
+
+ func trackLifetimeIncrease(byAmount amount: Double,
+ forItem item: String?,
+ withAdditionalProperties properties: Properties?) {
+
+ Simcoe.trackLifetimeIncrease(byAmount: amount, forItem: item, withAdditionalProperties: properties)
+ }
+
+ func track(location: CLLocation, withAdditionalProperties properties: Properties?) {
+ Simcoe.track(location: location, withAdditionalProperties: properties)
+ }
+
+ func track(pageView: String, withAdditionalProperties properties: Properties?) {
+ Simcoe.track(pageView: pageView, withAdditionalProperties: properties)
+ }
+
+ func logAddToCart(_ product: T, eventProperties: Properties?) {
+ Simcoe.logAddToCart(product, eventProperties: eventProperties)
+ }
+
+ func logRemoveFromCart(_ product: T, eventProperties: Properties?) {
+ Simcoe.logRemoveFromCart(product, eventProperties: eventProperties)
+ }
+
+ func trackCheckoutEvent(_ products: [T], eventProperties: Properties?) {
+ Simcoe.trackCheckoutEvent(products, eventProperties: eventProperties)
+ }
+
+ func log(error: String, withAdditionalProperties properties: Properties?) {
+ Simcoe.log(error: error, withAdditionalProperties: properties)
+ }
+
+ func trackPurchaseEvent(_ products: [T], eventProperties: Properties?) {
+ Simcoe.trackPurchaseEvent(products, eventProperties: eventProperties)
+ }
+
+ func setUserAttribute(_ key: String, value: AnyObject) {
+ Simcoe.setUserAttribute(key, value: value)
+ }
+
+ func logViewDetail(_ product: T, eventProperties: Properties?) {
+ Simcoe.logViewDetail(product, eventProperties: eventProperties)
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/AnalyticsDisplayViewController.swift b/SimcoeExample/SimcoeExample/AnalyticsDisplayViewController.swift
new file mode 100644
index 0000000..5a61c9d
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/AnalyticsDisplayViewController.swift
@@ -0,0 +1,48 @@
+//
+// AnalyticsDisplayViewController.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/21/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import UIKit
+
+internal final class AnalyticsDisplayViewController: UITableViewController {
+
+ var analyticsEngine: AnalyticsEngine!
+
+ var providers: AnalyticsProviders!
+}
+
+extension AnalyticsDisplayViewController {
+
+ override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+ return providers.trackers.count
+ }
+
+ override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+ let cell = UITableViewCell()
+ cell.textLabel?.text = providers.trackers[indexPath.row].name
+ cell.accessoryType = .disclosureIndicator
+ return cell
+ }
+
+ override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+ tableView.deselectRow(at: indexPath, animated: true)
+
+ let trackerVC: TrackerTableViewController = TrackerTableViewController.storyboardInit()
+
+ analyticsEngine.run(with: providers.trackers[indexPath.row].providers)
+
+ trackerVC.trackers = providers.trackers[indexPath.row].actions
+ navigationController?.pushViewController(trackerVC, animated: true)
+ }
+}
+
+extension AnalyticsDisplayViewController {
+
+ static func storyboardInit() -> T {
+ return UIStoryboard.mainStoryboard.instantiateViewController(AnalyticsDisplayViewController.storyboardID)
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/AppDelegate.swift b/SimcoeExample/SimcoeExample/AppDelegate.swift
new file mode 100644
index 0000000..ed0eb82
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/AppDelegate.swift
@@ -0,0 +1,20 @@
+//
+// AppDelegate.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/21/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import UIKit
+
+@UIApplicationMain
+class AppDelegate: UIResponder, UIApplicationDelegate {
+
+ var window: UIWindow?
+
+ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
+ window = SimcoeExampleApplication().startWindow()
+ return true
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/Assets.xcassets/AppIcon.appiconset/Contents.json b/SimcoeExample/SimcoeExample/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..b8236c6
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,48 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/SimcoeExample/SimcoeExample/Base.lproj/LaunchScreen.storyboard b/SimcoeExample/SimcoeExample/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000..fdf3f97
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SimcoeExample/SimcoeExample/Base.lproj/Main.storyboard b/SimcoeExample/SimcoeExample/Base.lproj/Main.storyboard
new file mode 100644
index 0000000..7639b05
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/Base.lproj/Main.storyboard
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SimcoeExample/SimcoeExample/Builders/AnalyticsDisplayBuilder.swift b/SimcoeExample/SimcoeExample/Builders/AnalyticsDisplayBuilder.swift
new file mode 100644
index 0000000..32ba8f9
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/Builders/AnalyticsDisplayBuilder.swift
@@ -0,0 +1,41 @@
+//
+// AnalyticsDisplayBuilder.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/23/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+
+internal class AnalyticsDisplayBuilder {
+
+ let analyticsEngine: AnalyticsEngine = SimcoeAnalyticsEngine()
+
+ lazy var availableTrackers: AvailableTrackers = {
+ return AvailableTrackers(engine: self.analyticsEngine)
+ }()
+
+ lazy var providers: AnalyticsProviders = {
+ return AnalyticsProviders(engine: self.analyticsEngine, availableActions: self.availableTrackers.actions)
+ }()
+
+ init() {
+ let particle = mParticle(key: "mikesaidtomakeafakeone", secret: "hiyoseob")
+ let adobe = Adobe()
+
+ providers.addTracker(name: adobe.name, providers: [adobe])
+ providers.addTracker(name: particle.name, providers: [particle])
+ providers.addTracker(name: "All Analytics Trackers", providers: [adobe, particle])
+ providers.addTracker(name: "None", providers: [])
+ }
+
+ func analyticsDisplayViewController() -> AnalyticsDisplayViewController {
+ let rootViewController: AnalyticsDisplayViewController = AnalyticsDisplayViewController.storyboardInit()
+ rootViewController.analyticsEngine = analyticsEngine
+ rootViewController.providers = providers
+
+ return rootViewController
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/Extensions/UIStoryboardExtension.swift b/SimcoeExample/SimcoeExample/Extensions/UIStoryboardExtension.swift
new file mode 100644
index 0000000..7ae9d97
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/Extensions/UIStoryboardExtension.swift
@@ -0,0 +1,24 @@
+//
+// UIStoryboardExtension.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/23/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import UIKit
+
+extension UIStoryboard {
+
+ static var mainStoryboard: UIStoryboard {
+ return UIStoryboard(name: "Main", bundle: nil)
+ }
+
+ static var trackerStoryboard: UIStoryboard {
+ return UIStoryboard(name: "Tracker", bundle: nil)
+ }
+
+ func instantiateViewController(_ identifier: String) -> T {
+ return self.instantiateViewController(withIdentifier: identifier) as! T
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/Extensions/UIViewControllerExtension.swift b/SimcoeExample/SimcoeExample/Extensions/UIViewControllerExtension.swift
new file mode 100644
index 0000000..d02ee05
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/Extensions/UIViewControllerExtension.swift
@@ -0,0 +1,16 @@
+//
+// UIViewControllerExtension.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/23/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import UIKit
+
+extension UIViewController {
+
+ static var storyboardID: String {
+ return String(describing: self)
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/Helper Classes/AnalyticsProviders.swift b/SimcoeExample/SimcoeExample/Helper Classes/AnalyticsProviders.swift
new file mode 100644
index 0000000..be058ca
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/Helper Classes/AnalyticsProviders.swift
@@ -0,0 +1,36 @@
+//
+// AnalyticsProviders.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/23/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+
+internal class AnalyticsProviders {
+
+ var trackers: [AnalyticsTracker] = []
+
+ private let availableActions: [TrackerAction]
+
+ private var engine: AnalyticsEngine
+
+ init(engine: AnalyticsEngine, availableActions: [TrackerAction]) {
+ self.engine = engine
+ self.availableActions = availableActions
+ }
+
+ func addTracker(name: String, providers: [AnalyticsTracking]) {
+ guard !providers.isEmpty else {
+ self.trackers.append(AnalyticsTracker(providers: providers, actions: availableActions, name: name))
+ return
+ }
+
+ let actionGenerator = TrackerActionGenerator(engine: engine, availableTrackerActions: availableActions)
+ let actions = actionGenerator.trackerActions(providers: providers)
+
+ self.trackers.append(AnalyticsTracker(providers: providers, actions: actions, name: name))
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/Helper Classes/AnalyticsTracker.swift b/SimcoeExample/SimcoeExample/Helper Classes/AnalyticsTracker.swift
new file mode 100644
index 0000000..a47072f
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/Helper Classes/AnalyticsTracker.swift
@@ -0,0 +1,25 @@
+//
+// AnalyticsTracker.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/22/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+
+internal class AnalyticsTracker {
+
+ var providers: [AnalyticsTracking]
+
+ var actions: [TrackerAction]
+
+ var name: String
+
+ init(providers: [AnalyticsTracking], actions: [TrackerAction], name: String) {
+ self.providers = providers
+ self.actions = actions
+ self.name = name
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/Helper Classes/AvailableTrackers.swift b/SimcoeExample/SimcoeExample/Helper Classes/AvailableTrackers.swift
new file mode 100644
index 0000000..cf7b9cf
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/Helper Classes/AvailableTrackers.swift
@@ -0,0 +1,32 @@
+//
+// AvailableTrackers.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/23/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+
+internal class AvailableTrackers {
+
+ lazy var actions: [TrackerAction] = {
+ return [EventTrackerAction(engine: self.engine),
+ LocationTrackingAction(engine: self.engine),
+ LifetimeValueIncreasingAction(engine: self.engine),
+ PageViewTrackingAction(engine: self.engine),
+ AddToCartLoggingAction(engine: self.engine),
+ RemoveFromCartAction(engine: self.engine),
+ CheckoutTrackingAction(engine: self.engine),
+ ErrorLoggingAction(engine: self.engine),
+ PurchaseTrackingAction(engine: self.engine),
+ UserAttributeTrackingAction(engine: self.engine),
+ ViewDetailLoggingAction(engine: self.engine)]
+ }()
+
+ private var engine: AnalyticsEngine
+
+ init(engine: AnalyticsEngine) {
+ self.engine = engine
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/Helper Classes/SampleProduct.swift b/SimcoeExample/SimcoeExample/Helper Classes/SampleProduct.swift
new file mode 100644
index 0000000..c455d5f
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/Helper Classes/SampleProduct.swift
@@ -0,0 +1,17 @@
+//
+// SampleProduct.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/23/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+
+struct SampleProduct: SimcoeProductConvertible {
+
+ func toSimcoeProduct() -> SimcoeProduct {
+ return SimcoeProduct(productName: "Fancy Dress", productId: "256489", quantity: 2, price: 100, properties: nil)
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/Helper Classes/TrackerActionGenerator.swift b/SimcoeExample/SimcoeExample/Helper Classes/TrackerActionGenerator.swift
new file mode 100644
index 0000000..9fecc9f
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/Helper Classes/TrackerActionGenerator.swift
@@ -0,0 +1,38 @@
+//
+// TrackerActionGenerator.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/23/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+
+internal final class TrackerActionGenerator: ActionGenerator {
+
+ private var engine: AnalyticsEngine
+
+ private var availableTrackerActions: [TrackerAction]
+
+ init(engine: AnalyticsEngine, availableTrackerActions: [TrackerAction]) {
+ self.engine = engine
+ self.availableTrackerActions = availableTrackerActions
+ }
+
+ func trackerActions(providers: [AnalyticsTracking]) -> [TrackerAction] {
+ var actions: [TrackerAction] = []
+
+ for provider in providers {
+ for action in availableTrackerActions {
+ if action.isActionAvailable(provider: provider) == true &&
+ action.isContainedIn(actions: actions) == false {
+
+ actions.append(action)
+ }
+ }
+ }
+
+ return actions
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/Info.plist b/SimcoeExample/SimcoeExample/Info.plist
new file mode 100644
index 0000000..38e98af
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/Info.plist
@@ -0,0 +1,38 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+ LSRequiresIPhoneOS
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIMainStoryboardFile
+ Main
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+
+
diff --git a/SimcoeExample/SimcoeExample/Protocols/ActionGenerator.swift b/SimcoeExample/SimcoeExample/Protocols/ActionGenerator.swift
new file mode 100644
index 0000000..06e31bf
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/Protocols/ActionGenerator.swift
@@ -0,0 +1,15 @@
+//
+// ActionGenerator.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/23/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+
+internal protocol ActionGenerator {
+
+ func trackerActions(providers: [AnalyticsTracking]) -> [TrackerAction]
+}
diff --git a/SimcoeExample/SimcoeExample/Protocols/AnalyticsEngine.swift b/SimcoeExample/SimcoeExample/Protocols/AnalyticsEngine.swift
new file mode 100644
index 0000000..1cdf23a
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/Protocols/AnalyticsEngine.swift
@@ -0,0 +1,40 @@
+//
+// AnalyticsEngine.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/22/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+import CoreLocation
+
+internal protocol AnalyticsEngine {
+
+ func run(with providers: [AnalyticsTracking])
+
+ func track(event: String, withAdditionalProperties properties: Properties?)
+
+ func trackLifetimeIncrease(byAmount amount: Double,
+ forItem item: String?,
+ withAdditionalProperties properties: Properties?)
+
+ func track(location: CLLocation, withAdditionalProperties properties: Properties?)
+
+ func track(pageView: String, withAdditionalProperties properties: Properties?)
+
+ func logAddToCart(_ product: T, eventProperties: Properties?)
+
+ func logRemoveFromCart(_ product: T, eventProperties: Properties?)
+
+ func trackCheckoutEvent(_ products: [T], eventProperties: Properties?)
+
+ func log(error: String, withAdditionalProperties properties: Properties?)
+
+ func trackPurchaseEvent(_ products: [T], eventProperties: Properties?)
+
+ func setUserAttribute(_ key: String, value: AnyObject)
+
+ func logViewDetail(_ product: T, eventProperties: Properties?)
+}
diff --git a/SimcoeExample/SimcoeExample/Protocols/TrackerAction.swift b/SimcoeExample/SimcoeExample/Protocols/TrackerAction.swift
new file mode 100644
index 0000000..df58981
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/Protocols/TrackerAction.swift
@@ -0,0 +1,36 @@
+//
+// TrackerAction.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/22/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+
+internal protocol TrackerAction {
+
+ var name: String { get }
+
+ var defaultProperties: Properties { get }
+
+ func isActionAvailable(provider: AnalyticsTracking) -> Bool
+
+ func track()
+
+ func isContainedIn(actions: [TrackerAction]) -> Bool
+}
+
+extension TrackerAction {
+
+ var defaultProperties: Properties {
+ return ["Location" : "Tracker Page"]
+ }
+
+ func isContainedIn(actions: [TrackerAction]) -> Bool {
+ return actions.contains(where: { (arrayAction) -> Bool in
+ return name == arrayAction.name
+ })
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/SimcoeExampleApplication.swift b/SimcoeExample/SimcoeExample/SimcoeExampleApplication.swift
new file mode 100644
index 0000000..3bab547
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/SimcoeExampleApplication.swift
@@ -0,0 +1,23 @@
+//
+// SimcoeExampleApplication.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/23/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import UIKit
+
+internal class SimcoeExampleApplication {
+
+ func startWindow() -> UIWindow {
+ let window = UIWindow()
+
+ let rootViewController = AnalyticsDisplayBuilder().analyticsDisplayViewController()
+ let navigationViewController = UINavigationController(rootViewController: rootViewController)
+
+ window.rootViewController = navigationViewController
+
+ return window
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/Tracker.storyboard b/SimcoeExample/SimcoeExample/Tracker.storyboard
new file mode 100644
index 0000000..1828a24
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/Tracker.storyboard
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SimcoeExample/SimcoeExample/TrackerActions/AddToCartLoggingAction.swift b/SimcoeExample/SimcoeExample/TrackerActions/AddToCartLoggingAction.swift
new file mode 100644
index 0000000..12e2a79
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/TrackerActions/AddToCartLoggingAction.swift
@@ -0,0 +1,31 @@
+//
+// AddToCartLoggingAction.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/23/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+
+internal final class AddToCartLoggingAction: TrackerAction {
+
+ var name: String {
+ return "Track Add to Cart Logging"
+ }
+
+ private var engine: AnalyticsEngine
+
+ init(engine: AnalyticsEngine) {
+ self.engine = engine
+ }
+
+ func isActionAvailable(provider: AnalyticsTracking) -> Bool {
+ return provider is CartLogging
+ }
+
+ func track() {
+ engine.logAddToCart(SampleProduct(), eventProperties: defaultProperties)
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/TrackerActions/CheckoutTrackingAction.swift b/SimcoeExample/SimcoeExample/TrackerActions/CheckoutTrackingAction.swift
new file mode 100644
index 0000000..cb8ee2a
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/TrackerActions/CheckoutTrackingAction.swift
@@ -0,0 +1,31 @@
+//
+// CheckoutTrackingAction.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/23/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+
+internal final class CheckoutTrackingAction: TrackerAction {
+
+ var name: String {
+ return "Track Checkout Event"
+ }
+
+ private var engine: AnalyticsEngine
+
+ init(engine: AnalyticsEngine) {
+ self.engine = engine
+ }
+
+ func isActionAvailable(provider: AnalyticsTracking) -> Bool {
+ return provider is CheckoutTracking
+ }
+
+ func track() {
+ engine.trackCheckoutEvent([SampleProduct()], eventProperties: defaultProperties)
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/TrackerActions/ErrorLoggingAction.swift b/SimcoeExample/SimcoeExample/TrackerActions/ErrorLoggingAction.swift
new file mode 100644
index 0000000..e856a9a
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/TrackerActions/ErrorLoggingAction.swift
@@ -0,0 +1,31 @@
+//
+// ErrorLoggingAction.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/23/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+
+internal final class ErrorLoggingAction: TrackerAction {
+
+ var name: String {
+ return "Track Error Logging"
+ }
+
+ private var engine: AnalyticsEngine
+
+ init(engine: AnalyticsEngine) {
+ self.engine = engine
+ }
+
+ func isActionAvailable(provider: AnalyticsTracking) -> Bool {
+ return provider is ErrorLogging
+ }
+
+ func track() {
+ engine.log(error: "Sample Error Message", withAdditionalProperties: defaultProperties)
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/TrackerActions/EventTrackerAction.swift b/SimcoeExample/SimcoeExample/TrackerActions/EventTrackerAction.swift
new file mode 100644
index 0000000..21284e8
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/TrackerActions/EventTrackerAction.swift
@@ -0,0 +1,35 @@
+//
+// EventTrackerAction.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/22/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+import mParticle_Apple_SDK
+
+internal class EventTrackerAction: TrackerAction {
+
+ var name: String {
+ return "Track Event"
+ }
+
+ private var engine: AnalyticsEngine
+
+ init(engine: AnalyticsEngine) {
+ self.engine = engine
+ }
+
+ func isActionAvailable(provider: AnalyticsTracking) -> Bool {
+ return provider is EventTracking
+ }
+
+ func track() {
+ var eventDataProperties: Properties = MPEvent.eventData(type: .other, name: "")
+ eventDataProperties["Location"] = "Tracker Page"
+
+ engine.track(event: "Tapped Track Event", withAdditionalProperties: eventDataProperties)
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/TrackerActions/LifetimeValueIncreasingAction.swift b/SimcoeExample/SimcoeExample/TrackerActions/LifetimeValueIncreasingAction.swift
new file mode 100644
index 0000000..3f3c069
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/TrackerActions/LifetimeValueIncreasingAction.swift
@@ -0,0 +1,33 @@
+//
+// LifetimeValueIncreasingAction.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/22/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+
+internal class LifetimeValueIncreasingAction: TrackerAction {
+
+ var name: String {
+ return "Track Lifetime Value Increase"
+ }
+
+ private var engine: AnalyticsEngine
+
+ init(engine: AnalyticsEngine) {
+ self.engine = engine
+ }
+
+ func isActionAvailable(provider: AnalyticsTracking) -> Bool {
+ return provider is LifetimeValueIncreasing
+ }
+
+ func track() {
+ engine.trackLifetimeIncrease(byAmount: 1,
+ forItem: "Track Lifetime Value Tapped",
+ withAdditionalProperties: defaultProperties)
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/TrackerActions/LocationTrackingAction.swift b/SimcoeExample/SimcoeExample/TrackerActions/LocationTrackingAction.swift
new file mode 100644
index 0000000..66c0e2e
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/TrackerActions/LocationTrackingAction.swift
@@ -0,0 +1,33 @@
+//
+// LocationTrackingAction.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/22/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+import CoreLocation
+
+internal class LocationTrackingAction: TrackerAction {
+
+ var name: String {
+ return "Track Location"
+ }
+
+ private var engine: AnalyticsEngine
+
+ init(engine: AnalyticsEngine) {
+ self.engine = engine
+ }
+
+ func isActionAvailable(provider: AnalyticsTracking) -> Bool {
+ return provider is LocationTracking
+ }
+
+ func track() {
+ let location = CLLocation(latitude: 40.7128, longitude: 74.0059)
+ engine.track(location: location, withAdditionalProperties: defaultProperties)
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/TrackerActions/PageViewTrackingAction.swift b/SimcoeExample/SimcoeExample/TrackerActions/PageViewTrackingAction.swift
new file mode 100644
index 0000000..6230ad4
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/TrackerActions/PageViewTrackingAction.swift
@@ -0,0 +1,31 @@
+//
+// PageViewTrackingAction.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/22/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+
+internal class PageViewTrackingAction: TrackerAction {
+
+ var name: String {
+ return "Track Page View"
+ }
+
+ private var engine: AnalyticsEngine
+
+ init(engine: AnalyticsEngine) {
+ self.engine = engine
+ }
+
+ func isActionAvailable(provider: AnalyticsTracking) -> Bool {
+ return provider is PageViewTracking
+ }
+
+ func track() {
+ engine.track(pageView: "Tracker Selection Page View", withAdditionalProperties: defaultProperties)
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/TrackerActions/PurchaseTrackingAction.swift b/SimcoeExample/SimcoeExample/TrackerActions/PurchaseTrackingAction.swift
new file mode 100644
index 0000000..53aadf2
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/TrackerActions/PurchaseTrackingAction.swift
@@ -0,0 +1,32 @@
+//
+// PurchaseTrackingAction.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/23/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+
+internal final class PurchaseTrackingAction: TrackerAction {
+
+ var name: String {
+ return "Track Purchase"
+ }
+
+ private var engine: AnalyticsEngine
+
+ init(engine: AnalyticsEngine) {
+ self.engine = engine
+ }
+
+ func isActionAvailable(provider: AnalyticsTracking) -> Bool {
+ return provider is PurchaseTracking
+ }
+
+ func track() {
+ engine.trackPurchaseEvent([SampleProduct()], eventProperties: defaultProperties)
+ }
+}
+
diff --git a/SimcoeExample/SimcoeExample/TrackerActions/RemoveFromCartAction.swift b/SimcoeExample/SimcoeExample/TrackerActions/RemoveFromCartAction.swift
new file mode 100644
index 0000000..1deac20
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/TrackerActions/RemoveFromCartAction.swift
@@ -0,0 +1,31 @@
+//
+// RemoveFromCartAction.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/23/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+
+internal final class RemoveFromCartAction: TrackerAction {
+
+ var name: String {
+ return "Track Remove from Cart Logging"
+ }
+
+ private var engine: AnalyticsEngine
+
+ init(engine: AnalyticsEngine) {
+ self.engine = engine
+ }
+
+ func isActionAvailable(provider: AnalyticsTracking) -> Bool {
+ return provider is CartLogging
+ }
+
+ func track() {
+ engine.logRemoveFromCart(SampleProduct(), eventProperties: defaultProperties)
+ }
+}
diff --git a/SimcoeExample/SimcoeExample/TrackerActions/UserAttributeTrackingAction.swift b/SimcoeExample/SimcoeExample/TrackerActions/UserAttributeTrackingAction.swift
new file mode 100644
index 0000000..c97e882
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/TrackerActions/UserAttributeTrackingAction.swift
@@ -0,0 +1,32 @@
+//
+// UserAttributeTrackingAction.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/23/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+
+internal final class UserAttributeTrackingAction: TrackerAction {
+
+ var name: String {
+ return "Track Set User Attribute"
+ }
+
+ private var engine: AnalyticsEngine
+
+ init(engine: AnalyticsEngine) {
+ self.engine = engine
+ }
+
+ func isActionAvailable(provider: AnalyticsTracking) -> Bool {
+ return provider is UserAttributeTracking
+ }
+
+ func track() {
+ engine.setUserAttribute("Logged In Type", value: "Email" as AnyObject)
+ }
+}
+
diff --git a/SimcoeExample/SimcoeExample/TrackerActions/ViewDetailLoggingAction.swift b/SimcoeExample/SimcoeExample/TrackerActions/ViewDetailLoggingAction.swift
new file mode 100644
index 0000000..83db2bd
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/TrackerActions/ViewDetailLoggingAction.swift
@@ -0,0 +1,32 @@
+//
+// ViewDetailLoggingAction.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/23/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import Foundation
+import Simcoe
+
+internal final class ViewDetailLoggingAction: TrackerAction {
+
+ var name: String {
+ return "Track Purchase"
+ }
+
+ private var engine: AnalyticsEngine
+
+ init(engine: AnalyticsEngine) {
+ self.engine = engine
+ }
+
+ func isActionAvailable(provider: AnalyticsTracking) -> Bool {
+ return provider is ViewDetailLogging
+ }
+
+ func track() {
+ engine.logViewDetail(SampleProduct(), eventProperties: defaultProperties)
+ }
+}
+
diff --git a/SimcoeExample/SimcoeExample/TrackerTableViewController.swift b/SimcoeExample/SimcoeExample/TrackerTableViewController.swift
new file mode 100644
index 0000000..55d0443
--- /dev/null
+++ b/SimcoeExample/SimcoeExample/TrackerTableViewController.swift
@@ -0,0 +1,40 @@
+//
+// TrackerTableViewController.swift
+// SimcoeExample
+//
+// Created by Jonathan Samudio on 2/21/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import UIKit
+import Simcoe
+
+internal final class TrackerTableViewController: UITableViewController {
+
+ var trackers: [TrackerAction]!
+}
+
+extension TrackerTableViewController {
+
+ override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+ return trackers.count
+ }
+
+ override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+ let cell = UITableViewCell()
+ cell.textLabel?.text = trackers[indexPath.row].name
+ return cell
+ }
+
+ override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+ tableView.deselectRow(at: indexPath, animated: true)
+ trackers[indexPath.row].track()
+ }
+}
+
+extension TrackerTableViewController {
+
+ static func storyboardInit() -> T {
+ return UIStoryboard.trackerStoryboard.instantiateViewController(TrackerTableViewController.storyboardID)
+ }
+}
diff --git a/SimcoeExample/SimcoeExampleTests/Info.plist b/SimcoeExample/SimcoeExampleTests/Info.plist
new file mode 100644
index 0000000..6c6c23c
--- /dev/null
+++ b/SimcoeExample/SimcoeExampleTests/Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/SimcoeExample/SimcoeExampleTests/SimcoeExampleTests.swift b/SimcoeExample/SimcoeExampleTests/SimcoeExampleTests.swift
new file mode 100644
index 0000000..6bfc97f
--- /dev/null
+++ b/SimcoeExample/SimcoeExampleTests/SimcoeExampleTests.swift
@@ -0,0 +1,36 @@
+//
+// SimcoeExampleTests.swift
+// SimcoeExampleTests
+//
+// Created by Jonathan Samudio on 2/21/17.
+// Copyright © 2017 Prolific Interactive. All rights reserved.
+//
+
+import XCTest
+@testable import SimcoeExample
+
+class SimcoeExampleTests: XCTestCase {
+
+ override func setUp() {
+ super.setUp()
+ // Put setup code here. This method is called before the invocation of each test method in the class.
+ }
+
+ override func tearDown() {
+ // Put teardown code here. This method is called after the invocation of each test method in the class.
+ super.tearDown()
+ }
+
+ func testExample() {
+ // This is an example of a functional test case.
+ // Use XCTAssert and related functions to verify your tests produce the correct results.
+ }
+
+ func testPerformanceExample() {
+ // This is an example of a performance test case.
+ self.measure {
+ // Put the code you want to measure the time of here.
+ }
+ }
+
+}
diff --git a/SimcoeTests/mParticle/MPEventTests.swift b/SimcoeTests/mParticle/MPEventTests.swift
index e4ad728..6b3ed5d 100644
--- a/SimcoeTests/mParticle/MPEventTests.swift
+++ b/SimcoeTests/mParticle/MPEventTests.swift
@@ -98,16 +98,6 @@ class MPEventTests: XCTestCase {
"Expected result = \(expected); got \(eventError)")
}
- func test_that_MPEvent_has_type() {
- let type = MPEventType.media
-
- let data = MPEvent.eventData(type: type, name: "Event Type")
- let result = try! MPEvent.toEvent(usingData: data)
-
- XCTAssertEqual(result.type, type,
- "Expected result = \(type); got \(result.type)")
- }
-
func test_that_MPEvent_has_name() {
let name = "Hello, World"
diff --git a/mParticleExample/mParticleExample.xcodeproj/project.pbxproj b/mParticleExample/mParticleExample.xcodeproj/project.pbxproj
deleted file mode 100644
index b68e688..0000000
--- a/mParticleExample/mParticleExample.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,383 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 46;
- objects = {
-
-/* Begin PBXBuildFile section */
- 0C0460CC4E74C7C1DAF81892 /* Pods_mParticleExample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 075A0BE6B064899013AA2BA0 /* Pods_mParticleExample.framework */; };
- 270708AE1DBFF5E200A7F4BA /* ExampleProduct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 270708AD1DBFF5E200A7F4BA /* ExampleProduct.swift */; };
- 723FD4CF1C77FEB70069622D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 723FD4CE1C77FEB70069622D /* AppDelegate.swift */; };
- 723FD4D11C77FEB70069622D /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 723FD4D01C77FEB70069622D /* ViewController.swift */; };
- 723FD4D41C77FEB70069622D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 723FD4D21C77FEB70069622D /* Main.storyboard */; };
- 723FD4D61C77FEB70069622D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 723FD4D51C77FEB70069622D /* Assets.xcassets */; };
- 723FD4D91C77FEB70069622D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 723FD4D71C77FEB70069622D /* LaunchScreen.storyboard */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXFileReference section */
- 075A0BE6B064899013AA2BA0 /* Pods_mParticleExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_mParticleExample.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 270708AD1DBFF5E200A7F4BA /* ExampleProduct.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExampleProduct.swift; sourceTree = ""; };
- 723FD4CB1C77FEB70069622D /* mParticleExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = mParticleExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
- 723FD4CE1C77FEB70069622D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
- 723FD4D01C77FEB70069622D /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
- 723FD4D31C77FEB70069622D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
- 723FD4D51C77FEB70069622D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
- 723FD4D81C77FEB70069622D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
- 723FD4DA1C77FEB70069622D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 7953BD23412008F4D96AB8C6 /* Pods-mParticleExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-mParticleExample.release.xcconfig"; path = "../Pods/Target Support Files/Pods-mParticleExample/Pods-mParticleExample.release.xcconfig"; sourceTree = ""; };
- C1516C30BC7AB9E7D447DE08 /* Pods-mParticleExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-mParticleExample.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-mParticleExample/Pods-mParticleExample.debug.xcconfig"; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 723FD4C81C77FEB70069622D /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 0C0460CC4E74C7C1DAF81892 /* Pods_mParticleExample.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 723FD4C21C77FEB70069622D = {
- isa = PBXGroup;
- children = (
- 723FD4CD1C77FEB70069622D /* mParticleExample */,
- 723FD4CC1C77FEB70069622D /* Products */,
- 9D25F56F56EFF94CD6F44EB2 /* Pods */,
- A4909BDFF000BCFF71573AEC /* Frameworks */,
- );
- sourceTree = "";
- };
- 723FD4CC1C77FEB70069622D /* Products */ = {
- isa = PBXGroup;
- children = (
- 723FD4CB1C77FEB70069622D /* mParticleExample.app */,
- );
- name = Products;
- sourceTree = "";
- };
- 723FD4CD1C77FEB70069622D /* mParticleExample */ = {
- isa = PBXGroup;
- children = (
- 723FD4CE1C77FEB70069622D /* AppDelegate.swift */,
- 723FD4D01C77FEB70069622D /* ViewController.swift */,
- 723FD4D21C77FEB70069622D /* Main.storyboard */,
- 723FD4D51C77FEB70069622D /* Assets.xcassets */,
- 723FD4D71C77FEB70069622D /* LaunchScreen.storyboard */,
- 723FD4DA1C77FEB70069622D /* Info.plist */,
- 270708AD1DBFF5E200A7F4BA /* ExampleProduct.swift */,
- );
- path = mParticleExample;
- sourceTree = "";
- };
- 9D25F56F56EFF94CD6F44EB2 /* Pods */ = {
- isa = PBXGroup;
- children = (
- C1516C30BC7AB9E7D447DE08 /* Pods-mParticleExample.debug.xcconfig */,
- 7953BD23412008F4D96AB8C6 /* Pods-mParticleExample.release.xcconfig */,
- );
- name = Pods;
- sourceTree = "";
- };
- A4909BDFF000BCFF71573AEC /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- 075A0BE6B064899013AA2BA0 /* Pods_mParticleExample.framework */,
- );
- name = Frameworks;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
- 723FD4CA1C77FEB70069622D /* mParticleExample */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 723FD4DD1C77FEB70069622D /* Build configuration list for PBXNativeTarget "mParticleExample" */;
- buildPhases = (
- 820C1B8E4D0C443BE9D548B8 /* [CP] Check Pods Manifest.lock */,
- 723FD4C71C77FEB70069622D /* Sources */,
- 723FD4C81C77FEB70069622D /* Frameworks */,
- 723FD4C91C77FEB70069622D /* Resources */,
- C903A518F64670F7E00F34D0 /* [CP] Embed Pods Frameworks */,
- 19D1A593ECFE3C73C235148A /* [CP] Copy Pods Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = mParticleExample;
- productName = mParticleExample;
- productReference = 723FD4CB1C77FEB70069622D /* mParticleExample.app */;
- productType = "com.apple.product-type.application";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 723FD4C31C77FEB70069622D /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastSwiftUpdateCheck = 0720;
- LastUpgradeCheck = 0800;
- ORGANIZATIONNAME = "Prolific Interactive";
- TargetAttributes = {
- 723FD4CA1C77FEB70069622D = {
- CreatedOnToolsVersion = 7.2;
- LastSwiftMigration = 0800;
- };
- };
- };
- buildConfigurationList = 723FD4C61C77FEB70069622D /* Build configuration list for PBXProject "mParticleExample" */;
- compatibilityVersion = "Xcode 3.2";
- developmentRegion = English;
- hasScannedForEncodings = 0;
- knownRegions = (
- en,
- Base,
- );
- mainGroup = 723FD4C21C77FEB70069622D;
- productRefGroup = 723FD4CC1C77FEB70069622D /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 723FD4CA1C77FEB70069622D /* mParticleExample */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 723FD4C91C77FEB70069622D /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 723FD4D91C77FEB70069622D /* LaunchScreen.storyboard in Resources */,
- 723FD4D61C77FEB70069622D /* Assets.xcassets in Resources */,
- 723FD4D41C77FEB70069622D /* Main.storyboard in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
- 19D1A593ECFE3C73C235148A /* [CP] Copy Pods Resources */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "[CP] Copy Pods Resources";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${SRCROOT}/../Pods/Target Support Files/Pods-mParticleExample/Pods-mParticleExample-resources.sh\"\n";
- showEnvVarsInLog = 0;
- };
- 820C1B8E4D0C443BE9D548B8 /* [CP] Check Pods Manifest.lock */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "[CP] Check Pods Manifest.lock";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n";
- showEnvVarsInLog = 0;
- };
- C903A518F64670F7E00F34D0 /* [CP] Embed Pods Frameworks */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "[CP] Embed Pods Frameworks";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${SRCROOT}/../Pods/Target Support Files/Pods-mParticleExample/Pods-mParticleExample-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
- };
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 723FD4C71C77FEB70069622D /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 723FD4D11C77FEB70069622D /* ViewController.swift in Sources */,
- 723FD4CF1C77FEB70069622D /* AppDelegate.swift in Sources */,
- 270708AE1DBFF5E200A7F4BA /* ExampleProduct.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXVariantGroup section */
- 723FD4D21C77FEB70069622D /* Main.storyboard */ = {
- isa = PBXVariantGroup;
- children = (
- 723FD4D31C77FEB70069622D /* Base */,
- );
- name = Main.storyboard;
- sourceTree = "";
- };
- 723FD4D71C77FEB70069622D /* LaunchScreen.storyboard */ = {
- isa = PBXVariantGroup;
- children = (
- 723FD4D81C77FEB70069622D /* Base */,
- );
- name = LaunchScreen.storyboard;
- sourceTree = "";
- };
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
- 723FD4DB1C77FEB70069622D /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = dwarf;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- 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 = 9.2;
- MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = iphoneos;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 3.0;
- };
- name = Debug;
- };
- 723FD4DC1C77FEB70069622D /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- 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 = 9.2;
- MTL_ENABLE_DEBUG_INFO = NO;
- SDKROOT = iphoneos;
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
- SWIFT_VERSION = 3.0;
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- 723FD4DE1C77FEB70069622D /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = C1516C30BC7AB9E7D447DE08 /* Pods-mParticleExample.debug.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- INFOPLIST_FILE = mParticleExample/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = com.prolificinteractive.mParticleExample;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_VERSION = 3.0;
- };
- name = Debug;
- };
- 723FD4DF1C77FEB70069622D /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 7953BD23412008F4D96AB8C6 /* Pods-mParticleExample.release.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- INFOPLIST_FILE = mParticleExample/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = com.prolificinteractive.mParticleExample;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_VERSION = 3.0;
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 723FD4C61C77FEB70069622D /* Build configuration list for PBXProject "mParticleExample" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 723FD4DB1C77FEB70069622D /* Debug */,
- 723FD4DC1C77FEB70069622D /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 723FD4DD1C77FEB70069622D /* Build configuration list for PBXNativeTarget "mParticleExample" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 723FD4DE1C77FEB70069622D /* Debug */,
- 723FD4DF1C77FEB70069622D /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = 723FD4C31C77FEB70069622D /* Project object */;
-}
diff --git a/mParticleExample/mParticleExample.xcodeproj/xcshareddata/xcschemes/mParticleExample.xcscheme b/mParticleExample/mParticleExample.xcodeproj/xcshareddata/xcschemes/mParticleExample.xcscheme
deleted file mode 100644
index 1070fd9..0000000
--- a/mParticleExample/mParticleExample.xcodeproj/xcshareddata/xcschemes/mParticleExample.xcscheme
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-