Skip to content

FIAM Programmatic triggers#3081

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

Merged
merged 79 commits into from
May 28, 2019
Merged
Show file tree
Hide file tree
Changes from 77 commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
d4ba006
Add card scene to storyboard, use IBDesignable rounded corners view
christibbs Feb 11, 2019
8ba72d8
Use IBdesignable rounded corners view for modal message
christibbs Feb 19, 2019
ed6db2d
Add card message type
christibbs Feb 19, 2019
cdacb13
Parse card message type, add new fields for secondary actions and lan…
christibbs Feb 19, 2019
ce90659
Display a really basic card message
christibbs Feb 20, 2019
f0d3149
Naive landscape image loading (needs error handling)
christibbs Mar 6, 2019
16c8ce8
Quick bug fix
christibbs Mar 6, 2019
866abe8
Wire up Display to show cards
christibbs Mar 7, 2019
49d2b21
Wire up Display to show cards
christibbs Mar 7, 2019
73189cf
Fix tablet width
christibbs Mar 7, 2019
7f68cf6
Pick right image for orientation
christibbs Mar 11, 2019
5cf57ba
Remove placeholder image sizing constraints at build time
christibbs Mar 19, 2019
6d5de7e
Add more test functionality
christibbs Mar 19, 2019
413189f
Better image sizes
christibbs Mar 19, 2019
306898e
Size message image out
christibbs Mar 21, 2019
18e31d2
Switch to body text view rather than body label
christibbs Mar 21, 2019
4d25033
Merge in master
christibbs Mar 26, 2019
6ca1a68
Make the body text view scrollable. Set correct text color on button.
christibbs Mar 27, 2019
d434545
Hook up buttons and text color
christibbs Mar 27, 2019
b87c0e5
Include action URL in messageClicked callback
christibbs Mar 27, 2019
d39b560
Fix action URL
christibbs Mar 27, 2019
4ffc0bd
Update pod specs
christibbs Mar 27, 2019
5f313f5
Update message clicked delegate to pass an action object, not just th…
christibbs Mar 28, 2019
3a408f1
Merge branch 'master' into fiam-card-display
christibbs Apr 8, 2019
6b19a1e
Change podspec versions back, hook up background color
christibbs Apr 8, 2019
a8df5be
Merge in master
christibbs Apr 16, 2019
04c8ad1
Don't animate scroll to top on scroll view
christibbs Apr 17, 2019
81584b3
Fix text scrolling bug
christibbs Apr 17, 2019
f4723cd
Fix portrait and landscape fetching code. Fix background color bug
christibbs Apr 24, 2019
95ae8be
Merge branch 'master' into fiam-card-display
christibbs Apr 24, 2019
4db3a3d
Flesh out FIRIAMMessageContentDataWithImageURLTests
christibbs Apr 29, 2019
d274e21
Fix up FIRIAMFetchFlowTests
christibbs Apr 29, 2019
3c8f8b3
Fix up FIRIAMMessageClientCacheTests
christibbs Apr 29, 2019
ad34c58
Fix up FIRIAMMessageDisplayForTesting
christibbs Apr 29, 2019
fac48d1
Fix fetching in FIRIAMMessageContentDataWithImageURL
christibbs Apr 29, 2019
121d595
Tests for message parsing
christibbs Apr 30, 2019
0decd64
Merge branch 'master' into fiam-card-display
christibbs Apr 30, 2019
dde5f48
Fix up view controllers for banner, modal, image only. Add a view con…
christibbs May 1, 2019
43ca3b2
Add required vertical compression resistance for primary and secondar…
christibbs May 6, 2019
6d8ee20
Add UI tests for card view controller
christibbs May 6, 2019
669245b
Add back deprecated messageClicked: method, call it if the newer meth…
christibbs May 6, 2019
7224d2e
Run scripts/styles.sh
christibbs May 7, 2019
feed33d
Merge branch 'master' into fiam-programmatic-triggers
christibbs May 7, 2019
bfd3d52
Add FIRIAMDisplayExecutor logic to display an in-app message programm…
christibbs May 7, 2019
5583219
Add a public method on FIRInAppMessaging that triggers a message to b…
christibbs May 7, 2019
1abe348
Add button to test app that programmatically triggers a message
christibbs May 7, 2019
6f807db
Merge branch 'master' into fiam-card-display
christibbs May 7, 2019
518abe7
Merge branch 'master' into fiam-programmatic-triggers
christibbs May 7, 2019
d9ac27e
Add unit tests for display executor programmatic trigger flow
christibbs May 7, 2019
e03ecea
Documentation cleanup
christibbs May 7, 2019
5ab3fc1
Merge branch 'fiam-card-display' into fiam-programmatic-triggers
christibbs May 7, 2019
ea331cf
Fix style in FIRIAMMessageContentDataWithImageURLTests.m
christibbs May 8, 2019
f719288
Add missing copyright notices
christibbs May 8, 2019
340dc0b
Merge branch 'master' into fiam-card-display
christibbs May 8, 2019
d248d86
Bump versions of both FIAM SDKS
christibbs May 13, 2019
af666be
Remove default.profraw
christibbs May 14, 2019
997b560
Address some logging punctuation nits. Cancel landscape image load if…
christibbs May 14, 2019
cd5ab98
Add missing error flow in image fetch. A few comment nits.
christibbs May 14, 2019
248c877
Shorten up init method for CardDisplayMessage
christibbs May 14, 2019
b158aca
Documentation updates
christibbs May 14, 2019
508739a
Deintegrate cocoa pods
christibbs May 14, 2019
01cdf45
Include landscape image data in test image load class
christibbs May 14, 2019
64d99d4
Fix Swift naming for InAppMessagingAction in UItests
christibbs May 15, 2019
1483cf6
Remove card message initializer from public API, place into a private…
christibbs May 15, 2019
ad4fbff
Merge branch 'master' into fiam-card-display
christibbs May 16, 2019
71b8817
Mark some properties on the card object as readonly that should've be…
christibbs May 16, 2019
5230541
Bump dependency on InAppMessaging given changes
christibbs May 17, 2019
1aa960a
Merge branch 'master' into fiam-card-display
christibbs May 20, 2019
3d2c22f
Bump versions in podspecs for both SDKs
christibbs May 20, 2019
8263366
Merge branch 'master' into fiam-card-display
christibbs May 23, 2019
8d00b77
Make all view model properties for message subclasses readonly
christibbs May 24, 2019
c26df20
Revert changes to other message subclasses
christibbs May 24, 2019
c863e1e
Make card view model properties readonly
christibbs May 24, 2019
689e822
Merge branch 'fiam-card-display' into fiam-programmatic-triggers
christibbs May 24, 2019
ebcb426
Run styles.sh
christibbs May 24, 2019
6e6dde3
Merge branch 'fiam-card-display' into fiam-programmatic-triggers
christibbs May 24, 2019
853bad6
Merge in master, fix conflicts
christibbs May 24, 2019
8e848b6
Run styles.sh, address some comments about logging
christibbs May 28, 2019
3ca83a6
Reuse analytic trigger method to show programmatic messages. Fix issu…
christibbs May 28, 2019
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Firebase/InAppMessaging/FIRInAppMessaging.m
Original file line numberDiff line numberDiff line change
Expand Up@@ -141,4 +141,8 @@ - (void)setMessageDisplayComponent:(id<FIRInAppMessagingDisplay>)messageDisplayC
messageDisplayComponent;
}

- (void)triggerEvent:(NSString *)eventName {
[[FIRIAMRuntimeManager getSDKRuntimeInstance].displayExecutor checkAndDisplayNextContextualMessageFromProgrammaticTrigger:eventName];
}

@end
2 changes: 2 additions & 0 deletions Firebase/InAppMessaging/Flows/FIRIAMDisplayExecutor.h
Original file line numberDiff line numberDiff line change
Expand Up@@ -53,6 +53,8 @@ NS_ASSUME_NONNULL_BEGIN
- (void)checkAndDisplayNextAppForegroundMessage;
// Check and display next in-app message eligible for analytics event trigger with given event name.
- (void)checkAndDisplayNextContextualMessageForAnalyticsEvent:(NSString *)eventName;
// Check and display next in-app message eligible to be triggered programmatically.
- (void)checkAndDisplayNextContextualMessageFromProgrammaticTrigger:(NSString *)triggerName;

// a boolean flag that can be used to suppress/resume displaying messages.
@property(nonatomic) BOOL suppressMessageDisplay;
Expand Down
35 changes: 35 additions & 0 deletions Firebase/InAppMessaging/Flows/FIRIAMDisplayExecutor.m
Original file line numberDiff line numberDiff line change
Expand Up@@ -373,6 +373,41 @@ - (void)checkAndDisplayNextContextualMessageForAnalyticsEvent:(NSString *)eventN
}
}

- (void)checkAndDisplayNextContextualMessageFromProgrammaticTrigger:(NSString *)triggerName {
// synchronizing on self so that we won't potentially enter the render flow from two
// threads: example like showing analytics triggered message and a regular app open
// triggered message
@synchronized(self) {
if (self.suppressMessageDisplay) {
FIRLogDebug(kFIRLoggerInAppMessaging, @"I-IAM400040",
@"Message display is being suppressed. No message rendering from "
"programmatic trigger.");
return;
}

if (!self.messageDisplayComponent) {
FIRLogDebug(kFIRLoggerInAppMessaging, @"I-IAM400041",
@"Message display component is not present yet. No display should happen.");
return;
}

if (self.isMsgBeingDisplayed) {
FIRLogDebug(kFIRLoggerInAppMessaging, @"I-IAM400042",
@"An in-app message display is in progress, do not render programmatically "
"triggered message.");
return;
}

FIRIAMMessageDefinition *nextTriggerBasedMessage =
[self.messageCache nextOnFirebaseAnalyticEventDisplayMsg:triggerName];

if (nextTriggerBasedMessage) {
[self displayForMessage:nextTriggerBasedMessage
triggerType:FIRInAppMessagingDisplayTriggerTypeProgrammatic];
}
}
}

- (FIRInAppMessagingCardDisplay *)
cardDisplayMessageWithMessageDefinition:(FIRIAMMessageDefinition *)definition
portraitImageData:(FIRInAppMessagingImageData *)portraitImageData
Expand Down
5 changes: 5 additions & 0 deletions Firebase/InAppMessaging/Public/FIRInAppMessaging.h
Original file line numberDiff line numberDiff line change
Expand Up@@ -77,6 +77,11 @@ NS_SWIFT_NAME(InAppMessaging)
*/
@property(nonatomic) id<FIRInAppMessagingDisplay> messageDisplayComponent;

/**
* Directly requests an in-app message with the given trigger to be shown.
*/
- (void)triggerEvent:(NSString *)eventName;

/**
* This delegate should be set on the app side to receive message lifecycle events in app runtime.
*/
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,7 +27,8 @@ typedef NS_ENUM(NSInteger, FIRInAppMessagingDisplayMessageType) {

typedef NS_ENUM(NSInteger, FIRInAppMessagingDisplayTriggerType) {
FIRInAppMessagingDisplayTriggerTypeOnAppForeground,
FIRInAppMessagingDisplayTriggerTypeOnAnalyticsEvent
FIRInAppMessagingDisplayTriggerTypeOnAnalyticsEvent,
FIRInAppMessagingDisplayTriggerTypeProgrammatic
};

/** Contains the display information for an action button.
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,7 @@ @interface AutoDisplayFlowViewController ()
@property(weak, nonatomic) IBOutlet UITextField *autoDisplayIntervalText;
@property(weak, nonatomic) IBOutlet UITextField *autoFetchIntervalText;
@property(weak, nonatomic) IBOutlet UITextField *eventNameText;
@property(weak, nonatomic) IBOutlet UITextField *programmaticTriggerNameText;
@property(nonatomic) FIRIAMRuntimeManager *sdkRuntime;
@property(weak, nonatomic) IBOutlet UIButton *disableEnableSDKBtn;
@property(weak, nonatomic) IBOutlet UIButton *changeDataCollectionBtn;
Expand DownExpand Up@@ -77,6 +78,12 @@ - (IBAction)triggerAnalyticEventTapped:(id)sender {
[FIRAnalytics logEventWithName:self.eventNameText.text parameters:@{}];
}

- (IBAction)triggerProgrammaticallyTapped:(id)sender {
NSLog(@"Trigger message programmatically: %@", self.eventNameText.text);

[[FIRInAppMessaging inAppMessaging] triggerEvent:self.programmaticTriggerNameText.text];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if (![touch.view isMemberOfClass:[UITextField class]]) {
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="Ebq-cZ-Ywc">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="Ebq-cZ-Ywc">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
Expand All@@ -24,13 +22,13 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<containerView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Nbf-aL-D4Q">
<rect key="frame" x="0.0" y="320.5" width="375" height="287.5"/>
<rect key="frame" x="0.0" y="370.5" width="375" height="237.5"/>
<connections>
<segue destination="PsL-F0-NPD" kind="embed" identifier="message-table-segue" id="Ruf-dB-QUH"/>
</connections>
</containerView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Messages To Display" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2lf-ei-PaY">
<rect key="frame" x="0.0" y="292" width="375" height="20.5"/>
<rect key="frame" x="0.0" y="342" width="375" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
Expand All@@ -49,14 +47,6 @@
<constraint firstAttribute="height" constant="2" id="qn7-el-C36"/>
</constraints>
</view>
<button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="TWl-ic-ODQ">
<rect key="frame" x="14" y="247" width="138" height="30"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<state key="normal" title="Trigger analytics event"/>
<connections>
<action selector="triggerAnalyticEventTapped:" destination="pEd-Cp-eSk" eventType="touchUpInside" id="IEI-K3-ihJ"/>
</connections>
</button>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3kb-Du-qxH" userLabel="Top Half View">
<rect key="frame" x="0.0" y="40" width="375" height="190"/>
<subviews>
Expand DownExpand Up@@ -97,7 +87,7 @@
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ZUt-bH-BSp">
<rect key="frame" x="10" y="90" width="355" height="28"/>
<rect key="frame" x="10" y="89.5" width="355" height="28"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<state key="normal" title="Apply Displa/Fetch Frequency Change"/>
<connections>
Expand DownExpand Up@@ -171,19 +161,44 @@
<constraint firstItem="Erp-ss-RqT" firstAttribute="leading" secondItem="3kb-Du-qxH" secondAttribute="leading" constant="10" id="yst-Bp-eIN"/>
</constraints>
</view>
<button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="TWl-ic-ODQ">
<rect key="frame" x="14" y="247" width="138" height="30"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<state key="normal" title="Trigger analytics event"/>
<connections>
<action selector="triggerAnalyticEventTapped:" destination="pEd-Cp-eSk" eventType="touchUpInside" id="IEI-K3-ihJ"/>
</connections>
</button>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="test_event" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="M0T-f0-qfn">
<rect key="frame" x="182" y="247" width="173" height="30"/>
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<textInputTraits key="textInputTraits"/>
</textField>
<button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="PA9-qD-Z5X">
<rect key="frame" x="14" y="287" width="152" height="30"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<state key="normal" title="Trigger programmatically"/>
<connections>
<action selector="triggerAnalyticEventTapped:" destination="pEd-Cp-eSk" eventType="touchUpInside" id="74T-tl-wdH"/>
<action selector="triggerProgrammaticallyTapped:" destination="pEd-Cp-eSk" eventType="touchUpInside" id="jPY-TA-aJN"/>
</connections>
</button>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="test_trigger" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Qzz-aW-vHr">
<rect key="frame" x="196" y="287" width="159" height="30"/>
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<textInputTraits key="textInputTraits"/>
</textField>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="2lf-ei-PaY" firstAttribute="leading" secondItem="27y-ro-ncL" secondAttribute="leading" id="0g2-Zm-MAm"/>
<constraint firstItem="FB6-Ej-jmi" firstAttribute="top" secondItem="3kb-Du-qxH" secondAttribute="bottom" constant="5" id="19L-XJ-rNE"/>
<constraint firstAttribute="trailing" secondItem="2lf-ei-PaY" secondAttribute="trailing" id="2sG-IE-v1C"/>
<constraint firstItem="PA9-qD-Z5X" firstAttribute="top" secondItem="TWl-ic-ODQ" secondAttribute="bottom" constant="10" id="3d8-nF-Yf8"/>
<constraint firstAttribute="trailing" secondItem="Nbf-aL-D4Q" secondAttribute="trailing" id="3nJ-jP-296"/>
<constraint firstAttribute="trailing" secondItem="Qzz-aW-vHr" secondAttribute="trailing" constant="20" id="56F-2K-y7M"/>
<constraint firstItem="M0T-f0-qfn" firstAttribute="bottom" secondItem="TWl-ic-ODQ" secondAttribute="bottom" id="68L-bx-rfi"/>
<constraint firstItem="QzN-45-brV" firstAttribute="leading" secondItem="Nbf-aL-D4Q" secondAttribute="leading" id="68c-cK-w0l"/>
<constraint firstItem="QzN-45-brV" firstAttribute="top" secondItem="Nbf-aL-D4Q" secondAttribute="bottom" constant="10" id="CCo-W9-Nwb"/>
Expand All@@ -195,13 +210,17 @@
<constraint firstItem="3kb-Du-qxH" firstAttribute="centerX" secondItem="27y-ro-ncL" secondAttribute="centerX" id="Um3-SX-kub"/>
<constraint firstItem="TWl-ic-ODQ" firstAttribute="top" secondItem="FB6-Ej-jmi" secondAttribute="bottom" constant="10" id="YYp-3Y-QXH"/>
<constraint firstItem="FB6-Ej-jmi" firstAttribute="width" secondItem="27y-ro-ncL" secondAttribute="width" id="aGR-qE-35f"/>
<constraint firstItem="Qzz-aW-vHr" firstAttribute="top" secondItem="PA9-qD-Z5X" secondAttribute="top" id="btv-LV-CyU"/>
<constraint firstAttribute="trailing" secondItem="M0T-f0-qfn" secondAttribute="trailing" constant="20" id="cHW-QJ-D5z"/>
<constraint firstItem="PA9-qD-Z5X" firstAttribute="leading" secondItem="TWl-ic-ODQ" secondAttribute="leading" id="f4g-bo-YSa"/>
<constraint firstItem="Qzz-aW-vHr" firstAttribute="leading" secondItem="PA9-qD-Z5X" secondAttribute="trailing" constant="30" id="gAn-fn-Xoj"/>
<constraint firstItem="M0T-f0-qfn" firstAttribute="top" secondItem="TWl-ic-ODQ" secondAttribute="top" id="hHq-ch-Cw9"/>
<constraint firstItem="fcu-KV-0co" firstAttribute="top" secondItem="Nbf-aL-D4Q" secondAttribute="bottom" constant="10" id="iF9-YE-7Bh"/>
<constraint firstItem="M0T-f0-qfn" firstAttribute="leading" secondItem="TWl-ic-ODQ" secondAttribute="trailing" constant="30" id="oK4-kd-ngD"/>
<constraint firstItem="QzN-45-brV" firstAttribute="trailing" secondItem="Nbf-aL-D4Q" secondAttribute="trailing" id="ore-FG-3Z5"/>
<constraint firstItem="Qzz-aW-vHr" firstAttribute="bottom" secondItem="PA9-qD-Z5X" secondAttribute="bottom" id="qZw-4h-RVV"/>
<constraint firstItem="Nbf-aL-D4Q" firstAttribute="leading" secondItem="27y-ro-ncL" secondAttribute="leading" id="rHM-kR-Ebu"/>
<constraint firstItem="2lf-ei-PaY" firstAttribute="top" secondItem="FB6-Ej-jmi" secondAttribute="bottom" constant="55" id="xhl-Hf-WDB"/>
<constraint firstItem="2lf-ei-PaY" firstAttribute="top" secondItem="FB6-Ej-jmi" secondAttribute="bottom" constant="105" id="xhl-Hf-WDB"/>
<constraint firstItem="TWl-ic-ODQ" firstAttribute="leading" secondItem="27y-ro-ncL" secondAttribute="leading" constant="14" id="zTT-qI-tld"/>
</constraints>
</view>
Expand All@@ -212,11 +231,12 @@
<outlet property="changeDataCollectionBtn" destination="KCx-gs-cUi" id="MWc-Kk-IWX"/>
<outlet property="disableEnableSDKBtn" destination="nUy-hl-LzV" id="Sm9-9g-Uc5"/>
<outlet property="eventNameText" destination="M0T-f0-qfn" id="PJw-AR-bWa"/>
<outlet property="programmaticTriggerNameText" destination="Qzz-aW-vHr" id="FaS-3C-yYa"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="1YW-qT-fHJ" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="339.13043478260875" y="1420.108695652174"/>
<point key="canvasLocation" x="338.39999999999998" y="1419.9400299850076"/>
</scene>
<!--Viewing Logs-->
<scene sceneID="1fw-sb-9xA">
Expand DownExpand Up@@ -327,7 +347,7 @@
<objects>
<tableViewController id="PsL-F0-NPD" customClass="AutoDisplayMesagesTableVC" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="qfr-gm-4ZH">
<rect key="frame" x="0.0" y="0.0" width="375" height="287.5"/>
<rect key="frame" x="0.0" y="0.0" width="375" height="237.5"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<prototypes>
Expand Down
Loading
close