Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: added support for device mode transformations #160

Merged
merged 62 commits into from Apr 19, 2023
Merged
Show file tree
Hide file tree
Changes from 60 commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
87234e2
Initial changes for DB Migrations
desusai7 May 31, 2022
939a355
Added required tables for the support of device mode transformations
desusai7 May 31, 2022
0d40e1b
Added Support for Maintaining the status of the event and initiated t…
desusai7 Jun 3, 2022
c5ff82d
Flushing Events to Transformation Server Periodically
desusai7 Jun 13, 2022
a54af70
Using fromHistory flag for replaying messages to better maintain the …
desusai7 Jun 13, 2022
4ccd59e
Updated Parsing logic as per the response of the sourceConfig endpoint
desusai7 Jun 13, 2022
03af1af
Imposed Max Batch Size for the /transform endpoint as well and made t…
desusai7 Jun 14, 2022
02ec6f9
Updated the Device Mode Transformations logic as per the design changes
desusai7 Jun 23, 2022
761901e
Fixed the issue of Multiple threads in parallel for Transformation Pr…
desusai7 Jun 30, 2022
52c9633
Fixed issues while converting back json to RSMessage
desusai7 Jun 30, 2022
4c0ebee
Stopped Sending DestinationIds in the payload to transformation service
desusai7 Jul 11, 2022
535164b
Modified Parsing logic of response from Transformation Service
desusai7 Jul 13, 2022
0faf500
Added Unit Test Cases for Device Mode Transformations
desusai7 Jul 19, 2022
b7bdba9
Minor changes
desusai7 Jul 19, 2022
96d1480
Checking Status at Event Level in case of Transformed Events for Devi…
desusai7 Aug 9, 2022
1e7922a
Improved the performance by optimizing the db operations
desusai7 Aug 9, 2022
323835f
Refactored the EventRepository and DMT Logic
desusai7 Aug 9, 2022
4cb239f
Merge branch 'develop' into feature/deviceModeTransformations
desusai7 Aug 10, 2022
b66f612
Merge branch 'feature/deviceModeTransformations' into feature/dmtUnit…
desusai7 Aug 10, 2022
53f5c76
Merge pull request #192 from rudderlabs/feature/dmtUnitTest
desusai7 Aug 10, 2022
443f420
Added Logs and Addressed comments
desusai7 Aug 10, 2022
9bca1e2
Handled Few Edges cases in Device Mode Transformations
desusai7 Aug 11, 2022
cc6ac8e
Updated Logs
desusai7 Aug 11, 2022
b0c4e86
Merge branch 'feature/deviceModeTransformations' of github.com:rudder…
desusai7 Aug 11, 2022
d5e1587
Updated the logic for starting the device mode transformation processor
desusai7 Aug 11, 2022
b38343f
Deleted the .DS_STORE files
desusai7 Aug 12, 2022
a6e038d
Updated Unit Test Cases
desusai7 Aug 16, 2022
c9538cc
Added Back Message Status to RSDBMessage
desusai7 Aug 16, 2022
75b2daa
Considering SourceConfig fetch as successful if and only if status co…
desusai7 Aug 16, 2022
6fcedec
Minor changes
desusai7 Aug 16, 2022
5353bcd
Delete .DS_Store
desusai7 Aug 17, 2022
82e0614
Modified the dumping logic to the factories
desusai7 Aug 17, 2022
aa9d360
Merge branch 'feature/deviceModeTransformations' of github.com:rudder…
desusai7 Aug 17, 2022
5e225f9
Merge branch 'master' of github.com:rudderlabs/rudder-sdk-ios into fe…
desusai7 Aug 18, 2022
afe660e
Fixed Issues with Strong References
desusai7 Aug 25, 2022
518a14f
Asthetic changes for Version 1.8.0.beta.1
pallabmaiti Oct 17, 2022
6ce8a86
Merge branch 'develop' into feature/deviceModeTransformations
Oct 19, 2022
24b04c2
feat: added support for sending custom auth token for CTS
Nov 21, 2022
08c71fa
fix: swift package manager umbrella header warning
Mar 15, 2023
52ff309
Merge branch 'develop' into feature/deviceModeTransformations
Mar 19, 2023
9822bc9
fix: fixed merge issues
Mar 19, 2023
06d185a
fix: fixed merge issues and unit tests
Mar 20, 2023
c9c8ebb
chore: fixed issues with xcode proj
Mar 21, 2023
f0a063a
fix: fixed issues with the session refresh on in-activity expire
Mar 21, 2023
7167fd7
Merge branch 'feature/deviceModeTransformations' into feat/tokenisati…
Mar 21, 2023
6eaf328
feat: sending auth token as part of body to cts server
Mar 21, 2023
4104d98
Merge pull request #232 from rudderlabs/feat/tokenisationCT
desusai7 Mar 21, 2023
dceed03
Merge branch 'develop' of github.com:rudderlabs/rudder-sdk-ios into d…
Mar 21, 2023
25c5313
Merge branch 'develop' into feature/deviceModeTransformations
Mar 21, 2023
6bba6d2
move the new test files to Tests directory
pallabmaiti Mar 21, 2023
810643d
refactor: moved all enums to single class and improved method names
Mar 22, 2023
4a11d56
Merge branch 'feature/deviceModeTransformations' of github.com:rudder…
Mar 22, 2023
9a22528
fixed test
pallabmaiti Mar 22, 2023
28da414
chore: update sample app for dmt testing
Mar 22, 2023
fdc5c7a
chore: bumped version to 1.13.0.beta.1
Mar 22, 2023
126c73b
fix: fixed warnings during sdk build
Mar 22, 2023
670cb56
fix: fixed bugs found in sonar cloud
Mar 22, 2023
94bf419
fix: minor changes in putAuthToken
Mar 22, 2023
dc5f76c
chore: minor casing changes
Mar 22, 2023
4c1dfb0
chore: minor fixes
Mar 22, 2023
568a95a
Merge branch 'develop' into feature/deviceModeTransformations
desusai7 Apr 19, 2023
f39554d
fix: fixed issues with merge conflicts
Apr 19, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Expand Up @@ -18,6 +18,7 @@ DerivedData/
*.perspectivev3
!default.perspectivev3
xcuserdata/
.DS_Store

## Other
*.moved-aside
Expand Down Expand Up @@ -74,4 +75,4 @@ IDEWorkspaceChecks.plist

# Sonar
relative_or_absolute_path_to_cache_location
compile_commands.json
compile_commands.json
5 changes: 5 additions & 0 deletions CHANGELOG.md
Expand Up @@ -2,6 +2,11 @@

All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.

## Version - 1.13.0.beta.1 - 2023-03-22
### Feature
- Device Mode Transformations


### [1.12.1](https://github.com/rudderlabs/rudder-sdk-ios/compare/v1.12.0...v1.12.1) (2023-03-21)


Expand Down
Expand Up @@ -12,7 +12,6 @@
6003F58E195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; };
6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58F195388D20070C39A /* CoreGraphics.framework */; };
6003F592195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; };
ED3B022E272A6588000893AA /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = ED3B022D272A6588000893AA /* GoogleService-Info.plist */; };
ED7619FF2727E28800B086F4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = ED7619ED2727E28700B086F4 /* InfoPlist.strings */; };
ED761A002727E28800B086F4 /* CustomIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = ED7619EF2727E28700B086F4 /* CustomIntegration.m */; };
ED761A012727E28800B086F4 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = ED7619F32727E28700B086F4 /* LaunchScreen.storyboard */; };
Expand All @@ -33,7 +32,6 @@
6003F58F195388D20070C39A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
6003F591195388D20070C39A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
6003F5AF195388D20070C39A /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
ED3B022D272A6588000893AA /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
ED3B022F272A67AB000893AA /* RudderSampleAppObjC.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RudderSampleAppObjC.entitlements; sourceTree = "<group>"; };
ED7619EC2727E28700B086F4 /* RudderSampleAppObjC-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "RudderSampleAppObjC-Info.plist"; sourceTree = "<group>"; };
ED7619EE2727E28700B086F4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
Expand Down Expand Up @@ -122,7 +120,6 @@
ED7619FC2727E28800B086F4 /* CustomFactory.m */,
ED7619FB2727E28800B086F4 /* CustomIntegration.h */,
ED7619EF2727E28700B086F4 /* CustomIntegration.m */,
ED3B022D272A6588000893AA /* GoogleService-Info.plist */,
ED7619FA2727E28800B086F4 /* Images.xcassets */,
ED7619ED2727E28700B086F4 /* InfoPlist.strings */,
ED7619F32727E28700B086F4 /* LaunchScreen.storyboard */,
Expand Down Expand Up @@ -196,7 +193,6 @@
files = (
ED761A012727E28800B086F4 /* LaunchScreen.storyboard in Resources */,
ED761A052727E28800B086F4 /* Images.xcassets in Resources */,
ED3B022E272A6588000893AA /* GoogleService-Info.plist in Resources */,
ED7619FF2727E28800B086F4 /* InfoPlist.strings in Resources */,
ED761A022727E28800B086F4 /* Main.storyboard in Resources */,
);
Expand All @@ -212,18 +208,38 @@
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-RudderSampleAppObjC/Pods-RudderSampleAppObjC-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/Amplitude/Amplitude.framework",
"${BUILT_PRODUCTS_DIR}/Appboy-iOS-SDK/Appboy_iOS_SDK.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseInstallations/FirebaseInstallations.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseMessaging/FirebaseMessaging.framework",
"${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework",
"${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework",
"${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework",
"${BUILT_PRODUCTS_DIR}/Protobuf/Protobuf.framework",
"${BUILT_PRODUCTS_DIR}/Rudder-iOS/Rudder.framework",
"${BUILT_PRODUCTS_DIR}/Rudder-iOS10.0/Rudder.framework",
"${BUILT_PRODUCTS_DIR}/Rudder-Amplitude/Rudder_Amplitude.framework",
"${BUILT_PRODUCTS_DIR}/Rudder-Braze/Rudder_Braze.framework",
"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
"${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Amplitude.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Appboy_iOS_SDK.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreDiagnostics.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreInternal.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseInstallations.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseMessaging.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleDataTransport.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Protobuf.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Rudder.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Rudder_Amplitude.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Rudder_Braze.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework",
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down Expand Up @@ -407,13 +423,14 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = RudderSampleAppObjC/RudderSampleAppObjC.entitlements;
CURRENT_PROJECT_VERSION = 1;
CURRENT_PROJECT_VERSION = 2;
DEVELOPMENT_TEAM = GTGKNDBD23;
EXCLUDED_ARCHS = "";
GCC_NO_COMMON_BLOCKS = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "RudderSampleAppObjC/RudderSampleAppObjC-Prefix.pch";
INFOPLIST_FILE = "$(SRCROOT)/RudderSampleAppObjC/RudderSampleAppObjC-Info.plist";
MARKETING_VERSION = 1.1;
MODULE_NAME = ExampleApp;
PRODUCT_BUNDLE_IDENTIFIER = com.rudderstack.ios.test.objc;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand All @@ -428,12 +445,13 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = RudderSampleAppObjC/RudderSampleAppObjC.entitlements;
CURRENT_PROJECT_VERSION = 1;
CURRENT_PROJECT_VERSION = 2;
DEVELOPMENT_TEAM = GTGKNDBD23;
GCC_NO_COMMON_BLOCKS = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "RudderSampleAppObjC/RudderSampleAppObjC-Prefix.pch";
INFOPLIST_FILE = "$(SRCROOT)/RudderSampleAppObjC/RudderSampleAppObjC-Info.plist";
MARKETING_VERSION = 1.1;
MODULE_NAME = ExampleApp;
PRODUCT_BUNDLE_IDENTIFIER = com.rudderstack.ios.test.objc;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down
Expand Up @@ -28,6 +28,16 @@
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "F63CBCAC2846422900A3F71D"
BuildableName = "RudderTests.xctest"
BlueprintName = "RudderTests"
ReferencedContainer = "container:../../Rudder.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
Expand Down
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19529" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="whP-gf-Uak">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="whP-gf-Uak">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19519"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
Expand All @@ -19,40 +19,58 @@
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DIf-Gm-9gZ">
<rect key="frame" x="80" y="298" width="136" height="128"/>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="z9H-GZ-JuV">
<rect key="frame" x="150" y="243" width="66" height="35"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain" title="ManageThreads"/>
<buttonConfiguration key="configuration" style="plain" title="Track"/>
<connections>
<action selector="manageThreads:" destination="whP-gf-Uak" eventType="touchUpInside" id="Jb7-6A-fE3"/>
<action selector="sendTrack:" destination="whP-gf-Uak" eventType="touchUpInside" id="v8K-0m-POX"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Kfr-Nc-oPb">
<rect key="frame" x="136" y="79" width="149" height="80"/>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Viw-di-Rec">
<rect key="frame" x="148" y="309" width="78" height="35"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain" title="Different externalId"/>
<buttonConfiguration key="configuration" style="plain" title="Screen"/>
<connections>
<action selector="identifyDifferentExternalId:" destination="whP-gf-Uak" eventType="touchUpInside" id="0gj-Lo-wgf"/>
<action selector="sendScreen:" destination="whP-gf-Uak" eventType="touchUpInside" id="cQ4-HW-Ke8"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="O0o-4Q-7aM">
<rect key="frame" x="33" y="167" width="125" height="101"/>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yd2-WE-9Hv">
<rect key="frame" x="146" y="385" width="72" height="35"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain" title="Track"/>
<buttonConfiguration key="configuration" style="plain" title="Group"/>
<connections>
<action selector="sendGroup:" destination="whP-gf-Uak" eventType="touchUpInside" id="KfM-fB-Ii2"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gZF-RJ-EZv">
<rect key="frame" x="152" y="463" width="61" height="35"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain" title="Alias"/>
<connections>
<action selector="track:" destination="whP-gf-Uak" eventType="touchUpInside" id="CYM-gm-6QV"/>
<action selector="sendAlias:" destination="whP-gf-Uak" eventType="touchUpInside" id="893-dv-oLE"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="BCw-vL-pfH">
<rect key="frame" x="65" y="456" width="127" height="81"/>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="o3a-wr-ziU">
<rect key="frame" x="148" y="547" width="68" height="35"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain" title="Reset"/>
<connections>
<action selector="reset:" destination="whP-gf-Uak" eventType="touchUpInside" id="l7L-9X-ncJ"/>
<action selector="sendReset:" destination="whP-gf-Uak" eventType="touchUpInside" id="DJR-le-sQ9"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bGR-O2-oAe">
<rect key="frame" x="146" y="176" width="81" height="35"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain" title="Identify"/>
<connections>
<action selector="sendIdentify:" destination="whP-gf-Uak" eventType="touchUpInside" id="cIr-mz-suD"/>
</connections>
</button>
</subviews>
Expand Down

This file was deleted.

Expand Up @@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleURLTypes</key>
Expand Down
Expand Up @@ -15,4 +15,11 @@

@property (strong, nonatomic) UIWindow *window;

+ (void) sendIdentify;
+ (void) sendTrack;
+ (void) sendScreen;
+ (void) sendGroup;
+ (void) sendAlias;
+ (void) sendReset;

@end