From 3bb4b324296dacdaacf4f8dc1bec8ec5c5bcd765 Mon Sep 17 00:00:00 2001 From: Oguzhan Unlu Date: Fri, 27 Sep 2019 16:10:33 +0300 Subject: [PATCH 01/13] Fix incomplete device model information (close #444) --- Snowplow/SPUtilities.m | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/Snowplow/SPUtilities.m b/Snowplow/SPUtilities.m index fbf8906e0..b0efea76d 100644 --- a/Snowplow/SPUtilities.m +++ b/Snowplow/SPUtilities.m @@ -25,6 +25,7 @@ #import "SPPayload.h" #import "SPSelfDescribingJson.h" #import "SPScreenState.h" +#include #if SNOWPLOW_TARGET_IOS @@ -39,7 +40,6 @@ #import #import -#include #elif SNOWPLOW_TARGET_TV @@ -170,18 +170,13 @@ + (NSString *) getDeviceVendor { } + (NSString *) getDeviceModel { -#if SNOWPLOW_TARGET_IOS || SNOWPLOW_TARGET_TV - return [[UIDevice currentDevice] model]; -#else size_t size; - char *model = nil; - sysctlbyname("hw.model", NULL, &size, NULL, 0); - model = malloc(size); - sysctlbyname("hw.model", model, &size, NULL, 0); - NSString *hwString = [NSString stringWithCString:model encoding:NSUTF8StringEncoding]; - free(model); - return hwString; -#endif + sysctlbyname("hw.machine", NULL, &size, NULL, 0); + char *machine = malloc(size); + sysctlbyname("hw.machine", machine, &size, NULL, 0); + NSString *platform = [NSString stringWithUTF8String:machine]; + free(machine); + return platform; } + (NSString *) getOSVersion { From 9985f019b0b8c526b605f8ae71ba4d275e452da4 Mon Sep 17 00:00:00 2001 From: Oguzhan Unlu Date: Mon, 21 Oct 2019 12:51:39 +0300 Subject: [PATCH 02/13] Comply with isAdvertisingTrackingEnabled (close #447) --- Snowplow/SPUtilities.m | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Snowplow/SPUtilities.m b/Snowplow/SPUtilities.m index b0efea76d..e51c17e4f 100644 --- a/Snowplow/SPUtilities.m +++ b/Snowplow/SPUtilities.m @@ -29,6 +29,7 @@ #if SNOWPLOW_TARGET_IOS +@import AdSupport; #import "OpenIDFA.h" #import #import @@ -43,6 +44,7 @@ #elif SNOWPLOW_TARGET_TV +@import AdSupport; #import #endif @@ -87,13 +89,9 @@ + (NSString *) getAppleIdfa { NSString* idfa = nil; #if SNOWPLOW_TARGET_IOS || SNOWPLOW_TARGET_TV #ifndef SNOWPLOW_NO_IFA - Class ASIdentifierManagerClass = NSClassFromString(@"ASIdentifierManager"); - if (ASIdentifierManagerClass) { - SEL sharedManagerSelector = NSSelectorFromString(@"sharedManager"); - id sharedManager = ((id (*)(id, SEL))[ASIdentifierManagerClass methodForSelector:sharedManagerSelector])(ASIdentifierManagerClass, sharedManagerSelector); - SEL advertisingIdentifierSelector = NSSelectorFromString(@"advertisingIdentifier"); - NSUUID *uuid = ((NSUUID* (*)(id, SEL))[sharedManager methodForSelector:advertisingIdentifierSelector])(sharedManager, advertisingIdentifierSelector); - idfa = [uuid UUIDString]; + if([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) { + NSUUID *identifier = [[ASIdentifierManager sharedManager] advertisingIdentifier]; + idfa = [identifier UUIDString]; } #endif #endif From d44f1bba0ffbd1366558b44267a501ea6bb6f749 Mon Sep 17 00:00:00 2001 From: Oguzhan Unlu Date: Mon, 21 Oct 2019 13:32:44 +0300 Subject: [PATCH 03/13] Fix Nocilla at 0.11 (close #455) --- Podfile | 4 ++-- Podfile.lock | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Podfile b/Podfile index d8eef0499..40e16bba3 100644 --- a/Podfile +++ b/Podfile @@ -20,13 +20,13 @@ end target 'Snowplow-iOSTests' do inherit! :search_paths platform :ios, '8.0' - pod 'Nocilla' + pod 'Nocilla', '~> 0.11' pod 'SnowplowIgluClient', :git => 'https://github.com/snowplow/iglu-objc-client.git', :branch => 'feature/carthage' end target 'Snowplow-macOSTests' do platform :osx, '10.10' - pod 'Nocilla' + pod 'Nocilla', '~> 0.11' pod 'SnowplowIgluClient', :git => 'https://github.com/snowplow/iglu-objc-client.git', :branch => 'feature/carthage' end diff --git a/Podfile.lock b/Podfile.lock index 44ad23161..4ad60d73c 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -10,7 +10,7 @@ PODS: DEPENDENCIES: - FMDB (= 2.6.2) - - Nocilla + - Nocilla (~> 0.11) - ReachabilitySwift (= 4.3.1) - SnowplowIgluClient (from `https://github.com/snowplow/iglu-objc-client.git`, branch `feature/carthage`) @@ -38,6 +38,6 @@ SPEC CHECKSUMS: SnowplowIgluClient: 4cda3cca105c844bea49b45e30145dc35cb5208d VVJSONSchemaValidation: 40411ea98f65d065a7c2ce7483876106bf710e9b -PODFILE CHECKSUM: b311bd33cc17017fcfc6d11660967ba278fa780a +PODFILE CHECKSUM: e5d3c885d828eb6bae7fa413699de5c1756d9501 COCOAPODS: 1.5.3 From 41c00645c60132b5036e8c355987ecf53c204c29 Mon Sep 17 00:00:00 2001 From: Paul Boocock Date: Fri, 25 Oct 2019 12:38:51 +0100 Subject: [PATCH 04/13] Fix installation of SnowplowTracker via Carthage (close #457) --- .gitignore | 3 - .travis/install.sh | 1 - Cartfile | 4 +- Cartfile.private | 2 +- Podfile | 75 ----- Podfile.lock | 43 --- Snowplow.xcodeproj/project.pbxproj | 257 ++---------------- Snowplow.xcworkspace/contents.xcworkspacedata | 3 - SnowplowTracker.podspec | 4 +- 9 files changed, 33 insertions(+), 359 deletions(-) delete mode 100644 Podfile delete mode 100644 Podfile.lock diff --git a/.gitignore b/.gitignore index a83d17c59..056b00fc3 100644 --- a/.gitignore +++ b/.gitignore @@ -30,9 +30,6 @@ DerivedData mb.log mb.pid -# Cocoapods -Pods/ - # Carthage Carthage/ Frameworks/ diff --git a/.travis/install.sh b/.travis/install.sh index 4ea1e5e19..c7a19b618 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -1,4 +1,3 @@ #!/bin/sh -pod install carthage update --platform iOS diff --git a/Cartfile b/Cartfile index 8bd4ed876..8c670693d 100644 --- a/Cartfile +++ b/Cartfile @@ -1,5 +1,5 @@ # Reachability.swift -github "ashleymills/Reachability.swift" ~> 4.3 +github "ashleymills/Reachability.swift" ~> 4.3.1 # FMDB -github "ccgus/fmdb" ~> 2.7 +github "ccgus/fmdb" ~> 2.6 diff --git a/Cartfile.private b/Cartfile.private index 719a03893..dbc7b33ca 100644 --- a/Cartfile.private +++ b/Cartfile.private @@ -1,5 +1,5 @@ # Stub library for testing -github "luisobo/Nocilla" ~> 0.11.0 +github "luisobo/Nocilla" == 0.11.0 # objc-iglu-client github "snowplow/iglu-objc-client" "feature/carthage" diff --git a/Podfile b/Podfile deleted file mode 100644 index 40e16bba3..000000000 --- a/Podfile +++ /dev/null @@ -1,75 +0,0 @@ -# This podfile is intended for development and testing on Snowplow. -# -# If you are working on Snowplow, you do not need to have CocoaPods installed -# unless you want to install new development dependencies as the Pods directory -# is part of the source tree. - -source 'https://github.com/CocoaPods/Specs.git' -target 'Snowplow-iOS' do - inherit! :search_paths - platform :ios, '8.0' - pod 'FMDB', '2.6.2' - pod 'ReachabilitySwift', '4.3.1' -end - -target 'Snowplow-macOS' do - pod 'FMDB', '2.6.2' - platform :osx, '10.10' -end - -target 'Snowplow-iOSTests' do - inherit! :search_paths - platform :ios, '8.0' - pod 'Nocilla', '~> 0.11' - pod 'SnowplowIgluClient', :git => 'https://github.com/snowplow/iglu-objc-client.git', :branch => 'feature/carthage' -end - -target 'Snowplow-macOSTests' do - platform :osx, '10.10' - pod 'Nocilla', '~> 0.11' - pod 'SnowplowIgluClient', :git => 'https://github.com/snowplow/iglu-objc-client.git', :branch => 'feature/carthage' -end - -post_install do |installer| - handle_sqlite3 installer - installer.pods_project.targets.each do |target| - if ['ReachabilitySwift'].include? target.name - target.build_configurations.each do |config| - config.build_settings['SWIFT_VERSION'] = '4.2' - end - end - end -end - -def handle_sqlite3 installer - # We need to remove sqlite3 from the library - # For details see: https://github.com/CocoaPods/CocoaPods/issues/830 - default_library = installer.aggregate_targets.detect { |i| i.target_definition.name == 'Snowplow-iOS' } - [default_library.xcconfig_relative_path('Debug'), default_library.xcconfig_relative_path('Release')].each do |path| - path = File.expand_path(File.join(File.dirname(__FILE__), path)) - File.open("config.tmp", "w") do |io| - f = File.read(path) - f.gsub!(/-l"sqlite3"/, '') - io << f - end - FileUtils.mv("config.tmp", path) - end - - # We need to add sqlite3 into the test suite - default_library = installer.aggregate_targets.detect { |i| i.target_definition.name == 'Snowplow-iOSTests' } - [default_library.xcconfig_relative_path('Debug'), default_library.xcconfig_relative_path('Release')].each do |path| - path = File.expand_path(File.join(File.dirname(__FILE__), path)) - File.open("config.tmp", "w") do |io| - f = File.read(path) - f.gsub!(/(OTHER_LDFLAGS =)/, '\1 -l"sqlite3"') - io << f - end - FileUtils.mv("config.tmp", path) - end - - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO' - end - end -end diff --git a/Podfile.lock b/Podfile.lock deleted file mode 100644 index 4ad60d73c..000000000 --- a/Podfile.lock +++ /dev/null @@ -1,43 +0,0 @@ -PODS: - - FMDB (2.6.2): - - FMDB/standard (= 2.6.2) - - FMDB/standard (2.6.2) - - Nocilla (0.11.0) - - ReachabilitySwift (4.3.1) - - SnowplowIgluClient (0.1.1): - - VVJSONSchemaValidation (~> 1.5.0) - - VVJSONSchemaValidation (1.5.0) - -DEPENDENCIES: - - FMDB (= 2.6.2) - - Nocilla (~> 0.11) - - ReachabilitySwift (= 4.3.1) - - SnowplowIgluClient (from `https://github.com/snowplow/iglu-objc-client.git`, branch `feature/carthage`) - -SPEC REPOS: - https://github.com/cocoapods/specs.git: - - FMDB - - Nocilla - - ReachabilitySwift - - VVJSONSchemaValidation - -EXTERNAL SOURCES: - SnowplowIgluClient: - :branch: feature/carthage - :git: https://github.com/snowplow/iglu-objc-client.git - -CHECKOUT OPTIONS: - SnowplowIgluClient: - :commit: 10b9758ef35c21d4bfee9c11d8f4813347a50097 - :git: https://github.com/snowplow/iglu-objc-client.git - -SPEC CHECKSUMS: - FMDB: 854a0341b4726e53276f2a8996f06f1b80f9259a - Nocilla: 7af7a386071150cc8aa5da4da97d060f049dd61c - ReachabilitySwift: 4032e2f59586e11e3b0ebe15b167abdd587a388b - SnowplowIgluClient: 4cda3cca105c844bea49b45e30145dc35cb5208d - VVJSONSchemaValidation: 40411ea98f65d065a7c2ce7483876106bf710e9b - -PODFILE CHECKSUM: e5d3c885d828eb6bae7fa413699de5c1756d9501 - -COCOAPODS: 1.5.3 diff --git a/Snowplow.xcodeproj/project.pbxproj b/Snowplow.xcodeproj/project.pbxproj index 4900f6b3d..1105efac5 100644 --- a/Snowplow.xcodeproj/project.pbxproj +++ b/Snowplow.xcodeproj/project.pbxproj @@ -7,14 +7,20 @@ objects = { /* Begin PBXBuildFile section */ + 23DFEC7B2362FA5D00BD19C4 /* FMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 752DAC0C21CC3EEA0065F874 /* FMDB.framework */; }; + 23DFEC7C2362FA9700BD19C4 /* Reachability.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 752DAC0E21CC3EED0065F874 /* Reachability.framework */; }; + 23DFEC7D2362FAA500BD19C4 /* FMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 752DAC1021CC3F010065F874 /* FMDB.framework */; }; + 23DFEC7E2362FAB100BD19C4 /* FMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 752DAC1321CC3F140065F874 /* FMDB.framework */; }; + 23DFEC7F2362FAC700BD19C4 /* Nocilla.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 750E7F1121F2735C0050A993 /* Nocilla.framework */; }; + 23DFEC802362FAD500BD19C4 /* FMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 752DAC0C21CC3EEA0065F874 /* FMDB.framework */; }; + 23DFEC812362FAE200BD19C4 /* Reachability.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 752DAC0E21CC3EED0065F874 /* Reachability.framework */; }; + 23DFEC822362FAED00BD19C4 /* SnowplowIgluClient.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75CAC3B921F28BD600271FB3 /* SnowplowIgluClient.framework */; }; + 23DFEC832362FAF800BD19C4 /* VVJSONSchemaValidation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75CAC3C021F2930100271FB3 /* VVJSONSchemaValidation.framework */; }; 75264A30224E5DBC000E0E9B /* SPInstallTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 75264A2F224E5DBC000E0E9B /* SPInstallTracker.h */; settings = {ATTRIBUTES = (Private, ); }; }; 75264A32224E5DD2000E0E9B /* SPInstallTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 75264A31224E5DD2000E0E9B /* SPInstallTracker.m */; }; 752DABD521CC38560065F874 /* SnowplowTracker.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 752DABCC21CC38550065F874 /* SnowplowTracker.framework */; }; 752DABFE21CC3B380065F874 /* Snowplow_macOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 752DABF521CC3B380065F874 /* Snowplow_macOS.framework */; }; 752DAC0321CC3B380065F874 /* Snowplow_macOSTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 752DAC0221CC3B380065F874 /* Snowplow_macOSTests.m */; }; - 752DAC0D21CC3EEA0065F874 /* FMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 752DAC0C21CC3EEA0065F874 /* FMDB.framework */; settings = {ATTRIBUTES = (Required, ); }; }; - 752DAC0F21CC3EED0065F874 /* Reachability.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 752DAC0E21CC3EED0065F874 /* Reachability.framework */; settings = {ATTRIBUTES = (Required, ); }; }; - 752DAC1121CC3F020065F874 /* FMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 752DAC1021CC3F010065F874 /* FMDB.framework */; settings = {ATTRIBUTES = (Required, ); }; }; 752DAC1721CC42BC0065F874 /* Snowplow.m in Sources */ = {isa = PBXBuildFile; fileRef = 043EC5E61B8F224900294081 /* Snowplow.m */; }; 752DAC1921CC42BC0065F874 /* SPTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = AB9E8211192DD336006744C9 /* SPTracker.m */; }; 752DAC1B21CC42BC0065F874 /* SPEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = AB0C27EA191B43D600018557 /* SPEmitter.m */; }; @@ -79,12 +85,7 @@ 75CAC41121F2955100271FB3 /* TestTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 75CAC40021F2955100271FB3 /* TestTracker.m */; }; 75CAC41221F2955100271FB3 /* TestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 75CAC40121F2955100271FB3 /* TestRequest.m */; }; 75CAC41321F2955100271FB3 /* TestUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 75CAC40221F2955100271FB3 /* TestUtils.m */; }; - 75CAC41621F2958400271FB3 /* VVJSONSchemaValidation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75CAC3C021F2930100271FB3 /* VVJSONSchemaValidation.framework */; }; - 75CAC41721F2958700271FB3 /* SnowplowIgluClient.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75CAC3B921F28BD600271FB3 /* SnowplowIgluClient.framework */; }; - 75CAC41821F2958900271FB3 /* Nocilla.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 750E7F1121F2735C0050A993 /* Nocilla.framework */; }; - 75CAC41921F2958E00271FB3 /* Reachability.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 752DAC0E21CC3EED0065F874 /* Reachability.framework */; }; 75CAC41A21F2959800271FB3 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB9E8213192DEC38006744C9 /* CoreTelephony.framework */; }; - 75CAC41B21F2960200271FB3 /* FMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 752DAC0C21CC3EEA0065F874 /* FMDB.framework */; }; 75CAC41D21F2962E00271FB3 /* VVJSONSchemaValidation.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 75CAC3C021F2930100271FB3 /* VVJSONSchemaValidation.framework */; }; 75CAC41E21F2962E00271FB3 /* SnowplowIgluClient.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 75CAC3B921F28BD600271FB3 /* SnowplowIgluClient.framework */; }; 75CAC41F21F2962E00271FB3 /* Nocilla.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 750E7F1121F2735C0050A993 /* Nocilla.framework */; }; @@ -133,7 +134,6 @@ 75CAC45221F2A19500271FB3 /* SPWeakTimerTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = 044CA88C1B94792B000EA3B1 /* SPWeakTimerTarget.m */; }; 75CAC45321F2A19500271FB3 /* SPEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0402EBED1BA93CCC006C8818 /* SPEvent.m */; }; 75CAC45621F2A1CC00271FB3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB0C27C0191B408200018557 /* Foundation.framework */; }; - 75CAC45721F2A1E400271FB3 /* FMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 752DAC1321CC3F140065F874 /* FMDB.framework */; settings = {ATTRIBUTES = (Required, ); }; }; 75CAC45821F2A21B00271FB3 /* Snowplow-Bridging-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = 75D6061E21C9CA8A00C7B016 /* Snowplow-Bridging-Header.h */; settings = {ATTRIBUTES = (Public, ); }; }; 75CAC45921F2A21B00271FB3 /* Snowplow.h in Headers */ = {isa = PBXBuildFile; fileRef = AB0C27C5191B408200018557 /* Snowplow.h */; settings = {ATTRIBUTES = (Public, ); }; }; 75CAC45A21F2A21B00271FB3 /* SPTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = AB9E8210192DD336006744C9 /* SPTracker.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -184,10 +184,6 @@ 75F9C5F021FA35BC00A5B8FC /* SPWeakTimerTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 044CA88B1B94791E000EA3B1 /* SPWeakTimerTarget.h */; settings = {ATTRIBUTES = (Private, ); }; }; 75F9C5F121FA35BC00A5B8FC /* SPEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 0402EBEB1BA93CA5006C8818 /* SPEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; 75F9C5F221FA35BC00A5B8FC /* SPRequestCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B2BDA1B7A203200BD82FC /* SPRequestCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 983E071016B9F2C9D795C9D2 /* libPods-Snowplow-macOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D39577C915882506F76CFA74 /* libPods-Snowplow-macOS.a */; }; - 9EAA4A623333558D3B0CE765 /* libPods-Snowplow-iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D2904EB4D15396D06F947D8C /* libPods-Snowplow-iOS.a */; }; - DDC5D9041D6E4E059D2ABECC /* libPods-Snowplow-macOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 28BF19FC691D361DC65685A9 /* libPods-Snowplow-macOSTests.a */; }; - F4F03A888AB1E732E1353F09 /* libPods-Snowplow-iOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CC6F0EC5182C6B14D03E947 /* libPods-Snowplow-iOSTests.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -260,11 +256,6 @@ 0485CA141BAC658500214BC5 /* SPSelfDescribingJson.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SPSelfDescribingJson.h; sourceTree = ""; }; 0485CA151BAC65A300214BC5 /* SPSelfDescribingJson.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPSelfDescribingJson.m; sourceTree = ""; }; 049B2BDA1B7A203200BD82FC /* SPRequestCallback.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SPRequestCallback.h; sourceTree = ""; }; - 17E4CF0C9ECDF825CE683033 /* Pods-Snowplow-macOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Snowplow-macOSTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Snowplow-macOSTests/Pods-Snowplow-macOSTests.debug.xcconfig"; sourceTree = ""; }; - 28BF19FC691D361DC65685A9 /* libPods-Snowplow-macOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Snowplow-macOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 5ABE526A6BE3015F24971BDD /* Pods-Snowplow-iOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Snowplow-iOSTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-Snowplow-iOSTests/Pods-Snowplow-iOSTests.release.xcconfig"; sourceTree = ""; }; - 61536FB3FEDC308DB428EF73 /* Pods-Snowplow-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Snowplow-iOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-Snowplow-iOS/Pods-Snowplow-iOS.release.xcconfig"; sourceTree = ""; }; - 6607FF014C01079F941D6706 /* Pods-Snowplow-iOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Snowplow-iOSTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Snowplow-iOSTests/Pods-Snowplow-iOSTests.debug.xcconfig"; sourceTree = ""; }; 750E7F1121F2735C0050A993 /* Nocilla.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nocilla.framework; path = Carthage/Build/iOS/Nocilla.framework; sourceTree = ""; }; 75264A2F224E5DBC000E0E9B /* SPInstallTracker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SPInstallTracker.h; sourceTree = ""; }; 75264A31224E5DD2000E0E9B /* SPInstallTracker.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SPInstallTracker.m; sourceTree = ""; }; @@ -308,8 +299,6 @@ 75D6061E21C9CA8A00C7B016 /* Snowplow-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Snowplow-Bridging-Header.h"; sourceTree = ""; }; 75D6061F21C9CA8B00C7B016 /* ReachabilityBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReachabilityBridge.swift; sourceTree = ""; }; 75F9C5C821FA2E0F00A5B8FC /* libSnowplow-iOS-Static.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libSnowplow-iOS-Static.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 8CC6F0EC5182C6B14D03E947 /* libPods-Snowplow-iOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Snowplow-iOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 907F5C2E8601E4A9AD270720 /* Pods-Snowplow-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Snowplow-macOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-Snowplow-macOS/Pods-Snowplow-macOS.release.xcconfig"; sourceTree = ""; }; AB0C27C0191B408200018557 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; AB0C27C4191B408200018557 /* Snowplow-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Snowplow-Prefix.pch"; sourceTree = ""; }; AB0C27C5191B408200018557 /* Snowplow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Snowplow.h; sourceTree = ""; }; @@ -327,11 +316,6 @@ ABB767AF194974D3006275D1 /* SPEventStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPEventStore.m; sourceTree = ""; }; ABFCC3741922984A00FAE8FE /* SPUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPUtilities.h; sourceTree = ""; }; ABFCC3751922984A00FAE8FE /* SPUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPUtilities.m; sourceTree = ""; }; - B440685B06860AC1A1F64C2A /* Pods-Snowplow-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Snowplow-macOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Snowplow-macOS/Pods-Snowplow-macOS.debug.xcconfig"; sourceTree = ""; }; - B5D6F3169FDAE95A3095EB77 /* Pods-Snowplow-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Snowplow-iOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Snowplow-iOS/Pods-Snowplow-iOS.debug.xcconfig"; sourceTree = ""; }; - D2904EB4D15396D06F947D8C /* libPods-Snowplow-iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Snowplow-iOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - D2E81238FF66A542FBCD30A2 /* Pods-Snowplow-macOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Snowplow-macOSTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-Snowplow-macOSTests/Pods-Snowplow-macOSTests.release.xcconfig"; sourceTree = ""; }; - D39577C915882506F76CFA74 /* libPods-Snowplow-macOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Snowplow-macOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -339,11 +323,10 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 23DFEC7C2362FA9700BD19C4 /* Reachability.framework in Frameworks */, + 23DFEC7B2362FA5D00BD19C4 /* FMDB.framework in Frameworks */, 752DAC4021CC4A830065F874 /* UIKit.framework in Frameworks */, 752DAC3F21CC4A7B0065F874 /* CoreTelephony.framework in Frameworks */, - 752DAC0D21CC3EEA0065F874 /* FMDB.framework in Frameworks */, - 752DAC0F21CC3EED0065F874 /* Reachability.framework in Frameworks */, - 9EAA4A623333558D3B0CE765 /* libPods-Snowplow-iOS.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -351,14 +334,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 23DFEC832362FAF800BD19C4 /* VVJSONSchemaValidation.framework in Frameworks */, + 23DFEC822362FAED00BD19C4 /* SnowplowIgluClient.framework in Frameworks */, + 23DFEC812362FAE200BD19C4 /* Reachability.framework in Frameworks */, + 23DFEC802362FAD500BD19C4 /* FMDB.framework in Frameworks */, + 23DFEC7F2362FAC700BD19C4 /* Nocilla.framework in Frameworks */, 75CAC41A21F2959800271FB3 /* CoreTelephony.framework in Frameworks */, 752DABD521CC38560065F874 /* SnowplowTracker.framework in Frameworks */, - 75CAC41621F2958400271FB3 /* VVJSONSchemaValidation.framework in Frameworks */, - 75CAC41821F2958900271FB3 /* Nocilla.framework in Frameworks */, - 75CAC41721F2958700271FB3 /* SnowplowIgluClient.framework in Frameworks */, - 75CAC41921F2958E00271FB3 /* Reachability.framework in Frameworks */, - 75CAC41B21F2960200271FB3 /* FMDB.framework in Frameworks */, - F4F03A888AB1E732E1353F09 /* libPods-Snowplow-iOSTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -366,7 +348,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 752DAC1121CC3F020065F874 /* FMDB.framework in Frameworks */, + 23DFEC7D2362FAA500BD19C4 /* FMDB.framework in Frameworks */, 75CAC46721F2A25B00271FB3 /* CoreTelephony.framework in Frameworks */, 75CAC46921F2A25B00271FB3 /* Foundation.framework in Frameworks */, ); @@ -376,10 +358,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 23DFEC7E2362FAB100BD19C4 /* FMDB.framework in Frameworks */, 753DDA6D21F803B10007C3AE /* Cocoa.framework in Frameworks */, - 75CAC45721F2A1E400271FB3 /* FMDB.framework in Frameworks */, 75CAC45621F2A1CC00271FB3 /* Foundation.framework in Frameworks */, - 983E071016B9F2C9D795C9D2 /* libPods-Snowplow-macOS.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -388,7 +369,6 @@ buildActionMask = 2147483647; files = ( 752DABFE21CC3B380065F874 /* Snowplow_macOS.framework in Frameworks */, - DDC5D9041D6E4E059D2ABECC /* libPods-Snowplow-macOSTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -464,7 +444,6 @@ AB0C27C2191B408200018557 /* Snowplow */, AB0C27BF191B408200018557 /* Frameworks */, AB0C27BE191B408200018557 /* Products */, - BEC7E115ED5323959E2808AA /* Pods */, ); sourceTree = ""; }; @@ -496,10 +475,6 @@ AB9E8213192DEC38006744C9 /* CoreTelephony.framework */, ABB67D8C192D9552009A1ECE /* UIKit.framework */, AB0C27C0191B408200018557 /* Foundation.framework */, - D2904EB4D15396D06F947D8C /* libPods-Snowplow-iOS.a */, - 8CC6F0EC5182C6B14D03E947 /* libPods-Snowplow-iOSTests.a */, - D39577C915882506F76CFA74 /* libPods-Snowplow-macOS.a */, - 28BF19FC691D361DC65685A9 /* libPods-Snowplow-macOSTests.a */, ); name = Frameworks; sourceTree = ""; @@ -555,21 +530,6 @@ name = "Supporting Files"; sourceTree = ""; }; - BEC7E115ED5323959E2808AA /* Pods */ = { - isa = PBXGroup; - children = ( - B5D6F3169FDAE95A3095EB77 /* Pods-Snowplow-iOS.debug.xcconfig */, - 61536FB3FEDC308DB428EF73 /* Pods-Snowplow-iOS.release.xcconfig */, - 6607FF014C01079F941D6706 /* Pods-Snowplow-iOSTests.debug.xcconfig */, - 5ABE526A6BE3015F24971BDD /* Pods-Snowplow-iOSTests.release.xcconfig */, - B440685B06860AC1A1F64C2A /* Pods-Snowplow-macOS.debug.xcconfig */, - 907F5C2E8601E4A9AD270720 /* Pods-Snowplow-macOS.release.xcconfig */, - 17E4CF0C9ECDF825CE683033 /* Pods-Snowplow-macOSTests.debug.xcconfig */, - D2E81238FF66A542FBCD30A2 /* Pods-Snowplow-macOSTests.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -677,7 +637,6 @@ isa = PBXNativeTarget; buildConfigurationList = 752DABDD21CC38560065F874 /* Build configuration list for PBXNativeTarget "Snowplow-iOS" */; buildPhases = ( - D7A349C98101434299B0064C /* [CP] Check Pods Manifest.lock */, 752DABC721CC38550065F874 /* Headers */, 752DABC821CC38550065F874 /* Sources */, 752DABC921CC38550065F874 /* Frameworks */, @@ -696,12 +655,10 @@ isa = PBXNativeTarget; buildConfigurationList = 752DABE021CC38560065F874 /* Build configuration list for PBXNativeTarget "Snowplow-iOSTests" */; buildPhases = ( - 5650BC91B425E5162600830B /* [CP] Check Pods Manifest.lock */, 752DABD021CC38560065F874 /* Sources */, 752DABD121CC38560065F874 /* Frameworks */, 75CAC41C21F2960F00271FB3 /* CopyFiles */, 75CAC42921F29E5900271FB3 /* CopyFiles */, - D44F1066E50A517200A43ED4 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -735,7 +692,6 @@ isa = PBXNativeTarget; buildConfigurationList = 752DAC0621CC3B380065F874 /* Build configuration list for PBXNativeTarget "Snowplow-macOS" */; buildPhases = ( - 84D2E744EE2B00A7386CEC08 /* [CP] Check Pods Manifest.lock */, 752DABF021CC3B380065F874 /* Headers */, 752DABF121CC3B380065F874 /* Sources */, 752DABF221CC3B380065F874 /* Frameworks */, @@ -754,11 +710,9 @@ isa = PBXNativeTarget; buildConfigurationList = 752DAC0921CC3B380065F874 /* Build configuration list for PBXNativeTarget "Snowplow-macOSTests" */; buildPhases = ( - 98681E02A562506D55F4D55E /* [CP] Check Pods Manifest.lock */, 752DABF921CC3B380065F874 /* Sources */, 752DABFA21CC3B380065F874 /* Frameworks */, 752DABFB21CC3B380065F874 /* Resources */, - 85125C9759D065F28B8732E4 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -872,141 +826,6 @@ }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - 5650BC91B425E5162600830B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Snowplow-iOSTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/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# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 84D2E744EE2B00A7386CEC08 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Snowplow-macOS-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/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# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 85125C9759D065F28B8732E4 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${SRCROOT}/Pods/Target Support Files/Pods-Snowplow-macOSTests/Pods-Snowplow-macOSTests-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/SnowplowIgluClient-macOS/SnowplowIgluResources.bundle", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - ); - outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SnowplowIgluResources.bundle", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Snowplow-macOSTests/Pods-Snowplow-macOSTests-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - 98681E02A562506D55F4D55E /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Snowplow-macOSTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/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# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - D44F1066E50A517200A43ED4 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${SRCROOT}/Pods/Target Support Files/Pods-Snowplow-iOSTests/Pods-Snowplow-iOSTests-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/SnowplowIgluClient-iOS/SnowplowIgluResources.bundle", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - ); - outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SnowplowIgluResources.bundle", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Snowplow-iOSTests/Pods-Snowplow-iOSTests-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - D7A349C98101434299B0064C /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Snowplow-iOS-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/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# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ 752DABC821CC38550065F874 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -1157,9 +976,7 @@ /* Begin XCBuildConfiguration section */ 752DABDE21CC38560065F874 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B5D6F3169FDAE95A3095EB77 /* Pods-Snowplow-iOS.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -1195,21 +1012,15 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FMDB-iOS\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift\"", - "$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)", - ); MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.snowplowanalytics.Snowplow-iOS"; + PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; PRODUCT_NAME = SnowplowTracker; PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; - SWIFT_OBJC_BRIDGING_HEADER = "Snowplow/Snowplow-Bridging-Header.h"; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -1218,9 +1029,7 @@ }; 752DABDF21CC38560065F874 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 61536FB3FEDC308DB428EF73 /* Pods-Snowplow-iOS.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -1256,21 +1065,15 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FMDB-iOS\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift\"", - "$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)", - ); MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.snowplowanalytics.Snowplow-iOS"; + PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; PRODUCT_NAME = SnowplowTracker; PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; - SWIFT_OBJC_BRIDGING_HEADER = "Snowplow/Snowplow-Bridging-Header.h"; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -1279,7 +1082,6 @@ }; 752DABE121CC38560065F874 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6607FF014C01079F941D6706 /* Pods-Snowplow-iOSTests.debug.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -1325,6 +1127,7 @@ MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.snowplowanalytics.Snowplow-iOSTests"; + PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1333,7 +1136,6 @@ }; 752DABE221CC38560065F874 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5ABE526A6BE3015F24971BDD /* Pods-Snowplow-iOSTests.release.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -1380,6 +1182,7 @@ MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.snowplowanalytics.Snowplow-iOSTests"; + PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1389,7 +1192,6 @@ 752DABEE21CC3A090065F874 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -1444,7 +1246,6 @@ 752DABEF21CC3A090065F874 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -1495,9 +1296,7 @@ }; 752DAC0721CC3B380065F874 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B440685B06860AC1A1F64C2A /* Pods-Snowplow-macOS.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -1550,9 +1349,7 @@ }; 752DAC0821CC3B380065F874 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 907F5C2E8601E4A9AD270720 /* Pods-Snowplow-macOS.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -1605,7 +1402,6 @@ }; 752DAC0A21CC3B380065F874 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 17E4CF0C9ECDF825CE683033 /* Pods-Snowplow-macOSTests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NONNULL = YES; @@ -1641,7 +1437,6 @@ }; 752DAC0B21CC3B380065F874 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D2E81238FF66A542FBCD30A2 /* Pods-Snowplow-macOSTests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NONNULL = YES; @@ -1698,8 +1493,10 @@ MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = "-ObjC"; + PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -1726,8 +1523,10 @@ MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; OTHER_LDFLAGS = "-ObjC"; + PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; diff --git a/Snowplow.xcworkspace/contents.xcworkspacedata b/Snowplow.xcworkspace/contents.xcworkspacedata index 55e1a4692..6e993e7f8 100644 --- a/Snowplow.xcworkspace/contents.xcworkspacedata +++ b/Snowplow.xcworkspace/contents.xcworkspacedata @@ -4,7 +4,4 @@ - - diff --git a/SnowplowTracker.podspec b/SnowplowTracker.podspec index 5b07b3756..a6ac27429 100644 --- a/SnowplowTracker.podspec +++ b/SnowplowTracker.podspec @@ -41,6 +41,6 @@ Pod::Spec.new do |s| s.ios.frameworks = 'CoreTelephony', 'UIKit', 'Foundation' s.osx.frameworks = 'AppKit', 'Foundation' s.tvos.frameworks = 'UIKit', 'Foundation' - s.dependency 'FMDB', '2.6.2' - s.ios.dependency 'ReachabilitySwift', '4.3.1' + s.dependency 'FMDB', '~> 2.6.2' + s.ios.dependency 'ReachabilitySwift', '~> 4.3.1' end From 9c6ab4a1dbe0cb04367d294cf57a9e880ce6fd75 Mon Sep 17 00:00:00 2001 From: Alex Benini Date: Wed, 30 Oct 2019 15:39:45 +0100 Subject: [PATCH 05/13] Fix bridging issues importing the framework on swift demo app (close #458) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The bridging header wasn’t able to expose the classes to a swift app. The modulemap has been introduced for iOS only as it has to be tested in the iOS swift demo app. --- Snowplow.xcodeproj/project.pbxproj | 4 ++++ Snowplow/ios.modulemap | 12 ++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 Snowplow/ios.modulemap diff --git a/Snowplow.xcodeproj/project.pbxproj b/Snowplow.xcodeproj/project.pbxproj index 1105efac5..6aa16a8bc 100644 --- a/Snowplow.xcodeproj/project.pbxproj +++ b/Snowplow.xcodeproj/project.pbxproj @@ -316,6 +316,7 @@ ABB767AF194974D3006275D1 /* SPEventStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPEventStore.m; sourceTree = ""; }; ABFCC3741922984A00FAE8FE /* SPUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPUtilities.h; sourceTree = ""; }; ABFCC3751922984A00FAE8FE /* SPUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPUtilities.m; sourceTree = ""; }; + ED6AC5152369D42800A8F8A3 /* ios.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = ios.modulemap; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -523,6 +524,7 @@ AB0C27C3191B408200018557 /* Supporting Files */ = { isa = PBXGroup; children = ( + ED6AC5152369D42800A8F8A3 /* ios.modulemap */, AB0C27C4191B408200018557 /* Snowplow-Prefix.pch */, AB39617019530E850002F235 /* OpenIDFA.h */, AB39617119530E850002F235 /* OpenIDFA.m */, @@ -1012,6 +1014,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); + MODULEMAP_FILE = Snowplow/ios.modulemap; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -1065,6 +1068,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); + MODULEMAP_FILE = Snowplow/ios.modulemap; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; diff --git a/Snowplow/ios.modulemap b/Snowplow/ios.modulemap new file mode 100644 index 000000000..7fae2bbad --- /dev/null +++ b/Snowplow/ios.modulemap @@ -0,0 +1,12 @@ +framework module SnowplowTracker { + header "Snowplow.h" + header "SPTracker.h" + header "SPEmitter.h" + header "SPSubject.h" + header "SPPayload.h" + header "SPUtilities.h" + header "SPRequestCallback.h" + header "SPEvent.h" + header "SPSelfDescribingJson.h" + export * +} From 5631e9465c993f0fd9456bc8ca971484f84e62a1 Mon Sep 17 00:00:00 2001 From: Alex Benini Date: Tue, 5 Nov 2019 11:14:58 +0100 Subject: [PATCH 06/13] Fix building issues on MacOS target (close #466) --- Snowplow.xcodeproj/project.pbxproj | 14 +++++--------- .../xcschemes/Snowplow-watchOS.xcscheme | 4 ---- Snowplow/SPUtilities.m | 18 +++++++++++++----- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Snowplow.xcodeproj/project.pbxproj b/Snowplow.xcodeproj/project.pbxproj index 6aa16a8bc..caea64713 100644 --- a/Snowplow.xcodeproj/project.pbxproj +++ b/Snowplow.xcodeproj/project.pbxproj @@ -67,11 +67,7 @@ 754774C12225FBB90043B814 /* SPScreenState.h in Headers */ = {isa = PBXBuildFile; fileRef = 754774BF2225FBB90043B814 /* SPScreenState.h */; }; 754774C22225FBB90043B814 /* SPScreenState.h in Headers */ = {isa = PBXBuildFile; fileRef = 754774BF2225FBB90043B814 /* SPScreenState.h */; }; 754774CD222756470043B814 /* UIViewController+SPScreenView_SWIZZLE.h in Headers */ = {isa = PBXBuildFile; fileRef = 754774CB222756470043B814 /* UIViewController+SPScreenView_SWIZZLE.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 754774CE222756470043B814 /* UIViewController+SPScreenView_SWIZZLE.h in Headers */ = {isa = PBXBuildFile; fileRef = 754774CB222756470043B814 /* UIViewController+SPScreenView_SWIZZLE.h */; }; - 754774CF222756470043B814 /* UIViewController+SPScreenView_SWIZZLE.h in Headers */ = {isa = PBXBuildFile; fileRef = 754774CB222756470043B814 /* UIViewController+SPScreenView_SWIZZLE.h */; }; 754774D0222756470043B814 /* UIViewController+SPScreenView_SWIZZLE.m in Sources */ = {isa = PBXBuildFile; fileRef = 754774CC222756470043B814 /* UIViewController+SPScreenView_SWIZZLE.m */; }; - 754774D1222756470043B814 /* UIViewController+SPScreenView_SWIZZLE.m in Sources */ = {isa = PBXBuildFile; fileRef = 754774CC222756470043B814 /* UIViewController+SPScreenView_SWIZZLE.m */; }; - 754774D2222756470043B814 /* UIViewController+SPScreenView_SWIZZLE.m in Sources */ = {isa = PBXBuildFile; fileRef = 754774CC222756470043B814 /* UIViewController+SPScreenView_SWIZZLE.m */; }; 75CAC40521F2955100271FB3 /* TestSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 75CAC3F121F2955000271FB3 /* TestSession.m */; }; 75CAC40621F2955100271FB3 /* TestEventStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 75CAC3F221F2955000271FB3 /* TestEventStore.m */; }; 75CAC40721F2955100271FB3 /* TestPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 75CAC3F321F2955000271FB3 /* TestPayload.m */; }; @@ -184,6 +180,8 @@ 75F9C5F021FA35BC00A5B8FC /* SPWeakTimerTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 044CA88B1B94791E000EA3B1 /* SPWeakTimerTarget.h */; settings = {ATTRIBUTES = (Private, ); }; }; 75F9C5F121FA35BC00A5B8FC /* SPEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 0402EBEB1BA93CA5006C8818 /* SPEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; 75F9C5F221FA35BC00A5B8FC /* SPRequestCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B2BDA1B7A203200BD82FC /* SPRequestCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ED8A3EEC2371708C00E51827 /* SPInstallTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 75264A31224E5DD2000E0E9B /* SPInstallTracker.m */; }; + ED8A3EED2371709100E51827 /* SPInstallTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 75264A2F224E5DBC000E0E9B /* SPInstallTracker.h */; settings = {ATTRIBUTES = (Private, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -500,9 +498,9 @@ 0485CA151BAC65A300214BC5 /* SPSelfDescribingJson.m */, ABB767AE194974D3006275D1 /* SPEventStore.h */, ABB767AF194974D3006275D1 /* SPEventStore.m */, + ABFCC3741922984A00FAE8FE /* SPUtilities.h */, ABFCC3751922984A00FAE8FE /* SPUtilities.m */, 0413DD751B78D635000D2112 /* SPRequestResponse.h */, - ABFCC3741922984A00FAE8FE /* SPUtilities.h */, 0413DD761B78D643000D2112 /* SPRequestResponse.m */, 044CA88B1B94791E000EA3B1 /* SPWeakTimerTarget.h */, 044CA88C1B94792B000EA3B1 /* SPWeakTimerTarget.m */, @@ -574,7 +572,6 @@ 754774C12225FBB90043B814 /* SPScreenState.h in Headers */, 75CAC46121F2A21B00271FB3 /* SPUtilities.h in Headers */, 75CAC46421F2A21B00271FB3 /* SPEvent.h in Headers */, - 754774CE222756470043B814 /* UIViewController+SPScreenView_SWIZZLE.h in Headers */, 75CAC46521F2A21B00271FB3 /* SPRequestCallback.h in Headers */, 75CAC46621F2A22500271FB3 /* OpenIDFA.h in Headers */, 75CAC45D21F2A21B00271FB3 /* SPSession.h in Headers */, @@ -599,10 +596,10 @@ 75CAC43721F2A0CC00271FB3 /* SPRequestCallback.h in Headers */, 754774C22225FBB90043B814 /* SPScreenState.h in Headers */, 75CAC43821F2A0CC00271FB3 /* Snowplow-Bridging-Header.h in Headers */, - 754774CF222756470043B814 /* UIViewController+SPScreenView_SWIZZLE.h in Headers */, 75CAC42F21F2A0CC00271FB3 /* SPSession.h in Headers */, 75CAC43221F2A0CC00271FB3 /* SPEventStore.h in Headers */, 75CAC43421F2A0CC00271FB3 /* SPRequestResponse.h in Headers */, + ED8A3EED2371709100E51827 /* SPInstallTracker.h in Headers */, 75CAC43521F2A0CC00271FB3 /* SPWeakTimerTarget.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; @@ -879,7 +876,6 @@ buildActionMask = 2147483647; files = ( 75CAC43A21F2A17500271FB3 /* Snowplow.m in Sources */, - 754774D1222756470043B814 /* UIViewController+SPScreenView_SWIZZLE.m in Sources */, 754774BD2225FBA60043B814 /* SPScreenState.m in Sources */, 75CAC43B21F2A17500271FB3 /* SPTracker.m in Sources */, 75CAC43C21F2A17500271FB3 /* SPEmitter.m in Sources */, @@ -902,8 +898,8 @@ files = ( 75CAC44821F2A19500271FB3 /* Snowplow.m in Sources */, 754774BE2225FBA60043B814 /* SPScreenState.m in Sources */, - 754774D2222756470043B814 /* UIViewController+SPScreenView_SWIZZLE.m in Sources */, 75CAC44921F2A19500271FB3 /* SPTracker.m in Sources */, + ED8A3EEC2371708C00E51827 /* SPInstallTracker.m in Sources */, 75CAC44A21F2A19500271FB3 /* SPEmitter.m in Sources */, 75CAC44B21F2A19500271FB3 /* SPSubject.m in Sources */, 75CAC44C21F2A19500271FB3 /* SPSession.m in Sources */, diff --git a/Snowplow.xcodeproj/xcshareddata/xcschemes/Snowplow-watchOS.xcscheme b/Snowplow.xcodeproj/xcshareddata/xcschemes/Snowplow-watchOS.xcscheme index 025938b57..e801ae296 100644 --- a/Snowplow.xcodeproj/xcshareddata/xcschemes/Snowplow-watchOS.xcscheme +++ b/Snowplow.xcodeproj/xcshareddata/xcschemes/Snowplow-watchOS.xcscheme @@ -29,8 +29,6 @@ shouldUseLaunchSchemeArgsEnv = "YES"> - - - - Date: Tue, 5 Nov 2019 14:03:44 +0100 Subject: [PATCH 07/13] SnowplowTracker-swift.h file not found static lib building (close #427) --- Snowplow.xcodeproj/project.pbxproj | 12 ++++ .../xcschemes/Snowplow-iOS-Static.xcscheme | 67 +++++++++++++++++++ .../xcschemes/Snowplow-iOS.xcscheme | 22 +++--- Snowplow/SPUtilities.m | 5 ++ 4 files changed, 93 insertions(+), 13 deletions(-) create mode 100644 Snowplow.xcodeproj/xcshareddata/xcschemes/Snowplow-iOS-Static.xcscheme diff --git a/Snowplow.xcodeproj/project.pbxproj b/Snowplow.xcodeproj/project.pbxproj index caea64713..dfc9d48f4 100644 --- a/Snowplow.xcodeproj/project.pbxproj +++ b/Snowplow.xcodeproj/project.pbxproj @@ -1488,14 +1488,20 @@ "$(PROJECT_DIR)/Carthage/Build/iOS", ); GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_PREPROCESSOR_DEFINITIONS = ( + "SNOWPLOW_IOS_STATIC=1", + "$(inherited)", + ); IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; + OTHER_CFLAGS = ""; OTHER_LDFLAGS = "-ObjC"; PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(SWIFT_MODULE_NAME)-Swift.h"; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -1519,13 +1525,19 @@ "$(PROJECT_DIR)/Carthage/Build/iOS", ); GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_PREPROCESSOR_DEFINITIONS = ( + "SNOWPLOW_IOS_STATIC=1", + "$(inherited)", + ); IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; + OTHER_CFLAGS = ""; OTHER_LDFLAGS = "-ObjC"; PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(SWIFT_MODULE_NAME)-Swift.h"; SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = "1,2"; }; diff --git a/Snowplow.xcodeproj/xcshareddata/xcschemes/Snowplow-iOS-Static.xcscheme b/Snowplow.xcodeproj/xcshareddata/xcschemes/Snowplow-iOS-Static.xcscheme new file mode 100644 index 000000000..cea4e255c --- /dev/null +++ b/Snowplow.xcodeproj/xcshareddata/xcschemes/Snowplow-iOS-Static.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Snowplow.xcodeproj/xcshareddata/xcschemes/Snowplow-iOS.xcscheme b/Snowplow.xcodeproj/xcshareddata/xcschemes/Snowplow-iOS.xcscheme index 269f61f88..27e1faad0 100644 --- a/Snowplow.xcodeproj/xcshareddata/xcschemes/Snowplow-iOS.xcscheme +++ b/Snowplow.xcodeproj/xcshareddata/xcschemes/Snowplow-iOS.xcscheme @@ -27,6 +27,15 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> + + + + @@ -39,17 +48,6 @@ - - - - - - - - #import #import + +#if SNOWPLOW_IOS_STATIC +#import "Snowplow_iOS_Static-Swift.h" +#else #import +#endif #elif SNOWPLOW_TARGET_OSX From 4ee0e0e068e4b4d56e79c424f72bc81010976782 Mon Sep 17 00:00:00 2001 From: Alex Benini Date: Tue, 5 Nov 2019 14:19:08 +0100 Subject: [PATCH 08/13] Fix Slather (close #453) Slather doesn't work expectedly on Travis, check latest builds. An example log is below. --- .../xcshareddata/xcschemes/Snowplow-iOS.xcscheme | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Snowplow.xcodeproj/xcshareddata/xcschemes/Snowplow-iOS.xcscheme b/Snowplow.xcodeproj/xcshareddata/xcschemes/Snowplow-iOS.xcscheme index 27e1faad0..7bd3f1c48 100644 --- a/Snowplow.xcodeproj/xcshareddata/xcschemes/Snowplow-iOS.xcscheme +++ b/Snowplow.xcodeproj/xcshareddata/xcschemes/Snowplow-iOS.xcscheme @@ -26,7 +26,8 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES"> + shouldUseLaunchSchemeArgsEnv = "YES" + codeCoverageEnabled = "YES"> Date: Fri, 8 Nov 2019 13:19:06 +0100 Subject: [PATCH 09/13] Update objc demo app for 1.1.4 (close #461) PR #463: * Update objc demo app to changes up to 1.1.4 - Update method calls (few methods were changed) - Update UI layout (it wasn't usable/tappable) - Update Podfile and Pods * Move objc demo app to the Examples folder * Fix folder name for FMDB header path * Fix tracking screenId rather than eventId * Avoid implicit self reference * Update project settings with Xcode suggestions * Remove old objc demo app * Remove workspace as it's needed with Cocoapods only * Update travis script * Update .gitignore * Fix bad events on objc demo app --- .gitignore | 3 + .travis.yml | 40 +- .travis/install.sh | 3 - .travis/test.sh | 10 - Examples/SnowplowDemo/.gitignore | 41 + Examples/SnowplowDemo/Podfile | 9 + Examples/SnowplowDemo/Podfile.lock | 29 + .../SnowplowDemo}/Pods/FMDB/LICENSE.txt | 0 .../SnowplowDemo}/Pods/FMDB/README.markdown | 271 ++-- .../SnowplowDemo/Pods/FMDB/src/fmdb/FMDB.h | 10 + .../Pods/FMDB/src/fmdb/FMDatabase.h | 129 +- .../Pods/FMDB/src/fmdb/FMDatabase.m | 207 +-- .../Pods/FMDB/src/fmdb/FMDatabaseAdditions.h | 3 - .../Pods/FMDB/src/fmdb/FMDatabaseAdditions.m | 36 +- .../Pods/FMDB/src/fmdb/FMDatabasePool.h | 4 - .../Pods/FMDB/src/fmdb/FMDatabasePool.m | 16 +- .../Pods/FMDB/src/fmdb/FMDatabaseQueue.h | 14 +- .../Pods/FMDB/src/fmdb/FMDatabaseQueue.m | 25 +- .../Pods/FMDB/src/fmdb/FMResultSet.h | 1 - .../Pods/FMDB/src/fmdb/FMResultSet.m | 6 + .../SnowplowTracker.podspec.json | 45 +- Examples/SnowplowDemo/Pods/Manifest.lock | 29 + .../Pods/Pods.xcodeproj/project.pbxproj | 1190 +++++++++++++++++ .../Pods/ReachabilitySwift/LICENSE | 19 + .../Pods/ReachabilitySwift/README.md | 202 +++ .../Sources/Reachability.swift | 316 +++++ .../Target Support Files/FMDB/FMDB-Info.plist | 26 + .../Target Support Files/FMDB/FMDB-dummy.m | 0 .../Target Support Files/FMDB/FMDB-prefix.pch | 12 + .../Target Support Files/FMDB/FMDB-umbrella.h | 22 + .../Target Support Files/FMDB/FMDB.modulemap | 6 + .../Target Support Files/FMDB/FMDB.xcconfig | 10 + .../Pods-SnowplowDemo-Info.plist | 26 + ...ods-SnowplowDemo-acknowledgements.markdown | 27 +- .../Pods-SnowplowDemo-acknowledgements.plist | 33 +- .../Pods-SnowplowDemo-dummy.m | 5 + .../Pods-SnowplowDemo-frameworks.sh | 175 +++ .../Pods-SnowplowDemo-umbrella.h | 16 + .../Pods-SnowplowDemo.debug.xcconfig | 12 + .../Pods-SnowplowDemo.modulemap | 6 + .../Pods-SnowplowDemo.release.xcconfig | 12 + .../ReachabilitySwift-Info.plist | 26 + .../ReachabilitySwift-dummy.m | 5 + .../ReachabilitySwift-prefix.pch | 12 + .../ReachabilitySwift-umbrella.h | 16 + .../ReachabilitySwift.modulemap | 6 + .../ReachabilitySwift.xcconfig | 11 + .../SnowplowTracker-Info.plist | 26 + .../SnowplowTracker/SnowplowTracker-dummy.m | 0 .../SnowplowTracker-prefix.pch | 12 + .../SnowplowTracker-umbrella.h | 27 + .../SnowplowTracker/SnowplowTracker.modulemap | 6 + .../SnowplowTracker/SnowplowTracker.xcconfig | 12 + .../SnowplowDemo.xcodeproj/project.pbxproj | 109 +- .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcschemes/SnowplowDemo.xcscheme | 54 +- .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../SnowplowDemo}/SnowplowDemo/AppDelegate.h | 0 .../SnowplowDemo}/SnowplowDemo/AppDelegate.m | 0 .../SnowplowDemo/Base.lproj/LaunchScreen.xib | 0 .../SnowplowDemo/Base.lproj/Main.storyboard | 124 +- .../SnowplowDemo}/SnowplowDemo/DemoUtils.h | 6 - .../SnowplowDemo}/SnowplowDemo/DemoUtils.m | 126 +- .../AppIcon.appiconset/Contents.json | 30 + .../AppIcon.appiconset/logo-white-120-1.png | Bin .../AppIcon.appiconset/logo-white-120.png | Bin .../AppIcon.appiconset/logo-white-152.png | Bin .../AppIcon.appiconset/logo-white-180.png | Bin .../AppIcon.appiconset/logo-white-29.png | Bin .../AppIcon.appiconset/logo-white-40.png | Bin .../AppIcon.appiconset/logo-white-58-1.png | Bin .../AppIcon.appiconset/logo-white-58.png | Bin .../AppIcon.appiconset/logo-white-76.png | Bin .../AppIcon.appiconset/logo-white-80-1.png | Bin .../AppIcon.appiconset/logo-white-80.png | Bin .../AppIcon.appiconset/logo-white-87.png | Bin .../Snowplow Logo.imageset/Contents.json | 0 .../Snowplow Logo.imageset/logo-1024.png | Bin .../Snowplow Logo.imageset/logo-180.png | Bin .../logo-transparent-full-square.png | Bin .../SnowplowDemo}/SnowplowDemo/Info.plist | 2 +- .../.xccurrentversion | 0 .../SnowplowDemo.xcdatamodel/contents | 0 .../SnowplowDemo/ViewController.h | 7 - .../SnowplowDemo/ViewController.m | 14 +- .../SnowplowDemo}/SnowplowDemo/main.m | 0 .../SnowplowDemoTests/Info.plist | 2 +- .../SnowplowDemoTests/SnowplowDemoTests.m | 0 Snowplow.xcworkspace/contents.xcworkspacedata | 7 - Snowplow/SPEventStore.m | 2 +- SnowplowDemo/Podfile | 1 - SnowplowDemo/Podfile.lock | 24 - SnowplowDemo/Pods/FMDB/src/fmdb/FMDB.h | 5 - SnowplowDemo/Pods/Headers/Private/FMDB/FMDB.h | 1 - .../Pods/Headers/Private/FMDB/FMDatabase.h | 1 - .../Private/FMDB/FMDatabaseAdditions.h | 1 - .../Headers/Private/FMDB/FMDatabasePool.h | 1 - .../Headers/Private/FMDB/FMDatabaseQueue.h | 1 - .../Pods/Headers/Private/FMDB/FMResultSet.h | 1 - .../Private/Reachability/Reachability.h | 1 - .../Private/SnowplowTracker/OpenIDFA.h | 1 - .../Private/SnowplowTracker/SPEmitter.h | 1 - .../Headers/Private/SnowplowTracker/SPEvent.h | 1 - .../Private/SnowplowTracker/SPEventStore.h | 1 - .../Private/SnowplowTracker/SPPayload.h | 1 - .../SnowplowTracker/SPRequestCallback.h | 1 - .../SnowplowTracker/SPRequestResponse.h | 1 - .../SnowplowTracker/SPSelfDescribingJson.h | 1 - .../Private/SnowplowTracker/SPSession.h | 1 - .../Private/SnowplowTracker/SPSubject.h | 1 - .../Private/SnowplowTracker/SPTracker.h | 1 - .../Private/SnowplowTracker/SPUtilities.h | 1 - .../SnowplowTracker/SPWeakTimerTarget.h | 1 - .../Private/SnowplowTracker/Snowplow.h | 1 - SnowplowDemo/Pods/Headers/Public/FMDB/FMDB.h | 1 - .../Pods/Headers/Public/FMDB/FMDatabase.h | 1 - .../Headers/Public/FMDB/FMDatabaseAdditions.h | 1 - .../Pods/Headers/Public/FMDB/FMDatabasePool.h | 1 - .../Headers/Public/FMDB/FMDatabaseQueue.h | 1 - .../Pods/Headers/Public/FMDB/FMResultSet.h | 1 - .../Public/Reachability/Reachability.h | 1 - .../Public/SnowplowTracker/SPEmitter.h | 1 - .../Headers/Public/SnowplowTracker/SPEvent.h | 1 - .../Public/SnowplowTracker/SPPayload.h | 1 - .../SnowplowTracker/SPRequestCallback.h | 1 - .../SnowplowTracker/SPSelfDescribingJson.h | 1 - .../Public/SnowplowTracker/SPSubject.h | 1 - .../Public/SnowplowTracker/SPTracker.h | 1 - .../Public/SnowplowTracker/SPUtilities.h | 1 - .../Headers/Public/SnowplowTracker/Snowplow.h | 1 - SnowplowDemo/Pods/Manifest.lock | 24 - .../Pods/Pods.xcodeproj/project.pbxproj | 907 ------------- SnowplowDemo/Pods/Reachability/LICENCE.txt | 24 - SnowplowDemo/Pods/Reachability/README.md | 75 -- SnowplowDemo/Pods/Reachability/Reachability.h | 95 -- SnowplowDemo/Pods/Reachability/Reachability.m | 469 ------- .../Target Support Files/FMDB/FMDB-prefix.pch | 4 - .../Target Support Files/FMDB/FMDB.xcconfig | 5 - .../Target Support Files/Pods/Pods-dummy.m | 5 - .../Pods/Pods-frameworks.sh | 84 -- .../Pods/Pods-resources.sh | 95 -- .../Pods/Pods.debug.xcconfig | 5 - .../Pods/Pods.release.xcconfig | 5 - .../Reachability/Reachability-dummy.m | 5 - .../Reachability/Reachability-prefix.pch | 4 - .../Reachability/Reachability.xcconfig | 5 - .../SnowplowTracker-prefix.pch | 4 - .../SnowplowTracker/SnowplowTracker.xcconfig | 5 - 150 files changed, 3125 insertions(+), 2450 deletions(-) delete mode 100755 .travis/install.sh delete mode 100755 .travis/test.sh create mode 100644 Examples/SnowplowDemo/.gitignore create mode 100644 Examples/SnowplowDemo/Podfile create mode 100644 Examples/SnowplowDemo/Podfile.lock rename {SnowplowDemo => Examples/SnowplowDemo}/Pods/FMDB/LICENSE.txt (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/Pods/FMDB/README.markdown (52%) create mode 100644 Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDB.h rename {SnowplowDemo => Examples/SnowplowDemo}/Pods/FMDB/src/fmdb/FMDatabase.h (89%) rename {SnowplowDemo => Examples/SnowplowDemo}/Pods/FMDB/src/fmdb/FMDatabase.m (89%) rename {SnowplowDemo => Examples/SnowplowDemo}/Pods/FMDB/src/fmdb/FMDatabaseAdditions.h (99%) rename {SnowplowDemo => Examples/SnowplowDemo}/Pods/FMDB/src/fmdb/FMDatabaseAdditions.m (87%) rename {SnowplowDemo => Examples/SnowplowDemo}/Pods/FMDB/src/fmdb/FMDatabasePool.h (98%) rename {SnowplowDemo => Examples/SnowplowDemo}/Pods/FMDB/src/fmdb/FMDatabasePool.m (95%) rename {SnowplowDemo => Examples/SnowplowDemo}/Pods/FMDB/src/fmdb/FMDatabaseQueue.h (93%) rename {SnowplowDemo => Examples/SnowplowDemo}/Pods/FMDB/src/fmdb/FMDatabaseQueue.m (91%) rename {SnowplowDemo => Examples/SnowplowDemo}/Pods/FMDB/src/fmdb/FMResultSet.h (99%) rename {SnowplowDemo => Examples/SnowplowDemo}/Pods/FMDB/src/fmdb/FMResultSet.m (99%) rename {SnowplowDemo => Examples/SnowplowDemo}/Pods/Local Podspecs/SnowplowTracker.podspec.json (80%) create mode 100644 Examples/SnowplowDemo/Pods/Manifest.lock create mode 100644 Examples/SnowplowDemo/Pods/Pods.xcodeproj/project.pbxproj create mode 100644 Examples/SnowplowDemo/Pods/ReachabilitySwift/LICENSE create mode 100644 Examples/SnowplowDemo/Pods/ReachabilitySwift/README.md create mode 100644 Examples/SnowplowDemo/Pods/ReachabilitySwift/Sources/Reachability.swift create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-Info.plist rename {SnowplowDemo => Examples/SnowplowDemo}/Pods/Target Support Files/FMDB/FMDB-dummy.m (100%) create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-prefix.pch create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-umbrella.h create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB.modulemap create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB.xcconfig create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-Info.plist rename SnowplowDemo/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown => Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-acknowledgements.markdown (90%) rename SnowplowDemo/Pods/Target Support Files/Pods/Pods-acknowledgements.plist => Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-acknowledgements.plist (90%) create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-dummy.m create mode 100755 Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-frameworks.sh create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-umbrella.h create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo.debug.xcconfig create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo.modulemap create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo.release.xcconfig create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-dummy.m create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-umbrella.h create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.xcconfig create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-Info.plist rename {SnowplowDemo => Examples/SnowplowDemo}/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-dummy.m (100%) create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-prefix.pch create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-umbrella.h create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker.modulemap create mode 100644 Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker.xcconfig rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo.xcodeproj/project.pbxproj (79%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename {Snowplow.xcworkspace => Examples/SnowplowDemo/SnowplowDemo.xcodeproj/project.xcworkspace}/xcshareddata/IDEWorkspaceChecks.plist (100%) rename SnowplowDemo/Pods/Pods.xcodeproj/xcshareddata/xcschemes/SnowplowTracker.xcscheme => Examples/SnowplowDemo/SnowplowDemo.xcodeproj/xcshareddata/xcschemes/SnowplowDemo.xcscheme (52%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo.xcworkspace/contents.xcworkspacedata (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/AppDelegate.h (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/AppDelegate.m (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Base.lproj/LaunchScreen.xib (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Base.lproj/Main.storyboard (75%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/DemoUtils.h (93%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/DemoUtils.m (59%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Images.xcassets/AppIcon.appiconset/Contents.json (75%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-120-1.png (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-120.png (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-152.png (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-180.png (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-29.png (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-40.png (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-58-1.png (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-58.png (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-76.png (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-80-1.png (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-80.png (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-87.png (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/Contents.json (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/logo-1024.png (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/logo-180.png (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/logo-transparent-full-square.png (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/Info.plist (95%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/SnowplowDemo.xcdatamodeld/.xccurrentversion (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/SnowplowDemo.xcdatamodeld/SnowplowDemo.xcdatamodel/contents (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/ViewController.h (92%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/ViewController.m (93%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemo/main.m (100%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemoTests/Info.plist (90%) rename {SnowplowDemo => Examples/SnowplowDemo}/SnowplowDemoTests/SnowplowDemoTests.m (100%) delete mode 100644 Snowplow.xcworkspace/contents.xcworkspacedata delete mode 100644 SnowplowDemo/Podfile delete mode 100644 SnowplowDemo/Podfile.lock delete mode 100644 SnowplowDemo/Pods/FMDB/src/fmdb/FMDB.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/FMDB/FMDB.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/FMDB/FMDatabase.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/FMDB/FMDatabaseAdditions.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/FMDB/FMDatabasePool.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/FMDB/FMDatabaseQueue.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/FMDB/FMResultSet.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/Reachability/Reachability.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/SnowplowTracker/OpenIDFA.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPEmitter.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPEvent.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPEventStore.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPPayload.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPRequestCallback.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPRequestResponse.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPSelfDescribingJson.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPSession.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPSubject.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPTracker.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPUtilities.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPWeakTimerTarget.h delete mode 120000 SnowplowDemo/Pods/Headers/Private/SnowplowTracker/Snowplow.h delete mode 120000 SnowplowDemo/Pods/Headers/Public/FMDB/FMDB.h delete mode 120000 SnowplowDemo/Pods/Headers/Public/FMDB/FMDatabase.h delete mode 120000 SnowplowDemo/Pods/Headers/Public/FMDB/FMDatabaseAdditions.h delete mode 120000 SnowplowDemo/Pods/Headers/Public/FMDB/FMDatabasePool.h delete mode 120000 SnowplowDemo/Pods/Headers/Public/FMDB/FMDatabaseQueue.h delete mode 120000 SnowplowDemo/Pods/Headers/Public/FMDB/FMResultSet.h delete mode 120000 SnowplowDemo/Pods/Headers/Public/Reachability/Reachability.h delete mode 120000 SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPEmitter.h delete mode 120000 SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPEvent.h delete mode 120000 SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPPayload.h delete mode 120000 SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPRequestCallback.h delete mode 120000 SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPSelfDescribingJson.h delete mode 120000 SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPSubject.h delete mode 120000 SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPTracker.h delete mode 120000 SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPUtilities.h delete mode 120000 SnowplowDemo/Pods/Headers/Public/SnowplowTracker/Snowplow.h delete mode 100644 SnowplowDemo/Pods/Manifest.lock delete mode 100644 SnowplowDemo/Pods/Pods.xcodeproj/project.pbxproj delete mode 100644 SnowplowDemo/Pods/Reachability/LICENCE.txt delete mode 100644 SnowplowDemo/Pods/Reachability/README.md delete mode 100644 SnowplowDemo/Pods/Reachability/Reachability.h delete mode 100644 SnowplowDemo/Pods/Reachability/Reachability.m delete mode 100644 SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-prefix.pch delete mode 100644 SnowplowDemo/Pods/Target Support Files/FMDB/FMDB.xcconfig delete mode 100644 SnowplowDemo/Pods/Target Support Files/Pods/Pods-dummy.m delete mode 100755 SnowplowDemo/Pods/Target Support Files/Pods/Pods-frameworks.sh delete mode 100755 SnowplowDemo/Pods/Target Support Files/Pods/Pods-resources.sh delete mode 100644 SnowplowDemo/Pods/Target Support Files/Pods/Pods.debug.xcconfig delete mode 100644 SnowplowDemo/Pods/Target Support Files/Pods/Pods.release.xcconfig delete mode 100644 SnowplowDemo/Pods/Target Support Files/Reachability/Reachability-dummy.m delete mode 100644 SnowplowDemo/Pods/Target Support Files/Reachability/Reachability-prefix.pch delete mode 100644 SnowplowDemo/Pods/Target Support Files/Reachability/Reachability.xcconfig delete mode 100644 SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-prefix.pch delete mode 100644 SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker.xcconfig diff --git a/.gitignore b/.gitignore index 056b00fc3..ecab5ee52 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,9 @@ DerivedData mb.log mb.pid +# Cocoapods +# Pods/ + # Carthage Carthage/ Frameworks/ diff --git a/.travis.yml b/.travis.yml index 2f01886ad..ba3b2ad92 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,17 +1,35 @@ language: objective-c -osx_image: xcode11.1 +osx_image: xcode11.2 + env: - matrix: - - TEST_PLATFORM="platform=iOS Simulator,OS=13.1,name=iPhone 8" global: - secure: H45yyUlB0cXQrzTTcnmD3WrkCyqjUzaop2jHgmBF3bm8ue4XOcTWKDSDcAN39SG0FUeDC7GdDCtWAc3VCpLwN++5IznAnvBuZSGgxQ2lCxWMhdTtXtOWU2mivgVvs+uldS7/TuVlOjZ7inrTgetl+jgFjenwESOGIIZwn7SXpPo= + - secure: H45yyUlB0cXQrzTTcnmD3WrkCyqjUzaop2jHgmBF3bm8ue4XOcTWKDSDcAN39SG0FUeDC7GdDCtWAc3VCpLwN++5IznAnvBuZSGgxQ2lCxWMhdTtXtOWU2mivgVvs+uldS7/TuVlOjZ7inrTgetl+jgFjenwESOGIIZwn7SXpPo= + - BUILD_DEST="platform=iOS Simulator,OS=13.2,name=iPhone 8" + - BUILD_PROJECT_LIB="-project Snowplow.xcodeproj" + - BUILD_SCHEME_LIB="-scheme Snowplow-iOS" + - BUILD_WORKSPACE_DEMO="-workspace SnowplowDemo.xcworkspace" + - BUILD_SCHEME_DEMO="-scheme SnowplowDemo" + rvm: - 2.3.7 + before_install: - - gem install slather - - gem install xcpretty -N --no-document - - gem install cocoapods -v '1.5.3' -install: - - ./.travis/install.sh -script: ./.travis/test.sh -after_success: slather + - gem install slather + - gem install xcpretty -N --no-document + - gem install cocoapods -v '1.8.4' + +jobs: + include: + - name: "Test Snowplow framework [iOS]" + install: + - carthage bootstrap --platform iOS + script: + - set -o pipefail && xcodebuild -sdk iphonesimulator -destination "${BUILD_DEST}" ${BUILD_PROJECT_LIB} ${BUILD_SCHEME_LIB} clean test | xcpretty + after_success: slather + + - name: "Test Snowplow ObjC demo app [iOS]" + install: + - cd Examples/SnowplowDemo + - pod update + script: + - set -o pipefail && xcodebuild -sdk iphonesimulator -destination "${BUILD_DEST}" ${BUILD_WORKSPACE_DEMO} ${BUILD_SCHEME_DEMO} clean build | xcpretty diff --git a/.travis/install.sh b/.travis/install.sh deleted file mode 100755 index c7a19b618..000000000 --- a/.travis/install.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -carthage update --platform iOS diff --git a/.travis/test.sh b/.travis/test.sh deleted file mode 100755 index 6a5f1e456..000000000 --- a/.travis/test.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -set -o pipefail - -xcodebuild -sdk iphonesimulator \ --destination "${TEST_PLATFORM}" \ --workspace Snowplow.xcworkspace \ --scheme Snowplow-iOS \ -clean test \ -| xcpretty diff --git a/Examples/SnowplowDemo/.gitignore b/Examples/SnowplowDemo/.gitignore new file mode 100644 index 000000000..ecab5ee52 --- /dev/null +++ b/Examples/SnowplowDemo/.gitignore @@ -0,0 +1,41 @@ +# User data and configs +*xcuserdata* + +*.xccheckout + +### Xcode ### +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.xcuserstate +*.gcda +*.gcno + +.DS_Store + +# Vagrant +.vagrant + +# Mountebank +mb.log +mb.pid + +# Cocoapods +# Pods/ + +# Carthage +Carthage/ +Frameworks/ + +# Documentation +/docs/html/ diff --git a/Examples/SnowplowDemo/Podfile b/Examples/SnowplowDemo/Podfile new file mode 100644 index 000000000..b1eb9a559 --- /dev/null +++ b/Examples/SnowplowDemo/Podfile @@ -0,0 +1,9 @@ +platform :ios, '9.0' +use_frameworks! + +workspace 'SnowplowDemo.xcworkspace' + +target 'SnowplowDemo' do + pod 'SnowplowTracker', :path=> '../../' +end + diff --git a/Examples/SnowplowDemo/Podfile.lock b/Examples/SnowplowDemo/Podfile.lock new file mode 100644 index 000000000..a0276bf81 --- /dev/null +++ b/Examples/SnowplowDemo/Podfile.lock @@ -0,0 +1,29 @@ +PODS: + - FMDB (2.6.2): + - FMDB/standard (= 2.6.2) + - FMDB/standard (2.6.2) + - ReachabilitySwift (4.3.1) + - SnowplowTracker (1.1.4-rc2): + - FMDB (~> 2.6.2) + - ReachabilitySwift (~> 4.3.1) + +DEPENDENCIES: + - SnowplowTracker (from `../../`) + +SPEC REPOS: + trunk: + - FMDB + - ReachabilitySwift + +EXTERNAL SOURCES: + SnowplowTracker: + :path: "../../" + +SPEC CHECKSUMS: + FMDB: 854a0341b4726e53276f2a8996f06f1b80f9259a + ReachabilitySwift: 4032e2f59586e11e3b0ebe15b167abdd587a388b + SnowplowTracker: adfea8c239085461dd70b1779a9acf2796178177 + +PODFILE CHECKSUM: 375b0f24567595e0cac8c9289ed3aea84854fdd6 + +COCOAPODS: 1.8.4 diff --git a/SnowplowDemo/Pods/FMDB/LICENSE.txt b/Examples/SnowplowDemo/Pods/FMDB/LICENSE.txt similarity index 100% rename from SnowplowDemo/Pods/FMDB/LICENSE.txt rename to Examples/SnowplowDemo/Pods/FMDB/LICENSE.txt diff --git a/SnowplowDemo/Pods/FMDB/README.markdown b/Examples/SnowplowDemo/Pods/FMDB/README.markdown similarity index 52% rename from SnowplowDemo/Pods/FMDB/README.markdown rename to Examples/SnowplowDemo/Pods/FMDB/README.markdown index ac104fe85..f0d883db2 100644 --- a/SnowplowDemo/Pods/FMDB/README.markdown +++ b/Examples/SnowplowDemo/Pods/FMDB/README.markdown @@ -1,4 +1,5 @@ -# FMDB v2.5 +# FMDB v2.6.2 + This is an Objective-C wrapper around SQLite: http://sqlite.org/ ## The FMDB Mailing List: @@ -17,7 +18,7 @@ Do you have an awesome idea that deserves to be in FMDB? You might consider pin [![Dependency Status](https://www.versioneye.com/objective-c/fmdb/2.3/badge.svg?style=flat)](https://www.versioneye.com/objective-c/fmdb/2.3) [![Reference Status](https://www.versioneye.com/objective-c/fmdb/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/fmdb/references) -FMDB can be installed using [CocoaPods](http://cocoapods.org/). +FMDB can be installed using [CocoaPods](https://cocoapods.org/). ``` pod 'FMDB' @@ -27,13 +28,13 @@ pod 'FMDB' # pod 'FMDB/SQLCipher' # FMDB with SQLCipher ``` -**If using FMDB with [SQLCipher](http://sqlcipher.net/) you must use the FMDB/SQLCipher subspec. The FMDB/SQLCipher subspec declares SQLCipher as a dependency, allowing FMDB to be compiled with the `-DSQLITE_HAS_CODEC` flag.** +**If using FMDB with [SQLCipher](https://www.zetetic.net/sqlcipher/) you must use the FMDB/SQLCipher subspec. The FMDB/SQLCipher subspec declares SQLCipher as a dependency, allowing FMDB to be compiled with the `-DSQLITE_HAS_CODEC` flag.** ## FMDB Class Reference: http://ccgus.github.io/fmdb/html/index.html ## Automatic Reference Counting (ARC) or Manual Memory Management? -You can use either style in your Cocoa project. FMDB Will figure out which you are using at compile time and do the right thing. +You can use either style in your Cocoa project. FMDB will figure out which you are using at compile time and do the right thing. ## Usage There are three main classes in FMDB: @@ -51,16 +52,20 @@ An `FMDatabase` is created with a path to a SQLite database file. This path can (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: http://www.sqlite.org/inmemorydb.html) - FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"]; +```objc +FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"]; +``` ### Opening Before you can interact with the database, it must be opened. Opening fails if there are insufficient resources or permissions to open and/or create the database. - if (![db open]) { - [db release]; - return; - } +```objc +if (![db open]) { + [db release]; + return; +} +``` ### Executing Updates @@ -76,17 +81,21 @@ Executing queries returns an `FMResultSet` object if successful, and `nil` upon In order to iterate through the results of your query, you use a `while()` loop. You also need to "step" from one record to the other. With FMDB, the easiest way to do that is like this: - FMResultSet *s = [db executeQuery:@"SELECT * FROM myTable"]; - while ([s next]) { - //retrieve values for each record - } +```objc +FMResultSet *s = [db executeQuery:@"SELECT * FROM myTable"]; +while ([s next]) { + //retrieve values for each record +} +``` You must always invoke `-[FMResultSet next]` before attempting to access the values returned in a query, even if you're only expecting one: - FMResultSet *s = [db executeQuery:@"SELECT COUNT(*) FROM myTable"]; - if ([s next]) { - int totalCount = [s intForColumnIndex:0]; - } +```objc +FMResultSet *s = [db executeQuery:@"SELECT COUNT(*) FROM myTable"]; +if ([s next]) { + int totalCount = [s intForColumnIndex:0]; +} +``` `FMResultSet` has many methods to retrieve data in an appropriate format: @@ -110,7 +119,9 @@ Typically, there's no need to `-close` an `FMResultSet` yourself, since that hap When you have finished executing queries and updates on the database, you should `-close` the `FMDatabase` connection so that SQLite will relinquish any resources it has acquired during the course of its operation. - [db close]; +```objc +[db close]; +``` ### Transactions @@ -120,7 +131,7 @@ When you have finished executing queries and updates on the database, you should You can use `FMDatabase`'s executeStatements:withResultBlock: to do multiple statements in a string: -``` +```objc NSString *sql = @"create table bulktest1 (id integer primary key autoincrement, x text);" "create table bulktest2 (id integer primary key autoincrement, y text);" "create table bulktest3 (id integer primary key autoincrement, z text);" @@ -145,90 +156,141 @@ success = [self.db executeStatements:sql withResultBlock:^int(NSDictionary *dict When providing a SQL statement to FMDB, you should not attempt to "sanitize" any values before insertion. Instead, you should use the standard SQLite binding syntax: - INSERT INTO myTable VALUES (?, ?, ?) +```sql +INSERT INTO myTable VALUES (?, ?, ?, ?) +``` The `?` character is recognized by SQLite as a placeholder for a value to be inserted. The execution methods all accept a variable number of arguments (or a representation of those arguments, such as an `NSArray`, `NSDictionary`, or a `va_list`), which are properly escaped for you. -Alternatively, you may use named parameters syntax: - - INSERT INTO myTable VALUES (:id, :name, :value) - -The parameters *must* start with a colon. SQLite itself supports other characters, but internally the Dictionary keys are prefixed with a colon, do **not** include the colon in your dictionary keys. +And, to use that SQL with the `?` placeholders from Objective-C: - NSDictionary *argsDict = [NSDictionary dictionaryWithObjectsAndKeys:@"My Name", @"name", nil]; - [db executeUpdate:@"INSERT INTO myTable (name) VALUES (:name)" withParameterDictionary:argsDict]; +```objc +NSInteger identifier = 42; +NSString *name = @"Liam O'Flaherty (\"the famous Irish author\")"; +NSDate *date = [NSDate date]; +NSString *comment = nil; -Thus, you SHOULD NOT do this (or anything like this): - - [db executeUpdate:[NSString stringWithFormat:@"INSERT INTO myTable VALUES (%@)", @"this has \" lots of ' bizarre \" quotes '"]]; +BOOL success = [db executeUpdate:@"INSERT INTO authors (identifier, name, date, comment) VALUES (?, ?, ?, ?)", @(identifier), name, date, comment ?: [NSNull null]]; +if (!success) { + NSLog(@"error = %@", [db lastErrorMessage]); +} +``` -Instead, you SHOULD do: +> **Note:** Fundamental data types, like the `NSInteger` variable `identifier`, should be as a `NSNumber` objects, achieved by using the `@` syntax, shown above. Or you can use the `[NSNumber numberWithInt:identifier]` syntax, too. +> +> Likewise, SQL `NULL` values should be inserted as `[NSNull null]`. For example, in the case of `comment` which might be `nil` (and is in this example), you can use the `comment ?: [NSNull null]` syntax, which will insert the string if `comment` is not `nil`, but will insert `[NSNull null]` if it is `nil`. - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @"this has \" lots of ' bizarre \" quotes '"]; +In Swift, you would use `executeUpdate(values:)`, which not only is a concise Swift syntax, but also `throws` errors for proper Swift 2 error handling: -All arguments provided to the `-executeUpdate:` method (or any of the variants that accept a `va_list` as a parameter) must be objects. The following will not work (and will result in a crash): +```swift +do { + let identifier = 42 + let name = "Liam O'Flaherty (\"the famous Irish author\")" + let date = NSDate() + let comment: String? = nil - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", 42]; + try db.executeUpdate("INSERT INTO authors (identifier, name, date, comment) VALUES (?, ?, ?, ?)", values: [identifier, name, date, comment ?? NSNull()]) +} catch { + print("error = \(error)") +} +``` -The proper way to insert a number is to box it in an `NSNumber` object: +> **Note:** In Swift, you don't have to wrap fundamental numeric types like you do in Objective-C. But if you are going to insert an optional string, you would probably use the `comment ?? NSNull()` syntax (i.e., if it is `nil`, use `NSNull`, otherwise use the string). - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:42]]; +Alternatively, you may use named parameters syntax: -Alternatively, you can use the `-execute*WithFormat:` variant to use `NSString`-style substitution: +```sql +INSERT INTO authors (identifier, name, date, comment) VALUES (:identifier, :name, :date, :comment) +``` - [db executeUpdateWithFormat:@"INSERT INTO myTable VALUES (%d)", 42]; +The parameters *must* start with a colon. SQLite itself supports other characters, but internally the dictionary keys are prefixed with a colon, do **not** include the colon in your dictionary keys. -Internally, the `-execute*WithFormat:` methods are properly boxing things for you. The following percent modifiers are recognized: `%@`, `%c`, `%s`, `%d`, `%D`, `%i`, `%u`, `%U`, `%hi`, `%hu`, `%qi`, `%qu`, `%f`, `%g`, `%ld`, `%lu`, `%lld`, and `%llu`. Using a modifier other than those will have unpredictable results. If, for some reason, you need the `%` character to appear in your SQL statement, you should use `%%`. +```objc +NSDictionary *arguments = @{@"identifier": @(identifier), @"name": name, @"date": date, @"comment": comment ?: [NSNull null]}; +BOOL success = [db executeUpdate:@"INSERT INTO authors (identifier, name, date, comment) VALUES (:identifier, :name, :date, :comment)" withParameterDictionary:arguments]; +if (!success) { + NSLog(@"error = %@", [db lastErrorMessage]); +} +``` +The key point is that one should not use `NSString` method `stringWithFormat` to manually insert values into the SQL statement, itself. Nor should one Swift string interpolation to insert values into the SQL. Use `?` placeholders for values to be inserted into the database (or used in `WHERE` clauses in `SELECT` statements).

Using FMDatabaseQueue and Thread Safety.

-Using a single instance of FMDatabase from multiple threads at once is a bad idea. It has always been OK to make a FMDatabase object *per thread*. Just don't share a single instance across threads, and definitely not across multiple threads at the same time. Bad things will eventually happen and you'll eventually get something to crash, or maybe get an exception, or maybe meteorites will fall out of the sky and hit your Mac Pro. *This would suck*. +Using a single instance of `FMDatabase` from multiple threads at once is a bad idea. It has always been OK to make a `FMDatabase` object *per thread*. Just don't share a single instance across threads, and definitely not across multiple threads at the same time. Bad things will eventually happen and you'll eventually get something to crash, or maybe get an exception, or maybe meteorites will fall out of the sky and hit your Mac Pro. *This would suck*. -**So don't instantiate a single FMDatabase object and use it across multiple threads.** +**So don't instantiate a single `FMDatabase` object and use it across multiple threads.** -Instead, use FMDatabaseQueue. It's your friend and it's here to help. Here's how to use it: +Instead, use `FMDatabaseQueue`. Instantiate a single `FMDatabaseQueue` and use it across multiple threads. The `FMDatabaseQueue` object will synchronize and coordinate access across the multiple threads. Here's how to use it: First, make your queue. - FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath]; +```objc +FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath]; +``` Then use it like so: - [queue inDatabase:^(FMDatabase *db) { - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]]; - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]]; - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]]; - FMResultSet *rs = [db executeQuery:@"select * from foo"]; - while ([rs next]) { - … - } - }]; +```objc +[queue inDatabase:^(FMDatabase *db) { + [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @1]; + [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @2]; + [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @3]; + + FMResultSet *rs = [db executeQuery:@"select * from foo"]; + while ([rs next]) { + … + } +}]; +``` An easy way to wrap things up in a transaction can be done like this: - [queue inTransaction:^(FMDatabase *db, BOOL *rollback) { - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]]; - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]]; - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]]; +```objc +[queue inTransaction:^(FMDatabase *db, BOOL *rollback) { + [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @1]; + [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @2]; + [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @3]; - if (whoopsSomethingWrongHappened) { - *rollback = YES; - return; - } - // etc… - [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]]; - }]; + if (whoopsSomethingWrongHappened) { + *rollback = YES; + return; + } + // etc… + [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @4]; +}]; +``` +The Swift equivalent would be: -FMDatabaseQueue will run the blocks on a serialized queue (hence the name of the class). So if you call FMDatabaseQueue's methods from multiple threads at the same time, they will be executed in the order they are received. This way queries and updates won't step on each other's toes, and every one is happy. +```swift +queue.inTransaction { db, rollback in + do { + try db.executeUpdate("INSERT INTO myTable VALUES (?)", values: [1]) + try db.executeUpdate("INSERT INTO myTable VALUES (?)", values: [2]) + try db.executeUpdate("INSERT INTO myTable VALUES (?)", values: [3]) -**Note:** The calls to FMDatabaseQueue's methods are blocking. So even though you are passing along blocks, they will **not** be run on another thread. + if whoopsSomethingWrongHappened { + rollback.memory = true + return + } + + try db.executeUpdate("INSERT INTO myTable VALUES (?)", values: [4]) + } catch { + rollback.memory = true + print(error) + } +} +``` + +`FMDatabaseQueue` will run the blocks on a serialized queue (hence the name of the class). So if you call `FMDatabaseQueue`'s methods from multiple threads at the same time, they will be executed in the order they are received. This way queries and updates won't step on each other's toes, and every one is happy. + +**Note:** The calls to `FMDatabaseQueue`'s methods are blocking. So even though you are passing along blocks, they will **not** be run on another thread. ## Making custom sqlite functions, based on blocks. -You can do this! For an example, look for "makeFunctionNamed:" in main.m +You can do this! For an example, look for `-makeFunctionNamed:` in main.m ## Swift @@ -236,55 +298,54 @@ You can use FMDB in Swift projects too. To do this, you must: -1. Copy the FMDB `.m` and `.h` files into your project. - -2. If prompted to create a "bridging header", you should do so. If not prompted and if you don't already have a bridging header, add one. +1. Copy the relevant `.m` and `.h` files from the FMDB `src` folder into your project. - For more information on bridging headers, see [Swift and Objective-C in the Same Project](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_76). + You can copy all of them (which is easiest), or only the ones you need. Likely you will need [`FMDatabase`](http://ccgus.github.io/fmdb/html/Classes/FMDatabase.html) and [`FMResultSet`](http://ccgus.github.io/fmdb/html/Classes/FMResultSet.html) at a minimum. [`FMDatabaseAdditions`](http://ccgus.github.io/fmdb/html/Categories/FMDatabase+FMDatabaseAdditions.html) provides some very useful convenience methods, so you will likely want that, too. If you are doing multithreaded access to a database, [`FMDatabaseQueue`](http://ccgus.github.io/fmdb/html/Classes/FMDatabaseQueue.html) is quite useful, too. If you choose to not copy all of the files from the `src` directory, though, you may want to update `FMDB.h` to only reference the files that you included in your project. -3. In your briding header, add a line that says: + Note, if you're copying all of the files from the `src` folder into to your project (which is recommended), you may want to drag the individual files into your project, not the folder, itself, because if you drag the folder, you won't be prompted to add the bridging header (see next point). - #import "FMDB.h" +2. If prompted to create a "bridging header", you should do so. If not prompted and if you don't already have a bridging header, add one. -4. Optionally, copy the `FMDatabaseVariadic.swift` from the "src/extra/Swift Extensions" folder into your project. This allows you to use `executeUpdate` and `executeQuery` with variadic parameters, rather than the `withArgumentsInArray` rendition. + For more information on bridging headers, see [Swift and Objective-C in the Same Project](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_76). -If you do the above, you can then write Swift code that uses FMDatabase. For example: +3. In your bridging header, add a line that says: + ```objc + #import "FMDB.h" + ``` - let documentsFolder = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String - let path = documentsFolder.stringByAppendingPathComponent("test.sqlite") +4. Use the variations of `executeQuery` and `executeUpdate` with the `sql` and `values` parameters with `try` pattern, as shown below. These renditions of `executeQuery` and `executeUpdate` both `throw` errors in true Swift 2 fashion. - let database = FMDatabase(path: path) +If you do the above, you can then write Swift code that uses `FMDatabase`. For example: - if !database.open() { - println("Unable to open database") - return - } +```swift +let documents = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false) +let fileURL = documents.URLByAppendingPathComponent("test.sqlite") - if !database.executeUpdate("create table test(x text, y text, z text)", withArgumentsInArray: nil) { - println("create table failed: \(database.lastErrorMessage())") - } +let database = FMDatabase(path: fileURL.path) - if !database.executeUpdate("insert into test (x, y, z) values (?, ?, ?)", withArgumentsInArray: ["a", "b", "c"]) { - println("insert 1 table failed: \(database.lastErrorMessage())") - } +if !database.open() { + print("Unable to open database") + return +} - if !database.executeUpdate("insert into test (x, y, z) values (?, ?, ?)", withArgumentsInArray: ["e", "f", "g"]) { - println("insert 2 table failed: \(database.lastErrorMessage())") - } +do { + try database.executeUpdate("create table test(x text, y text, z text)", values: nil) + try database.executeUpdate("insert into test (x, y, z) values (?, ?, ?)", values: ["a", "b", "c"]) + try database.executeUpdate("insert into test (x, y, z) values (?, ?, ?)", values: ["e", "f", "g"]) - if let rs = database.executeQuery("select x, y, z from test", withArgumentsInArray: nil) { - while rs.next() { - let x = rs.stringForColumn("x") - let y = rs.stringForColumn("y") - let z = rs.stringForColumn("z") - println("x = \(x); y = \(y); z = \(z)") - } - } else { - println("select failed: \(database.lastErrorMessage())") + let rs = try database.executeQuery("select x, y, z from test", values: nil) + while rs.next() { + let x = rs.stringForColumn("x") + let y = rs.stringForColumn("y") + let z = rs.stringForColumn("z") + print("x = \(x); y = \(y); z = \(z)") } +} catch let error as NSError { + print("failed: \(error.localizedDescription)") +} - database.close() - +database.close() +``` ## History @@ -311,9 +372,9 @@ And we've even added a template function to main.m (FMDBReportABugFunction) in t * Open up fmdb project in Xcode. * Open up main.m and modify the FMDBReportABugFunction to reproduce your bug. - * Setup your table(s) in the code. - * Make your query or update(s). - * Add some assertions which demonstrate the bug. + * Setup your table(s) in the code. + * Make your query or update(s). + * Add some assertions which demonstrate the bug. Then you can bring it up on the FMDB mailing list by showing your nice and compact FMDBReportABugFunction, or you can report the bug via the github FMDB bug reporter. @@ -333,4 +394,4 @@ The license for FMDB is contained in the "License.txt" file. If you happen to come across either Gus Mueller or Rob Ryan in a bar, you might consider purchasing a drink of their choosing if FMDB has been useful to you. -(The drink is for them of course, shame on you for trying to keep it.) \ No newline at end of file +(The drink is for them of course, shame on you for trying to keep it.) diff --git a/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDB.h b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDB.h new file mode 100644 index 000000000..1ff546504 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDB.h @@ -0,0 +1,10 @@ +#import + +FOUNDATION_EXPORT double FMDBVersionNumber; +FOUNDATION_EXPORT const unsigned char FMDBVersionString[]; + +#import "FMDatabase.h" +#import "FMResultSet.h" +#import "FMDatabaseAdditions.h" +#import "FMDatabaseQueue.h" +#import "FMDatabasePool.h" diff --git a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabase.h b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabase.h similarity index 89% rename from SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabase.h rename to Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabase.h index 9628655bb..7dd5f8ce0 100644 --- a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabase.h +++ b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabase.h @@ -1,5 +1,4 @@ #import -#import "sqlite3.h" #import "FMResultSet.h" #import "FMDatabasePool.h" @@ -73,7 +72,7 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary @interface FMDatabase : NSObject { - sqlite3* _db; + void* _db; NSString* _databasePath; BOOL _logsErrors; BOOL _crashOnErrors; @@ -194,7 +193,7 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary - (BOOL)open; -/** Opening a new database connection with flags +/** Opening a new database connection with flags and an optional virtual file system (VFS) @param flags one of the following three values, optionally combined with the `SQLITE_OPEN_NOMUTEX`, `SQLITE_OPEN_FULLMUTEX`, `SQLITE_OPEN_SHAREDCACHE`, `SQLITE_OPEN_PRIVATECACHE`, and/or `SQLITE_OPEN_URI` flags: @@ -209,7 +208,7 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary `SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE` The database is opened for reading and writing, and is created if it does not already exist. This is the behavior that is always used for `open` method. - + @return `YES` if successful, `NO` on error. @see [sqlite3_open_v2()](http://sqlite.org/c3ref/open.html) @@ -217,9 +216,34 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary @see close */ -#if SQLITE_VERSION_NUMBER >= 3005000 - (BOOL)openWithFlags:(int)flags; -#endif + +/** Opening a new database connection with flags and an optional virtual file system (VFS) + + @param flags one of the following three values, optionally combined with the `SQLITE_OPEN_NOMUTEX`, `SQLITE_OPEN_FULLMUTEX`, `SQLITE_OPEN_SHAREDCACHE`, `SQLITE_OPEN_PRIVATECACHE`, and/or `SQLITE_OPEN_URI` flags: + + `SQLITE_OPEN_READONLY` + + The database is opened in read-only mode. If the database does not already exist, an error is returned. + + `SQLITE_OPEN_READWRITE` + + The database is opened for reading and writing if possible, or reading only if the file is write protected by the operating system. In either case the database must already exist, otherwise an error is returned. + + `SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE` + + The database is opened for reading and writing, and is created if it does not already exist. This is the behavior that is always used for `open` method. + + @param vfsName If vfs is given the value is passed to the vfs parameter of sqlite3_open_v2. + + @return `YES` if successful, `NO` on error. + + @see [sqlite3_open_v2()](http://sqlite.org/c3ref/open.html) + @see open + @see close + */ + +- (BOOL)openWithFlags:(int)flags vfs:(NSString *)vfsName; /** Closing a database connection @@ -333,23 +357,52 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary - (BOOL)executeUpdateWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2); /** Execute single update statement - + This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html) and [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) binding any `?` placeholders in the SQL with the optional list of parameters. + + The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method. + + @param sql The SQL to be performed, with optional `?` placeholders. + + @param arguments A `NSArray` of objects to be used when binding values to the `?` placeholders in the SQL statement. + + @return `YES` upon success; `NO` upon failure. If failed, you can call ``, ``, or `` for diagnostic information regarding the failure. + + @see executeUpdate:values:error: + @see lastError + @see lastErrorCode + @see lastErrorMessage + */ + +- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments; +/** Execute single update statement + + This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html) and [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) binding any `?` placeholders in the SQL with the optional list of parameters. + The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method. + + This is similar to ``, except that this also accepts a pointer to a `NSError` pointer, so that errors can be returned. + In Swift 2, this throws errors, as if it were defined as follows: + + `func executeUpdate(sql: String!, values: [AnyObject]!) throws -> Bool` + @param sql The SQL to be performed, with optional `?` placeholders. + + @param values A `NSArray` of objects to be used when binding values to the `?` placeholders in the SQL statement. - @param arguments A `NSArray` of objects to be used when binding values to the `?` placeholders in the SQL statement. + @param error A `NSError` object to receive any error object (if any). @return `YES` upon success; `NO` upon failure. If failed, you can call ``, ``, or `` for diagnostic information regarding the failure. - + @see lastError @see lastErrorCode @see lastErrorMessage + */ -- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments; +- (BOOL)executeUpdate:(NSString*)sql values:(NSArray *)values error:(NSError * __autoreleasing *)error; /** Execute single update statement @@ -437,7 +490,7 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary */ -- (sqlite_int64)lastInsertRowId; +- (int64_t)lastInsertRowId; /** The number of rows changed by prior SQL statement. @@ -473,6 +526,8 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary @see FMResultSet @see [`FMResultSet next`](<[FMResultSet next]>) @see [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) + + @note If you want to use this from Swift, please note that you must include `FMDatabaseVariadic.swift` in your project. Without that, you cannot use this method directly, and instead have to use methods such as ``. */ - (FMResultSet *)executeQuery:(NSString*)sql, ...; @@ -503,8 +558,6 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary There are two reasons why this distinction is important. First, the printf-style escape sequences can only be used where it is permissible to use a SQLite `?` placeholder. You can use it only for values in SQL statements, but not for table names or column names or any other non-value context. This method also cannot be used in conjunction with `pragma` statements and the like. Second, note the lack of quotation marks in the SQL. The `WHERE` clause was _not_ `WHERE name='%@'` (like you might have to do if you built a SQL statement using `NSString` method `stringWithFormat`), but rather simply `WHERE name=%@`. - @note If you want to use this from Swift, please note that you must include `FMDatabaseVariadic.swift` in your project. Without that, you cannot use this method directly, and instead have to use methods such as ``. - */ - (FMResultSet *)executeQueryWithFormat:(NSString*)format, ... NS_FORMAT_FUNCTION(1,2); @@ -521,12 +574,42 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary @return A `` for the result set upon success; `nil` upon failure. If failed, you can call ``, ``, or `` for diagnostic information regarding the failure. + @see -executeQuery:values:error: @see FMResultSet @see [`FMResultSet next`](<[FMResultSet next]>) */ - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments; +/** Execute select statement + + Executing queries returns an `` object if successful, and `nil` upon failure. Like executing updates, there is a variant that accepts an `NSError **` parameter. Otherwise you should use the `` and `` methods to determine why a query failed. + + In order to iterate through the results of your query, you use a `while()` loop. You also need to "step" (via `<[FMResultSet next]>`) from one record to the other. + + This is similar to ``, except that this also accepts a pointer to a `NSError` pointer, so that errors can be returned. + + In Swift 2, this throws errors, as if it were defined as follows: + + `func executeQuery(sql: String!, values: [AnyObject]!) throws -> FMResultSet!` + + @param sql The SELECT statement to be performed, with optional `?` placeholders. + + @param values A `NSArray` of objects to be used when binding values to the `?` placeholders in the SQL statement. + + @param error A `NSError` object to receive any error object (if any). + + @return A `` for the result set upon success; `nil` upon failure. If failed, you can call ``, ``, or `` for diagnostic information regarding the failure. + + @see FMResultSet + @see [`FMResultSet next`](<[FMResultSet next]>) + + @note When called from Swift, only use the first two parameters, `sql` and `values`. This but throws the error. + + */ + +- (FMResultSet *)executeQuery:(NSString *)sql values:(NSArray *)values error:(NSError * __autoreleasing *)error; + /** Execute select statement Executing queries returns an `` object if successful, and `nil` upon failure. Like executing updates, there is a variant that accepts an `NSError **` parameter. Otherwise you should use the `` and `` methods to determine why a query failed. @@ -662,7 +745,7 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary @return `YES` if success, `NO` on error. - @see http://www.sqlite-encrypt.com/develop-guide.htm + @see https://www.zetetic.net/sqlcipher/ @warning You need to have purchased the sqlite encryption extensions for this method to work. */ @@ -675,7 +758,7 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary @return `YES` if success, `NO` on error. - @see http://www.sqlite-encrypt.com/develop-guide.htm + @see https://www.zetetic.net/sqlcipher/ @warning You need to have purchased the sqlite encryption extensions for this method to work. */ @@ -688,7 +771,7 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary @return `YES` if success, `NO` on error. - @see http://www.sqlite-encrypt.com/develop-guide.htm + @see https://www.zetetic.net/sqlcipher/ @warning You need to have purchased the sqlite encryption extensions for this method to work. */ @@ -701,7 +784,7 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary @return `YES` if success, `NO` on error. - @see http://www.sqlite-encrypt.com/develop-guide.htm + @see https://www.zetetic.net/sqlcipher/ @warning You need to have purchased the sqlite encryption extensions for this method to work. */ @@ -727,7 +810,7 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary */ -- (sqlite3*)sqliteHandle; +- (void*)sqliteHandle; ///----------------------------- @@ -791,8 +874,6 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary - (NSTimeInterval)maxBusyRetryTimeInterval; -#if SQLITE_VERSION_NUMBER >= 3007000 - ///------------------ /// @name Save points ///------------------ @@ -854,8 +935,6 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary - (NSError*)inSavePoint:(void (^)(BOOL *rollback))block; -#endif - ///---------------------------- /// @name SQLite library status ///---------------------------- @@ -932,7 +1011,7 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary @see [sqlite3_create_function()](http://sqlite.org/c3ref/create_function.html) */ -- (void)makeFunctionNamed:(NSString*)name maximumArguments:(int)count withBlock:(void (^)(sqlite3_context *context, int argc, sqlite3_value **argv))block; +- (void)makeFunctionNamed:(NSString*)name maximumArguments:(int)count withBlock:(void (^)(void *context, int argc, void **argv))block; ///--------------------- @@ -1036,7 +1115,7 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary */ @interface FMStatement : NSObject { - sqlite3_stmt *_statement; + void *_statement; NSString *_query; long _useCount; BOOL _inUse; @@ -1059,7 +1138,7 @@ typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary @see [`sqlite3_stmt`](http://www.sqlite.org/c3ref/stmt.html) */ -@property (atomic, assign) sqlite3_stmt *statement; +@property (atomic, assign) void *statement; /** Indication of whether the statement is in use */ diff --git a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabase.m b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabase.m similarity index 89% rename from SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabase.m rename to Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabase.m index 725c855e4..d33c13df1 100644 --- a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabase.m +++ b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabase.m @@ -2,6 +2,12 @@ #import "unistd.h" #import +#if FMDB_SQLITE_STANDALONE +#import +#else +#import +#endif + @interface FMDatabase () - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray*)arrayArgs orDictionary:(NSDictionary *)dictionaryArgs orVAList:(va_list)args; @@ -67,7 +73,7 @@ - (NSString *)databasePath { } + (NSString*)FMDBUserVersion { - return @"2.5"; + return @"2.6.2"; } // returns 0x0240 for version 2.4. This makes it super easy to do things like: @@ -94,7 +100,6 @@ + (SInt32)FMDBVersion { }); - return FMDBVersionVal; } @@ -109,7 +114,7 @@ + (BOOL)isSQLiteThreadSafe { return sqlite3_threadsafe() != 0; } -- (sqlite3*)sqliteHandle { +- (void*)sqliteHandle { return _db; } @@ -134,7 +139,7 @@ - (BOOL)open { return YES; } - int err = sqlite3_open([self sqlitePath], &_db ); + int err = sqlite3_open([self sqlitePath], (sqlite3**)&_db ); if(err != SQLITE_OK) { NSLog(@"error opening!: %d", err); return NO; @@ -149,13 +154,16 @@ - (BOOL)open { return YES; } -#if SQLITE_VERSION_NUMBER >= 3005000 - (BOOL)openWithFlags:(int)flags { + return [self openWithFlags:flags vfs:nil]; +} +- (BOOL)openWithFlags:(int)flags vfs:(NSString *)vfsName { +#if SQLITE_VERSION_NUMBER >= 3005000 if (_db) { return YES; } - - int err = sqlite3_open_v2([self sqlitePath], &_db, flags, NULL /* Name of VFS module to use */); + + int err = sqlite3_open_v2([self sqlitePath], (sqlite3**)&_db, flags, [vfsName UTF8String]); if(err != SQLITE_OK) { NSLog(@"error opening!: %d", err); return NO; @@ -167,8 +175,11 @@ - (BOOL)openWithFlags:(int)flags { } return YES; -} +#else + NSLog(@"openWithFlags requires SQLite 3.5"); + return NO; #endif +} - (BOOL)close { @@ -231,7 +242,7 @@ static int FMDBDatabaseBusyHandler(void *f, int count) { NSTimeInterval delta = [NSDate timeIntervalSinceReferenceDate] - (self->_startBusyRetryTime); if (delta < [self maxBusyRetryTimeInterval]) { - int requestedSleepInMillseconds = arc4random_uniform(50) + 50; + int requestedSleepInMillseconds = (int) arc4random_uniform(50) + 50; int actualSleepInMilliseconds = sqlite3_sleep(requestedSleepInMillseconds); if (actualSleepInMilliseconds != requestedSleepInMillseconds) { NSLog(@"WARNING: Requested sleep of %i milliseconds, but SQLite returned %i. Maybe SQLite wasn't built with HAVE_USLEEP=1?", requestedSleepInMillseconds, actualSleepInMilliseconds); @@ -239,7 +250,7 @@ static int FMDBDatabaseBusyHandler(void *f, int count) { return 1; } - return 0; + return 0; } - (void)setMaxBusyRetryTimeInterval:(NSTimeInterval)timeout { @@ -274,6 +285,7 @@ - (int)busyRetryTimeout { } - (void)setBusyRetryTimeout:(int)i { +#pragma unused(i) NSLog(@"%s:%d", __FUNCTION__, __LINE__); NSLog(@"FMDB: setBusyRetryTimeout does nothing, please use setMaxBusyRetryTimeInterval:"); } @@ -368,6 +380,7 @@ - (BOOL)rekeyWithData:(NSData *)keyData { return (rc == SQLITE_OK); #else +#pragma unused(keyData) return NO; #endif } @@ -388,6 +401,7 @@ - (BOOL)setKeyWithData:(NSData *)keyData { return (rc == SQLITE_OK); #else +#pragma unused(keyData) return NO; #endif } @@ -453,15 +467,15 @@ - (void)warnInUse { - (BOOL)databaseExists { if (!_db) { - + NSLog(@"The FMDatabase %@ is not open.", self); - #ifndef NS_BLOCK_ASSERTIONS +#ifndef NS_BLOCK_ASSERTIONS if (_crashOnErrors) { NSAssert(false, @"The FMDatabase %@ is not open.", self); abort(); } - #endif +#endif return NO; } @@ -488,11 +502,11 @@ - (int)lastErrorCode { - (NSError*)errorWithMessage:(NSString*)message { NSDictionary* errorMessage = [NSDictionary dictionaryWithObject:message forKey:NSLocalizedDescriptionKey]; - return [NSError errorWithDomain:@"FMDatabase" code:sqlite3_errcode(_db) userInfo:errorMessage]; + return [NSError errorWithDomain:@"FMDatabase" code:sqlite3_errcode(_db) userInfo:errorMessage]; } - (NSError*)lastError { - return [self errorWithMessage:[self lastErrorMessage]]; + return [self errorWithMessage:[self lastErrorMessage]]; } #pragma mark Update information routines @@ -757,8 +771,8 @@ - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray*)arr } if (!pStmt) { - - rc = sqlite3_prepare_v2(_db, [sql UTF8String], -1, &pStmt, 0); + + rc = sqlite3_prepare_v2(_db, [sql UTF8String], -1, &pStmt, 0); if (SQLITE_OK != rc) { if (_logsErrors) { @@ -789,7 +803,7 @@ - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray*)arr // Prefix the key with a colon. NSString *parameterName = [[NSString alloc] initWithFormat:@":%@", dictionaryKey]; - + if (_traceExecution) { NSLog(@"%@ = %@", parameterName, [dictionaryArgs objectForKey:dictionaryKey]); } @@ -811,7 +825,7 @@ - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray*)arr } } else { - + while (idx < queryCount) { if (arrayArgs && idx < (int)[arrayArgs count]) { @@ -867,7 +881,7 @@ - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray*)arr [statement setUseCount:[statement useCount] + 1]; - FMDBRelease(statement); + FMDBRelease(statement); _isExecutingStatement = NO; @@ -890,7 +904,7 @@ - (FMResultSet *)executeQueryWithFormat:(NSString*)format, ... { NSMutableString *sql = [NSMutableString stringWithCapacity:[format length]]; NSMutableArray *arguments = [NSMutableArray array]; - [self extractSQL:format argumentsList:args intoString:sql arguments:arguments]; + [self extractSQL:format argumentsList:args intoString:sql arguments:arguments]; va_end(args); @@ -901,6 +915,14 @@ - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)ar return [self executeQuery:sql withArgumentsInArray:arguments orDictionary:nil orVAList:nil]; } +- (FMResultSet *)executeQuery:(NSString *)sql values:(NSArray *)values error:(NSError * __autoreleasing *)error { + FMResultSet *rs = [self executeQuery:sql withArgumentsInArray:values orDictionary:nil orVAList:nil]; + if (!rs && error) { + *error = [self lastError]; + } + return rs; +} + - (FMResultSet *)executeQuery:(NSString*)sql withVAList:(va_list)args { return [self executeQuery:sql withArgumentsInArray:nil orDictionary:nil orVAList:args]; } @@ -949,12 +971,12 @@ - (BOOL)executeUpdate:(NSString*)sql error:(NSError**)outErr withArgumentsInArra abort(); } - sqlite3_finalize(pStmt); - if (outErr) { *outErr = [self errorWithMessage:[NSString stringWithUTF8String:sqlite3_errmsg(_db)]]; } + sqlite3_finalize(pStmt); + _isExecutingStatement = NO; return NO; } @@ -988,7 +1010,14 @@ - (BOOL)executeUpdate:(NSString*)sql error:(NSError**)outErr withArgumentsInArra idx++; } else { - NSLog(@"Could not find index for %@", dictionaryKey); + NSString *message = [NSString stringWithFormat:@"Could not find index for %@", dictionaryKey]; + + if (_logsErrors) { + NSLog(@"%@", message); + } + if (outErr) { + *outErr = [self errorWithMessage:message]; + } } } } @@ -1024,7 +1053,14 @@ - (BOOL)executeUpdate:(NSString*)sql error:(NSError**)outErr withArgumentsInArra if (idx != queryCount) { - NSLog(@"Error: the bind count (%d) is not correct for the # of variables in the query (%d) (%@) (executeUpdate)", idx, queryCount, sql); + NSString *message = [NSString stringWithFormat:@"Error: the bind count (%d) is not correct for the # of variables in the query (%d) (%@) (executeUpdate)", idx, queryCount, sql]; + if (_logsErrors) { + NSLog(@"%@", message); + } + if (outErr) { + *outErr = [self errorWithMessage:message]; + } + sqlite3_finalize(pStmt); _isExecutingStatement = NO; return NO; @@ -1039,29 +1075,41 @@ - (BOOL)executeUpdate:(NSString*)sql error:(NSError**)outErr withArgumentsInArra if (SQLITE_DONE == rc) { // all is well, let's return. } - else if (SQLITE_ERROR == rc) { + else if (rc == SQLITE_ROW) { + NSString *message = [NSString stringWithFormat:@"A executeUpdate is being called with a query string '%@'", sql]; if (_logsErrors) { - NSLog(@"Error calling sqlite3_step (%d: %s) SQLITE_ERROR", rc, sqlite3_errmsg(_db)); + NSLog(@"%@", message); NSLog(@"DB Query: %@", sql); } - } - else if (SQLITE_MISUSE == rc) { - // uh oh. - if (_logsErrors) { - NSLog(@"Error calling sqlite3_step (%d: %s) SQLITE_MISUSE", rc, sqlite3_errmsg(_db)); - NSLog(@"DB Query: %@", sql); + if (outErr) { + *outErr = [self errorWithMessage:message]; } } else { - // wtf? - if (_logsErrors) { - NSLog(@"Unknown error calling sqlite3_step (%d: %s) eu", rc, sqlite3_errmsg(_db)); - NSLog(@"DB Query: %@", sql); + if (outErr) { + *outErr = [self errorWithMessage:[NSString stringWithUTF8String:sqlite3_errmsg(_db)]]; + } + + if (SQLITE_ERROR == rc) { + if (_logsErrors) { + NSLog(@"Error calling sqlite3_step (%d: %s) SQLITE_ERROR", rc, sqlite3_errmsg(_db)); + NSLog(@"DB Query: %@", sql); + } + } + else if (SQLITE_MISUSE == rc) { + // uh oh. + if (_logsErrors) { + NSLog(@"Error calling sqlite3_step (%d: %s) SQLITE_MISUSE", rc, sqlite3_errmsg(_db)); + NSLog(@"DB Query: %@", sql); + } + } + else { + // wtf? + if (_logsErrors) { + NSLog(@"Unknown error calling sqlite3_step (%d: %s) eu", rc, sqlite3_errmsg(_db)); + NSLog(@"DB Query: %@", sql); + } } - } - - if (rc == SQLITE_ROW) { - NSAssert(NO, @"A executeUpdate is being called with a query string '%@'", sql); } if (_shouldCacheStatements && !cachedStmt) { @@ -1113,6 +1161,10 @@ - (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments { return [self executeUpdate:sql error:nil withArgumentsInArray:arguments orDictionary:nil orVAList:nil]; } +- (BOOL)executeUpdate:(NSString*)sql values:(NSArray *)values error:(NSError * __autoreleasing *)error { + return [self executeUpdate:sql error:error withArgumentsInArray:values orDictionary:nil orVAList:nil]; +} + - (BOOL)executeUpdate:(NSString*)sql withParameterDictionary:(NSDictionary *)arguments { return [self executeUpdate:sql error:nil withArgumentsInArray:nil orDictionary:arguments orVAList:nil]; } @@ -1128,7 +1180,7 @@ - (BOOL)executeUpdateWithFormat:(NSString*)format, ... { NSMutableString *sql = [NSMutableString stringWithCapacity:[format length]]; NSMutableArray *arguments = [NSMutableArray array]; - [self extractSQL:format argumentsList:args intoString:sql arguments:arguments]; + [self extractSQL:format argumentsList:args intoString:sql arguments:arguments]; va_end(args); @@ -1171,7 +1223,7 @@ - (BOOL)executeStatements:(NSString *)sql withResultBlock:(FMDBExecuteStatements NSLog(@"Error inserting batch: %s", errmsg); sqlite3_free(errmsg); } - + return (rc == SQLITE_OK); } @@ -1247,59 +1299,54 @@ - (BOOL)inTransaction { return _inTransaction; } -#if SQLITE_VERSION_NUMBER >= 3007000 - static NSString *FMDBEscapeSavePointName(NSString *savepointName) { return [savepointName stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; } - (BOOL)startSavePointWithName:(NSString*)name error:(NSError**)outErr { - +#if SQLITE_VERSION_NUMBER >= 3007000 NSParameterAssert(name); NSString *sql = [NSString stringWithFormat:@"savepoint '%@';", FMDBEscapeSavePointName(name)]; - if (![self executeUpdate:sql]) { - - if (outErr) { - *outErr = [self lastError]; - } - - return NO; - } - - return YES; + return [self executeUpdate:sql error:outErr withArgumentsInArray:nil orDictionary:nil orVAList:nil]; +#else + NSString *errorMessage = NSLocalizedString(@"Save point functions require SQLite 3.7", nil); + if (self.logsErrors) NSLog(@"%@", errorMessage); + return NO; +#endif } - (BOOL)releaseSavePointWithName:(NSString*)name error:(NSError**)outErr { - +#if SQLITE_VERSION_NUMBER >= 3007000 NSParameterAssert(name); NSString *sql = [NSString stringWithFormat:@"release savepoint '%@';", FMDBEscapeSavePointName(name)]; - BOOL worked = [self executeUpdate:sql]; - - if (!worked && outErr) { - *outErr = [self lastError]; - } - - return worked; + + return [self executeUpdate:sql error:outErr withArgumentsInArray:nil orDictionary:nil orVAList:nil]; +#else + NSString *errorMessage = NSLocalizedString(@"Save point functions require SQLite 3.7", nil); + if (self.logsErrors) NSLog(@"%@", errorMessage); + return NO; +#endif } - (BOOL)rollbackToSavePointWithName:(NSString*)name error:(NSError**)outErr { - +#if SQLITE_VERSION_NUMBER >= 3007000 NSParameterAssert(name); NSString *sql = [NSString stringWithFormat:@"rollback transaction to savepoint '%@';", FMDBEscapeSavePointName(name)]; - BOOL worked = [self executeUpdate:sql]; - - if (!worked && outErr) { - *outErr = [self lastError]; - } - - return worked; + + return [self executeUpdate:sql error:outErr withArgumentsInArray:nil orDictionary:nil orVAList:nil]; +#else + NSString *errorMessage = NSLocalizedString(@"Save point functions require SQLite 3.7", nil); + if (self.logsErrors) NSLog(@"%@", errorMessage); + return NO; +#endif } - (NSError*)inSavePoint:(void (^)(BOOL *rollback))block { +#if SQLITE_VERSION_NUMBER >= 3007000 static unsigned long savePointIdx = 0; NSString *name = [NSString stringWithFormat:@"dbSavePoint%ld", savePointIdx++]; @@ -1312,7 +1359,9 @@ - (NSError*)inSavePoint:(void (^)(BOOL *rollback))block { return err; } - block(&shouldRollback); + if (block) { + block(&shouldRollback); + } if (shouldRollback) { // We need to rollback and release this savepoint to remove it @@ -1321,9 +1370,13 @@ - (NSError*)inSavePoint:(void (^)(BOOL *rollback))block { [self releaseSavePointWithName:name error:&err]; return err; +#else + NSString *errorMessage = NSLocalizedString(@"Save point functions require SQLite 3.7", nil); + if (self.logsErrors) NSLog(@"%@", errorMessage); + return [NSError errorWithDomain:@"FMDatabase" code:0 userInfo:@{NSLocalizedDescriptionKey : errorMessage}]; +#endif } -#endif #pragma mark Cache statements @@ -1353,11 +1406,13 @@ void FMDBBlockSQLiteCallBackFunction(sqlite3_context *context, int argc, sqlite3 #else void (^block)(sqlite3_context *context, int argc, sqlite3_value **argv) = (__bridge id)sqlite3_user_data(context); #endif - block(context, argc, argv); + if (block) { + block(context, argc, argv); + } } -- (void)makeFunctionNamed:(NSString*)name maximumArguments:(int)count withBlock:(void (^)(sqlite3_context *context, int argc, sqlite3_value **argv))block { +- (void)makeFunctionNamed:(NSString*)name maximumArguments:(int)count withBlock:(void (^)(void *context, int argc, void **argv))block { if (!_openFunctions) { _openFunctions = [NSMutableSet new]; diff --git a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseAdditions.h b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseAdditions.h similarity index 99% rename from SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseAdditions.h rename to Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseAdditions.h index 85bb27782..9dd0b629e 100644 --- a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseAdditions.h +++ b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseAdditions.h @@ -209,8 +209,6 @@ - (BOOL)validateSQL:(NSString*)sql error:(NSError**)error; -#if SQLITE_VERSION_NUMBER >= 3007017 - ///----------------------------------- /// @name Application identifier tasks ///----------------------------------- @@ -252,7 +250,6 @@ */ - (void)setApplicationIDString:(NSString*)string; -#endif #endif diff --git a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseAdditions.m b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseAdditions.m similarity index 87% rename from SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseAdditions.m rename to Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseAdditions.m index 4ab35fa2d..61fa747e4 100644 --- a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseAdditions.m +++ b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseAdditions.m @@ -10,6 +10,12 @@ #import "FMDatabaseAdditions.h" #import "TargetConditionals.h" +#if FMDB_SQLITE_STANDALONE +#import +#else +#import +#endif + @interface FMDatabase (PrivateStuff) - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray*)arrayArgs orDictionary:(NSDictionary *)dictionaryArgs orVAList:(va_list)args; @end @@ -119,10 +125,9 @@ - (BOOL)columnExists:(NSString*)columnName inTableWithName:(NSString*)tableName } -#if SQLITE_VERSION_NUMBER >= 3007017 - (uint32_t)applicationID { - +#if SQLITE_VERSION_NUMBER >= 3007017 uint32_t r = 0; FMResultSet *rs = [self executeQuery:@"pragma application_id"]; @@ -134,18 +139,30 @@ - (uint32_t)applicationID { [rs close]; return r; +#else + NSString *errorMessage = NSLocalizedString(@"Application ID functions require SQLite 3.7.17", nil); + if (self.logsErrors) NSLog(@"%@", errorMessage); + return 0; +#endif } - (void)setApplicationID:(uint32_t)appID { +#if SQLITE_VERSION_NUMBER >= 3007017 NSString *query = [NSString stringWithFormat:@"pragma application_id=%d", appID]; FMResultSet *rs = [self executeQuery:query]; [rs next]; [rs close]; +#else + NSString *errorMessage = NSLocalizedString(@"Application ID functions require SQLite 3.7.17", nil); + if (self.logsErrors) NSLog(@"%@", errorMessage); +#endif } #if TARGET_OS_MAC && !TARGET_OS_IPHONE + - (NSString*)applicationIDString { +#if SQLITE_VERSION_NUMBER >= 3007017 NSString *s = NSFileTypeForHFSTypeCode([self applicationID]); assert([s length] == 6); @@ -154,20 +171,25 @@ - (NSString*)applicationIDString { return s; - +#else + NSString *errorMessage = NSLocalizedString(@"Application ID functions require SQLite 3.7.17", nil); + if (self.logsErrors) NSLog(@"%@", errorMessage); + return nil; +#endif } - (void)setApplicationIDString:(NSString*)s { - +#if SQLITE_VERSION_NUMBER >= 3007017 if ([s length] != 4) { NSLog(@"setApplicationIDString: string passed is not exactly 4 chars long. (was %ld)", [s length]); } [self setApplicationID:NSHFSTypeCodeFromFileType([NSString stringWithFormat:@"'%@'", s])]; -} - - +#else + NSString *errorMessage = NSLocalizedString(@"Application ID functions require SQLite 3.7.17", nil); + if (self.logsErrors) NSLog(@"%@", errorMessage); #endif +} #endif diff --git a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabasePool.h b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabasePool.h similarity index 98% rename from SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabasePool.h rename to Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabasePool.h index 692b8ae27..1915858f3 100644 --- a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabasePool.h +++ b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabasePool.h @@ -7,7 +7,6 @@ // #import -#import "sqlite3.h" @class FMDatabase; @@ -156,8 +155,6 @@ - (void)inDeferredTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block; -#if SQLITE_VERSION_NUMBER >= 3007000 - /** Synchronously perform database operations in pool using save point. @param block The code to be run on the `FMDatabasePool` pool. @@ -168,7 +165,6 @@ */ - (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block; -#endif @end diff --git a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabasePool.m b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabasePool.m similarity index 95% rename from SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabasePool.m rename to Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabasePool.m index 010e2920f..e8e52cb5a 100644 --- a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabasePool.m +++ b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabasePool.m @@ -6,6 +6,12 @@ // Copyright 2011 Flying Meat Inc. All rights reserved. // +#if FMDB_SQLITE_STANDALONE +#import +#else +#import +#endif + #import "FMDatabasePool.h" #import "FMDatabase.h" @@ -238,9 +244,9 @@ - (void)inDeferredTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block { - (void)inTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block { [self beginTransaction:NO withBlock:block]; } -#if SQLITE_VERSION_NUMBER >= 3007000 + - (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block { - +#if SQLITE_VERSION_NUMBER >= 3007000 static unsigned long savePointIdx = 0; NSString *name = [NSString stringWithFormat:@"savePoint%ld", savePointIdx++]; @@ -267,7 +273,11 @@ - (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block { [self pushDatabaseBackInPool:db]; return err; -} +#else + NSString *errorMessage = NSLocalizedString(@"Save point functions require SQLite 3.7", nil); + if (self.logsErrors) NSLog(@"%@", errorMessage); + return [NSError errorWithDomain:@"FMDatabase" code:0 userInfo:@{NSLocalizedDescriptionKey : errorMessage}]; #endif +} @end diff --git a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseQueue.h b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseQueue.h similarity index 93% rename from SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseQueue.h rename to Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseQueue.h index 34c0750d1..ae45b6588 100644 --- a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseQueue.h +++ b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseQueue.h @@ -7,7 +7,6 @@ // #import -#import "sqlite3.h" @class FMDatabase; @@ -117,6 +116,17 @@ - (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags; +/** Create queue using path and specified flags. + + @param aPath The file path of the database. + @param openFlags Flags passed to the openWithFlags method of the database + @param vfsName The name of a custom virtual file system + + @return The `FMDatabaseQueue` object. `nil` on error. + */ + +- (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags vfs:(NSString *)vfsName; + /** Returns the Class of 'FMDatabase' subclass, that will be used to instantiate database object. Subclasses can override this method to return specified Class of 'FMDatabase' subclass. @@ -164,11 +174,9 @@ @param block The code to be run on the queue of `FMDatabaseQueue` */ -#if SQLITE_VERSION_NUMBER >= 3007000 // NOTE: you can not nest these, since calling it will pull another database out of the pool and you'll get a deadlock. // If you need to nest, use FMDatabase's startSavePointWithName:error: instead. - (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block; -#endif @end diff --git a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseQueue.m b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseQueue.m similarity index 91% rename from SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseQueue.m rename to Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseQueue.m index ccf31fbfe..c877a341d 100644 --- a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseQueue.m +++ b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMDatabaseQueue.m @@ -9,6 +9,12 @@ #import "FMDatabaseQueue.h" #import "FMDatabase.h" +#if FMDB_SQLITE_STANDALONE +#import +#else +#import +#endif + /* Note: we call [self retain]; before using dispatch_sync, just incase @@ -51,7 +57,7 @@ + (Class)databaseClass { return [FMDatabase class]; } -- (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags { +- (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags vfs:(NSString *)vfsName { self = [super init]; @@ -61,7 +67,7 @@ - (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags { FMDBRetain(_db); #if SQLITE_VERSION_NUMBER >= 3005000 - BOOL success = [_db openWithFlags:openFlags]; + BOOL success = [_db openWithFlags:openFlags vfs:vfsName]; #else BOOL success = [_db open]; #endif @@ -81,10 +87,14 @@ - (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags { return self; } +- (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags { + return [self initWithPath:aPath flags:openFlags vfs:nil]; +} + - (instancetype)initWithPath:(NSString*)aPath { // default flags for sqlite3_open - return [self initWithPath:aPath flags:SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE]; + return [self initWithPath:aPath flags:SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE vfs:nil]; } - (instancetype)init { @@ -200,9 +210,8 @@ - (void)inTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block { [self beginTransaction:NO withBlock:block]; } -#if SQLITE_VERSION_NUMBER >= 3007000 - (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block { - +#if SQLITE_VERSION_NUMBER >= 3007000 static unsigned long savePointIdx = 0; __block NSError *err = 0x00; FMDBRetain(self); @@ -226,7 +235,11 @@ - (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block { }); FMDBRelease(self); return err; -} +#else + NSString *errorMessage = NSLocalizedString(@"Save point functions require SQLite 3.7", nil); + if (self.logsErrors) NSLog(@"%@", errorMessage); + return [NSError errorWithDomain:@"FMDatabase" code:0 userInfo:@{NSLocalizedDescriptionKey : errorMessage}]; #endif +} @end diff --git a/SnowplowDemo/Pods/FMDB/src/fmdb/FMResultSet.h b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMResultSet.h similarity index 99% rename from SnowplowDemo/Pods/FMDB/src/fmdb/FMResultSet.h rename to Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMResultSet.h index 65250f0c2..af0433b4b 100644 --- a/SnowplowDemo/Pods/FMDB/src/fmdb/FMResultSet.h +++ b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMResultSet.h @@ -1,5 +1,4 @@ #import -#import "sqlite3.h" #ifndef __has_feature // Optional. #define __has_feature(x) 0 // Compatibility with non-clang compilers. diff --git a/SnowplowDemo/Pods/FMDB/src/fmdb/FMResultSet.m b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMResultSet.m similarity index 99% rename from SnowplowDemo/Pods/FMDB/src/fmdb/FMResultSet.m rename to Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMResultSet.m index ca7e166de..cfc51e115 100644 --- a/SnowplowDemo/Pods/FMDB/src/fmdb/FMResultSet.m +++ b/Examples/SnowplowDemo/Pods/FMDB/src/fmdb/FMResultSet.m @@ -2,6 +2,12 @@ #import "FMDatabase.h" #import "unistd.h" +#if FMDB_SQLITE_STANDALONE +#import +#else +#import +#endif + @interface FMDatabase () - (void)resultSetDidClose:(FMResultSet *)resultSet; @end diff --git a/SnowplowDemo/Pods/Local Podspecs/SnowplowTracker.podspec.json b/Examples/SnowplowDemo/Pods/Local Podspecs/SnowplowTracker.podspec.json similarity index 80% rename from SnowplowDemo/Pods/Local Podspecs/SnowplowTracker.podspec.json rename to Examples/SnowplowDemo/Pods/Local Podspecs/SnowplowTracker.podspec.json index 51c0a4b85..005807d11 100644 --- a/SnowplowDemo/Pods/Local Podspecs/SnowplowTracker.podspec.json +++ b/Examples/SnowplowDemo/Pods/Local Podspecs/SnowplowTracker.podspec.json @@ -1,6 +1,6 @@ { "name": "SnowplowTracker", - "version": "0.6.1", + "version": "1.1.4-rc2", "summary": "Snowplow event tracker for iOS 7+. Add analytics to your iOS apps and games.", "description": "Snowplow is a mobile and event analytics platform with a difference: rather than tell our users how they should analyze their data, we deliver their event-level data in their own data warehouse, on their own Amazon Redshift or Postgres database, so they can analyze it any way they choose. Snowplow mobile is used by data-savvy games companies and app developers to better understand their users and how they engage with their games and applications. Snowplow is open source using the business-friendly Apache License, Version 2.0 and scales horizontally to many billions of events.", "homepage": "http://snowplowanalytics.com", @@ -11,55 +11,62 @@ }, "source": { "git": "https://github.com/snowplow/snowplow-objc-tracker.git", - "tag": "0.6.1" + "tag": "1.1.4-rc2" }, "social_media_url": "https://twitter.com/SnowPlowData", "documentation_url": "https://github.com/snowplow/snowplow/wiki/iOS-Tracker", + "swift_versions": "5.0", "platforms": { "ios": "8.0", - "osx": "10.9", + "osx": "10.10", "tvos": "9.0" }, "requires_arc": true, - "source_files": "Snowplow/*.{m,h}", - "public_header_files": [ - "Snowplow/Snowplow.h", - "Snowplow/SPTracker.h", - "Snowplow/SPEmitter.h", - "Snowplow/SPSubject.h", - "Snowplow/SPPayload.h", - "Snowplow/SPUtilities.h", - "Snowplow/SPRequestCallback.h", - "Snowplow/SPEvent.h", - "Snowplow/SPSelfDescribingJson.h" - ], "ios": { + "source_files": "Snowplow/*.swift", "frameworks": [ "CoreTelephony", "UIKit", "Foundation" ], "dependencies": { - "Reachability": [ - "3.2" + "ReachabilitySwift": [ + "~> 4.3.1" ] } }, "osx": { + "exclude_files": "Snowplow/UIViewController+SPScreenView_SWIZZLE.*", "frameworks": [ "AppKit", "Foundation" ] }, "tvos": { + "exclude_files": "Snowplow/UIViewController+SPScreenView_SWIZZLE.*", "frameworks": [ "UIKit", "Foundation" ] }, + "source_files": "Snowplow/*.{m,h}", + "public_header_files": [ + "Snowplow/Snowplow.h", + "Snowplow/SPTracker.h", + "Snowplow/SPEmitter.h", + "Snowplow/SPSubject.h", + "Snowplow/SPPayload.h", + "Snowplow/SPUtilities.h", + "Snowplow/SPRequestCallback.h", + "Snowplow/SPRequestResponse.h", + "Snowplow/SPEvent.h", + "Snowplow/SPSelfDescribingJson.h", + "Snowplow/SPScreenState.h" + ], "dependencies": { "FMDB": [ - "2.5" + "~> 2.6.2" ] - } + }, + "swift_version": "5.0" } diff --git a/Examples/SnowplowDemo/Pods/Manifest.lock b/Examples/SnowplowDemo/Pods/Manifest.lock new file mode 100644 index 000000000..a0276bf81 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Manifest.lock @@ -0,0 +1,29 @@ +PODS: + - FMDB (2.6.2): + - FMDB/standard (= 2.6.2) + - FMDB/standard (2.6.2) + - ReachabilitySwift (4.3.1) + - SnowplowTracker (1.1.4-rc2): + - FMDB (~> 2.6.2) + - ReachabilitySwift (~> 4.3.1) + +DEPENDENCIES: + - SnowplowTracker (from `../../`) + +SPEC REPOS: + trunk: + - FMDB + - ReachabilitySwift + +EXTERNAL SOURCES: + SnowplowTracker: + :path: "../../" + +SPEC CHECKSUMS: + FMDB: 854a0341b4726e53276f2a8996f06f1b80f9259a + ReachabilitySwift: 4032e2f59586e11e3b0ebe15b167abdd587a388b + SnowplowTracker: adfea8c239085461dd70b1779a9acf2796178177 + +PODFILE CHECKSUM: 375b0f24567595e0cac8c9289ed3aea84854fdd6 + +COCOAPODS: 1.8.4 diff --git a/Examples/SnowplowDemo/Pods/Pods.xcodeproj/project.pbxproj b/Examples/SnowplowDemo/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 000000000..75893027c --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,1190 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 01DD33C29D700B567D5EC6A7CDAF72C8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2F27246900F8E9C45A35219F1580EC8 /* Foundation.framework */; }; + 02E8BD0E66972E62440F525107D64446 /* SPEventStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 727D72ACDE71133A64631A79029F4911 /* SPEventStore.m */; }; + 0370787809FDCBCB15C2D4DD22190732 /* FMDatabasePool.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B02C092CC2C24365C42A2C37C7F1053 /* FMDatabasePool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0935B5734165E6FEE9E3FD2DB72A5E1E /* SPTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 94080AB01606EF57766ED6C19D44740F /* SPTracker.m */; }; + 09944176280C980EB49784DBCA380462 /* ReachabilitySwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A316F0654B950E40209063AFE2454515 /* ReachabilitySwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0C93E589E31C5CBCA37586544BEC1005 /* FMDatabaseAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 898650BD6CEAA5E0FD560997DDB71B27 /* FMDatabaseAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0CA022FE5CC3F8A1ECC6699F10BF81EE /* FMDatabaseQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 247F4D45C4AAAB7C25AD4D86372B5219 /* FMDatabaseQueue.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0D5E9C257BBE1567B7C3A8A5143F3EC4 /* Snowplow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2948B6BC079C315ADF5CFCCBBD07EF5A /* Snowplow.m */; }; + 0E141E2894DDEB55E944AC0F26EAD785 /* SPRequestCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 41D4FDEA7872D9D040DC56A8229D1936 /* SPRequestCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0F72AA9F03EC61C6D857941E0B45811A /* FMDatabasePool.h in Headers */ = {isa = PBXBuildFile; fileRef = 35B2AC7FF3C268D5011A8292EA3833A3 /* FMDatabasePool.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17911B88703DC98D7CCA55DDCAA7B644 /* OpenIDFA.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E865DF6A76904B0AAAC4AE9915A901C /* OpenIDFA.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 20A380E3186D135CE8039E3FB6507528 /* ReachabilityBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ED6255BCF02C760579652F42E23A648 /* ReachabilityBridge.swift */; }; + 219BADA8C55CF72273F5A734AA0E0EF6 /* FMDB-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = ADF20A623A0A88A251E90CAF51DBA56C /* FMDB-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 21D9BF364AF0F426DB9562625D921E47 /* SPUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A36E7A0FF44BC0EF0E0B926A2115E1C /* SPUtilities.m */; }; + 240F3129F82840F54B3FBE7EDF95A123 /* SPUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = F6622FF86FFE87E7811AB40F790B127C /* SPUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 259B532DF9DEB023BFBD3B1062262906 /* SPEventStore.h in Headers */ = {isa = PBXBuildFile; fileRef = C89D294445A0765FABB306A31C86F2E0 /* SPEventStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2715F3A106EF7DFC8CF7DE4EFB08FDCB /* SPScreenState.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E51EFBE850B801B9FB76C3C27F0AD98 /* SPScreenState.m */; }; + 29149F3C12D597459115B09DEB7E7CC6 /* Reachability.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9F0E35C34040277D0D70B4BB41855C1 /* Reachability.framework */; }; + 2A8ED48BC2E1159BABCD232B5834C520 /* OpenIDFA.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B73732F304C5F3A17BA19C82D682B85 /* OpenIDFA.m */; }; + 2F21B7B471F13CC10F8E9F5D7DE938FB /* SPSelfDescribingJson.h in Headers */ = {isa = PBXBuildFile; fileRef = 52EE569E5C5AFC85DE8A1B54A917AD7F /* SPSelfDescribingJson.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2FFA83CED4AD65164A7744DA58E334EC /* SPEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = F6F4730B727DD347D0AB99ED12DA8A8B /* SPEmitter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 302BD30E1DD73F868D76B9D81D072930 /* SnowplowTracker-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 47D3EA8C21B94A0E8EF737E44161FFAF /* SnowplowTracker-dummy.m */; }; + 33CF97469D3F267E887B8320493B195A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2F27246900F8E9C45A35219F1580EC8 /* Foundation.framework */; }; + 37296B38A55A40BEF65ECFC9B0527D8E /* FMDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = D8130594CF29F877C8238DEC3F9E1F4B /* FMDatabase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3AB6D26D74999E8B835514A726D24DD5 /* SPTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C17B90BAFBAF7158D083327640430E6 /* SPTracker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4C396B39747FA54369E389F03345564F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2F27246900F8E9C45A35219F1580EC8 /* Foundation.framework */; }; + 538F74CC22D0D13E9D79AC3ECC6DFFE7 /* FMDatabaseAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 32DAACC73AF638B601F310ED70F4791B /* FMDatabaseAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 58E564AA69FB6B6880F1EF5DF0777044 /* SnowplowTracker-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 50517982F15FB07C7DB41D7CC9667CB5 /* SnowplowTracker-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5E7DA2EBDC5C03DD66387711BD8C6099 /* SPRequestResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = A4495B1B28CAAA72E992ABDCAA27EFBE /* SPRequestResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 609282C643597F93FD8BE711074403D6 /* Snowplow-Bridging-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = 78D1A4DFF069D3AF759ADD5EB6B8DFCA /* Snowplow-Bridging-Header.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 615CCE110E2EFA2BABCE0D1F985ABF4A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF1AD2C5C31B9882E52AA332C5A77559 /* UIKit.framework */; }; + 634E11CA470DB7ADB8F054E30E042B25 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2F27246900F8E9C45A35219F1580EC8 /* Foundation.framework */; }; + 6944F0052757958E0EF9501289037D57 /* Pods-SnowplowDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C0FEB78779F3B6CCFD79377823D9606 /* Pods-SnowplowDemo-dummy.m */; }; + 6C58288FB8A294C16676BF03E51AA34D /* FMDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = E6627237447FAE85E40CF676BB4B1D96 /* FMDatabase.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 6D6D12D7B71A62243A3BEBBE63BE6E76 /* SPRequestResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 7781E1BD666D9E47AE3799AE86339164 /* SPRequestResponse.m */; }; + 7394E123FBD9832A5D6FD726D5D9470C /* FMDatabaseQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = DF3F40AB871AD3ACE7243FAC6E47BEA0 /* FMDatabaseQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 75A0C3B4DE877D92F8CE24AA32735B5B /* SPSelfDescribingJson.m in Sources */ = {isa = PBXBuildFile; fileRef = B7E333093D3AD0AD166C9BAA19929674 /* SPSelfDescribingJson.m */; }; + 7BD18AA91B9C52DBDA1A27D2EF0CF497 /* UIViewController+SPScreenView_SWIZZLE.m in Sources */ = {isa = PBXBuildFile; fileRef = 39E5AC5740836C2024495C3082F9F950 /* UIViewController+SPScreenView_SWIZZLE.m */; }; + 7D4E0D91FE60904C9FB50F6D447B8A30 /* FMDB-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C325C07B998630F8B5E1EE5005C40C3D /* FMDB-dummy.m */; }; + 844BE8D22B830B234953CCA142C37795 /* SPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 49B23AC1E3E3167E2D3929BEBC46ECD1 /* SPSession.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 89A589D04411197399D7FCF7159AAE0A /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 352E1FB257D2A6850E47288B3D330358 /* CoreTelephony.framework */; }; + A3D604847A6AB37F2DCB5D13F774DD89 /* SPWeakTimerTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D6A68C3B6995331DEE7BE70451AAF7A /* SPWeakTimerTarget.m */; }; + A92CDCFE2DC0D002DE1F208C2FEAB545 /* FMDB.h in Headers */ = {isa = PBXBuildFile; fileRef = 95FACD4D00310517DD82462D9648B9CF /* FMDB.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A9771ED90AF87C6F5C5A1EEDAD603D51 /* SPSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = A1A62BAFBA0B720ED5D585E62DC9E4D2 /* SPSubject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AC96F44279E61358242F26840D4853F0 /* Reachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71C3071BFB3FA8F34D52B6F93D15127F /* Reachability.swift */; }; + B01B555B271F931BB6A234218C23D2F9 /* FMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBB0124C2ADC8E5B335AAEA7B8F27C1B /* FMDB.framework */; }; + B0CEE2A3A878894CD9D0407F52F9C4A6 /* SPEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 8379C90EFF2DB8CD3D09654B63D5D3F9 /* SPEvent.m */; }; + B22B50C13BAAA6580F6F98E5CA91599D /* SPInstallTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FBBB4A1BD1F44D9D4E37BAD61B641C9 /* SPInstallTracker.m */; }; + BB7ECF4DBE8D4BB38E6F2F08C326922A /* FMResultSet.h in Headers */ = {isa = PBXBuildFile; fileRef = FDA0E32FC6358D08E7B8ABF05BE73135 /* FMResultSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C0BFA6634C4977DDD11FC129C5EB4B48 /* SPPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 17F6E912D3084D4BFC7DCCD6E999F783 /* SPPayload.m */; }; + CBE4DEBD9FB9018EF7C59EBD1B49BD7E /* SPPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BE7DFF0F8D5B3E9FE7F9BEF386F8CFB /* SPPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D6C89E5733DA5C082FD5091ABFD91222 /* SPEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = DF329760D859FFC5B9C129D6EE2E010C /* SPEmitter.m */; }; + D83A43C7F1166AA9DEA1CDA2D249F0F4 /* SPEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 49AB51DDF366225FCA9DD621643068C7 /* SPEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E5938189529B1F8BD074BB166C8BDE57 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB73BB999F1E911BC840967EEA9BE5E2 /* SystemConfiguration.framework */; }; + E5F6ACACDF29D937A21E7DEC85A13E3E /* ReachabilitySwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4866ECED6205B2F68D567F31E0B1990A /* ReachabilitySwift-dummy.m */; }; + E62C8898056FD783F4B903FEE499A301 /* SPInstallTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 45C19A50D515F2205D8D9D4F82937FE2 /* SPInstallTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ED393E797BEBCC31BE947598E31390C8 /* SPSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = 6173205A840F52B2331FADE994E5401A /* SPSubject.m */; }; + F0B3C9FA5B37B3BBB6FF41ECE7937C04 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 352E1FB257D2A6850E47288B3D330358 /* CoreTelephony.framework */; }; + F219C7494EC7BC37336E54C4F725B5BA /* SPScreenState.h in Headers */ = {isa = PBXBuildFile; fileRef = 606F6F3B67DE661E2F5DFFC0E132DFE1 /* SPScreenState.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F345C2346A640AAC7A746D6949985DB3 /* Snowplow.h in Headers */ = {isa = PBXBuildFile; fileRef = 378640A464825FA1B633A905F2E216B2 /* Snowplow.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F45368BFF372668F2FE0D6CEDD4A8900 /* Pods-SnowplowDemo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5ECC5ABF12871DEAE75EC70030BC9B36 /* Pods-SnowplowDemo-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7C3E1E1BA2A45584AA6A1F5D17C1648 /* UIViewController+SPScreenView_SWIZZLE.h in Headers */ = {isa = PBXBuildFile; fileRef = 315310806F4DB6B2490A4352F663D88C /* UIViewController+SPScreenView_SWIZZLE.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FADEED68DB7CAE4D6D2834167363A022 /* SPWeakTimerTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 07F8D667E0A5F856EC0912367CBF4C39 /* SPWeakTimerTarget.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FCC7E5205F93E8DC1F919AA36F061209 /* SPSession.m in Sources */ = {isa = PBXBuildFile; fileRef = FA4032781D266B7346924D2E814DE4F5 /* SPSession.m */; }; + FDD8729FB9BBE45B90107CA26BE5804B /* FMResultSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A2CE6597686F13AEB3167B23CAA0953 /* FMResultSet.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 14BE92A1347E8B9BFE65A56FEFE6EFE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8592E0E389D40AC17881400ADC67ABC0; + remoteInfo = FMDB; + }; + 27C36A2BE28B636576961C5975A87634 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8592E0E389D40AC17881400ADC67ABC0; + remoteInfo = FMDB; + }; + 6B00032ACAF4239F363E6AA73BC7BEC0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4DBA189AF01B5699C4ECEC25CBCCFA65; + remoteInfo = SnowplowTracker; + }; + 7703093EB7EFF730947CD4F1B3041924 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0B00B2C167CD783351BD1D00BD5AD1F8; + remoteInfo = ReachabilitySwift; + }; + E88A5B9FFAD3BB78F0DF28458113DD3C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0B00B2C167CD783351BD1D00BD5AD1F8; + remoteInfo = ReachabilitySwift; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 0068A661B5990207D7DD50EACFCBF95E /* ReachabilitySwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ReachabilitySwift-Info.plist"; sourceTree = ""; }; + 07F8D667E0A5F856EC0912367CBF4C39 /* SPWeakTimerTarget.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPWeakTimerTarget.h; path = Snowplow/SPWeakTimerTarget.h; sourceTree = ""; }; + 0BE7DFF0F8D5B3E9FE7F9BEF386F8CFB /* SPPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPPayload.h; path = Snowplow/SPPayload.h; sourceTree = ""; }; + 0FBBB4A1BD1F44D9D4E37BAD61B641C9 /* SPInstallTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPInstallTracker.m; path = Snowplow/SPInstallTracker.m; sourceTree = ""; }; + 13C1438790264802B7BEC3CFB3B9A541 /* Pods-SnowplowDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SnowplowDemo.debug.xcconfig"; sourceTree = ""; }; + 17F6E912D3084D4BFC7DCCD6E999F783 /* SPPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPPayload.m; path = Snowplow/SPPayload.m; sourceTree = ""; }; + 1A2CE6597686F13AEB3167B23CAA0953 /* FMResultSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMResultSet.m; path = src/fmdb/FMResultSet.m; sourceTree = ""; }; + 1B73732F304C5F3A17BA19C82D682B85 /* OpenIDFA.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OpenIDFA.m; path = Snowplow/OpenIDFA.m; sourceTree = ""; }; + 21B03CA622E690725A6626C088E1D09F /* Reachability.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Reachability.framework; path = ReachabilitySwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 247F4D45C4AAAB7C25AD4D86372B5219 /* FMDatabaseQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabaseQueue.m; path = src/fmdb/FMDatabaseQueue.m; sourceTree = ""; }; + 2948B6BC079C315ADF5CFCCBBD07EF5A /* Snowplow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Snowplow.m; path = Snowplow/Snowplow.m; sourceTree = ""; }; + 2A36E7A0FF44BC0EF0E0B926A2115E1C /* SPUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPUtilities.m; path = Snowplow/SPUtilities.m; sourceTree = ""; }; + 2C17B90BAFBAF7158D083327640430E6 /* SPTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTracker.h; path = Snowplow/SPTracker.h; sourceTree = ""; }; + 2E865DF6A76904B0AAAC4AE9915A901C /* OpenIDFA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OpenIDFA.h; path = Snowplow/OpenIDFA.h; sourceTree = ""; }; + 315310806F4DB6B2490A4352F663D88C /* UIViewController+SPScreenView_SWIZZLE.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+SPScreenView_SWIZZLE.h"; path = "Snowplow/UIViewController+SPScreenView_SWIZZLE.h"; sourceTree = ""; }; + 3188209CBEDD11949DC49F5D2D41AF27 /* FMDB.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FMDB.modulemap; sourceTree = ""; }; + 32DAACC73AF638B601F310ED70F4791B /* FMDatabaseAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabaseAdditions.h; path = src/fmdb/FMDatabaseAdditions.h; sourceTree = ""; }; + 345B9337B92FA2FCDF53EF4F3FCA6750 /* SnowplowTracker.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnowplowTracker.framework; path = SnowplowTracker.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 352E1FB257D2A6850E47288B3D330358 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreTelephony.framework; sourceTree = DEVELOPER_DIR; }; + 3585059C2A69ED65FF9673E3A5ED780D /* FMDB-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FMDB-prefix.pch"; sourceTree = ""; }; + 35B2AC7FF3C268D5011A8292EA3833A3 /* FMDatabasePool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabasePool.h; path = src/fmdb/FMDatabasePool.h; sourceTree = ""; }; + 378640A464825FA1B633A905F2E216B2 /* Snowplow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Snowplow.h; path = Snowplow/Snowplow.h; sourceTree = ""; }; + 3796E8F6AFFFFBEBCA1E456095C3B0B4 /* Pods-SnowplowDemo-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SnowplowDemo-frameworks.sh"; sourceTree = ""; }; + 39E5AC5740836C2024495C3082F9F950 /* UIViewController+SPScreenView_SWIZZLE.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+SPScreenView_SWIZZLE.m"; path = "Snowplow/UIViewController+SPScreenView_SWIZZLE.m"; sourceTree = ""; }; + 3C0FEB78779F3B6CCFD79377823D9606 /* Pods-SnowplowDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SnowplowDemo-dummy.m"; sourceTree = ""; }; + 3FB4FCF02EF43F4441E1149D504EDED3 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; + 41D4FDEA7872D9D040DC56A8229D1936 /* SPRequestCallback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPRequestCallback.h; path = Snowplow/SPRequestCallback.h; sourceTree = ""; }; + 45C19A50D515F2205D8D9D4F82937FE2 /* SPInstallTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPInstallTracker.h; path = Snowplow/SPInstallTracker.h; sourceTree = ""; }; + 47D3EA8C21B94A0E8EF737E44161FFAF /* SnowplowTracker-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnowplowTracker-dummy.m"; sourceTree = ""; }; + 4866ECED6205B2F68D567F31E0B1990A /* ReachabilitySwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ReachabilitySwift-dummy.m"; sourceTree = ""; }; + 4990EEDD3D443A6C638E655A3889BFE4 /* FMDB.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FMDB.xcconfig; sourceTree = ""; }; + 49AB51DDF366225FCA9DD621643068C7 /* SPEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPEvent.h; path = Snowplow/SPEvent.h; sourceTree = ""; }; + 49B23AC1E3E3167E2D3929BEBC46ECD1 /* SPSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPSession.h; path = Snowplow/SPSession.h; sourceTree = ""; }; + 50517982F15FB07C7DB41D7CC9667CB5 /* SnowplowTracker-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnowplowTracker-umbrella.h"; sourceTree = ""; }; + 52EE569E5C5AFC85DE8A1B54A917AD7F /* SPSelfDescribingJson.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPSelfDescribingJson.h; path = Snowplow/SPSelfDescribingJson.h; sourceTree = ""; }; + 5620F58A46FCD38A50EFB3EA8B987DB1 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; + 5ECC5ABF12871DEAE75EC70030BC9B36 /* Pods-SnowplowDemo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SnowplowDemo-umbrella.h"; sourceTree = ""; }; + 606F6F3B67DE661E2F5DFFC0E132DFE1 /* SPScreenState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPScreenState.h; path = Snowplow/SPScreenState.h; sourceTree = ""; }; + 6173205A840F52B2331FADE994E5401A /* SPSubject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPSubject.m; path = Snowplow/SPSubject.m; sourceTree = ""; }; + 6B02C092CC2C24365C42A2C37C7F1053 /* FMDatabasePool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabasePool.m; path = src/fmdb/FMDatabasePool.m; sourceTree = ""; }; + 6F0E30D582F4471EB863D445101ADEF4 /* Pods-SnowplowDemo-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-SnowplowDemo-Info.plist"; sourceTree = ""; }; + 6F26C7C777CC39744F54CA3EC4566EBE /* SnowplowTracker.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = SnowplowTracker.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 71C3071BFB3FA8F34D52B6F93D15127F /* Reachability.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reachability.swift; path = Sources/Reachability.swift; sourceTree = ""; }; + 727D72ACDE71133A64631A79029F4911 /* SPEventStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPEventStore.m; path = Snowplow/SPEventStore.m; sourceTree = ""; }; + 7781E1BD666D9E47AE3799AE86339164 /* SPRequestResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPRequestResponse.m; path = Snowplow/SPRequestResponse.m; sourceTree = ""; }; + 78D1A4DFF069D3AF759ADD5EB6B8DFCA /* Snowplow-Bridging-Header.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Snowplow-Bridging-Header.h"; path = "Snowplow/Snowplow-Bridging-Header.h"; sourceTree = ""; }; + 8379C90EFF2DB8CD3D09654B63D5D3F9 /* SPEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPEvent.m; path = Snowplow/SPEvent.m; sourceTree = ""; }; + 898650BD6CEAA5E0FD560997DDB71B27 /* FMDatabaseAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabaseAdditions.m; path = src/fmdb/FMDatabaseAdditions.m; sourceTree = ""; }; + 8D6A68C3B6995331DEE7BE70451AAF7A /* SPWeakTimerTarget.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPWeakTimerTarget.m; path = Snowplow/SPWeakTimerTarget.m; sourceTree = ""; }; + 8E51EFBE850B801B9FB76C3C27F0AD98 /* SPScreenState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPScreenState.m; path = Snowplow/SPScreenState.m; sourceTree = ""; }; + 91F514320F07D798CBF1B17A8F53D965 /* Pods-SnowplowDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SnowplowDemo.release.xcconfig"; sourceTree = ""; }; + 94080AB01606EF57766ED6C19D44740F /* SPTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTracker.m; path = Snowplow/SPTracker.m; sourceTree = ""; }; + 95FACD4D00310517DD82462D9648B9CF /* FMDB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDB.h; path = src/fmdb/FMDB.h; sourceTree = ""; }; + 97663F66F0E75A48DAB7B1DE93A511DC /* ReachabilitySwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ReachabilitySwift-prefix.pch"; sourceTree = ""; }; + 993A3EBE8BFF560318C7EEE45CDF9E55 /* Pods-SnowplowDemo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-SnowplowDemo.modulemap"; 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; }; + 9ED6255BCF02C760579652F42E23A648 /* ReachabilityBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReachabilityBridge.swift; path = Snowplow/ReachabilityBridge.swift; sourceTree = ""; }; + A1A62BAFBA0B720ED5D585E62DC9E4D2 /* SPSubject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPSubject.h; path = Snowplow/SPSubject.h; sourceTree = ""; }; + A316F0654B950E40209063AFE2454515 /* ReachabilitySwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ReachabilitySwift-umbrella.h"; sourceTree = ""; }; + A3A80BA70CFB7F75C5391BEBBBA8C9DA /* FMDB.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FMDB.framework; path = FMDB.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A4495B1B28CAAA72E992ABDCAA27EFBE /* SPRequestResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPRequestResponse.h; path = Snowplow/SPRequestResponse.h; sourceTree = ""; }; + A958CFABBD589F780A6B3A24A824A7A6 /* Pods-SnowplowDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-SnowplowDemo-acknowledgements.plist"; sourceTree = ""; }; + ABE3DC69BA18BC14F5BEB747181C78E1 /* SnowplowTracker-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnowplowTracker-Info.plist"; sourceTree = ""; }; + ADF20A623A0A88A251E90CAF51DBA56C /* FMDB-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FMDB-umbrella.h"; sourceTree = ""; }; + B7086D72F605EF38CB7B5483297848E3 /* FMDB-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FMDB-Info.plist"; sourceTree = ""; }; + B7E333093D3AD0AD166C9BAA19929674 /* SPSelfDescribingJson.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPSelfDescribingJson.m; path = Snowplow/SPSelfDescribingJson.m; sourceTree = ""; }; + B9F0E35C34040277D0D70B4BB41855C1 /* Reachability.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Reachability.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BB73BB999F1E911BC840967EEA9BE5E2 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + BE333E127CA851BE1DF8269A6AA5E1EA /* SnowplowTracker.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnowplowTracker.xcconfig; sourceTree = ""; }; + C1874F25ABE46113720029EA5195800C /* ReachabilitySwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ReachabilitySwift.modulemap; sourceTree = ""; }; + C325C07B998630F8B5E1EE5005C40C3D /* FMDB-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FMDB-dummy.m"; sourceTree = ""; }; + C89D294445A0765FABB306A31C86F2E0 /* SPEventStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPEventStore.h; path = Snowplow/SPEventStore.h; sourceTree = ""; }; + CD8A83EBEEB5FE99C115E57F9D23FB89 /* Pods-SnowplowDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-SnowplowDemo-acknowledgements.markdown"; sourceTree = ""; }; + D8130594CF29F877C8238DEC3F9E1F4B /* FMDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabase.h; path = src/fmdb/FMDatabase.h; sourceTree = ""; }; + DCF1A6F2D859BFEC8EFBC90735B9D35A /* ReachabilitySwift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ReachabilitySwift.xcconfig; sourceTree = ""; }; + DF1AD2C5C31B9882E52AA332C5A77559 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + DF329760D859FFC5B9C129D6EE2E010C /* SPEmitter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPEmitter.m; path = Snowplow/SPEmitter.m; sourceTree = ""; }; + DF3F40AB871AD3ACE7243FAC6E47BEA0 /* FMDatabaseQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabaseQueue.h; path = src/fmdb/FMDatabaseQueue.h; sourceTree = ""; }; + DF970D909B560319A1CC7B1BD2715362 /* SnowplowTracker-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnowplowTracker-prefix.pch"; sourceTree = ""; }; + E6627237447FAE85E40CF676BB4B1D96 /* FMDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabase.m; path = src/fmdb/FMDatabase.m; sourceTree = ""; }; + EBB0124C2ADC8E5B335AAEA7B8F27C1B /* FMDB.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FMDB.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F256A6BCCE3721B8061A5BE850AD7ED7 /* SnowplowTracker.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnowplowTracker.modulemap; sourceTree = ""; }; + F2F27246900F8E9C45A35219F1580EC8 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + F6622FF86FFE87E7811AB40F790B127C /* SPUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUtilities.h; path = Snowplow/SPUtilities.h; sourceTree = ""; }; + F6F4730B727DD347D0AB99ED12DA8A8B /* SPEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPEmitter.h; path = Snowplow/SPEmitter.h; sourceTree = ""; }; + F710B3230FDEE67EF81A6A23AAA56097 /* Pods_SnowplowDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_SnowplowDemo.framework; path = "Pods-SnowplowDemo.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + FA4032781D266B7346924D2E814DE4F5 /* SPSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPSession.m; path = Snowplow/SPSession.m; sourceTree = ""; }; + FDA0E32FC6358D08E7B8ABF05BE73135 /* FMResultSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMResultSet.h; path = src/fmdb/FMResultSet.h; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 41E857D338F96D89E73F6E28241F0A8B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 634E11CA470DB7ADB8F054E30E042B25 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4763619D1735B267AA52D43F985B377D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 01DD33C29D700B567D5EC6A7CDAF72C8 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 914C008174B82153D0364171B4CADE62 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F0B3C9FA5B37B3BBB6FF41ECE7937C04 /* CoreTelephony.framework in Frameworks */, + B01B555B271F931BB6A234218C23D2F9 /* FMDB.framework in Frameworks */, + 4C396B39747FA54369E389F03345564F /* Foundation.framework in Frameworks */, + 29149F3C12D597459115B09DEB7E7CC6 /* Reachability.framework in Frameworks */, + 615CCE110E2EFA2BABCE0D1F985ABF4A /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 92A37A51219ED31062DE51A3E139BF37 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 89A589D04411197399D7FCF7159AAE0A /* CoreTelephony.framework in Frameworks */, + 33CF97469D3F267E887B8320493B195A /* Foundation.framework in Frameworks */, + E5938189529B1F8BD074BB166C8BDE57 /* SystemConfiguration.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 011D38C18945A06A0C1C0C3CA2B932FA /* Pods */ = { + isa = PBXGroup; + children = ( + 5FF9184634A1D9124FAD87D051886F19 /* FMDB */, + 738D8E75D20C5363B2E9CF77E2DCCCD9 /* ReachabilitySwift */, + ); + name = Pods; + sourceTree = ""; + }; + 10F3A926386CF36BE87545FEB02C441D /* Pod */ = { + isa = PBXGroup; + children = ( + 3FB4FCF02EF43F4441E1149D504EDED3 /* LICENSE */, + 5620F58A46FCD38A50EFB3EA8B987DB1 /* README.md */, + 6F26C7C777CC39744F54CA3EC4566EBE /* SnowplowTracker.podspec */, + ); + name = Pod; + sourceTree = ""; + }; + 1CAFCE1FDBF46B704E299805C88608AA /* Products */ = { + isa = PBXGroup; + children = ( + A3A80BA70CFB7F75C5391BEBBBA8C9DA /* FMDB.framework */, + F710B3230FDEE67EF81A6A23AAA56097 /* Pods_SnowplowDemo.framework */, + 21B03CA622E690725A6626C088E1D09F /* Reachability.framework */, + 345B9337B92FA2FCDF53EF4F3FCA6750 /* SnowplowTracker.framework */, + ); + name = Products; + sourceTree = ""; + }; + 29EA578140EA0DBC79283224CA5D12D0 /* SnowplowTracker */ = { + isa = PBXGroup; + children = ( + 2E865DF6A76904B0AAAC4AE9915A901C /* OpenIDFA.h */, + 1B73732F304C5F3A17BA19C82D682B85 /* OpenIDFA.m */, + 9ED6255BCF02C760579652F42E23A648 /* ReachabilityBridge.swift */, + 378640A464825FA1B633A905F2E216B2 /* Snowplow.h */, + 2948B6BC079C315ADF5CFCCBBD07EF5A /* Snowplow.m */, + 78D1A4DFF069D3AF759ADD5EB6B8DFCA /* Snowplow-Bridging-Header.h */, + F6F4730B727DD347D0AB99ED12DA8A8B /* SPEmitter.h */, + DF329760D859FFC5B9C129D6EE2E010C /* SPEmitter.m */, + 49AB51DDF366225FCA9DD621643068C7 /* SPEvent.h */, + 8379C90EFF2DB8CD3D09654B63D5D3F9 /* SPEvent.m */, + C89D294445A0765FABB306A31C86F2E0 /* SPEventStore.h */, + 727D72ACDE71133A64631A79029F4911 /* SPEventStore.m */, + 45C19A50D515F2205D8D9D4F82937FE2 /* SPInstallTracker.h */, + 0FBBB4A1BD1F44D9D4E37BAD61B641C9 /* SPInstallTracker.m */, + 0BE7DFF0F8D5B3E9FE7F9BEF386F8CFB /* SPPayload.h */, + 17F6E912D3084D4BFC7DCCD6E999F783 /* SPPayload.m */, + 41D4FDEA7872D9D040DC56A8229D1936 /* SPRequestCallback.h */, + A4495B1B28CAAA72E992ABDCAA27EFBE /* SPRequestResponse.h */, + 7781E1BD666D9E47AE3799AE86339164 /* SPRequestResponse.m */, + 606F6F3B67DE661E2F5DFFC0E132DFE1 /* SPScreenState.h */, + 8E51EFBE850B801B9FB76C3C27F0AD98 /* SPScreenState.m */, + 52EE569E5C5AFC85DE8A1B54A917AD7F /* SPSelfDescribingJson.h */, + B7E333093D3AD0AD166C9BAA19929674 /* SPSelfDescribingJson.m */, + 49B23AC1E3E3167E2D3929BEBC46ECD1 /* SPSession.h */, + FA4032781D266B7346924D2E814DE4F5 /* SPSession.m */, + A1A62BAFBA0B720ED5D585E62DC9E4D2 /* SPSubject.h */, + 6173205A840F52B2331FADE994E5401A /* SPSubject.m */, + 2C17B90BAFBAF7158D083327640430E6 /* SPTracker.h */, + 94080AB01606EF57766ED6C19D44740F /* SPTracker.m */, + F6622FF86FFE87E7811AB40F790B127C /* SPUtilities.h */, + 2A36E7A0FF44BC0EF0E0B926A2115E1C /* SPUtilities.m */, + 07F8D667E0A5F856EC0912367CBF4C39 /* SPWeakTimerTarget.h */, + 8D6A68C3B6995331DEE7BE70451AAF7A /* SPWeakTimerTarget.m */, + 315310806F4DB6B2490A4352F663D88C /* UIViewController+SPScreenView_SWIZZLE.h */, + 39E5AC5740836C2024495C3082F9F950 /* UIViewController+SPScreenView_SWIZZLE.m */, + 10F3A926386CF36BE87545FEB02C441D /* Pod */, + 78717A30B8A47C9AD3B05D5114035683 /* Support Files */, + ); + name = SnowplowTracker; + path = ../../..; + sourceTree = ""; + }; + 41566C9332F5E20D25DE6FC4ECD99CFD /* Pods-SnowplowDemo */ = { + isa = PBXGroup; + children = ( + 993A3EBE8BFF560318C7EEE45CDF9E55 /* Pods-SnowplowDemo.modulemap */, + CD8A83EBEEB5FE99C115E57F9D23FB89 /* Pods-SnowplowDemo-acknowledgements.markdown */, + A958CFABBD589F780A6B3A24A824A7A6 /* Pods-SnowplowDemo-acknowledgements.plist */, + 3C0FEB78779F3B6CCFD79377823D9606 /* Pods-SnowplowDemo-dummy.m */, + 3796E8F6AFFFFBEBCA1E456095C3B0B4 /* Pods-SnowplowDemo-frameworks.sh */, + 6F0E30D582F4471EB863D445101ADEF4 /* Pods-SnowplowDemo-Info.plist */, + 5ECC5ABF12871DEAE75EC70030BC9B36 /* Pods-SnowplowDemo-umbrella.h */, + 13C1438790264802B7BEC3CFB3B9A541 /* Pods-SnowplowDemo.debug.xcconfig */, + 91F514320F07D798CBF1B17A8F53D965 /* Pods-SnowplowDemo.release.xcconfig */, + ); + name = "Pods-SnowplowDemo"; + path = "Target Support Files/Pods-SnowplowDemo"; + sourceTree = ""; + }; + 43F31F0B2EF97ACEA1386CEBD4694090 /* iOS */ = { + isa = PBXGroup; + children = ( + 352E1FB257D2A6850E47288B3D330358 /* CoreTelephony.framework */, + F2F27246900F8E9C45A35219F1580EC8 /* Foundation.framework */, + BB73BB999F1E911BC840967EEA9BE5E2 /* SystemConfiguration.framework */, + DF1AD2C5C31B9882E52AA332C5A77559 /* UIKit.framework */, + ); + name = iOS; + sourceTree = ""; + }; + 5E8703523E24F51CED3025E8DC4632FB /* Frameworks */ = { + isa = PBXGroup; + children = ( + EBB0124C2ADC8E5B335AAEA7B8F27C1B /* FMDB.framework */, + B9F0E35C34040277D0D70B4BB41855C1 /* Reachability.framework */, + 43F31F0B2EF97ACEA1386CEBD4694090 /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + 5FF9184634A1D9124FAD87D051886F19 /* FMDB */ = { + isa = PBXGroup; + children = ( + EC2067F2DC2E504FAFB8609E8F7B064E /* standard */, + 82501659FFA486B9D7D77C7D80E70EEC /* Support Files */, + ); + name = FMDB; + path = FMDB; + sourceTree = ""; + }; + 738D8E75D20C5363B2E9CF77E2DCCCD9 /* ReachabilitySwift */ = { + isa = PBXGroup; + children = ( + 71C3071BFB3FA8F34D52B6F93D15127F /* Reachability.swift */, + DC75265DDC5EA7F12E9B01157D3CC9F6 /* Support Files */, + ); + name = ReachabilitySwift; + path = ReachabilitySwift; + sourceTree = ""; + }; + 766932A3421D6367A8D0751195F561AC /* Development Pods */ = { + isa = PBXGroup; + children = ( + 29EA578140EA0DBC79283224CA5D12D0 /* SnowplowTracker */, + ); + name = "Development Pods"; + sourceTree = ""; + }; + 78717A30B8A47C9AD3B05D5114035683 /* Support Files */ = { + isa = PBXGroup; + children = ( + F256A6BCCE3721B8061A5BE850AD7ED7 /* SnowplowTracker.modulemap */, + BE333E127CA851BE1DF8269A6AA5E1EA /* SnowplowTracker.xcconfig */, + 47D3EA8C21B94A0E8EF737E44161FFAF /* SnowplowTracker-dummy.m */, + ABE3DC69BA18BC14F5BEB747181C78E1 /* SnowplowTracker-Info.plist */, + DF970D909B560319A1CC7B1BD2715362 /* SnowplowTracker-prefix.pch */, + 50517982F15FB07C7DB41D7CC9667CB5 /* SnowplowTracker-umbrella.h */, + ); + name = "Support Files"; + path = "Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker"; + sourceTree = ""; + }; + 82501659FFA486B9D7D77C7D80E70EEC /* Support Files */ = { + isa = PBXGroup; + children = ( + 3188209CBEDD11949DC49F5D2D41AF27 /* FMDB.modulemap */, + 4990EEDD3D443A6C638E655A3889BFE4 /* FMDB.xcconfig */, + C325C07B998630F8B5E1EE5005C40C3D /* FMDB-dummy.m */, + B7086D72F605EF38CB7B5483297848E3 /* FMDB-Info.plist */, + 3585059C2A69ED65FF9673E3A5ED780D /* FMDB-prefix.pch */, + ADF20A623A0A88A251E90CAF51DBA56C /* FMDB-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/FMDB"; + sourceTree = ""; + }; + CF1408CF629C7361332E53B88F7BD30C = { + isa = PBXGroup; + children = ( + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + 766932A3421D6367A8D0751195F561AC /* Development Pods */, + 5E8703523E24F51CED3025E8DC4632FB /* Frameworks */, + 011D38C18945A06A0C1C0C3CA2B932FA /* Pods */, + 1CAFCE1FDBF46B704E299805C88608AA /* Products */, + E9737D345D3ED2B6FD9DC319FECD4CE4 /* Targets Support Files */, + ); + sourceTree = ""; + }; + DC75265DDC5EA7F12E9B01157D3CC9F6 /* Support Files */ = { + isa = PBXGroup; + children = ( + C1874F25ABE46113720029EA5195800C /* ReachabilitySwift.modulemap */, + DCF1A6F2D859BFEC8EFBC90735B9D35A /* ReachabilitySwift.xcconfig */, + 4866ECED6205B2F68D567F31E0B1990A /* ReachabilitySwift-dummy.m */, + 0068A661B5990207D7DD50EACFCBF95E /* ReachabilitySwift-Info.plist */, + 97663F66F0E75A48DAB7B1DE93A511DC /* ReachabilitySwift-prefix.pch */, + A316F0654B950E40209063AFE2454515 /* ReachabilitySwift-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/ReachabilitySwift"; + sourceTree = ""; + }; + E9737D345D3ED2B6FD9DC319FECD4CE4 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 41566C9332F5E20D25DE6FC4ECD99CFD /* Pods-SnowplowDemo */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + EC2067F2DC2E504FAFB8609E8F7B064E /* standard */ = { + isa = PBXGroup; + children = ( + D8130594CF29F877C8238DEC3F9E1F4B /* FMDatabase.h */, + E6627237447FAE85E40CF676BB4B1D96 /* FMDatabase.m */, + 32DAACC73AF638B601F310ED70F4791B /* FMDatabaseAdditions.h */, + 898650BD6CEAA5E0FD560997DDB71B27 /* FMDatabaseAdditions.m */, + 35B2AC7FF3C268D5011A8292EA3833A3 /* FMDatabasePool.h */, + 6B02C092CC2C24365C42A2C37C7F1053 /* FMDatabasePool.m */, + DF3F40AB871AD3ACE7243FAC6E47BEA0 /* FMDatabaseQueue.h */, + 247F4D45C4AAAB7C25AD4D86372B5219 /* FMDatabaseQueue.m */, + 95FACD4D00310517DD82462D9648B9CF /* FMDB.h */, + FDA0E32FC6358D08E7B8ABF05BE73135 /* FMResultSet.h */, + 1A2CE6597686F13AEB3167B23CAA0953 /* FMResultSet.m */, + ); + name = standard; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 09F7B7D04C454C16C0015640CF269F7E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 09944176280C980EB49784DBCA380462 /* ReachabilitySwift-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CC7C11040076EAC4DBAF2ACAEB0F826D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 17911B88703DC98D7CCA55DDCAA7B644 /* OpenIDFA.h in Headers */, + 609282C643597F93FD8BE711074403D6 /* Snowplow-Bridging-Header.h in Headers */, + F345C2346A640AAC7A746D6949985DB3 /* Snowplow.h in Headers */, + 58E564AA69FB6B6880F1EF5DF0777044 /* SnowplowTracker-umbrella.h in Headers */, + 2FFA83CED4AD65164A7744DA58E334EC /* SPEmitter.h in Headers */, + D83A43C7F1166AA9DEA1CDA2D249F0F4 /* SPEvent.h in Headers */, + 259B532DF9DEB023BFBD3B1062262906 /* SPEventStore.h in Headers */, + E62C8898056FD783F4B903FEE499A301 /* SPInstallTracker.h in Headers */, + CBE4DEBD9FB9018EF7C59EBD1B49BD7E /* SPPayload.h in Headers */, + 0E141E2894DDEB55E944AC0F26EAD785 /* SPRequestCallback.h in Headers */, + 5E7DA2EBDC5C03DD66387711BD8C6099 /* SPRequestResponse.h in Headers */, + F219C7494EC7BC37336E54C4F725B5BA /* SPScreenState.h in Headers */, + 2F21B7B471F13CC10F8E9F5D7DE938FB /* SPSelfDescribingJson.h in Headers */, + 844BE8D22B830B234953CCA142C37795 /* SPSession.h in Headers */, + A9771ED90AF87C6F5C5A1EEDAD603D51 /* SPSubject.h in Headers */, + 3AB6D26D74999E8B835514A726D24DD5 /* SPTracker.h in Headers */, + 240F3129F82840F54B3FBE7EDF95A123 /* SPUtilities.h in Headers */, + FADEED68DB7CAE4D6D2834167363A022 /* SPWeakTimerTarget.h in Headers */, + F7C3E1E1BA2A45584AA6A1F5D17C1648 /* UIViewController+SPScreenView_SWIZZLE.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DCCC73753CB120F68D482DBCD2F11BB6 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 37296B38A55A40BEF65ECFC9B0527D8E /* FMDatabase.h in Headers */, + 538F74CC22D0D13E9D79AC3ECC6DFFE7 /* FMDatabaseAdditions.h in Headers */, + 0F72AA9F03EC61C6D857941E0B45811A /* FMDatabasePool.h in Headers */, + 7394E123FBD9832A5D6FD726D5D9470C /* FMDatabaseQueue.h in Headers */, + 219BADA8C55CF72273F5A734AA0E0EF6 /* FMDB-umbrella.h in Headers */, + A92CDCFE2DC0D002DE1F208C2FEAB545 /* FMDB.h in Headers */, + BB7ECF4DBE8D4BB38E6F2F08C326922A /* FMResultSet.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E103F955B4A135243F3D45753E79CB0C /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + F45368BFF372668F2FE0D6CEDD4A8900 /* Pods-SnowplowDemo-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 0B00B2C167CD783351BD1D00BD5AD1F8 /* ReachabilitySwift */ = { + isa = PBXNativeTarget; + buildConfigurationList = E50A4613BA081C4F47DEEC1F9B9176BA /* Build configuration list for PBXNativeTarget "ReachabilitySwift" */; + buildPhases = ( + 09F7B7D04C454C16C0015640CF269F7E /* Headers */, + 9C9FF78F6878BCE13B73B6BB5DD0A609 /* Sources */, + 92A37A51219ED31062DE51A3E139BF37 /* Frameworks */, + 1EA4E360633A1D5CC11F6E9C4EEC2475 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ReachabilitySwift; + productName = ReachabilitySwift; + productReference = 21B03CA622E690725A6626C088E1D09F /* Reachability.framework */; + productType = "com.apple.product-type.framework"; + }; + 4DBA189AF01B5699C4ECEC25CBCCFA65 /* SnowplowTracker */ = { + isa = PBXNativeTarget; + buildConfigurationList = F3B047F99062281548C9D9B14AC9CFBD /* Build configuration list for PBXNativeTarget "SnowplowTracker" */; + buildPhases = ( + CC7C11040076EAC4DBAF2ACAEB0F826D /* Headers */, + 0AB8096E9F520B8EAD9D5CA3B572967A /* Sources */, + 914C008174B82153D0364171B4CADE62 /* Frameworks */, + C9751F87B8E139FF02E9AC05D744BEAE /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + AA1DDE964A9EF83A2CA9A75F8E8A29E7 /* PBXTargetDependency */, + F553B3CF737113EBDE81C39017C53B14 /* PBXTargetDependency */, + ); + name = SnowplowTracker; + productName = SnowplowTracker; + productReference = 345B9337B92FA2FCDF53EF4F3FCA6750 /* SnowplowTracker.framework */; + productType = "com.apple.product-type.framework"; + }; + 83C84D452EC964D2AEF232FD554321F8 /* Pods-SnowplowDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 23C6F42B9DAC968C87C148A2116515FA /* Build configuration list for PBXNativeTarget "Pods-SnowplowDemo" */; + buildPhases = ( + E103F955B4A135243F3D45753E79CB0C /* Headers */, + F6314360D5FB6F7A55751DF85832AFD1 /* Sources */, + 4763619D1735B267AA52D43F985B377D /* Frameworks */, + A4A2F45F6DF15FE02369FF441E13D041 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + C9EC0A747293D5302ED80F83D7FAC899 /* PBXTargetDependency */, + 13EB06CB7923BDD42E68C2AA6E4C2047 /* PBXTargetDependency */, + 1E5DAF3DDE92E1C1C7C0B641DE81EDE3 /* PBXTargetDependency */, + ); + name = "Pods-SnowplowDemo"; + productName = "Pods-SnowplowDemo"; + productReference = F710B3230FDEE67EF81A6A23AAA56097 /* Pods_SnowplowDemo.framework */; + productType = "com.apple.product-type.framework"; + }; + 8592E0E389D40AC17881400ADC67ABC0 /* FMDB */ = { + isa = PBXNativeTarget; + buildConfigurationList = EE1CF8B84020151C94CD4280C9C11ED5 /* Build configuration list for PBXNativeTarget "FMDB" */; + buildPhases = ( + DCCC73753CB120F68D482DBCD2F11BB6 /* Headers */, + 7E0D56167C29831E3033100E4A70F3B9 /* Sources */, + 41E857D338F96D89E73F6E28241F0A8B /* Frameworks */, + 2B6B314F2508F3A29CC15F9D75CB5E33 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = FMDB; + productName = FMDB; + productReference = A3A80BA70CFB7F75C5391BEBBBA8C9DA /* FMDB.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BFDFE7DC352907FC980B868725387E98 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1100; + LastUpgradeCheck = 1100; + }; + buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = CF1408CF629C7361332E53B88F7BD30C; + productRefGroup = 1CAFCE1FDBF46B704E299805C88608AA /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8592E0E389D40AC17881400ADC67ABC0 /* FMDB */, + 83C84D452EC964D2AEF232FD554321F8 /* Pods-SnowplowDemo */, + 0B00B2C167CD783351BD1D00BD5AD1F8 /* ReachabilitySwift */, + 4DBA189AF01B5699C4ECEC25CBCCFA65 /* SnowplowTracker */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 1EA4E360633A1D5CC11F6E9C4EEC2475 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2B6B314F2508F3A29CC15F9D75CB5E33 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A4A2F45F6DF15FE02369FF441E13D041 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C9751F87B8E139FF02E9AC05D744BEAE /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 0AB8096E9F520B8EAD9D5CA3B572967A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2A8ED48BC2E1159BABCD232B5834C520 /* OpenIDFA.m in Sources */, + 20A380E3186D135CE8039E3FB6507528 /* ReachabilityBridge.swift in Sources */, + 0D5E9C257BBE1567B7C3A8A5143F3EC4 /* Snowplow.m in Sources */, + 302BD30E1DD73F868D76B9D81D072930 /* SnowplowTracker-dummy.m in Sources */, + D6C89E5733DA5C082FD5091ABFD91222 /* SPEmitter.m in Sources */, + B0CEE2A3A878894CD9D0407F52F9C4A6 /* SPEvent.m in Sources */, + 02E8BD0E66972E62440F525107D64446 /* SPEventStore.m in Sources */, + B22B50C13BAAA6580F6F98E5CA91599D /* SPInstallTracker.m in Sources */, + C0BFA6634C4977DDD11FC129C5EB4B48 /* SPPayload.m in Sources */, + 6D6D12D7B71A62243A3BEBBE63BE6E76 /* SPRequestResponse.m in Sources */, + 2715F3A106EF7DFC8CF7DE4EFB08FDCB /* SPScreenState.m in Sources */, + 75A0C3B4DE877D92F8CE24AA32735B5B /* SPSelfDescribingJson.m in Sources */, + FCC7E5205F93E8DC1F919AA36F061209 /* SPSession.m in Sources */, + ED393E797BEBCC31BE947598E31390C8 /* SPSubject.m in Sources */, + 0935B5734165E6FEE9E3FD2DB72A5E1E /* SPTracker.m in Sources */, + 21D9BF364AF0F426DB9562625D921E47 /* SPUtilities.m in Sources */, + A3D604847A6AB37F2DCB5D13F774DD89 /* SPWeakTimerTarget.m in Sources */, + 7BD18AA91B9C52DBDA1A27D2EF0CF497 /* UIViewController+SPScreenView_SWIZZLE.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7E0D56167C29831E3033100E4A70F3B9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6C58288FB8A294C16676BF03E51AA34D /* FMDatabase.m in Sources */, + 0C93E589E31C5CBCA37586544BEC1005 /* FMDatabaseAdditions.m in Sources */, + 0370787809FDCBCB15C2D4DD22190732 /* FMDatabasePool.m in Sources */, + 0CA022FE5CC3F8A1ECC6699F10BF81EE /* FMDatabaseQueue.m in Sources */, + 7D4E0D91FE60904C9FB50F6D447B8A30 /* FMDB-dummy.m in Sources */, + FDD8729FB9BBE45B90107CA26BE5804B /* FMResultSet.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9C9FF78F6878BCE13B73B6BB5DD0A609 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AC96F44279E61358242F26840D4853F0 /* Reachability.swift in Sources */, + E5F6ACACDF29D937A21E7DEC85A13E3E /* ReachabilitySwift-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F6314360D5FB6F7A55751DF85832AFD1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6944F0052757958E0EF9501289037D57 /* Pods-SnowplowDemo-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 13EB06CB7923BDD42E68C2AA6E4C2047 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ReachabilitySwift; + target = 0B00B2C167CD783351BD1D00BD5AD1F8 /* ReachabilitySwift */; + targetProxy = E88A5B9FFAD3BB78F0DF28458113DD3C /* PBXContainerItemProxy */; + }; + 1E5DAF3DDE92E1C1C7C0B641DE81EDE3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SnowplowTracker; + target = 4DBA189AF01B5699C4ECEC25CBCCFA65 /* SnowplowTracker */; + targetProxy = 6B00032ACAF4239F363E6AA73BC7BEC0 /* PBXContainerItemProxy */; + }; + AA1DDE964A9EF83A2CA9A75F8E8A29E7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FMDB; + target = 8592E0E389D40AC17881400ADC67ABC0 /* FMDB */; + targetProxy = 14BE92A1347E8B9BFE65A56FEFE6EFE5 /* PBXContainerItemProxy */; + }; + C9EC0A747293D5302ED80F83D7FAC899 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FMDB; + target = 8592E0E389D40AC17881400ADC67ABC0 /* FMDB */; + targetProxy = 27C36A2BE28B636576961C5975A87634 /* PBXContainerItemProxy */; + }; + F553B3CF737113EBDE81C39017C53B14 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ReachabilitySwift; + target = 0B00B2C167CD783351BD1D00BD5AD1F8 /* ReachabilitySwift */; + targetProxy = 7703093EB7EFF730947CD4F1B3041924 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 49B7E93D3DC81558429328A818ECC62A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4990EEDD3D443A6C638E655A3889BFE4 /* FMDB.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "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/FMDB/FMDB-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FMDB/FMDB-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/FMDB/FMDB.modulemap"; + PRODUCT_MODULE_NAME = FMDB; + PRODUCT_NAME = FMDB; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 8D9C5DF25380D913350BDCA225353A58 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DCF1A6F2D859BFEC8EFBC90735B9D35A /* ReachabilitySwift.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "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/ReachabilitySwift/ReachabilitySwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap"; + PRODUCT_MODULE_NAME = Reachability; + PRODUCT_NAME = Reachability; + 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; + }; + 8F17DC3A99F99FBAD606CE6963886315 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=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.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; + 916E0404255105F480DC4950B7625F7A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "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.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + BD52B78F2B39D06A5DFDCB67DE85F717 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 91F514320F07D798CBF1B17A8F53D965 /* Pods-SnowplowDemo.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CODE_SIGN_IDENTITY = ""; + "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"; + INFOPLIST_FILE = "Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + D4A7F9E3FE3B37118A6FCEBE7DA678CF /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DCF1A6F2D859BFEC8EFBC90735B9D35A /* ReachabilitySwift.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "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/ReachabilitySwift/ReachabilitySwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap"; + PRODUCT_MODULE_NAME = Reachability; + PRODUCT_NAME = Reachability; + 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; + }; + E0C369C9D504A1B6FC6320C0DEAC03F9 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4990EEDD3D443A6C638E655A3889BFE4 /* FMDB.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "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/FMDB/FMDB-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FMDB/FMDB-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/FMDB/FMDB.modulemap"; + PRODUCT_MODULE_NAME = FMDB; + PRODUCT_NAME = FMDB; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + E269E99A7C2B38C3A36201D7FBB6EE63 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BE333E127CA851BE1DF8269A6AA5E1EA /* SnowplowTracker.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "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/SnowplowTracker/SnowplowTracker-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SnowplowTracker/SnowplowTracker-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SnowplowTracker/SnowplowTracker.modulemap"; + PRODUCT_MODULE_NAME = SnowplowTracker; + PRODUCT_NAME = SnowplowTracker; + 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; + }; + E655C25BA70AD59DF16653FD1E051677 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 13C1438790264802B7BEC3CFB3B9A541 /* Pods-SnowplowDemo.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CODE_SIGN_IDENTITY = ""; + "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"; + INFOPLIST_FILE = "Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + E70C8ADA25310B6840B6A286991D6725 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BE333E127CA851BE1DF8269A6AA5E1EA /* SnowplowTracker.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "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/SnowplowTracker/SnowplowTracker-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SnowplowTracker/SnowplowTracker-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SnowplowTracker/SnowplowTracker.modulemap"; + PRODUCT_MODULE_NAME = SnowplowTracker; + PRODUCT_NAME = SnowplowTracker; + 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; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 23C6F42B9DAC968C87C148A2116515FA /* Build configuration list for PBXNativeTarget "Pods-SnowplowDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E655C25BA70AD59DF16653FD1E051677 /* Debug */, + BD52B78F2B39D06A5DFDCB67DE85F717 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 916E0404255105F480DC4950B7625F7A /* Debug */, + 8F17DC3A99F99FBAD606CE6963886315 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E50A4613BA081C4F47DEEC1F9B9176BA /* Build configuration list for PBXNativeTarget "ReachabilitySwift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D4A7F9E3FE3B37118A6FCEBE7DA678CF /* Debug */, + 8D9C5DF25380D913350BDCA225353A58 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EE1CF8B84020151C94CD4280C9C11ED5 /* Build configuration list for PBXNativeTarget "FMDB" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E0C369C9D504A1B6FC6320C0DEAC03F9 /* Debug */, + 49B7E93D3DC81558429328A818ECC62A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F3B047F99062281548C9D9B14AC9CFBD /* Build configuration list for PBXNativeTarget "SnowplowTracker" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E70C8ADA25310B6840B6A286991D6725 /* Debug */, + E269E99A7C2B38C3A36201D7FBB6EE63 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; +} diff --git a/Examples/SnowplowDemo/Pods/ReachabilitySwift/LICENSE b/Examples/SnowplowDemo/Pods/ReachabilitySwift/LICENSE new file mode 100644 index 000000000..21caedac9 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/ReachabilitySwift/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2016 Ashley Mills + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Examples/SnowplowDemo/Pods/ReachabilitySwift/README.md b/Examples/SnowplowDemo/Pods/ReachabilitySwift/README.md new file mode 100644 index 000000000..43e00d6ee --- /dev/null +++ b/Examples/SnowplowDemo/Pods/ReachabilitySwift/README.md @@ -0,0 +1,202 @@ +# Reachability.swift + +Reachability.swift is a replacement for Apple's Reachability sample, re-written in Swift with closures. + +It is compatible with **iOS** (8.0 - 11.0), **OSX** (10.9 - 10.13) and **tvOS** (9.0 - 11.0) + +Inspired by https://github.com/tonymillion/Reachability + +## Supporting **Reachability.swift** +Keeping **Reachability.swift** up-to-date is a time consuming task. Making updates, reviewing pull requests, responding to issues and answering emails all take time. + +If you're an iOS developer who's looking for a quick and easy way to create App Store screenshots, please try out my app [Screenshot Producer](https://itunes.apple.com/app/apple-store/id1252374855?pt=215893&ct=reachability&mt=8)… + + Devices | Layout | Copy | Localize | Export       +:------:|:------:|:------:|:------:|:------: +![](http://is2.mzstatic.com/image/thumb/Purple118/v4/64/af/55/64af55bc-2ef0-691c-f5f3-4963685f7f63/source/552x414bb.jpg) | ![](http://is4.mzstatic.com/image/thumb/Purple128/v4/fb/4c/bd/fb4cbd2f-dd04-22ba-4fdf-5ac652693fb8/source/552x414bb.jpg) | ![](http://is1.mzstatic.com/image/thumb/Purple118/v4/5a/4f/cf/5a4fcfdf-ca04-0307-9f2e-83178e8ad90d/source/552x414bb.jpg) | ![](http://is4.mzstatic.com/image/thumb/Purple128/v4/17/ea/56/17ea562e-e045-96e7-fcac-cfaaf4f499fd/source/552x414bb.jpg) | ![](http://is4.mzstatic.com/image/thumb/Purple118/v4/59/9e/dd/599edd50-f05c-f413-8e88-e614731fd828/source/552x414bb.jpg) + +And don't forget to **★** the repo. This increases its visibility and encourages others to contribute. + +Thanks +Ash + +# IMPORTANT + +## Version 4.0 breaking changes + +### CocoaPods: + +If you're adding **Reachability.swift** using CocoaPods, note that the framework name has changed from `ReachabilitySwift` to `Reachability` (for consistency with Carthage) + +### Previously: + +```swift +enum NetworkStatus { + case notReachable, reachableViaWiFi, reachableViaWWAN +} +var currentReachabilityStatus: NetworkStatus +``` + +### Now: + +```swift +enum Connection { + case none, wifi, cellular +} +var connection: Connection +``` + +### Other changes: + +- `reachableOnWWAN` has been renamed to `allowsCellularConnection` + +- `reachability.currentReachabilityString` has been deprecated. Use `"\(reachability.connection)"` instead. + +- `isReachable` has been deprecated. Use `connection != .none` instead. + +- `isReachableViaWWAN` has been deprecated. Use `connection == .cellular` instead. + +- The notification for reachability changes has been renamed from `ReachabilityChangedNotification` to `Notification.Name.reachabilityChanged` + +- All closure callbacks and notification are fired on the main queue (including when `startNotifier()` is called) + + +## Got a problem? + +Please read https://github.com/ashleymills/Reachability.swift/blob/master/CONTRIBUTING.md before raising an issue. + +## Installation +### Manual +Just drop the **Reachability.swift** file into your project. That's it! + +### CocoaPods +[CocoaPods][] is a dependency manager for Cocoa projects. To install Reachability.swift with CocoaPods: + + 1. Make sure CocoaPods is [installed][CocoaPods Installation]. + + 2. Update your Podfile to include the following: + + ``` ruby + use_frameworks! + pod 'ReachabilitySwift' + ``` + + 3. Run `pod install`. + +[CocoaPods]: https://cocoapods.org +[CocoaPods Installation]: https://guides.cocoapods.org/using/getting-started.html#getting-started + + 4. In your code import Reachability like so: + `import Reachability` + +### Carthage +[Carthage][] is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. +To install Reachability.swift with Carthage: + +1. Install Carthage via [Homebrew][] + ```bash + $ brew update + $ brew install carthage + ``` + +2. Add `github "ashleymills/Reachability.swift"` to your Cartfile. + +3. Run `carthage update`. + +4. Drag `Reachability.framework` from the `Carthage/Build/iOS/` directory to the `Linked Frameworks and Libraries` section of your Xcode project’s `General` settings. + +5. Add `$(SRCROOT)/Carthage/Build/iOS/Reachability.framework` to `Input Files` of Run Script Phase for Carthage. + +6. In your code import Reachability like so: +`import Reachability` + + +[Carthage]: https://github.com/Carthage/Carthage +[Homebrew]: http://brew.sh +[Photo Flipper]: https://itunes.apple.com/app/apple-store/id749627884?pt=215893&ct=GitHubReachability&mt=8 + +## Example - closures + +NOTE: All closures are run on the **main queue**. + +```swift +//declare this property where it won't go out of scope relative to your listener +let reachability = Reachability()! + +reachability.whenReachable = { reachability in + if reachability.connection == .wifi { + print("Reachable via WiFi") + } else { + print("Reachable via Cellular") + } +} +reachability.whenUnreachable = { _ in + print("Not reachable") +} + +do { + try reachability.startNotifier() +} catch { + print("Unable to start notifier") +} +``` + +and for stopping notifications + +```swift +reachability.stopNotifier() +``` + +## Example - notifications + +NOTE: All notifications are delivered on the **main queue**. + +```swift +//declare this property where it won't go out of scope relative to your listener +let reachability = Reachability()! + +//declare this inside of viewWillAppear + + NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged(note:)), name: .reachabilityChanged, object: reachability) + do{ + try reachability.startNotifier() + }catch{ + print("could not start reachability notifier") + } +``` + +and + +```swift +@objc func reachabilityChanged(note: Notification) { + + let reachability = note.object as! Reachability + + switch reachability.connection { + case .wifi: + print("Reachable via WiFi") + case .cellular: + print("Reachable via Cellular") + case .none: + print("Network not reachable") + } +} +``` + +and for stopping notifications + +```swift +reachability.stopNotifier() +NotificationCenter.default.removeObserver(self, name: .reachabilityChanged, object: reachability) +``` + +## Want to help? + +Got a bug fix, or a new feature? Create a pull request and go for it! + +## Let me know! + +If you use **Reachability.swift**, please let me know about your app and I'll put a link [here…](https://github.com/ashleymills/Reachability.swift/wiki/Apps-using-Reachability.swift) and tell your friends! + +Cheers, +Ash diff --git a/Examples/SnowplowDemo/Pods/ReachabilitySwift/Sources/Reachability.swift b/Examples/SnowplowDemo/Pods/ReachabilitySwift/Sources/Reachability.swift new file mode 100644 index 000000000..f4c9ce9c1 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/ReachabilitySwift/Sources/Reachability.swift @@ -0,0 +1,316 @@ +/* +Copyright (c) 2014, Ashley Mills +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +*/ + +import SystemConfiguration +import Foundation + +public enum ReachabilityError: Error { + case FailedToCreateWithAddress(sockaddr_in) + case FailedToCreateWithHostname(String) + case UnableToSetCallback + case UnableToSetDispatchQueue + case UnableToGetInitialFlags +} + +@available(*, unavailable, renamed: "Notification.Name.reachabilityChanged") +public let ReachabilityChangedNotification = NSNotification.Name("ReachabilityChangedNotification") + +public extension Notification.Name { + static let reachabilityChanged = Notification.Name("reachabilityChanged") +} + +public class Reachability { + + public typealias NetworkReachable = (Reachability) -> () + public typealias NetworkUnreachable = (Reachability) -> () + + @available(*, unavailable, renamed: "Connection") + public enum NetworkStatus: CustomStringConvertible { + case notReachable, reachableViaWiFi, reachableViaWWAN + public var description: String { + switch self { + case .reachableViaWWAN: return "Cellular" + case .reachableViaWiFi: return "WiFi" + case .notReachable: return "No Connection" + } + } + } + + public enum Connection: CustomStringConvertible { + case none, wifi, cellular + public var description: String { + switch self { + case .cellular: return "Cellular" + case .wifi: return "WiFi" + case .none: return "No Connection" + } + } + } + + public var whenReachable: NetworkReachable? + public var whenUnreachable: NetworkUnreachable? + + @available(*, deprecated, renamed: "allowsCellularConnection") + public let reachableOnWWAN: Bool = true + + /// Set to `false` to force Reachability.connection to .none when on cellular connection (default value `true`) + public var allowsCellularConnection: Bool + + // The notification center on which "reachability changed" events are being posted + public var notificationCenter: NotificationCenter = NotificationCenter.default + + @available(*, deprecated, renamed: "connection.description") + public var currentReachabilityString: String { + return "\(connection)" + } + + @available(*, unavailable, renamed: "connection") + public var currentReachabilityStatus: Connection { + return connection + } + + public var connection: Connection { + if flags == nil { + try? setReachabilityFlags() + } + + switch flags?.connection { + case .none?, nil: return .none + case .cellular?: return allowsCellularConnection ? .cellular : .none + case .wifi?: return .wifi + } + } + + fileprivate var isRunningOnDevice: Bool = { + #if targetEnvironment(simulator) + return false + #else + return true + #endif + }() + + fileprivate var notifierRunning = false + fileprivate let reachabilityRef: SCNetworkReachability + fileprivate let reachabilitySerialQueue: DispatchQueue + fileprivate(set) var flags: SCNetworkReachabilityFlags? { + didSet { + guard flags != oldValue else { return } + reachabilityChanged() + } + } + + required public init(reachabilityRef: SCNetworkReachability, queueQoS: DispatchQoS = .default, targetQueue: DispatchQueue? = nil) { + self.allowsCellularConnection = true + self.reachabilityRef = reachabilityRef + self.reachabilitySerialQueue = DispatchQueue(label: "uk.co.ashleymills.reachability", qos: queueQoS, target: targetQueue) + } + + public convenience init?(hostname: String, queueQoS: DispatchQoS = .default, targetQueue: DispatchQueue? = nil) { + guard let ref = SCNetworkReachabilityCreateWithName(nil, hostname) else { return nil } + self.init(reachabilityRef: ref, queueQoS: queueQoS, targetQueue: targetQueue) + } + + public convenience init?(queueQoS: DispatchQoS = .default, targetQueue: DispatchQueue? = nil) { + var zeroAddress = sockaddr() + zeroAddress.sa_len = UInt8(MemoryLayout.size) + zeroAddress.sa_family = sa_family_t(AF_INET) + + guard let ref = SCNetworkReachabilityCreateWithAddress(nil, &zeroAddress) else { return nil } + + self.init(reachabilityRef: ref, queueQoS: queueQoS, targetQueue: targetQueue) + } + + deinit { + stopNotifier() + } +} + +public extension Reachability { + + // MARK: - *** Notifier methods *** + func startNotifier() throws { + guard !notifierRunning else { return } + + let callback: SCNetworkReachabilityCallBack = { (reachability, flags, info) in + guard let info = info else { return } + + let reachability = Unmanaged.fromOpaque(info).takeUnretainedValue() + reachability.flags = flags + } + + var context = SCNetworkReachabilityContext(version: 0, info: nil, retain: nil, release: nil, copyDescription: nil) + context.info = UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque()) + if !SCNetworkReachabilitySetCallback(reachabilityRef, callback, &context) { + stopNotifier() + throw ReachabilityError.UnableToSetCallback + } + + if !SCNetworkReachabilitySetDispatchQueue(reachabilityRef, reachabilitySerialQueue) { + stopNotifier() + throw ReachabilityError.UnableToSetDispatchQueue + } + + // Perform an initial check + try setReachabilityFlags() + + notifierRunning = true + } + + func stopNotifier() { + defer { notifierRunning = false } + + SCNetworkReachabilitySetCallback(reachabilityRef, nil, nil) + SCNetworkReachabilitySetDispatchQueue(reachabilityRef, nil) + } + + // MARK: - *** Connection test methods *** + @available(*, deprecated, message: "Please use `connection != .none`") + var isReachable: Bool { + return connection != .none + } + + @available(*, deprecated, message: "Please use `connection == .cellular`") + var isReachableViaWWAN: Bool { + // Check we're not on the simulator, we're REACHABLE and check we're on WWAN + return connection == .cellular + } + + @available(*, deprecated, message: "Please use `connection == .wifi`") + var isReachableViaWiFi: Bool { + return connection == .wifi + } + + var description: String { + guard let flags = flags else { return "unavailable flags" } + let W = isRunningOnDevice ? (flags.isOnWWANFlagSet ? "W" : "-") : "X" + let R = flags.isReachableFlagSet ? "R" : "-" + let c = flags.isConnectionRequiredFlagSet ? "c" : "-" + let t = flags.isTransientConnectionFlagSet ? "t" : "-" + let i = flags.isInterventionRequiredFlagSet ? "i" : "-" + let C = flags.isConnectionOnTrafficFlagSet ? "C" : "-" + let D = flags.isConnectionOnDemandFlagSet ? "D" : "-" + let l = flags.isLocalAddressFlagSet ? "l" : "-" + let d = flags.isDirectFlagSet ? "d" : "-" + + return "\(W)\(R) \(c)\(t)\(i)\(C)\(D)\(l)\(d)" + } +} + +fileprivate extension Reachability { + + func setReachabilityFlags() throws { + try reachabilitySerialQueue.sync { [unowned self] in + var flags = SCNetworkReachabilityFlags() + if !SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags) { + self.stopNotifier() + throw ReachabilityError.UnableToGetInitialFlags + } + + self.flags = flags + } + } + + func reachabilityChanged() { + let block = connection != .none ? whenReachable : whenUnreachable + + DispatchQueue.main.async { [weak self] in + guard let self = self else { return } + block?(self) + self.notificationCenter.post(name: .reachabilityChanged, object: self) + } + } +} + +extension SCNetworkReachabilityFlags { + + typealias Connection = Reachability.Connection + + var connection: Connection { + guard isReachableFlagSet else { return .none } + + // If we're reachable, but not on an iOS device (i.e. simulator), we must be on WiFi + #if targetEnvironment(simulator) + return .wifi + #else + var connection = Connection.none + + if !isConnectionRequiredFlagSet { + connection = .wifi + } + + if isConnectionOnTrafficOrDemandFlagSet { + if !isInterventionRequiredFlagSet { + connection = .wifi + } + } + + if isOnWWANFlagSet { + connection = .cellular + } + + return connection + #endif + } + + var isOnWWANFlagSet: Bool { + #if os(iOS) + return contains(.isWWAN) + #else + return false + #endif + } + var isReachableFlagSet: Bool { + return contains(.reachable) + } + var isConnectionRequiredFlagSet: Bool { + return contains(.connectionRequired) + } + var isInterventionRequiredFlagSet: Bool { + return contains(.interventionRequired) + } + var isConnectionOnTrafficFlagSet: Bool { + return contains(.connectionOnTraffic) + } + var isConnectionOnDemandFlagSet: Bool { + return contains(.connectionOnDemand) + } + var isConnectionOnTrafficOrDemandFlagSet: Bool { + return !intersection([.connectionOnTraffic, .connectionOnDemand]).isEmpty + } + var isTransientConnectionFlagSet: Bool { + return contains(.transientConnection) + } + var isLocalAddressFlagSet: Bool { + return contains(.isLocalAddress) + } + var isDirectFlagSet: Bool { + return contains(.isDirect) + } + var isConnectionRequiredAndTransientFlagSet: Bool { + return intersection([.connectionRequired, .transientConnection]) == [.connectionRequired, .transientConnection] + } +} diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-Info.plist b/Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-Info.plist new file mode 100644 index 000000000..9f1535254 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.6.2 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-dummy.m b/Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-dummy.m similarity index 100% rename from SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-dummy.m rename to Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-dummy.m diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-prefix.pch b/Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-prefix.pch new file mode 100644 index 000000000..beb2a2441 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-umbrella.h b/Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-umbrella.h new file mode 100644 index 000000000..2ad470724 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-umbrella.h @@ -0,0 +1,22 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "FMDatabase.h" +#import "FMDatabaseAdditions.h" +#import "FMDatabasePool.h" +#import "FMDatabaseQueue.h" +#import "FMDB.h" +#import "FMResultSet.h" + +FOUNDATION_EXPORT double FMDBVersionNumber; +FOUNDATION_EXPORT const unsigned char FMDBVersionString[]; + diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB.modulemap b/Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB.modulemap new file mode 100644 index 000000000..c1747d598 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB.modulemap @@ -0,0 +1,6 @@ +framework module FMDB { + umbrella header "FMDB-umbrella.h" + + export * + module * { export * } +} diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB.xcconfig b/Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB.xcconfig new file mode 100644 index 000000000..fca91a920 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FMDB +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -l"sqlite3" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/FMDB +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-Info.plist b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-Info.plist new file mode 100644 index 000000000..2243fe6e2 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/SnowplowDemo/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-acknowledgements.markdown similarity index 90% rename from SnowplowDemo/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown rename to Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-acknowledgements.markdown index 842590097..1b9fa819d 100644 --- a/SnowplowDemo/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown +++ b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-acknowledgements.markdown @@ -32,18 +32,27 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -## Reachability +## ReachabilitySwift -Copyright (c) 2011, Tony Million. -All rights reserved. +Copyright (c) 2016 Ashley Mills -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. ## SnowplowTracker @@ -249,4 +258,4 @@ Apache License WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -Generated by CocoaPods - http://cocoapods.org +Generated by CocoaPods - https://cocoapods.org diff --git a/SnowplowDemo/Pods/Target Support Files/Pods/Pods-acknowledgements.plist b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-acknowledgements.plist similarity index 90% rename from SnowplowDemo/Pods/Target Support Files/Pods/Pods-acknowledgements.plist rename to Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-acknowledgements.plist index a0303f815..650d0ec1a 100644 --- a/SnowplowDemo/Pods/Target Support Files/Pods/Pods-acknowledgements.plist +++ b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-acknowledgements.plist @@ -42,6 +42,8 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + License + MIT Title FMDB Type @@ -49,19 +51,30 @@ THE SOFTWARE. FooterText - Copyright (c) 2011, Tony Million. -All rights reserved. + Copyright (c) 2016 Ashley Mills -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + License + MIT Title - Reachability + ReachabilitySwift Type PSGroupSpecifier @@ -268,6 +281,8 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + License + Apache License, Version 2.0 Title SnowplowTracker Type @@ -275,7 +290,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND FooterText - Generated by CocoaPods - http://cocoapods.org + Generated by CocoaPods - https://cocoapods.org Title Type diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-dummy.m b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-dummy.m new file mode 100644 index 000000000..a34897b5c --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_SnowplowDemo : NSObject +@end +@implementation PodsDummy_Pods_SnowplowDemo +@end diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-frameworks.sh b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-frameworks.sh new file mode 100755 index 000000000..3fe90f02b --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-frameworks.sh @@ -0,0 +1,175 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + if [ -r "$source" ]; then + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi + fi +} + +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi + stripped="" + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=1 +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework" + install_framework "${BUILT_PRODUCTS_DIR}/ReachabilitySwift/Reachability.framework" + install_framework "${BUILT_PRODUCTS_DIR}/SnowplowTracker/SnowplowTracker.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework" + install_framework "${BUILT_PRODUCTS_DIR}/ReachabilitySwift/Reachability.framework" + install_framework "${BUILT_PRODUCTS_DIR}/SnowplowTracker/SnowplowTracker.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-umbrella.h b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-umbrella.h new file mode 100644 index 000000000..ec72a1a44 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_SnowplowDemoVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_SnowplowDemoVersionString[]; + diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo.debug.xcconfig b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo.debug.xcconfig new file mode 100644 index 000000000..03b545547 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo.debug.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnowplowTracker" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnowplowTracker/SnowplowTracker.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "CoreTelephony" -framework "FMDB" -framework "Foundation" -framework "Reachability" -framework "SnowplowTracker" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo.modulemap b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo.modulemap new file mode 100644 index 000000000..551323c28 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo.modulemap @@ -0,0 +1,6 @@ +framework module Pods_SnowplowDemo { + umbrella header "Pods-SnowplowDemo-umbrella.h" + + export * + module * { export * } +} diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo.release.xcconfig b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo.release.xcconfig new file mode 100644 index 000000000..03b545547 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo.release.xcconfig @@ -0,0 +1,12 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnowplowTracker" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnowplowTracker/SnowplowTracker.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "CoreTelephony" -framework "FMDB" -framework "Foundation" -framework "Reachability" -framework "SnowplowTracker" -framework "SystemConfiguration" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist b/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist new file mode 100644 index 000000000..33563de0b --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 4.3.1 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-dummy.m b/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-dummy.m new file mode 100644 index 000000000..5b7a61712 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_ReachabilitySwift : NSObject +@end +@implementation PodsDummy_ReachabilitySwift +@end diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch b/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch new file mode 100644 index 000000000..beb2a2441 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-umbrella.h b/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-umbrella.h new file mode 100644 index 000000000..a78f29c23 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double ReachabilityVersionNumber; +FOUNDATION_EXPORT const unsigned char ReachabilityVersionString[]; + diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap b/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap new file mode 100644 index 000000000..60076d3d2 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap @@ -0,0 +1,6 @@ +framework module Reachability { + umbrella header "ReachabilitySwift-umbrella.h" + + export * + module * { export * } +} diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.xcconfig b/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.xcconfig new file mode 100644 index 000000000..00fed593e --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.xcconfig @@ -0,0 +1,11 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CoreTelephony" -framework "SystemConfiguration" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/ReachabilitySwift +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-Info.plist b/Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-Info.plist new file mode 100644 index 000000000..02abef545 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.1.4 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-dummy.m b/Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-dummy.m similarity index 100% rename from SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-dummy.m rename to Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-dummy.m diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-prefix.pch b/Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-prefix.pch new file mode 100644 index 000000000..beb2a2441 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-umbrella.h b/Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-umbrella.h new file mode 100644 index 000000000..ce595c761 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-umbrella.h @@ -0,0 +1,27 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "Snowplow.h" +#import "SPTracker.h" +#import "SPEmitter.h" +#import "SPSubject.h" +#import "SPPayload.h" +#import "SPUtilities.h" +#import "SPRequestCallback.h" +#import "SPRequestResponse.h" +#import "SPEvent.h" +#import "SPSelfDescribingJson.h" +#import "SPScreenState.h" + +FOUNDATION_EXPORT double SnowplowTrackerVersionNumber; +FOUNDATION_EXPORT const unsigned char SnowplowTrackerVersionString[]; + diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker.modulemap b/Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker.modulemap new file mode 100644 index 000000000..73f757ea7 --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker.modulemap @@ -0,0 +1,6 @@ +framework module SnowplowTracker { + umbrella header "SnowplowTracker-umbrella.h" + + export * + module * { export * } +} diff --git a/Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker.xcconfig b/Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker.xcconfig new file mode 100644 index 000000000..9a9e4be2f --- /dev/null +++ b/Examples/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker.xcconfig @@ -0,0 +1,12 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnowplowTracker +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CoreTelephony" -framework "Foundation" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../.. +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/SnowplowDemo/SnowplowDemo.xcodeproj/project.pbxproj b/Examples/SnowplowDemo/SnowplowDemo.xcodeproj/project.pbxproj similarity index 79% rename from SnowplowDemo/SnowplowDemo.xcodeproj/project.pbxproj rename to Examples/SnowplowDemo/SnowplowDemo.xcodeproj/project.pbxproj index ed70cb97c..4abd8fe1e 100644 --- a/SnowplowDemo/SnowplowDemo.xcodeproj/project.pbxproj +++ b/Examples/SnowplowDemo/SnowplowDemo.xcodeproj/project.pbxproj @@ -16,7 +16,7 @@ 043172921B7365D4008A927D /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 043172901B7365D4008A927D /* LaunchScreen.xib */; }; 0431729E1B7365D4008A927D /* SnowplowDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0431729D1B7365D4008A927D /* SnowplowDemoTests.m */; }; 043172A91B7366B8008A927D /* DemoUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 043172A81B7366B8008A927D /* DemoUtils.m */; }; - 2C85A8A52078ECD45AC0634D /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BB1F931BBA204350ED3ADB58 /* libPods.a */; }; + E134DAD3C64350D5745090BD /* Pods_SnowplowDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3710BBFEF122A6658C1C43E7 /* Pods_SnowplowDemo.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -46,9 +46,9 @@ 0431729D1B7365D4008A927D /* SnowplowDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SnowplowDemoTests.m; sourceTree = ""; }; 043172A71B7366A6008A927D /* DemoUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DemoUtils.h; sourceTree = ""; }; 043172A81B7366B8008A927D /* DemoUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoUtils.m; sourceTree = ""; }; - 2F7981D910CCCF69EC47E2EE /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; - 96D1F4412DE6301C9CB90869 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; - BB1F931BBA204350ED3ADB58 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 3710BBFEF122A6658C1C43E7 /* Pods_SnowplowDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SnowplowDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 66EA3CD278153BD0908536CA /* Pods-SnowplowDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SnowplowDemo.debug.xcconfig"; path = "Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo.debug.xcconfig"; sourceTree = ""; }; + 740DCC07B75E8AD9FD1BB20D /* Pods-SnowplowDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SnowplowDemo.release.xcconfig"; path = "Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -56,7 +56,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2C85A8A52078ECD45AC0634D /* libPods.a in Frameworks */, + E134DAD3C64350D5745090BD /* Pods_SnowplowDemo.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,8 +76,8 @@ 0431727D1B7365D4008A927D /* SnowplowDemo */, 0431729A1B7365D4008A927D /* SnowplowDemoTests */, 0431727C1B7365D4008A927D /* Products */, - AA52A62E0E5F050CD7BF1E0E /* Pods */, - 1CA4D884DE6670F9FB9290E6 /* Frameworks */, + 42FEEE7C5611653C7A8F00D8 /* Pods */, + 732484D89E64AED2D558B48A /* Frameworks */, ); sourceTree = ""; }; @@ -101,9 +101,9 @@ 0431728E1B7365D4008A927D /* Images.xcassets */, 043172901B7365D4008A927D /* LaunchScreen.xib */, 043172851B7365D4008A927D /* SnowplowDemo.xcdatamodeld */, - 0431727E1B7365D4008A927D /* Supporting Files */, 043172A71B7366A6008A927D /* DemoUtils.h */, 043172A81B7366B8008A927D /* DemoUtils.m */, + 0431727E1B7365D4008A927D /* Supporting Files */, ); path = SnowplowDemo; sourceTree = ""; @@ -134,21 +134,21 @@ name = "Supporting Files"; sourceTree = ""; }; - 1CA4D884DE6670F9FB9290E6 /* Frameworks */ = { + 42FEEE7C5611653C7A8F00D8 /* Pods */ = { isa = PBXGroup; children = ( - BB1F931BBA204350ED3ADB58 /* libPods.a */, + 66EA3CD278153BD0908536CA /* Pods-SnowplowDemo.debug.xcconfig */, + 740DCC07B75E8AD9FD1BB20D /* Pods-SnowplowDemo.release.xcconfig */, ); - name = Frameworks; + path = Pods; sourceTree = ""; }; - AA52A62E0E5F050CD7BF1E0E /* Pods */ = { + 732484D89E64AED2D558B48A /* Frameworks */ = { isa = PBXGroup; children = ( - 96D1F4412DE6301C9CB90869 /* Pods.debug.xcconfig */, - 2F7981D910CCCF69EC47E2EE /* Pods.release.xcconfig */, + 3710BBFEF122A6658C1C43E7 /* Pods_SnowplowDemo.framework */, ); - name = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -158,12 +158,11 @@ isa = PBXNativeTarget; buildConfigurationList = 043172A11B7365D4008A927D /* Build configuration list for PBXNativeTarget "SnowplowDemo" */; buildPhases = ( - DAED896F662972EFE054170E /* Check Pods Manifest.lock */, + A974532DDBB5F7BE0E3DBE0A /* [CP] Check Pods Manifest.lock */, 043172771B7365D4008A927D /* Sources */, 043172781B7365D4008A927D /* Frameworks */, 043172791B7365D4008A927D /* Resources */, - 0D2FAF7DBC91217824156C82 /* Copy Pods Resources */, - 5CFE3B9EBA667078BB11A20D /* Embed Pods Frameworks */, + 835E31B75ADCE1EE0BD101FD /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -198,7 +197,7 @@ 043172731B7365D3008A927D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0640; + LastUpgradeCheck = 1110; ORGANIZATIONNAME = "Snowplow Analytics Ltd"; TargetAttributes = { 0431727A1B7365D4008A927D = { @@ -212,7 +211,7 @@ }; buildConfigurationList = 043172761B7365D4008A927D /* Build configuration list for PBXProject "SnowplowDemo" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -250,49 +249,48 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0D2FAF7DBC91217824156C82 /* Copy Pods Resources */ = { + 835E31B75ADCE1EE0BD101FD /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework", + "${BUILT_PRODUCTS_DIR}/ReachabilitySwift/Reachability.framework", + "${BUILT_PRODUCTS_DIR}/SnowplowTracker/SnowplowTracker.framework", ); - name = "Copy Pods Resources"; + name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FMDB.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnowplowTracker.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SnowplowDemo/Pods-SnowplowDemo-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 5CFE3B9EBA667078BB11A20D /* Embed Pods Frameworks */ = { + A974532DDBB5F7BE0E3DBE0A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - ); - name = "Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - DAED896F662972EFE054170E /* Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( + inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-SnowplowDemo-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/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# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -356,19 +354,30 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + 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_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -400,13 +409,23 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -432,22 +451,26 @@ }; 043172A21B7365D4008A927D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 96D1F4412DE6301C9CB90869 /* Pods.debug.xcconfig */; + baseConfigurationReference = 66EA3CD278153BD0908536CA /* Pods-SnowplowDemo.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SnowplowDemo/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.snowplowanalytics.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 043172A31B7365D4008A927D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2F7981D910CCCF69EC47E2EE /* Pods.release.xcconfig */; + baseConfigurationReference = 740DCC07B75E8AD9FD1BB20D /* Pods-SnowplowDemo.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SnowplowDemo/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.snowplowanalytics.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -466,6 +489,7 @@ ); INFOPLIST_FILE = SnowplowDemoTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.snowplowanalytics.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SnowplowDemo.app/SnowplowDemo"; }; @@ -481,6 +505,7 @@ ); INFOPLIST_FILE = SnowplowDemoTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.snowplowanalytics.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SnowplowDemo.app/SnowplowDemo"; }; diff --git a/SnowplowDemo/SnowplowDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Examples/SnowplowDemo/SnowplowDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from SnowplowDemo/SnowplowDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Examples/SnowplowDemo/SnowplowDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/Snowplow.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Examples/SnowplowDemo/SnowplowDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from Snowplow.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to Examples/SnowplowDemo/SnowplowDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/SnowplowDemo/Pods/Pods.xcodeproj/xcshareddata/xcschemes/SnowplowTracker.xcscheme b/Examples/SnowplowDemo/SnowplowDemo.xcodeproj/xcshareddata/xcschemes/SnowplowDemo.xcscheme similarity index 52% rename from SnowplowDemo/Pods/Pods.xcodeproj/xcshareddata/xcschemes/SnowplowTracker.xcscheme rename to Examples/SnowplowDemo/SnowplowDemo.xcodeproj/xcshareddata/xcschemes/SnowplowDemo.xcscheme index 93bebbd1f..84b5a2c85 100644 --- a/SnowplowDemo/Pods/Pods.xcodeproj/xcshareddata/xcschemes/SnowplowTracker.xcscheme +++ b/Examples/SnowplowDemo/SnowplowDemo.xcodeproj/xcshareddata/xcschemes/SnowplowDemo.xcscheme @@ -1,36 +1,37 @@ + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + BuildableIdentifier = "primary" + BlueprintIdentifier = "0431727A1B7365D4008A927D" + BuildableName = "SnowplowDemo.app" + BlueprintName = "SnowplowDemo" + ReferencedContainer = "container:SnowplowDemo.xcodeproj"> - - + shouldUseLaunchSchemeArgsEnv = "YES"> + + - - + + + + + debugDocumentVersioning = "YES"> + + + + diff --git a/SnowplowDemo/SnowplowDemo.xcworkspace/contents.xcworkspacedata b/Examples/SnowplowDemo/SnowplowDemo.xcworkspace/contents.xcworkspacedata similarity index 100% rename from SnowplowDemo/SnowplowDemo.xcworkspace/contents.xcworkspacedata rename to Examples/SnowplowDemo/SnowplowDemo.xcworkspace/contents.xcworkspacedata diff --git a/SnowplowDemo/SnowplowDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Examples/SnowplowDemo/SnowplowDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from SnowplowDemo/SnowplowDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to Examples/SnowplowDemo/SnowplowDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/SnowplowDemo/SnowplowDemo/AppDelegate.h b/Examples/SnowplowDemo/SnowplowDemo/AppDelegate.h similarity index 100% rename from SnowplowDemo/SnowplowDemo/AppDelegate.h rename to Examples/SnowplowDemo/SnowplowDemo/AppDelegate.h diff --git a/SnowplowDemo/SnowplowDemo/AppDelegate.m b/Examples/SnowplowDemo/SnowplowDemo/AppDelegate.m similarity index 100% rename from SnowplowDemo/SnowplowDemo/AppDelegate.m rename to Examples/SnowplowDemo/SnowplowDemo/AppDelegate.m diff --git a/SnowplowDemo/SnowplowDemo/Base.lproj/LaunchScreen.xib b/Examples/SnowplowDemo/SnowplowDemo/Base.lproj/LaunchScreen.xib similarity index 100% rename from SnowplowDemo/SnowplowDemo/Base.lproj/LaunchScreen.xib rename to Examples/SnowplowDemo/SnowplowDemo/Base.lproj/LaunchScreen.xib diff --git a/SnowplowDemo/SnowplowDemo/Base.lproj/Main.storyboard b/Examples/SnowplowDemo/SnowplowDemo/Base.lproj/Main.storyboard similarity index 75% rename from SnowplowDemo/SnowplowDemo/Base.lproj/Main.storyboard rename to Examples/SnowplowDemo/SnowplowDemo/Base.lproj/Main.storyboard index 7d4a0aff7..8992982bd 100644 --- a/SnowplowDemo/SnowplowDemo/Base.lproj/Main.storyboard +++ b/Examples/SnowplowDemo/SnowplowDemo/Base.lproj/Main.storyboard @@ -1,9 +1,10 @@ - - + + + - - + + @@ -18,59 +19,59 @@ - - + + - - + + - - + @@ -189,6 +190,7 @@ + @@ -211,7 +213,7 @@ - + @@ -239,7 +241,7 @@ - + diff --git a/SnowplowDemo/SnowplowDemo/DemoUtils.h b/Examples/SnowplowDemo/SnowplowDemo/DemoUtils.h similarity index 93% rename from SnowplowDemo/SnowplowDemo/DemoUtils.h rename to Examples/SnowplowDemo/SnowplowDemo/DemoUtils.h index 4503851cb..9f16df24a 100644 --- a/SnowplowDemo/SnowplowDemo/DemoUtils.h +++ b/Examples/SnowplowDemo/SnowplowDemo/DemoUtils.h @@ -69,10 +69,4 @@ */ + (void) trackEcommerceTransactionWithTracker:(SPTracker *)tracker_; -/** - * Returns a pre-built custom context ready for embedding in an event - * @return The custom context - */ -+ (NSMutableArray *) getCustomContext; - @end diff --git a/SnowplowDemo/SnowplowDemo/DemoUtils.m b/Examples/SnowplowDemo/SnowplowDemo/DemoUtils.m similarity index 59% rename from SnowplowDemo/SnowplowDemo/DemoUtils.m rename to Examples/SnowplowDemo/SnowplowDemo/DemoUtils.m index 87ce9096f..9be015fed 100644 --- a/SnowplowDemo/SnowplowDemo/DemoUtils.m +++ b/Examples/SnowplowDemo/SnowplowDemo/DemoUtils.m @@ -58,51 +58,21 @@ + (void) trackStructuredEventWithTracker:(SPTracker *)tracker_ { [builder setTimestamp:@1243567890]; }]; [tracker_ trackStructuredEvent:event]; - event = [SPStructured build:^(id builder) { - [builder setCategory:@"DemoCategory"]; - [builder setAction:@"DemoAction"]; - [builder setLabel:@"DemoLabel"]; - [builder setProperty:@"DemoProperty"]; - [builder setValue:5]; - [builder setContexts:[self getCustomContext]]; - }]; - [tracker_ trackStructuredEvent:event]; - event = [SPStructured build:^(id builder) { - [builder setCategory:@"DemoCategory"]; - [builder setAction:@"DemoAction"]; - [builder setLabel:@"DemoLabel"]; - [builder setProperty:@"DemoProperty"]; - [builder setValue:5]; - [builder setContexts:[self getCustomContext]]; - [builder setTimestamp:@1243567890]; - }]; - [tracker_ trackStructuredEvent:event]; } + (void) trackUnstructuredEventWithTracker:(SPTracker *)tracker_ { - NSDictionary * data = @{@"level": @23, @"score": @56473}; - SPSelfDescribingJson * sdj = [[SPSelfDescribingJson alloc] initWithSchema:@"iglu:com.acme_company/demo_ios_event/jsonschema/1-0-0" + NSDictionary * data = @{@"targetUrl": @"http://a-target-url.com"}; + SPSelfDescribingJson * sdj = [[SPSelfDescribingJson alloc] initWithSchema:@"iglu:com.snowplowanalytics.snowplow/link_click/jsonschema/1-0-1" andData:data]; SPUnstructured *event = [SPUnstructured build:^(id builder) { [builder setEventData:sdj]; }]; [tracker_ trackUnstructuredEvent:event]; - event = [SPUnstructured build:^(id builder) { - [builder setEventData:sdj]; - [builder setContexts:[self getCustomContext]]; - }]; - [tracker_ trackUnstructuredEvent:event]; event = [SPUnstructured build:^(id builder) { [builder setEventData:sdj]; [builder setTimestamp:@1243567890]; }]; [tracker_ trackUnstructuredEvent:event]; - event = [SPUnstructured build:^(id builder) { - [builder setEventData:sdj]; - [builder setContexts:[self getCustomContext]]; - [builder setTimestamp:@1243567890]; - }]; - [tracker_ trackUnstructuredEvent:event]; } + (void) trackPageViewWithTracker:(SPTracker *)tracker_ { @@ -112,13 +82,6 @@ + (void) trackPageViewWithTracker:(SPTracker *)tracker_ { [builder setReferrer:@"DemoPageReferrer"]; }]; [tracker_ trackPageViewEvent:event]; - event = [SPPageView build:^(id builder) { - [builder setPageUrl:@"DemoPageUrl"]; - [builder setPageTitle:@"DemoPageTitle"]; - [builder setReferrer:@"DemoPageReferrer"]; - [builder setContexts:[self getCustomContext]]; - }]; - [tracker_ trackPageViewEvent:event]; event = [SPPageView build:^(id builder) { [builder setPageUrl:@"DemoPageUrl"]; [builder setPageTitle:@"DemoPageTitle"]; @@ -126,38 +89,18 @@ + (void) trackPageViewWithTracker:(SPTracker *)tracker_ { [builder setTimestamp:@1243567890]; }]; [tracker_ trackPageViewEvent:event]; - event = [SPPageView build:^(id builder) { - [builder setPageUrl:@"DemoPageUrl"]; - [builder setPageTitle:@"DemoPageTitle"]; - [builder setReferrer:@"DemoPageReferrer"]; - [builder setContexts:[self getCustomContext]]; - [builder setTimestamp:@1243567890]; - }]; - [tracker_ trackPageViewEvent:event]; } + (void) trackScreenViewWithTracker:(SPTracker *)tracker_ { + NSString *screenId = [[NSUUID UUID] UUIDString]; SPScreenView *event = [SPScreenView build:^(id builder) { [builder setName:@"DemoScreenName"]; - [builder setId:@"DemoScreenId"]; + [builder setScreenId:screenId]; }]; [tracker_ trackScreenViewEvent:event]; event = [SPScreenView build:^(id builder) { [builder setName:@"DemoScreenName"]; - [builder setId:@"DemoScreenId"]; - [builder setTimestamp:@1243567890]; - }]; - [tracker_ trackScreenViewEvent:event]; - event = [SPScreenView build:^(id builder) { - [builder setName:@"DemoScreenName"]; - [builder setId:@"DemoScreenId"]; - [builder setContexts:[self getCustomContext]]; - }]; - [tracker_ trackScreenViewEvent:event]; - event = [SPScreenView build:^(id builder) { - [builder setName:@"DemoScreenName"]; - [builder setId:@"DemoScreenId"]; - [builder setContexts:[self getCustomContext]]; + [builder setScreenId:screenId]; [builder setTimestamp:@1243567890]; }]; [tracker_ trackScreenViewEvent:event]; @@ -179,23 +122,6 @@ + (void) trackTimingWithCategoryWithTracker:(SPTracker *)tracker_ { [builder setTimestamp:@1243567890]; }]; [tracker_ trackTimingEvent:event]; - event = [SPTiming build:^(id builder) { - [builder setCategory:@"DemoTimingCategory"]; - [builder setVariable:@"DemoTimingVariable"]; - [builder setTiming:5]; - [builder setLabel:@"DemoTimingLabel"]; - [builder setContexts:[self getCustomContext]]; - }]; - [tracker_ trackTimingEvent:event]; - event = [SPTiming build:^(id builder) { - [builder setCategory:@"DemoTimingCategory"]; - [builder setVariable:@"DemoTimingVariable"]; - [builder setTiming:5]; - [builder setLabel:@"DemoTimingLabel"]; - [builder setContexts:[self getCustomContext]]; - [builder setTimestamp:@1243567890]; - }]; - [tracker_ trackTimingEvent:event]; } + (void) trackEcommerceTransactionWithTracker:(SPTracker *)tracker_ { @@ -239,35 +165,6 @@ + (void) trackEcommerceTransactionWithTracker:(SPTracker *)tracker_ { [builder setTimestamp:@1243567890]; }]; [tracker_ trackEcommerceEvent:event]; - event = [SPEcommerce build:^(id builder) { - [builder setOrderId:transactionID]; - [builder setTotalValue:350]; - [builder setAffiliation:@"DemoTranAffiliation"]; - [builder setTaxValue:10]; - [builder setShipping:15]; - [builder setCity:@"Boston"]; - [builder setState:@"Massachusetts"]; - [builder setCountry:@"USA"]; - [builder setCurrency:@"USD"]; - [builder setItems:itemArray]; - [builder setContexts:[self getCustomContext]]; - }]; - [tracker_ trackEcommerceEvent:event]; - event = [SPEcommerce build:^(id builder) { - [builder setOrderId:transactionID]; - [builder setTotalValue:350]; - [builder setAffiliation:@"DemoTranAffiliation"]; - [builder setTaxValue:10]; - [builder setShipping:15]; - [builder setCity:@"Boston"]; - [builder setState:@"Massachusetts"]; - [builder setCountry:@"USA"]; - [builder setCurrency:@"USD"]; - [builder setItems:itemArray]; - [builder setContexts:[self getCustomContext]]; - [builder setTimestamp:@1243567890]; - }]; - [tracker_ trackEcommerceEvent:event]; } + (void) trackPushNotificationWithTracker:(SPTracker *)tracker_ { @@ -293,8 +190,8 @@ + (void) trackPushNotificationWithTracker:(SPTracker *)tracker_ { SPPushNotification * event = [SPPushNotification build:^(id builder) { [builder setAction:@"action"]; - [builder setTrigger:@"trigger"]; - [builder setDate:@"date"]; + [builder setTrigger:@"PUSH"]; + [builder setDeliveryDate:@"date"]; [builder setCategoryIdentifier:@"category"]; [builder setThreadIdentifier:@"thread"]; [builder setNotification:content]; @@ -303,13 +200,4 @@ + (void) trackPushNotificationWithTracker:(SPTracker *)tracker_ { [tracker_ trackPushNotificationEvent:event]; } -// Helpers - -+ (NSMutableArray *) getCustomContext { - NSDictionary * data = @{@"snowplow": @"demo-tracker"}; - SPSelfDescribingJson * context = [[SPSelfDescribingJson alloc] initWithSchema:@"iglu:com.acme_company/demo_ios/jsonschema/1-0-0" - andData:data]; - return [NSMutableArray arrayWithArray:@[context]]; -} - @end diff --git a/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/Contents.json b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 75% rename from SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/Contents.json rename to Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/Contents.json index fa7c2d358..0269019cf 100644 --- a/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,5 +1,15 @@ { "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, { "size" : "29x29", "idiom" : "iphone", @@ -36,6 +46,16 @@ "filename" : "logo-white-180.png", "scale" : "3x" }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, { "size" : "29x29", "idiom" : "ipad", @@ -71,6 +91,16 @@ "idiom" : "ipad", "filename" : "logo-white-152.png", "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" } ], "info" : { diff --git a/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-120-1.png b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-120-1.png similarity index 100% rename from SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-120-1.png rename to Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-120-1.png diff --git a/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-120.png b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-120.png similarity index 100% rename from SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-120.png rename to Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-120.png diff --git a/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-152.png b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-152.png similarity index 100% rename from SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-152.png rename to Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-152.png diff --git a/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-180.png b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-180.png similarity index 100% rename from SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-180.png rename to Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-180.png diff --git a/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-29.png b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-29.png similarity index 100% rename from SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-29.png rename to Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-29.png diff --git a/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-40.png b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-40.png similarity index 100% rename from SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-40.png rename to Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-40.png diff --git a/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-58-1.png b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-58-1.png similarity index 100% rename from SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-58-1.png rename to Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-58-1.png diff --git a/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-58.png b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-58.png similarity index 100% rename from SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-58.png rename to Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-58.png diff --git a/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-76.png b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-76.png similarity index 100% rename from SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-76.png rename to Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-76.png diff --git a/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-80-1.png b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-80-1.png similarity index 100% rename from SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-80-1.png rename to Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-80-1.png diff --git a/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-80.png b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-80.png similarity index 100% rename from SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-80.png rename to Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-80.png diff --git a/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-87.png b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-87.png similarity index 100% rename from SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-87.png rename to Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/AppIcon.appiconset/logo-white-87.png diff --git a/SnowplowDemo/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/Contents.json b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/Contents.json similarity index 100% rename from SnowplowDemo/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/Contents.json rename to Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/Contents.json diff --git a/SnowplowDemo/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/logo-1024.png b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/logo-1024.png similarity index 100% rename from SnowplowDemo/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/logo-1024.png rename to Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/logo-1024.png diff --git a/SnowplowDemo/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/logo-180.png b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/logo-180.png similarity index 100% rename from SnowplowDemo/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/logo-180.png rename to Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/logo-180.png diff --git a/SnowplowDemo/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/logo-transparent-full-square.png b/Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/logo-transparent-full-square.png similarity index 100% rename from SnowplowDemo/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/logo-transparent-full-square.png rename to Examples/SnowplowDemo/SnowplowDemo/Images.xcassets/Snowplow Logo.imageset/logo-transparent-full-square.png diff --git a/SnowplowDemo/SnowplowDemo/Info.plist b/Examples/SnowplowDemo/SnowplowDemo/Info.plist similarity index 95% rename from SnowplowDemo/SnowplowDemo/Info.plist rename to Examples/SnowplowDemo/SnowplowDemo/Info.plist index a4c82a5ae..40c6215d9 100644 --- a/SnowplowDemo/SnowplowDemo/Info.plist +++ b/Examples/SnowplowDemo/SnowplowDemo/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - com.snowplowanalytics.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/SnowplowDemo/SnowplowDemo/SnowplowDemo.xcdatamodeld/.xccurrentversion b/Examples/SnowplowDemo/SnowplowDemo/SnowplowDemo.xcdatamodeld/.xccurrentversion similarity index 100% rename from SnowplowDemo/SnowplowDemo/SnowplowDemo.xcdatamodeld/.xccurrentversion rename to Examples/SnowplowDemo/SnowplowDemo/SnowplowDemo.xcdatamodeld/.xccurrentversion diff --git a/SnowplowDemo/SnowplowDemo/SnowplowDemo.xcdatamodeld/SnowplowDemo.xcdatamodel/contents b/Examples/SnowplowDemo/SnowplowDemo/SnowplowDemo.xcdatamodeld/SnowplowDemo.xcdatamodel/contents similarity index 100% rename from SnowplowDemo/SnowplowDemo/SnowplowDemo.xcdatamodeld/SnowplowDemo.xcdatamodel/contents rename to Examples/SnowplowDemo/SnowplowDemo/SnowplowDemo.xcdatamodeld/SnowplowDemo.xcdatamodel/contents diff --git a/SnowplowDemo/SnowplowDemo/ViewController.h b/Examples/SnowplowDemo/SnowplowDemo/ViewController.h similarity index 92% rename from SnowplowDemo/SnowplowDemo/ViewController.h rename to Examples/SnowplowDemo/SnowplowDemo/ViewController.h index a7d63a594..2651a08f2 100644 --- a/SnowplowDemo/SnowplowDemo/ViewController.h +++ b/Examples/SnowplowDemo/SnowplowDemo/ViewController.h @@ -23,8 +23,6 @@ #import #import "SPRequestCallback.h" -@class SPEmitter; - @interface ViewController : UIViewController /** @@ -49,9 +47,4 @@ */ - (NSString *) getCollectorUrl; -/** - * Gets the Request Method Type that has been selected - */ -- (enum SPRequestOptions) getMethodType; - @end diff --git a/SnowplowDemo/SnowplowDemo/ViewController.m b/Examples/SnowplowDemo/SnowplowDemo/ViewController.m similarity index 93% rename from SnowplowDemo/SnowplowDemo/ViewController.m rename to Examples/SnowplowDemo/SnowplowDemo/ViewController.m index bb0b4bcfc..b28b2d535 100644 --- a/SnowplowDemo/SnowplowDemo/ViewController.m +++ b/Examples/SnowplowDemo/SnowplowDemo/ViewController.m @@ -70,8 +70,10 @@ - (void) setup { } - (IBAction) trackEvents:(id)sender { + NSString *url = [self getCollectorUrl]; + SPRequestOptions methodType = [self getMethodType]; + SPProtocol protocolType = [self getProtocolType]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - NSString *url = [self getCollectorUrl]; if ([url isEqual: @""]) { return; } @@ -80,20 +82,20 @@ - (IBAction) trackEvents:(id)sender { // Ensures the application won't crash with a bad URL @try { - [_tracker.emitter setUrlEndpoint:url]; + [self->_tracker.emitter setUrlEndpoint:url]; } @catch (NSException *exception) { return; } - [_tracker.emitter setHttpMethod:[self getMethodType]]; - [_tracker.emitter setProtocol:[self getProtocolType]]; + [self->_tracker.emitter setHttpMethod:methodType]; + [self->_tracker.emitter setProtocol:protocolType]; // Itterate the made counter - _madeCounter += 25; + self->_madeCounter += 25; // Track all types of events! - [DemoUtils trackAll:_tracker]; + [DemoUtils trackAll:self->_tracker]; }); } diff --git a/SnowplowDemo/SnowplowDemo/main.m b/Examples/SnowplowDemo/SnowplowDemo/main.m similarity index 100% rename from SnowplowDemo/SnowplowDemo/main.m rename to Examples/SnowplowDemo/SnowplowDemo/main.m diff --git a/SnowplowDemo/SnowplowDemoTests/Info.plist b/Examples/SnowplowDemo/SnowplowDemoTests/Info.plist similarity index 90% rename from SnowplowDemo/SnowplowDemoTests/Info.plist rename to Examples/SnowplowDemo/SnowplowDemoTests/Info.plist index 70943a5c3..ba72822e8 100644 --- a/SnowplowDemo/SnowplowDemoTests/Info.plist +++ b/Examples/SnowplowDemo/SnowplowDemoTests/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - com.snowplowanalytics.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/SnowplowDemo/SnowplowDemoTests/SnowplowDemoTests.m b/Examples/SnowplowDemo/SnowplowDemoTests/SnowplowDemoTests.m similarity index 100% rename from SnowplowDemo/SnowplowDemoTests/SnowplowDemoTests.m rename to Examples/SnowplowDemo/SnowplowDemoTests/SnowplowDemoTests.m diff --git a/Snowplow.xcworkspace/contents.xcworkspacedata b/Snowplow.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 6e993e7f8..000000000 --- a/Snowplow.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/Snowplow/SPEventStore.m b/Snowplow/SPEventStore.m index a888427c2..e437d0e9b 100644 --- a/Snowplow/SPEventStore.m +++ b/Snowplow/SPEventStore.m @@ -24,7 +24,7 @@ #import "SPEventStore.h" #import "SPPayload.h" #import "SPUtilities.h" -#import +#import @implementation SPEventStore { NSString * _dbPath; diff --git a/SnowplowDemo/Podfile b/SnowplowDemo/Podfile deleted file mode 100644 index 87e859317..000000000 --- a/SnowplowDemo/Podfile +++ /dev/null @@ -1 +0,0 @@ -pod 'SnowplowTracker', :path=> '../' diff --git a/SnowplowDemo/Podfile.lock b/SnowplowDemo/Podfile.lock deleted file mode 100644 index cb4a939cf..000000000 --- a/SnowplowDemo/Podfile.lock +++ /dev/null @@ -1,24 +0,0 @@ -PODS: - - FMDB (2.5): - - FMDB/standard (= 2.5) - - FMDB/common (2.5) - - FMDB/standard (2.5): - - FMDB/common - - Reachability (3.2) - - SnowplowTracker (0.6.1): - - FMDB (= 2.5) - - Reachability (= 3.2) - -DEPENDENCIES: - - SnowplowTracker (from `../`) - -EXTERNAL SOURCES: - SnowplowTracker: - :path: ../ - -SPEC CHECKSUMS: - FMDB: 96e8f1bcc1329e269330f99770ad4285d9003e52 - Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 - SnowplowTracker: fd63aa0ccb9c8b8c054c858d0bb82dd35f91daf2 - -COCOAPODS: 0.39.0 diff --git a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDB.h b/SnowplowDemo/Pods/FMDB/src/fmdb/FMDB.h deleted file mode 100644 index 39e2f4312..000000000 --- a/SnowplowDemo/Pods/FMDB/src/fmdb/FMDB.h +++ /dev/null @@ -1,5 +0,0 @@ -#import "FMDatabase.h" -#import "FMResultSet.h" -#import "FMDatabaseAdditions.h" -#import "FMDatabaseQueue.h" -#import "FMDatabasePool.h" diff --git a/SnowplowDemo/Pods/Headers/Private/FMDB/FMDB.h b/SnowplowDemo/Pods/Headers/Private/FMDB/FMDB.h deleted file mode 120000 index bcd6e0a12..000000000 --- a/SnowplowDemo/Pods/Headers/Private/FMDB/FMDB.h +++ /dev/null @@ -1 +0,0 @@ -../../../FMDB/src/fmdb/FMDB.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/FMDB/FMDatabase.h b/SnowplowDemo/Pods/Headers/Private/FMDB/FMDatabase.h deleted file mode 120000 index e69b333e8..000000000 --- a/SnowplowDemo/Pods/Headers/Private/FMDB/FMDatabase.h +++ /dev/null @@ -1 +0,0 @@ -../../../FMDB/src/fmdb/FMDatabase.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/FMDB/FMDatabaseAdditions.h b/SnowplowDemo/Pods/Headers/Private/FMDB/FMDatabaseAdditions.h deleted file mode 120000 index b48a6a351..000000000 --- a/SnowplowDemo/Pods/Headers/Private/FMDB/FMDatabaseAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../FMDB/src/fmdb/FMDatabaseAdditions.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/FMDB/FMDatabasePool.h b/SnowplowDemo/Pods/Headers/Private/FMDB/FMDatabasePool.h deleted file mode 120000 index 1d78001fc..000000000 --- a/SnowplowDemo/Pods/Headers/Private/FMDB/FMDatabasePool.h +++ /dev/null @@ -1 +0,0 @@ -../../../FMDB/src/fmdb/FMDatabasePool.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/FMDB/FMDatabaseQueue.h b/SnowplowDemo/Pods/Headers/Private/FMDB/FMDatabaseQueue.h deleted file mode 120000 index 9adde8736..000000000 --- a/SnowplowDemo/Pods/Headers/Private/FMDB/FMDatabaseQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../FMDB/src/fmdb/FMDatabaseQueue.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/FMDB/FMResultSet.h b/SnowplowDemo/Pods/Headers/Private/FMDB/FMResultSet.h deleted file mode 120000 index fd761d84a..000000000 --- a/SnowplowDemo/Pods/Headers/Private/FMDB/FMResultSet.h +++ /dev/null @@ -1 +0,0 @@ -../../../FMDB/src/fmdb/FMResultSet.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/Reachability/Reachability.h b/SnowplowDemo/Pods/Headers/Private/Reachability/Reachability.h deleted file mode 120000 index a30e80c62..000000000 --- a/SnowplowDemo/Pods/Headers/Private/Reachability/Reachability.h +++ /dev/null @@ -1 +0,0 @@ -../../../Reachability/Reachability.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/OpenIDFA.h b/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/OpenIDFA.h deleted file mode 120000 index 72acb4fe8..000000000 --- a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/OpenIDFA.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/OpenIDFA.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPEmitter.h b/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPEmitter.h deleted file mode 120000 index e908a430b..000000000 --- a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPEmitter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPEmitter.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPEvent.h b/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPEvent.h deleted file mode 120000 index 786851d44..000000000 --- a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPEvent.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPEventStore.h b/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPEventStore.h deleted file mode 120000 index ad3249986..000000000 --- a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPEventStore.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPEventStore.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPPayload.h b/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPPayload.h deleted file mode 120000 index 4a42c8904..000000000 --- a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPPayload.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPPayload.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPRequestCallback.h b/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPRequestCallback.h deleted file mode 120000 index 691325396..000000000 --- a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPRequestCallback.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPRequestCallback.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPRequestResponse.h b/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPRequestResponse.h deleted file mode 120000 index 4dd837d59..000000000 --- a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPRequestResponse.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPRequestResponse.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPSelfDescribingJson.h b/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPSelfDescribingJson.h deleted file mode 120000 index a2439cd4d..000000000 --- a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPSelfDescribingJson.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPSelfDescribingJson.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPSession.h b/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPSession.h deleted file mode 120000 index dfd05b7ba..000000000 --- a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPSession.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPSession.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPSubject.h b/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPSubject.h deleted file mode 120000 index ae4e48628..000000000 --- a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPSubject.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPSubject.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPTracker.h b/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPTracker.h deleted file mode 120000 index d9a0487f7..000000000 --- a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPTracker.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPUtilities.h b/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPUtilities.h deleted file mode 120000 index 4c11a35a8..000000000 --- a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPUtilities.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPUtilities.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPWeakTimerTarget.h b/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPWeakTimerTarget.h deleted file mode 120000 index af12e8c57..000000000 --- a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/SPWeakTimerTarget.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPWeakTimerTarget.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/Snowplow.h b/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/Snowplow.h deleted file mode 120000 index b23a62d1f..000000000 --- a/SnowplowDemo/Pods/Headers/Private/SnowplowTracker/Snowplow.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/Snowplow.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Public/FMDB/FMDB.h b/SnowplowDemo/Pods/Headers/Public/FMDB/FMDB.h deleted file mode 120000 index bcd6e0a12..000000000 --- a/SnowplowDemo/Pods/Headers/Public/FMDB/FMDB.h +++ /dev/null @@ -1 +0,0 @@ -../../../FMDB/src/fmdb/FMDB.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Public/FMDB/FMDatabase.h b/SnowplowDemo/Pods/Headers/Public/FMDB/FMDatabase.h deleted file mode 120000 index e69b333e8..000000000 --- a/SnowplowDemo/Pods/Headers/Public/FMDB/FMDatabase.h +++ /dev/null @@ -1 +0,0 @@ -../../../FMDB/src/fmdb/FMDatabase.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Public/FMDB/FMDatabaseAdditions.h b/SnowplowDemo/Pods/Headers/Public/FMDB/FMDatabaseAdditions.h deleted file mode 120000 index b48a6a351..000000000 --- a/SnowplowDemo/Pods/Headers/Public/FMDB/FMDatabaseAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../FMDB/src/fmdb/FMDatabaseAdditions.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Public/FMDB/FMDatabasePool.h b/SnowplowDemo/Pods/Headers/Public/FMDB/FMDatabasePool.h deleted file mode 120000 index 1d78001fc..000000000 --- a/SnowplowDemo/Pods/Headers/Public/FMDB/FMDatabasePool.h +++ /dev/null @@ -1 +0,0 @@ -../../../FMDB/src/fmdb/FMDatabasePool.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Public/FMDB/FMDatabaseQueue.h b/SnowplowDemo/Pods/Headers/Public/FMDB/FMDatabaseQueue.h deleted file mode 120000 index 9adde8736..000000000 --- a/SnowplowDemo/Pods/Headers/Public/FMDB/FMDatabaseQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../FMDB/src/fmdb/FMDatabaseQueue.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Public/FMDB/FMResultSet.h b/SnowplowDemo/Pods/Headers/Public/FMDB/FMResultSet.h deleted file mode 120000 index fd761d84a..000000000 --- a/SnowplowDemo/Pods/Headers/Public/FMDB/FMResultSet.h +++ /dev/null @@ -1 +0,0 @@ -../../../FMDB/src/fmdb/FMResultSet.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Public/Reachability/Reachability.h b/SnowplowDemo/Pods/Headers/Public/Reachability/Reachability.h deleted file mode 120000 index a30e80c62..000000000 --- a/SnowplowDemo/Pods/Headers/Public/Reachability/Reachability.h +++ /dev/null @@ -1 +0,0 @@ -../../../Reachability/Reachability.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPEmitter.h b/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPEmitter.h deleted file mode 120000 index e908a430b..000000000 --- a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPEmitter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPEmitter.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPEvent.h b/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPEvent.h deleted file mode 120000 index 786851d44..000000000 --- a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPEvent.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPPayload.h b/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPPayload.h deleted file mode 120000 index 4a42c8904..000000000 --- a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPPayload.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPPayload.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPRequestCallback.h b/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPRequestCallback.h deleted file mode 120000 index 691325396..000000000 --- a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPRequestCallback.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPRequestCallback.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPSelfDescribingJson.h b/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPSelfDescribingJson.h deleted file mode 120000 index a2439cd4d..000000000 --- a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPSelfDescribingJson.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPSelfDescribingJson.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPSubject.h b/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPSubject.h deleted file mode 120000 index ae4e48628..000000000 --- a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPSubject.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPSubject.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPTracker.h b/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPTracker.h deleted file mode 120000 index d9a0487f7..000000000 --- a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPTracker.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPUtilities.h b/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPUtilities.h deleted file mode 120000 index 4c11a35a8..000000000 --- a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/SPUtilities.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/SPUtilities.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/Snowplow.h b/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/Snowplow.h deleted file mode 120000 index b23a62d1f..000000000 --- a/SnowplowDemo/Pods/Headers/Public/SnowplowTracker/Snowplow.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Snowplow/Snowplow.h \ No newline at end of file diff --git a/SnowplowDemo/Pods/Manifest.lock b/SnowplowDemo/Pods/Manifest.lock deleted file mode 100644 index cb4a939cf..000000000 --- a/SnowplowDemo/Pods/Manifest.lock +++ /dev/null @@ -1,24 +0,0 @@ -PODS: - - FMDB (2.5): - - FMDB/standard (= 2.5) - - FMDB/common (2.5) - - FMDB/standard (2.5): - - FMDB/common - - Reachability (3.2) - - SnowplowTracker (0.6.1): - - FMDB (= 2.5) - - Reachability (= 3.2) - -DEPENDENCIES: - - SnowplowTracker (from `../`) - -EXTERNAL SOURCES: - SnowplowTracker: - :path: ../ - -SPEC CHECKSUMS: - FMDB: 96e8f1bcc1329e269330f99770ad4285d9003e52 - Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 - SnowplowTracker: fd63aa0ccb9c8b8c054c858d0bb82dd35f91daf2 - -COCOAPODS: 0.39.0 diff --git a/SnowplowDemo/Pods/Pods.xcodeproj/project.pbxproj b/SnowplowDemo/Pods/Pods.xcodeproj/project.pbxproj deleted file mode 100644 index fa54afdd6..000000000 --- a/SnowplowDemo/Pods/Pods.xcodeproj/project.pbxproj +++ /dev/null @@ -1,907 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 077E3970FB170FB93D570BFDF3D7E536 /* SPRequestCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 930C69DFAC6B4B13920A65892D88E0B9 /* SPRequestCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0EF8E9AA652DBE2745A7D5C8CD2E3BDE /* FMDatabasePool.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A5C2830456E8058C0C1A140DB08A3DE /* FMDatabasePool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 0F8A8E0D6FAEBF758E0B4D620335F094 /* FMDatabasePool.h in Headers */ = {isa = PBXBuildFile; fileRef = 844A7716AFDB03BDA5603252D7B84606 /* FMDatabasePool.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 120050F64435FCDC01A24FAF56912933 /* SPTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = E5BDF34AC9CB2EF937BE4A859755BE47 /* SPTracker.m */; }; - 16FF717308FB39F6B3ECE90B8B101DEC /* Snowplow.h in Headers */ = {isa = PBXBuildFile; fileRef = CA39FA407440AA08CD99047578DBE941 /* Snowplow.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1E5B2224B455FB7E5438E7645A0AFD99 /* Reachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 112F37E1D383C1CC7D9F4EAC69562773 /* Reachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F79440D0BCFA7D11E5BB6499A7DF039 /* Reachability-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E3D5D90C377006FF7F243D1F31351B03 /* Reachability-dummy.m */; }; - 282081E035E7A843068E8BCC2E07C217 /* FMDatabaseQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = ED667A4EDC6A793FCDE5F4D50B70E904 /* FMDatabaseQueue.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 313531CEDA0294311D87B4F4C3F073F4 /* FMDB.h in Headers */ = {isa = PBXBuildFile; fileRef = 2345C91765ED9A9A0926BCCCCD24B7A7 /* FMDB.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3D0F69C4CA35EB6A1F686BA88B19B4F6 /* FMDB-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 586F687E9FC7C73A5F0DDD670C73C525 /* FMDB-dummy.m */; }; - 3DCE2D79543F3C56D20EB5B7B4453D5C /* SPSubject.h in Headers */ = {isa = PBXBuildFile; fileRef = 36BA599F0452ADB537AF55A49EBD8133 /* SPSubject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3FE51746AD9515379FCCA9FD6FA1DE83 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26C44ED7620324B555CB0ACE88C82B30 /* SystemConfiguration.framework */; }; - 4A414A5ACB273FF85C457B78B8F59CE0 /* SPTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CEB87882FF5DBB67C25DF4E316BC2F6 /* SPTracker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4D355CA454AD1D3B45AD3C4436F6187C /* SPEventStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E51993511E0D8DFB7501146A9D43815 /* SPEventStore.m */; }; - 53043C70D86D1F8477C0599C3699E28B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8E3568ED2C65566EAD5313C51E89726 /* Foundation.framework */; }; - 5314F3DA6E3D850B63540CF3E5BFD799 /* SPWeakTimerTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C10CF733F11B64392682C634027B93B /* SPWeakTimerTarget.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 587B76A3E381AF7C3EFFDF6754D39288 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8E3568ED2C65566EAD5313C51E89726 /* Foundation.framework */; }; - 5D9B4A06AD67CFAE54CF7575CEC90C42 /* SPUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = CC0400E4589D6D7D852F514028C4617A /* SPUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6ABB76B4AC3E9E4E7541EB0316F98CEB /* SPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = BCE9AD7058B68E572CCBCA9385D7E33B /* SPSession.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 71A4A4DB07B28F98C89C8CCF26D96252 /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 2077CF6A1F4DD4B1CA42CD04C7DC17FF /* Reachability.m */; }; - 837C4D1CA4E589DA7F3873AC415B3917 /* SPEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = 366B3977C72D3FC6786DDAA66369585A /* SPEmitter.m */; }; - 8A6D5547D6524D3D41596486B052937D /* SPRequestResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 04D9977B3FDECFAD00F5ABC09C9377DE /* SPRequestResponse.m */; }; - 8D952208C50A0126B5E3650B18D6EAF5 /* SPEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 37CE4CAE3FE65686524F624DC0F7F2F7 /* SPEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96FA9018A776EB4F7A4A782346344F96 /* SPSession.m in Sources */ = {isa = PBXBuildFile; fileRef = D5D8F07474A5BD8E58DD7DEE87941DDE /* SPSession.m */; }; - A1509BC8A8428AA308E8A657D6F23EAB /* SnowplowTracker-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 35F20843F3193258AA4B67F35C6FF091 /* SnowplowTracker-dummy.m */; }; - A1DCDC713D21C4451C7EFC74C564A32B /* SPEventStore.h in Headers */ = {isa = PBXBuildFile; fileRef = B19566EBC484E07B547947B4369F7EF1 /* SPEventStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A350C5704A1F233DAD830E081E00F8C1 /* FMDatabaseAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CFFEBA8713FCB9E218223A169D70753 /* FMDatabaseAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A5F32E557557CBEF3EEC84C8796BAFCB /* SPSelfDescribingJson.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F3CC7E10EE242A4D276B78CC5C57EAD /* SPSelfDescribingJson.m */; }; - B418C9BDCF8C6BAC2E3942F157BB6D4C /* FMDatabaseAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 18C84E858CB639B7D9D2F98F2AD07AD8 /* FMDatabaseAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B72E614483F12F520776493174F8F81F /* SPSubject.m in Sources */ = {isa = PBXBuildFile; fileRef = 64528137A4343EE803522876670889C2 /* SPSubject.m */; }; - B8EBF3E87F63AE835DC47433C857C5C4 /* Snowplow.m in Sources */ = {isa = PBXBuildFile; fileRef = 299B84BAEA252BBB461932C3BF06F86B /* Snowplow.m */; }; - BCDAED014E274EB5C4617872871A3AF4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8E3568ED2C65566EAD5313C51E89726 /* Foundation.framework */; }; - CA027706DD6805766F1F4EC548E72440 /* FMDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 067062B7B137ACB9409921F183CF729B /* FMDatabase.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D01738700801F329F5528DE56F453D3F /* SPPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = 40A042649BFBBE26502659FA8AAB8040 /* SPPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0C5FF5485EAA2CDA03E9796B407697A /* FMDatabaseQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E7939804F34B0A764E6F87441843E1B /* FMDatabaseQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0D5FFE53407F16C9CD3D0ECF43ACE93 /* FMDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CA20101B16274108B71335B5A3AA489 /* FMDatabase.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6B53B3260F5DCD431EAC7F50CC9251D /* SPEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 218C3978E9DB3122BB6B053A33CE1231 /* SPEmitter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6CF63D886A14BF1DD2F8D56DDA0612D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8E3568ED2C65566EAD5313C51E89726 /* Foundation.framework */; }; - D9177362BD803E5C45587174D841ACDF /* OpenIDFA.h in Headers */ = {isa = PBXBuildFile; fileRef = 77C31AE63A34D8703C6FFA7DDEEBAC78 /* OpenIDFA.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DA9C6202009EF281B99458EC22BC9959 /* SPUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 857FA5F503EF207EDD1429767FB6737C /* SPUtilities.m */; }; - DB2427A6D1812F87F282D9BCEEBA3BF2 /* SPRequestResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C98F6BB2F3B39368ACE7027A3D91BFB /* SPRequestResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DDD1E94EE67082222480A6255B2054FA /* SPEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 534FDF46502BB2AD718188ABCDB1A636 /* SPEvent.m */; }; - DEFA3504695E9DFDE1177DAB22884470 /* FMResultSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 04A0D6744C5A856254B32F40E439F9FA /* FMResultSet.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E6714E1081C7DBF4BB2595B540C1346A /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3158BE8B2E4027AECB243B33AB429DDF /* CoreTelephony.framework */; }; - E83F892AEF32DF5DFB43901CC8949C04 /* SPPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 57D7127F75FC07B08A305C5D7274BEBD /* SPPayload.m */; }; - EB4DB4FCD075D898CEA80CC5F5F4E183 /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 272643F56613CA0D336AE3DBF19DC404 /* Pods-dummy.m */; }; - F0B8A5C54CB0AE9701D3E312270D33F2 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2563BCF2B86F303F628FE7C863E30C14 /* UIKit.framework */; }; - F89D653BBDCFEEAC12D9E152FE8684FE /* SPWeakTimerTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E67DC7F0B4F1A7E521E4714035A214E /* SPWeakTimerTarget.m */; }; - F920A52667B430FE6A71DA503CD9EF6F /* SPSelfDescribingJson.h in Headers */ = {isa = PBXBuildFile; fileRef = D35823C0CFC1854E305D29B9C270D530 /* SPSelfDescribingJson.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F977B243321331B58666E9284634101A /* FMResultSet.h in Headers */ = {isa = PBXBuildFile; fileRef = BBF60D3B9EF7A0FAE5D096F60625EE5E /* FMResultSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FE99C7560EB6B0456BD0858D1653DAF9 /* OpenIDFA.m in Sources */ = {isa = PBXBuildFile; fileRef = E65D679E9529A8D74782DF5CDE663326 /* OpenIDFA.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 19486A82984A49FFF1A96E34A7E7B8C9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 9F12FB4A63E20F601CFB2E64A65B57C1; - remoteInfo = FMDB; - }; - 279EF407CE673E68173233ED72948E36 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0183AD82590DDD65F66069E9562E62E4; - remoteInfo = Reachability; - }; - 56921D953FE585FD0388E978CE7266E5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0183AD82590DDD65F66069E9562E62E4; - remoteInfo = Reachability; - }; - 68308784FAE794FA411E891F90B87587 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8A242E60202AB3EF28922480EC3BA79E; - remoteInfo = SnowplowTracker; - }; - E2B93DFFBBD45EDB86A5B7EA37616880 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 9F12FB4A63E20F601CFB2E64A65B57C1; - remoteInfo = FMDB; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 04A0D6744C5A856254B32F40E439F9FA /* FMResultSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMResultSet.m; path = src/fmdb/FMResultSet.m; sourceTree = ""; }; - 04D9977B3FDECFAD00F5ABC09C9377DE /* SPRequestResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SPRequestResponse.m; sourceTree = ""; }; - 067062B7B137ACB9409921F183CF729B /* FMDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabase.m; path = src/fmdb/FMDatabase.m; sourceTree = ""; }; - 0A5C2830456E8058C0C1A140DB08A3DE /* FMDatabasePool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabasePool.m; path = src/fmdb/FMDatabasePool.m; sourceTree = ""; }; - 1011F8FA26B099646EB60AEA2E2258E7 /* libSnowplowTracker.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSnowplowTracker.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 10834806BD7B412BC24F347361FA2C8E /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; - 112F37E1D383C1CC7D9F4EAC69562773 /* Reachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Reachability.h; sourceTree = ""; }; - 18C84E858CB639B7D9D2F98F2AD07AD8 /* FMDatabaseAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabaseAdditions.h; path = src/fmdb/FMDatabaseAdditions.h; sourceTree = ""; }; - 1C98F6BB2F3B39368ACE7027A3D91BFB /* SPRequestResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPRequestResponse.h; sourceTree = ""; }; - 1CEB87882FF5DBB67C25DF4E316BC2F6 /* SPTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPTracker.h; sourceTree = ""; }; - 1E4E0B74B7A3C4FC036C35391DC9C7D0 /* Reachability-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Reachability-prefix.pch"; sourceTree = ""; }; - 1FE2A8033CBBDAD5FDC30845420B9F0C /* libReachability.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libReachability.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 2077CF6A1F4DD4B1CA42CD04C7DC17FF /* Reachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = Reachability.m; sourceTree = ""; }; - 218C3978E9DB3122BB6B053A33CE1231 /* SPEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPEmitter.h; sourceTree = ""; }; - 2345C91765ED9A9A0926BCCCCD24B7A7 /* FMDB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDB.h; path = src/fmdb/FMDB.h; sourceTree = ""; }; - 24977E544942883B19DA2FEA8C46E905 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 2563BCF2B86F303F628FE7C863E30C14 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 26C44ED7620324B555CB0ACE88C82B30 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 272643F56613CA0D336AE3DBF19DC404 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; - 299B84BAEA252BBB461932C3BF06F86B /* Snowplow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = Snowplow.m; sourceTree = ""; }; - 2E51993511E0D8DFB7501146A9D43815 /* SPEventStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SPEventStore.m; sourceTree = ""; }; - 3158BE8B2E4027AECB243B33AB429DDF /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/CoreTelephony.framework; sourceTree = DEVELOPER_DIR; }; - 35F20843F3193258AA4B67F35C6FF091 /* SnowplowTracker-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnowplowTracker-dummy.m"; sourceTree = ""; }; - 366B3977C72D3FC6786DDAA66369585A /* SPEmitter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SPEmitter.m; sourceTree = ""; }; - 36BA599F0452ADB537AF55A49EBD8133 /* SPSubject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPSubject.h; sourceTree = ""; }; - 37CE4CAE3FE65686524F624DC0F7F2F7 /* SPEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPEvent.h; sourceTree = ""; }; - 37DB56D75062CC75FCB0966E1C6E8A8E /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; - 3C10CF733F11B64392682C634027B93B /* SPWeakTimerTarget.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPWeakTimerTarget.h; sourceTree = ""; }; - 40A042649BFBBE26502659FA8AAB8040 /* SPPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPPayload.h; sourceTree = ""; }; - 41BAF0086741924E11222A9F56722632 /* FMDB-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FMDB-prefix.pch"; sourceTree = ""; }; - 4E762F23EC34ED4A6FF3312D84E33A40 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; - 534FDF46502BB2AD718188ABCDB1A636 /* SPEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SPEvent.m; sourceTree = ""; }; - 57D7127F75FC07B08A305C5D7274BEBD /* SPPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SPPayload.m; sourceTree = ""; }; - 586F687E9FC7C73A5F0DDD670C73C525 /* FMDB-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FMDB-dummy.m"; sourceTree = ""; }; - 5E7939804F34B0A764E6F87441843E1B /* FMDatabaseQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabaseQueue.h; path = src/fmdb/FMDatabaseQueue.h; sourceTree = ""; }; - 5F3CC7E10EE242A4D276B78CC5C57EAD /* SPSelfDescribingJson.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SPSelfDescribingJson.m; sourceTree = ""; }; - 64528137A4343EE803522876670889C2 /* SPSubject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SPSubject.m; sourceTree = ""; }; - 6911BECA35E7518D864239B7E898EEF3 /* Pods-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-frameworks.sh"; sourceTree = ""; }; - 6CFFEBA8713FCB9E218223A169D70753 /* FMDatabaseAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabaseAdditions.m; path = src/fmdb/FMDatabaseAdditions.m; sourceTree = ""; }; - 712B391FC681464D99B72392AD43F22F /* SnowplowTracker-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnowplowTracker-prefix.pch"; sourceTree = ""; }; - 77C31AE63A34D8703C6FFA7DDEEBAC78 /* OpenIDFA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = OpenIDFA.h; sourceTree = ""; }; - 844A7716AFDB03BDA5603252D7B84606 /* FMDatabasePool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabasePool.h; path = src/fmdb/FMDatabasePool.h; sourceTree = ""; }; - 857FA5F503EF207EDD1429767FB6737C /* SPUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SPUtilities.m; sourceTree = ""; }; - 8CA20101B16274108B71335B5A3AA489 /* FMDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabase.h; path = src/fmdb/FMDatabase.h; sourceTree = ""; }; - 930C69DFAC6B4B13920A65892D88E0B9 /* SPRequestCallback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPRequestCallback.h; sourceTree = ""; }; - 98C98CDFB3F20F2925F6CD1F141BB14F /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; - 9E67DC7F0B4F1A7E521E4714035A214E /* SPWeakTimerTarget.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SPWeakTimerTarget.m; sourceTree = ""; }; - A0A1210368EA43298EDB903BB50B2A03 /* libFMDB.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libFMDB.a; sourceTree = BUILT_PRODUCTS_DIR; }; - A1A36D34413696BE466E2CA0AFF194DA /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; - B19566EBC484E07B547947B4369F7EF1 /* SPEventStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPEventStore.h; sourceTree = ""; }; - BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - BBF60D3B9EF7A0FAE5D096F60625EE5E /* FMResultSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMResultSet.h; path = src/fmdb/FMResultSet.h; sourceTree = ""; }; - BC3AF2B27298FEC524D133BB0080096E /* Reachability.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Reachability.xcconfig; sourceTree = ""; }; - BCE9AD7058B68E572CCBCA9385D7E33B /* SPSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPSession.h; sourceTree = ""; }; - C8B3A93BA02C46FA9DF54A48447DC570 /* FMDB.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FMDB.xcconfig; sourceTree = ""; }; - C8E3568ED2C65566EAD5313C51E89726 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - CA39FA407440AA08CD99047578DBE941 /* Snowplow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Snowplow.h; sourceTree = ""; }; - CC0400E4589D6D7D852F514028C4617A /* SPUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPUtilities.h; sourceTree = ""; }; - D35823C0CFC1854E305D29B9C270D530 /* SPSelfDescribingJson.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPSelfDescribingJson.h; sourceTree = ""; }; - D5064077E290B7F8A440E1426EF478BC /* SnowplowTracker.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnowplowTracker.xcconfig; sourceTree = ""; }; - D5D8F07474A5BD8E58DD7DEE87941DDE /* SPSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SPSession.m; sourceTree = ""; }; - E3D5D90C377006FF7F243D1F31351B03 /* Reachability-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Reachability-dummy.m"; sourceTree = ""; }; - E5BDF34AC9CB2EF937BE4A859755BE47 /* SPTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SPTracker.m; sourceTree = ""; }; - E65D679E9529A8D74782DF5CDE663326 /* OpenIDFA.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = OpenIDFA.m; sourceTree = ""; }; - ED667A4EDC6A793FCDE5F4D50B70E904 /* FMDatabaseQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabaseQueue.m; path = src/fmdb/FMDatabaseQueue.m; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 6BFC102F1BB9C51C550C7F2015056624 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 53043C70D86D1F8477C0599C3699E28B /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 756E7B0B62A60E0C7DF487A8A4E25139 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - E6714E1081C7DBF4BB2595B540C1346A /* CoreTelephony.framework in Frameworks */, - D6CF63D886A14BF1DD2F8D56DDA0612D /* Foundation.framework in Frameworks */, - F0B8A5C54CB0AE9701D3E312270D33F2 /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 84AF63084FFE4472EFC6131BD113B13D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 587B76A3E381AF7C3EFFDF6754D39288 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C90AE2D6A2035B326C0E78A64FBBF6C9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - BCDAED014E274EB5C4617872871A3AF4 /* Foundation.framework in Frameworks */, - 3FE51746AD9515379FCCA9FD6FA1DE83 /* SystemConfiguration.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 037C0CA694176A3C0915F62C9D20B3E6 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - B3D1D13E0C6553800746CB8FD61CF946 /* Pods */, - ); - name = "Targets Support Files"; - sourceTree = ""; - }; - 044093516CB315E941652A6F5D521BD7 /* FMDB */ = { - isa = PBXGroup; - children = ( - 9109F922B4C14147896DF341612C2D1A /* common */, - 749E8B29622EDEBC2000D4E0826CA511 /* Support Files */, - ); - path = FMDB; - sourceTree = ""; - }; - 075CB20AECFFFEB29A70A31F4F66FB67 /* Products */ = { - isa = PBXGroup; - children = ( - A0A1210368EA43298EDB903BB50B2A03 /* libFMDB.a */, - 24977E544942883B19DA2FEA8C46E905 /* libPods.a */, - 1FE2A8033CBBDAD5FDC30845420B9F0C /* libReachability.a */, - 1011F8FA26B099646EB60AEA2E2258E7 /* libSnowplowTracker.a */, - ); - name = Products; - sourceTree = ""; - }; - 14B8B9B15ECBE87983FF987239AB2D7B /* Frameworks */ = { - isa = PBXGroup; - children = ( - 3AAB18584BB28B796CE0FDC364636B61 /* iOS */, - ); - name = Frameworks; - sourceTree = ""; - }; - 2408D7116BFB7013AC7CCA86EE43FCC7 /* SnowplowTracker */ = { - isa = PBXGroup; - children = ( - FB51768427BFF1D4AC28AFA0A32B74F8 /* Snowplow */, - 588AE768AE41A850FBC1B7943668606E /* Support Files */, - ); - name = SnowplowTracker; - path = ../..; - sourceTree = ""; - }; - 344B1B024C1D9691ED793B951D8F5DB9 /* Development Pods */ = { - isa = PBXGroup; - children = ( - 2408D7116BFB7013AC7CCA86EE43FCC7 /* SnowplowTracker */, - ); - name = "Development Pods"; - sourceTree = ""; - }; - 3AAB18584BB28B796CE0FDC364636B61 /* iOS */ = { - isa = PBXGroup; - children = ( - 3158BE8B2E4027AECB243B33AB429DDF /* CoreTelephony.framework */, - C8E3568ED2C65566EAD5313C51E89726 /* Foundation.framework */, - 26C44ED7620324B555CB0ACE88C82B30 /* SystemConfiguration.framework */, - 2563BCF2B86F303F628FE7C863E30C14 /* UIKit.framework */, - ); - name = iOS; - sourceTree = ""; - }; - 588AE768AE41A850FBC1B7943668606E /* Support Files */ = { - isa = PBXGroup; - children = ( - D5064077E290B7F8A440E1426EF478BC /* SnowplowTracker.xcconfig */, - 35F20843F3193258AA4B67F35C6FF091 /* SnowplowTracker-dummy.m */, - 712B391FC681464D99B72392AD43F22F /* SnowplowTracker-prefix.pch */, - ); - name = "Support Files"; - path = "SnowplowDemo/Pods/Target Support Files/SnowplowTracker"; - sourceTree = ""; - }; - 749E8B29622EDEBC2000D4E0826CA511 /* Support Files */ = { - isa = PBXGroup; - children = ( - C8B3A93BA02C46FA9DF54A48447DC570 /* FMDB.xcconfig */, - 586F687E9FC7C73A5F0DDD670C73C525 /* FMDB-dummy.m */, - 41BAF0086741924E11222A9F56722632 /* FMDB-prefix.pch */, - ); - name = "Support Files"; - path = "../Target Support Files/FMDB"; - sourceTree = ""; - }; - 7DB346D0F39D3F0E887471402A8071AB = { - isa = PBXGroup; - children = ( - BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, - 344B1B024C1D9691ED793B951D8F5DB9 /* Development Pods */, - 14B8B9B15ECBE87983FF987239AB2D7B /* Frameworks */, - E46DDFC97461DA9A3848434465BB3F01 /* Pods */, - 075CB20AECFFFEB29A70A31F4F66FB67 /* Products */, - 037C0CA694176A3C0915F62C9D20B3E6 /* Targets Support Files */, - ); - sourceTree = ""; - }; - 9109F922B4C14147896DF341612C2D1A /* common */ = { - isa = PBXGroup; - children = ( - 8CA20101B16274108B71335B5A3AA489 /* FMDatabase.h */, - 067062B7B137ACB9409921F183CF729B /* FMDatabase.m */, - 18C84E858CB639B7D9D2F98F2AD07AD8 /* FMDatabaseAdditions.h */, - 6CFFEBA8713FCB9E218223A169D70753 /* FMDatabaseAdditions.m */, - 844A7716AFDB03BDA5603252D7B84606 /* FMDatabasePool.h */, - 0A5C2830456E8058C0C1A140DB08A3DE /* FMDatabasePool.m */, - 5E7939804F34B0A764E6F87441843E1B /* FMDatabaseQueue.h */, - ED667A4EDC6A793FCDE5F4D50B70E904 /* FMDatabaseQueue.m */, - 2345C91765ED9A9A0926BCCCCD24B7A7 /* FMDB.h */, - BBF60D3B9EF7A0FAE5D096F60625EE5E /* FMResultSet.h */, - 04A0D6744C5A856254B32F40E439F9FA /* FMResultSet.m */, - ); - name = common; - sourceTree = ""; - }; - B3D1D13E0C6553800746CB8FD61CF946 /* Pods */ = { - isa = PBXGroup; - children = ( - 37DB56D75062CC75FCB0966E1C6E8A8E /* Pods-acknowledgements.markdown */, - 10834806BD7B412BC24F347361FA2C8E /* Pods-acknowledgements.plist */, - 272643F56613CA0D336AE3DBF19DC404 /* Pods-dummy.m */, - 6911BECA35E7518D864239B7E898EEF3 /* Pods-frameworks.sh */, - A1A36D34413696BE466E2CA0AFF194DA /* Pods-resources.sh */, - 4E762F23EC34ED4A6FF3312D84E33A40 /* Pods.debug.xcconfig */, - 98C98CDFB3F20F2925F6CD1F141BB14F /* Pods.release.xcconfig */, - ); - name = Pods; - path = "Target Support Files/Pods"; - sourceTree = ""; - }; - C501328200BAAA3864F806A25DB076E3 /* Reachability */ = { - isa = PBXGroup; - children = ( - 112F37E1D383C1CC7D9F4EAC69562773 /* Reachability.h */, - 2077CF6A1F4DD4B1CA42CD04C7DC17FF /* Reachability.m */, - C69BC680B084BC79A1219734E31CB5BD /* Support Files */, - ); - path = Reachability; - sourceTree = ""; - }; - C69BC680B084BC79A1219734E31CB5BD /* Support Files */ = { - isa = PBXGroup; - children = ( - BC3AF2B27298FEC524D133BB0080096E /* Reachability.xcconfig */, - E3D5D90C377006FF7F243D1F31351B03 /* Reachability-dummy.m */, - 1E4E0B74B7A3C4FC036C35391DC9C7D0 /* Reachability-prefix.pch */, - ); - name = "Support Files"; - path = "../Target Support Files/Reachability"; - sourceTree = ""; - }; - E46DDFC97461DA9A3848434465BB3F01 /* Pods */ = { - isa = PBXGroup; - children = ( - 044093516CB315E941652A6F5D521BD7 /* FMDB */, - C501328200BAAA3864F806A25DB076E3 /* Reachability */, - ); - name = Pods; - sourceTree = ""; - }; - FB51768427BFF1D4AC28AFA0A32B74F8 /* Snowplow */ = { - isa = PBXGroup; - children = ( - 77C31AE63A34D8703C6FFA7DDEEBAC78 /* OpenIDFA.h */, - E65D679E9529A8D74782DF5CDE663326 /* OpenIDFA.m */, - CA39FA407440AA08CD99047578DBE941 /* Snowplow.h */, - 299B84BAEA252BBB461932C3BF06F86B /* Snowplow.m */, - 218C3978E9DB3122BB6B053A33CE1231 /* SPEmitter.h */, - 366B3977C72D3FC6786DDAA66369585A /* SPEmitter.m */, - 37CE4CAE3FE65686524F624DC0F7F2F7 /* SPEvent.h */, - 534FDF46502BB2AD718188ABCDB1A636 /* SPEvent.m */, - B19566EBC484E07B547947B4369F7EF1 /* SPEventStore.h */, - 2E51993511E0D8DFB7501146A9D43815 /* SPEventStore.m */, - 40A042649BFBBE26502659FA8AAB8040 /* SPPayload.h */, - 57D7127F75FC07B08A305C5D7274BEBD /* SPPayload.m */, - 930C69DFAC6B4B13920A65892D88E0B9 /* SPRequestCallback.h */, - 1C98F6BB2F3B39368ACE7027A3D91BFB /* SPRequestResponse.h */, - 04D9977B3FDECFAD00F5ABC09C9377DE /* SPRequestResponse.m */, - D35823C0CFC1854E305D29B9C270D530 /* SPSelfDescribingJson.h */, - 5F3CC7E10EE242A4D276B78CC5C57EAD /* SPSelfDescribingJson.m */, - BCE9AD7058B68E572CCBCA9385D7E33B /* SPSession.h */, - D5D8F07474A5BD8E58DD7DEE87941DDE /* SPSession.m */, - 36BA599F0452ADB537AF55A49EBD8133 /* SPSubject.h */, - 64528137A4343EE803522876670889C2 /* SPSubject.m */, - 1CEB87882FF5DBB67C25DF4E316BC2F6 /* SPTracker.h */, - E5BDF34AC9CB2EF937BE4A859755BE47 /* SPTracker.m */, - CC0400E4589D6D7D852F514028C4617A /* SPUtilities.h */, - 857FA5F503EF207EDD1429767FB6737C /* SPUtilities.m */, - 3C10CF733F11B64392682C634027B93B /* SPWeakTimerTarget.h */, - 9E67DC7F0B4F1A7E521E4714035A214E /* SPWeakTimerTarget.m */, - ); - path = Snowplow; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 8B2D82357BE4C2A10AB2CD4724B8E654 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D0D5FFE53407F16C9CD3D0ECF43ACE93 /* FMDatabase.h in Headers */, - B418C9BDCF8C6BAC2E3942F157BB6D4C /* FMDatabaseAdditions.h in Headers */, - 0F8A8E0D6FAEBF758E0B4D620335F094 /* FMDatabasePool.h in Headers */, - D0C5FF5485EAA2CDA03E9796B407697A /* FMDatabaseQueue.h in Headers */, - 313531CEDA0294311D87B4F4C3F073F4 /* FMDB.h in Headers */, - F977B243321331B58666E9284634101A /* FMResultSet.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D995FBE05BAA6B8342FDD41828645F9C /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D9177362BD803E5C45587174D841ACDF /* OpenIDFA.h in Headers */, - 16FF717308FB39F6B3ECE90B8B101DEC /* Snowplow.h in Headers */, - D6B53B3260F5DCD431EAC7F50CC9251D /* SPEmitter.h in Headers */, - 8D952208C50A0126B5E3650B18D6EAF5 /* SPEvent.h in Headers */, - A1DCDC713D21C4451C7EFC74C564A32B /* SPEventStore.h in Headers */, - D01738700801F329F5528DE56F453D3F /* SPPayload.h in Headers */, - 077E3970FB170FB93D570BFDF3D7E536 /* SPRequestCallback.h in Headers */, - DB2427A6D1812F87F282D9BCEEBA3BF2 /* SPRequestResponse.h in Headers */, - F920A52667B430FE6A71DA503CD9EF6F /* SPSelfDescribingJson.h in Headers */, - 6ABB76B4AC3E9E4E7541EB0316F98CEB /* SPSession.h in Headers */, - 3DCE2D79543F3C56D20EB5B7B4453D5C /* SPSubject.h in Headers */, - 4A414A5ACB273FF85C457B78B8F59CE0 /* SPTracker.h in Headers */, - 5D9B4A06AD67CFAE54CF7575CEC90C42 /* SPUtilities.h in Headers */, - 5314F3DA6E3D850B63540CF3E5BFD799 /* SPWeakTimerTarget.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FFD8CDF2372B39A9BCF88993C4CF664E /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 1E5B2224B455FB7E5438E7645A0AFD99 /* Reachability.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 0183AD82590DDD65F66069E9562E62E4 /* Reachability */ = { - isa = PBXNativeTarget; - buildConfigurationList = 95AEAFB944F8948D51D52598B24C881E /* Build configuration list for PBXNativeTarget "Reachability" */; - buildPhases = ( - 5E4A5437BC65BDE96DA83F0BD2E9AA1E /* Sources */, - C90AE2D6A2035B326C0E78A64FBBF6C9 /* Frameworks */, - FFD8CDF2372B39A9BCF88993C4CF664E /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Reachability; - productName = Reachability; - productReference = 1FE2A8033CBBDAD5FDC30845420B9F0C /* libReachability.a */; - productType = "com.apple.product-type.library.static"; - }; - 4736D1D30BED594B8BB6A980696A2C76 /* Pods */ = { - isa = PBXNativeTarget; - buildConfigurationList = 2C2EFA18B8AB1CECA6445C98D7EED636 /* Build configuration list for PBXNativeTarget "Pods" */; - buildPhases = ( - 3204FDC4897F116E934EA1FB648058C3 /* Sources */, - 6BFC102F1BB9C51C550C7F2015056624 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 234FD28387BE709A6361BDB62B0AD00B /* PBXTargetDependency */, - 420888535832EA1C99C9CA4A832197DB /* PBXTargetDependency */, - 9781F3173DE35F7F0461262318F93D86 /* PBXTargetDependency */, - ); - name = Pods; - productName = Pods; - productReference = 24977E544942883B19DA2FEA8C46E905 /* libPods.a */; - productType = "com.apple.product-type.library.static"; - }; - 8A242E60202AB3EF28922480EC3BA79E /* SnowplowTracker */ = { - isa = PBXNativeTarget; - buildConfigurationList = 77F35BA2FE57AEF3809F48A7FA015A35 /* Build configuration list for PBXNativeTarget "SnowplowTracker" */; - buildPhases = ( - 18C31D546803CF0BF8A83847F70C8BDF /* Sources */, - 756E7B0B62A60E0C7DF487A8A4E25139 /* Frameworks */, - D995FBE05BAA6B8342FDD41828645F9C /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - 3157C6CF69FB2483EDB3F26D3BFB30D7 /* PBXTargetDependency */, - D3775E5D22865FDE9C74FAF632D8B41C /* PBXTargetDependency */, - ); - name = SnowplowTracker; - productName = SnowplowTracker; - productReference = 1011F8FA26B099646EB60AEA2E2258E7 /* libSnowplowTracker.a */; - productType = "com.apple.product-type.library.static"; - }; - 9F12FB4A63E20F601CFB2E64A65B57C1 /* FMDB */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3AC899FD215914230EB9D8B57AD910D0 /* Build configuration list for PBXNativeTarget "FMDB" */; - buildPhases = ( - 050B66E154969A68944942A22BD9B314 /* Sources */, - 84AF63084FFE4472EFC6131BD113B13D /* Frameworks */, - 8B2D82357BE4C2A10AB2CD4724B8E654 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FMDB; - productName = FMDB; - productReference = A0A1210368EA43298EDB903BB50B2A03 /* libFMDB.a */; - productType = "com.apple.product-type.library.static"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0700; - }; - buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = 075CB20AECFFFEB29A70A31F4F66FB67 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 9F12FB4A63E20F601CFB2E64A65B57C1 /* FMDB */, - 4736D1D30BED594B8BB6A980696A2C76 /* Pods */, - 0183AD82590DDD65F66069E9562E62E4 /* Reachability */, - 8A242E60202AB3EF28922480EC3BA79E /* SnowplowTracker */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - 050B66E154969A68944942A22BD9B314 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CA027706DD6805766F1F4EC548E72440 /* FMDatabase.m in Sources */, - A350C5704A1F233DAD830E081E00F8C1 /* FMDatabaseAdditions.m in Sources */, - 0EF8E9AA652DBE2745A7D5C8CD2E3BDE /* FMDatabasePool.m in Sources */, - 282081E035E7A843068E8BCC2E07C217 /* FMDatabaseQueue.m in Sources */, - 3D0F69C4CA35EB6A1F686BA88B19B4F6 /* FMDB-dummy.m in Sources */, - DEFA3504695E9DFDE1177DAB22884470 /* FMResultSet.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 18C31D546803CF0BF8A83847F70C8BDF /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FE99C7560EB6B0456BD0858D1653DAF9 /* OpenIDFA.m in Sources */, - B8EBF3E87F63AE835DC47433C857C5C4 /* Snowplow.m in Sources */, - A1509BC8A8428AA308E8A657D6F23EAB /* SnowplowTracker-dummy.m in Sources */, - 837C4D1CA4E589DA7F3873AC415B3917 /* SPEmitter.m in Sources */, - DDD1E94EE67082222480A6255B2054FA /* SPEvent.m in Sources */, - 4D355CA454AD1D3B45AD3C4436F6187C /* SPEventStore.m in Sources */, - E83F892AEF32DF5DFB43901CC8949C04 /* SPPayload.m in Sources */, - 8A6D5547D6524D3D41596486B052937D /* SPRequestResponse.m in Sources */, - A5F32E557557CBEF3EEC84C8796BAFCB /* SPSelfDescribingJson.m in Sources */, - 96FA9018A776EB4F7A4A782346344F96 /* SPSession.m in Sources */, - B72E614483F12F520776493174F8F81F /* SPSubject.m in Sources */, - 120050F64435FCDC01A24FAF56912933 /* SPTracker.m in Sources */, - DA9C6202009EF281B99458EC22BC9959 /* SPUtilities.m in Sources */, - F89D653BBDCFEEAC12D9E152FE8684FE /* SPWeakTimerTarget.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3204FDC4897F116E934EA1FB648058C3 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EB4DB4FCD075D898CEA80CC5F5F4E183 /* Pods-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5E4A5437BC65BDE96DA83F0BD2E9AA1E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F79440D0BCFA7D11E5BB6499A7DF039 /* Reachability-dummy.m in Sources */, - 71A4A4DB07B28F98C89C8CCF26D96252 /* Reachability.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 234FD28387BE709A6361BDB62B0AD00B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FMDB; - target = 9F12FB4A63E20F601CFB2E64A65B57C1 /* FMDB */; - targetProxy = E2B93DFFBBD45EDB86A5B7EA37616880 /* PBXContainerItemProxy */; - }; - 3157C6CF69FB2483EDB3F26D3BFB30D7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FMDB; - target = 9F12FB4A63E20F601CFB2E64A65B57C1 /* FMDB */; - targetProxy = 19486A82984A49FFF1A96E34A7E7B8C9 /* PBXContainerItemProxy */; - }; - 420888535832EA1C99C9CA4A832197DB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Reachability; - target = 0183AD82590DDD65F66069E9562E62E4 /* Reachability */; - targetProxy = 279EF407CE673E68173233ED72948E36 /* PBXContainerItemProxy */; - }; - 9781F3173DE35F7F0461262318F93D86 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SnowplowTracker; - target = 8A242E60202AB3EF28922480EC3BA79E /* SnowplowTracker */; - targetProxy = 68308784FAE794FA411E891F90B87587 /* PBXContainerItemProxy */; - }; - D3775E5D22865FDE9C74FAF632D8B41C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Reachability; - target = 0183AD82590DDD65F66069E9562E62E4 /* Reachability */; - targetProxy = 56921D953FE585FD0388E978CE7266E5 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 0CD4C4810C3E2E3BF11B69AC7DEE5F59 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D5064077E290B7F8A440E1426EF478BC /* SnowplowTracker.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/SnowplowTracker/SnowplowTracker-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Release; - }; - 30A7EADB39897C3D7A64C68E92A89142 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4E762F23EC34ED4A6FF3312D84E33A40 /* Pods.debug.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - MACH_O_TYPE = staticlib; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - 511103F7F15A7E8F83B268EA03462CAB /* 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; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PREPROCESSOR_DEFINITIONS = "RELEASE=1"; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 779D1A01A426A33D9ABF9D13D0EE1406 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BC3AF2B27298FEC524D133BB0080096E /* Reachability.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Reachability/Reachability-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - 9616D0CE9075A3CD6CCF6472DA20AA46 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C8B3A93BA02C46FA9DF54A48447DC570 /* FMDB.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/FMDB/FMDB-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Release; - }; - 985AF410604C7BD59B54E453AC0A828B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C8B3A93BA02C46FA9DF54A48447DC570 /* FMDB.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/FMDB/FMDB-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - 9CB797300490EDA6314F64F9894C9F73 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D5064077E290B7F8A440E1426EF478BC /* SnowplowTracker.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/SnowplowTracker/SnowplowTracker-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - AA05AF9C3A14EE0E32F42C6E6D42D34F /* 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; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - ONLY_ACTIVE_ARCH = YES; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; - }; - D7B7C2A7DDB6EBBFF15B65576E4B3DF5 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 98C98CDFB3F20F2925F6CD1F141BB14F /* Pods.release.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - MACH_O_TYPE = staticlib; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Release; - }; - E422178872B64884FF1AE44CD2AE1944 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BC3AF2B27298FEC524D133BB0080096E /* Reachability.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Reachability/Reachability-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 2C2EFA18B8AB1CECA6445C98D7EED636 /* Build configuration list for PBXNativeTarget "Pods" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 30A7EADB39897C3D7A64C68E92A89142 /* Debug */, - D7B7C2A7DDB6EBBFF15B65576E4B3DF5 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AA05AF9C3A14EE0E32F42C6E6D42D34F /* Debug */, - 511103F7F15A7E8F83B268EA03462CAB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3AC899FD215914230EB9D8B57AD910D0 /* Build configuration list for PBXNativeTarget "FMDB" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 985AF410604C7BD59B54E453AC0A828B /* Debug */, - 9616D0CE9075A3CD6CCF6472DA20AA46 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 77F35BA2FE57AEF3809F48A7FA015A35 /* Build configuration list for PBXNativeTarget "SnowplowTracker" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9CB797300490EDA6314F64F9894C9F73 /* Debug */, - 0CD4C4810C3E2E3BF11B69AC7DEE5F59 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 95AEAFB944F8948D51D52598B24C881E /* Build configuration list for PBXNativeTarget "Reachability" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 779D1A01A426A33D9ABF9D13D0EE1406 /* Debug */, - E422178872B64884FF1AE44CD2AE1944 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; -} diff --git a/SnowplowDemo/Pods/Reachability/LICENCE.txt b/SnowplowDemo/Pods/Reachability/LICENCE.txt deleted file mode 100644 index 12b7844c3..000000000 --- a/SnowplowDemo/Pods/Reachability/LICENCE.txt +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2011-2013, Tony Million. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/SnowplowDemo/Pods/Reachability/README.md b/SnowplowDemo/Pods/Reachability/README.md deleted file mode 100644 index 4814e6d4b..000000000 --- a/SnowplowDemo/Pods/Reachability/README.md +++ /dev/null @@ -1,75 +0,0 @@ -[![Reference Status](https://www.versioneye.com/objective-c/reachability/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/reachability/references) - -# Reachability - -This is a drop-in replacement for Apple's `Reachability` class. It is ARC-compatible, and it uses the new GCD methods to notify of network interface changes. - -In addition to the standard `NSNotification`, it supports the use of blocks for when the network becomes reachable and unreachable. - -Finally, you can specify whether a WWAN connection is considered "reachable". - -*DO NOT OPEN BUGS UNTIL YOU HAVE TESTED ON DEVICE* - -## Requirements - -Once you have added the `.h/m` files to your project, simply: - -* Go to the `Project->TARGETS->Build Phases->Link Binary With Libraries`. -* Press the plus in the lower left of the list. -* Add `SystemConfiguration.framework`. - -Boom, you're done. - -## Examples - -### Block Example - -This sample uses blocks to notify when the interface state has changed. The blocks will be called on a **BACKGROUND THREAD**, so you need to dispatch UI updates onto the main thread. - - // Allocate a reachability object - Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"]; - - // Set the blocks - reach.reachableBlock = ^(Reachability*reach) - { - // keep in mind this is called on a background thread - // and if you are updating the UI it needs to happen - // on the main thread, like this: - - dispatch_async(dispatch_get_main_queue(), ^{ - NSLog(@"REACHABLE!"); - }); - }; - - reach.unreachableBlock = ^(Reachability*reach) - { - NSLog(@"UNREACHABLE!"); - }; - - // Start the notifier, which will cause the reachability object to retain itself! - [reach startNotifier]; - -### `NSNotification` Example - -This sample will use `NSNotification`s to notify when the interface has changed. They will be delivered on the **MAIN THREAD**, so you *can* do UI updates from within the function. - -In addition, it asks the `Reachability` object to consider the WWAN (3G/EDGE/CDMA) as a non-reachable connection (you might use this if you are writing a video streaming app, for example, to save the user's data plan). - - // Allocate a reachability object - Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"]; - - // Tell the reachability that we DON'T want to be reachable on 3G/EDGE/CDMA - reach.reachableOnWWAN = NO; - - // Here we set up a NSNotification observer. The Reachability that caused the notification - // is passed in the object parameter - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(reachabilityChanged:) - name:kReachabilityChangedNotification - object:nil]; - - [reach startNotifier]; - -## Tell the world - -Head over to [Projects using Reachability](https://github.com/tonymillion/Reachability/wiki/Projects-using-Reachability) and add your project for "Maximum Wins!". diff --git a/SnowplowDemo/Pods/Reachability/Reachability.h b/SnowplowDemo/Pods/Reachability/Reachability.h deleted file mode 100644 index c43215236..000000000 --- a/SnowplowDemo/Pods/Reachability/Reachability.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - Copyright (c) 2011, Tony Million. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - */ - -#import -#import - - -/** - * Create NS_ENUM macro if it does not exist on the targeted version of iOS or OS X. - * - * @see http://nshipster.com/ns_enum-ns_options/ - **/ -#ifndef NS_ENUM -#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type -#endif - -extern NSString *const kReachabilityChangedNotification; - -typedef NS_ENUM(NSInteger, NetworkStatus) { - // Apple NetworkStatus Compatible Names. - NotReachable = 0, - ReachableViaWiFi = 2, - ReachableViaWWAN = 1 -}; - -@class Reachability; - -typedef void (^NetworkReachable)(Reachability * reachability); -typedef void (^NetworkUnreachable)(Reachability * reachability); - - -@interface Reachability : NSObject - -@property (nonatomic, copy) NetworkReachable reachableBlock; -@property (nonatomic, copy) NetworkUnreachable unreachableBlock; - -@property (nonatomic, assign) BOOL reachableOnWWAN; - - -+(Reachability*)reachabilityWithHostname:(NSString*)hostname; -// This is identical to the function above, but is here to maintain -//compatibility with Apples original code. (see .m) -+(Reachability*)reachabilityWithHostName:(NSString*)hostname; -+(Reachability*)reachabilityForInternetConnection; -+(Reachability*)reachabilityWithAddress:(void *)hostAddress; -+(Reachability*)reachabilityForLocalWiFi; - --(Reachability *)initWithReachabilityRef:(SCNetworkReachabilityRef)ref; - --(BOOL)startNotifier; --(void)stopNotifier; - --(BOOL)isReachable; --(BOOL)isReachableViaWWAN; --(BOOL)isReachableViaWiFi; - -// WWAN may be available, but not active until a connection has been established. -// WiFi may require a connection for VPN on Demand. --(BOOL)isConnectionRequired; // Identical DDG variant. --(BOOL)connectionRequired; // Apple's routine. -// Dynamic, on demand connection? --(BOOL)isConnectionOnDemand; -// Is user intervention required? --(BOOL)isInterventionRequired; - --(NetworkStatus)currentReachabilityStatus; --(SCNetworkReachabilityFlags)reachabilityFlags; --(NSString*)currentReachabilityString; --(NSString*)currentReachabilityFlags; - -@end diff --git a/SnowplowDemo/Pods/Reachability/Reachability.m b/SnowplowDemo/Pods/Reachability/Reachability.m deleted file mode 100644 index f2952d934..000000000 --- a/SnowplowDemo/Pods/Reachability/Reachability.m +++ /dev/null @@ -1,469 +0,0 @@ -/* - Copyright (c) 2011, Tony Million. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - */ - -#import "Reachability.h" - -#import -#import -#import -#import -#import -#import - - -NSString *const kReachabilityChangedNotification = @"kReachabilityChangedNotification"; - - -@interface Reachability () - -@property (nonatomic, assign) SCNetworkReachabilityRef reachabilityRef; -@property (nonatomic, strong) dispatch_queue_t reachabilitySerialQueue; -@property (nonatomic, strong) id reachabilityObject; - --(void)reachabilityChanged:(SCNetworkReachabilityFlags)flags; --(BOOL)isReachableWithFlags:(SCNetworkReachabilityFlags)flags; - -@end - - -static NSString *reachabilityFlags(SCNetworkReachabilityFlags flags) -{ - return [NSString stringWithFormat:@"%c%c %c%c%c%c%c%c%c", -#if TARGET_OS_IPHONE - (flags & kSCNetworkReachabilityFlagsIsWWAN) ? 'W' : '-', -#else - 'X', -#endif - (flags & kSCNetworkReachabilityFlagsReachable) ? 'R' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionRequired) ? 'c' : '-', - (flags & kSCNetworkReachabilityFlagsTransientConnection) ? 't' : '-', - (flags & kSCNetworkReachabilityFlagsInterventionRequired) ? 'i' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) ? 'C' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionOnDemand) ? 'D' : '-', - (flags & kSCNetworkReachabilityFlagsIsLocalAddress) ? 'l' : '-', - (flags & kSCNetworkReachabilityFlagsIsDirect) ? 'd' : '-']; -} - -// Start listening for reachability notifications on the current run loop -static void TMReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info) -{ -#pragma unused (target) - - Reachability *reachability = ((__bridge Reachability*)info); - - // We probably don't need an autoreleasepool here, as GCD docs state each queue has its own autorelease pool, - // but what the heck eh? - @autoreleasepool - { - [reachability reachabilityChanged:flags]; - } -} - - -@implementation Reachability - -#pragma mark - Class Constructor Methods - -+(Reachability*)reachabilityWithHostName:(NSString*)hostname -{ - return [Reachability reachabilityWithHostname:hostname]; -} - -+(Reachability*)reachabilityWithHostname:(NSString*)hostname -{ - SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithName(NULL, [hostname UTF8String]); - if (ref) - { - id reachability = [[self alloc] initWithReachabilityRef:ref]; - - return reachability; - } - - return nil; -} - -+(Reachability *)reachabilityWithAddress:(void *)hostAddress -{ - SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*)hostAddress); - if (ref) - { - id reachability = [[self alloc] initWithReachabilityRef:ref]; - - return reachability; - } - - return nil; -} - -+(Reachability *)reachabilityForInternetConnection -{ - struct sockaddr_in zeroAddress; - bzero(&zeroAddress, sizeof(zeroAddress)); - zeroAddress.sin_len = sizeof(zeroAddress); - zeroAddress.sin_family = AF_INET; - - return [self reachabilityWithAddress:&zeroAddress]; -} - -+(Reachability*)reachabilityForLocalWiFi -{ - struct sockaddr_in localWifiAddress; - bzero(&localWifiAddress, sizeof(localWifiAddress)); - localWifiAddress.sin_len = sizeof(localWifiAddress); - localWifiAddress.sin_family = AF_INET; - // IN_LINKLOCALNETNUM is defined in as 169.254.0.0 - localWifiAddress.sin_addr.s_addr = htonl(IN_LINKLOCALNETNUM); - - return [self reachabilityWithAddress:&localWifiAddress]; -} - - -// Initialization methods - --(Reachability *)initWithReachabilityRef:(SCNetworkReachabilityRef)ref -{ - self = [super init]; - if (self != nil) - { - self.reachableOnWWAN = YES; - self.reachabilityRef = ref; - - // We need to create a serial queue. - // We allocate this once for the lifetime of the notifier. - - self.reachabilitySerialQueue = dispatch_queue_create("com.tonymillion.reachability", NULL); - } - - return self; -} - --(void)dealloc -{ - [self stopNotifier]; - - if(self.reachabilityRef) - { - CFRelease(self.reachabilityRef); - self.reachabilityRef = nil; - } - - self.reachableBlock = nil; - self.unreachableBlock = nil; - self.reachabilitySerialQueue = nil; -} - -#pragma mark - Notifier Methods - -// Notifier -// NOTE: This uses GCD to trigger the blocks - they *WILL NOT* be called on THE MAIN THREAD -// - In other words DO NOT DO ANY UI UPDATES IN THE BLOCKS. -// INSTEAD USE dispatch_async(dispatch_get_main_queue(), ^{UISTUFF}) (or dispatch_sync if you want) - --(BOOL)startNotifier -{ - // allow start notifier to be called multiple times - if(self.reachabilityObject && (self.reachabilityObject == self)) - { - return YES; - } - - - SCNetworkReachabilityContext context = { 0, NULL, NULL, NULL, NULL }; - context.info = (__bridge void *)self; - - if(SCNetworkReachabilitySetCallback(self.reachabilityRef, TMReachabilityCallback, &context)) - { - // Set it as our reachability queue, which will retain the queue - if(SCNetworkReachabilitySetDispatchQueue(self.reachabilityRef, self.reachabilitySerialQueue)) - { - // this should do a retain on ourself, so as long as we're in notifier mode we shouldn't disappear out from under ourselves - // woah - self.reachabilityObject = self; - return YES; - } - else - { -#ifdef DEBUG - NSLog(@"SCNetworkReachabilitySetDispatchQueue() failed: %s", SCErrorString(SCError())); -#endif - - // UH OH - FAILURE - stop any callbacks! - SCNetworkReachabilitySetCallback(self.reachabilityRef, NULL, NULL); - } - } - else - { -#ifdef DEBUG - NSLog(@"SCNetworkReachabilitySetCallback() failed: %s", SCErrorString(SCError())); -#endif - } - - // if we get here we fail at the internet - self.reachabilityObject = nil; - return NO; -} - --(void)stopNotifier -{ - // First stop, any callbacks! - SCNetworkReachabilitySetCallback(self.reachabilityRef, NULL, NULL); - - // Unregister target from the GCD serial dispatch queue. - SCNetworkReachabilitySetDispatchQueue(self.reachabilityRef, NULL); - - self.reachabilityObject = nil; -} - -#pragma mark - reachability tests - -// This is for the case where you flick the airplane mode; -// you end up getting something like this: -//Reachability: WR ct----- -//Reachability: -- ------- -//Reachability: WR ct----- -//Reachability: -- ------- -// We treat this as 4 UNREACHABLE triggers - really apple should do better than this - -#define testcase (kSCNetworkReachabilityFlagsConnectionRequired | kSCNetworkReachabilityFlagsTransientConnection) - --(BOOL)isReachableWithFlags:(SCNetworkReachabilityFlags)flags -{ - BOOL connectionUP = YES; - - if(!(flags & kSCNetworkReachabilityFlagsReachable)) - connectionUP = NO; - - if( (flags & testcase) == testcase ) - connectionUP = NO; - -#if TARGET_OS_IPHONE - if(flags & kSCNetworkReachabilityFlagsIsWWAN) - { - // We're on 3G. - if(!self.reachableOnWWAN) - { - // We don't want to connect when on 3G. - connectionUP = NO; - } - } -#endif - - return connectionUP; -} - --(BOOL)isReachable -{ - SCNetworkReachabilityFlags flags; - - if(!SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) - return NO; - - return [self isReachableWithFlags:flags]; -} - --(BOOL)isReachableViaWWAN -{ -#if TARGET_OS_IPHONE - - SCNetworkReachabilityFlags flags = 0; - - if(SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) - { - // Check we're REACHABLE - if(flags & kSCNetworkReachabilityFlagsReachable) - { - // Now, check we're on WWAN - if(flags & kSCNetworkReachabilityFlagsIsWWAN) - { - return YES; - } - } - } -#endif - - return NO; -} - --(BOOL)isReachableViaWiFi -{ - SCNetworkReachabilityFlags flags = 0; - - if(SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) - { - // Check we're reachable - if((flags & kSCNetworkReachabilityFlagsReachable)) - { -#if TARGET_OS_IPHONE - // Check we're NOT on WWAN - if((flags & kSCNetworkReachabilityFlagsIsWWAN)) - { - return NO; - } -#endif - return YES; - } - } - - return NO; -} - - -// WWAN may be available, but not active until a connection has been established. -// WiFi may require a connection for VPN on Demand. --(BOOL)isConnectionRequired -{ - return [self connectionRequired]; -} - --(BOOL)connectionRequired -{ - SCNetworkReachabilityFlags flags; - - if(SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) - { - return (flags & kSCNetworkReachabilityFlagsConnectionRequired); - } - - return NO; -} - -// Dynamic, on demand connection? --(BOOL)isConnectionOnDemand -{ - SCNetworkReachabilityFlags flags; - - if (SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) - { - return ((flags & kSCNetworkReachabilityFlagsConnectionRequired) && - (flags & (kSCNetworkReachabilityFlagsConnectionOnTraffic | kSCNetworkReachabilityFlagsConnectionOnDemand))); - } - - return NO; -} - -// Is user intervention required? --(BOOL)isInterventionRequired -{ - SCNetworkReachabilityFlags flags; - - if (SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) - { - return ((flags & kSCNetworkReachabilityFlagsConnectionRequired) && - (flags & kSCNetworkReachabilityFlagsInterventionRequired)); - } - - return NO; -} - - -#pragma mark - reachability status stuff - --(NetworkStatus)currentReachabilityStatus -{ - if([self isReachable]) - { - if([self isReachableViaWiFi]) - return ReachableViaWiFi; - -#if TARGET_OS_IPHONE - return ReachableViaWWAN; -#endif - } - - return NotReachable; -} - --(SCNetworkReachabilityFlags)reachabilityFlags -{ - SCNetworkReachabilityFlags flags = 0; - - if(SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) - { - return flags; - } - - return 0; -} - --(NSString*)currentReachabilityString -{ - NetworkStatus temp = [self currentReachabilityStatus]; - - if(temp == ReachableViaWWAN) - { - // Updated for the fact that we have CDMA phones now! - return NSLocalizedString(@"Cellular", @""); - } - if (temp == ReachableViaWiFi) - { - return NSLocalizedString(@"WiFi", @""); - } - - return NSLocalizedString(@"No Connection", @""); -} - --(NSString*)currentReachabilityFlags -{ - return reachabilityFlags([self reachabilityFlags]); -} - -#pragma mark - Callback function calls this method - --(void)reachabilityChanged:(SCNetworkReachabilityFlags)flags -{ - if([self isReachableWithFlags:flags]) - { - if(self.reachableBlock) - { - self.reachableBlock(self); - } - } - else - { - if(self.unreachableBlock) - { - self.unreachableBlock(self); - } - } - - // this makes sure the change notification happens on the MAIN THREAD - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:kReachabilityChangedNotification - object:self]; - }); -} - -#pragma mark - Debug Description - -- (NSString *) description -{ - NSString *description = [NSString stringWithFormat:@"<%@: %#x (%@)>", - NSStringFromClass([self class]), (unsigned int) self, [self currentReachabilityFlags]]; - return description; -} - -@end diff --git a/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-prefix.pch b/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-prefix.pch deleted file mode 100644 index aa992a4ad..000000000 --- a/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB-prefix.pch +++ /dev/null @@ -1,4 +0,0 @@ -#ifdef __OBJC__ -#import -#endif - diff --git a/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB.xcconfig b/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB.xcconfig deleted file mode 100644 index 1c1ea9ec3..000000000 --- a/SnowplowDemo/Pods/Target Support Files/FMDB/FMDB.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FMDB" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/Reachability" "${PODS_ROOT}/Headers/Public/SnowplowTracker" -OTHER_LDFLAGS = -l"sqlite3" -PODS_ROOT = ${SRCROOT} -SKIP_INSTALL = YES \ No newline at end of file diff --git a/SnowplowDemo/Pods/Target Support Files/Pods/Pods-dummy.m b/SnowplowDemo/Pods/Target Support Files/Pods/Pods-dummy.m deleted file mode 100644 index ade64bd1a..000000000 --- a/SnowplowDemo/Pods/Target Support Files/Pods/Pods-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods : NSObject -@end -@implementation PodsDummy_Pods -@end diff --git a/SnowplowDemo/Pods/Target Support Files/Pods/Pods-frameworks.sh b/SnowplowDemo/Pods/Target Support Files/Pods/Pods-frameworks.sh deleted file mode 100755 index 6f7634435..000000000 --- a/SnowplowDemo/Pods/Target Support Files/Pods/Pods-frameworks.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/sh -set -e - -echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" -mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - -SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" - -install_framework() -{ - if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then - local source="${BUILT_PRODUCTS_DIR}/$1" - elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then - local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" - elif [ -r "$1" ]; then - local source="$1" - fi - - local destination="${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - - if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink "${source}")" - fi - - # use filter instead of exclude so missing patterns dont' throw errors - echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" - - local basename - basename="$(basename -s .framework "$1")" - binary="${destination}/${basename}.framework/${basename}" - if ! [ -r "$binary" ]; then - binary="${destination}/${basename}" - fi - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then - strip_invalid_archs "$binary" - fi - - # Resign the code if required by the build settings to avoid unstable apps - code_sign_if_enabled "${destination}/$(basename "$1")" - - # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. - if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then - local swift_runtime_libs - swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) - for lib in $swift_runtime_libs; do - echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" - rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" - code_sign_if_enabled "${destination}/${lib}" - done - fi -} - -# Signs a framework with the provided identity -code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identitiy - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements \"$1\"" - /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements "$1" - fi -} - -# Strip invalid architectures -strip_invalid_archs() { - binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" - stripped="" - for arch in $archs; do - if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then - # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" || exit 1 - stripped="$stripped $arch" - fi - done - if [[ "$stripped" ]]; then - echo "Stripped $binary of architectures:$stripped" - fi -} - diff --git a/SnowplowDemo/Pods/Target Support Files/Pods/Pods-resources.sh b/SnowplowDemo/Pods/Target Support Files/Pods/Pods-resources.sh deleted file mode 100755 index 16774fb46..000000000 --- a/SnowplowDemo/Pods/Target Support Files/Pods/Pods-resources.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/sh -set -e - -mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - -RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt -> "$RESOURCES_TO_COPY" - -XCASSET_FILES=() - -realpath() { - DIRECTORY="$(cd "${1%/*}" && pwd)" - FILENAME="${1##*/}" - echo "$DIRECTORY/$FILENAME" -} - -install_resource() -{ - case $1 in - *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" - ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" - ;; - *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" - ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" - ;; - *.framework) - echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - ;; - *.xcdatamodel) - echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" - xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" - ;; - *.xcdatamodeld) - echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" - xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" - ;; - *.xcmappingmodel) - echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" - xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" - ;; - *.xcassets) - ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") - XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") - ;; - /*) - echo "$1" - echo "$1" >> "$RESOURCES_TO_COPY" - ;; - *) - echo "${PODS_ROOT}/$1" - echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" - ;; - esac -} - -mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then - mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi -rm -f "$RESOURCES_TO_COPY" - -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] -then - case "${TARGETED_DEVICE_FAMILY}" in - 1,2) - TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" - ;; - 1) - TARGET_DEVICE_ARGS="--target-device iphone" - ;; - 2) - TARGET_DEVICE_ARGS="--target-device ipad" - ;; - *) - TARGET_DEVICE_ARGS="--target-device mac" - ;; - esac - - # Find all other xcassets (this unfortunately includes those of path pods and other targets). - OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) - while read line; do - if [[ $line != "`realpath $PODS_ROOT`*" ]]; then - XCASSET_FILES+=("$line") - fi - done <<<"$OTHER_XCASSETS" - - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi diff --git a/SnowplowDemo/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/SnowplowDemo/Pods/Target Support Files/Pods/Pods.debug.xcconfig deleted file mode 100644 index f8dad002a..000000000 --- a/SnowplowDemo/Pods/Target Support Files/Pods/Pods.debug.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/Reachability" "${PODS_ROOT}/Headers/Public/SnowplowTracker" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/FMDB" -isystem "${PODS_ROOT}/Headers/Public/Reachability" -isystem "${PODS_ROOT}/Headers/Public/SnowplowTracker" -OTHER_LDFLAGS = $(inherited) -ObjC -l"FMDB" -l"Reachability" -l"SnowplowTracker" -l"sqlite3" -framework "CoreTelephony" -framework "Foundation" -framework "SystemConfiguration" -framework "UIKit" -PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/SnowplowDemo/Pods/Target Support Files/Pods/Pods.release.xcconfig b/SnowplowDemo/Pods/Target Support Files/Pods/Pods.release.xcconfig deleted file mode 100644 index f8dad002a..000000000 --- a/SnowplowDemo/Pods/Target Support Files/Pods/Pods.release.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/Reachability" "${PODS_ROOT}/Headers/Public/SnowplowTracker" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/FMDB" -isystem "${PODS_ROOT}/Headers/Public/Reachability" -isystem "${PODS_ROOT}/Headers/Public/SnowplowTracker" -OTHER_LDFLAGS = $(inherited) -ObjC -l"FMDB" -l"Reachability" -l"SnowplowTracker" -l"sqlite3" -framework "CoreTelephony" -framework "Foundation" -framework "SystemConfiguration" -framework "UIKit" -PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/SnowplowDemo/Pods/Target Support Files/Reachability/Reachability-dummy.m b/SnowplowDemo/Pods/Target Support Files/Reachability/Reachability-dummy.m deleted file mode 100644 index 119024a8e..000000000 --- a/SnowplowDemo/Pods/Target Support Files/Reachability/Reachability-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Reachability : NSObject -@end -@implementation PodsDummy_Reachability -@end diff --git a/SnowplowDemo/Pods/Target Support Files/Reachability/Reachability-prefix.pch b/SnowplowDemo/Pods/Target Support Files/Reachability/Reachability-prefix.pch deleted file mode 100644 index aa992a4ad..000000000 --- a/SnowplowDemo/Pods/Target Support Files/Reachability/Reachability-prefix.pch +++ /dev/null @@ -1,4 +0,0 @@ -#ifdef __OBJC__ -#import -#endif - diff --git a/SnowplowDemo/Pods/Target Support Files/Reachability/Reachability.xcconfig b/SnowplowDemo/Pods/Target Support Files/Reachability/Reachability.xcconfig deleted file mode 100644 index dbfd6fd78..000000000 --- a/SnowplowDemo/Pods/Target Support Files/Reachability/Reachability.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Reachability" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/Reachability" "${PODS_ROOT}/Headers/Public/SnowplowTracker" -OTHER_LDFLAGS = -framework "SystemConfiguration" -PODS_ROOT = ${SRCROOT} -SKIP_INSTALL = YES \ No newline at end of file diff --git a/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-prefix.pch b/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-prefix.pch deleted file mode 100644 index aa992a4ad..000000000 --- a/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-prefix.pch +++ /dev/null @@ -1,4 +0,0 @@ -#ifdef __OBJC__ -#import -#endif - diff --git a/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker.xcconfig b/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker.xcconfig deleted file mode 100644 index 4795ed674..000000000 --- a/SnowplowDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SnowplowTracker" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/Reachability" "${PODS_ROOT}/Headers/Public/SnowplowTracker" -OTHER_LDFLAGS = -framework "CoreTelephony" -framework "Foundation" -framework "UIKit" -PODS_ROOT = ${SRCROOT} -SKIP_INSTALL = YES \ No newline at end of file From 3cee736aa9ac841993d0a6bcb59cd2b78bf82928 Mon Sep 17 00:00:00 2001 From: AlexBenny Date: Fri, 8 Nov 2019 14:28:53 +0100 Subject: [PATCH 10/13] Update swift demo app for 1.1.4 (close #460) PR #462: * Update swift demo app to changes up to 1.1.4 - Update method calls (few methods were changed) - Update carthage script in "build phases" and imported frameworks - Update script to generate Cartfile * Move SwiftDemo project to Examples folder * Update project settings and code with Xcode suggestions * Move source code outside SwiftCarthageDemo project * Add SwiftCocoapodsDemo project It shares the same swift source code with SwiftCarthageDemo project * Update .gitignore * Update Cartfile pointing to github master * Update travis script * Fix bad events on swift demo app --- .travis.yml | 24 +- .../AdditionalViewController.swift | 0 .../CommonSwiftCode}/AppDelegate.swift | 8 +- .../AppIcon.appiconset/Contents.json | 60 +- .../AppIcon.appiconset/logo-white-120-1.png | Bin 0 -> 10913 bytes .../AppIcon.appiconset/logo-white-120.png | Bin 0 -> 10913 bytes .../AppIcon.appiconset/logo-white-152.png | Bin 0 -> 13018 bytes .../AppIcon.appiconset/logo-white-180.png | Bin 0 -> 17271 bytes .../AppIcon.appiconset/logo-white-29.png | Bin 0 -> 1529 bytes .../AppIcon.appiconset/logo-white-40.png | Bin 0 -> 2238 bytes .../AppIcon.appiconset/logo-white-58-1.png | Bin 0 -> 3923 bytes .../AppIcon.appiconset/logo-white-58.png | Bin 0 -> 3923 bytes .../AppIcon.appiconset/logo-white-76.png | Bin 0 -> 5177 bytes .../AppIcon.appiconset/logo-white-80-1.png | Bin 0 -> 5641 bytes .../AppIcon.appiconset/logo-white-80.png | Bin 0 -> 5641 bytes .../AppIcon.appiconset/logo-white-87.png | Bin 0 -> 6519 bytes .../Snowplow Logo.imageset/Contents.json | 23 + .../Snowplow Logo.imageset/logo-1024.png | Bin 0 -> 111996 bytes .../Snowplow Logo.imageset/logo-180.png | Bin 0 -> 14370 bytes .../logo-transparent-full-square.png | Bin 0 -> 203848 bytes .../Base.lproj/LaunchScreen.storyboard | 0 .../Base.lproj/Main.storyboard | 71 +- .../CommonSwiftCode}/DemoUtils.swift | 127 +- .../CommonSwiftCode}/DemoViewController.swift | 0 .../MetricsViewController.swift | 0 .../CommonSwiftCode}/PageViewController.swift | 4 +- .../SnowplowSwiftDemo.entitlements | 0 .../.xccurrentversion | 0 .../SnowplowSwiftDemo.xcdatamodel/contents | 0 Examples/SnowplowSwiftCarthageDemo/.gitignore | 33 + Examples/SnowplowSwiftCarthageDemo/Cartfile | 1 + .../project.pbxproj | 138 +- .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../SnowplowSwiftDemo/Info.plist | 0 .../SnowplowSwiftDemo.entitlements | 8 + .../.xccurrentversion | 5 + .../SnowplowSwiftDemo.xcdatamodel/contents | 12 + .../SnowplowSwiftDemoTests/Info.plist | 0 .../SnowplowSwiftDemoTests.swift | 0 .../SnowplowSwiftDemoUITests/Info.plist | 0 .../SnowplowSwiftDemoUITests.swift | 0 .../generateCartfile.sh | 6 + .../inputFile.xcfilelist | 3 + .../outputFile.xcfilelist | 3 + .../SnowplowSwiftCocoapodsDemo/.gitignore | 31 + Examples/SnowplowSwiftCocoapodsDemo/Podfile | 8 + .../SnowplowSwiftCocoapodsDemo/Podfile.lock | 29 + .../Pods/FMDB/LICENSE.txt | 28 + .../Pods/FMDB/README.markdown | 397 +++++ .../Pods/FMDB/src/fmdb/FMDB.h | 10 + .../Pods/FMDB/src/fmdb/FMDatabase.h | 1162 +++++++++++++ .../Pods/FMDB/src/fmdb/FMDatabase.m | 1479 +++++++++++++++++ .../Pods/FMDB/src/fmdb/FMDatabaseAdditions.h | 278 ++++ .../Pods/FMDB/src/fmdb/FMDatabaseAdditions.m | 246 +++ .../Pods/FMDB/src/fmdb/FMDatabasePool.h | 200 +++ .../Pods/FMDB/src/fmdb/FMDatabasePool.m | 283 ++++ .../Pods/FMDB/src/fmdb/FMDatabaseQueue.h | 182 ++ .../Pods/FMDB/src/fmdb/FMDatabaseQueue.m | 245 +++ .../Pods/FMDB/src/fmdb/FMResultSet.h | 468 ++++++ .../Pods/FMDB/src/fmdb/FMResultSet.m | 422 +++++ .../SnowplowTracker.podspec.json | 72 + .../Pods/Manifest.lock | 29 + .../Pods/Pods.xcodeproj/project.pbxproj | 1224 ++++++++++++++ .../Pods/ReachabilitySwift/LICENSE | 19 + .../Pods/ReachabilitySwift/README.md | 202 +++ .../Sources/Reachability.swift | 316 ++++ .../Target Support Files/FMDB/FMDB-Info.plist | 26 + .../Target Support Files/FMDB/FMDB-dummy.m | 5 + .../Target Support Files/FMDB/FMDB-prefix.pch | 12 + .../Target Support Files/FMDB/FMDB-umbrella.h | 22 + .../Target Support Files/FMDB/FMDB.modulemap | 6 + .../Target Support Files/FMDB/FMDB.xcconfig | 10 + .../Pods-SnowplowSwiftDemo-Info.plist | 26 + ...nowplowSwiftDemo-acknowledgements.markdown | 261 +++ ...s-SnowplowSwiftDemo-acknowledgements.plist | 305 ++++ .../Pods-SnowplowSwiftDemo-dummy.m | 5 + ...mo-frameworks-Debug-input-files.xcfilelist | 4 + ...o-frameworks-Debug-output-files.xcfilelist | 3 + ...-frameworks-Release-input-files.xcfilelist | 4 + ...frameworks-Release-output-files.xcfilelist | 3 + .../Pods-SnowplowSwiftDemo-frameworks.sh | 175 ++ .../Pods-SnowplowSwiftDemo-umbrella.h | 16 + .../Pods-SnowplowSwiftDemo.debug.xcconfig | 12 + .../Pods-SnowplowSwiftDemo.modulemap | 6 + .../Pods-SnowplowSwiftDemo.release.xcconfig | 12 + .../ReachabilitySwift-Info.plist | 26 + .../ReachabilitySwift-dummy.m | 5 + .../ReachabilitySwift-prefix.pch | 12 + .../ReachabilitySwift-umbrella.h | 16 + .../ReachabilitySwift.modulemap | 6 + .../ReachabilitySwift.xcconfig | 11 + .../SnowplowTracker-Info.plist | 26 + .../SnowplowTracker/SnowplowTracker-dummy.m | 5 + .../SnowplowTracker-prefix.pch | 12 + .../SnowplowTracker-umbrella.h | 27 + .../SnowplowTracker/SnowplowTracker.modulemap | 6 + .../SnowplowTracker/SnowplowTracker.xcconfig | 12 + .../project.pbxproj | 738 ++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../SnowplowSwiftDemo/Info.plist | 50 + .../SnowplowSwiftDemoTests/Info.plist | 22 + .../SnowplowSwiftDemoTests.swift | 36 + .../SnowplowSwiftDemoUITests/Info.plist | 22 + .../SnowplowSwiftDemoUITests.swift | 36 + SnowplowSwiftDemo/Cartfile | 1 - SnowplowSwiftDemo/Cartfile.resolved | 3 - SnowplowSwiftDemo/Podfile | 23 - SnowplowSwiftDemo/Podfile.lock | 33 - SnowplowSwiftDemo/generateCartfile.sh | 4 - 113 files changed, 9582 insertions(+), 334 deletions(-) rename {SnowplowSwiftDemo/SnowplowSwiftDemo => Examples/CommonSwiftCode}/AdditionalViewController.swift (100%) rename {SnowplowSwiftDemo/SnowplowSwiftDemo => Examples/CommonSwiftCode}/AppDelegate.swift (98%) rename {SnowplowSwiftDemo/SnowplowSwiftDemo => Examples/CommonSwiftCode}/Assets.xcassets/AppIcon.appiconset/Contents.json (67%) create mode 100644 Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-120-1.png create mode 100644 Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-120.png create mode 100644 Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-152.png create mode 100644 Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-180.png create mode 100644 Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-29.png create mode 100644 Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-40.png create mode 100644 Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-58-1.png create mode 100644 Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-58.png create mode 100644 Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-76.png create mode 100644 Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-80-1.png create mode 100644 Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-80.png create mode 100644 Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-87.png create mode 100644 Examples/CommonSwiftCode/Assets.xcassets/Snowplow Logo.imageset/Contents.json create mode 100644 Examples/CommonSwiftCode/Assets.xcassets/Snowplow Logo.imageset/logo-1024.png create mode 100644 Examples/CommonSwiftCode/Assets.xcassets/Snowplow Logo.imageset/logo-180.png create mode 100644 Examples/CommonSwiftCode/Assets.xcassets/Snowplow Logo.imageset/logo-transparent-full-square.png rename {SnowplowSwiftDemo/SnowplowSwiftDemo => Examples/CommonSwiftCode}/Base.lproj/LaunchScreen.storyboard (100%) rename {SnowplowSwiftDemo/SnowplowSwiftDemo => Examples/CommonSwiftCode}/Base.lproj/Main.storyboard (94%) rename {SnowplowSwiftDemo/SnowplowSwiftDemo => Examples/CommonSwiftCode}/DemoUtils.swift (56%) rename {SnowplowSwiftDemo/SnowplowSwiftDemo => Examples/CommonSwiftCode}/DemoViewController.swift (100%) rename {SnowplowSwiftDemo/SnowplowSwiftDemo => Examples/CommonSwiftCode}/MetricsViewController.swift (100%) rename {SnowplowSwiftDemo/SnowplowSwiftDemo => Examples/CommonSwiftCode}/PageViewController.swift (96%) rename {SnowplowSwiftDemo/SnowplowSwiftDemo => Examples/CommonSwiftCode}/SnowplowSwiftDemo.entitlements (100%) rename {SnowplowSwiftDemo/SnowplowSwiftDemo => Examples/CommonSwiftCode}/SnowplowSwiftDemo.xcdatamodeld/.xccurrentversion (100%) rename {SnowplowSwiftDemo/SnowplowSwiftDemo => Examples/CommonSwiftCode}/SnowplowSwiftDemo.xcdatamodeld/SnowplowSwiftDemo.xcdatamodel/contents (100%) create mode 100644 Examples/SnowplowSwiftCarthageDemo/.gitignore create mode 100644 Examples/SnowplowSwiftCarthageDemo/Cartfile rename {SnowplowSwiftDemo => Examples/SnowplowSwiftCarthageDemo}/SnowplowSwiftDemo.xcodeproj/project.pbxproj (78%) rename {SnowplowSwiftDemo => Examples/SnowplowSwiftCarthageDemo}/SnowplowSwiftDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename {SnowplowSwiftDemo => Examples/SnowplowSwiftCarthageDemo}/SnowplowSwiftDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {SnowplowSwiftDemo => Examples/SnowplowSwiftCarthageDemo}/SnowplowSwiftDemo/Info.plist (100%) create mode 100644 Examples/SnowplowSwiftCarthageDemo/SnowplowSwiftDemo/SnowplowSwiftDemo.entitlements create mode 100644 Examples/SnowplowSwiftCarthageDemo/SnowplowSwiftDemo/SnowplowSwiftDemo.xcdatamodeld/.xccurrentversion create mode 100644 Examples/SnowplowSwiftCarthageDemo/SnowplowSwiftDemo/SnowplowSwiftDemo.xcdatamodeld/SnowplowSwiftDemo.xcdatamodel/contents rename {SnowplowSwiftDemo => Examples/SnowplowSwiftCarthageDemo}/SnowplowSwiftDemoTests/Info.plist (100%) rename {SnowplowSwiftDemo => Examples/SnowplowSwiftCarthageDemo}/SnowplowSwiftDemoTests/SnowplowSwiftDemoTests.swift (100%) rename {SnowplowSwiftDemo => Examples/SnowplowSwiftCarthageDemo}/SnowplowSwiftDemoUITests/Info.plist (100%) rename {SnowplowSwiftDemo => Examples/SnowplowSwiftCarthageDemo}/SnowplowSwiftDemoUITests/SnowplowSwiftDemoUITests.swift (100%) create mode 100755 Examples/SnowplowSwiftCarthageDemo/generateCartfile.sh create mode 100644 Examples/SnowplowSwiftCarthageDemo/inputFile.xcfilelist create mode 100644 Examples/SnowplowSwiftCarthageDemo/outputFile.xcfilelist create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/.gitignore create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Podfile create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Podfile.lock create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/FMDB/LICENSE.txt create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/FMDB/README.markdown create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/FMDB/src/fmdb/FMDB.h create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/FMDB/src/fmdb/FMDatabase.h create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/FMDB/src/fmdb/FMDatabase.m create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/FMDB/src/fmdb/FMDatabaseAdditions.h create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/FMDB/src/fmdb/FMDatabaseAdditions.m create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/FMDB/src/fmdb/FMDatabasePool.h create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/FMDB/src/fmdb/FMDatabasePool.m create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/FMDB/src/fmdb/FMDatabaseQueue.h create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/FMDB/src/fmdb/FMDatabaseQueue.m create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/FMDB/src/fmdb/FMResultSet.h create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/FMDB/src/fmdb/FMResultSet.m create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Local Podspecs/SnowplowTracker.podspec.json create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Manifest.lock create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Pods.xcodeproj/project.pbxproj create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/ReachabilitySwift/LICENSE create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/ReachabilitySwift/README.md create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/ReachabilitySwift/Sources/Reachability.swift create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/FMDB/FMDB-Info.plist create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/FMDB/FMDB-dummy.m create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/FMDB/FMDB-prefix.pch create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/FMDB/FMDB-umbrella.h create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/FMDB/FMDB.modulemap create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/FMDB/FMDB.xcconfig create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/Pods-SnowplowSwiftDemo/Pods-SnowplowSwiftDemo-Info.plist create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/Pods-SnowplowSwiftDemo/Pods-SnowplowSwiftDemo-acknowledgements.markdown create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/Pods-SnowplowSwiftDemo/Pods-SnowplowSwiftDemo-acknowledgements.plist create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/Pods-SnowplowSwiftDemo/Pods-SnowplowSwiftDemo-dummy.m create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/Pods-SnowplowSwiftDemo/Pods-SnowplowSwiftDemo-frameworks-Debug-input-files.xcfilelist create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/Pods-SnowplowSwiftDemo/Pods-SnowplowSwiftDemo-frameworks-Debug-output-files.xcfilelist create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/Pods-SnowplowSwiftDemo/Pods-SnowplowSwiftDemo-frameworks-Release-input-files.xcfilelist create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/Pods-SnowplowSwiftDemo/Pods-SnowplowSwiftDemo-frameworks-Release-output-files.xcfilelist create mode 100755 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/Pods-SnowplowSwiftDemo/Pods-SnowplowSwiftDemo-frameworks.sh create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/Pods-SnowplowSwiftDemo/Pods-SnowplowSwiftDemo-umbrella.h create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/Pods-SnowplowSwiftDemo/Pods-SnowplowSwiftDemo.debug.xcconfig create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/Pods-SnowplowSwiftDemo/Pods-SnowplowSwiftDemo.modulemap create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/Pods-SnowplowSwiftDemo/Pods-SnowplowSwiftDemo.release.xcconfig create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-dummy.m create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-umbrella.h create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.xcconfig create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-Info.plist create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-dummy.m create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-prefix.pch create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker-umbrella.h create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker.modulemap create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/Pods/Target Support Files/SnowplowTracker/SnowplowTracker.xcconfig create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/SnowplowSwiftDemo.xcodeproj/project.pbxproj create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/SnowplowSwiftDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename {SnowplowSwiftDemo/SnowplowSwiftDemo.xcworkspace => Examples/SnowplowSwiftCocoapodsDemo/SnowplowSwiftDemo.xcodeproj/project.xcworkspace}/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {SnowplowSwiftDemo => Examples/SnowplowSwiftCocoapodsDemo}/SnowplowSwiftDemo.xcworkspace/contents.xcworkspacedata (100%) create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/SnowplowSwiftDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/SnowplowSwiftDemo/Info.plist create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/SnowplowSwiftDemoTests/Info.plist create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/SnowplowSwiftDemoTests/SnowplowSwiftDemoTests.swift create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/SnowplowSwiftDemoUITests/Info.plist create mode 100644 Examples/SnowplowSwiftCocoapodsDemo/SnowplowSwiftDemoUITests/SnowplowSwiftDemoUITests.swift delete mode 100644 SnowplowSwiftDemo/Cartfile delete mode 100644 SnowplowSwiftDemo/Cartfile.resolved delete mode 100644 SnowplowSwiftDemo/Podfile delete mode 100644 SnowplowSwiftDemo/Podfile.lock delete mode 100755 SnowplowSwiftDemo/generateCartfile.sh diff --git a/.travis.yml b/.travis.yml index ba3b2ad92..38e3708b8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,8 +7,11 @@ env: - BUILD_DEST="platform=iOS Simulator,OS=13.2,name=iPhone 8" - BUILD_PROJECT_LIB="-project Snowplow.xcodeproj" - BUILD_SCHEME_LIB="-scheme Snowplow-iOS" - - BUILD_WORKSPACE_DEMO="-workspace SnowplowDemo.xcworkspace" - - BUILD_SCHEME_DEMO="-scheme SnowplowDemo" + - BUILD_WORKSPACE_OBJC_DEMO="-workspace SnowplowDemo.xcworkspace" + - BUILD_SCHEME_OBJC_DEMO="-scheme SnowplowDemo" + - BUILD_WORKSPACE_SWIFT_DEMO="-workspace SnowplowSwiftDemo.xcworkspace" + - BUILD_PROJECT_SWIFT_DEMO="-project SnowplowSwiftDemo.xcodeproj" + - BUILD_SCHEME_SWIFT_DEMO="-scheme SnowplowSwiftDemo" rvm: - 2.3.7 @@ -32,4 +35,19 @@ jobs: - cd Examples/SnowplowDemo - pod update script: - - set -o pipefail && xcodebuild -sdk iphonesimulator -destination "${BUILD_DEST}" ${BUILD_WORKSPACE_DEMO} ${BUILD_SCHEME_DEMO} clean build | xcpretty + - set -o pipefail && xcodebuild -sdk iphonesimulator -destination "${BUILD_DEST}" ${BUILD_WORKSPACE_OBJC_DEMO} ${BUILD_SCHEME_OBJC_DEMO} clean build | xcpretty + + - name: "Test Snowplow Swift demo app [iOS] using Cocoapods" + install: + - cd Examples/SnowplowSwiftCocoapodsDemo + - pod update + script: + - set -o pipefail && xcodebuild -sdk iphonesimulator -destination "${BUILD_DEST}" ${BUILD_WORKSPACE_SWIFT_DEMO} ${BUILD_SCHEME_SWIFT_DEMO} clean build | xcpretty + + - name: "Test Snowplow Swift demo app [iOS] using Carthage" + install: + - cd Examples/SnowplowSwiftCarthageDemo + - ./generateCartfile.sh + - carthage update --platform ios + script: + - set -o pipefail && xcodebuild -sdk iphonesimulator -destination "${BUILD_DEST}" ${BUILD_PROJECT_SWIFT_DEMO} ${BUILD_SCHEME_SWIFT_DEMO} clean build | xcpretty diff --git a/SnowplowSwiftDemo/SnowplowSwiftDemo/AdditionalViewController.swift b/Examples/CommonSwiftCode/AdditionalViewController.swift similarity index 100% rename from SnowplowSwiftDemo/SnowplowSwiftDemo/AdditionalViewController.swift rename to Examples/CommonSwiftCode/AdditionalViewController.swift diff --git a/SnowplowSwiftDemo/SnowplowSwiftDemo/AppDelegate.swift b/Examples/CommonSwiftCode/AppDelegate.swift similarity index 98% rename from SnowplowSwiftDemo/SnowplowSwiftDemo/AppDelegate.swift rename to Examples/CommonSwiftCode/AppDelegate.swift index f6a080c65..a286f05f3 100644 --- a/SnowplowSwiftDemo/SnowplowSwiftDemo/AppDelegate.swift +++ b/Examples/CommonSwiftCode/AppDelegate.swift @@ -55,7 +55,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD formatter.timeStyle = .medium formatter.locale = Locale(identifier: "en_US") let dateString = formatter.string(from: response.notification.date) - + let event = SPPushNotification.build({(builder : SPPushNotificationBuilder?) -> Void in builder!.setAction(actionIdentifier) builder!.setTrigger(SPUtilities.getTriggerType(request.trigger)) @@ -64,7 +64,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD builder!.setThreadIdentifier(requestContent.threadIdentifier) builder!.setNotification(content) }) - + //print(String(data: try! JSONSerialization.data(withJSONObject: event!.getPayload().getAsDictionary(), options: .prettyPrinted), encoding: .utf8 )!) rootViewController.tracker?.trackPushNotificationEvent(event) } @@ -74,11 +74,11 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD } } - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]){ (granted, error) in } application.registerForRemoteNotifications() UNUserNotificationCenter.current().delegate = self - + return true } diff --git a/SnowplowSwiftDemo/SnowplowSwiftDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 67% rename from SnowplowSwiftDemo/SnowplowSwiftDemo/Assets.xcassets/AppIcon.appiconset/Contents.json rename to Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/Contents.json index d8db8d65f..fa7c2d358 100644 --- a/SnowplowSwiftDemo/SnowplowSwiftDemo/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,94 +1,76 @@ { "images" : [ { + "size" : "29x29", "idiom" : "iphone", - "size" : "20x20", + "filename" : "logo-white-58-1.png", "scale" : "2x" }, { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, - { - "idiom" : "iphone", "size" : "29x29", - "scale" : "2x" - }, - { "idiom" : "iphone", - "size" : "29x29", + "filename" : "logo-white-87.png", "scale" : "3x" }, { - "idiom" : "iphone", "size" : "40x40", + "idiom" : "iphone", + "filename" : "logo-white-80.png", "scale" : "2x" }, { - "idiom" : "iphone", "size" : "40x40", + "idiom" : "iphone", + "filename" : "logo-white-120-1.png", "scale" : "3x" }, { - "idiom" : "iphone", "size" : "60x60", + "idiom" : "iphone", + "filename" : "logo-white-120.png", "scale" : "2x" }, { - "idiom" : "iphone", "size" : "60x60", + "idiom" : "iphone", + "filename" : "logo-white-180.png", "scale" : "3x" }, { + "size" : "29x29", "idiom" : "ipad", - "size" : "20x20", + "filename" : "logo-white-29.png", "scale" : "1x" }, { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "ipad", "size" : "29x29", - "scale" : "1x" - }, - { "idiom" : "ipad", - "size" : "29x29", + "filename" : "logo-white-58.png", "scale" : "2x" }, { - "idiom" : "ipad", "size" : "40x40", + "idiom" : "ipad", + "filename" : "logo-white-40.png", "scale" : "1x" }, { - "idiom" : "ipad", "size" : "40x40", + "idiom" : "ipad", + "filename" : "logo-white-80-1.png", "scale" : "2x" }, { - "idiom" : "ipad", "size" : "76x76", + "idiom" : "ipad", + "filename" : "logo-white-76.png", "scale" : "1x" }, { - "idiom" : "ipad", "size" : "76x76", - "scale" : "2x" - }, - { "idiom" : "ipad", - "size" : "83.5x83.5", + "filename" : "logo-white-152.png", "scale" : "2x" - }, - { - "idiom" : "ios-marketing", - "size" : "1024x1024", - "scale" : "1x" } ], "info" : { diff --git a/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-120-1.png b/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-120-1.png new file mode 100644 index 0000000000000000000000000000000000000000..acf93db35a08af2fbc859722952a6e48b265cb49 GIT binary patch literal 10913 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 B50C%= literal 0 HcmV?d00001 diff --git a/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-120.png b/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-120.png new file mode 100644 index 0000000000000000000000000000000000000000..acf93db35a08af2fbc859722952a6e48b265cb49 GIT binary patch literal 10913 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 B50C%= literal 0 HcmV?d00001 diff --git a/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-152.png b/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-152.png new file mode 100644 index 0000000000000000000000000000000000000000..174b7f2a7ebadd7927de5c41626dcf4ec91919a9 GIT binary patch literal 13018 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 literal 0 HcmV?d00001 diff --git a/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-40.png b/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-40.png new file mode 100644 index 0000000000000000000000000000000000000000..30d6313f5cf46e30171f0a570f3943c387c7044d GIT binary patch literal 2238 zcmV;v2toIWP)mIDk^4Rpx^@^fNdEp<<(kRDW&(`w)gfv&OK*8=0o91 z6%9t2_@VpTImy}kch>&z|5|I4)>`8`JQ%*?V-j!@a1!vF0`5O>L`tc?dw^0(bawSP z&pi8ze*3+)bT~31q*7W+sfCdLH}5pg^)i*R^#^+oI2X?>;f$Dm^68CUzt1bnE}8Ds z&8=YdwH2B%LMmlL3Wln4d`sSbW{-$2LRJFz!(GP9{rQsuT?kQuoBaz6&l-jekiVNz8oh`hS{OR z#|5CBfs+wOYt5!jEy!8aRF6<7V00>sx#L@p!^fO3_87#gt0hDn6Ff1^FRW zUt8fmeE*#$G$`XbdSBZ?=fk}p^V{xx*t@*BNxtyx?->9BkOKg*ctRcT8`P;Iwrg;v zEz3k{Nf9qB$m3rdP)enxl#(-M0;JRF4DHzRl+oGMZI6wm* z92gAC`3+SxG&GEtTDGahiyGMW)(`Evx(Z!hHq-0zn7n@BS{2Cgdqbgs_IWL}YUN_O zd)*B(9#2p*Wuvxc_E$wlExzgwB7*0k`|nCeA|rfZQysis4?8cL*|Bqv_~kvf@aClp z#87y|`gCAO?fIxvZ1~H+kWSkGfK0~GiDZgS3=FZO-TlU&HazEPUVWE092v#3CG+Y1 zJ^$5x{exd>MLwTL+qQ#bGDQvZD)siAd&KS!I^6S$V00u#v3P<^)5Pz7a|hqscF&IDrZH3&|-h~y-O)}%S+~ctT07L|j$AZUW;b?cCvEhm1AR?Hi0n;#aef=Ewrt7c5 z)vK4X(+7?1eDkmJdG>C z>AXs6Y^cHyRxRN_@(Ht1_u1m_H#TL3`4eFMC=ZvZW?wL(Y^tmFaUu@aN=G9fuOD)^AQi`qn z@ik(`jA_If2N5t79=_m(L5|<2t1BgJ#ru@EADfr)^+-y)FNKM~6bWSwW1AC6N~jSd5Vb03ju6 zYs#|`HBEzxi}JG*&nchf3MsR2b1G)qN~!F#-|rQl2TZ3kP)dJ6gV?flH#5!>XV>9R z*!63cv%-Qrb>`2<5=mq-jw&jgLI6M@_^nl^yecKcI8;&L6svm9#je&GN@*-v zbSeBkpE?u$<;$8BW0bWUuh*ku@i8bpQRhr6jaWRv=`3+7rSQNbPnf&k?|?cDs5NL` zdzZYZv{(ZGF#=}{#<=N1YmG%sb>z6?vW$-<<&D=~i8BqC;|e~nz9PHG^paw-EGr9m z-I`_J>`VWu%Os-t9NYqr9xdr(lsgwfe42KT)nhkYxl1gbX#_;C0 z-KZ#^d0HC;4Ul1Q4FF0iG%c75A;yU!(NSD~&2p}_*5f`pLYFnxs53yOWl(8Jq0m|b zTI2Sc*AR%*-~ajA#6uFy&EYp*cO`%7@du18FF$U4u=5|7Q$9;*t>Fqm2Re`XEz?k( zGi-Ww2dl2UB%5c4!cly0VZD@6LMjE<6@2lc1~r~KBgmf;WF;kqAR_d9(yy0Z(Fh?W zIA`eY>8JJg-G;QCfshgz$7T22y;eQ{(pJ-PTz$@ZP$`A>{fAV;yh`|dUN>!L;5dTP zc7_Qlkw~Wb$mp1KT>*e_G=&+YDM$q>cy7-INd${nRME= z>8tJswbp9z)Ub{YkI?97LMKyc;+)CoaGZHOCMznKA{!g37z%&i=dOg}SI9ZknJL4b}45-sR%X#H>n!LcA1e^q%1iY~0f2Z;$r7e=)l>h($ M07*qoM6N<$g2oa+AOHXW literal 0 HcmV?d00001 diff --git a/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-58-1.png b/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-58-1.png new file mode 100644 index 0000000000000000000000000000000000000000..795c8fd0b4c6d055cda7d95e0a2af178113b452f GIT binary patch literal 3923 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 literal 0 HcmV?d00001 diff --git a/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-58.png b/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-58.png new file mode 100644 index 0000000000000000000000000000000000000000..795c8fd0b4c6d055cda7d95e0a2af178113b452f GIT binary patch literal 3923 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 literal 0 HcmV?d00001 diff --git a/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-76.png b/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-76.png new file mode 100644 index 0000000000000000000000000000000000000000..1c4a36027670cd2bada0e203b21d3c9b762d0522 GIT binary patch literal 5177 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 literal 0 HcmV?d00001 diff --git a/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-80-1.png b/Examples/CommonSwiftCode/Assets.xcassets/AppIcon.appiconset/logo-white-80-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d7d632865fc976af2d6af936390fe7aa53313705 GIT binary patch literal 5641 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 z

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 Vy?eYhTjYoYP?pz_tCq0{{U5PNT}l7| literal 0 HcmV?d00001 diff --git a/Examples/CommonSwiftCode/Assets.xcassets/Snowplow Logo.imageset/Contents.json b/Examples/CommonSwiftCode/Assets.xcassets/Snowplow Logo.imageset/Contents.json new file mode 100644 index 000000000..fbff5749e --- /dev/null +++ b/Examples/CommonSwiftCode/Assets.xcassets/Snowplow Logo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "logo-180.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "logo-1024.png" + }, + { + "idiom" : "universal", + "scale" : "3x", + "filename" : "logo-transparent-full-square.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Examples/CommonSwiftCode/Assets.xcassets/Snowplow Logo.imageset/logo-1024.png b/Examples/CommonSwiftCode/Assets.xcassets/Snowplow Logo.imageset/logo-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..fd12f3f56ff4a3daded8f171a7c316f3ff8924c7 GIT binary patch literal 111996 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 literal 0 HcmV?d00001 diff --git a/Examples/CommonSwiftCode/Assets.xcassets/Snowplow Logo.imageset/logo-180.png b/Examples/CommonSwiftCode/Assets.xcassets/Snowplow Logo.imageset/logo-180.png new file mode 100644 index 0000000000000000000000000000000000000000..e335e78af03071bafd1072223cac0e57e329d156 GIT binary patch literal 14370 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 A6951J literal 0 HcmV?d00001 diff --git a/Examples/CommonSwiftCode/Assets.xcassets/Snowplow Logo.imageset/logo-transparent-full-square.png b/Examples/CommonSwiftCode/Assets.xcassets/Snowplow Logo.imageset/logo-transparent-full-square.png new file mode 100644 index 0000000000000000000000000000000000000000..7158d83ef7228e1261c7fd4a4b29f2e5b03abdac GIT binary patch literal 203848 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ℑBadUz@iz=lrE54fAsZ<=8Z&&JJ?cg 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�NT;7Mt)ja>}O3JYYvE~Zk4<13c>)V zGucx0Crk8&0Oy>{OjL?B#{_JX+_X>f5MV4p@WhfGi*QdT`-}NIX0vJ=*&e^zrdT%` z_~fs+)y8&wG~4bg*y-6(s;Zde{2ymZn3%>ej2Di^Dt;vmYMfYvhMIHhq*L2eRsH|p z2Eujuk{B{&695;&^;AAfs!MJQHa&$p#tzwO*o{$L|YsHOD-vqjEQg* zFD^5jx0-WtgQWPXJFH^@sOJo#C=9bs<(FtERN--sZ0*S)*eLV>94J19O*Hq^N@(+( z9)-BrKu=(=w~P{)rm$;qlIySE)qIhBA1r0%H(^oQ;XU zJnu(bBKZ*d?Ff^YG*XT_v6`hkDEpp`Xy;m<*0&y*1C3`6h=Ck(-t3#9W-lg58gOAS zDDW;87R$R`F)3Hv*RY}s+;pL1Oo{ls&OJ?UD7?$V=qO#nUNeIa@AK-(qo+UtK09N~ zubguL4;OFov{}X=*JDep?QTjDwkrHs+w=6fHhW`N==}qlAhzHN*^!Akl_sQvZ2i8J zQlSOF9>d;VOaZ0XhE1&H79tBjvBcG-rKDP9oHd^xF>m5E^BbBB6&gTb>K=UBV_ zt2=FvVfX^>0VQ`j1?Pg6$%q4RNBfY6#?FLHH$MAcXXox_WCZ@ZS?dU_9j=V=j9p8g zS4L-rGFSsdxoMGauU7;=b#qRXrFM7=c@(RxnWAcIo2jNo0uSCdez3nUnxC^%x?;Pk zaa#aC_=P2u;=AN8HTTWA{z0U7zFU+GKuf18k2_V5|5Yr`!2)yt)T z<>sqli9HxeU8uXNzi`!n#WNuy?VzQZZ1X6s)NWl{jU*#%W+QQj`AyV`JMg)ViV8w` zUgZwq<-C?22ZOORyt6|+mOp=pRO}f5Jlh^%L z^$I=n7otv4<-B=jo4;uh^)_E24(A|-dwpX+uqslQRx+SNnOBsBg3Bk~tp033P zc;(pn?$s3{DM|4dFL*Zojt75~$__-_Hx2Tw>y*sy4XtV`F3g<-7;lF}XQ?GYb8#VEmIkvKmmChxbB_>=@XVdPid$Ofp0tK|lvlyibjLXx_M z%!_sq=~1Q2%sf?60s!Fu=ff0`tL^z=$JwqbGfkw4#jtzJqn&|3qAO0-n@9h<&k@_%npWVbp#;(EHz6a`G zHAVd9ye8d0h{K!CwslXJdlEOE5A$0jEW9oa)8|D>?fQW}Kd?-tq{_ zBD3t2I8kG4sSs>tlkdMF|7;b2+gu?20?Pl=OwT8#LCy3@V=La%2x zvgZBpvWfNH2j_!G%TEp`e9eDO+mz2e`}+Gu2>5nu1wrwl-Tkn5lZHK{S;M+{FpK+M zE{!ym+pz?Rr`k5U;{FD?g^8{Gv=QsM7DdAz5n%uZ2JQFC7&x+c?K;xWyQXsqfz%z- zh^b#hrBppkcUD$$=AFr$=)vUh$h`~OQFbu_8@s)wvk!bn(4_u$iA+ezng454{zwYW zMp|BvkF*xU>{nGSt>;J-$L}BDTbZq5CeN9{bx`$s2gFzZ4Va-wSi|GANZSsvL`~52VoKC(ptqmA3ms!kPpXXn+uaF5}D*VR`Pb@4U^wlw>b^2+X z#N>u$8WZn}CE=(3k!Jg&$HM&!m9|A{${Lej$p=#<$cw(;M_JqBPZA<)9=9(yHV*h8 zBmdmlP~BJ<^cM5T)GbORscubxZ=W2oeR`JCpo^zlxAm*E@9eM`k=7C1`^Ltb4T1x& znV%Z6hgUu7Klf5YdjX(UK=WUj>mz^neJdxUz)fzo5$_}G8;ZIrU5HIFu}CF)FLJwO zLHXG`XkyE-yH~K?;`~4;AQo`E-0ZfVPY|p$s3M>yEghGgTd3i`Sy(@B_OCl?VnDn8 zh`061#JmU*b%e&Q1{hA###C%jeA&0tL|y|H^!_(6kFQ8#1P=ALFdXj{uWGsJE%f#E z17dU6ByuRO6OIdV?yS_h{JOXm9L=4yGA^PHvU}ov!*lgfU?H4{=Th0Wo|e+3jHIs(dsIHA zMlz+7UZYJ$oY8r$CGbymUTElA{@L*xqx_@O52lg2=VI!?Vn!6r`Z`B{^^R8bK<&8L z)O26xB!P+_tTg)y^bf_paU~B!17zjuQa85|MMFtjt|0^Qgu~(b>TnwcR!-i|6~8d3 zWiW-@KN?4n@?GuTN2WVWv(~x||7QBdpN^12_pONP4ad$K_j*|T`PG$rnbAREvC02t zr&;GLp`rYo)ni2r_$_4MG<7N1=-jc_tTDg@u9v7P{JkLw5s`+2TX~;5+Y>@7BN?Jk zRc@7orH@kwU8A$!JJKnshiLG`NFV{Ohe!O7o~k07C-j!6a){IiMNJJStSL!1GB8uQ zsxs5CC@@mFDrtb<;Wku{7B}Tjo6Gj(oMKzJ#d#O13eus;N)Ir->6arTZ`kWX%F(Br zI`sTf&dnyLV${s-J=q>`R((5GY_wus4(kh{}YMrjxvF~{v zV*g&g&HbyE3gq_{$=B0tdqCIW|1v&*NG|{LIVvWuJ;n3P=2lYa2|ne|ldFnq5+13f z4Za6~*?%CQx5MI@|g)M~RnM{~oD5 zL(PbOWt)Z7+T6DSZ(;e=$cNW3GVO)<L6G(p?Y4mT+%kL2|n@%anC;g?InFrqNAS7M@qQ7p>^X`}e1e0rx&?n$VwNdR?$FvG%D zrlw!EFw4cAyUk_?RY)`xuLwAw93-zhgn&o4hBayVLp zjqkrc1E!jT2>=a;C;-qnTj*sJ)74HQ_74mMEy5Y(rKI2+h437$w5Wys@eZx!TSDNb zj3F>FrDR1BJa&7yV4rU!OU1>*Tg1jQeKIP=7sv17otUW-6Yu>~KC9#VP}3QH49n8| zZ?>HEg)22Wu<{z>Coakur5IOw#=Yiw|AU)~ujFQT{7Mg)@$q9#>T#2`qrRdSnMtND znEEnvgWvOU7)xYlEwb|Gaa!~8vx|AH{Z&Gd8b7r1B&5ET&4AMr@u3}5EN;B%7_Ut>SrU%HSD5EK<7 zQHdO88D!)?`=V4G8viBh)uZT~1ExAqK74-<+Y~=K{zi*elU$p1?D-`2O)_kCKs-vX-`^m zi7F_hnKa8rF7mSK62}hi35LZ%Y zPya%>8o{pJt>0T%9M(lJY4>rmF{=@%OL=P^WUbu+bRiKx$Ol&FFmb#tI?6SsP)ePz}my zGvlK!85><^(kVx6IlvwB$v(u>N|kMiQZi2~!ulO9H4Rbo97lQI;LggX^iMHO&90if z^;oP!2;pfXJa96J)>eI9zAE5zdtB<&J8GM*+lc!{N8`~JAgk@8ck9$>QO_{B<7`3l z06!>gVE73qB98halY_ZhlelVXc=Dn3db&t>b_PwuzNs=r4!A)tzem=7S!lOA^Bt{t zC%8*|bAY8h2n(;v7=>3qtekw1zGdbC9QDu3Af_6ktYMV=7PN6g>L|F^SPnfsBk(RM z`6#NbQi|JOk5530Ipdw&yZot1`eRIFBx(;U*w^)yiJ>yhnVb0Qfe|SZ%*0y-EpOGp z(9u=rCw=>Afjcra`KPsp?^s8Xk&!w`)oeOL$wy8u30JE-Es~`lTNuX_MgyEMW|xK& zd9^;&nHC_Lt{M;lFlPbsaA!9gTJGx<5E2;HX*HC}`TVsU(LY?%tqwRYG?Rb2RiLoB z>6ugC`jCAAEnDfd+FruVV1PCLQ+i>9&Sh8?-32*Bi~CKa@VB63+%rncn5tu^iHrQQ z6T~Z4rk=2>HopFGHcXHgh#?EPhteCeRYP6?gxZ0k_jG^l(mm?vr=+BPi<|i^12P($ zJKv{?Z~pV-`e1TyDq(u%J#x#7>~ys3Lo4dhM(?P8Uh=3Fh*dXLK{nx~fb{}3{f+l6K1|bB zsSh$&;28KWAYtWYgzpRllx9J_0I&q#ku96O_V#ic4~*0X_u89(Zw8u>#>thL%Nyxd znrIIfglvHkjNOOU)CLG6tV=<2N4_IokNXMlbO+r1pzmUuZa^HPNXpmD(LEu_mjkt30g{c-D60^}wvd~j=h9Yt13%HloL^j(E7S ze-OSlV~B-yhWF63&z14wY`!pfncROv(gG*Q`#$bz(QK;JY{yl-<&z~MXKQG=y&H4& zhvxGOhWGEVUF%9u*J~rUP8;L3+MOZ(HNO}^>Gtz>PHv{LV|VG_`~`MUYKQ;Va*%0= z?fRg&C{3$?NdcF`yo+z@pd}feYSU8Ec9YIc;)i;3@UebxR_EcUJOiT;B_(cSVa2$k zI&FJVosRzBd!(ccE<`lj*5s}8dl=_SQlN`0i%w4TqY; z!Pyg7Hdbr>t<6mik$c=i1&Z*NO@Oa^cr1~%J&X*~&yuz94G~lJu zcj>w0dLozTI9l>(OHFQ-clh%SD%kEo20Fk>dKsoAL6pr>P}T!2BR`|r3Bui-=lXR~ z7;^Sd7^+e2aopPN&t?8pSNQ7L^((knVu_rOAM`1sj2=~!xp(MR5`9R!&_L#qSnmH9 z(!NuiF*K&AG9-Ga>)vVznoo^1s&zc4%O^yI&z6D8isxPl^FwVohwTPsK%@b6X{DeT z`^*NAEf!~s>`XSwc2bD}dR@*&k)S5sYY?kDLkhEnW?hDmxKo^?@vqgr(G?_1e)3-6 z5^pYOzm$;%N0_xEXdR9Y(@&#cofQ-#(X4DVuanYS(CpfFth7DMt^W^cJMi;eBnzQG8vYx25~VMZo3IX;VM@f{ z^%xk?^AGdq!o=WFfxgjoXdD9X87Eu5J0i{x4N^YX4B@-lt_`h{Z@0;z<2=^pYcg*L zHDN*RXd0kVPF?mg;2z-#6qgg803Fo~5SafYM(9Z0CfKN`h_WgyR7c0hZslhT#l*%2 zR^nN%;kg*@Ouc6hr?*QqCkkhl$fBSK9=|6P>l&=>fC}6<0(W zRgc0sWzLmS-_+0nl@|bp0f9IQqW);a7`glmBCts~k9F=Z&*-BHT7Z3w`PshT=6aL9 z4J-m~BMmu-A2wWUa6Lx)AvO8}FaCz#><@qmeH(5iJ!Y&7_78x!4>zM^=5{cD>9e1? zt{#P-s zSkD&{xOy8oW+YdE@A}_d0J7ZeYhh45(&}AbS~C)G*BKGRS9UNkPW;%aXKXGE+%fp_ z4hI#H*65~gD}S~m!TvX#UXG1LYU<*I1#x#SeZ?UqObvn)^P5UpxjVm|ul$>v`kWwB zB+B98R>Mi$#)wJuhP`y=b*5nW|LS(UQiyxTYUjp@ z)zOvv{mtL?iBH}E2^eZpQg%_$YE#I*{VY(;9n8gO2+2sGv4H}6FlZqohU}3Y>pM9W zw|7|p)y6Km55w>N^EBZ96Njgoh;cI$6!_Gj%?RRwd0Ee#D3&n?<-WairG{bZYOv=^Du+52KBB_bj^SvK;B4ZATN#`(gqUVF!LJ z?Q#7ht^%RPzsZ*S>3EE~QvM#XDP=7j|DS&z9UdI=``E8aZqU!6SlN@}16#Ju9409i0? zSYkv!YGH5cAksI?A7 ztJsVdzgD+i8-TVv>X~y@a;0wNAS1{YVmvu3x@_Zb>aQ~I1gwmWg$2}L02V>{zfbmk z$ENXe2eW*~=NXHT1LCe;QB@{X6T93pW}h5RgBTt%EeLFJ3YTYs>h;%v_fT92+_S6u z8;_Q{y`@GyR(UJLSq9n{$-m0=NJopy`3+`2!7CU!e8<}y$pjS$v`4E1pF%6~kc85>bp-boA6~YTCU!3g9 z9|o2W(z|lzP#CGmLBn78=sDN9`vvH*>)z{z>Y=aW)H#-2Nr$LpP9Vt9$Iw_LIGqXY!54onN zf*`HehSvGX6GmC_NQT<4_`{wg%-2ffFJd@KHM_Cu-WRT#=|zCo^#!~xFoxQ29FAyG z6J0O>pah@9A|l3^xmza^;_(gHZMk%Q^DT!5jH6%kD#pH#VKcHjNka6G^XCg85b7#O zkc872vco~=0u?LCG=Xaw#51R^%%djbX=;`ofTgc0l9M(;Zv;?7AiUn=pj`X52d%FT z*on>*Km=pMWjgA~!sKStYH@=!RW!U#=LU?k|F)`d{NY8u)>9_=5-UVp(`&U6^qJvV z&~9mvLYlC53q2dLTl5U;%Tlf6-GlB4xat|fq+cz6C^#3mp7Ij(sPXpjvY@jBMQ|xyJIje z%*+lLI{>2v#^;YTT&9Y9nS%@9dF+6HX>=VXL1H(Yx0GDJ8Bc380;w7vq22QV9gOD@ zS?!HMD4s|E@}LWpe%dx0*PqQE{_xP+!5IRL$6qc&Mo*Qj!w80J>FmKIdZZhl%&aarL>8 z&~V~+kEm15@r)IkcDLLnL z3g}#0ke}AJpq+u)Rv}D#3%Hgj7_D`69(Ix%_lE7>#B0$;WzBgy9E=?XVf7Hy7l|-v zYXNjp#Ym*=yI}!}YxY(_J2>Ttp}N`e-`*o+YGKTW^lNO}cot^>dOpL)r zNH5!6(B}GHs8`5J%5m9AT*!@ z&;}~8_qkj2N=~gZQ{(bIG(qxzmlRJ@U)B(h0S`W$@-VJPvae>Pk==<64HicHH!zz7 zU^Z>DmIMauIWX|APfq}qAh6>87*M|+K;HRsMLxoJIxy$mE2x5cMzhWMEnb>W&_4f$ zsApfJ9g{V3U$5*R?tq&RBOtW#@9s)TN!6L)yrY&$c|ICg`mQddc-g~8$UcA3HPZTz z8Ctx8Q?D_U_#_4Y89SGTiSOq4%rd9cpz^bOOl-UST5V`q9hIS63>p+e11s7arA0*i z1`d+2oQ`{;dkiy|ARHpDD=l=p2$CBlbPmpKRRn8NwR3!{zFJ9|A)seU%DqXL~c22JxFCiQU>c z!5?VA7UiP*uvE3N`3U`qAYdCy#nC%77IRcsy^BJDhZa}yZ;x_v4&Rl(Gw>^``$4xJ zPbiIac^P`JeL_0LOCzWbM(bySbm&|R8>R~fVPNbF0>U6BugBvfI-f-?W9-M@f0?Qf zLVd=|L7(hgZL+85adPza=rUNT_%a0hC9hi_G}wE>XeHR?mQUPnEYx|G+>gjZAc;!e za&?bIIyz4#fM*7vN)VK@)^|RPytuGC&6~EP1H#exC1dc23kX4*Jx7!z0CtEvj+Y9q zM+=e1;&OI&zAoBgwnA8t0bNk4a*Gm^o>-@MIfH_;f#DiPp~#u%3x<{ZhjC>~?znre ze{%={wj-UI#<NokDa6TJ?c*o&r!FnJ@4d~F^yO}i{wH; zD-gvIl*dniH)^!hK;YixIyk-zJ#a%d+cFv`#0e-k^BAB9@R=NZ>nnfu!y{j|)me=#_=iOZ}SlU9rLdje1RH}Nm9*S0c9lobcF{~;f zGB!+vDp>cWbml8h^;m*zy9bkAca%vl;mY;PqBd+=Gx0UF9PTuWErzgcll|ZZ6qlp; zh#1-_xr*;(^i#h?F8qC=Xb21`Vk(Lt=>JA8xuR^iod|p+_F)JynJflWHgeEWCrd(} zkzyHBc=0NL;a@WUxl=a@jze14!-^)-+&}TVnHkkA{DO?YxGk-gHW3fOP!{D8;nKHb zOLNwZo_v`Y_s0y2>#G|QpAg|Dn9r5~`H7^aq*1}%s%hcovskQ&G&(RYtcdtxMfjbf z!0P%6^0a;A-&XzU9_4&Pcbz0>#wFKaTj4n;JILl`;!Mxt*@48K>Ne>KxEbAM!}Iiz zk1Uho zQ&4)EqOC&fTU&)?VFf+Ycorb*>t!)|xCK-%-89BYI03oDA0Lr#OhiZD!ts)4Rophh zmOp^mu!CI^Fce5Gw8^c1^Cc9}d*gzhO-)U?p)8Jd<+*RD$*bw0)l{ahm=S+($d}C2Ho9V(nxnncXyX`$Dz6V=;!;p>#lXr z^8Dc+diMM7Ju}Zd^UQ1#Xp&)ZbA~?STer@JU@nx@%Zayi4CN@KkH5y)kQmjY&~n_{ALtDW7TLV?UDAL*q&fE|;PVSXHr zZg!`KStvRB{0d%wKd1kKv%;t&gvl9R9~tp{4DSaV4UK1>gudrrC%=;w?(caIO<%uFP< zYb)r@i*W~a#}Reu@>!?-_BR)VNb%R?6#B17A46nM7AmHFWt8nAOn{U#h=s8HLViLE zekQg6Fa&p)u~&LO5_6$UrZ+juu%?du3jbnH^O5 z$%B}9tGC8_kcKQ$&PEB17r6)jCBos0B8Blta>ampJwTZAt`9vNaXDG+06>u<^f>2e z2NW|W{vyIXrla{6_3IVf^55U~w-drhCWz=87hSSBIu2UPBG2XMU$uc%KDj$wyo7xE z6Q#)@w+Giq7LbraUgh|QRBgZ1^;smNqDBq?4Oizpz*+Rhbh!S_rp!tJP2?T>=$?AZ zYbb=559%hU=n0C?yAyaX2?Wa^#B{Kop{C9YdpJ5im3Ct_+%eMiI)N5`u6Jx)Y7Gkp zA$s!rS=)*gssT-OLb#`Tv=H$^IMXlT%d6+QJg=%cF- zpCtwAJ>tg)loIK=d7Wufpo(Ds3r(^P&nk~o)KD&HsuVE>1~P{_s23HDj-I~N;B)@| zsDHvre!ehWztw%MY2hwdyV&+E)=k zY4Jj{YWC0zBuW+gH65)$!$J#l!iWIhVul>3RSRfJ9iT=mBkQ)R|Kz9U>K~*XA!~3? zZG8`FEA8Ts9{NVr9|pj?dyMEUua(;9-STw4FdL_)E&n?D{UqpZrl-b+d&}BrG{Ts_7e=JMo*qt9Vyszq z*^n)^cyAYk71Ls%jA+ z8zsn9XHxsp5_Rv71{`@j7c1V^FDCmrkuakaZnnH`4oUWSeL2Q4l^Z4r@pm4$1ST!RO zkx{T<1sO-~UAAQ@)|&``e9Ii-){@TQTsKR`#p%J5EUec4vb!yFnc{xcj4KV4() zdxzO4A5>WRpP2kiI<<+N$4~FzVgdcqXe5?>n0~RR6%=$l&ZU5^j_e~b8ptM(^m$-F0WUti9diPP;t;o=TAAw z%N}Ue!P+mVZ{|U!f^NLB-DGOYu))IjzLF2D+7Iy#2)xkF$$LmZj|_k%c2Bv=C4wsD zXrJ!B`5d?XCLwW0dq)BC7Tamwa0<*`FDO|GAQiHSi9*Be_~uR{@WaszO=QV9-dlv* zVDSC$PYZW-qXjxRbLdF5Rqg4y>5DgafZ7t*x3qVE} zq6qbaB#f{~c{a@{{rT>v{(9oktO2O-A~i4$tHY|g@=h9KKoeJvoA;PsoPPvSNF+=r zrpm{L4(+!7Yg$2{|0@wnbOFS~0gE4AYOyep+^5rHlxl`xP&QDNQuIU(U1k1F7O(4v z!_5)$7yCiTUpF>2wepg@b-gQ%j4c_knRELv(DD{s2F>DofzQrHyYndmiS%(8VS#dg zoyTh0R2huZ`}o?c!gA{3Ls;{W0Id3`y-!A4-VztPkBM+0%z*2}Xg}KB4mxF0(Ej^>S0cD{gTGSCoM)04BT=@1y$c4492|foi z6rl%hN)S1I6V;aeyZFeDtaacP2Sj`3qlv^&381mbE%{by`i*{9dGI)M$ECQ$QsxLi z0UkMch%DeIg-GAN=~DmtN5Wh(NakK1kdNmhQU*Y}+Rqc^eVK4;?MYE~%Fb>8(9+d_T zxtMd*{g;joyIfw^q;e2#aaCKUro{S3VZ_W;o8AxuG$SylZIJzYQCUp2=~*Zg`kd^E zBnIgIwKWX!G%*vMxe}~Lzc&*waL`tUof*J+`3b?Y*d@xm!slJ>qPtJzZrkpBOV|9v ze$rXM`0H9sQ0!IMu&Noo^cebFYj%xF%{5=M-);f;Ga4xb|FU0B#U%ExIkp4aa zqK1=RVHNQ{!i&8d{I~bmYsQQk(>J-6MrMIoYN72>_~NAAyOae$;B23~Av!bQz&{*4 z0`%ZI)dm{0B6BA}9Rdbm@xvyd+vZ;+ZN{{3@7v5xh2a@k={KO#Raxslk`(3D6VbGN zUhyII2m2)<9)gLrtn*+c1FDyMuJ^qijq+ZN1}9pW(GAPngjzsLMr25eC?GChJ2)`$ zHZI?kot3wZ6G%k)BEZoB4SQa63@X21o<@#N?zZHtkQ80}Ff;v;yk>Q=>H9f3B$UKb z>;2mW1qY|`hcZgkHhV_~ccw#=&-TfnKM3IAXE3t*VxcR~@qmx#*UZ#IeB;_EB07w$ zb~-rW1)W2V@)=A%tqStM-CA_lY0GOS0uW z(!UC8Quo51u!UM#H*%Ed z196Y0wgMa2otCBHX15{|z~SHnfPpH2C^$79udkDpY@(eL`$an++miJ&lm|Q$pDE9# z`Wr8G9>-%=9_DuqHM#5F2{?=OjEE#c%4%<>Jlew$Z%|`UDp{g;GY*nXMzpBkvP=a{ zv7!^0k6BMX!UUZ$y{U~Ylz(uUf&+G=9mXF<#RR&kfrhFE>O{n72fiC3A^+LIK|fs)aGqt+Ak=-c`4LDyq{+ToHTVXCX&lHI=9M zSJ9ZjMJfj1vyfj{uVLzpS;S;L@` z^io``hr!&)NP+k_&3j-%?V#C}$mTIs)1JHb#-tN;Lm&?`(5U~DgVpqafuVEzVb5I_MkAjTi! zd3|&&P7fZf8?dwC8EyLgsrxv4(GJNGgRoYnPN|c)kL_**`LnYwg$Vs*SjfUo;Q1hr zhVk%b$U$u!B+H?f2%6d;PqwkER4i|n3{N&ucvSHY#@q{Zw^@3Mf*e5r1THb- zEAi;ElUT8AeR@UlJ{m0%WRNcSE(IM|% z*hb&f4js_4?sGcs$t+}x|Ab9b)ViO~DU8+&kNSOj-Sb?W>CP!hnD{v;MG{@h`Q_J{u8HtXEc7&O=eG8@{MS74hgAiQZ+Ltc{B&svgZ z)&nFpIDkqO(y;$hTDwg|7Dv$aqEAQyvMLPvf)Zby9M7dH(Q?pEMaAv|@x>4$>v;Ze zmB+uAIs3vt5S1HQT%9UEhT5Of>5_s%9>fb2m0l%Sj%gsv_3N0JQg0IX04qB#@6Ks3 zC{H}PCtg`aE6d7`lX&{_vUb$GSRO<1ZhsaV(AZZBQ=Y3IUFda`3_(oL(qu-s^fz@&AWlK)qaHCH&PC-!vo?V{1|}LuLp$Rz?fhsR*uUv zj!(+3G?`BCZnNvu6ep%EQkxYV^MLYmzYi!`w3?J0ji-t=G{7{#X5e4)@=d3tJZ~*Q zyKtSuzWTX&fJ0uT$Hct5xblG#>0=Mg0MY(}uh(>ehSv^({tce>Y(bR`|dxp>S*0WKvajM{)lalyD&m+wX zgHltT@jG~8;-!wzv(OHaGrZ{n{&=n-Jze(OD*=j{LJBWv29+R?X1@~XPJ84|4dac$ z{7E39$u~^IF?Nsg;qIDM+u)Q`iv&HJ{Mf%}RE<7gnh78R(vP15&~ZjEAcZ{YG2FsC z)c2mZw!^Bnn?HibfIPpB_B=Yk_px1tf(>N|QHqqX)|>3;GSKrhM25!5iF^6uUlP-f z1RhGW@je-l^*n2x`$qpa(*T*N5$?3r#UCrD?igmken=2F%+#okT?md(aCDEn@enOf zdD2QLjIb1M$M-sg#)@&v`!y*0ptv z!S(SZ^IGp@!tu4D?ZrS`b&u$<`ci}Y67&PPyz7~$Dq*n`Bn=Hn-Y|fwWPKlhz8-nh z7bI&3kqF%<(l8!XL|UDs?5?Mq*!B|^UaGcW77$H#!v42~W~qUb_f4*ks{uyg`h=XG zwp9zNl_(v7vvn^2VjXc4po30;&}`k}l4%oka%`k>-nufzc{ZzFAI|! z%RYjXpvl|xJI#0uf91ub?tQ{O8mDOCVeE@notbR0s4rocP?bZ8de;WE1A~O*Mo;&^ zxBFPWnE|vWvVaVq56{%n-g6XgPN`D;@xbq+iT*1v9P$|V`yUBpkRAvk&U~dIgyh0P zxUh{_aoR2=I<4dzZsBum&>^1ekBIDbVq;_W&nfzfwOOlz#C_B^Ax3^=Dsv0260qTO zqFZnNQLE4GK{g7huk%K{$6uj{VzHjx66O1c-Yf<9IAg z$YpH2#(0PIPQDa(4Uu_an)O`P+hKI@Y zuz|_FD5#30f>P4cFZqqXQPv)@m3+%C(Rm$hdzZUoR<9L?5?ETK>z~Py zn(+WsJCK@O_fxVpn|hJ~mKIy)tE0{>ufB0RiU zFhk_|3(%$s%Kq^HSv|x0alY!STDfS?_9)Fc?peH2gV_?eY|sRcCNf|$MO??m;gAPm z$hnsGoP{LfDvgJyBrT{(d)Jy)u+La4M;h0?$2E9Y|C2iptm=G1PSGLKGWFeI|IgZ# zSJ->?E6_Lv3OVUc_p6l|#QR)!MqL5{p2}LvCB(gV#g^A`eCWP3EsILiHS-E9EX%8}7H-h*2^*&(xCkgp*9rP~*Qjtxr(MgkY zia07vAL4OA=LEGMBL6jc_Ilh&*&UesvNf5~qZ69E2xD=wb2dvT&~6*MQxETeo99Y- z-c}Z%`RrzF(y0 z6~~2=KNL4Lp~_bXlymFmR9@K2;jDE{&yS2M6lZ2ImC$~S9UmVTv-?nm1rM%j19|sh zdU;~P-Y65Y5~zFgjDrCYzhI3QFd5{f{?yy4qwdeNFt!6G7}Psvt;g1_SO`NXVhIJ> zf@J0(3K5{*#}g)R4!eC=I-N1Ar(q*Z#@XH?+^)4)68psUbt6z+3i!Fl4ubU#Tu5U; zI;9UlthO6J6WQaCkZ}cNYW@h%DL+*E;peb&3NX+8#e`5R)YZIs?Z!q4T8n(#$|>YAgYJ~&*6=m z`eAKju^H$u?AJt42F%SlvH%D1i=dkQ((mET5GWV9j$Q}!c!H9Kx#fZ@;|EDkf%P17 zN-WXdLv!Qeht76U8pUA`!u#VE@Uw5g+IwY7J<6(bvM7_!ZD-3-`91x#Y^85 zxz?HboPw@4V7NCa#6&QrU_1TSdsx2%$n;*pNP?QPj_+EYu2#La3r%FO0x;_ZvcRMT zcg1aQ@W&i*M#?%m4UZ~3PL8w zqS?Q(tMTe`8r008FzLS9%T(7M(8D+Z#$i-sL?HE(J|+GD+HxeFrju6Q8*D91+TDUP zenY^ATUE%ytw7)H>I%w>+Q6}e{wUup~vE=FUWvmLl6!c>SGlSk3^Z)Ve2AeU8F6YZflJIj4=iO+6b#eJE zguT>}|9OMiRvMauqtGC%VwH!!reW)`m{hy#5hfS|Ki8!s=8yZzOrX=l;5t10Sw`Ao? z#Aj}FKF=fKn?Pi+FI*o5=dXE?({Fq+d@DksHQwMXuOir}1g@-lZ=+5`AEp!e6lZ64 z(P&2Cx*5~;9ytIVgpJXth1c-sb%5RG@rVFNgIy4(a zgxaU;;JX*p_aa=alh+z+q`p7mB@`A#|9YXXk3E}r{ki-gIpD^rc5wvCGNk#-z|pz3 zo#>-hC3N@u??h&couA19Z904eyfv0Nbaz%XyvbLwm3>DZqEyu!5k+EXrQnDreRE^S4O!fUfw>eGWL)YrRG zi?+m0Sh&-`!*;uU7b)aJQUuv?m6=&3h* z33sBrc|zcLC(?&CTEhFV{EI@z{r>!qw_INTGEx80o@E+;xNca47oT!Z zp%}EK*o#-EXJKJ!ko3gA*4y6Xqn*f3HN9S6LHIOKIu$m7IP&~c~eS7eU`pW7LOmps^8YvDpl<<>x=sh}uI zt+rOp&oWAF2a^CmzDli5jE^6c*%lA+Sgqe4gvLHxas}=av3!|Mx=ZzJbYAgKv!auO zlW|nO{6u}2IzN<%o;hTCr+Xv&Ff3l$_N+s%aw+u3AcJmB!@~xr#?`l{7n@iPhm+ee zoD3Osfo|4D;ADVIz0(h^!$fQTb7|cMNhCegpde-gxD+0ZeIk-Im$Uj<@&l)b*31x} znyMIDNtVgv+qIm#RGMg(r&lYu1ikr@I_qFA4+OG>K!|!=jJ=Rzy{9l8vq9sz(5-Xx z@tlzTv^!#mm5#@bd7O)~Bo}uS?#RS=wP6xPJf%YUc%{GMQ`^h!T~*!7PX^7m9!KZ` z3@W;Zt;*hcjUR*58ibWS(mt&{C3?eB7iGE7v;;hHH-;}3WCs~ue>lz+D$ZGe*R~iE z?Jv=!zB^ge>*rUpKgGaeUelQHfr-wi>jhaGzT<#IBJ-^u#p7q_9R#E}t;B*n2*3~S zP}9H$>3~mTI~nO>G7z`G`3hNHn+(KEw`OAbSi9wEqx~6@R^I-(TnW`@YBJ4{$nGg6hhFSUF{iG=Jd! zxf0J0Pj6{8_K?+m)jx%UyDcG*_c#p^5tM6mUdL1J^&W;^4_wL#aVf{4#ML$RKwS$n>6o>9$K8yWUyANm65EjOw-U}Q~!)ChM_wEhq zCHbefz$ral4tvb+4)f6@5*V)G*8~x62wX8ZGiG4CHP%e`_j^(F%}P4zCSC2X;<^-k z1RI%E-A3ur?@1QYpm+s&d9Cz60Po zyhE9{Lc;<}GoM?j^j|`jA`=kp=*|Ml*_l#D@sdxW#C0<(N@c2ioI@Ymhr2q}nO(TQrnRPJJW|1aYUX+g7 z&!=uE1HE(=iOjkkKApEDPmdc&$DQgN8(wMjLS*>B>SjrCzEx6m7R}D7ewnwYm5@yA ztH5p6sAmmj=OG{@9lQRJ6u*?8c9fHyUR03h?{Cvq9r!RVRH${&e)$Zyhs}PB>BI^( z?|W}=K3f=={s=y#q^obES(;Y+Z@q6`rYzK3ZP(GhtMVLA3qN%%`FwtJJ7!4gN-CUI zqOibM8~d{yjNZ>tUz!9^ceh3TQ%mlyh|>~=-)KXO$MNZC=k+6z7l)o9<2bIg5*V2v zFE|HPyV_Mv5_l*U9Ah~ z)e=LKSqW3J5`ul&4t2*1cRdwpkHgWjIn8G4x!=Q+Ed3?Yxs3$k`=__VBQln{^)>mq zx$VLDm>suV7kgRc0A)Uj|#l(5b$I z^&+lNPoXU-3p*t5QOBN5JT|sYQxt;n&Bu8R7o1!8ZLO$qU+X}TdYn`O!!fESUy=p2 zAT)N@T<`3>qQ;lebFja3E?oQ0nqu7sf;(Na3%e|jh(7MbmqO?6esd%=cptoCQeodR zr2OIkR{E)-tPJTPw=aVQ&try&)8pEZl7M|p;OC%vt;HCT?_-_Sh!NpuFX-OBDWCik zOP9P<%Vb@cD!Mdzv004XM#w|$j`vZ8ZN5=?)VMXGGL`LYH{|sQUy<{v!HEm+0v8Ky z7yL&Q$PN;`zDyt$!$Kgl%s6PDCE(Om9By#7tz}&;dsl}UgttZ`;B($pi>xeyJDUJA z-07D}X!dJ+TuwfYn+HGWIvu1$$+u*b;4l6~vtjBK1!_DjN>PdC()HJJx(7=C|$B;OkT zV)1yl!yaoKT5F8!T+D6TDLRH8gS2Mv+*U&WF+iY^M!nvH9)@y@a>vl1;yZGJ@ zJOb9u|6gLep_ zoXb?Zi#PLZrqv}DTiECOL&3R+wjJ^CgY0JiEfp<-k((K{YjKhkeWp+Y+}psin7+5Y zLViTFNDn_VLG-~evorEra6RGjn)S@YOtHcOd;JB%)k3}2Xb;X1vcFKkOMOhy0ua1m zOEwbX&Mxa@W2(3ESYENM=ToiHMh2j)1CQ77a8t`t(}|QSDG=iuCjgT#ayLl&ftb5` zYi;%=ArD{jaB^X!SReIlzslJ{?^AcC{Vx67lpCtpXvMU*k03i>j!bU#-aIK7V9`5k zOd6B?f-_2Sq%hB41i5!0fu;WTF5g>=xcqwK_DxfIaJ>PT%6eN*@%XNGx1C$Ju|~kR z%p^ZwFQ*$;Fo%2{Tt-DLIl3;2?~?L1S7|z#3Wm9~!*7Q~Dh;-L6_!sv3RrpBH%IeB6lJe`d z+YTH_LOH&l1i=HB+7M7)$%Kfui!189%?NWE{vpQ zmbf>#YUXXqH`>|+;#+k?(&#`Jjte?PfU7B~6qv`I`?KJVOs~R0Qc{9hQRa`W3#T6z zeVof{l?i&vA7qpf+J9ejVph1U{G4Md^X!2hX+{7N#^1yO(n5Sp$U}#W7#Q@Rz2C`$ z-6f%kwb!2f>g2#z%M&_RMV48DBv(%?%rAsNh{<=!@({nh6l?4J%kog&U472`{k;sn z_QGEa=ChdP%S+cRv7~3?ov_`r*ZjZ$l9x281QK`|t!MtYuVkG@I4f*$ zutNa}f|Ll5X5)CA_~CdkqN3{VVi7yqR!Lr*S)sXDC&NFvu|*E2Sc`~P9JZOB4js@u zUy=kk;IX4ey{gt!Y_gi3Z)PFUp)|0M9>1;6f(_GK;ZNi~n?1OI%RH7TKs82&atplR zdXKd#Z;I6~4|)?U#-l>}I5{~3@qC_YSC7i_JTKs$-t=tP2ws!EDmPjr58g{Q+gkv) zS)lo25d6htkS{?_6B9OkvT~g#=Jite$t(|vjY@-=q#_|&4I7D-bA~C+7=0oE&$T}5 zH7uDPAipOXNDmLG28uMWPeJw~)z^VZ|{Sq^3gCrQ=NGjkjcxb~sH z)<3!G^6~Y)i7q-;J8_9ufu{}s2XcON$y1xU0q}!;z~$s{_&a;I>euwWY!lh${=LqG z<*D>jVXH9GHruz1_t9kOAZ#-6rSM%PH5G&S#vb;|vrMxQA^AlkBei7G6fxAe!L_z? zV$&HUM-4v&;s04zAeHRir`ObGGcy^2DvBTrJqJVGLt|<9I1cuHAD+q39*~plHUy1&*%4h+;`z+aw5OazxxzMqD+wsjF$`Mgq8NE57Ol{3ctm&8N9 zeiUlpawL*?_R@dx?7Uj7MKS$LFpp(Z}p=RL)ntp1A~)d%M-pn+6zg@`N{ zThd;P)!Zawd=tg~g``TR0+=Uaxzx1ZR?F07k@~RW74~f8n`lZ3GH(|g&ah3KGf~iz z$JHoZE>A_OZS5P08&BRIn8crR3Jx#d^i+F>AKE!qu0~xP{++2;(o$HV@FZqrM#)26m$}X;xy`B1hWPb4 zPZo3+-Eh6!I_f-DPDQuOU?BvzpgE~v;y4`q+wU!Hn>hJv?qy(}uU&^MI8q>&w$Ew3 zi|hg31Q}Oxp_3@aLq~T)P)aB&R;-=)jmS68^Mug!!i}Qp#domdg}l>wwR_pINTc+y z_`(ojTsXRL76WV;?DJw7l!CAie;on=3{~ zMqKEj@9w1&YCU854>va8+@K`y(+~Dr zdNUg@VtU9md){gpQL}7I$E)U*Ml>uV1H_RvU07cj(78* z5%{wwUwc6m=lnF(ZK|kAXIzwS<;Deb<(SJ8;0IGBo-!WHj#t#~1?n?}=HYFg#doJn zSc$HG;l>L2doPB87jK#0T^w3Z5pY$wT9Isp!uwS4g0MgqQl|aNZ?v)E?)5?O zMUUZ-R`HlE^ECTYhzJCrPITFfKNr$fWz2njwLVFY8+y|-)0w*Y>mns35~!w%R4N1) z*s*_KzC4XBtZbb*4nTfnN7WpoKrIMv4}yKRkU++f32gnBllE%>EA|;xdmMgYxjO$^ z14bp(_S99kY{^teIPfVNYNbo&#?^wFvitH5;7TSP8@E`IKhC@db;@Cw7w=DIIf$sz z%=}s4&WOt3MFGb90y5W!b42gM%wQ)zQNSZjGS&lCPeGNw;ScU~CZvNg1Y1%b1a9SL z=lOcD`4iytb#V19hS(AaV8ZoJexUSgl{w%6kiN0m{ADw?;33Wxmic6DJ!l}VafwoA z7bUQmzrOFH*K*t2F;g=U1qS}7T8=8J#?g|$c`5ey+Ede0c))^)C4k#?H;vOkQRHy> z2=bNsC=_kHXP*nD&V)K9xzZVn5$VW=@3!Wq@t>J69sW2rair7=kz|&Z9J215IX1z> zj4lfERtBE5^FMbqj1AKGjXz75N8QKBb9^eteH2)8eEFe={bb_2b2VqnTAS`=HpO`R zEQ42p3}gw+#sa&|H<#i|k5aCDs+s_!q2xtBju+K#8jo+@?DHd8SOc%7fhdOCA~f>} zB)_HGR7S;0)Nbfas`>b5ZZ*79Ghiqi|7R$HyYIHPO&&fku&X)ZYkdvOn`-Ocohrx| z_}|vj5~7ZPN2FpWcM-D^Wky9^JK#Al_2uGf?Q8qAyxodbQ_sQ8>Z2zlgpA;RcZIMd ziFkyLyLw%`RAU|@zxazPnuP+EY&5Xh>jhP5w#A!A0z$oD%$6`F%7HusAD;x0`vP!y zWnMqmidhtwSLbHZ1aX)3LsA;XZvr3gCI|Ur+WHfDEN)6$&Q0JyNer3+xO}q6&ZSxM z7=B|aKceS){jmeV>thExDnm%pv795@jgT}7W%^Iw$nKxgLpp+LXRuVp z;oy9qsDbE}aW2Az$gu`S)QcnNxm^21x=>c-_p-o9$zCnWovPjW%r5EKm0_^eApMI5 z^l=LCi6*n^2KvT1LQ0P`D;|bxLBg}p!>Yt%gK*q1PRLVfzj^HKb+E3gC`yjweD_*W zapJ#X8$__PAW8|9k5?aukJsDJuhbfs%uz=zu#r0n1_guwDw@3U|HjkLiTwg^FWI;o z;RJ+u4Qo!kl!D(1MXciN9IF2Qe(9X^g05#Z&p|E)uSRaE8B-r=967f>X*-0xF;q~ z3}Q)(XN_q*q?K>FBohn644(}jg^t(Vne!r-vEFsiWptJFat4TS$+;EB(%mVIDx;h!R1A1BP~?t(=oIh(C8 z`K3VY30Oj#NaFFnxk~(|KuPZHP zj@-tcnM6m#EGWsno%kG{A&e})*Y;TCEvN+9?Tv#gpgh`&C!$BGwHW(#7(u@2)udHv z6(H0%KX!5e=Si?o^6h^wO0|oO zw9Xd#D4E04xi|ha*541OdQo1C2Y{Rg?j$&Mlq$d7L65Hrjp~)^A*RYtCTz@7odT@*e8Fow)m#;N zs!7in0u~TAa~M2BU~|G&`Q1xcvogMX%atZcIL-KfIFX<72#{+S^b&Yz^b%yGI)xe{ zG=DkpmwyA{d!5`+9OK7=V8V;ppRu2YrK~z?pq@(B21zrfqG~e*_3(ANn-gqFpY=Ia zD8DZwP9Z2NIC)lkOud$s6QN-&)?u{Y8$M{g{QALvr*ozhdd3Y-N~8WJR{ZQtTwjun7^NM3SJVSkMkflsQ00UDTQ>iecUc-U#53e zeD+S8`v^lKdV$;^)uoeS-SDY#V#BVNBYj;1!Xzs2Hh!>@splW~=Yk`_Tz_T*%(WMb z!csime#o|^ps61oUkvg70|#-U#fVy|6neeLHxn_@NX&)n4Bz%!9aV)+>uNU#QDitg zs60*rkWBi4*b+RM7D*tA4RydrxKLA5tD*j#3;6 z{S7{wuMj=TPp4u8wehaL^AHkR7f^ZG^xxt}9hpq-`sk$@ASo_6WPfic#qWu^RA-n| zG!3IKvF5ZUd|j1$@|TFggsVr(l^`jZ>g}N|o6_S3wU!y|aHaReOT|kZrjxfUM3dv= zPI$J2ok94o8W^rBX07SeS5Z1tvQx^CKH=&8m4-kd&+$t#G9rqPB1P0!C{a-vSc@Oo zC>th5ZQi`Ud9fF5N)>o#XzhIXjj2H#Rk;KSeYDobI|DbprZDzk(RErS@puWSP*mR* z$!(XGnV6wIg;au>EShf_RgHLDTVDrvR#dVM2^h4#TF1sne0P1;W$ya;M{$L2X7djTJg-{WuGqcc*G+T)wM3H4Y_cz-7#wx;i0@f;)^MF(Tlz2Q)=SV%+ zQ=dKx219Su5FtP+f8)V7$o(F(o_b9iHKPjc{$TK731%|a(&}|mq~X^jctVZb$?#?f zH2!tg_ngkg)O2p+f5({pJ$uJscm@?$wI5(8g}_+iFQ3gkcV@HO2w>Yv=SzEXVuiMK z(^UHCzCn*vj3Ps8)jKaagO2i2L<99jKd6ejrXVCC)#YVnRW!1$CE6dl2~K=3Yf$~h zi3%A z^F13-U>j`uVYt-g9c&PlE_jsON z0m2c2TKjGn?f6uOjYzzauRR27>2FAlI|cqZ`D z^$&CuNBIr%-3T(=k~4X@1+ek)W=os6gcJy*Gm~J%y%3ukBsj>u{_HK_|G!O^%gA~z zJ$ifJGqWN}yA=<%F{yHE>;(~8U4+(fhIgJ>t1mh|h)=-$%B@B+H~`+VnV6Wk?Ejl` zLLm07fC#1{D`;UOEBFE{4m}Utmxh6PKKl2z9A@D~m9^?iSbx^`H6?_)Qtr}$aAHDH z+vE^bUNyIIod>Dj?=}x6FUi)Xsmsg%@Os2wWMzw~Nln5aICeuBS!o~2t%r5ilZ8v; zv51Z{p9n;Ec?@I-a1U{IVnsNxsx(00l0vraFf;ES1*tHDKp$iIVFTJ2qM4Gy~=j&2pn|*UA#3q zLRAjypeXcNE&gpKYQ62x3#gx;>_!bxD18A%^l?zbbb2cr5m&Gs2VkoTICwuy^JdI9 zX*KKBh{blrs3@9|m~_E}g3u*;S(v%kxaS& zmoJ6ERv<-+tR1@0K3IyC&$0}B4Pw2Jkg$;5cRz3rcFDzhmjlo`=Do6>hk|2kjtI52 zO9)m(;RxI>8P!c>HqH?0gru>8C@jw7bXk)Lvt!`4$jZ}prQko>fJsQDrTJn$C>+gHt>C|qu7R1>s z7Yfd;DJVcL`*jwOn)I(I0$7?1%|bzg?fOrW>a=5eAv{0bfbcAuHz)*`gIIWh z9pM2fIV2EifQG(A2#lc5FWC4$g9#1>=MpG;>O9sifXZ!Q=!_t(Az`sx-~|bPLe^LWqNy+`)9*<9X!y;Cs0E)PP}Nmq}1`f>=~^5L^H4M zjZJQ({h((`Q{G^dg=IJX>#Hyqz>H=ioYBiijvvlkj;zV+SCL{p_U z>qXfS=|9~a@G&8)Ko*-GxMIBqToEeIobSxS0B<;KlWmgV?yl>wch`QycxRFfE+LHj z+e45XEJ~sOKU95nSXAHlHR=Zg1VkD{BqT&Yx=R#A8U&=JyBUy1knRwqTVlweTcx`h za**!se$OcQ`@THS{Ks?8y(jiwd+oLNS>(D;G0&H>bj!_tQ54U9eVq{oMPk!iI)vy~=ypF{R;&~QWqxtG_J~@2(M)Cl| zB-?>gQvd43%~b#cq1zRIjxys?I51WFb42tPk?-G~hhhw25HI0{Mcawy5fXtsm`}+0 z2>R$3Z>os4D>)qsic6zBZDeF@;%Z!MqPP=Qyh9aMu>(9cQwO$hL$=^%T~Z$TFl=d* zjDn)QgNXw$xi(TA;772?4RCFIQe>21QhW2jq32kg%lJdH`sQ)7DY+|dBe zaswC5ZBcaD8v~czX&tKGi|3Y5F~@JvXHNpeo>(whnocKq(c2qG=O(2dAdL|t3`7k% zXCB%(^x~{)_s=}{B$1`5Y%D;hxHD`cu}m|~EN(dC&$QuyT_co-d?)OudX}Zwa1iTb!_cdKADX!ZDHpAj z_uQk*Uk%jj%ag%zI`}Ukh&aI1`0y7jSFJzR_g$F(r4Rq#bTZ11&`s1DQ?i9bz|g8; zsxARUu)o3r~7 zU8)v2wid1bfzM062{5y!TtCdom`8t6YJC&mKTOro8R|B2G2K&77XO--8h(e>tiO;_ zVhOXa>{xnsM0?qNlUN-u5Zpoh7Vo4z1;^3ZIG+;;Uof1jZ zk7AJEZ}`BZCc|2|^52oIf2!VL%4xS^9Yo-0n(H{%$lA)pmY<<{R^xn`Qmk{YY0l9I z2--R9hbzQanz=u*?eYJrFv$ZlaKoVIXQ~kPYxMw1S`%{TQFrf3;w<(7H$wy%qE3)v zwBk?1|5o{^taW&7;-e@T)>;n(Rq9I$9$;GlMHQR*eUT?K1N{7L)cq|GtWJqZ-WSKu z9c>u~4@^qT&qXVZLrguU9-w4_D`~bk0i91{lro}kHbjXv>eb8!HXhWYTNL9dZp5lt zV{aX~vRLMzKX!vOi_>AlWl^Z)I(#mEy>O}kn#=ywq@Z&~iqzen%Z+!Y;mSE&@crf1HMMAxCVP_9*3J*GDm-JS+C0@# zx$NYL|MqoJWWc2lTjgIG?=zV-mKLpq1+Bf*iD5Pv!qN)c<^$F*536#321~HU=seRH zm3s?*Y=3XE4I?!-Hx(E^3zlo^hf;(2hdB!I$GRKh4^ozoxMtJM8SUtRZ3*qr3ixzh z;pJVngv=`WWqrGl)eWAeiOEPeDQ{hy>{yQ~gCB@O@#PdA!_)79<0=F$YVfZ23vW~d z0wGn^nE5Bwy@cPpR4S*fO;fQ_zUAUO@hWn_6V8Puxv*tDgj@9+XbS+lax7SQjbDTk zwt%Lz34OpD`~Z0b6hiNuR22_)Z|)-H2luU}1rSX5F_#;bhKBNpOKVC&fhK^Z6bXTiWd#J!LG;}46ALX zRo&oVu@}-V!)@{5QL}cZ-JXm+Hv3f{q%aj{8VT1gI~i1wF?#m;Vm8puj$(j7sLSOE zMJkXgYIG=FGA9ZSo6A|4k(=xG7I^y^+?4l_0dA{0MLq zfTLvBL^Db+Enw}tR1cRH@|*@dL{b511J{TUN0K&)1m9`_KDp0+Pp3X^FT}>sve#>;`i$l0pL;BaE9W2p=18T5Myfhjw|(D{6ekoWBGG9DfZ7 zib@MT12h@P>iU3{03a$))qP^9jl*m8C%z+a{Pmw}tueT7)ZOCS^`lMl?dH3zE^LKz z&>2{3!BfRNW4B*Y61 zU<)tgX)t-u2F9cZ(X5X~yp{nue_KJ3+5uhpsC>oP!R9*pP8Qw<@FX%cemXidUKr?o zbe|`Ph6R09W{jStnycdVZ@zQ?9ort&{e$%c@mH0vY*&^q1=HmPH6<|sAVMhx;zM6w zTF&|rMG`ABV8p;qe}FjOT7@v5>EcGPw}K4tc*A7Tt4S`UBR>JK(Vx*5{AgXh%o6># z({*M6pq7yWZRVs9|3?J^?SzvW;F-YAvIK!dKm%ku@yjUh5PevuHc8GJVkAA zy!0p=lFfkX_u_M9cyE%7#4wfq%9oTkjHng>bvJ9?q5(Gqb#_Ltvvy8 z)!#b;(yFS6lN_$r$QC`scL{O+kjIT#zaQkCz%t?3d!%Q^iNLP#S&{&MK-jZ&WC{KI z&v8(pdtzgwf-$~FfD|9&K-$A!6tfOrv|*y9hFZ_!_7R4nlU#rmlBNo*Hn-FRFx`W(( z3CzuUccE)eF-rfPE@8=hn%=6?7d2lZ5Nw!Cyr>sQ`D28wnEATR5i?{w4@U6LnDFA%{E9Ho$RM<~@Pm4@6fg`Gr z3}PGpQtW6wMCp@7;vMv{BIo(<88jXgqS*dzV?QJkU(Agx1SMtT&4HZW0I;$_FDb&x zUgBTmfjPcL9w;Xv|AT)cegga(SbaFy@_1wIzx?VnUvM0(CP%SCpAEh5z{|n`@!*!I z)*OJEW2h3xB^iKVR6S_L5b+mAS9B>iGyfeH>IbG<@x$Jd${f-VS6KnacJd_7J%I9R zQF~bsX)Ss{j7Ik0F`hK2J*p0g0H^%B^rAfPdww@NW4GLiB5gs?;6{{s#c*|Re%fnFFh)IwbWFQzmOpB)c+^V-q+9=7 z3E>?Lg|C5M?k$UeANanE0a{q;Mp)N;Ar2q6>CchAy0*6i^48Ax$WY$9bD~j3hte(> z)0dTIC_iSoA6o*FLDQ?Qi0W@(BgcNHrfz?|OPwUo*$uQqIQM4rNxpKi*5e^VBniHH zu3!HQjHthoyu1iVc+~*WVP|>CLYxFG!_hZv$Xcc)}kW7>rNGPg&B>23xC9l?Yi?{~OFH(Cp94X2HxzAz7w6B0JEApw<@j&w9+__03 z4+u1#Le2deuuw{Wb}3NWJ>v?mUhB{-d5DbX?a`ZBnX{OrLi_j6E1~7jaNm*Xid2sQ zH@rn(bUi4Yue+|Mxv}X z&r4#8Kt)|W2)U)`!Iol{4Ic?88QeB9Gm66LdD4>n*h=3OD#og~7SWdD(CU2vv|t`M zI+)pbI!K z@*g;|z!&?2DBO{gA^)A?`E5+5zbpKWmd+EJH!`fK@6h@p%VeR(0y8RF-1`X*hDQw7 z@a9Mk-U=$WD~~gU)xWwu6cp09|3fkMii3(i=PYPdR4vN;0J5|%vKs8? zYJPy+eL|R@_jG5Olnsc8a&Rbt25`*n*Fz3iHpw5CekJ@s>9s^EBHu}L?}kg+aNfpRnU3> zC6uLeR?@>kLuK$GB1#n25MXf+=jQDMK6~wA6=A9WyriGl(yRvd%l$jSC~OoUIpz9O zQp5FU*XSE*Z)QO2*ACQ~-2(>Fv4WQxxa^zuoIWjMpRC066zCNm(|iT;oZIdyDaoek zuf&K{#(`JJa?|XF=n}2y03AHNNW+mDsFwK2W`U3p*q!VPtg`axVb%$ioRn1zzK(BE z+%c!IvH71nyd-FtZ3f9fkaM{PqF}C(KonWdW<1kG75;7rtzCfynQH_-c=YX4Dr1Yw zIZl-_AiI<%tM1Y#rP^P-n|PjofNhxR%G*bN6+^s4-ox}8c-w5>&Sn(rJX9_@1Od&J-OZ>%sOl~+*&;>hbE z&wqj1sg$+&)f(`#!6L=bLo(PC+2{ON_IAkQyJcxFVGAi^$YYSH^hebb%P7I?$3!U= z79PEuk*-%x%5M}id=Un!YGsr<@xtcspx2)V%Sf18u8)^95Uq{#Dy{2$Qf5OL9c0kc z3m^Wg5C?<1Ys_L}Pu42ETx4pN0IvR@u_~2503&YAaos!FhcI1i;)r*=AIFq@miG&& zR*)f(C@neNfM>~viehcZ8)2jdLEVtY{KSCwPx#%pB^t8i#=*Q0s=|zv`?^-U(p>QO zG3RKoU4OE>#x&C7JMEA80+kr&l!OQK+0s&e&cR+C8Ke+Kv{5 zkQ~?!@wn~0=b)4%=k#})#VxQ5=b?V0KLbhDomS$$g3}A3wtfyyZ#SKY@UcbZF=y=Y zF_RF*)u=xnAX8_4th+8C>xBF1=n-%X0~WIUx+q?e4 z=FdR03Yu49=kQg$q;Nq8H-`W!-1N)Fgv*FR+_rkWX?vJnR+oY1dDVx=$m!Q3oRvi{ zbl#jMDsr|iv&zoi_2TKZ0*D9aO8kd{qA{~E>5~9zB7__6qSSypyF{r$;Y*+X8M5>w z=(&iQ-6qx!FR))MDc>dxkxC)-MG3xw&xeuBt<+0Am1_TYx_*cQ-IFUB!+2pr(?Q5S z5vY91NV+UJ18SpF1AV-YC!{E67@Qx1BxXQTMumPxxu|MU{dMd#yY`V7KO(8zksSsCBWSMotpons}Ko%6pTYgB>F>*=V8<;0fV?s9tXyo;Di zwz-duJ(U5Uvks2)^aVnRibrpR$(WSbB5x4VO?+f$0bD#5NZ`WQ=zHh)4RrBJaS#q!izfQWSkW7&|d4dzLA)f+o*d_0;`AhYWiXR9ItfuQ1yVm z<9c|=yt<;Ia3AwMkyM?BzP?Apj5?80!HRUiAvZ$oaf1n0BD~pd5Z*x!4(K~mFgQr) zn*~DD@zU)i@fNG*=J2^A`JTBfZb!g4q!S}coq&pD9Z5Lrfz$~_>a>m^H3bD=8+?6L zN?v@8iG$RcBhpqOQ4Vlto85dkgQIO_H^`j)7)^C(XmPD!rGzGvvh-CT|5-BT#jAC# zn<-jn)2-jlofKs_9Iv${pkRu_!t13loe{SH_?6JS_|~I+8d0enz54jk8*G4Pz-d8S zTmQh4j`m~g_iZS)-!#qsC%`%w*-V+%J%u_Ymchd!lm?$Ob4SE|Vu*-~jBjgetJV_K zTZn$OPne>n@H8#Hh9ok=epYk!W6^oGNi=5pR2+}>x}cw$~p?Rm)%at&g^-G zjlHezBPT3PySgOT;~V|Gh8TM37TxiR+pP(Y^7<<_ zf^TAB@@h4P))7WvB>Tw7a8RUDF)PJwgA}=mY2@qv(oQ>qhJxUV2i;^EpU$J^l}ySW zuuC!btER}vSiUWhwtTxcavT5$+|hXZrWMD~a?L8&{P|ZX;KUPp7xFm8eJ~EX-*aNx zJk>&hWuLwimzANW$jOh2qd>pjsTkd=jL`$2!sP-kS4^xe?yE=`9Ev|3kbEEG0@z_#1H^1!G0?SV3S zAX6~P=z0#^sS1Y z##F@Gm%8Es8;~(UZXW8N+S0#cDm~8#wm_nH&+HNG5C~L}rEGZg(LDn0tZT31${!O| zFNcVn-%HDfh-L<_Z|<+J+lhlv8`P19NuIlh!KLZu(40Z1k-vYvSjZLjwDcT$OGV|6 z6viUOcZtNvkdw87C=l%N zG`W4Me;{m|3>+OPU&E>XI%Xi&FiwUZo>>@bs&VC`B>U@i-5a29(XFoLrs7}Mw!?Ke zw66Ahf5Q;VypZ@_$^m-2v-t2TdOH}4xQ_RQVK=BH+mP^Uk@gGB{pM)thS6d zl4dwR%Vc<`7lg%qc*Gj}+y|&^kvs9}M7A#C~B7G8{g$s0*liz7i<06!lm?Az*Uy(PJnH&9(~lozX$E zjEoVH7~i*yE&n1il-r%i69N*jAPL)jR(q#=OWD+oWfie}8(6R%OM6^EY>^Fas_wkpW6NB45Tz97GPjycFn9XZ5<1dd7J(C1oK{p=T;%}X2v(mMo0=D2! z9|!nIPwC{T=NYoK0df~~XHB2?2x`5Q!`ceSor|t;5I`yaPec1#otl*ljwQRs~44vI(PE&!0*H4u6lx*c(ikwl@Sop z%AUVDb|m8=&gpEgtm{Dxztj(0i~+H%!jDMldJ5bK2==UC%~WNNpe$4Cs0{FFoDcm< z@L)peGO1UxbS!EgKDz;f18nSw}FVwBI<17p2weegB#f z!@{~fFFjVXU94%)sXVk{ZAu}_kFF2)UXR6i@N>%4{pL@J44`UAF(xQD)s&Fk>M^o!g&`1)DoKp&NFw#aYi5y(!u7ctJi8b{{De=rTo;# z#Pca$SJ0{A9;m$^_)g92kZo{6G|pXi;O>6`VVtxyy+I4;1CI+A zZg?2}3(+MR4okpdMino(rR{g;-hNKa`sx)a574s?SEn6fUV=72tOEYl>$69-aqsS? zy!DX@?`8hdE8^~c^BuOVaFfSK;iJ{<5vN1i4>CpQH*b3MJCVHn@Z_G@UGj9Ay{N(t#*>)3jYzZ{b zyhzW^(&_62?JMgOi%kbz>?J1*Bb}bx8OWVxAJ&6RKyA7e98>)~Js===vd|_s`CG2o zDc0P78l#k*y>4Pg#iK_qe??s=-TpZ_IrzNxo7Iks8!j*JYTaArMj$feeF6n)tJl{D zs#VV#w;LjS?}`2($mNOt7P)b79)U-3d~z~4A-L{ckmR@)oPqk%w{hecMm84}C%Rr| z{iEwE9-hJK*)4r&G)|R&K zHz^(K$~nv?CztEoYPn@!tf&n2^ndH~gbOUpP?&IT)F{5#P$_Qj=($bAe+xR)y$O1Q zA^&7vMh+R{5XGR1u(F_UoNxHxT~0Mk)S9$@))F}}t+rp;C-J+d(f}4R>RUWw?fZD* z!B8)qcvl=d_xaXdTash~3*$j)q~2q0KXOmX*~X@grEgUiKStuh`;_jcta|JO6u4a^ zg56}C&@iS4K{GReKoSN^)-3x6^LPB;H4sFa*^yk+pIcupH?4y_7~ zjy|b+j+b%ajzU%Ym!Nm@iMX{ta>xpI9eF6UJUn>Z+kVj|m)ZN#?uwY-27C`*r^?yZl9*=5%B{>Ek_C1p62TO$K3|{&MZ#Tue3eJ zz$OZQx+Y1MwId%{1zG;K-5DW26+qNq{&65@G>5zB^SR@OawUhIwfdCX3)cELjZG+6 zu&wpOI@{u8Ugh<4lQ$R|rxoDTjq3sk)Xco2ayKsMI{llhB8%xG5*el7d(?PKXBG$R z{#vigguH+NVwfW@jx2201;UH{bKuWpMD(9#?G2`5uB-MO8xNxoz!~E9KX!)Jp&Il4 zbaioTtlqi6p+Q$&-mi1q7?Pd>6`~4EB|76Zj0t1#iYh6&_MdP22g_J^BE7owXR((4 zZjWT-c5vPs$^JOwPAnrcob4HNd;!iLNzPhH`fZGr0@rn~<$|}Xb+H^PIl{`uT}&*g zCgBwoA=U{Q26L!O>vfLjlLeWi-0fH|7%J@EM|RBS6Fk=-&@1OX;!d%e$Frp!xYC28 zF!%>9MZHCnxmEXZDEp}P&TTXZB<$U6%YF4yx1O18c?%LU=)swzEqdP0;bESgmLF{` zgf25(pCgggZGO^Y1Jne7?eVD=8jx!+QOX$kRf&Vm@wQ!c(9{*)N@kB*wx8PKW){LA zypb(`j{v>h_z4h)7ak1|Neez?Plj7D=#Auww*=0)#J~sl&kedGOCG$OTbWOET$op8 zU9)?`CLMi(T5e`lVsO~|P6POZo*Y$Gt<4P8Z|*g# zuf9}v$e8AhT<5qJcM8cr$C?s6rqp&<0ec+te6NFAIyn35$tzpQc8LqUJzuT!osxJR z!EgVP2Bk+3zXGR%V`@ zL)o+`@c=gjm!3r>YN~yw)^-HkEv;3|a-B>c!{(>ezC$M@NlUvL zdgnko%7b`Nv(jqbAZ;_j@m!x@Z+U&)EN|7xrKUDlqgFl&crue<*+WJh7KM*Chx6 zGX+O~yQ&Tjhrbzc;JfGy%mf`Ch<9HZz45%gPw#^n%(u3}qndsMeJih|9at9v8#3OV z=JKy;_}7s{ovfP|Gsg_kDcE02to4OSs0pyE1ij7NmMNy{>|B#Kn@<|Pu)+fnZ6?xrie8*4(qB6Snff0;+}r7$ zz9@wM_veM@=17<4hDn-D$EuwB0{ui%9m&{VCg!P+h>Wi3l^Lz?F3gj$_gv^N*Z()! z7R#FDR`EI*0z_g}5#KK&zb3Ie`mkIdp)ADj&$V`;HwS$^V8NgW=kPsjf5d!8x>Bt=BoiLyY`aW}x;*qE_#i_IvQ&AQQDGM^FlahvBNR46kLkz)Ek zr{CDXVGALagnet!m+1qfG2xWv^z<}e^ROe=1YEx>qmwS7T4w4fcb9xakq}+!mt!dQ zxvD)=7UwHZ$wIKuG0KP;1`0!~-1M1>%g{iP*5P194t(_-4OyS8XBJ<*+ZZ(=AmbuTjY3|afH`!HB9kDo{kq`zi zs6X8=88Gly-NH2*P+&eUuc&G+8)?KG8e#_sQ(ABSD@M@S@%nXo#Jx&+qkh%9$M1%5 z6Mzs!MynfAz@ZJZ*Vfi@GR5w8=c)7BXK`4UF~qWSD@Py3NQ`}|0SNB2N4;>xT-Y9_ zD5li3H?^`tFRC{*r0=n=-yvhxS2A_JQ=JWF@*GG5*+4i9| z6JT<7uebJlsQo86m7II*HY!wVO-zD>cGkLIwSaH$WoM`WDi!^!-33Xhp?MdT5s~A? zdDRnY>Wst1XD0Bi6u|LUiJBv1cc;^6#>2k5evMKfbi~rDp8WX_c+qzZjyJo#xi7IOT&lDB}Fk%_4)NEbeDu&+Nk+v83@iPM)P zAsC)_G2WDMMLK6Z{I49dXeQA~NfuqL*tcxdT(|7kNTp(XSr6JpzJnXg|7rpL_PRlF zSAndKktg6L+W}L3%X&R&0@j2_L(uJT%Kh*>4Llm2Ei#%r<6*6TKt5H8t~kX2WOgN= z&+{i3T6ngduwEQYpulXfNXo>cuk$+Z+gTiDTD=-kN@vj(Nk(y@Y4F?&gaqZ z%{|3-B5KkdiSGf8^J2ejoAELgyPDM~3$!f}p=Bz#&$41*&-G~HYPMw(4%Su3C{PVS zlii?kiYA{iQ^ug3NXNsKaO*=-oU-r*&DH)&kp#4LV^W9n;nS(w=U@#T$VtcN+KQx1 z)%subvw8RTqusKnWxe)WIXXnFj$6;P-SL6jZLX|xgGEP2yNv!Kk`A5IdmPCVSfDuD zx*8&Iy4|ePB3(Z1Z#=a{?otk(XMWN506Y(7eJiBK?w_b^WjCp1Lrns$_a@k8Tm*;G zQ3%KRX@WVP=-l{*I{IN#EH{gV_%?e# z-3**TW9o37&G95W-O*yEb{H>Y3o+*zmX_~CD|BYgGz^g5FdBK(3i)Dlkf%Rrbsg^* zGA61axHIUMq*2N-oRlegx^jG~fJHQMngv~5E2Mgjejv>e2-_*XE+s_CYV2KV9cd)p zy>~NKs3q9j3{jRDG3k{Lm4xa~DMcT;fUiiqjhR$s`KwDh|C7bS1cdi_8cPcV5lrv&xe_0j1i7Jk(zFct8mmN-P%xZjAhEos@98J+@GIjG&8&)mIcU6 zi#Kxgn&mNmDAQA)^QJuXS-86**dyNS{srR~ZNeBU(SnCb)dbwTiE}PQL5^67u;=x^ zKirva^ql}poq!WD5NFK4DvCkEHJM_{68GL}Lp<7IqyAFJj!QbwRRRQZ!$a&dc28M1 z#y%ne3(0=*zg=nk5K%0TMkgdrOKb8$RMGX2r$+K*&NGwDW&y+L;Q?p;a#^MuBOP76 z2A8J0zjBT3tZtscWR_O4{u_<@%Ra0gw5kY5nu{g0!8*4%!V2yUlAUc=)$S-icArOB z5LSL8OnwS%itH+!Lozz!9Yi z|Bnqa_3$&ty8o2m2d+_wF-uG%%!`a~y3;AY`q&TeS5r}i!eY*?sORIk%QFfxo+nZS zk&@KY+a5dcDJCZ&&{2w}zxQVtV@P$`+9f71f`1dkMr~{8iV>kmJUG~CR@DjA6@+Np>I~?w?XNma0MvFh9)$M6LUbXI*MUP^QCy)9}G>XE4}Y(XOO;55}3^{ID3njp}}Z zOR-cfJk@rYm=uzP_keWt&tFy(y7Uxl2yQYvZX~=CjeTW zFPkw%t0%QC^fz{(rLhhlKMG|OZ!+JDXyJ*Ra=jdn2KU~ALuBT0E-_n{rWjf;1(>cU9f>Y|zx=uf94}mlnD|^aLrPuFzqCm^uZ7kp z(CdS@&_ND#?*5Ma%iLgt-hqU$LjW$B@n{5bS41kW++H%mijfIMS>!pSze_D8;!no_ zeX$_Wex1({LZxtmNK&C1Vx#I|oIoxI#=_0(^(69IXwpHErIL(-<)19k_-ya3q&Mvo@PQaW>Wb?n$@I)H8R{f>}$cho; zF)lVu3(uW?n`&Uui0tOruTl3_VVRlAV{%kOJmA(wE5||KoeZCixIG6mxGON7Z5slY zz-XVCusa!`H&REmeV;q-I?>+#@&^}2E`{UrzwkJZm}Z&9zf!TI^biY_^eD=?E6U0Y z6Czi))WvKHG5Ju0rz~%OWFBP45abgzDn?yt|GWypi>18;d>w z%~uV=UJpd1kejJLPN}0I&#OoJWO~+(e^w;oxjlmCfLHs^DBqA=$Iwnje}a5-7j(VK zXqo#nU>I-V9o=Q_53Xfa=|t2gCPkp?rHnjoFR0xeDgjMOg%TgQ_!AS>iGz(w^&R7h zq)ytk)s@lUcdK9N4gJU~CIkgWu+^h!)p#;Nt=_dZXSEpby{_B)qgFu`#K`eZvpDi;?QQg*cTwi?m`oV#u4 z1i5PgP#sPUH-&JhNuzT3xJupxji{2MBDQX0&${K-HK65dwqDQ5VsAuY07#4BJfN7S zw2ZX9-;7gpH;vVV056(db}Oy%gWcwU8mAfQfsCD#kF~zy=gl33acZOmhwAunpaKg{ zvyE~}BN9n$i*=<}`4O>^z+*-E_vK%K#$!TaVh(wtUpWkA>RDJ)Rjth62msTBmwSqN zwJwG7)Ni@DErN2uPnWX}Oe5>ThKUc({fQsc$p=FKtGDzf_T%-Fg_MIx?tBfsSrY64 z6J487Ked7*LxP#kvFaK5v@gFB0syGI-#f;>b!cNgSNfvTehDJ?t{E?`e7!O@Qw078 z`F0e^SR3n8S*3no@L>9LClfe7?S5-RdQ5aet6;vr=pELPmpW&&9eYFFto7Hq#CJYs z2ug#GNSmlhi>b z5kSm;{-g^fYRnsZfO!T$9NX#PfH6M>kFij}YIB-lqF-HlHZ` z-NRlUw07dq&`3mXPEM5~syn@topn`QpMJ5^oWNVLuE5@Yh@~Btp1mEd+tzkXCMq~i zoP};jkCiVlM&l4kY}?Rp;c^GESE9Da-qd3}nzuI`g@l!FfxwjLnXwXIxV5)mwckNO zc}Lh=-eNB2{unSP?g`b0ui*!!oDzg#bDd*8A@PPZd~9fNk+iba&gC%pueqo&IIBR6 zv_0&`HwkKH{lVY1(MiR*H>Uta@Z@3B<#l@(6xv_bv-?U6YTtuPHE9J06B0Nk2sG=A;FDQU^G9h(*hP2&{Aj#>X%DJ@@D+U$JTsY*5k^quHEY? zkNS)9a-C@1&W>MJMPTTzv5WN2e^^{98ZZ;XsaKLy>HBjxIC2x0!zNy6{RhrECwN;m zeMR9s9yt+YURs^9y7cL+zzo`}_IZgGEaDqmRQP?9*|izc7EXHH`oc z#$FAeI_JybosfbmkMs^aeZkD9$~fxn-5V*-qowQB z&ayy!&_hN3W$yrrRbOa6N`uv2x%Ju8A+VA&iWiFOt((@qv`_e2>P#q9VRN(7BG zURh3;i6pgrLU0)9-&WueLTt0v7&EL=L0wnZZcke<`2fyJzi3I2cy}_K$KE(eA+*l% zD6$Q%GN;A`jKX)Y9pikr4OC+9Unv+2g8&?8xxXAC{jhh)Me@IuIbfgq=-9ZRj4iYb zd4^Q)3+q?>BD{#{Xr1UaWD@tAW?Fz}b)>pSo({Oy#k?STfw+y}TT~gkuh0&puO+Up z*)4|WaOs3Bz#bUH6mKsatFt>QbRA!@4rKLuDmk>JES*GWp6_LnYU{J}J+GRVw6oJd zx9H+6peY44kS|>;Ph)Ne7Y;wrd-ah0LdsZ0@xiqf-dProlP?pb{HlIAR_=`)F4~<`t0Jy#Mz|ThJcLRJ5jQk<|$vg zO0JY^0dmcAcwnH4`2AiIwDxC_g@;1L#Rfg7gFEwbhAqG2s~&;PE^jupC3Z zvMp~p2U+V*Kgc#3#pc7PB0oO)WTD2gSu0i`Am|eO@Xla6neh+Sckk$9L$8K-Qtt=H zkfuOg!T|eYOiL^nTgvvkw|7Y?e4Y!~Gt*4(9_ZI!-r=O}Nv_8OX}~1ZhW>K0lj<5P zceX{I%&%O(!NKPDBfU&7DT%+18-(?E~YZ z8o;r|j&uwhY6~k{A6h*O?~iMu`HnFs){DA4eM;k2wv!nXLg&ysH`w`>{MG&K+0B1c zK&U22>a&R5a0GzVE1n24Q3WZUh46QSz%*w>q%w6T7qn}Itp8^}yr|iikb5h9)D%(m zySm)`v}e|yQQ_ow+bN5q&Alz@e?qj@ZWdF^^jG(LDZw-sn-6rGbHvpS!=EDaN>z_R zM>8HFjHKgVsL=Aq1$rR=keO6~OdySG0Tz$@#`Jf~~;f-{+|&STH@);Q;VCg$v@CKJfukNlmybO5?xu1?e(^&{!Vs zN8R-XUEUSjRGG^Cq~*a0<(A#!Jq|lmav&Fb_dvQ?FY=$uY0Xg|kMaTU^cuVqCK>-I zA_iV=+_$Hz9vl(l@>YQ~@D8}MG01gY({Xn9G=az-Qz1;lZTqtl;?wfaO+FV2y6hNi zHB2?ktB%(wC_5nY75f&vnZMFA7K`cF6sfw`#uF97R_ei!8C@-tltjknZ%BMvt1j(h z$+hpypj>vW5BNWZ@VfJ}d8dtd7Dh!3nqu(fOpNy!eg17G#VF>qJH>7+wgJE>Hf~7x zV@u%!eeIf>Mzqd6!K2mW?>!n02k~IpsUxz73m{y~yN(OF#}PSDlQRc2wl^w8pBBDA zwNDna=fCWr2m4qmTXKWuWjC(vcx!_$i=S4X3)m2osmZw%)iZ}!iYp(MiH;|S_C|Y* z)05X`XVqteA&U%ZtO_7zei~k0?y$QsRQv{{ILzG!r!lRn<;HkcU=EyDtCZYL%x*06 z60MgNEK?XbxvWoH1ZXn#4-^L$1yvzZIFr^0gvRh#-SBkQW-vkv!Qks)Dzs)x6hc2#cB`f=-r zhSk-himb#$0Pzj&R#?p!Q65Z9u0b9KpWt}I9-QPbw-;Rtc_dM80xEfn<;X?Ke`pL% zPp`RmZ3G#M1Bviz{Rxu|fcvIk;BV`ZqoHuD z79U_|p!@$x$3Hi1(|c+5HM0LYiCWP<-qAsfpOe3ieWOxVM)9+PiB7}1osTx0!a?)< zivQik?gV(FMxxYuiu34dXx}G`_MdfpH)5Zh?=@6&9xmalWDMg>RPmF4>G;n8_g`+d zB3HS%*#PYMH^R!O+V<216?LT*hy15g6VQFcpW;%(6@x+GS^VRjB|xkj4RWyB9j054k1P8?N^P z5bQm1p7RuAX`I!ynOE95=PM54&zjvf_!{}INcOisepg)l6I4O~jj_bvzS}IA+n#ye zCNlUU}aWC3Aj5WI&Z=;O=kJS1c;mwDi!(w z6FV<=uI7!;zOh_{hVM1e^av6X_YdbcMF`rR*_tqtuTZc;e?;S68L35Xc_tKOM0$sm z$2qkYYVt@>`NQfEs}EmSrj@}v$2j<7ni!A z{e37W2ve_kRP7W~ulgLzf$3Oppv%JwZcMo!w3c{u=C*Mx3-W|Nn$9D1Dk8H2!XIAi z-G$V@c%d3Z+zj;afcdn7CgTrY`tAjunU^|Dh6v`>D`ZtH>6VVM$;uoY9OUdjZm%bE zsMQ@^xIkLh%H5%-w6ulJ%V(DtZ#t65`6=spl^#MAB(7RNqhv*ZG=J08!`H?lo{47~ zOCiDvJ8BowdR%MjV6bO0T@E9rc9IhT-L|xsu5rrB9_D(DR4O^7ie$_!ro1Q>LF9>g~G+yVR+;@TWAoJUOkreO=<91XU zPZu3QbDtY-`%`dp-_<(9W$!qz_UZ_)2fwuJ4QD@FrHUN8snQmx;qZo4YrGa*^1Rtm ze>(FO&JQ_Tr4~FcQvZ&&>v#I^G6u}Bn}J_EV82+3v5rA9 z9Q~_R+qbm|@k3c;NZwYTbZY6{`?jdfyxb&1WYmv8a($svFh4lVq=s9UoFVbFyDO3B zlkQ+-5}3bVErG#O(K@vNvZ+_5TfV;cui!lsvWagUiu;iYHxjSRaWeSc%Z2S0kO#mz zJHPxhjyhHi&!O7>u}MjIfC%Mb>ZqRwtV^HiXghO%{6AnFUpnsnR5gIC_7|xv-$H75 z(3Tx0qh|Vds4<8K3nEP>!I+a3xt6b)|BY#&d>d;CPyGH1u%ppbYh7FZtAtO~FkD=| zF)WzUU3NU>XJX9C;^LJOujG0}OyscsN|>8&J{c%#et%cG1L~!RQKbc}$C=)deVQLz zpN3EEZ0gxnyL@>-@m)1Kc-cBHLD+{y?Y*2F!uQ`XmmnmFc!~CB#4)!gG%r9ts^!4Z?6l6trR(t8 z>kzI-!GsL@IxI14JD$Hx^VUszaHA{-pq_ib1`ca7_JlQ^&v%`sE|+{ReFfKb5Va=0 z&q>>XeSW~maAmM)SN*Alf&Ug25mpw44mU|z4)il0qqb~5bbF>|D2@_d!~(;DOg|LCYZbX6`YwNOxipopFE zGchqi@w*2=07IW{A>gtskb!Bps@_wNlk_RMzM?a+d6LJzGj#S75eSTs5q-yfZrrbt z>`zhuF5T~)n%det;Bx`Kb_Zfa>4$;U7mFmazzI^b+Q_pD`3J9%au!~GrTNM=GKp1l zurtpSacQpsu6GU1NRE%Osjy)PzB72;))z%+oy}+>*%$ZYEAZ)s^sa7fbZ4v<7ObT0 zpVcvfHU+xP-_qrX}JvXxE+Z#Dmbj(_2> zrNhrZIRiovw{o5$H9kC#Fg+^n=LPx!Dt9PC!+8Nw9?8`^zUjuRH=1LH^O_-`O%h0R zqgF?h!FBEAN#O9)zrET|6*c+lJddbQ|2$0oBmx!hPa>~@G zADwK8skb!SQ<`F`mgZu%t1`(vAhISEq(8MJ$mf{5ZdeVfUZYxl&HWmYv$!TYK6_9m z=sF`o5?;ZVXA4sADnsc^2DL9HC-00_I%%#FOdXwJOwT=T27zX4&(zLF4J>dz7FvQYbBLbsxysnB&;e!2Lr)?1S*TBW~*rh2P%CnwreCFW0swTPmy8 z{O~0HIW;=@t7s`w*c{gdGQDe8?deuc9tZ397d^R*Je$2L?1jJhi7P59`zwgUEPzZB zt#o#EHOisdwO_Q(DB9yfAQmwYxqVPCZbulY(qn6S#_N`S1$s?hF;XAr&r=biC%d!S|yUtM)=00x7MBuG(UL%>?I7;Wv=w9ov(@=%0PRP97c6 zH2Ca;c6Rpzetqdgd^%js#`N)g5-`$f`FK8_ub0M=_NOoFfFJsemE(b2v@@zxl!Uo$A14WWzwp`bkGExIrz$?rHlO6> z%>(Pvc~+nvsssfKCV9bI{Kuq_=2cBOiF~wwWKvzaLsZb}@hc zSpLJX(N&Mx(db3JR+{5c#1Nvks zN#%HpAlmhfbI%9Zz6c!T^;aFQw$emIbfv`o)v#Y9Uc1-E)$n;h>c;!Pkw>Vtf<+*O zahdCbpO^^zh43I?zUZ&^UU~>3N%x@0$xi4sR)C8=6sCw6PZ&%zz*%>i2^>!S8*2o# zm@kbXrA6+yeuY4~eynUHi7_s!x+zEovt&`;C+KNyi7f z8{=D5cUF!>)Mk8Eq^pMwLKa>$H2%xz$0!%wWo zvNATuma)eLqN%p~w${Y=54(GbZ(m!PKl?=gG5biJEq&0}E(r>h5spv5yYkI_gxIEWDjmm2V?7Xs81BJJArx+Gh1<68R zS;;;D6lwL_6V-o6`?`I;rL#1V?y zbKUNlz~q2LpE^E>PzW(UHl$^{&youHID(b^16n zM>FA(5dadh?5F=hpZ;jjQu7Ksvj;kICjO^gmjI@s_vi3X+ZJO;C zX;U$1f5RSTZ{QGYe?DeE?f*@@ex=Sp{lzHI>GR*wOC}D+2d^njUC7`orc<8;q}9^7 z?4?LH3-a>jeaXy(9KJ5t`>zr*qQ27Ugu0Ugw$cCJpOdL zOOV>r(oZ6MS1uyaC<&KF2KUPoC3QjnNPxe*^~Wkm9akzPFZb$InM;2wpUWSA6XbJr zTs4Gv4ti-Spt(XOo{PBd9F0$-$c!IrE$=ox6|Hed=N{1yCCbc|rn3L9xv-TE_wu)* zd$<9C6+`03Hovj(yWalcp-n-Sa%ctbUXcIJheh$w$@1MHZlBF&M`w4C4ZA#JF$vu) zC(R#s(rumOGW_7RvNt4L*LuEzj`}$v*A?Y2fIJlbNJ&tJM$Ap*E#ps2S)Lf2M!6Oi zuzl3B;nhJy;19SQ-TNujCQRZ%X$)m{f+BN&qZ&!;o)ke5X?*a!N`Ci&)9*R#jsem> z`WeR1*(t_tHUc@FUK{n=wWHplaj!=S`tr;RG#jz&i4@m%tXWJ5kj1}&mv)tp+_?IW zKHuueX}~Wg1qQ|Frvh*YwyWw!p1pem^F_j8)xQm%KUMG^$rDk8@#CBFoYizM7Ij7+u>?VbM-w?yGP;%Gtx6c= z)GGXW$uzYL$F#1+J|g)$E-|2SI4fKL?|JDor#Boe$LB}r#|C)=;VyI|!kFkhkMfz% zQ=7_pTO1k9yDoa<&1coqBGuV9ApSVx#R&A;i$9ABpmccu(WC#czm|$17jW~{H7O~i zj`*P$xM0ct=gM3T>IS9?#9DwR;T&Q*@j)Z^Rz~vzr#r_{C&;THo;2gQwGSA90D+24 zU&)0$GK!@CkG!+LhLt|b#eu<^i`6W-(;gcdy5TC+#bjoRh{7F`caNY__x03uiRj)i zoboj;isVViiBgHeWA2E4`DzP!SNGrjKa$tzm6=KDaayvoe5g!(TUIZCil)K-{`)d% z&)JgGlMetLc~g`_xl}sd(dXLniO#QHvb-t&G#}I%D#+nTB1CR>w#G>S{`u|^L;vjW zYsFu5yornP|26MDt(^CE&ab(7nGJ%KJ>|{j?rY!!*~Y$p2Y1{Jl|tJP+j6mipo@yF z0}7xKsR=3=_KuRX(E?smUq+YR#r<&)A9ea86hurUE-Ve{nKAVzsD;U7=L}M^c=F*w z?aKJ|$9w5S&0AlqBd={}uyu&YaYr}I8wWj&h){IZgYCA`C7w@Dat_=w@mLwZ^%1~s z+xfVCkIDc{*vvQspw20s>a?y`F-^zY`&$Br?iLDa5`GKbPTciQYrDTv0Nzz*AsOJG zU}y^(hQP%oIttdF4F3#%(6cja42LT_>qsb(YuX9hKXucF+Ox?%9-}WMS1`*QO_yBcGW=f`AsQD8rd~LeApzIO)7mDl%E99Sb=|Ad z%GT#Y2F$oVn-<9=3wRAlIZ<$1f3l&y@|5LTeLVRbC|yRxjwFh`R|o2zrx2su;+Z({ zx_NtkRp{Xh&K}G7Ceu`e-j9;+8AKV z#KEG=@BwSoZ|ijfk|g7PmPy}`Q(1C?Z$af%@d%gcs@u(p&L7P>mS7>9_yqsB@~yu( zO7sQA6bP|Lm+F+Vs9Qv}f#1qt_V2?LXmsB}ncW zyx>O`|GFDYpEWm&3*_P)g#>PvW%zocTfjkkdIaRl89R*CTQTZNdDc$wdzDYvHj6s1 zJ40vgJ@2AWQESFB<(?|^d;|~-wQwtmzivEu;R2J0uG8Yb)P3Q28G?j z!+3go)_^9$QI8vNmPrxo?HDJnw<(DcJ)o}g@{s!yOm2*!3>|MTl4)D z>ws7Ro9|h0vVdurJSnts=cLx%u+DUc8L#ixrfKLVN}znk@Iv1k?};6`%#%NLusTss zd997Q`#D$g8_d?`z;&+l;7##=R&D5#oEWmoxLF)YpUTC ztC~f1cxIs`Z@ha-%JJF~jtD_{!NA1xHk6SHmJ65HB6AXFZ zM{57ILt?a;_pTvMZQz1Oa*vxDjkmx4Zi3;3FADC;RH7!mxcrInmwx# z+c$ao^IJVgXZoz|Gy~3Xy&>SS4DT%CHc4?v9B18};Ich$e-s!9&!s z@VJ2>16*3NwtuS2!=p6BPEA2_>DTQx3OFe!)UQdrA?@YN3QX;PT%nXQqAD9dH=)eBA2?B*1yLUaYBY0bVo?A^ZFjRnYPcqanpsR zC@?9>3Lgasa3ADKKGnNlS4eVh0#>Pc!PdqnLF5!${%Ky>U14;mTlm@eDRF}HS1#W_ zS;4{avj9UKs5G=Y?Q2W%rYh62LQeIoUeAy~+)Fl+y^d?0xat5nZ9vu-GI%^>|3@R% zd+TW^?~nVBzWk?O%9fSk?+aTqGYJ^{7O`CkvZ+0m^P5G|@*Op_`yKm>zcuX?O!S0Q zDPtKIytXJxo2B17J4`$%*v@!A;-EeIIA4`~K#V8``?UDkk20Yp(?oz3$KU*G_HuUK zZF};_2Ej(@P_-%sTnxVr*<-c^uVlamFVShJh30cl`X0JYvn32;so!;GKNNz4^K}1F zG$IT9j=iiDF8pC=BZmt;pBl#ee4njj==F1+j(`al0~qgqrD-di2Gwg<5dC#40XV0H zaIrWVHZs3e$w@VPD#Bb?HQ1-^>2)U%a~Y8F(HK z;6Pwcl%+;1tV~jKI#jPZcV564IlF3wq^+cjXy<;VZM!*Rq;c<414Lx%=XNs5u38B7 zXEKU}4>7!d%|O0(7rW}4i@)STfao>)uupadT*cy6K<`toznCN!akXByo114#A4!Jd zqhO(*vNistTs&#>Jt=^baTNXpAGIR5cBc!|ermozyUUDgG2u1zOs~VJFS*4j1!l^) zO|C*sp$34TM@x;WnXCZy(1vj2{>x0~tiOMdV#V%9Sl}kM*%EYvT&kP+lZj;v;qSiJ z4s_}HTCfA``3Iq4bOMcgwO;cfx_c#cDFX4Hw?9-<~%LxJ4rT-R{jcr@UiitEC zR!oR68gqMWY=wdHACJdCYo=lEj!sEblPaWNj}}}S(5smYy4I^7Xnv;qN1wnUgu#qK z`UJZAEdV!7$^xS&0w?FO*c2f6Y3T4#ZN)+JN0k_OE%91C6hS-j`urexsJXc-)5!vq zmYTB~ZH}Yy0G{+GeiQT_lHdJ8xWv$j{DE{HK3NxE0_`L4Xh1km$%nGDayon}xg?Nf z@RwX6JGU~|R%iQzdl8Hx>L>BV+%P*k@P-A`HlP(Sjp!GRY%IS2ENmiVxyYtwX<0ei zGa(Fn1$cq~8DECqdwXJX_^o*^Ms<&?T+HA-mN^ezDW!>dgIa59HIcpRtFw)WG4& zTM5LnbDweDKS7N;50fcOC{gp)xfi2Vy*_<^!v4_nXm*wtNO{WV|3o}8SL)RP$ifX3 zYjH8vw`aZ3-waKCim!l1*55h@Z?&=WDbelg#Wu&EjH~w-#1zHXZU?lWB1*c!4Hq zmrBPi$fCWGh$Y}*+U}X#Kl*}kfk4wnraTb(as~gFc!6075^^x%{?MrBfUxA58v^dc z)Z4D2>kEZ_fMZyrZ#TubAvpL8;ah{Mer$YlpXnq$u9SwndTQt+d3h+WR>;2|GE>H= z+qgiUk8q7B;CVFR3}Af%a}&s|hz%>BnZSe_7DCj#4>k)7ZP!%gX&@61*F`{J%EH0; zeR*l(k2Gb0%Kyey>inRwKMX6<6&&&)3Uc^NUG3wl`q*Mqmp3zr&YYzWPTu?xG{>B)Kss zU{8Y{I5d0{pNI_JmjSRVS`G7!QUxc@8c@tCT^FBu@`|Chi0NU`@Ny65Wq}tD?gX7{ zI!@cQYXC?7!+yXH*%+0(uV;orv5|2@02EOFeKOa3izta?zB(pfUFJna-laDhk%P zhwaNjnPm=9X)7hhEzZTFeItM`7CsUsuP*I&mWfKi5N`p8^uL;b^tGk$XjQBM(1wBL zKS4u;w8Eu>oudsazD&;tu6?t3CjJM5<1u3V7&H2y&zzXX+1ZNr+$E=dra6(LTw{?oq?Sm#qoU9$Bhw$MSvlyk-&*f&Kod(e+X;a2JI!?|eP9_y;vl9t_ zn2@Ta@ejg>R=+E>V~~*@b2I!s@(hIH zKMu6hUp776oiaI^oA&8zptWw;N!{?7)wE6{!GGN+4x^wZ6P(-dxkTxfH2+mv&qd7iaY^P${@O|Z%m)X@++EPo z=U_+UOPgKV*C!`!^hI0mwNc}@7g~!CCH7}XcdV*8`p3}hoJ&o0RZu8ZM6)cn;{egQ zpeXk}Rmh$c_%PHLntZ~WK6z=_tJFk4PU2Tg=4sPu`A{a^*PfIg@@tbvM;gjjkeEnS zifj4=E7|V~`60F?8%=-OHN9GdJ(hoKis_>txFdFgijQFkLT&ZGOtkaPSSgHD6a~ z%YJ81%dhuD{-rfzEp9Eh_kA+RqraUPHcs5EWWxvgYn-nx)7B){^s~$ec3O{Jd2E z-&W#B!qMRHI`Rpg?mR~Hhk)xdPlc_E%Np5i%WX#*ZU^<^Wm#p2552>j+~TgKQ~B+g z2)4`GQy{_YGI>dHv1e4{X+fCAzmvIo4?(!v&2Lh%dp$C7soY-2a;&>U{Aj(h0ci)R zTKXx!*7tQ$OPK`KEIxN&uhKZ+GY~y&=-r>&FSjCInT`O}JUS>QD z`$+u_0{u+3jW0>ujnaKPF@id^@(+}vjLQthCbsjKNKmkmU?sZ{J8zn%(JktKTa-Uk zu8Q5Fdx#12eMk9g1G#OlJKDLACt{BM8=5bf=x>bo|B`vaLAxN@m+5~Yf zn<`s$VqB+ByK_vYyVk6Wkp9vPq>suy(&!ppPVllhr;|g8S}e2H1nKPi6Jg^12muz7 zaD8)Tcv4c7SU$zPpctRSPkf6LyK}yM>m{UN?_I1kB?dV~-RKfL{VX@V#qEuhW~81` zTJatG{@vyC>>CujjwQw=iXSCtvEi_y$%gp*1iD(=D$`I($?7Z5}hiwXC0a z6y?zLO%m=pV5q4*$P6UOPV73gLwIC3fhjQz2lT+7a{*}dN1m-L7Lh~4ewusYSx8#Q z+Iy<}Gf{4B7$;uo^W!$sH&#h#G~bHxT}(F_TS>k4jJ~yiY$k%RDch$9TUax$<8nj2)~67PVj~j3{#;hqnMMj3s4XG=jO_G^&;niu zvM9j0ntM^!`F&^@y-t?lS@7J(i)*C7J4P1wmiPHre!P^2ToUCwN-Cx?x>OAfV@|eh z-ukWCx3S=7V895kURTS#@%@6G_Drk0cLs-i2x27M8XY9|u7|cU!UY~1>JOBxZTR~g2h-7i zI(YCKHkn$1u6HU?8bS9leYtwIs&rsn!p9cvUfHn**FrR|V;H3@Vy`Luy@L2{>X7yH zUHsNv!c*KACZ`48s8DJWquUdH8x2S*H^ANO7{FC7^W_+ewW@}8mMK-e|g4~o|3OcJFV zbS_K4JTlTBp`@nej%z9#7O;d!W3Ry%mbvhzth_ny?%8LuaPo(wz>2Phs6yObiF7&* zHwK2}j0c@giSaCYfKPazgq-R-LD8L5XNinH=<~Nt%IG|u->mpVTk=|2wFlEVMM;k0 zxhU4_$I-t@&9>zMQmw`?$-je#zM?|4szw?iCd43>VoqCgF|?;I6LFykm0NO(spY?y zUR9tEj&7Z7rC)kw#w0WRK+q*k+P+$!f!yNJ6HePI*KJRGrhM~e`c6$P?B_@vhn_MQsG<{wo}^LS{qo53lK#jd9VI8y^_`)r91J~$MoVh}Tr6Ib z5q@D*!zbg5oGKmFJ(9Dpea`HW#d>lCX;xbfX>bL)uo$vF`v5}kxMZ`SUh>-KS5C`G z@!jO&hWfDzot)L`ss}A5K(t<&IT)?}a1zdAf{%>6auEvHeD`j_IjU~snU-VuEqKDL zk}(?@d*}Y+bJDO4J@9|6A51EY8>Z%>WU>c$r(G&$1fpM2a~Z8a$i|$=rHCJ_ zUfC)(%YIj1WrWsWn0h{3eNbNY=SKjLve5QvY8TdOs3+&!ZtKA1ckis;!>%xH?Z+hr z6KCiCF{K+gThQI+Vx1KVteyWJ>WVuFtoC%*bINfmS1fJ^Z+4k}A5$FM7>sr|1 zAfOLw`C}^d?}G)fD{ht(K~80j`+$w`yEH#Vq-vt2(l#LCv4W27h!_YJy)#%1{5RXC z(~=Fok}$@bF-u5TDWml-y~<${v9CtfEe6a}B}liCI%q>g(>Leku42`-=H5+xxl3{T z_BD-MoSpg5Gnz`kgUZJoH?wh8e{DVa7UjNoL$^!6sEW~Fa)sJ~mL0Ngs-=_5WP9U`Z$DtK|&c-%V^$4K* zCgrvM$YT?tIO4d)D1s8AjcqIc9YC0vmmliL@ZAXY+et0UY&b9ol&N6d-dh2Vnnl!1 zafP}pvn9p-u#D!0w>VHt?}k4Yxk6zOH+BdZ5Bdq@up_wTpVBzWuXNI6sJ3600TH;7`cns~WH5ZhDDz)t*e7q)iX; zwrrEBpYN@>d6ep9<^8QEpH=pDW8_maed-XKg^{j0Bk1?AM0Up!f0*)%nV0lAt2>hR z=peMfy8RA&CDhZF{ppO%$7}E2MJB;iv$b!MxyeD1{4Js99)(y!AyC!5Rh2OL^WxI& zL=c#H)zv?07qPXKVuQ!R*iiTlApIH_%3iTmSB>7KLJbW$>(!o)+1J`R;=g&uoIme$ zeNQR?c&WESqrToyWa@w8Dg=JIYh{LH7`XrMu0>m_A@?aKRAyN zVaDWTuljBtAG0(XygKf0SKDdpd7bi0&;={VC4Af8%+opuLk-D)VHDi_Ymn3Fj{=i+ z5d{T>+1MdDS@YuR3dJs4#>Ate)th>@!0}ryB1cw>tEftBySuqyh{zxzi59pN8IC9F z2-m@A-%vkpnmy|tFX)qhBxdV+Em%y^MG<>8CQg72VG_)5 zX*ltzo~?kOmT_z~nvEPK&y$?|o)3(dmeMtF<{ndu!jqD8H~vu7>R}k+4PGI4(wHeb zK_ssyJ684uWTG}>>xBz}M-%k-&cba;AIkE#7sJTgnBa#8a$P~hD!gbLklt|Ensl+- zibs=@$UEy7I!K|Pdi7civnQL!^Gka=I}b6tq|sfMr+7QKf020fnf7IEq*3p1gMXh% zO5dHo>R!1wZDsG9rTp z*TpkO8sz1Qs%{RN2*Z9A^K-qADagVId?01efh3_G=hs)%NzXSY>gs4dP;EU?R_<9$ z%u-bOZKDR^o<7{NtJM2h)p)~U^uYz5xXw;J>FP#`s>YD)II;DF2LBDqt`&;x^G#lT zbWfcP{*s1rJ=DzSDKn5Y*J{j&#k#GhMLNh8GAVB9x-{Hn_>xqN#O%1yTq~w1%Eh

pDsUJK1T8w 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 R_UK_L$g0ScO1=B`e*p|ze6Iii literal 0 HcmV?d00001 diff --git a/SnowplowSwiftDemo/SnowplowSwiftDemo/Base.lproj/LaunchScreen.storyboard b/Examples/CommonSwiftCode/Base.lproj/LaunchScreen.storyboard similarity index 100% rename from SnowplowSwiftDemo/SnowplowSwiftDemo/Base.lproj/LaunchScreen.storyboard rename to Examples/CommonSwiftCode/Base.lproj/LaunchScreen.storyboard diff --git a/SnowplowSwiftDemo/SnowplowSwiftDemo/Base.lproj/Main.storyboard b/Examples/CommonSwiftCode/Base.lproj/Main.storyboard similarity index 94% rename from SnowplowSwiftDemo/SnowplowSwiftDemo/Base.lproj/Main.storyboard rename to Examples/CommonSwiftCode/Base.lproj/Main.storyboard index f81afc08e..d3d82332b 100644 --- a/SnowplowSwiftDemo/SnowplowSwiftDemo/Base.lproj/Main.storyboard +++ b/Examples/CommonSwiftCode/Base.lproj/Main.storyboard @@ -1,11 +1,9 @@ - - - - + + - + @@ -20,7 +18,7 @@ - + - + - + @@ -61,16 +59,16 @@ - + - - + - + - + - + - + - + - + @@ -145,7 +142,7 @@ - + @@ -177,7 +174,7 @@