Adds example flipper plugin in swift sample app (#329)
Summary: This PR adds the example flipper plugin in swift sample app. Example flipper plugin acts as an example for the plugin authors. The example flipper plugin was already added in an objective c example but the swift sample app didn't have it. Pull Request resolved: https://github.com/facebook/flipper/pull/329 Reviewed By: jknoxville Differential Revision: D13085611 Pulled By: priteshrnandgaonkar fbshipit-source-id: d86cca43e95592ecca8d9991d170e62170b8217b
This commit is contained in:
committed by
Facebook Github Bot
parent
ed93c98313
commit
6e1c1d57f9
@@ -71,6 +71,7 @@ Pod::Spec.new do |spec|
|
||||
'iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutComponentKitSupport/FlipperKitLayoutComponentKitSupport.h',
|
||||
'iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutComponentKitSupport/SKSubDescriptor.h',
|
||||
'iOS/FBDefines/FBMacros.h',
|
||||
'iOS/Plugins/FlipperKitExamplePlugin/FlipperKitExamplePlugin/FlipperKitExamplePlugin.h',
|
||||
'iOS/FlipperKit/**/{FlipperDiagnosticsViewController,FlipperStateUpdateListener,FlipperClient,FlipperPlugin,FlipperConnection,FlipperResponder,SKMacros}.h'
|
||||
header_search_paths = "\"$(PODS_ROOT)/FlipperKit/iOS/FlipperKit\" \"$(PODS_ROOT)\"/Headers/Private/FlipperKit/** \"$(PODS_ROOT)/boost-for-react-native\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/PeerTalkSonar\""
|
||||
ss.pod_target_xcconfig = { "USE_HEADERMAP" => "NO",
|
||||
|
||||
@@ -9,6 +9,7 @@ target 'SampleSwift' do
|
||||
pod 'FlipperKit', :path => '../../FlipperKit.podspec'
|
||||
pod 'FlipperKit/SKIOSNetworkPlugin', :path => '../../FlipperKit.podspec'
|
||||
pod 'FlipperKit/FlipperKitUserDefaultsPlugin', :path => '../../FlipperKit.podspec'
|
||||
pod 'FlipperKit/FlipperKitExamplePlugin', :path => '../../FlipperKit.podspec'
|
||||
# Layout and network plugins are not yet supported for swift projects
|
||||
pod 'FlipperKit/FlipperKitLayoutComponentKitSupport', :path => '../../FlipperKit.podspec'
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
322121E8134CB1102F388691 /* libPods-SampleSwift.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6233B2BCBACBB2E8D715CC04 /* libPods-SampleSwift.a */; };
|
||||
4E102343216ADB5900160734 /* UserDefaultsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E102342216ADB5900160734 /* UserDefaultsViewController.swift */; };
|
||||
532FF2DF211316ED00FC5A10 /* NetworkViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 532FF2DE211316ED00FC5A10 /* NetworkViewController.swift */; };
|
||||
53C327E5219DDCA800FE7A4C /* CommunicationDemoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53C327E4219DDCA800FE7A4C /* CommunicationDemoViewController.swift */; };
|
||||
A19C402720E20023004BF1F7 /* Icons.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A19C402620E20023004BF1F7 /* Icons.xcassets */; };
|
||||
A1EC522D20DED61B007C6977 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EC522C20DED61B007C6977 /* AppDelegate.swift */; };
|
||||
A1EC522F20DED61B007C6977 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EC522E20DED61B007C6977 /* ViewController.swift */; };
|
||||
@@ -20,6 +21,7 @@
|
||||
/* Begin PBXFileReference section */
|
||||
4E102342216ADB5900160734 /* UserDefaultsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsViewController.swift; sourceTree = "<group>"; };
|
||||
532FF2DE211316ED00FC5A10 /* NetworkViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkViewController.swift; sourceTree = "<group>"; };
|
||||
53C327E4219DDCA800FE7A4C /* CommunicationDemoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommunicationDemoViewController.swift; sourceTree = "<group>"; };
|
||||
6233B2BCBACBB2E8D715CC04 /* libPods-SampleSwift.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-SampleSwift.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
82933F6ACB19D9FAA4A0B0DC /* Pods-SampleSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SampleSwift.release.xcconfig"; path = "Pods/Target Support Files/Pods-SampleSwift/Pods-SampleSwift.release.xcconfig"; sourceTree = "<group>"; };
|
||||
871A353CDDB4CD0F4FE9A564 /* Pods-SampleSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SampleSwift.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SampleSwift/Pods-SampleSwift.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
@@ -81,6 +83,7 @@
|
||||
A1EC523820DED61C007C6977 /* Info.plist */,
|
||||
532FF2DE211316ED00FC5A10 /* NetworkViewController.swift */,
|
||||
4E102342216ADB5900160734 /* UserDefaultsViewController.swift */,
|
||||
53C327E4219DDCA800FE7A4C /* CommunicationDemoViewController.swift */,
|
||||
);
|
||||
path = SampleSwift;
|
||||
sourceTree = "<group>";
|
||||
@@ -188,6 +191,7 @@
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
A1EC522F20DED61B007C6977 /* ViewController.swift in Sources */,
|
||||
53C327E5219DDCA800FE7A4C /* CommunicationDemoViewController.swift in Sources */,
|
||||
532FF2DF211316ED00FC5A10 /* NetworkViewController.swift in Sources */,
|
||||
4E102343216ADB5900160734 /* UserDefaultsViewController.swift in Sources */,
|
||||
A1EC522D20DED61B007C6977 /* AppDelegate.swift in Sources */,
|
||||
|
||||
@@ -19,6 +19,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
client?.add(FlipperKitLayoutPlugin(rootNode: application, with: layoutDescriptorMapper!))
|
||||
|
||||
client?.add(FlipperKitNetworkPlugin(networkAdapter: SKIOSNetworkAdapter()))
|
||||
client?.add(FlipperKitExamplePlugin.sharedInstance());
|
||||
client?.add(FKUserDefaultsPlugin.init(suiteName: nil))
|
||||
client?.start()
|
||||
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
// Copyright 2004-present Facebook. All Rights Reserved.
|
||||
|
||||
import UIKit
|
||||
import FlipperKit
|
||||
|
||||
class CommunicationDemoViewController: UIViewController, UITableViewDataSource, FlipperKitExampleCommunicationResponderDelegate {
|
||||
@IBOutlet weak var messageField: UITextField!
|
||||
@IBOutlet weak var tableView: UITableView!
|
||||
var messageArray: [String] = []
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
FlipperKitExamplePlugin.sharedInstance()?.delegate = self
|
||||
}
|
||||
|
||||
@IBAction func tappedTriggerNotification(_ sender: UIButton) {
|
||||
FlipperKitExamplePlugin.sharedInstance()?.triggerNotification();
|
||||
}
|
||||
|
||||
@IBAction func tappedSendMessage(_ sender: UIButton) {
|
||||
if let message = self.messageField.text {
|
||||
FlipperKitExamplePlugin.sharedInstance()?.sendMessage(message);
|
||||
}
|
||||
}
|
||||
|
||||
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||
let cell = tableView.dequeueReusableCell(withIdentifier: "reusableCell", for: indexPath)
|
||||
cell.textLabel?.text = messageArray[indexPath.row]
|
||||
return cell
|
||||
}
|
||||
|
||||
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||
return messageArray.count;
|
||||
}
|
||||
|
||||
func messageReceived(_ msg: String!) {
|
||||
messageArray.append(msg)
|
||||
DispatchQueue.main.async { [weak self] in
|
||||
self?.tableView.reloadData();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -59,6 +59,20 @@
|
||||
<segue destination="qXL-iV-l3f" kind="show" id="ubf-Kh-d0a"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pK8-Er-7VT">
|
||||
<rect key="frame" x="0.0" y="224" width="375" height="60"/>
|
||||
<color key="backgroundColor" red="0.89411764709999997" green="0.87450980389999999" blue="0.92941176469999998" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="60" id="X69-d9-lWV"/>
|
||||
<constraint firstAttribute="height" constant="60" id="lWC-Aw-qgK"/>
|
||||
</constraints>
|
||||
<state key="normal" title="Notifications/Communications Demo">
|
||||
<color key="titleColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</state>
|
||||
<connections>
|
||||
<segue destination="yO7-0r-4b7" kind="push" id="ie2-1n-TND"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
@@ -66,14 +80,17 @@
|
||||
<constraint firstItem="xh0-Q4-60g" firstAttribute="top" secondItem="R0E-21-TJB" secondAttribute="bottom" constant="8" id="1LN-rK-SJg"/>
|
||||
<constraint firstItem="fNm-CZ-QXA" firstAttribute="trailing" secondItem="xh0-Q4-60g" secondAttribute="trailing" id="4Dh-7z-set"/>
|
||||
<constraint firstItem="R0E-21-TJB" firstAttribute="top" secondItem="fhd-5r-dZW" secondAttribute="top" id="4Og-b3-TDg"/>
|
||||
<constraint firstItem="pK8-Er-7VT" firstAttribute="leading" secondItem="fhd-5r-dZW" secondAttribute="leading" id="4nX-jB-ggf"/>
|
||||
<constraint firstItem="fNm-CZ-QXA" firstAttribute="leading" secondItem="xh0-Q4-60g" secondAttribute="leading" id="61y-q6-PKw"/>
|
||||
<constraint firstItem="R0E-21-TJB" firstAttribute="leading" secondItem="fhd-5r-dZW" secondAttribute="leading" id="7mG-cL-FY7"/>
|
||||
<constraint firstItem="xh0-Q4-60g" firstAttribute="leading" secondItem="fhd-5r-dZW" secondAttribute="leading" id="DPX-l5-Rca"/>
|
||||
<constraint firstItem="pK8-Er-7VT" firstAttribute="top" secondItem="fNm-CZ-QXA" secondAttribute="bottom" constant="8" id="EFP-DQ-bTM"/>
|
||||
<constraint firstItem="B57-dd-H6T" firstAttribute="leading" secondItem="fhd-5r-dZW" secondAttribute="leading" id="Hhd-in-vfk"/>
|
||||
<constraint firstItem="fhd-5r-dZW" firstAttribute="trailing" secondItem="B57-dd-H6T" secondAttribute="trailing" id="ODW-CJ-ean"/>
|
||||
<constraint firstItem="fhd-5r-dZW" firstAttribute="trailing" secondItem="R0E-21-TJB" secondAttribute="trailing" id="QyG-ez-XwS"/>
|
||||
<constraint firstItem="fNm-CZ-QXA" firstAttribute="top" secondItem="xh0-Q4-60g" secondAttribute="bottom" constant="8" id="jpH-cn-dRV"/>
|
||||
<constraint firstItem="fhd-5r-dZW" firstAttribute="bottom" secondItem="B57-dd-H6T" secondAttribute="bottom" id="kh1-ra-tzR"/>
|
||||
<constraint firstItem="pK8-Er-7VT" firstAttribute="trailing" secondItem="fhd-5r-dZW" secondAttribute="trailing" id="p7X-Rw-Fof"/>
|
||||
<constraint firstItem="B57-dd-H6T" firstAttribute="top" secondItem="fhd-5r-dZW" secondAttribute="top" id="vGA-oo-EGc"/>
|
||||
</constraints>
|
||||
<viewLayoutGuide key="safeArea" id="fhd-5r-dZW"/>
|
||||
@@ -243,8 +260,144 @@
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1613.5999999999999" y="278.41079460269867"/>
|
||||
</scene>
|
||||
<!--Communication Demo View Controller-->
|
||||
<scene sceneID="3bp-PM-07G">
|
||||
<objects>
|
||||
<viewController storyboardIdentifier="CommunicationDemoViewController" id="yO7-0r-4b7" customClass="CommunicationDemoViewController" customModule="SampleSwift" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="FHY-Ep-cpp">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="sonarpattern" translatesAutoresizingMaskIntoConstraints="NO" id="YeI-9y-VEp">
|
||||
<rect key="frame" x="0.0" y="20" width="375" height="647"/>
|
||||
</imageView>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5E7-VK-dne">
|
||||
<rect key="frame" x="20" y="60" width="335" height="40"/>
|
||||
<color key="backgroundColor" red="0.89411764709999997" green="0.87450980389999999" blue="0.92941176469999998" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="40" id="xck-oS-Neb"/>
|
||||
</constraints>
|
||||
<state key="normal" title="Trigger Notification">
|
||||
<color key="titleColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="tappedTriggerNotification:" destination="yO7-0r-4b7" eventType="touchUpInside" id="OuI-zu-JHb"/>
|
||||
</connections>
|
||||
</button>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Communication Demo" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2rF-Jd-Trq">
|
||||
<rect key="frame" x="98" y="120" width="179.5" height="21"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="18"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bLN-R7-u0M">
|
||||
<rect key="frame" x="8" y="143" width="359" height="1"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="1" id="11x-tI-CnX"/>
|
||||
<constraint firstAttribute="height" constant="1" id="nL6-Cd-c6p"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Send Message:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CYO-va-16f">
|
||||
<rect key="frame" x="8" y="161.5" width="118" height="21"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="OXk-Zn-AOg">
|
||||
<rect key="frame" x="134" y="152" width="233" height="40"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="40" id="Idx-di-XQN"/>
|
||||
</constraints>
|
||||
<nil key="textColor"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
</textField>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8av-mp-l2a">
|
||||
<rect key="frame" x="20" y="208" width="335" height="40"/>
|
||||
<color key="backgroundColor" red="0.89411764709999997" green="0.87450980389999999" blue="0.92941176469999998" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="40" id="0CI-UD-B3m"/>
|
||||
</constraints>
|
||||
<state key="normal" title="Send">
|
||||
<color key="titleColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="tappedSendMessage:" destination="yO7-0r-4b7" eventType="touchUpInside" id="2ID-pG-gA8"/>
|
||||
</connections>
|
||||
</button>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Received Messages:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wxL-2d-XQT">
|
||||
<rect key="frame" x="8" y="256" width="156.5" height="21"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" allowsSelection="NO" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="XUs-yJ-t0P">
|
||||
<rect key="frame" x="0.0" y="285" width="375" height="382"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<color key="sectionIndexBackgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<prototypes>
|
||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="reusableCell" id="1Fb-os-QAl">
|
||||
<rect key="frame" x="0.0" y="28" width="375" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="1Fb-os-QAl" id="K8f-VE-KE6">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</tableViewCellContentView>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</tableViewCell>
|
||||
</prototypes>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="yO7-0r-4b7" id="qtm-Ss-KtS"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="2rF-Jd-Trq" firstAttribute="top" secondItem="5E7-VK-dne" secondAttribute="bottom" constant="20" id="0tb-DY-WPE"/>
|
||||
<constraint firstItem="YeI-9y-VEp" firstAttribute="top" secondItem="5mO-nO-IPJ" secondAttribute="top" id="1id-kE-fi4"/>
|
||||
<constraint firstItem="5mO-nO-IPJ" firstAttribute="trailing" secondItem="XUs-yJ-t0P" secondAttribute="trailing" id="7HK-Gf-9Of"/>
|
||||
<constraint firstItem="bLN-R7-u0M" firstAttribute="leading" secondItem="5mO-nO-IPJ" secondAttribute="leading" constant="8" id="7oV-3N-HxG"/>
|
||||
<constraint firstItem="XUs-yJ-t0P" firstAttribute="leading" secondItem="5mO-nO-IPJ" secondAttribute="leading" id="8Jf-Kc-tP9"/>
|
||||
<constraint firstItem="8av-mp-l2a" firstAttribute="leading" secondItem="5mO-nO-IPJ" secondAttribute="leading" constant="20" id="Du4-Nv-hvu"/>
|
||||
<constraint firstItem="5E7-VK-dne" firstAttribute="top" secondItem="5mO-nO-IPJ" secondAttribute="top" constant="40" id="Llm-r0-ENR"/>
|
||||
<constraint firstItem="5mO-nO-IPJ" firstAttribute="trailing" secondItem="OXk-Zn-AOg" secondAttribute="trailing" constant="8" id="NLB-pB-BYb"/>
|
||||
<constraint firstItem="5mO-nO-IPJ" firstAttribute="bottom" secondItem="XUs-yJ-t0P" secondAttribute="bottom" id="PDf-ih-mAF"/>
|
||||
<constraint firstItem="CYO-va-16f" firstAttribute="leading" secondItem="5mO-nO-IPJ" secondAttribute="leading" constant="8" id="Q1i-Yi-9Rm"/>
|
||||
<constraint firstItem="XUs-yJ-t0P" firstAttribute="top" secondItem="wxL-2d-XQT" secondAttribute="bottom" constant="8" id="RP2-g2-54L"/>
|
||||
<constraint firstItem="5mO-nO-IPJ" firstAttribute="trailing" secondItem="8av-mp-l2a" secondAttribute="trailing" constant="20" id="VQh-bh-UwN"/>
|
||||
<constraint firstItem="CYO-va-16f" firstAttribute="centerY" secondItem="OXk-Zn-AOg" secondAttribute="centerY" id="a5e-4f-EWY"/>
|
||||
<constraint firstItem="5E7-VK-dne" firstAttribute="leading" secondItem="5mO-nO-IPJ" secondAttribute="leading" constant="20" id="b2g-cB-gif"/>
|
||||
<constraint firstItem="2rF-Jd-Trq" firstAttribute="centerX" secondItem="FHY-Ep-cpp" secondAttribute="centerX" id="bjO-UN-1nu"/>
|
||||
<constraint firstItem="5E7-VK-dne" firstAttribute="centerX" secondItem="FHY-Ep-cpp" secondAttribute="centerX" id="cKt-5n-Vg7"/>
|
||||
<constraint firstItem="OXk-Zn-AOg" firstAttribute="leading" secondItem="CYO-va-16f" secondAttribute="trailing" constant="8" id="fEK-Ms-pZV"/>
|
||||
<constraint firstItem="5mO-nO-IPJ" firstAttribute="trailing" secondItem="bLN-R7-u0M" secondAttribute="trailing" constant="8" id="grX-2b-Qhh"/>
|
||||
<constraint firstItem="YeI-9y-VEp" firstAttribute="leading" secondItem="5mO-nO-IPJ" secondAttribute="leading" id="iPy-f9-gvc"/>
|
||||
<constraint firstItem="8av-mp-l2a" firstAttribute="top" secondItem="OXk-Zn-AOg" secondAttribute="bottom" constant="16" id="ieE-xw-Ydg"/>
|
||||
<constraint firstItem="2rF-Jd-Trq" firstAttribute="centerX" secondItem="FHY-Ep-cpp" secondAttribute="centerX" id="o3n-kC-QG7"/>
|
||||
<constraint firstItem="5mO-nO-IPJ" firstAttribute="trailing" secondItem="5E7-VK-dne" secondAttribute="trailing" constant="20" id="otm-NF-s8T"/>
|
||||
<constraint firstItem="5mO-nO-IPJ" firstAttribute="bottom" secondItem="YeI-9y-VEp" secondAttribute="bottom" id="qJt-5P-nV0"/>
|
||||
<constraint firstItem="5mO-nO-IPJ" firstAttribute="trailing" secondItem="YeI-9y-VEp" secondAttribute="trailing" id="qKu-cq-r7g"/>
|
||||
<constraint firstItem="OXk-Zn-AOg" firstAttribute="top" secondItem="bLN-R7-u0M" secondAttribute="bottom" constant="8" id="uYK-IL-RjF"/>
|
||||
<constraint firstItem="bLN-R7-u0M" firstAttribute="top" secondItem="2rF-Jd-Trq" secondAttribute="bottom" constant="2" id="v9J-YM-ZKk"/>
|
||||
<constraint firstItem="wxL-2d-XQT" firstAttribute="top" secondItem="8av-mp-l2a" secondAttribute="bottom" constant="8" id="x2E-zN-2Lf"/>
|
||||
<constraint firstItem="wxL-2d-XQT" firstAttribute="leading" secondItem="CYO-va-16f" secondAttribute="leading" id="zqj-I4-0ft"/>
|
||||
</constraints>
|
||||
<viewLayoutGuide key="safeArea" id="5mO-nO-IPJ"/>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="UeU-fc-r04"/>
|
||||
<connections>
|
||||
<outlet property="messageField" destination="OXk-Zn-AOg" id="Y7k-PD-sUg"/>
|
||||
<outlet property="tableView" destination="XUs-yJ-t0P" id="g06-Hc-IC1"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="epO-9y-CS0" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1015" y="51"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="sonarpattern" width="843" height="1317"/>
|
||||
<image name="sonarpattern" width="421" height="658"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
||||
Reference in New Issue
Block a user