[
  {
    "path": ".gitignore",
    "content": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n## Build generated\nbuild/\nDerivedData\n\n## Various settings\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n\n## Other\n*.xccheckout\n*.moved-aside\n*.xcuserstate\n*.xcscmblueprint\n\n## Obj-C/Swift specific\n*.hmap\n*.ipa\n*.dSYM.zip\n\n## Playgrounds\ntimeline.xctimeline\nplayground.xcworkspace\n\n# Swift Package Manager\n#\n# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.\n# Packages/\n.swiftpm/\n\n.DS_Store\n*.mobileprovision\n*.cer\n*.certSigningRequest\n*.p12\n*.pem\n*.pkey\nscreenshots\nrvm.env\n.build"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Change Log\nAll notable changes to this project will be documented in this file.\n\n## 10.0.2\n\n### Features\n* #549 Create a formal dismissal mechanism for SwiftUI message. Use `@Environment(\\.swiftMessagesHide) private var hide` then call `hide(animated: true)` to dismiss.\n* #571 PhysicsPanHandler.swift make configure public.\n\n### Fixes\n* #581 [BUG]: SwiftUI message views don't respond to touch input on Xcode 26 beta 6 iOS 26 simulator.\n* #581 [BUG]: SwiftUI message views don't respond to touch input on Xcode 26 beta 6 iOS 26 simulator\n* #577 Hide Background Elements from Modal SwiftMessage in VoiceOver mode\n* #578 Fix crash on iPadOS 18+ when presenting bottom SwiftMessage above UITabBarController\n\n### Features\n\n* #523 Add a `priority` configuration option.\n* #548 Adds 'TopBottomPresentable' protocol to allow animators implementation to reuse 'top/bottom' integration in presentation\n* #543 Make the `SwiftMessages` initializer `nonisolated` to improve interoperability with dependency injection frameworks like Factory.\n* #560 Add a new `swiftMessage` modifier variation that provides a ` MessageGeometryProxy` type to the message view builder—this works around an inssue with `GeometryReader` not working in `UIHostingController`.\n\n### Fixes\n* Fix broken touch handling in iOS 18.\n\n## 10.0.0\n\n### Features\n\n* Add a variation on the `.swiftMessage()` modifier that takes a view builder instead of requiring that the bound value conform to `MessageViewConvertible`. This syntax is more similar to the familiar `sheet()` modifier syntax and provides more flexibility for constructing message views.\n* #207 Add optional haptic feedback\n\n### Changes\n\n* Use `@MainActor` to ensure that SwiftMessages is not called from a background queue.\n* Bump minimum deployment target to iOS 13.\n\n### Fixes\n\n* #535 window being accessed from background thread when dequeueNext is called\n* #534 Xcode warnings in two swift files\n* #533 How do I show a message that appears above the keyboard, when the keyboard is already visible?\n\n## 9.0.9\n\n### Fixes\n\n* Fix hit testing on SwiftUI views to allow touches around the view's margins to pass through to the underlying view.\n* Update `KeyboardTrackingView` to continue tracking the keyboard even when not installed in the view hierarchy.\n\n## 9.0.8\n\n### Changes\n\n* #529 Update readme and SwiftUI demo to demostrate how to mask edges.\n\n## 9.0.7\n\n### Features\n\n* Added support for SwiftUI\n\n### Fixes\n\n* #527 Crash while clicking two times to hide the presenting controller\n* #517 Prevent orphaned views from blocking the queue\n* Prevent orphaned `SwiftMessagesSeque`s from retaining the presenting view controller\n\n## 9.0.6\n\n### Features\n\n* Add `UIView` associated type to `Event`, e.g. `willShow(UIView)` so that event listeners can inspect the view.\n* Add `Event.id: String?` property so that event listeners can reason about the view's ID.\n\n## 9.0.5\n\n### Fixes\n\n* #482 Fix timing of `KeyboardTrackingView` callbacks.\n* #483 KeyboardTrackingView causes a small space under bottom-style view\n\n## 9.0.4\n\n* #471 Xcode 13 issue - Enum cases with associated values cannot be marked potentially unavailable with '@available'\n* Improve colors for dark mode.\n\n## 9.0.3\n\n### Fixes\n\n* #467 Lower or equal level window's views disappear upon hide\n* #466 Alert not shown after Biometry check\n* #465 Fix broken Carthage build. The Carthage build was broken due to the `iMessageDemo` project's use of CocoaPods and the automatically generated `SwiftMessages` framework scheme created by CocoaPods. The podfile was modified to delete this scheme, but Carthage users may need to run `pod install` on the `iMessagesDemo` project, if they have CocoaPods installed, or manually delete the `iMessageDemo/Pods/Pods.xcodeproj/xcuserdata` folder.\n\n## 9.0.2\n\n### Fixes\n\n* Fix app extension compile error when using CocoaPods.\n\n## 9.0.1\n\n### Fixes\n\n* #455 #458 Restore key window after message is interacted with. When a message becomes the key window, such as if the user interacts with the message, iOS does not automatically restore the previous key window when the message is dismissed. SwiftMessages has some logic in `WindowViewController` to restore the key window. This change makes that logic more robust.\n\n## 9.0.0\n\n### Features\n\n* #447 Add the ability to show view controller in a new window with `SwiftMessagesSegue`.\nThis capability is available when using `SwiftMessagesSegue` programmatically by supplying\nan instance of `WindowViewController` as the segue's source view controller.\n\n### Changes\n\n* This release has minor breaking changes in the `WindowViewController` initializers.\nThe `windowLevel` is no longer accepted as an argument because the `config` parameter\nshould specify the window level in the `presentationContext` property.\n\n### Fixes\n\n* #451 Fix app extension crash\n\n## 8.0.5\n\n### Fixes\n\n* #446 Restore previous key window on dismissal if the message assumed key window status.\n\n## 8.0.4\n\n### Features\n\n* #442 Add `MarginAdjustable.respectSafeArea` option to exclude safe area from layout margins.\n* #430 Support disable `becomeKeyWindow` from SwiftMessages.Config. This is a workaround for potential issues with apps that display additional windows.\n\n### Fixes\n\n* #437 Revert to explicitly specifying \"SwiftMessages\" as the module in nib files.\n* #440 Fix crash when using SwiftMessages in app extension\n\n## 8.0.3\n\n### Features\n\n* Full support for Swift Package Manager\n\n### Fixes\n\n* #328 ignoreDuplicates is not working\n* #412 Fix deployment target on nib files to match target\n\n## 8.0.2\n\n### Changes\n\n* [#395](https://github.com/SwiftKickMobile/SwiftMessages/pull/395) Add preliminary support for Swift Package Manager.\n\n## 8.0.1\n\n### Fixes\n\n* #401 UIAlertController pops up but SwiftMessage layer absorbs all touches.\n\n## 8.0.0\n\n### Changes\n\n* Add `SwiftMessages.PresentationContext.windowScene` option for targeting a specific window scene.\n* Changed the behavior of the default `presentationContext`, `.automatic`. Previously, if the root view controller was presenting, the message would only be displayed over the presented view controller if the `modalPresentationStyle` was `fullScreen` or `overFullScreen`. Now, messages are always displayed over presented view controllers.\n* Made `showDuraton` and `hideDuration` on `Animator` non-optional.\n* Made `showDuraton` and `hideDuration` writable options on `TopBottomAnimation` and `PhysicsAnimation`.\n\n### Fixes\n\n* #365 Fix an issue with customized `TopBottomAnimation` where messages weren't properly displayed under navigation and tab bars.\n* #352 Fix accessibility for view controllers presented with `SwiftMessagesSegue`.\n* #355 Update card view layout to support centering of pure textual content \n* #354 Support `overrideUserInterfaceStyle` when view presented in its own window\n* #360 Fix touch handing issue in iOS 13.1.3\n* #382 Fix warnings in Xcode 11.4\n\n## 7.0.1\n\n### Changes\n\n* Support iOS 13.\n\n### Features\n* #335 Add option to hide status bar when view is displayed in a window. As of iOS 13, windows can no longer cover the status bar. The only alternative is to set `Config.prefersStatusBarHidden = true` to hide it.\n\n## 7.0.0\n\n### Changes\n\n* Swift 5\n* Remove deprecated APIs\n\n### Features\n\n* #313 Improved sizing on iPad\n  \n>`SwiftMessagesSegue` provides default view controller sizing based on device, with width on iPad being limited to 500pt max. However, it is recommended that you explicitly specify size appropriate for your content using one of the following methods.\n>  1. Define sufficient width and height constraints in your view controller such that it sizes itself.\n>  1. Set the `preferredContentSize` property (a.k.a \"Use Preferred Explicit Size\" in Interface Builder's attribute inspector). Zeros are ignored, e.g. `CGSize(width: 0, height: 350)` only affects the height.\n>  1. Add explicit width and/or height constraints to `segue.messageView.backgroundView`.  \n>\n>Note that `Layout.topMessage` and `Layout.bottomMessage` are always full screen width. For other layouts, the there is a maximum 500pt width on for regular horizontal size class (iPad) at 950 priority. This limit can be overridden by adding higher-priority constraints.\n\n* #275 Add ability to avoid the keyboard.\n\n>The `KeyboardTrackingView` class can be used to cause the message view to avoid the keyboard by sliding up when the keyboard gets too close.\n>\n>````swift\n>// Message view\n>var config = SwiftMessages.defaultConfig\n>config.keyboardTrackingView = KeyboardTrackingView()\n>\n>// Or view controller\n>segue.keyboardTrackingView = KeyboardTrackingView()\n>````\n>You can incorporate `KeyboardTrackingView` into your app even when you're not using SwiftMessages. Install into your view hierarchy by pinning `KeyboardTrackingView` to the bottom, leading, and trailing edges of the screen. Then pin the bottom of your content that should avoid the keyboard to the top `KeyboardTrackingView`. Use an equality constraint to strictly track the keyboard or an inequality constraint to only move when the keyboard gets too close. `KeyboardTrackingView` works by observing keyboard notifications and adjusting its height to maintain its top edge above the keyboard, thereby pushing your content up. See the comments in `KeyboardTrackingView` for configuration options.\n\n\n* #276 Add ability to hide message without animation\n* #272 Add duration for `SwiftMessagesSegue`\n* #278 Make pan gesture recognizers public\n\n## 6.0.2\n\n### Features\n\n* #262 Add event listeners to `SwiftMessagesSegue`.\n\n## 6.0.1\n\n### Features\n* #257 The `.centered` presentation style, which is a shortcut for a specific configuration of the `PhysicsAnimation` animator, provides a physics-based dismissal gesture where the view can be flung off screen. When the view goes out of the container view's bounds, the animator calls `SwiftMessages.hide()`, which animates the dim view away and concludes the message view's lifecycle. There is currently a small delay of 0.2s before calling `hide()`.\n\nThis change adds the ability to configure the delay by customizing the animator. For example, to set the delay to zero, one would do:\n\n````swift\nlet animation = PhysicsAnimation()\nanimation.panHandler.hideDelay = 0\nconfig.presentationStyle = .custom(animator: animation)\n````\n\n## 6.0.0\n\n### Changes\n\n* Migrate to Swift 4.2\n\n### Fixes\n\n* Fix #228 restore shared SwiftMessages scheme\n\n## 5.0.1\n\n### Fixes\n\n* Remove debug code that broke the view controller's section of the Demo app.\n\n## 5.0.0\n\n### Breaking Changes\n\n* Removed support for iOS 8.\n\n### Features\n* Add support for modal view controller presentation using [`SwiftMessagesSegue`](./SwiftMessages/SwiftMessagesSegue.swift) custom segue subclass. Try it out in the \"View Controllers\" section of the Demo app. In addition to the class documentation, more can be found in the [View Controllers](./ViewControllers.md) readme.\n* Update nib files to be more visually consistent with iPhone X:\n  * Introduce [`CornerRoundingView`](./SwiftMessages/CornerRoundingView.swift), which provides configurable corner rounding using squircles (the smoother method of rounding corners that you see on app icons). Nib files that feature rounded corners have their `backgroundView` assigned to a `CornerRoundingView`. `CornerRoundingView` provides a `roundsLeadingCorners` option to dynamically round only the leading corners of the view when presented from top or bottom (a feature used for the tab-style layouts).\n  * Increased the default corner radius to 20. Corner radius can be changed by either modifying the nib file or \n* Reworked the [`MarginAdjustable`](./SwiftMessages/MarginAdjustable.swift) to improve configurability of layout margins.\n* Add rubber-banding to the interactive dismissal gesture. Rubber banding is automatically applied for views where `backgroundView` is inset from the message view's edges.\n* Added `showDuration` and `hideDuration` properties to the `Animator` protocol (with default implementation that returns `nil`). These values enable animations to work for view controller presentation.\n\n### Fixes\n\n* #202 bodyLabel should set textAlignment to .natural\n* #200 Automatic Presentation Context Broken\n* Fix default value of `TopBottomAnimation.closePercentThreshold`\n\n## 4.1.4\n\n### Bug Fixes\n* Fix #191 Prevent usage of UIApplication.shared when building for extensions\n\n### Improvements\n* #192 Add a way to test compilation with app extension\n\n## 4.1.3\n\n### Features\n* #183 Added iOS app extension support at compile time.\n\n### Bug Fixes\n* Fix #185 Incorrect margin adjustments in landscape\n* Fix #188 Physics animation visual glitch\n\n## 4.1.2\n\n### Features\n* Updates for Swift 4.1\n* #164 Added an optional `windowViewController` property to `SwiftMessages.Config` for supplying a custom subclass of `WindowViewController`.\n\n### Bug Fixes\n* Custom presentation styles using `TopBottomAnimation` now display properly under top and bottom bars.\n\n## 4.1.1\n\n### Features\n* #152 Get current message being displayed without specifying an `id`\n\n## 4.1.0\n\n### Features\n\n* Fix #134 add support for `CenterAnimation` displayed on top or bottom instead of center (renamed to `PhysicsAnimation`).\n\n### Fixes\n\n* Fix #128 move icons out of asset catalog to prevent mysterious crash\n* Fix #129 adjust layout margins on orientation change to preserve layout when iOS hides status bar in landscape.\n* Fix #131 by always completing hide/show animations if application isn't active.\n\n\n## 4.0.0\n\n### Features\n* Swift 4.0 syntax\n* Added support for iOS 11 and iPhone X. From the readme:\n\n  SwiftMessages 4 supports iOS 11 out-of-the-box with built-in support   for safe areas. To ensur  that message view layouts look just right when overlapping safe areas, views that adopt the `MarginAdjustable` protocol (like `MessageView`) will have their layout margins automatically adjusted by SwiftMessages. However, there is no one-size-fits-all adjustment, so the following properties were added to `MarginAdjustable` to allow for additional adjustments to be made to the layout margins:\n\n  ````swift\n  public protocol MarginAdjustable {\n      ...\n      /// Safe area top adjustment in iOS 11+\n      var safeAreaTopOffset: CGFloat { get set }\n      /// Safe area bottom adjustment in iOS 11+\n      var safeAreaBottomOffset: CGFloat { get set }\n  }\n  ````\n\n  If you're using using custom nib files or view classes and your layouts don't look quite right, try adjusting the values of these properties. `BaseView` (the super class of `MessageView`) declares these properties to be `@IBDesignable` and you can find sample values in the nib files included with SwiftMessages.\n\n### Bug Fixes\n* Fix #100 memory leak.\n* Change `Layout` enum capitalization to current Swift conventions.\n\n## [3.5.1](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.5.0)\n\n### Bug Fixes\n* Undo change that broke `MessageView` class reference on nib files copied out of the SwiftMessages framework.\n\n## [3.5.0](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.5.0)\n\n### Features\n* Added `SwiftMessages.hideCounted(id:)` method of hiding. The counted method hides when the number of calls to `show()` and `hideCounted(id:)` for a \ngiven message ID are equal. This can be useful for messages that may be\nshown from  multiple code paths to ensure that all paths are ready to hide.\n\n  Also added `SwiftMessages.count(id:)` to get the current count and `SwiftMessages.set(id:count:)` to set the current count.\n\n* Added ways to retrieve message views currently being shown, hidden, or queued to be shown.\n\n  ````swift\n  // Get a message view with the given ID if it is currently \n  // being shown or hidden.\n  if let view = SwiftMessages.current(id: \"some id\") { ... }\n  \n  // Get a message view with the given ID if is it currently \n  // queued to be shown. \n  if let view = SwiftMessages.queued(id: \"some id\") { ... }\n  \n  // Get a message view with the given ID if it is currently being\n  // shown, hidden or in the queue to be shown.\n  if let view = SwiftMessages.currentOrQueued(id: \"some id\") { ... }\n  ````\n\n### Bug Fixes\n* Fix #116 for message views that don't adopt the `Identifiable` protocol by using the memory address as the ID.\n* Fix #113 MessageView not hiding\n* Fix #87 Support manual install\n\n## [3.4.0](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.4.0)\n\n### Features\n* Added `.center` presentation style with a physics-based dismissal gesture.\n* Added `.custom(animator:)` presentation style, where you provide an instance of the `Animator` protocol. The `TopBottomAnimation` and `CenterAnimation` animations both implement `Animator` and may be subclassed (configuration options will be added in a future release). `PhysicsPanHandler` class to provide a physics-based dismissal gesture.\n* Added `.centered` message view layout with elements centered and arranged vertically.\n* Added `configureBackgroundView(width:)` and `configureBackgroundView(sideMargin:)` convenience methods to `MessageView`.\n\n## [3.3.4](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.3.4)\n\n### Features\n* #89 Add `blur` dim mode option.\n\n### Bug Fixes\n* #98 Fix touch handling in message view's background view.\n* #97 Fix main thread checker warning \n\n## [3.3.3](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.3.3)\n\n### Bug Fixes\n* Fix an issue where rapidly showing and hiding messages could result in messages becoming orphaned on-screen.\n\n## [3.3.2](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.3.2)\n\n### Improvements\n* `MessageView` is smarter about including additional accessibility views for cases where you've added accessible elements to the view. Previously only the `button` was included. Now all views where `isAccessibilityElement == true`.\n\n    Note that all nib files now have `isAccessibilityElement == false` for `titleLabel`, `bodyLabel` and `iconLabel` (`titleLabel` and `bodyLabel` are read out as part of the overall message view's text). If any of these need to be directly accessible, then copy the nib file into your project and select \"Enabled\" in the Accessibility section of the Identity Inspector.\n\n## [3.3.1](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.3.1)\n\n### Bug Fixes\n* Fix regression where the UI was being blocked when using `DimMode.none`.\n\n## [3.3.0](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.3.0)\n\n### Features\n* Add proper support for VoiceOver. See the [Accessibility section](README.md#accessibility) of the readme.\n\n## [3.2.1](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.2.1)\n\n### Bug Fixes\n* Fix infinite loop bug introduced in 3.2.0.\n\n## [3.2.0](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.2.0)\n\n### Features\n* Added the ability to display messages for an indefinite duration while enforcing a minimum duration using `Duration.indefinite(delay:minimum)`.\n\nThis option is useful for displaying a message when a process is taking too long but you don't want to display the message if the process completes in a reasonable amount of time.\n         \nFor example, if a URL load is expected to complete in 2 seconds, you may use the value `unknown(delay: 2, minimum 1)` to ensure that the message will not be displayed most of the time, but will be displayed for at least 1 second if the operation takes longer than 2 seconds. By specifying a minimum duration, you can avoid hiding the message too fast if the operation finishes right after the delay interval.\n\n### Bug Fixes\n* Prevent views below the dim view from receiving accessibility focus.\n* Prevent taps in the message view from hiding when using interactive dim mode.\n* Fix memory leak of single message view\n\n## [3.1.5](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.1.5)\n\n### Bug Fixes\n\n* Fix memory leak of `MessageViews`.\n\n## [3.1.4](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.1.4)\n\n### Bug Fixes\n\n* Fixed an issue where UIKit components were being instantiated off the main queue.\n\n## [3.1.3](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.1.3)\n\n### Features\n\n* Added the ability to set a custom value on `MessageView.id`. This can be useful for dismissing specific messages using a pre-defined `id`.\n\n## [3.1.2](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.1.2)\n\n### Features\n\n* Changed the default behavior when a message is displayed in its own window (such as with `.window` presentation context) to no longer become the key window in order to prevent the keyboard from dismissing. If one needs the message's window to become key, this can be done by setting `SwiftMessages.Config.becomeKeyWindow` to `true`. See \n\n### Bug Fixes\n\n* Changed the internal logic of hiding a message view to always succeed to work around the problem of the hide animation failing, such as when started while the app is not active.\n* Improved reliability of the automatic adjustments made to avoid message views overlapping the status bar, particularly when using the `.view` presentation context.\n\n## [3.1.1](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.1.1)\n\n### Features\n\n* Added a `view` case to `presentationContext` for displaying the message in a specific container view.\n\n## [3.1.0](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.1.0)\n\n### Features\n\n* Add `eventListeners` option to `SwiftMessages.Config` to specify a list of event listeners to be notified of message show and hide events.\n\n## [3.0.3](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.0.3)\n\n### Features\n\n* Add `ignoreDuplicates` option to `SwiftMessages.Config` to specify whether or not to ignore duplicate `Identifiable` message views.\n\n## [3.0.2](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.0.2)\n\n### Features\n\n* Add `shouldAutorotate` option to `SwiftMessages.Config` for customizing device rotation behavior when messages are presented in an overlay window. By default, message will auto-rotate.\n\n## [3.0.1](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.0.1)\n\n### Improvements\n\n* Enable automatic provisioning on framework target\n\n## [3.0.0](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/3.0.0)\n\n### Breaking Changes\n\n* Support for Swift 3.0.\n\n## [2.0.0](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/2.0.0)\n\n### Breaking Changes\n\n* Support for Swift 2.3 and Xcode 8.\n\n  The nib files needed to be updated to Xcode 8 format to work \n  around an iOS bug. Unfortunately, this makes it necessary \n  to break backward compatibility with Swift 2.2 and Xcode 7.\n\n## [1.1.4](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/1.1.4)\n\n### Bug Fixes\n\n* Fix #16 Preserve status bar visibility when displaying message in a new window.\n\n## [1.1.3](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/1.1.3)\n\n### Features\n\n* Add default configuration `SwiftMessages.defaultConfig` that can be used when calling the variants of `show()` that don't take a `config` argument or as a global base for custom configs.\n* Add `Array.sm_random()` function that returns a random element from the array. Can be used to create a playful\n     message that cycles randomly through a set of emoji icons, for example.\n\n### Bug Fixes\n\n* Fix #5 Emoji not shown!\n* Fix #6 There is no way to create SwiftMessages instance as there is no public initializer\n\n## [1.1.2](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/1.1.2)\n\n### Bug Fixes\n\n* Fix Carthage-related issues.\n\n## [1.1.1](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/1.1.1)\n\n### Features\n\n* New layout `Layout.TabView` — like `Layout.CardView` with one end attached to the super view.\n\n### Bug Fixes\n\n* Fix spacing between title and body text in `Layout.CardView` when body text wraps.\n\n## [1.1.0](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/1.1.0)\n\n### Improvements\n\n### API Changes\n\n* The `BaseView.contentView` property of was removed because it no longer had any functionality in the framework.\n\n    This is a minor backwards incompatible change. If you've copied one of the included nib files from a previous release, you may get a key-value coding runtime error related to contentView, in which case you can subclass the view and add a `contentView` property or you can remove the outlet connection in Interface Builder.\n\n## [1.0.3](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/1.0.2)\n\n### Improvements\n\n* Remove the `iconContainer` property from `MessageView`.\n\n### Bug Fixes\n\n* Fix constraints generated by `BaseView.installContentView()`.\n\n## [1.0.2](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/1.0.2)\n\n### Features\n\n* Add support for specifying an `IconStyle` in the `MessageView.configureTheme()` convenience function.\n\n## [1.0.1](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/1.0.1)\n\n* Add code comments.\n\n## [1.0.0](https://github.com/SwiftKickMobile/SwiftMessages/releases/tag/1.0.0)\n\n* Initial release.\n"
  },
  {
    "path": "Demo/.Podfile",
    "content": "target 'Demo' do\n    use_frameworks!\n    workspace 'Demo.xcworkspace'\n    xcodeproj 'Demo.xcodeproj'\n    pod 'SwiftMessages/App', :path => '../'\n    pod 'SwiftMessages/SegueExtras', :path => '../'\nend\n\n"
  },
  {
    "path": "Demo/Demo/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  Demo\n//\n//  Created by Tim Moose on 8/11/16.\n//  Copyright © 2016 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\n\nlet brandColor = UIColor(red: 42/255.0, green: 168/255.0, blue: 250/255.0, alpha: 1)\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    var window: UIWindow?\n\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {\n        window?.tintColor = brandColor\n        UISwitch.appearance().onTintColor = brandColor\n        return true\n    }\n}\n\n"
  },
  {
    "path": "Demo/Demo/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@2x-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@1x-1.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@2x-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@2x-2.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@2x-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-83.5x83.5@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"1024x1024\",\n      \"idiom\" : \"ios-marketing\",\n      \"filename\" : \"Icon-App-iTunes.png\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Demo/Demo/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Demo/Demo/Assets.xcassets/iconSwiftMessages.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"iconSwiftMessages.pdf\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  },\n  \"properties\" : {\n    \"template-rendering-intent\" : \"template\"\n  }\n}"
  },
  {
    "path": "Demo/Demo/Assets.xcassets/puppies.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"puppies.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Demo/Demo/Assets.xcassets/splashBanner.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"splashBanner.pdf\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  },\n  \"properties\" : {\n    \"template-rendering-intent\" : \"original\"\n  }\n}"
  },
  {
    "path": "Demo/Demo/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"22505\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <device id=\"retina4_7\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"22504\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Llm-lL-Icb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xb3-aO-Qok\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"© 2024 SWIFTKICK MOBILE LLC\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"sBz-Dk-SSO\">\n                                <rect key=\"frame\" x=\"46\" y=\"643\" width=\"283\" height=\"16\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"13\"/>\n                                <color key=\"textColor\" red=\"0.47391887630000001\" green=\"0.47391887630000001\" blue=\"0.47391887630000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"splashBanner\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"236-Ta-JzA\">\n                                <rect key=\"frame\" x=\"16\" y=\"196.5\" width=\"343\" height=\"274\"/>\n                            </imageView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"236-Ta-JzA\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerY\" id=\"CEe-Gz-yDf\"/>\n                            <constraint firstItem=\"sBz-Dk-SSO\" firstAttribute=\"leading\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"leadingMargin\" constant=\"30\" id=\"Dkq-dl-gDt\"/>\n                            <constraint firstItem=\"xb3-aO-Qok\" firstAttribute=\"top\" secondItem=\"sBz-Dk-SSO\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"UrJ-mr-8Jj\"/>\n                            <constraint firstAttribute=\"trailingMargin\" secondItem=\"sBz-Dk-SSO\" secondAttribute=\"trailing\" constant=\"30\" id=\"ezd-98-VGo\"/>\n                            <constraint firstItem=\"236-Ta-JzA\" firstAttribute=\"leading\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"leadingMargin\" id=\"hFL-YR-MPf\"/>\n                            <constraint firstItem=\"236-Ta-JzA\" firstAttribute=\"centerX\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerX\" id=\"mTQ-eG-DFv\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"splashBanner\" width=\"370\" height=\"274\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "Demo/Demo/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"22505\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"JQZ-C5-7mw\">\n    <device id=\"retina4_7\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"22504\"/>\n        <capability name=\"System colors in document resources\" minToolsVersion=\"11.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Tab Bar Controller-->\n        <scene sceneID=\"hAI-jZ-7cq\">\n            <objects>\n                <tabBarController id=\"JQZ-C5-7mw\" sceneMemberID=\"viewController\">\n                    <tabBar key=\"tabBar\" contentMode=\"scaleToFill\" id=\"cwg-nW-Hjl\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"49\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </tabBar>\n                    <connections>\n                        <segue destination=\"UrZ-Dq-bGZ\" kind=\"relationship\" relationship=\"viewControllers\" id=\"S26-Ux-PAK\"/>\n                    </connections>\n                </tabBarController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"J0t-Vs-UfA\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-327\" y=\"305\"/>\n        </scene>\n        <!--Demo-->\n        <scene sceneID=\"H45-vn-dic\">\n            <objects>\n                <tableViewController id=\"vur-BZ-g1e\" customClass=\"ViewController\" customModule=\"Demo\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"j4a-wU-637\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <prototypes>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"TitleBody\" rowHeight=\"80\" id=\"2n5-7h-3B5\" userLabel=\"TitleBody Cell\" customClass=\"TitleBodyCell\" customModule=\"Demo\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"50\" width=\"375\" height=\"80\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"2n5-7h-3B5\" id=\"Q5r-8D-38q\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"80\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"252\" verticalCompressionResistancePriority=\"752\" text=\"TITLE\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Icl-Ci-lfe\">\n                                            <rect key=\"frame\" x=\"26\" y=\"21\" width=\"323\" height=\"16\"/>\n                                            <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Body\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Gpd-DA-5jT\">\n                                            <rect key=\"frame\" x=\"26\" y=\"45\" width=\"323\" height=\"14\"/>\n                                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                            <color key=\"textColor\" systemColor=\"secondaryLabelColor\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                    </subviews>\n                                    <constraints>\n                                        <constraint firstItem=\"Icl-Ci-lfe\" firstAttribute=\"top\" secondItem=\"Q5r-8D-38q\" secondAttribute=\"topMargin\" constant=\"10\" id=\"7qX-PS-7Br\"/>\n                                        <constraint firstAttribute=\"trailingMargin\" secondItem=\"Icl-Ci-lfe\" secondAttribute=\"trailing\" constant=\"10\" id=\"9Ha-2P-5dg\"/>\n                                        <constraint firstAttribute=\"bottomMargin\" secondItem=\"Gpd-DA-5jT\" secondAttribute=\"bottom\" constant=\"10\" id=\"VwJ-wz-P2g\"/>\n                                        <constraint firstItem=\"Gpd-DA-5jT\" firstAttribute=\"top\" secondItem=\"Icl-Ci-lfe\" secondAttribute=\"bottom\" constant=\"8\" id=\"WE3-mw-fmP\"/>\n                                        <constraint firstAttribute=\"trailingMargin\" secondItem=\"Gpd-DA-5jT\" secondAttribute=\"trailing\" constant=\"10\" id=\"ZxR-2w-fCS\"/>\n                                        <constraint firstItem=\"Icl-Ci-lfe\" firstAttribute=\"leading\" secondItem=\"Q5r-8D-38q\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"uRM-0T-hNk\"/>\n                                        <constraint firstItem=\"Gpd-DA-5jT\" firstAttribute=\"leading\" secondItem=\"Q5r-8D-38q\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"wpS-N6-i5Z\"/>\n                                    </constraints>\n                                </tableViewCellContentView>\n                                <connections>\n                                    <outlet property=\"bodyLabel\" destination=\"Gpd-DA-5jT\" id=\"36l-W7-Kpm\"/>\n                                    <outlet property=\"titleLabel\" destination=\"Icl-Ci-lfe\" id=\"XnB-LL-hx6\"/>\n                                </connections>\n                            </tableViewCell>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" accessoryType=\"disclosureIndicator\" indentationWidth=\"10\" reuseIdentifier=\"Explore\" rowHeight=\"80\" id=\"4Pm-kC-YGr\" userLabel=\"Explore Cell\" customClass=\"TitleBodyCell\" customModule=\"Demo\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"130\" width=\"375\" height=\"80\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"4Pm-kC-YGr\" id=\"LmG-UL-Bu8\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"348.5\" height=\"80\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"252\" verticalCompressionResistancePriority=\"752\" text=\"EXPLORE\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"TbM-iT-SVg\">\n                                            <rect key=\"frame\" x=\"26\" y=\"21\" width=\"304.5\" height=\"16\"/>\n                                            <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Explore many of the SwiftMessages configuration options.\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Siq-Fh-MNa\">\n                                            <rect key=\"frame\" x=\"26\" y=\"45\" width=\"304.5\" height=\"14\"/>\n                                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                            <color key=\"textColor\" systemColor=\"secondaryLabelColor\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                    </subviews>\n                                    <constraints>\n                                        <constraint firstAttribute=\"trailingMargin\" secondItem=\"Siq-Fh-MNa\" secondAttribute=\"trailing\" constant=\"10\" id=\"80d-y2-OaV\"/>\n                                        <constraint firstItem=\"TbM-iT-SVg\" firstAttribute=\"top\" secondItem=\"LmG-UL-Bu8\" secondAttribute=\"topMargin\" constant=\"10\" id=\"8gG-fN-yDK\"/>\n                                        <constraint firstItem=\"TbM-iT-SVg\" firstAttribute=\"leading\" secondItem=\"LmG-UL-Bu8\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"TRM-3t-LhI\"/>\n                                        <constraint firstAttribute=\"bottomMargin\" secondItem=\"Siq-Fh-MNa\" secondAttribute=\"bottom\" constant=\"10\" id=\"Tdt-Nk-UrS\"/>\n                                        <constraint firstItem=\"Siq-Fh-MNa\" firstAttribute=\"leading\" secondItem=\"LmG-UL-Bu8\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"YMF-hA-DB8\"/>\n                                        <constraint firstItem=\"Siq-Fh-MNa\" firstAttribute=\"top\" secondItem=\"TbM-iT-SVg\" secondAttribute=\"bottom\" constant=\"8\" id=\"vck-Dy-ghK\"/>\n                                        <constraint firstAttribute=\"trailingMargin\" secondItem=\"TbM-iT-SVg\" secondAttribute=\"trailing\" constant=\"10\" id=\"zxz-YD-4Rc\"/>\n                                    </constraints>\n                                </tableViewCellContentView>\n                                <connections>\n                                    <outlet property=\"bodyLabel\" destination=\"Siq-Fh-MNa\" id=\"gAv-bW-aS2\"/>\n                                    <outlet property=\"titleLabel\" destination=\"TbM-iT-SVg\" id=\"qSC-ce-0UT\"/>\n                                    <segue destination=\"NF9-wZ-lbZ\" kind=\"show\" id=\"qqa-aN-MxW\"/>\n                                </connections>\n                            </tableViewCell>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" accessoryType=\"disclosureIndicator\" indentationWidth=\"10\" reuseIdentifier=\"ViewController\" rowHeight=\"80\" id=\"edV-Vx-7mh\" userLabel=\"View Controller Cell\" customClass=\"TitleBodyCell\" customModule=\"Demo\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"210\" width=\"375\" height=\"80\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"edV-Vx-7mh\" id=\"6Ng-ZR-L6v\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"348.5\" height=\"80\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"252\" verticalCompressionResistancePriority=\"752\" text=\"VIEW CONTROLLERS\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Qz1-BL-wQN\">\n                                            <rect key=\"frame\" x=\"26\" y=\"21\" width=\"304.5\" height=\"16\"/>\n                                            <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Present modal view controllers with SwiftMessages animations.\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"sCg-K7-URy\">\n                                            <rect key=\"frame\" x=\"26\" y=\"45\" width=\"304.5\" height=\"14\"/>\n                                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                            <color key=\"textColor\" systemColor=\"secondaryLabelColor\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                    </subviews>\n                                    <constraints>\n                                        <constraint firstAttribute=\"bottomMargin\" secondItem=\"sCg-K7-URy\" secondAttribute=\"bottom\" constant=\"10\" id=\"5CA-Mw-MCB\"/>\n                                        <constraint firstItem=\"sCg-K7-URy\" firstAttribute=\"leading\" secondItem=\"6Ng-ZR-L6v\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"B2Y-Ni-QEB\"/>\n                                        <constraint firstAttribute=\"trailingMargin\" secondItem=\"Qz1-BL-wQN\" secondAttribute=\"trailing\" constant=\"10\" id=\"kJt-ef-Icu\"/>\n                                        <constraint firstItem=\"sCg-K7-URy\" firstAttribute=\"top\" secondItem=\"Qz1-BL-wQN\" secondAttribute=\"bottom\" constant=\"8\" id=\"rMk-Ai-Ciy\"/>\n                                        <constraint firstItem=\"Qz1-BL-wQN\" firstAttribute=\"leading\" secondItem=\"6Ng-ZR-L6v\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"t99-ux-IyQ\"/>\n                                        <constraint firstAttribute=\"trailingMargin\" secondItem=\"sCg-K7-URy\" secondAttribute=\"trailing\" constant=\"10\" id=\"xM7-x5-Q9q\"/>\n                                        <constraint firstItem=\"Qz1-BL-wQN\" firstAttribute=\"top\" secondItem=\"6Ng-ZR-L6v\" secondAttribute=\"topMargin\" constant=\"10\" id=\"xjb-IK-xql\"/>\n                                    </constraints>\n                                </tableViewCellContentView>\n                                <connections>\n                                    <outlet property=\"bodyLabel\" destination=\"sCg-K7-URy\" id=\"RNc-md-GU0\"/>\n                                    <outlet property=\"titleLabel\" destination=\"Qz1-BL-wQN\" id=\"U3l-JI-Mxx\"/>\n                                    <segue destination=\"bb1-hO-yeb\" kind=\"show\" id=\"1SB-WP-aOw\"/>\n                                </connections>\n                            </tableViewCell>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" accessoryType=\"disclosureIndicator\" indentationWidth=\"10\" reuseIdentifier=\"ViewController2\" rowHeight=\"80\" id=\"5bv-q2-Q3k\" userLabel=\"View Controller Cell\" customClass=\"TitleBodyCell\" customModule=\"Demo\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"290\" width=\"375\" height=\"80\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"5bv-q2-Q3k\" id=\"6q2-Qj-PQE\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"348.5\" height=\"80\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"252\" verticalCompressionResistancePriority=\"752\" text=\"VIEW CONTROLLERS 2\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"N18-CP-QIt\">\n                                            <rect key=\"frame\" x=\"26\" y=\"21\" width=\"304.5\" height=\"16\"/>\n                                            <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Present modal view controllers with SwiftMessages animations.\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"T5Q-9f-KQC\">\n                                            <rect key=\"frame\" x=\"26\" y=\"45\" width=\"304.5\" height=\"14\"/>\n                                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                            <color key=\"textColor\" systemColor=\"secondaryLabelColor\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                    </subviews>\n                                    <constraints>\n                                        <constraint firstAttribute=\"bottomMargin\" secondItem=\"T5Q-9f-KQC\" secondAttribute=\"bottom\" constant=\"10\" id=\"27V-mS-1Sj\"/>\n                                        <constraint firstItem=\"T5Q-9f-KQC\" firstAttribute=\"leading\" secondItem=\"6q2-Qj-PQE\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"BsF-AT-7xc\"/>\n                                        <constraint firstItem=\"N18-CP-QIt\" firstAttribute=\"top\" secondItem=\"6q2-Qj-PQE\" secondAttribute=\"topMargin\" constant=\"10\" id=\"D8T-hb-QkI\"/>\n                                        <constraint firstItem=\"N18-CP-QIt\" firstAttribute=\"leading\" secondItem=\"6q2-Qj-PQE\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"LFW-vb-Grc\"/>\n                                        <constraint firstAttribute=\"trailingMargin\" secondItem=\"N18-CP-QIt\" secondAttribute=\"trailing\" constant=\"10\" id=\"Xyo-9E-P0G\"/>\n                                        <constraint firstItem=\"T5Q-9f-KQC\" firstAttribute=\"top\" secondItem=\"N18-CP-QIt\" secondAttribute=\"bottom\" constant=\"8\" id=\"frb-lP-XRd\"/>\n                                        <constraint firstAttribute=\"trailingMargin\" secondItem=\"T5Q-9f-KQC\" secondAttribute=\"trailing\" constant=\"10\" id=\"jp7-if-3V8\"/>\n                                    </constraints>\n                                </tableViewCellContentView>\n                                <connections>\n                                    <outlet property=\"bodyLabel\" destination=\"T5Q-9f-KQC\" id=\"IwS-Zu-cgl\"/>\n                                    <outlet property=\"titleLabel\" destination=\"N18-CP-QIt\" id=\"Vwg-pB-W5F\"/>\n                                </connections>\n                            </tableViewCell>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" accessoryType=\"disclosureIndicator\" indentationWidth=\"10\" reuseIdentifier=\"Counted\" rowHeight=\"80\" id=\"rS6-xs-t4z\" userLabel=\"Counted Cell\" customClass=\"TitleBodyCell\" customModule=\"Demo\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"370\" width=\"375\" height=\"80\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"rS6-xs-t4z\" id=\"oQf-QH-2dc\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"348.5\" height=\"80\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"252\" verticalCompressionResistancePriority=\"752\" text=\"COUNTED\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"rzv-E5-oaM\">\n                                            <rect key=\"frame\" x=\"26\" y=\"21\" width=\"304.5\" height=\"16\"/>\n                                            <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Hide a message based on equal number of show() and hideCounted(id:) calls.\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ie4-WM-pe4\">\n                                            <rect key=\"frame\" x=\"26\" y=\"45\" width=\"304.5\" height=\"14\"/>\n                                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                            <color key=\"textColor\" systemColor=\"secondaryLabelColor\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                    </subviews>\n                                    <constraints>\n                                        <constraint firstItem=\"rzv-E5-oaM\" firstAttribute=\"leading\" secondItem=\"oQf-QH-2dc\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"SFU-CL-Wty\"/>\n                                        <constraint firstItem=\"ie4-WM-pe4\" firstAttribute=\"top\" secondItem=\"rzv-E5-oaM\" secondAttribute=\"bottom\" constant=\"8\" id=\"U2E-fs-p7F\"/>\n                                        <constraint firstAttribute=\"bottomMargin\" secondItem=\"ie4-WM-pe4\" secondAttribute=\"bottom\" constant=\"10\" id=\"cLR-EW-Ts2\"/>\n                                        <constraint firstItem=\"rzv-E5-oaM\" firstAttribute=\"top\" secondItem=\"oQf-QH-2dc\" secondAttribute=\"topMargin\" constant=\"10\" id=\"l8I-It-z31\"/>\n                                        <constraint firstAttribute=\"trailingMargin\" secondItem=\"rzv-E5-oaM\" secondAttribute=\"trailing\" constant=\"10\" id=\"lLy-zd-IQq\"/>\n                                        <constraint firstItem=\"ie4-WM-pe4\" firstAttribute=\"leading\" secondItem=\"oQf-QH-2dc\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"mRn-xu-Vb7\"/>\n                                        <constraint firstAttribute=\"trailingMargin\" secondItem=\"ie4-WM-pe4\" secondAttribute=\"trailing\" constant=\"10\" id=\"roT-wO-OEY\"/>\n                                    </constraints>\n                                </tableViewCellContentView>\n                                <connections>\n                                    <outlet property=\"bodyLabel\" destination=\"ie4-WM-pe4\" id=\"O4J-r5-8Yi\"/>\n                                    <outlet property=\"titleLabel\" destination=\"rzv-E5-oaM\" id=\"R5w-fT-HnU\"/>\n                                </connections>\n                            </tableViewCell>\n                        </prototypes>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"vur-BZ-g1e\" id=\"rfz-yY-IL6\"/>\n                            <outlet property=\"delegate\" destination=\"vur-BZ-g1e\" id=\"P2z-vo-Vm2\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" title=\"Demo\" id=\"2KJ-2Z-WHF\"/>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"L1V-tt-hkn\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1283\" y=\"305\"/>\n        </scene>\n        <!--Explore-->\n        <scene sceneID=\"HFO-dV-gYe\">\n            <objects>\n                <tableViewController id=\"NF9-wZ-lbZ\" customClass=\"ExploreViewController\" customModule=\"Demo\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"static\" style=\"grouped\" separatorStyle=\"none\" allowsSelection=\"NO\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"18\" sectionFooterHeight=\"18\" id=\"XwA-eF-0LG\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"1200\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <sections>\n                            <tableViewSection headerTitle=\"Presentation\" id=\"ifN-uy-lWX\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"nYa-Hy-Lda\" userLabel=\"Presentation style cell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"55.5\" width=\"375\" height=\"74\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"nYa-Hy-Lda\" id=\"WC1-5B-Pa4\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"74\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"PRESENTATION STYLE\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Epw-Yk-L8V\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"11\" width=\"146.5\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" verticalCompressionResistancePriority=\"751\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" segmentControlStyle=\"plain\" selectedSegmentIndex=\"0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Agu-Vo-ckI\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"32\" width=\"194\" height=\"32\"/>\n                                                    <segments>\n                                                        <segment title=\"Top\"/>\n                                                        <segment title=\"Bottom\"/>\n                                                        <segment title=\"Center\"/>\n                                                    </segments>\n                                                </segmentedControl>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"Agu-Vo-ckI\" firstAttribute=\"leading\" secondItem=\"WC1-5B-Pa4\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"Cpb-Dt-E6Y\"/>\n                                                <constraint firstItem=\"Epw-Yk-L8V\" firstAttribute=\"leading\" secondItem=\"WC1-5B-Pa4\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"J7Q-aQ-QaD\"/>\n                                                <constraint firstItem=\"Epw-Yk-L8V\" firstAttribute=\"top\" secondItem=\"WC1-5B-Pa4\" secondAttribute=\"topMargin\" id=\"Vit-Z4-Pbb\"/>\n                                                <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"Epw-Yk-L8V\" secondAttribute=\"trailingMargin\" id=\"r47-xj-9xE\"/>\n                                                <constraint firstAttribute=\"trailingMargin\" relation=\"greaterThanOrEqual\" secondItem=\"Agu-Vo-ckI\" secondAttribute=\"trailing\" constant=\"10\" id=\"sjj-OR-At0\"/>\n                                                <constraint firstItem=\"Agu-Vo-ckI\" firstAttribute=\"top\" secondItem=\"Epw-Yk-L8V\" secondAttribute=\"bottom\" constant=\"5\" id=\"w3y-hH-POd\"/>\n                                                <constraint firstAttribute=\"bottomMargin\" secondItem=\"Agu-Vo-ckI\" secondAttribute=\"bottom\" id=\"zKd-O2-Bv3\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"eMM-fw-ePY\" userLabel=\"Presentation context cell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"129.5\" width=\"375\" height=\"74\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"eMM-fw-ePY\" id=\"qjs-CO-J4K\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"74\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"PRESENTATION CONTEXT\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"CU0-87-ZCD\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"11\" width=\"168.5\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" verticalHuggingPriority=\"252\" verticalCompressionResistancePriority=\"751\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" apportionsSegmentWidthsByContent=\"YES\" segmentControlStyle=\"plain\" selectedSegmentIndex=\"0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"AYG-qj-yjv\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"32\" width=\"302\" height=\"32\"/>\n                                                    <segments>\n                                                        <segment title=\"Automatic\"/>\n                                                        <segment title=\"Normal Level\"/>\n                                                        <segment title=\"Status Bar Level\"/>\n                                                    </segments>\n                                                </segmentedControl>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"CU0-87-ZCD\" firstAttribute=\"top\" secondItem=\"qjs-CO-J4K\" secondAttribute=\"topMargin\" id=\"5OO-hZ-eoL\"/>\n                                                <constraint firstItem=\"AYG-qj-yjv\" firstAttribute=\"top\" secondItem=\"CU0-87-ZCD\" secondAttribute=\"bottom\" constant=\"5\" id=\"crO-zT-nKO\"/>\n                                                <constraint firstAttribute=\"bottomMargin\" secondItem=\"AYG-qj-yjv\" secondAttribute=\"bottom\" id=\"dEm-3s-rij\"/>\n                                                <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"CU0-87-ZCD\" secondAttribute=\"trailingMargin\" id=\"jqI-ll-YAs\"/>\n                                                <constraint firstAttribute=\"trailingMargin\" relation=\"greaterThanOrEqual\" secondItem=\"AYG-qj-yjv\" secondAttribute=\"trailing\" constant=\"10\" id=\"s4v-Cg-Y2K\"/>\n                                                <constraint firstItem=\"AYG-qj-yjv\" firstAttribute=\"leading\" secondItem=\"qjs-CO-J4K\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"xKq-V9-Uib\"/>\n                                                <constraint firstItem=\"CU0-87-ZCD\" firstAttribute=\"leading\" secondItem=\"qjs-CO-J4K\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"zZI-MM-YUE\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"fnL-fA-GeP\" userLabel=\"Duration cell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"203.5\" width=\"375\" height=\"74\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"fnL-fA-GeP\" id=\"xfk-SM-u8I\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"74\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"252\" verticalCompressionResistancePriority=\"751\" text=\"DURATION\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"cad-I9-jeP\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"11\" width=\"69.5\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" apportionsSegmentWidthsByContent=\"YES\" segmentControlStyle=\"plain\" selectedSegmentIndex=\"0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"nng-9a-v3B\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"32\" width=\"310\" height=\"32\"/>\n                                                    <segments>\n                                                        <segment title=\"Automatic\"/>\n                                                        <segment title=\"Forever\"/>\n                                                        <segment title=\"1 Second\"/>\n                                                        <segment title=\"5 Seconds\"/>\n                                                    </segments>\n                                                </segmentedControl>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"nng-9a-v3B\" firstAttribute=\"top\" secondItem=\"cad-I9-jeP\" secondAttribute=\"bottom\" constant=\"5\" id=\"AaJ-Cs-FeO\"/>\n                                                <constraint firstItem=\"nng-9a-v3B\" firstAttribute=\"leading\" secondItem=\"xfk-SM-u8I\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"Atx-vb-rTV\"/>\n                                                <constraint firstItem=\"cad-I9-jeP\" firstAttribute=\"leading\" secondItem=\"xfk-SM-u8I\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"CSd-i5-VHE\"/>\n                                                <constraint firstItem=\"cad-I9-jeP\" firstAttribute=\"top\" secondItem=\"xfk-SM-u8I\" secondAttribute=\"topMargin\" id=\"HF3-KH-Gll\"/>\n                                                <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"cad-I9-jeP\" secondAttribute=\"trailingMargin\" id=\"gtm-dc-eyX\"/>\n                                                <constraint firstAttribute=\"trailingMargin\" relation=\"greaterThanOrEqual\" secondItem=\"nng-9a-v3B\" secondAttribute=\"trailing\" constant=\"10\" id=\"gzc-IX-LKG\"/>\n                                                <constraint firstAttribute=\"bottomMargin\" secondItem=\"nng-9a-v3B\" secondAttribute=\"bottom\" id=\"izP-fi-ACu\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"hkB-YI-YQX\" userLabel=\"Dim mode cell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"277.5\" width=\"375\" height=\"74\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"hkB-YI-YQX\" id=\"6ov-9U-ABh\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"74\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"751\" text=\"DIM MODE\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"TsP-n5-Vko\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"11\" width=\"68.5\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" segmentControlStyle=\"plain\" selectedSegmentIndex=\"0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"iw9-KB-Nyd\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"32\" width=\"211\" height=\"32\"/>\n                                                    <segments>\n                                                        <segment title=\"None\"/>\n                                                        <segment title=\"Gray\"/>\n                                                        <segment title=\"Color\"/>\n                                                        <segment title=\"Blur\"/>\n                                                    </segments>\n                                                </segmentedControl>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"TsP-n5-Vko\" firstAttribute=\"leading\" secondItem=\"6ov-9U-ABh\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"1lT-9J-nnY\"/>\n                                                <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"TsP-n5-Vko\" secondAttribute=\"trailingMargin\" id=\"AQe-WE-6do\"/>\n                                                <constraint firstItem=\"iw9-KB-Nyd\" firstAttribute=\"top\" secondItem=\"TsP-n5-Vko\" secondAttribute=\"bottom\" constant=\"5\" id=\"BKH-fV-3Jj\"/>\n                                                <constraint firstAttribute=\"trailingMargin\" relation=\"greaterThanOrEqual\" secondItem=\"iw9-KB-Nyd\" secondAttribute=\"trailing\" constant=\"10\" id=\"JIs-wV-rvK\"/>\n                                                <constraint firstItem=\"iw9-KB-Nyd\" firstAttribute=\"leading\" secondItem=\"6ov-9U-ABh\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"Mgi-JB-fHu\"/>\n                                                <constraint firstAttribute=\"bottomMargin\" secondItem=\"iw9-KB-Nyd\" secondAttribute=\"bottom\" id=\"d3m-BM-mBr\"/>\n                                                <constraint firstItem=\"TsP-n5-Vko\" firstAttribute=\"top\" secondItem=\"6ov-9U-ABh\" secondAttribute=\"topMargin\" id=\"tKc-ds-gCa\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"zQR-VC-Yl3\" userLabel=\"Interactive hide cell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"351.5\" width=\"375\" height=\"53\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"zQR-VC-Yl3\" id=\"RZq-YF-8fo\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"53\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"INTERACTIVE HIDE\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dw8-96-uXk\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"18.5\" width=\"123\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Vdr-7b-DJB\">\n                                                    <rect key=\"frame\" x=\"300\" y=\"11\" width=\"51\" height=\"31\"/>\n                                                </switch>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"dw8-96-uXk\" firstAttribute=\"leading\" secondItem=\"RZq-YF-8fo\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"5Yb-Fn-nX6\"/>\n                                                <constraint firstAttribute=\"trailingMargin\" secondItem=\"Vdr-7b-DJB\" secondAttribute=\"trailing\" constant=\"10\" id=\"5oG-04-THv\"/>\n                                                <constraint firstItem=\"dw8-96-uXk\" firstAttribute=\"centerY\" secondItem=\"RZq-YF-8fo\" secondAttribute=\"centerY\" id=\"6Td-Pc-Kix\"/>\n                                                <constraint firstItem=\"Vdr-7b-DJB\" firstAttribute=\"centerY\" secondItem=\"dw8-96-uXk\" secondAttribute=\"centerY\" id=\"7bs-jn-bU1\"/>\n                                                <constraint firstAttribute=\"bottomMargin\" secondItem=\"Vdr-7b-DJB\" secondAttribute=\"bottom\" id=\"OsS-B4-XfA\"/>\n                                                <constraint firstItem=\"Vdr-7b-DJB\" firstAttribute=\"top\" secondItem=\"RZq-YF-8fo\" secondAttribute=\"topMargin\" id=\"vMT-Nx-zM2\"/>\n                                                <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"dw8-96-uXk\" secondAttribute=\"trailingMargin\" id=\"wyo-o0-Hg8\"/>\n                                            </constraints>\n                                            <variation key=\"default\">\n                                                <mask key=\"constraints\">\n                                                    <exclude reference=\"6Td-Pc-Kix\"/>\n                                                </mask>\n                                            </variation>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"BkJ-zT-C7Z\" userLabel=\"Haptic cell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"404.5\" width=\"375\" height=\"53\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"BkJ-zT-C7Z\" id=\"GXF-qW-HHA\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"53\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Haptic Feedback\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8Vy-cX-rMN\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"18.5\" width=\"109\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ah6-5J-Psp\">\n                                                    <rect key=\"frame\" x=\"300\" y=\"11\" width=\"51\" height=\"31\"/>\n                                                </switch>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"8Vy-cX-rMN\" firstAttribute=\"centerY\" secondItem=\"GXF-qW-HHA\" secondAttribute=\"centerY\" id=\"605-kz-s84\"/>\n                                                <constraint firstItem=\"ah6-5J-Psp\" firstAttribute=\"centerY\" secondItem=\"8Vy-cX-rMN\" secondAttribute=\"centerY\" id=\"CuY-eF-FkL\"/>\n                                                <constraint firstAttribute=\"bottomMargin\" secondItem=\"ah6-5J-Psp\" secondAttribute=\"bottom\" id=\"FWM-LN-Om7\"/>\n                                                <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"8Vy-cX-rMN\" secondAttribute=\"trailingMargin\" id=\"P7C-Bc-POB\"/>\n                                                <constraint firstAttribute=\"trailingMargin\" secondItem=\"ah6-5J-Psp\" secondAttribute=\"trailing\" constant=\"10\" id=\"QQa-X8-ldo\"/>\n                                                <constraint firstItem=\"ah6-5J-Psp\" firstAttribute=\"top\" secondItem=\"GXF-qW-HHA\" secondAttribute=\"topMargin\" id=\"Y7g-Sy-zJR\"/>\n                                                <constraint firstItem=\"8Vy-cX-rMN\" firstAttribute=\"leading\" secondItem=\"GXF-qW-HHA\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"m3b-RD-jOz\"/>\n                                            </constraints>\n                                            <variation key=\"default\">\n                                                <mask key=\"constraints\">\n                                                    <exclude reference=\"605-kz-s84\"/>\n                                                </mask>\n                                            </variation>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"jsU-7Q-nnr\" userLabel=\"Auto rotate cell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"457.5\" width=\"375\" height=\"53\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"jsU-7Q-nnr\" id=\"Lyn-8c-LBy\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"53\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"AUTO ROTATE\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"VW7-M1-Q0o\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"18.5\" width=\"92\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"WfA-vA-cpG\">\n                                                    <rect key=\"frame\" x=\"300\" y=\"11\" width=\"51\" height=\"31\"/>\n                                                </switch>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstAttribute=\"trailingMargin\" secondItem=\"WfA-vA-cpG\" secondAttribute=\"trailing\" constant=\"10\" id=\"HBd-ud-36Q\"/>\n                                                <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"VW7-M1-Q0o\" secondAttribute=\"trailingMargin\" id=\"O68-K8-nrx\"/>\n                                                <constraint firstItem=\"WfA-vA-cpG\" firstAttribute=\"top\" secondItem=\"Lyn-8c-LBy\" secondAttribute=\"topMargin\" id=\"Wjg-VI-0g6\"/>\n                                                <constraint firstItem=\"VW7-M1-Q0o\" firstAttribute=\"centerY\" secondItem=\"Lyn-8c-LBy\" secondAttribute=\"centerY\" id=\"Yjw-4P-Xec\"/>\n                                                <constraint firstAttribute=\"bottomMargin\" secondItem=\"WfA-vA-cpG\" secondAttribute=\"bottom\" id=\"afn-K6-bfX\"/>\n                                                <constraint firstItem=\"WfA-vA-cpG\" firstAttribute=\"centerY\" secondItem=\"VW7-M1-Q0o\" secondAttribute=\"centerY\" id=\"uuV-KC-8Ti\"/>\n                                                <constraint firstItem=\"VW7-M1-Q0o\" firstAttribute=\"leading\" secondItem=\"Lyn-8c-LBy\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"vmK-Hu-mBb\"/>\n                                            </constraints>\n                                            <variation key=\"default\">\n                                                <mask key=\"constraints\">\n                                                    <exclude reference=\"Yjw-4P-Xec\"/>\n                                                </mask>\n                                            </variation>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"Styling\" id=\"Ibz-q6-0d2\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"u46-FS-ahC\" userLabel=\"Theme cell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"566.5\" width=\"375\" height=\"74\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"u46-FS-ahC\" id=\"A01-Bb-OrK\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"74\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"LAYOUT\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"iQk-lG-ZCm\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"11\" width=\"53.5\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" verticalCompressionResistancePriority=\"751\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" segmentControlStyle=\"plain\" selectedSegmentIndex=\"0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"aBT-5M-2tg\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"32\" width=\"323\" height=\"32\"/>\n                                                    <segments>\n                                                        <segment title=\"Default\"/>\n                                                        <segment title=\"Card\"/>\n                                                        <segment title=\"Tab\"/>\n                                                        <segment title=\"Status Line\"/>\n                                                    </segments>\n                                                </segmentedControl>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"aBT-5M-2tg\" firstAttribute=\"leading\" secondItem=\"A01-Bb-OrK\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"8Ot-I8-Po3\"/>\n                                                <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"iQk-lG-ZCm\" secondAttribute=\"trailingMargin\" id=\"8uY-8p-iRR\"/>\n                                                <constraint firstAttribute=\"trailingMargin\" relation=\"greaterThanOrEqual\" secondItem=\"aBT-5M-2tg\" secondAttribute=\"trailing\" constant=\"10\" id=\"9Kt-2l-w5O\"/>\n                                                <constraint firstItem=\"aBT-5M-2tg\" firstAttribute=\"top\" secondItem=\"iQk-lG-ZCm\" secondAttribute=\"bottom\" constant=\"5\" id=\"K8i-JI-tIa\"/>\n                                                <constraint firstItem=\"iQk-lG-ZCm\" firstAttribute=\"leading\" secondItem=\"A01-Bb-OrK\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"TZG-YE-R2B\"/>\n                                                <constraint firstItem=\"iQk-lG-ZCm\" firstAttribute=\"top\" secondItem=\"A01-Bb-OrK\" secondAttribute=\"topMargin\" id=\"XhZ-Em-VDW\"/>\n                                                <constraint firstAttribute=\"bottomMargin\" secondItem=\"aBT-5M-2tg\" secondAttribute=\"bottom\" id=\"bWO-4u-AAG\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"v73-pR-Iy2\" userLabel=\"Theme cell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"640.5\" width=\"375\" height=\"74\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"v73-pR-Iy2\" id=\"Fdp-gh-OCb\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"74\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"252\" verticalCompressionResistancePriority=\"751\" text=\"THEME\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"J7S-wJ-kt0\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"11\" width=\"46.5\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" segmentControlStyle=\"plain\" selectedSegmentIndex=\"0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"NoM-It-vKT\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"32\" width=\"323\" height=\"32\"/>\n                                                    <segments>\n                                                        <segment title=\"Info\"/>\n                                                        <segment title=\"Success\"/>\n                                                        <segment title=\"Warning\"/>\n                                                        <segment title=\"Error\"/>\n                                                        <segment title=\"Custom\"/>\n                                                    </segments>\n                                                </segmentedControl>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"NoM-It-vKT\" firstAttribute=\"leading\" secondItem=\"Fdp-gh-OCb\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"3Dm-o8-hOx\"/>\n                                                <constraint firstItem=\"NoM-It-vKT\" firstAttribute=\"top\" secondItem=\"J7S-wJ-kt0\" secondAttribute=\"bottom\" constant=\"5\" id=\"EGd-0G-8l9\"/>\n                                                <constraint firstAttribute=\"bottomMargin\" secondItem=\"NoM-It-vKT\" secondAttribute=\"bottom\" id=\"O5S-3g-TaO\"/>\n                                                <constraint firstItem=\"J7S-wJ-kt0\" firstAttribute=\"leading\" secondItem=\"Fdp-gh-OCb\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"gAM-iD-DoY\"/>\n                                                <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"J7S-wJ-kt0\" secondAttribute=\"trailingMargin\" id=\"lgp-C7-ccc\"/>\n                                                <constraint firstItem=\"J7S-wJ-kt0\" firstAttribute=\"top\" secondItem=\"Fdp-gh-OCb\" secondAttribute=\"topMargin\" id=\"mVy-xe-CQk\"/>\n                                                <constraint firstAttribute=\"trailingMargin\" relation=\"greaterThanOrEqual\" secondItem=\"NoM-It-vKT\" secondAttribute=\"trailing\" constant=\"10\" id=\"tQU-NQ-phM\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"0mE-sA-4rN\" userLabel=\"Theme cell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"714.5\" width=\"375\" height=\"74\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"0mE-sA-4rN\" id=\"eVs-bm-01A\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"74\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"ICON STYLE\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"sXY-rl-8uH\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"11\" width=\"79\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" verticalHuggingPriority=\"252\" verticalCompressionResistancePriority=\"751\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" segmentControlStyle=\"plain\" selectedSegmentIndex=\"0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"c2K-94-CuB\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"32\" width=\"200\" height=\"32\"/>\n                                                    <segments>\n                                                        <segment title=\"Regular\"/>\n                                                        <segment title=\"Light\"/>\n                                                        <segment title=\"Subtle\"/>\n                                                    </segments>\n                                                </segmentedControl>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"c2K-94-CuB\" firstAttribute=\"leading\" secondItem=\"eVs-bm-01A\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"57X-r6-yn8\"/>\n                                                <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"sXY-rl-8uH\" secondAttribute=\"trailingMargin\" id=\"6Hz-mY-AJF\"/>\n                                                <constraint firstItem=\"sXY-rl-8uH\" firstAttribute=\"top\" secondItem=\"eVs-bm-01A\" secondAttribute=\"topMargin\" id=\"aNb-k2-SZY\"/>\n                                                <constraint firstItem=\"c2K-94-CuB\" firstAttribute=\"top\" secondItem=\"sXY-rl-8uH\" secondAttribute=\"bottom\" constant=\"5\" id=\"euE-AS-gZT\"/>\n                                                <constraint firstAttribute=\"bottomMargin\" secondItem=\"c2K-94-CuB\" secondAttribute=\"bottom\" id=\"ifY-M2-nQa\"/>\n                                                <constraint firstAttribute=\"trailingMargin\" relation=\"greaterThanOrEqual\" secondItem=\"c2K-94-CuB\" secondAttribute=\"trailing\" constant=\"10\" id=\"jMs-A0-qxE\"/>\n                                                <constraint firstItem=\"sXY-rl-8uH\" firstAttribute=\"leading\" secondItem=\"eVs-bm-01A\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"rCc-O8-QkU\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"4RW-U9-BVB\" userLabel=\"Drop shadow cell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"788.5\" width=\"375\" height=\"53\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"4RW-U9-BVB\" id=\"wdb-hX-CIv\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"53\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"DROP SHADOW\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MUL-on-v9R\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"18.5\" width=\"101.5\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"sqb-Fg-YR8\">\n                                                    <rect key=\"frame\" x=\"300\" y=\"11\" width=\"51\" height=\"31\"/>\n                                                </switch>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstAttribute=\"bottomMargin\" secondItem=\"sqb-Fg-YR8\" secondAttribute=\"bottom\" id=\"8Os-Ki-ivF\"/>\n                                                <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"MUL-on-v9R\" secondAttribute=\"trailingMargin\" id=\"LZS-OO-jq3\"/>\n                                                <constraint firstItem=\"sqb-Fg-YR8\" firstAttribute=\"centerY\" secondItem=\"MUL-on-v9R\" secondAttribute=\"centerY\" id=\"UHE-lU-Byf\"/>\n                                                <constraint firstAttribute=\"trailingMargin\" secondItem=\"sqb-Fg-YR8\" secondAttribute=\"trailing\" constant=\"10\" id=\"lo9-zU-2YQ\"/>\n                                                <constraint firstItem=\"MUL-on-v9R\" firstAttribute=\"leading\" secondItem=\"wdb-hX-CIv\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"uKv-3s-QCh\"/>\n                                                <constraint firstItem=\"sqb-Fg-YR8\" firstAttribute=\"top\" secondItem=\"wdb-hX-CIv\" secondAttribute=\"topMargin\" id=\"wQm-n2-N5D\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"CONTENT\" id=\"Mih-L6-PeE\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"ddI-Jn-NgP\" userLabel=\"Title cell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"897.5\" width=\"375\" height=\"75\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"ddI-Jn-NgP\" id=\"4HG-zA-HtF\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"75\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"TITLE\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"zs0-Qc-Tls\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"11\" width=\"37\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" verticalCompressionResistancePriority=\"751\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" text=\"Heads Up!\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" clearButtonMode=\"whileEditing\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Z0U-kn-8rs\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"30\" width=\"323\" height=\"34\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                    <textInputTraits key=\"textInputTraits\" returnKeyType=\"done\" enablesReturnKeyAutomatically=\"YES\"/>\n                                                </textField>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"Z0U-kn-8rs\" firstAttribute=\"top\" secondItem=\"zs0-Qc-Tls\" secondAttribute=\"bottom\" constant=\"3\" id=\"Rzd-5J-cB5\"/>\n                                                <constraint firstItem=\"Z0U-kn-8rs\" firstAttribute=\"bottom\" secondItem=\"4HG-zA-HtF\" secondAttribute=\"bottomMargin\" id=\"TcB-TW-PDr\"/>\n                                                <constraint firstItem=\"Z0U-kn-8rs\" firstAttribute=\"leading\" secondItem=\"4HG-zA-HtF\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"Vdi-x1-PIO\"/>\n                                                <constraint firstAttribute=\"trailingMargin\" secondItem=\"Z0U-kn-8rs\" secondAttribute=\"trailing\" constant=\"10\" id=\"hIY-BQ-302\"/>\n                                                <constraint firstItem=\"zs0-Qc-Tls\" firstAttribute=\"top\" secondItem=\"4HG-zA-HtF\" secondAttribute=\"topMargin\" id=\"hjh-hv-09Y\"/>\n                                                <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"zs0-Qc-Tls\" secondAttribute=\"trailingMargin\" id=\"iLg-aD-BQB\"/>\n                                                <constraint firstItem=\"zs0-Qc-Tls\" firstAttribute=\"leading\" secondItem=\"4HG-zA-HtF\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"pcw-qp-Boc\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"bdE-R5-mtF\" userLabel=\"Subtitle cell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"972.5\" width=\"375\" height=\"75\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"bdE-R5-mtF\" id=\"E8h-YG-8UX\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"75\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"BODY\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"KYf-CB-aEU\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"11\" width=\"37.5\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" verticalCompressionResistancePriority=\"751\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" text=\"This message is very important.\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" clearButtonMode=\"whileEditing\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ev4-j7-wY0\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"30\" width=\"323\" height=\"34\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                    <textInputTraits key=\"textInputTraits\"/>\n                                                </textField>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"Ev4-j7-wY0\" firstAttribute=\"leading\" secondItem=\"E8h-YG-8UX\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"1JE-I2-oso\"/>\n                                                <constraint firstAttribute=\"trailingMargin\" secondItem=\"Ev4-j7-wY0\" secondAttribute=\"trailing\" constant=\"10\" id=\"4Hf-KW-CsK\"/>\n                                                <constraint firstItem=\"Ev4-j7-wY0\" firstAttribute=\"top\" secondItem=\"KYf-CB-aEU\" secondAttribute=\"bottom\" constant=\"3\" id=\"dZZ-Cf-rj2\"/>\n                                                <constraint firstItem=\"KYf-CB-aEU\" firstAttribute=\"top\" secondItem=\"E8h-YG-8UX\" secondAttribute=\"topMargin\" id=\"e5G-Ed-IdX\"/>\n                                                <constraint firstItem=\"Ev4-j7-wY0\" firstAttribute=\"bottom\" secondItem=\"E8h-YG-8UX\" secondAttribute=\"bottomMargin\" id=\"fb9-ZY-81L\"/>\n                                                <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"KYf-CB-aEU\" secondAttribute=\"trailingMargin\" id=\"qOV-9d-yOF\"/>\n                                                <constraint firstItem=\"KYf-CB-aEU\" firstAttribute=\"leading\" secondItem=\"E8h-YG-8UX\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"uL0-uX-tC7\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"i0m-Xn-tMe\" userLabel=\"Hiding cell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"1047.5\" width=\"375\" height=\"113\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"i0m-Xn-tMe\" id=\"y4L-XO-6WY\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"113\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"SHOW\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"07f-nU-dvy\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"11\" width=\"42\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <stackView opaque=\"NO\" contentMode=\"scaleToFill\" axis=\"vertical\" distribution=\"fillEqually\" spacing=\"5\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UMq-Yn-VYn\">\n                                                    <rect key=\"frame\" x=\"26\" y=\"35\" width=\"323\" height=\"67\"/>\n                                                    <subviews>\n                                                        <stackView opaque=\"NO\" contentMode=\"scaleToFill\" distribution=\"fillEqually\" spacing=\"40\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"zwT-Yv-eyU\">\n                                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"323\" height=\"31\"/>\n                                                            <subviews>\n                                                                <stackView opaque=\"NO\" contentMode=\"scaleToFill\" alignment=\"center\" spacing=\"20\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"sWT-Ug-j6y\">\n                                                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"141.5\" height=\"31\"/>\n                                                                    <subviews>\n                                                                        <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" horizontalCompressionResistancePriority=\"751\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"w9C-j2-COD\">\n                                                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"51\" height=\"31\"/>\n                                                                        </switch>\n                                                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Button\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dRM-c4-ORW\">\n                                                                            <rect key=\"frame\" x=\"69\" y=\"6\" width=\"72.5\" height=\"19.5\"/>\n                                                                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                                            <color key=\"textColor\" systemColor=\"secondaryLabelColor\"/>\n                                                                            <nil key=\"highlightedColor\"/>\n                                                                        </label>\n                                                                    </subviews>\n                                                                </stackView>\n                                                                <stackView opaque=\"NO\" contentMode=\"scaleToFill\" alignment=\"center\" spacing=\"20\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"WVf-N1-ipR\">\n                                                                    <rect key=\"frame\" x=\"181.5\" y=\"0.0\" width=\"141.5\" height=\"31\"/>\n                                                                    <subviews>\n                                                                        <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" horizontalCompressionResistancePriority=\"751\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"CDM-PI-gjl\">\n                                                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"51\" height=\"31\"/>\n                                                                        </switch>\n                                                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"PfQ-eZ-O0L\">\n                                                                            <rect key=\"frame\" x=\"69\" y=\"6\" width=\"72.5\" height=\"19.5\"/>\n                                                                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                                            <color key=\"textColor\" systemColor=\"secondaryLabelColor\"/>\n                                                                            <nil key=\"highlightedColor\"/>\n                                                                        </label>\n                                                                    </subviews>\n                                                                </stackView>\n                                                            </subviews>\n                                                        </stackView>\n                                                        <stackView opaque=\"NO\" contentMode=\"scaleToFill\" distribution=\"fillEqually\" spacing=\"40\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"FqU-2E-xeu\">\n                                                            <rect key=\"frame\" x=\"0.0\" y=\"36\" width=\"323\" height=\"31\"/>\n                                                            <subviews>\n                                                                <stackView opaque=\"NO\" contentMode=\"scaleToFill\" alignment=\"center\" spacing=\"20\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"VJa-y8-lxV\">\n                                                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"141.5\" height=\"31\"/>\n                                                                    <subviews>\n                                                                        <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" horizontalCompressionResistancePriority=\"751\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"mfB-t8-O1h\">\n                                                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"51\" height=\"31\"/>\n                                                                        </switch>\n                                                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Icon\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"XKN-W4-1jq\">\n                                                                            <rect key=\"frame\" x=\"69\" y=\"6\" width=\"72.5\" height=\"19.5\"/>\n                                                                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                                            <color key=\"textColor\" systemColor=\"secondaryLabelColor\"/>\n                                                                            <nil key=\"highlightedColor\"/>\n                                                                        </label>\n                                                                    </subviews>\n                                                                </stackView>\n                                                                <stackView opaque=\"NO\" contentMode=\"scaleToFill\" alignment=\"center\" spacing=\"20\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"9hh-9r-JQN\">\n                                                                    <rect key=\"frame\" x=\"181.5\" y=\"0.0\" width=\"141.5\" height=\"31\"/>\n                                                                    <subviews>\n                                                                        <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" horizontalCompressionResistancePriority=\"751\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"zUi-zd-sZL\">\n                                                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"51\" height=\"31\"/>\n                                                                        </switch>\n                                                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Body\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"DGg-y8-Ln9\">\n                                                                            <rect key=\"frame\" x=\"69\" y=\"6\" width=\"72.5\" height=\"19.5\"/>\n                                                                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                                            <color key=\"textColor\" systemColor=\"secondaryLabelColor\"/>\n                                                                            <nil key=\"highlightedColor\"/>\n                                                                        </label>\n                                                                    </subviews>\n                                                                </stackView>\n                                                            </subviews>\n                                                        </stackView>\n                                                    </subviews>\n                                                </stackView>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"07f-nU-dvy\" firstAttribute=\"top\" secondItem=\"y4L-XO-6WY\" secondAttribute=\"topMargin\" id=\"9iU-v1-KQS\"/>\n                                                <constraint firstAttribute=\"trailingMargin\" secondItem=\"UMq-Yn-VYn\" secondAttribute=\"trailing\" constant=\"10\" id=\"FHb-yR-nEi\"/>\n                                                <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"07f-nU-dvy\" secondAttribute=\"trailingMargin\" id=\"R40-d2-woT\"/>\n                                                <constraint firstItem=\"UMq-Yn-VYn\" firstAttribute=\"leading\" secondItem=\"y4L-XO-6WY\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"dwS-rh-Hz0\"/>\n                                                <constraint firstItem=\"07f-nU-dvy\" firstAttribute=\"leading\" secondItem=\"y4L-XO-6WY\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"gSR-TQ-PsI\"/>\n                                                <constraint firstAttribute=\"bottomMargin\" secondItem=\"UMq-Yn-VYn\" secondAttribute=\"bottom\" id=\"m0V-Dc-OY5\"/>\n                                                <constraint firstItem=\"UMq-Yn-VYn\" firstAttribute=\"top\" secondItem=\"07f-nU-dvy\" secondAttribute=\"bottom\" constant=\"8\" id=\"vid-6x-YXe\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                        </sections>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"NF9-wZ-lbZ\" id=\"PpM-hK-flu\"/>\n                            <outlet property=\"delegate\" destination=\"NF9-wZ-lbZ\" id=\"rp6-SQ-4A1\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" title=\"Explore\" id=\"rMg-O3-NIm\">\n                        <barButtonItem key=\"rightBarButtonItem\" id=\"dQj-XX-UVC\">\n                            <view key=\"customView\" contentMode=\"scaleToFill\" id=\"put-HD-gTP\">\n                                <rect key=\"frame\" x=\"234\" y=\"0.0\" width=\"125\" height=\"44\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <subviews>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"PpV-jZ-Yo3\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"5\" width=\"62\" height=\"34\"/>\n                                        <color key=\"backgroundColor\" red=\"0.1647058824\" green=\"0.6588235294\" blue=\"0.98039215690000003\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" priority=\"900\" constant=\"33\" id=\"4dH-D2-IES\"/>\n                                        </constraints>\n                                        <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"0.0\" maxX=\"10\" maxY=\"0.0\"/>\n                                        <state key=\"normal\" title=\"SHOW\"/>\n                                        <userDefinedRuntimeAttributes>\n                                            <userDefinedRuntimeAttribute type=\"number\" keyPath=\"layer.cornerRadius\">\n                                                <integer key=\"value\" value=\"5\"/>\n                                            </userDefinedRuntimeAttribute>\n                                        </userDefinedRuntimeAttributes>\n                                        <connections>\n                                            <action selector=\"show:\" destination=\"NF9-wZ-lbZ\" eventType=\"touchUpInside\" id=\"M1F-VO-IXP\"/>\n                                        </connections>\n                                    </button>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"249\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vaB-mE-Rve\">\n                                        <rect key=\"frame\" x=\"67\" y=\"5\" width=\"58\" height=\"34\"/>\n                                        <color key=\"backgroundColor\" red=\"1\" green=\"0.4665354619\" blue=\"0.015686274510000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" priority=\"900\" constant=\"33\" id=\"rTo-Jm-6qi\"/>\n                                        </constraints>\n                                        <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"13\"/>\n                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"0.0\" maxX=\"10\" maxY=\"0.0\"/>\n                                        <state key=\"normal\" title=\"HIDE\"/>\n                                        <userDefinedRuntimeAttributes>\n                                            <userDefinedRuntimeAttribute type=\"number\" keyPath=\"layer.cornerRadius\">\n                                                <integer key=\"value\" value=\"5\"/>\n                                            </userDefinedRuntimeAttribute>\n                                        </userDefinedRuntimeAttributes>\n                                        <connections>\n                                            <action selector=\"hide:\" destination=\"NF9-wZ-lbZ\" eventType=\"touchUpInside\" id=\"FxR-jN-Fyr\"/>\n                                        </connections>\n                                    </button>\n                                </subviews>\n                                <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <constraints>\n                                    <constraint firstItem=\"PpV-jZ-Yo3\" firstAttribute=\"leading\" secondItem=\"put-HD-gTP\" secondAttribute=\"leading\" id=\"NXb-Tj-zUQ\"/>\n                                    <constraint firstItem=\"PpV-jZ-Yo3\" firstAttribute=\"top\" secondItem=\"put-HD-gTP\" secondAttribute=\"top\" constant=\"5\" id=\"aAq-G5-l4S\"/>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"PpV-jZ-Yo3\" secondAttribute=\"bottom\" constant=\"5\" id=\"aJ1-g1-cqw\"/>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"vaB-mE-Rve\" secondAttribute=\"bottom\" constant=\"5\" id=\"ej5-L3-QgG\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"vaB-mE-Rve\" secondAttribute=\"trailing\" id=\"er4-Vc-rhg\"/>\n                                    <constraint firstItem=\"vaB-mE-Rve\" firstAttribute=\"top\" secondItem=\"put-HD-gTP\" secondAttribute=\"top\" constant=\"5\" id=\"fqH-mE-cIE\"/>\n                                    <constraint firstItem=\"vaB-mE-Rve\" firstAttribute=\"leading\" secondItem=\"PpV-jZ-Yo3\" secondAttribute=\"trailing\" constant=\"5\" id=\"ngv-jV-JSb\"/>\n                                </constraints>\n                            </view>\n                        </barButtonItem>\n                    </navigationItem>\n                    <size key=\"freeformSize\" width=\"375\" height=\"1200\"/>\n                    <connections>\n                        <outlet property=\"autoRotate\" destination=\"WfA-vA-cpG\" id=\"88o-Le-R5E\"/>\n                        <outlet property=\"bodyText\" destination=\"Ev4-j7-wY0\" id=\"mD6-Ge-qJY\"/>\n                        <outlet property=\"dimMode\" destination=\"iw9-KB-Nyd\" id=\"OiP-ss-kEO\"/>\n                        <outlet property=\"dropShadow\" destination=\"sqb-Fg-YR8\" id=\"zUz-6P-IFz\"/>\n                        <outlet property=\"duration\" destination=\"nng-9a-v3B\" id=\"4VC-Yi-AiA\"/>\n                        <outlet property=\"hapticFeedback\" destination=\"ah6-5J-Psp\" id=\"HSQ-XB-1nn\"/>\n                        <outlet property=\"iconStyle\" destination=\"c2K-94-CuB\" id=\"Qwt-xY-oZ2\"/>\n                        <outlet property=\"interactiveHide\" destination=\"Vdr-7b-DJB\" id=\"pEi-RT-l7U\"/>\n                        <outlet property=\"layout\" destination=\"aBT-5M-2tg\" id=\"4GZ-iP-oCa\"/>\n                        <outlet property=\"presentationContext\" destination=\"AYG-qj-yjv\" id=\"oxG-AK-tTF\"/>\n                        <outlet property=\"presentationStyle\" destination=\"Agu-Vo-ckI\" id=\"OuZ-YZ-Ktx\"/>\n                        <outlet property=\"showBody\" destination=\"zUi-zd-sZL\" id=\"LJh-6j-NzE\"/>\n                        <outlet property=\"showButton\" destination=\"w9C-j2-COD\" id=\"Tjc-CK-8lA\"/>\n                        <outlet property=\"showIcon\" destination=\"mfB-t8-O1h\" id=\"Ff9-V1-yuO\"/>\n                        <outlet property=\"showTitle\" destination=\"CDM-PI-gjl\" id=\"eaO-X0-VKt\"/>\n                        <outlet property=\"theme\" destination=\"NoM-It-vKT\" id=\"Nq3-8x-JAR\"/>\n                        <outlet property=\"titleText\" destination=\"Z0U-kn-8rs\" id=\"SwM-AJ-Wb8\"/>\n                    </connections>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"skR-IF-bf8\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"2280.8000000000002\" y=\"-288.75562218890559\"/>\n        </scene>\n        <!--View Controllers-->\n        <scene sceneID=\"heM-VN-xQk\">\n            <objects>\n                <viewController title=\"View Controllers\" id=\"bb1-hO-yeb\" customClass=\"ViewControllersViewController\" customModule=\"Demo\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"WeL-Zn-0tj\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"LAn-az-eMU\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"YlT-hO-kIK\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <stackView opaque=\"NO\" contentMode=\"scaleToFill\" axis=\"vertical\" distribution=\"fillEqually\" spacing=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"mGe-El-haJ\">\n                                <rect key=\"frame\" x=\"46\" y=\"104\" width=\"283\" height=\"474\"/>\n                                <subviews>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"DrN-Ei-Pg7\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"283\" height=\"59\"/>\n                                        <color key=\"backgroundColor\" red=\"0.16470588235294117\" green=\"0.6588235294117647\" blue=\"0.98039215686274506\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"18\"/>\n                                        <state key=\"normal\" title=\"Top Message\"/>\n                                        <userDefinedRuntimeAttributes>\n                                            <userDefinedRuntimeAttribute type=\"number\" keyPath=\"layer.cornerRadius\">\n                                                <integer key=\"value\" value=\"10\"/>\n                                            </userDefinedRuntimeAttribute>\n                                        </userDefinedRuntimeAttributes>\n                                        <connections>\n                                            <segue destination=\"dHK-y5-h16\" kind=\"custom\" customClass=\"SwiftMessagesTopSegue\" customModule=\"Demo\" customModuleProvider=\"target\" id=\"7xS-Ca-mnb\"/>\n                                        </connections>\n                                    </button>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"GeC-SP-rSC\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"69\" width=\"283\" height=\"59.5\"/>\n                                        <color key=\"backgroundColor\" red=\"0.1647058824\" green=\"0.6588235294\" blue=\"0.98039215690000003\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"18\"/>\n                                        <state key=\"normal\" title=\"Bottom Message\"/>\n                                        <userDefinedRuntimeAttributes>\n                                            <userDefinedRuntimeAttribute type=\"number\" keyPath=\"layer.cornerRadius\">\n                                                <integer key=\"value\" value=\"10\"/>\n                                            </userDefinedRuntimeAttribute>\n                                        </userDefinedRuntimeAttributes>\n                                        <connections>\n                                            <segue destination=\"dHK-y5-h16\" kind=\"custom\" customClass=\"SwiftMessagesBottomSegue\" customModule=\"Demo\" customModuleProvider=\"target\" id=\"6Yg-dE-eXA\"/>\n                                        </connections>\n                                    </button>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"DGn-eY-EEX\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"138.5\" width=\"283\" height=\"59\"/>\n                                        <color key=\"backgroundColor\" red=\"0.26627604170000002\" green=\"0.76907009550000005\" blue=\"0.32259114579999998\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"18\"/>\n                                        <state key=\"normal\" title=\"Top Card\"/>\n                                        <userDefinedRuntimeAttributes>\n                                            <userDefinedRuntimeAttribute type=\"number\" keyPath=\"layer.cornerRadius\">\n                                                <integer key=\"value\" value=\"10\"/>\n                                            </userDefinedRuntimeAttribute>\n                                        </userDefinedRuntimeAttributes>\n                                        <connections>\n                                            <segue destination=\"dHK-y5-h16\" kind=\"custom\" customClass=\"SwiftMessagesTopCardSegue\" customModule=\"Demo\" customModuleProvider=\"target\" id=\"qLf-js-3Ls\"/>\n                                        </connections>\n                                    </button>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ZQs-MK-vK3\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"207.5\" width=\"283\" height=\"59\"/>\n                                        <color key=\"backgroundColor\" red=\"0.26627604170000002\" green=\"0.76907009550000005\" blue=\"0.32259114579999998\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"18\"/>\n                                        <state key=\"normal\" title=\"Bottom Card\"/>\n                                        <userDefinedRuntimeAttributes>\n                                            <userDefinedRuntimeAttribute type=\"number\" keyPath=\"layer.cornerRadius\">\n                                                <integer key=\"value\" value=\"10\"/>\n                                            </userDefinedRuntimeAttribute>\n                                        </userDefinedRuntimeAttributes>\n                                        <connections>\n                                            <segue destination=\"dHK-y5-h16\" kind=\"custom\" customClass=\"SwiftMessagesBottomCardSegue\" customModule=\"Demo\" customModuleProvider=\"target\" id=\"TBl-s0-9vL\"/>\n                                        </connections>\n                                    </button>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kux-aE-Bdv\" userLabel=\"Top Tab\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"276.5\" width=\"283\" height=\"59\"/>\n                                        <color key=\"backgroundColor\" red=\"0.80000000000000004\" green=\"0.015686274510000067\" blue=\"0.62082127703967116\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"18\"/>\n                                        <state key=\"normal\" title=\"Top Tab\"/>\n                                        <userDefinedRuntimeAttributes>\n                                            <userDefinedRuntimeAttribute type=\"number\" keyPath=\"layer.cornerRadius\">\n                                                <integer key=\"value\" value=\"10\"/>\n                                            </userDefinedRuntimeAttribute>\n                                        </userDefinedRuntimeAttributes>\n                                        <connections>\n                                            <segue destination=\"dHK-y5-h16\" kind=\"custom\" customClass=\"SwiftMessagesTopTabSegue\" customModule=\"Demo\" customModuleProvider=\"target\" id=\"p7Y-6q-gfK\"/>\n                                        </connections>\n                                    </button>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dMQ-xF-RwV\" userLabel=\"Bottom Tab\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"345.5\" width=\"283\" height=\"59.5\"/>\n                                        <color key=\"backgroundColor\" red=\"0.80000000000000004\" green=\"0.015686274510000001\" blue=\"0.620821277\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"18\"/>\n                                        <state key=\"normal\" title=\"Bottom Tab\"/>\n                                        <userDefinedRuntimeAttributes>\n                                            <userDefinedRuntimeAttribute type=\"number\" keyPath=\"layer.cornerRadius\">\n                                                <integer key=\"value\" value=\"10\"/>\n                                            </userDefinedRuntimeAttribute>\n                                        </userDefinedRuntimeAttributes>\n                                        <connections>\n                                            <segue destination=\"dHK-y5-h16\" kind=\"custom\" customClass=\"SwiftMessagesBottomTabSegue\" customModule=\"Demo\" customModuleProvider=\"target\" id=\"EaG-Ea-U3j\"/>\n                                        </connections>\n                                    </button>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"CDi-Gu-bE2\" userLabel=\"Centered\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"415\" width=\"283\" height=\"59\"/>\n                                        <color key=\"backgroundColor\" red=\"1\" green=\"0.46653546191345963\" blue=\"0.015686274510000042\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"18\"/>\n                                        <state key=\"normal\" title=\"Centered\"/>\n                                        <userDefinedRuntimeAttributes>\n                                            <userDefinedRuntimeAttribute type=\"number\" keyPath=\"layer.cornerRadius\">\n                                                <integer key=\"value\" value=\"10\"/>\n                                            </userDefinedRuntimeAttribute>\n                                        </userDefinedRuntimeAttributes>\n                                        <connections>\n                                            <segue destination=\"dHK-y5-h16\" kind=\"custom\" customClass=\"SwiftMessagesCenteredSegue\" customModule=\"Demo\" customModuleProvider=\"target\" id=\"had-cE-9YN\"/>\n                                        </connections>\n                                    </button>\n                                </subviews>\n                            </stackView>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"mGe-El-haJ\" firstAttribute=\"top\" secondItem=\"WeL-Zn-0tj\" secondAttribute=\"bottom\" constant=\"40\" id=\"6TI-R1-eMQ\"/>\n                            <constraint firstItem=\"mGe-El-haJ\" firstAttribute=\"leading\" secondItem=\"YlT-hO-kIK\" secondAttribute=\"leadingMargin\" constant=\"30\" id=\"LqT-Kn-3v7\"/>\n                            <constraint firstItem=\"LAn-az-eMU\" firstAttribute=\"top\" secondItem=\"mGe-El-haJ\" secondAttribute=\"bottom\" constant=\"40\" id=\"jWn-cy-X7E\"/>\n                            <constraint firstAttribute=\"trailingMargin\" secondItem=\"mGe-El-haJ\" secondAttribute=\"trailing\" constant=\"30\" id=\"xEo-4G-PBe\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"l01-vw-7yr\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"2281\" y=\"689\"/>\n        </scene>\n        <!--Item-->\n        <scene sceneID=\"Ekq-Hc-xvY\">\n            <objects>\n                <navigationController id=\"dHK-y5-h16\" sceneMemberID=\"viewController\">\n                    <tabBarItem key=\"tabBarItem\" title=\"Item\" id=\"lRD-YW-2WT\"/>\n                    <value key=\"contentSizeForViewInPopover\" type=\"size\" width=\"0.0\" height=\"250\"/>\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" insetsLayoutMarginsFromSafeArea=\"NO\" id=\"eD6-og-rzJ\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"20\" width=\"375\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"CCQ-og-YsG\" kind=\"relationship\" relationship=\"rootViewController\" id=\"Zcn-UD-uH6\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"Ynl-rR-xVc\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"3164\" y=\"689\"/>\n        </scene>\n        <!--Parent-->\n        <scene sceneID=\"k3I-tw-Opi\">\n            <objects>\n                <tableViewController id=\"CCQ-og-YsG\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"static\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"veg-5v-Pex\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <sections>\n                            <tableViewSection id=\"CqX-XV-4eD\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" accessoryType=\"disclosureIndicator\" indentationWidth=\"10\" textLabel=\"09c-ne-yN9\" style=\"IBUITableViewCellStyleDefault\" id=\"Udi-FH-lzN\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"50\" width=\"375\" height=\"43.5\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Udi-FH-lzN\" id=\"hKw-az-hVR\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"348.5\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" insetsLayoutMarginsFromSafeArea=\"NO\" text=\"Item 1\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"09c-ne-yN9\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"324.5\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <segue destination=\"vdp-aa-LDH\" kind=\"show\" id=\"1PO-Ol-L8M\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" accessoryType=\"disclosureIndicator\" indentationWidth=\"10\" textLabel=\"idk-C0-F7z\" style=\"IBUITableViewCellStyleDefault\" id=\"hLA-of-n8g\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"93.5\" width=\"375\" height=\"43.5\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"hLA-of-n8g\" id=\"70t-ga-6jT\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"348.5\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" insetsLayoutMarginsFromSafeArea=\"NO\" text=\"Item 2\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"idk-C0-F7z\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"324.5\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <segue destination=\"vdp-aa-LDH\" kind=\"show\" id=\"DSE-UC-Xqf\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" accessoryType=\"disclosureIndicator\" indentationWidth=\"10\" textLabel=\"fhG-aN-pzJ\" style=\"IBUITableViewCellStyleDefault\" id=\"jc4-aX-Ow9\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"137\" width=\"375\" height=\"43.5\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"jc4-aX-Ow9\" id=\"Jrq-7c-eSM\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"348.5\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" insetsLayoutMarginsFromSafeArea=\"NO\" text=\"Item 3\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"fhG-aN-pzJ\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"324.5\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <segue destination=\"vdp-aa-LDH\" kind=\"show\" id=\"h5n-Vv-Q3y\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                        </sections>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"CCQ-og-YsG\" id=\"tjb-6Z-zXO\"/>\n                            <outlet property=\"delegate\" destination=\"CCQ-og-YsG\" id=\"yKW-gj-hGn\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" title=\"Parent\" id=\"jt3-Ix-FaW\">\n                        <barButtonItem key=\"rightBarButtonItem\" title=\"Done\" id=\"e8e-4N-bax\">\n                            <connections>\n                                <segue destination=\"Eb3-jR-AqT\" kind=\"unwind\" unwindAction=\"dismissPresentedWithSegue:\" id=\"jd5-2B-4LG\"/>\n                            </connections>\n                        </barButtonItem>\n                    </navigationItem>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"sT7-d0-juG\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n                <exit id=\"Eb3-jR-AqT\" userLabel=\"Exit\" sceneMemberID=\"exit\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"4060\" y=\"689\"/>\n        </scene>\n        <!--Child-->\n        <scene sceneID=\"HTk-O0-UX2\">\n            <objects>\n                <viewController title=\"Child\" id=\"vdp-aa-LDH\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"vbE-7C-4e7\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"SPH-4M-bE7\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"0Cn-7n-ODp\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Nothing to see here.\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2bv-DK-h4b\">\n                                <rect key=\"frame\" x=\"110.5\" y=\"355\" width=\"154.5\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"textColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"2bv-DK-h4b\" firstAttribute=\"centerX\" secondItem=\"0Cn-7n-ODp\" secondAttribute=\"centerX\" id=\"1aC-Jw-Zyl\"/>\n                            <constraint firstItem=\"2bv-DK-h4b\" firstAttribute=\"centerY\" secondItem=\"0Cn-7n-ODp\" secondAttribute=\"centerYWithinMargins\" id=\"93w-dz-NPV\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"mU1-MA-hwk\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"4935\" y=\"689\"/>\n        </scene>\n        <!--Navigation Controller-->\n        <scene sceneID=\"TNg-VF-1BI\">\n            <objects>\n                <navigationController id=\"UrZ-Dq-bGZ\" sceneMemberID=\"viewController\">\n                    <tabBarItem key=\"tabBarItem\" title=\"\" image=\"iconSwiftMessages\" id=\"Ttu-oX-nwD\"/>\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" id=\"vE6-lq-HY6\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"20\" width=\"375\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"vur-BZ-g1e\" kind=\"relationship\" relationship=\"rootViewController\" id=\"4V8-gA-ksC\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dhS-vl-bAg\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"473\" y=\"305\"/>\n        </scene>\n    </scenes>\n    <inferredMetricsTieBreakers>\n        <segue reference=\"h5n-Vv-Q3y\"/>\n        <segue reference=\"EaG-Ea-U3j\"/>\n    </inferredMetricsTieBreakers>\n    <resources>\n        <image name=\"iconSwiftMessages\" width=\"38\" height=\"31\"/>\n        <systemColor name=\"secondaryLabelColor\">\n            <color red=\"0.23529411759999999\" green=\"0.23529411759999999\" blue=\"0.26274509800000001\" alpha=\"0.59999999999999998\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </systemColor>\n        <systemColor name=\"systemBackgroundColor\">\n            <color white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n        </systemColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "Demo/Demo/CountedMessageView.swift",
    "content": "//\n//  CountedMessageView.swift\n//  Demo\n//\n//  Created by Timothy Moose on 8/25/17.\n//  Copyright © 2017 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\nimport SwiftMessages\n\nclass CountedMessageView: UIView, Identifiable {\n\n    @IBOutlet weak var countLabel: UILabel!\n\n    var id: String {\n        return \"counted\"\n    }\n}\n"
  },
  {
    "path": "Demo/Demo/CountedViewController.swift",
    "content": "//\n//  CountedViewController.swift\n//  Demo\n//\n//  Created by Timothy Moose on 8/25/17.\n//  Copyright © 2017 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\nimport SwiftMessages\n\nclass CountedViewController: UIViewController {\n\n    @IBOutlet weak var descriptionLabel: UILabel!\n    @IBOutlet var messageView: CountedMessageView!\n    @IBOutlet weak var messageContainer: UIView!\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        descriptionLabel.configureBodyTextStyle()\n        descriptionLabel.configureCodeStyle(on: \"show()\")\n        descriptionLabel.configureCodeStyle(on: \"hideCounted(id:)\")\n    }\n\n    @IBAction func show() {\n        var config = SwiftMessages.defaultConfig\n        config.presentationStyle = .center\n        config.duration = .forever\n        config.presentationContext = .view(messageContainer)\n        SwiftMessages.show(config: config, view: messageView)\n        updateCountLabel()\n    }\n\n    @IBAction func hide() {\n        SwiftMessages.hideCounted(id: messageView.id)\n        updateCountLabel()\n    }\n\n    private func updateCountLabel() {\n        let count = SwiftMessages.count(id: messageView.id)\n        let numberFormatter = NumberFormatter()\n        numberFormatter.numberStyle = .spellOut\n        messageView.countLabel.text = numberFormatter.string(from: NSNumber(value: count))?.uppercased()\n    }\n}\n"
  },
  {
    "path": "Demo/Demo/ExploreViewController.swift",
    "content": "//\n//  ExploreViewController.swift\n//  Demo\n//\n//  Created by Tim Moose on 8/13/16.\n//  Copyright © 2016 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\nimport SwiftMessages\n\nclass ExploreViewController: UITableViewController, UITextFieldDelegate {\n\n    @IBAction func show(_ sender: AnyObject) {\n        \n        // View setup\n        \n        let view: MessageView\n        switch layout.selectedSegmentIndex {\n        case 1:\n            view = MessageView.viewFromNib(layout: .cardView)\n        case 2:\n            view = MessageView.viewFromNib(layout: .tabView)\n        case 3:\n            view = MessageView.viewFromNib(layout: .statusLine)\n        default:\n            view = try! SwiftMessages.viewFromNib()\n        }\n        \n        view.configureContent(title: titleText.text, body: bodyText.text, iconImage: nil, iconText: nil, buttonImage: nil, buttonTitle: \"Hide\", buttonTapHandler: { _ in SwiftMessages.hide() })\n\n        let iconStyle: IconStyle\n        switch self.iconStyle.selectedSegmentIndex {\n        case 1:\n            iconStyle = .light\n        case 2:\n            iconStyle = .subtle\n        default:\n            iconStyle = .default\n        }\n        \n        switch theme.selectedSegmentIndex {\n        case 0:\n            view.configureTheme(.info, iconStyle: iconStyle, includeHaptic: hapticFeedback.isOn)\n            view.accessibilityPrefix = \"info\"\n        case 1:\n            view.configureTheme(.success, iconStyle: iconStyle, includeHaptic: hapticFeedback.isOn)\n            view.accessibilityPrefix = \"success\"\n        case 2:\n            view.configureTheme(.warning, iconStyle: iconStyle, includeHaptic: hapticFeedback.isOn)\n            view.accessibilityPrefix = \"warning\"\n        case 3:\n            view.configureTheme(.error, iconStyle: iconStyle, includeHaptic: hapticFeedback.isOn)\n            view.accessibilityPrefix = \"error\"\n        default:\n            let iconText = [\"🐸\", \"🐷\", \"🐬\", \"🐠\", \"🐍\", \"🐹\", \"🐼\"].randomElement()\n            view.configureTheme(backgroundColor: UIColor.purple, foregroundColor: UIColor.white, iconImage: nil, iconText: iconText)\n            view.button?.setImage(Icon.errorSubtle.image, for: .normal)\n            view.button?.setTitle(nil, for: .normal)\n            view.button?.backgroundColor = UIColor.clear\n            view.button?.tintColor = UIColor.green.withAlphaComponent(0.7)\n        }\n        \n        if dropShadow.isOn {\n            view.configureDropShadow()\n        }\n        \n        if !showButton.isOn {\n            view.button?.isHidden = true\n        }\n        \n        if !showIcon.isOn {\n            view.iconImageView?.isHidden = true\n            view.iconLabel?.isHidden = true\n        }\n        \n        if !showTitle.isOn {\n            view.titleLabel?.isHidden = true\n        }\n        \n        if !showBody.isOn {\n            view.bodyLabel?.isHidden = true\n        }\n        \n        // Config setup\n        \n        var config = SwiftMessages.defaultConfig\n        \n        switch presentationStyle.selectedSegmentIndex {\n        case 1:\n            config.presentationStyle = .bottom\n        case 2:\n            config.presentationStyle = .center\n        default:\n            break\n        }\n        \n        switch presentationContext.selectedSegmentIndex {\n        case 1:\n            config.presentationContext = .window(windowLevel: UIWindow.Level.normal)\n        case 2:\n            config.presentationContext = .window(windowLevel: UIWindow.Level.statusBar)\n        default:\n            break\n        }\n        \n        switch duration.selectedSegmentIndex {\n        case 1:\n            config.duration = .forever\n        case 2:\n            config.duration = .seconds(seconds: 1)\n        case 3:\n            config.duration = .seconds(seconds: 5)\n        default:\n            break\n        }\n        \n        switch dimMode.selectedSegmentIndex {\n        case 1:\n            config.dimMode = .gray(interactive: true)\n        case 2:\n            config.dimMode = .color(color: #colorLiteral(red: 0.1019607857, green: 0.2784313858, blue: 0.400000006, alpha: 0.7477525685), interactive: true)\n        case 3:\n            config.dimMode = .blur(style: .dark, alpha: 1.0, interactive: true)\n        default:\n            break\n        }\n\n        config.shouldAutorotate = self.autoRotate.isOn\n        \n        config.interactiveHide = interactiveHide.isOn\n        \n        // Set status bar style unless using card view (since it doesn't\n        // go behind the status bar).\n        if case .top = config.presentationStyle, layout.selectedSegmentIndex != 1 {\n            switch theme.selectedSegmentIndex {\n            case 1...4:\n                config.preferredStatusBarStyle = .lightContent\n            default:\n                break\n            }\n        }\n\n        if view.defaultHaptic == nil && hapticFeedback.isOn {\n            config.haptic = .success\n        }\n\n        // Show\n        SwiftMessages.show(config: config, view: view)\n    }\n    \n    @IBAction func hide(_ sender: AnyObject) {\n        SwiftMessages.hide()\n    }\n\n    @IBOutlet weak var presentationStyle: UISegmentedControl!\n    @IBOutlet weak var presentationContext: UISegmentedControl!\n    @IBOutlet weak var duration: UISegmentedControl!\n    @IBOutlet weak var dimMode: UISegmentedControl!\n    @IBOutlet weak var interactiveHide: UISwitch!\n    @IBOutlet weak var hapticFeedback: UISwitch!\n    @IBOutlet weak var layout: UISegmentedControl!\n    @IBOutlet weak var theme: UISegmentedControl!\n    @IBOutlet weak var iconStyle: UISegmentedControl!\n    @IBOutlet weak var autoRotate: UISwitch!\n    @IBOutlet weak var dropShadow: UISwitch!\n    @IBOutlet weak var titleText: UITextField!\n    @IBOutlet weak var bodyText: UITextField!\n    @IBOutlet weak var showButton: UISwitch!\n    @IBOutlet weak var showIcon: UISwitch!\n    @IBOutlet weak var showTitle: UISwitch!\n    @IBOutlet weak var showBody: UISwitch!\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        titleText.delegate = self\n        bodyText.delegate = self\n    }\n    \n    /*\n     MARK: - UITextFieldDelegate\n     */\n    \n    func textFieldShouldReturn(_ textField: UITextField) -> Bool {\n        textField.resignFirstResponder()\n        return true\n    }\n    \n    func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {\n        return true\n    }\n}\n"
  },
  {
    "path": "Demo/Demo/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>SM Demo</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Demo/Demo/TacoDialogView.swift",
    "content": "//\n//  TacoDialogView.swift\n//  Demo\n//\n//  Created by Tim Moose on 8/12/16.\n//  Copyright © 2016 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\nimport SwiftMessages\n\nclass TacoDialogView: MessageView {\n\n    fileprivate static var tacoTitles = [\n        1 : \"Just one, Please\",\n        2 : \"Make it two!\",\n        3 : \"Three!!!\",\n        4 : \"Cuatro!!!!\",\n    ]\n\n    var getTacosAction: ((_ count: Int) -> Void)?\n    var cancelAction: (() -> Void)?\n    \n    fileprivate var count = 1 {\n        didSet {\n            iconLabel?.text = String(repeating: \"🌮\", count: count)//String(count: count, repeatedValue: )\n            bodyLabel?.text = TacoDialogView.tacoTitles[count] ?? \"\\(count)\" + String(repeating: \"!\", count: count)\n        }\n    }\n    \n    @IBAction func getTacos() {\n        getTacosAction?(Int(tacoSlider.value))\n    }\n\n    @IBAction func cancel() {\n        cancelAction?()\n    }\n    \n    @IBOutlet weak var tacoSlider: UISlider!\n    \n    @IBAction func tacoSliderSlid(_ slider: UISlider) {\n        count = Int(slider.value)\n    }\n    \n    @IBAction func tacoSliderFinished(_ slider: UISlider) {\n        slider.setValue(Float(count), animated: true)\n    }\n}\n"
  },
  {
    "path": "Demo/Demo/TacoDialogView.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"14113\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14088\"/>\n        <capability name=\"Constraints to layout margins\" minToolsVersion=\"6.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"JI3-gM-XBO\" userLabel=\"Card View\" customClass=\"TacoDialogView\" customModule=\"Demo\" customModuleProvider=\"target\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"309\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dp3-Ae-zep\" userLabel=\"Background view\" customClass=\"CornerRoundingView\" customModule=\"SwiftMessages\">\n                    <rect key=\"frame\" x=\"30\" y=\"10\" width=\"540\" height=\"289\"/>\n                    <subviews>\n                        <stackView opaque=\"NO\" contentMode=\"scaleToFill\" axis=\"vertical\" distribution=\"equalSpacing\" spacing=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"RJH-Fp-YDa\" userLabel=\"Content view\">\n                            <rect key=\"frame\" x=\"30\" y=\"30\" width=\"480\" height=\"229\"/>\n                            <subviews>\n                                <stackView opaque=\"NO\" contentMode=\"scaleToFill\" axis=\"vertical\" alignment=\"center\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Irk-mj-bK8\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"60\"/>\n                                    <subviews>\n                                        <stackView opaque=\"NO\" contentMode=\"scaleToFill\" distribution=\"fillProportionally\" alignment=\"center\" spacing=\"15\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"aav-a1-ogq\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"60\"/>\n                                            <subviews>\n                                                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"xLT-bX-GJE\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"60\"/>\n                                                    <subviews>\n                                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"252\" verticalHuggingPriority=\"251\" horizontalCompressionResistancePriority=\"748\" text=\"🌮\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" minimumScaleFactor=\"0.5\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"pFx-Py-lZQ\" userLabel=\"Icon label\">\n                                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"50\" height=\"60\"/>\n                                                            <accessibility key=\"accessibilityConfiguration\">\n                                                                <bool key=\"isElement\" value=\"NO\"/>\n                                                            </accessibility>\n                                                            <constraints>\n                                                                <constraint firstAttribute=\"height\" constant=\"60\" id=\"6yp-AT-q9O\"/>\n                                                            </constraints>\n                                                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"45\"/>\n                                                            <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                            <nil key=\"highlightedColor\"/>\n                                                        </label>\n                                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" horizontalCompressionResistancePriority=\"1000\" text=\"Just one, please.\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"YAk-Zs-x2f\">\n                                                            <rect key=\"frame\" x=\"65\" y=\"0.0\" width=\"415\" height=\"60\"/>\n                                                            <accessibility key=\"accessibilityConfiguration\">\n                                                                <bool key=\"isElement\" value=\"NO\"/>\n                                                            </accessibility>\n                                                            <fontDescription key=\"fontDescription\" name=\"Futura-CondensedMedium\" family=\"Futura\" pointSize=\"18\"/>\n                                                            <color key=\"textColor\" red=\"0.6705882352941176\" green=\"0.51372549019607838\" blue=\"0.13333333333333333\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                            <nil key=\"highlightedColor\"/>\n                                                        </label>\n                                                    </subviews>\n                                                    <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <constraints>\n                                                        <constraint firstItem=\"YAk-Zs-x2f\" firstAttribute=\"leading\" secondItem=\"pFx-Py-lZQ\" secondAttribute=\"trailing\" constant=\"15\" id=\"0za-KZ-w39\"/>\n                                                        <constraint firstAttribute=\"bottom\" secondItem=\"YAk-Zs-x2f\" secondAttribute=\"bottom\" id=\"5TB-rj-159\"/>\n                                                        <constraint firstItem=\"pFx-Py-lZQ\" firstAttribute=\"top\" secondItem=\"xLT-bX-GJE\" secondAttribute=\"top\" id=\"Qeo-0t-HzA\"/>\n                                                        <constraint firstAttribute=\"bottom\" secondItem=\"pFx-Py-lZQ\" secondAttribute=\"bottom\" id=\"Qxn-hu-B7m\"/>\n                                                        <constraint firstAttribute=\"height\" constant=\"60\" id=\"Y1Y-No-jwq\"/>\n                                                        <constraint firstItem=\"pFx-Py-lZQ\" firstAttribute=\"leading\" secondItem=\"xLT-bX-GJE\" secondAttribute=\"leading\" id=\"htv-Kw-h9G\"/>\n                                                        <constraint firstAttribute=\"trailing\" secondItem=\"YAk-Zs-x2f\" secondAttribute=\"trailing\" id=\"u4s-eT-wmG\"/>\n                                                        <constraint firstItem=\"YAk-Zs-x2f\" firstAttribute=\"top\" secondItem=\"xLT-bX-GJE\" secondAttribute=\"top\" id=\"y1I-oh-uhx\"/>\n                                                    </constraints>\n                                                </view>\n                                            </subviews>\n                                        </stackView>\n                                    </subviews>\n                                </stackView>\n                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"748\" text=\"How many tocos would you like?\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"gMT-Vh-S3z\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"75.5\" width=\"480\" height=\"23.5\"/>\n                                    <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    <accessibility key=\"accessibilityConfiguration\">\n                                        <bool key=\"isElement\" value=\"NO\"/>\n                                    </accessibility>\n                                    <fontDescription key=\"fontDescription\" name=\"Futura-Medium\" family=\"Futura\" pointSize=\"18\"/>\n                                    <color key=\"textColor\" red=\"0.40392156862745099\" green=\"0.36862745098039218\" blue=\"0.2627450980392157\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Adjust the taco slider and place your order.\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"U9w-CI-YK7\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"115\" width=\"480\" height=\"17\"/>\n                                    <fontDescription key=\"fontDescription\" name=\"Futura-CondensedMedium\" family=\"Futura\" pointSize=\"14\"/>\n                                    <color key=\"textColor\" red=\"0.60392156862745094\" green=\"0.44313725490196076\" blue=\"0.10588235294117647\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                                <slider opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" value=\"1\" minValue=\"1\" maxValue=\"5\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MKs-Kv-aPL\">\n                                    <rect key=\"frame\" x=\"-2\" y=\"147.5\" width=\"484\" height=\"31\"/>\n                                    <color key=\"minimumTrackTintColor\" red=\"0.94509803921568625\" green=\"0.57647058823529407\" blue=\"0.078431372549019607\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    <connections>\n                                        <action selector=\"tacoSliderFinished:\" destination=\"JI3-gM-XBO\" eventType=\"touchUpInside\" id=\"ekV-4L-MLR\"/>\n                                        <action selector=\"tacoSliderFinished:\" destination=\"JI3-gM-XBO\" eventType=\"touchUpOutside\" id=\"x7e-Y6-N1o\"/>\n                                        <action selector=\"tacoSliderSlid:\" destination=\"JI3-gM-XBO\" eventType=\"valueChanged\" id=\"mwN-f7-zaf\"/>\n                                    </connections>\n                                </slider>\n                                <stackView opaque=\"NO\" contentMode=\"scaleToFill\" axis=\"vertical\" alignment=\"bottom\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"x8I-RG-nBX\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"193\" width=\"480\" height=\"36\"/>\n                                    <subviews>\n                                        <stackView opaque=\"NO\" contentMode=\"scaleToFill\" spacing=\"15\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8Qt-TE-nPO\">\n                                            <rect key=\"frame\" x=\"323\" y=\"0.0\" width=\"157\" height=\"36\"/>\n                                            <subviews>\n                                                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"yFi-Ik-klX\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"58\" height=\"36\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <state key=\"normal\" title=\"Forget It\">\n                                                        <color key=\"titleColor\" red=\"0.94468559679999997\" green=\"0.57750775359999995\" blue=\"0.07530619559\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    </state>\n                                                    <connections>\n                                                        <action selector=\"cancel\" destination=\"JI3-gM-XBO\" eventType=\"touchUpInside\" id=\"0BO-De-YH2\"/>\n                                                    </connections>\n                                                </button>\n                                                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"rVu-Ei-t6A\">\n                                                    <rect key=\"frame\" x=\"73\" y=\"0.0\" width=\"84\" height=\"36\"/>\n                                                    <color key=\"backgroundColor\" red=\"0.94117647058823528\" green=\"0.57647058823529407\" blue=\"0.074509803921568626\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <fontDescription key=\"fontDescription\" name=\"Futura-Medium\" family=\"Futura\" pointSize=\"15\"/>\n                                                    <inset key=\"contentEdgeInsets\" minX=\"8\" minY=\"8\" maxX=\"8\" maxY=\"8\"/>\n                                                    <state key=\"normal\" title=\"Get Tacos\">\n                                                        <color key=\"titleColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    </state>\n                                                    <userDefinedRuntimeAttributes>\n                                                        <userDefinedRuntimeAttribute type=\"number\" keyPath=\"layer.cornerRadius\">\n                                                            <integer key=\"value\" value=\"5\"/>\n                                                        </userDefinedRuntimeAttribute>\n                                                    </userDefinedRuntimeAttributes>\n                                                    <connections>\n                                                        <action selector=\"getTacos\" destination=\"JI3-gM-XBO\" eventType=\"touchUpInside\" id=\"zEF-BV-goX\"/>\n                                                    </connections>\n                                                </button>\n                                            </subviews>\n                                        </stackView>\n                                    </subviews>\n                                </stackView>\n                            </subviews>\n                        </stackView>\n                    </subviews>\n                    <color key=\"backgroundColor\" red=\"0.94919902146464641\" green=\"0.92014732276780131\" blue=\"0.81324995474381689\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"bottom\" secondItem=\"RJH-Fp-YDa\" secondAttribute=\"bottom\" constant=\"30\" id=\"3t4-62-KuN\"/>\n                        <constraint firstItem=\"RJH-Fp-YDa\" firstAttribute=\"top\" secondItem=\"dp3-Ae-zep\" secondAttribute=\"top\" constant=\"30\" id=\"6rK-Yv-gKZ\"/>\n                        <constraint firstAttribute=\"trailing\" secondItem=\"RJH-Fp-YDa\" secondAttribute=\"trailing\" constant=\"30\" id=\"dJi-po-g6O\"/>\n                        <constraint firstItem=\"RJH-Fp-YDa\" firstAttribute=\"leading\" secondItem=\"dp3-Ae-zep\" secondAttribute=\"leading\" constant=\"30\" id=\"zmH-aG-8Ij\"/>\n                    </constraints>\n                    <userDefinedRuntimeAttributes>\n                        <userDefinedRuntimeAttribute type=\"number\" keyPath=\"cornerRadius\">\n                            <real key=\"value\" value=\"15\"/>\n                        </userDefinedRuntimeAttribute>\n                    </userDefinedRuntimeAttributes>\n                </view>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <constraints>\n                <constraint firstAttribute=\"trailingMargin\" secondItem=\"dp3-Ae-zep\" secondAttribute=\"trailing\" constant=\"10\" id=\"gGP-zK-6VU\"/>\n                <constraint firstItem=\"dp3-Ae-zep\" firstAttribute=\"leading\" secondItem=\"JI3-gM-XBO\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"gyP-aD-uO3\"/>\n                <constraint firstAttribute=\"bottomMargin\" secondItem=\"dp3-Ae-zep\" secondAttribute=\"bottom\" constant=\"10\" id=\"le8-gK-lcY\"/>\n                <constraint firstItem=\"dp3-Ae-zep\" firstAttribute=\"top\" secondItem=\"JI3-gM-XBO\" secondAttribute=\"topMargin\" constant=\"10\" id=\"s15-z9-aHc\"/>\n            </constraints>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n            <userDefinedRuntimeAttributes>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"bounceAnimationOffset\">\n                    <real key=\"value\" value=\"0.0\"/>\n                </userDefinedRuntimeAttribute>\n            </userDefinedRuntimeAttributes>\n            <connections>\n                <outlet property=\"backgroundView\" destination=\"dp3-Ae-zep\" id=\"ZiK-GN-SXH\"/>\n                <outlet property=\"bodyLabel\" destination=\"YAk-Zs-x2f\" id=\"Koz-Jf-jUo\"/>\n                <outlet property=\"iconLabel\" destination=\"pFx-Py-lZQ\" id=\"xKK-gA-Otu\"/>\n                <outlet property=\"tacoSlider\" destination=\"MKs-Kv-aPL\" id=\"Iky-UQ-58E\"/>\n                <outlet property=\"titleLabel\" destination=\"gMT-Vh-S3z\" id=\"FWK-Tl-hc6\"/>\n            </connections>\n            <point key=\"canvasLocation\" x=\"304\" y=\"614.5\"/>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "Demo/Demo/Utils.swift",
    "content": "//\n//  Utils.swift\n//  Demo\n//\n//  Created by Timothy Moose on 8/25/17.\n//  Copyright © 2017 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\n\nextension UILabel {\n\n    func configureBodyTextStyle() {\n        let bodyStyle = NSMutableParagraphStyle()\n        bodyStyle.lineSpacing = 5.0\n        attributedText = NSAttributedString(string: text ?? \"\", attributes: [NSAttributedString.Key.paragraphStyle : bodyStyle])\n    }\n\n    func configureCodeStyle(on substring: String?) {\n        var attributes: [NSAttributedString.Key : Any] = [:]\n        let codeFont = UIFont(name: \"CourierNewPSMT\", size: font.pointSize)!\n        attributes[NSAttributedString.Key.font] = codeFont\n        attributes[NSAttributedString.Key.backgroundColor] = UIColor(white: 0.96, alpha: 1)\n        attributedText = attributedText?.setAttributes(attributes: attributes, onSubstring: substring)\n    }\n}\n\nextension NSAttributedString {\n\n    public func setAttributes(attributes: [NSAttributedString.Key : Any], onSubstring substring: String?) -> NSAttributedString {\n        let mutableSelf = NSMutableAttributedString(attributedString: self)\n        if let substring = substring {\n            var range = NSRange()\n            repeat {\n                let length = mutableSelf.length\n                let start = range.location + range.length\n                let remainingLength = length - start\n                let remainingRange = NSRange(location: start, length: remainingLength)\n                range = (mutableSelf.string as NSString).range(of: substring, options: .caseInsensitive, range: remainingRange)\n                NSAttributedString.set(attributes: attributes, in: range, of: mutableSelf)\n            } while range.length > 0\n        } else {\n            let range = NSRange(location: 0, length: mutableSelf.length)\n            NSAttributedString.set(attributes: attributes, in: range, of: mutableSelf)\n        }\n        return mutableSelf\n    }\n\n    private static func set(attributes newAttributes: [NSAttributedString.Key : Any], in range: NSRange, of mutableString: NSMutableAttributedString) {\n        if range.length > 0 {\n            var attributes = mutableString.attributes(at: range.location, effectiveRange: nil)\n            for (key, value) in newAttributes {\n                attributes.updateValue(value, forKey: key)\n            }\n            mutableString.setAttributes(attributes, range: range)\n        }\n    }\n}\n"
  },
  {
    "path": "Demo/Demo/ViewController.swift",
    "content": "//\n//  ViewController.swift\n//  Demo\n//\n//  Created by Tim Moose on 8/11/16.\n//  Copyright © 2016 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\nimport SwiftMessages\n\nclass ViewController: UITableViewController {\n\n    var items: [Item] = [\n        .titleBody(title: \"MESSAGE VIEW\", body: \"SwiftMessages provides a standard message view along with a number of layouts, themes and presentation options.\", function: ViewController.demoBasics),\n        .titleBody(title: \"ANY VIEW\", body: \"Any view, no matter how cute, can be displayed as a message.\", function: ViewController.demoAnyView),\n        .titleBody(title: \"CUSTOMIZE\", body: \"Easily customize by copying one of the SwiftMessages nib files into your project as a starting point. Then order some tacos.\", function: ViewController.demoCustomNib),\n        .explore,\n        .titleBody(title: \"CENTERED\", body: \"Show cenetered messages with a fun, physics-based dismissal gesture.\", function: ViewController.demoCentered),\n        .viewController,\n        //.counted,\n    ]\n\n    /*\n     MARK: - UITableViewDataSource\n     */\n    \n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return items.count\n    }\n    \n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let item = items[(indexPath as NSIndexPath).row]\n        return item.dequeueCell(tableView)\n    }\n    \n    /*\n     MARK: - UITableViewDelegate\n     */\n\n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        tableView.deselectRow(at: indexPath, animated: true)\n        let item = items[(indexPath as NSIndexPath).row]\n        item.performDemo()\n    }\n    \n    override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {\n        return 50.0\n    }\n    \n    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {\n        return UITableView.automaticDimension\n    }\n    \n    /*\n     MARK: - Demos\n     */\n\n    static func demoBasics() -> Void {\n        \n        let error = MessageView.viewFromNib(layout: .tabView)\n        error.configureTheme(.error)\n        error.configureContent(title: \"Error\", body: \"Something is horribly wrong!\")\n        error.button?.setTitle(\"Stop\", for: .normal)\n        \n        let warning = MessageView.viewFromNib(layout: .cardView)\n        warning.configureTheme(.warning)\n        warning.configureDropShadow()\n        \n        let iconText = [\"🤔\", \"😳\", \"🙄\", \"😶\"].randomElement()!\n        warning.configureContent(title: \"Warning\", body: \"Consider yourself warned.\", iconText: iconText)\n        warning.button?.isHidden = true\n        var warningConfig = SwiftMessages.defaultConfig\n        warningConfig.presentationContext = .window(windowLevel: UIWindow.Level.statusBar)\n\n        let success = MessageView.viewFromNib(layout: .cardView)\n        success.configureTheme(.success)\n        success.configureDropShadow()\n        success.configureContent(title: \"Success\", body: \"Something good happened!\")\n        success.button?.isHidden = true\n        var successConfig = SwiftMessages.defaultConfig\n        successConfig.presentationStyle = .center\n        successConfig.presentationContext = .window(windowLevel: UIWindow.Level.normal)\n\n        let info = MessageView.viewFromNib(layout: .messageView)\n        info.configureTheme(.info)\n        info.button?.isHidden = true\n        info.configureContent(title: \"Info\", body: \"This is a very lengthy and informative info message that wraps across multiple lines and grows in height as needed.\")\n        var infoConfig = SwiftMessages.defaultConfig\n        infoConfig.presentationStyle = .bottom\n        infoConfig.duration = .seconds(seconds: 0.25)\n\n        let status = MessageView.viewFromNib(layout: .statusLine)\n        status.backgroundView.backgroundColor = UIColor.purple\n        status.bodyLabel?.textColor = UIColor.white\n        status.configureContent(body: \"A tiny line of text covering the status bar.\")\n        var statusConfig = SwiftMessages.defaultConfig\n        statusConfig.presentationContext = .window(windowLevel: UIWindow.Level.statusBar)\n\n        let status2 = MessageView.viewFromNib(layout: .statusLine)\n        status2.backgroundView.backgroundColor = UIColor.orange\n        status2.bodyLabel?.textColor = UIColor.white\n        status2.configureContent(body: \"Switched to light status bar!\")\n        var status2Config = SwiftMessages.defaultConfig\n        status2Config.presentationContext = .window(windowLevel: UIWindow.Level.normal)\n        status2Config.preferredStatusBarStyle = .lightContent\n\n        SwiftMessages.show(view: error)\n        SwiftMessages.show(config: warningConfig, view: warning)\n        SwiftMessages.show(config: successConfig, view: success)\n        SwiftMessages.show(config: infoConfig, view: info)\n        SwiftMessages.show(config: statusConfig, view: status)\n        SwiftMessages.show(config: status2Config, view: status2)\n    }\n    \n    static func demoAnyView() -> Void {\n        let imageView = UIImageView()\n        imageView.image = UIImage(named: \"puppies\")\n        imageView.contentMode = .scaleAspectFill\n        imageView.clipsToBounds = true\n        let messageView = BaseView(frame: .zero)\n        messageView.layoutMargins = .zero\n        messageView.backgroundHeight = 120.0\n        do {\n            let backgroundView = CornerRoundingView()\n            backgroundView.cornerRadius = 15\n            backgroundView.layer.masksToBounds = true\n            messageView.installBackgroundView(backgroundView)\n            messageView.installContentView(imageView)\n            messageView.layoutMarginAdditions = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)\n        }\n        messageView.configureDropShadow()\n        var config = SwiftMessages.defaultConfig\n        config.presentationContext = .window(windowLevel: UIWindow.Level.statusBar)\n        SwiftMessages.show(config: config, view: messageView)\n    }\n\n    static func demoCustomNib() {\n        let view: TacoDialogView = try! SwiftMessages.viewFromNib()\n        view.configureDropShadow()\n        view.getTacosAction = { _ in SwiftMessages.hide() }\n        view.cancelAction = { SwiftMessages.hide() }\n        var config = SwiftMessages.defaultConfig\n        config.presentationContext = .window(windowLevel: UIWindow.Level.statusBar)\n        config.duration = .forever\n        config.presentationStyle = .bottom\n        config.dimMode = .gray(interactive: true)\n        SwiftMessages.show(config: config, view: view)\n    }\n\n    static func demoCentered() {\n        let messageView: MessageView = MessageView.viewFromNib(layout: .centeredView)\n        messageView.configureBackgroundView(width: 250)\n        messageView.configureContent(title: \"Hey There!\", body: \"Please try swiping to dismiss this message.\", iconImage: nil, iconText: \"🦄\", buttonImage: nil, buttonTitle: \"No Thanks\") { _ in\n            SwiftMessages.hide()\n        }\n        messageView.backgroundView.backgroundColor = UIColor.init(white: 0.97, alpha: 1)\n        messageView.backgroundView.layer.cornerRadius = 10\n        var config = SwiftMessages.defaultConfig\n        config.presentationStyle = .center\n        config.duration = .forever\n        config.dimMode = .blur(style: .dark, alpha: 1, interactive: true)\n        config.presentationContext  = .window(windowLevel: UIWindow.Level.statusBar)\n        SwiftMessages.show(config: config, view: messageView)\n    }\n}\n\ntypealias Function = () -> Void\n\nenum Item {\n    \n    case titleBody(title: String, body: String, function: Function)\n    case explore\n    case counted\n    case viewController\n\n    func dequeueCell(_ tableView: UITableView) -> UITableViewCell {\n        switch self {\n        case .titleBody(let title, let body, _):\n            let cell = tableView.dequeueReusableCell(withIdentifier: \"TitleBody\") as! TitleBodyCell\n            cell.titleLabel.text = title\n            cell.bodyLabel.text = body\n            cell.configureBodyTextStyle()\n            return cell\n        case .explore:\n            let cell = tableView.dequeueReusableCell(withIdentifier: \"Explore\") as! TitleBodyCell\n            cell.configureBodyTextStyle()\n            return cell\n        case .counted:\n            let cell = tableView.dequeueReusableCell(withIdentifier: \"Counted\") as! TitleBodyCell\n            cell.configureBodyTextStyle()\n            cell.bodyLabel.configureCodeStyle(on: \"show()\")\n            cell.bodyLabel.configureCodeStyle(on: \"hideCounted(id:)\")\n            return cell\n        case .viewController:\n            let cell = tableView.dequeueReusableCell(withIdentifier: \"ViewController\") as! TitleBodyCell\n            cell.configureBodyTextStyle()\n            return cell\n        }\n    }\n    \n    func performDemo() {\n        switch self {\n        case .titleBody(_, _, let function):\n            function()\n        default:\n            break\n        }\n    }\n}\n\nclass TitleBodyCell: UITableViewCell {\n    @IBOutlet var titleLabel: UILabel!\n    @IBOutlet var bodyLabel: UILabel!\n    \n    func configureBodyTextStyle() {\n        let bodyStyle = NSMutableParagraphStyle()\n        bodyStyle.lineSpacing = 5.0\n        bodyLabel.configureBodyTextStyle()\n    }\n}\n"
  },
  {
    "path": "Demo/Demo/ViewControllersViewController.swift",
    "content": "//\n//  ViewControllersViewController.swift\n//  Demo\n//\n//  Created by Timothy Moose on 7/28/18.\n//  Copyright © 2018 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\nimport SwiftMessages\n\nclass ViewControllersViewController: UIViewController {\n    @objc @IBAction private func dismissPresented(segue: UIStoryboardSegue) {\n        dismiss(animated: true, completion: nil)\n    }\n}\n\nclass SwiftMessagesTopSegue: SwiftMessagesSegue {\n    override public  init(identifier: String?, source: UIViewController, destination: UIViewController) {\n        super.init(identifier: identifier, source: source, destination: destination)\n        configure(layout: .topMessage)\n    }\n}\n\nclass SwiftMessagesTopCardSegue: SwiftMessagesSegue {\n    override public  init(identifier: String?, source: UIViewController, destination: UIViewController) {\n        super.init(identifier: identifier, source: source, destination: destination)\n        configure(layout: .topCard)\n    }\n}\n\nclass SwiftMessagesTopTabSegue: SwiftMessagesSegue {\n    override public  init(identifier: String?, source: UIViewController, destination: UIViewController) {\n        super.init(identifier: identifier, source: source, destination: destination)\n        configure(layout: .topTab)\n    }\n}\n\nclass SwiftMessagesBottomSegue: SwiftMessagesSegue {\n    override public  init(identifier: String?, source: UIViewController, destination: UIViewController) {\n        super.init(identifier: identifier, source: source, destination: destination)\n        configure(layout: .bottomMessage)\n    }\n}\n\nclass SwiftMessagesBottomCardSegue: SwiftMessagesSegue {\n    override public  init(identifier: String?, source: UIViewController, destination: UIViewController) {\n        super.init(identifier: identifier, source: source, destination: destination)\n        configure(layout: .bottomCard)\n    }\n}\n\nclass SwiftMessagesBottomTabSegue: SwiftMessagesSegue {\n    override public  init(identifier: String?, source: UIViewController, destination: UIViewController) {\n        super.init(identifier: identifier, source: source, destination: destination)\n        configure(layout: .bottomTab)\n    }\n}\n\nclass SwiftMessagesCenteredSegue: SwiftMessagesSegue {\n    override public  init(identifier: String?, source: UIViewController, destination: UIViewController) {\n        super.init(identifier: identifier, source: source, destination: destination)\n        configure(layout: .centered)\n    }\n}\n"
  },
  {
    "path": "Demo/Demo.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t22652712210F698600310344 /* TacoDialogView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 86C0AB9F1D5E814600F76BD6 /* TacoDialogView.xib */; };\n\t\t226FA5E61F506993004CB2BC /* CountedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 226FA5E51F506993004CB2BC /* CountedViewController.swift */; };\n\t\t226FA5E81F5071D0004CB2BC /* CountedMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 226FA5E71F5071D0004CB2BC /* CountedMessageView.swift */; };\n\t\t226FA5EA1F507586004CB2BC /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 226FA5E91F507586004CB2BC /* Utils.swift */; };\n\t\t22F27953210D0FDE00273E7F /* ViewControllersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22F27952210D0FDE00273E7F /* ViewControllersViewController.swift */; };\n\t\t22FE3FA821193CB90017303D /* SwiftMessages.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22FB324121193A3B005C13D9 /* SwiftMessages.framework */; };\n\t\t22FE3FA921193CB90017303D /* SwiftMessages.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 22FB324121193A3B005C13D9 /* SwiftMessages.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t8642F4361D5F7F540061BDCD /* ExploreViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8642F4351D5F7F540061BDCD /* ExploreViewController.swift */; };\n\t\t86AEDCE61D5D1DB70030232E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86AEDCE51D5D1DB70030232E /* AppDelegate.swift */; };\n\t\t86AEDCE81D5D1DB70030232E /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86AEDCE71D5D1DB70030232E /* ViewController.swift */; };\n\t\t86AEDCEB1D5D1DB70030232E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 86AEDCE91D5D1DB70030232E /* Main.storyboard */; };\n\t\t86AEDCED1D5D1DB70030232E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 86AEDCEC1D5D1DB70030232E /* Assets.xcassets */; };\n\t\t86AEDCF01D5D1DB70030232E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 86AEDCEE1D5D1DB70030232E /* LaunchScreen.storyboard */; };\n\t\t86C0ABA21D5E816600F76BD6 /* TacoDialogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86C0ABA11D5E816600F76BD6 /* TacoDialogView.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t22FB324021193A3B005C13D9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 22FB323A21193A3B005C13D9 /* SwiftMessages.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 86B48AEC1D5A41C900063E2B;\n\t\t\tremoteInfo = SwiftMessages;\n\t\t};\n\t\t22FB324421193A3B005C13D9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 22FB323A21193A3B005C13D9 /* SwiftMessages.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 86B48AF51D5A41C900063E2B;\n\t\t\tremoteInfo = SwiftMessagesTests;\n\t\t};\n\t\t22FB324621193A4D005C13D9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 22FB323A21193A3B005C13D9 /* SwiftMessages.xcodeproj */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 86B48AEB1D5A41C900063E2B;\n\t\t\tremoteInfo = SwiftMessages;\n\t\t};\n\t\t22FE3FAA21193CB90017303D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 22FB323A21193A3B005C13D9 /* SwiftMessages.xcodeproj */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 86B48AEB1D5A41C900063E2B;\n\t\t\tremoteInfo = SwiftMessages;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t22774C2520B8461A00813732 /* Embed App Extensions */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 13;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Embed App Extensions\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t22FE3FB021193CB90017303D /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\t22FE3FA921193CB90017303D /* SwiftMessages.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t226FA5E51F506993004CB2BC /* CountedViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CountedViewController.swift; sourceTree = \"<group>\"; };\n\t\t226FA5E71F5071D0004CB2BC /* CountedMessageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CountedMessageView.swift; sourceTree = \"<group>\"; };\n\t\t226FA5E91F507586004CB2BC /* Utils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Utils.swift; sourceTree = \"<group>\"; };\n\t\t22774C1420B8461900813732 /* Messages.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Messages.framework; path = System/Library/Frameworks/Messages.framework; sourceTree = SDKROOT; };\n\t\t22F27952210D0FDE00273E7F /* ViewControllersViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewControllersViewController.swift; sourceTree = \"<group>\"; };\n\t\t22FB323A21193A3B005C13D9 /* SwiftMessages.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = SwiftMessages.xcodeproj; path = ../SwiftMessages.xcodeproj; sourceTree = \"<group>\"; };\n\t\t8642F4351D5F7F540061BDCD /* ExploreViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExploreViewController.swift; sourceTree = \"<group>\"; };\n\t\t86AEDCE21D5D1DB70030232E /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t86AEDCE51D5D1DB70030232E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t86AEDCE71D5D1DB70030232E /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = \"<group>\"; };\n\t\t86AEDCEA1D5D1DB70030232E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t86AEDCEC1D5D1DB70030232E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t86AEDCEF1D5D1DB70030232E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t86AEDCF11D5D1DB70030232E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t86C0AB9F1D5E814600F76BD6 /* TacoDialogView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TacoDialogView.xib; sourceTree = \"<group>\"; };\n\t\t86C0ABA11D5E816600F76BD6 /* TacoDialogView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TacoDialogView.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t86AEDCDF1D5D1DB70030232E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t22FE3FA821193CB90017303D /* SwiftMessages.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t22FB323B21193A3B005C13D9 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t22FB324121193A3B005C13D9 /* SwiftMessages.framework */,\n\t\t\t\t22FB324521193A3B005C13D9 /* SwiftMessagesTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AB98897E817EE976DD72852 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t22774C1420B8461900813732 /* Messages.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t86AEDCD91D5D1DB70030232E = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t86AEDCE41D5D1DB70030232E /* Demo */,\n\t\t\t\t86AEDCE31D5D1DB70030232E /* Products */,\n\t\t\t\t6AB98897E817EE976DD72852 /* Frameworks */,\n\t\t\t\t22FB323A21193A3B005C13D9 /* SwiftMessages.xcodeproj */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t86AEDCE31D5D1DB70030232E /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t86AEDCE21D5D1DB70030232E /* Demo.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t86AEDCE41D5D1DB70030232E /* Demo */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t86AEDCE51D5D1DB70030232E /* AppDelegate.swift */,\n\t\t\t\t86AEDCE91D5D1DB70030232E /* Main.storyboard */,\n\t\t\t\t86AEDCE71D5D1DB70030232E /* ViewController.swift */,\n\t\t\t\t8642F4351D5F7F540061BDCD /* ExploreViewController.swift */,\n\t\t\t\t226FA5E51F506993004CB2BC /* CountedViewController.swift */,\n\t\t\t\t22F27952210D0FDE00273E7F /* ViewControllersViewController.swift */,\n\t\t\t\t86AEDCEC1D5D1DB70030232E /* Assets.xcassets */,\n\t\t\t\t86AEDCEE1D5D1DB70030232E /* LaunchScreen.storyboard */,\n\t\t\t\t86AEDCF11D5D1DB70030232E /* Info.plist */,\n\t\t\t\t86C0ABA11D5E816600F76BD6 /* TacoDialogView.swift */,\n\t\t\t\t86C0AB9F1D5E814600F76BD6 /* TacoDialogView.xib */,\n\t\t\t\t226FA5E71F5071D0004CB2BC /* CountedMessageView.swift */,\n\t\t\t\t226FA5E91F507586004CB2BC /* Utils.swift */,\n\t\t\t);\n\t\t\tpath = Demo;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t86AEDCE11D5D1DB70030232E /* Demo */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 86AEDCF41D5D1DB70030232E /* Build configuration list for PBXNativeTarget \"Demo\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t86AEDCDE1D5D1DB70030232E /* Sources */,\n\t\t\t\t86AEDCDF1D5D1DB70030232E /* Frameworks */,\n\t\t\t\t86AEDCE01D5D1DB70030232E /* Resources */,\n\t\t\t\t22774C2520B8461A00813732 /* Embed App Extensions */,\n\t\t\t\t22FE3FB021193CB90017303D /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t22FB324721193A4D005C13D9 /* PBXTargetDependency */,\n\t\t\t\t22FE3FAB21193CB90017303D /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = Demo;\n\t\t\tproductName = Demo;\n\t\t\tproductReference = 86AEDCE21D5D1DB70030232E /* Demo.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t86AEDCDA1D5D1DB70030232E /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0940;\n\t\t\t\tLastUpgradeCheck = 1200;\n\t\t\t\tORGANIZATIONNAME = \"SwiftKick Mobile\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t86AEDCE11D5D1DB70030232E = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3.1;\n\t\t\t\t\t\tLastSwiftMigration = 1020;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 86AEDCDD1D5D1DB70030232E /* Build configuration list for PBXProject \"Demo\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 86AEDCD91D5D1DB70030232E;\n\t\t\tproductRefGroup = 86AEDCE31D5D1DB70030232E /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectReferences = (\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 22FB323B21193A3B005C13D9 /* Products */;\n\t\t\t\t\tProjectRef = 22FB323A21193A3B005C13D9 /* SwiftMessages.xcodeproj */;\n\t\t\t\t},\n\t\t\t);\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t86AEDCE11D5D1DB70030232E /* Demo */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXReferenceProxy section */\n\t\t22FB324121193A3B005C13D9 /* SwiftMessages.framework */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = wrapper.framework;\n\t\t\tpath = SwiftMessages.framework;\n\t\t\tremoteRef = 22FB324021193A3B005C13D9 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t22FB324521193A3B005C13D9 /* SwiftMessagesTests.xctest */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = wrapper.cfbundle;\n\t\t\tpath = SwiftMessagesTests.xctest;\n\t\t\tremoteRef = 22FB324421193A3B005C13D9 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n/* End PBXReferenceProxy section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t86AEDCE01D5D1DB70030232E /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t86AEDCF01D5D1DB70030232E /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t22652712210F698600310344 /* TacoDialogView.xib in Resources */,\n\t\t\t\t86AEDCED1D5D1DB70030232E /* Assets.xcassets in Resources */,\n\t\t\t\t86AEDCEB1D5D1DB70030232E /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t86AEDCDE1D5D1DB70030232E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8642F4361D5F7F540061BDCD /* ExploreViewController.swift in Sources */,\n\t\t\t\t226FA5E81F5071D0004CB2BC /* CountedMessageView.swift in Sources */,\n\t\t\t\t86AEDCE81D5D1DB70030232E /* ViewController.swift in Sources */,\n\t\t\t\t226FA5EA1F507586004CB2BC /* Utils.swift in Sources */,\n\t\t\t\t86AEDCE61D5D1DB70030232E /* AppDelegate.swift in Sources */,\n\t\t\t\t226FA5E61F506993004CB2BC /* CountedViewController.swift in Sources */,\n\t\t\t\t86C0ABA21D5E816600F76BD6 /* TacoDialogView.swift in Sources */,\n\t\t\t\t22F27953210D0FDE00273E7F /* ViewControllersViewController.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t22FB324721193A4D005C13D9 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = SwiftMessages;\n\t\t\ttargetProxy = 22FB324621193A4D005C13D9 /* PBXContainerItemProxy */;\n\t\t};\n\t\t22FE3FAB21193CB90017303D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = SwiftMessages;\n\t\t\ttargetProxy = 22FE3FAA21193CB90017303D /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t86AEDCE91D5D1DB70030232E /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t86AEDCEA1D5D1DB70030232E /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t86AEDCEE1D5D1DB70030232E /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t86AEDCEF1D5D1DB70030232E /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t86AEDCF21D5D1DB70030232E /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 14.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t86AEDCF31D5D1DB70030232E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 14.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t86AEDCF51D5D1DB70030232E /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\n\t\t\t\tINFOPLIST_FILE = Demo/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 14.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = it.swiftkick.SwiftMessages.Demo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t86AEDCF61D5D1DB70030232E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\n\t\t\t\tINFOPLIST_FILE = Demo/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 14.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = it.swiftkick.SwiftMessages.Demo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t86AEDCDD1D5D1DB70030232E /* Build configuration list for PBXProject \"Demo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t86AEDCF21D5D1DB70030232E /* Debug */,\n\t\t\t\t86AEDCF31D5D1DB70030232E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t86AEDCF41D5D1DB70030232E /* Build configuration list for PBXNativeTarget \"Demo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t86AEDCF51D5D1DB70030232E /* Debug */,\n\t\t\t\t86AEDCF61D5D1DB70030232E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 86AEDCDA1D5D1DB70030232E /* Project object */;\n}\n"
  },
  {
    "path": "Demo/Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:Demo.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Demo/Demo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Demo/Demo.xcodeproj/xcshareddata/xcschemes/Demo.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1200\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"86AEDCE11D5D1DB70030232E\"\n               BuildableName = \"Demo.app\"\n               BlueprintName = \"Demo\"\n               ReferencedContainer = \"container:Demo.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"86AEDCE11D5D1DB70030232E\"\n            BuildableName = \"Demo.app\"\n            BlueprintName = \"Demo\"\n            ReferencedContainer = \"container:Demo.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"86AEDCE11D5D1DB70030232E\"\n            BuildableName = \"Demo.app\"\n            BlueprintName = \"Demo\"\n            ReferencedContainer = \"container:Demo.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "LICENSE.md",
    "content": "Copyright (c) 2016 SwiftKick Mobile LLC\n\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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."
  },
  {
    "path": "Package.swift",
    "content": "// swift-tools-version:5.3\nimport PackageDescription\n\nlet package = Package(\n    name: \"SwiftMessages\",\n    platforms: [\n        .iOS(\"13.0\")\n    ],\n    products: [\n        .library(name: \"SwiftMessages\", targets: [\"SwiftMessages\"]),\n        .library(name: \"SwiftMessages-Dynamic\", type: .dynamic, targets: [\"SwiftMessages\"])\n    ],\n    targets: [\n        .target(\n            name: \"SwiftMessages\",\n            path: \"SwiftMessages\",\n            exclude: [\n                \"Info.plist\",\n            ],\n            resources: [.process(\"Resources\")]\n        )\n    ]\n)\n"
  },
  {
    "path": "README.md",
    "content": "# SwiftMessages\n\n[![Twitter: @TimothyMoose](https://img.shields.io/badge/contact-@TimothyMoose-blue.svg?style=flat)](https://twitter.com/TimothyMoose)\n[![Version](https://img.shields.io/cocoapods/v/SwiftMessages.svg?style=flat)](http://cocoadocs.org/docsets/SwiftMessages)\n[![License](https://img.shields.io/cocoapods/l/SwiftMessages.svg?style=flat)](http://cocoadocs.org/docsets/SwiftMessages)\n[![Platform](https://img.shields.io/cocoapods/p/SwiftMessages.svg?style=flat)](http://cocoadocs.org/docsets/SwiftMessages)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n\n<p align=\"center\">\n  <img src=\"./Design/swiftmessages.png\" />\n</p>\n\n## Overview\n\n🔥🔥🔥 **UPDATE** SwiftUI support in in Xcode 26 requries 10.0.2!\n\nSwiftMessages is a very flexible view and view controller presentation library for UIKit and SwiftUI.\n\nMessage views and view controllers can be displayed at the top, bottom, or center of the screen, or behind navigation bars and tab bars. There are interactive dismiss gestures including a fun, physics-based one. Multiple background dimming modes. And a lot more!\n\nIn addition to the numerous configuration options, SwiftMessages provides several good-looking layouts and themes. But SwiftMessages is also designer-friendly, which means you can fully and easily customize the view:\n\n* Copy one of the included nib files into your project and change it.\n* Subclass `MessageView` and add elements, etc.\n* Or just supply an arbitrary instance of `View` or `UIView`.\n\n<p align=\"center\">\n  <img src=\"./Demo/demo.png\" />\n</p>\n\n## Installation\n\n### Swift Package Manager\n\nGo to `File | Swift Packages | Add Package Dependency...` in Xcode and search for \"SwiftMessages\". If multiple results are found, select the one owned by SwiftKick Mobile.\n\n### CocoaPods\n\nAdd the following line to your Podfile:\n\n````ruby\npod 'SwiftMessages'\n````\n\n### Carthage\n\nAdd the following line to your Cartfile:\n\n````ruby\ngithub \"SwiftKickMobile/SwiftMessages\"\n````\n\nIf the Carthage build fails, [try using the script](https://github.com/Carthage/Carthage/issues/3019).\n\n### Manual\n\n1. Put SwiftMessages repo somewhere in your project directory.\n1. In Xcode, add `SwiftMessages.xcodeproj` to your project.\n1. On your app's target, add the SwiftMessages framework:\n   1. as an embedded binary on the General tab.\n   1. as a target dependency on the Build Phases tab.\n\n## Usage\n\n### Basics\n\n````swift\nSwiftMessages.show(view: myView)\n````\n\nAlthough you can show any instance of `UIView`, SwiftMessages provides a `MessageView` class\nand assortment of nib-based layouts that should handle most cases:\n\n````swift\n// Instantiate a message view from the provided card view layout. SwiftMessages searches for nib\n// files in the main bundle first, so you can easily copy them into your project and make changes.\nlet view = MessageView.viewFromNib(layout: .cardView)\n\n// Theme message elements with the warning style.\nview.configureTheme(.warning)\n\n// Add a drop shadow.\nview.configureDropShadow()\n\n// Set message title, body, and icon. Here, we're overriding the default warning\n// image with an emoji character.\nlet iconText = [\"🤔\", \"😳\", \"🙄\", \"😶\"].randomElement()!\nview.configureContent(title: \"Warning\", body: \"Consider yourself warned.\", iconText: iconText)\n\n// Increase the external margin around the card. In general, the effect of this setting\n// depends on how the given layout is constrained to the layout margins.\nview.layoutMarginAdditions = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)\n\n// Reduce the corner radius (applicable to layouts featuring rounded corners).\n(view.backgroundView as? CornerRoundingView)?.cornerRadius = 10\n\n// Show the message.\nSwiftMessages.show(view: view)\n````\n\nYou may wish to use the view provider variant `show(viewProvider:)` to ensure that\nyour UIKit code is executed on the main queue:\n\n````swift\nSwiftMessages.show {\n    let view = MessageView.viewFromNib(layout: .cardView)\n    // ... configure the view\n    return view\n}\n````\n\nThe `SwiftMessages.Config` struct provides numerous configuration options that can be passed to `show()`:\n\n````swift\nvar config = SwiftMessages.Config()\n\n// Slide up from the bottom.\nconfig.presentationStyle = .bottom\n\n// Display in a window at the specified window level.\nconfig.presentationContext = .window(windowLevel: .statusBar)\n\nNote that, as of iOS 13, it is no longer possible to cover the status bar\nregardless of the window level. A workaround is to hide the status bar instead.\nconfig.prefersStatusBarHidden = true\n\n// Disable the default auto-hiding behavior.\nconfig.duration = .forever\n\n// Dim the background like a popover view. Hide when the background is tapped.\nconfig.dimMode = .gray(interactive: true)\n\n// Disable the interactive pan-to-hide gesture.\nconfig.interactiveHide = false\n\n// Specify haptic feedback (see also MessageView/configureTheme)\nconfig.haptic = .success\n\n// Specify a status bar style to if the message is displayed directly under the status bar.\nconfig.preferredStatusBarStyle = .lightContent\n\n// Specify one or more event listeners to respond to show and hide events.\nconfig.eventListeners.append() { event in\n    if case .didHide = event {\n        print(\"yep id=\\(String(describing: event.id)\")\n    }\n}\n\nSwiftMessages.show(config: config, view: view)\n````\n\nSpecify default configuration options:\n\n````swift\nSwiftMessages.defaultConfig.presentationStyle = .bottom\n\n// Show message with default config.\nSwiftMessages.show(view: view)\n\n// Customize config using the default as a base.\nvar config = SwiftMessages.defaultConfig\nconfig.duration = .forever\nSwiftMessages.show(config: config, view: view)\n````\n\n### View Controllers\n\nSwiftMessages can present view controllers using the `SwiftMessagesSegue` custom modal segue!\n\n<p align=\"center\">\n  <img src=\"./Design/SwiftMessagesSegue.gif\" />\n</p>\n\n[`SwiftMessagesSegue`](./SwiftMessages/SwiftMessagesSegue.swift) is a subclass of `UIStoryboardSegue` that integrates directly into Interface Builder as a custom modal segue, enabling view controllers to take advantage of SwiftMessages layouts, animations and more. `SwiftMessagesSegue` works with any UIKIt project — storyboards are not required. Refer to the View Controllers readme below for more information.\n\n#### [View Controllers Readme](./ViewControllers.md)\n\nAnd check out our blog post [Elegant Custom UIViewController Transitioning](http://www.swiftkickmobile.com/elegant-custom-uiviewcontroller-transitioning-uiviewcontrollertransitioningdelegate-uiviewcontrolleranimatedtransitioning/) to learn a great technique you can use to build your own custom segues that utilize `UIViewControllerTransitioningDelegate` and `UIViewControllerAnimatedTransitioning`.\n\n### SwiftUI\n\nAny of the built-in SwiftMessages views can be displayed by calling the SwiftMessages APIs from within observable object, a button action closure, etc. However, SwiftMessages can also display your custom SwiftUI views.\n\n#### Presentation\n\nTake the following message view and companion data model:\n\n````swift\nstruct DemoMessage: Identifiable {\n    let title: String\n    let body: String\n\n    var id: String { title + body }\n}\n\nstruct DemoMessageView: View {\n\n    let message: DemoMessage\n\n    var body: some View {\n        VStack(alignment: .leading) {\n            Text(message.title).font(.system(size: 20, weight: .bold))\n            Text(message.body)\n        }\n        .multilineTextAlignment(.leading)\n        .padding(30)\n        // This makes the message width greedy\n        .frame(maxWidth: .infinity)\n        .background(.gray)\n        // This makes a tab-style view where the bottom corners are rounded and\n        // the view's background extends to the top edge.\n        .mask(\n            UnevenRoundedRectangle(bottomLeadingRadius: 15, bottomTrailingRadius: 15)\n            // This causes the background to extend into the safe area to the screen edge.\n            .edgesIgnoringSafeArea(.top)\n        )\n    }\n}\n````\n\nYou can show it from a button action, view model or other similar context like:\n\n````swift\nstruct DemoView: View {\n    var body: some View {\n        Button(\"Show message\") {\n            let message = DemoMessage(title: \"Demo\", body: \"SwiftUI forever!\")\n            let messageView = MessageHostingView(id: message.id, content: DemoMessageView(message: message)\n            SwiftMessages.show(view: messageView)\n        }\n    }\n}\n````\n\nBut you may also use a state-based approach using the `swiftMessage()` view modifier:\n\n````swift\nstruct DemoView: View {\n\n    @State var message: DemoMessage?\n\n    var body: some View {\n        Button(\"Show message\") {\n            message = DemoMessage(title: \"Demo\", body: \"SwiftUI forever!\")\n        }\n        .swiftMessage(message: $message) { message in\n            DemoMessageView(message: message)\n        }\n    }\n}\n````\n\nThis is very similar to the `.sheet()` modifier. However, it doesn't expose all of the features of SwiftMessages, such as explicitly hiding messages by ID. It is totally reasonable to use a combination of both approaches.\n\nIf your message views are purely data-driven and don't require delegates, callbacks, etc., there is a slightly simplified variation on `swiftMessage()` that doesn't require a view builder. Instead, your data model should conform to `MessageViewConvertible`.\n\n````swift\nextension DemoMessage: MessageViewConvertible {\n    func asMessageView() -> DemoMessageView {\n        DemoMessageView(message: self)\n    }\n}\n````\n\nThen you can drop the view builder when calling `swiftMessage()`:\n\n````swift\nstruct DemoView: View {\n\n    @State var message: DemoMessage?\n\n    var body: some View {\n        Button(\"Show message\") {\n            message = DemoMessage(title: \"Demo\", body: \"SwiftUI forever!\")\n        }\n        .swiftMessage(message: $message)\n    }\n}\n````\n\n#### Dismissal\n\nSwiftMessages provides several approaches for dismissing messages from within SwiftUI views.\n\nFor messages shown using the `swiftMessage()` modifier, you can dismiss by setting the binding to `nil`:\n\n````swift\nstruct DemoView: View {\n    @State var message: DemoMessage?\n\n    var body: some View {\n        VStack {\n            Button(\"Show message\") {\n                message = DemoMessage(title: \"Demo\", body: \"SwiftUI forever!\")\n            }\n            Button(\"Hide message\") {\n                message = nil  // Dismisses the message\n            }\n        }\n        .swiftMessage(message: $message) { message in\n            DemoMessageView(message: message)\n        }\n    }\n}\n````\n\nFor messages that need to dismiss themselves, SwiftMessages provides a SwiftUI-style environment action:\n\n````swift\nstruct SelfDismissingMessageView: View {\n    @Environment(\\.swiftMessagesHide) private var hide\n    let message: DemoMessage\n\n    var body: some View {\n        VStack(alignment: .leading) {\n            Text(message.title).font(.system(size: 20, weight: .bold))\n            Text(message.body)\n            \n            Button(\"Dismiss\") {\n                hide(animated: true)  // Self-dismiss with animation\n            }\n        }\n        .padding(30)\n        .frame(maxWidth: .infinity)\n        .background(.gray)\n    }\n}\n````\n\nYou can also call the SwiftMessages APIs directly from within your SwiftUI views:\n\n````swift\nButton(\"Hide Current\") {\n    SwiftMessages.hide()\n}\n````\n\nTry it out in the SwiftUI demo app!\n\n### Accessibility\n\nSwiftMessages provides excellent VoiceOver support out-of-the-box.\n\n* The title and body of the message are combined into a single announcement when the message is shown. The `MessageView.accessibilityPrefix` property can be set to prepend additional clarifying text to the announcement.\n\n    Sometimes, a message may contain important visual cues that aren't captured in the title or body. For example, a message may rely on a yellow background to convey a warning rather than having the word \"warning\" in the title or body. In this case, it might be helpful to set `MessageView.accessibilityPrefix = \"warning\"`.\n    \n* If the message is shown with a dim view using `config.dimMode`, elements below the dim view are not focusable until the message is hidden. If `config.dimMode.interactive == true`, the dim view itself will be focusable and read out \"dismiss\" followed by \"button\". The former text can be customized by setting the `config.dimModeAccessibilityLabel` property.\n\nSee the `AccessibleMessage` protocol for implementing proper accessibility support in custom views.\n\n### Keyboard Avoidance\n\nThe `KeyboardTrackingView` class can be used to cause the message view to avoid the keyboard by sliding up when the keyboard gets too close.\n\n````swift\nvar config = SwiftMessages.defaultConfig\nconfig.keyboardTrackingView = KeyboardTrackingView()\n````\n\nYou can incorporate `KeyboardTrackingView` into your app even when you're not using SwiftMessages. Install into your view hierarchy by pinning `KeyboardTrackingView` to the bottom, leading, and trailing edges of the screen. Then pin the bottom of your content that should avoid the keyboard to the top `KeyboardTrackingView`. Use an equality constraint to strictly track the keyboard or an inequality constraint to only move when the keyboard gets too close. `KeyboardTrackingView` works by observing keyboard notifications and adjusting its height to maintain its top edge above the keyboard, thereby pushing your content up. See the comments in `KeyboardTrackingView` for configuration options.\n\n### Message Queueing\n\nYou can call `SwiftMessages.show()` as many times as you like. SwiftMessages maintains a queue and shows messages one at a time. If your view implements the `Identifiable` protocol (like `MessageView`), duplicate messages will be removed automatically. The pause between messages can be adjusted:\n\n````swift\nSwiftMessages.pauseBetweenMessages = 1.0\n````\n\nThere are a few ways to hide messages programatically:\n\n````swift\n// Hide the current message.\nSwiftMessages.hide()\n\n// Or hide the current message and clear the queue.\nSwiftMessages.hideAll()\n\n// Or for a view that implements `Identifiable`:\nSwiftMessages.hide(id: someId)\n\n// Or hide when the number of calls to show() and hideCounted(id:) for a \n// given message ID are equal. This can be useful for messages that may be\n// shown from  multiple code paths to ensure that all paths are ready to hide.\nSwiftMessages.hideCounted(id: someId)\n````\n\nMultiple instances of `SwiftMessages` can be used to show more than one message at a time. Note that the static `SwiftMessages.show()` and other static APIs on `SwiftMessage` are just convenience wrappers around the shared instance `SwiftMessages.sharedInstance`). Instances must be retained, thus it should be a property of something (e.g. your view controller):\n\n````swift\nclass SomeViewController: UIViewController {\n    let otherMessages = SwiftMessages()\t\n\t\n    func someMethod() {\n        SwiftMessages.show(...)\n        otherMessages.show(...)\n    }\n}\n````\n\n### Retrieving Messages\n\nThere are several APIs available for retrieving messages that are currently being shown, hidden, or queued to be shown. These APIs are useful for updating messages\nwhen some event happens without needing to keep temporary references around.\nSee also `eventListeners`.\n\n````swift\n// Get a message view with the given ID if it is currently \n// being shown or hidden.\nif let view = SwiftMessages.current(id: \"some id\") { ... }\n\n// Get a message view with the given ID if is it currently \n// queued to be shown. \nif let view = SwiftMessages.queued(id: \"some id\") { ... }\n\n// Get a message view with the given ID if it is currently being\n// shown, hidden or in the queue to be shown.\nif let view = SwiftMessages.currentOrQueued(id: \"some id\") { ... }\n````\n\n### Customization\n\nSwiftMessages can display any `UIView`. However, there are varying degrees of customization that can be done to the bundled views.\n\n#### Nib Files\n\nAll of the message designs bundled with SwiftMessages have associated nib files. You are encouraged to copy any of these nib files into your project and modify them to suit your needs. SwiftMessages will load your copy of the file instead of the original. Nib files may be copied in Xcode using drag-and-drop.\n\nTo facilitate the use of nib-based layouts, `MessageView` provides some type-safe convenience methods for loading the bundled nibs:\n\n````swift\nlet view = MessageView.viewFromNib(layout: .cardView)\n````\n\nIn addition, the `SwiftMessages` class provides some generic loading methods:\n\n````swift\n// Instantiate MessageView from a named nib.\nlet view: MessageView = try! SwiftMessages.viewFromNib(named: \"MyCustomNib\")\n\n// Instantiate MyCustomView from a nib named MyCustomView.nib.\nlet view: MyCustomView = try! SwiftMessages.viewFromNib()\n````\n\n#### MessageView Class\n\n\n[`MessageView`](./SwiftMessages/MessageView.swift) is a light-weight view that all of the bundled designs use. It primarily consists of the following optional `@IBOutlet` properties:\n\nElement | Declaration | Description\n--------|-----------|-----\nTitle | `titleLabel: UILabel?` | The message title.\nMessage body | `bodyLabel: UILabel?` |  The body of the message.\nImage icon | `iconImageView: UIImageView?` | An image-based icon.\nText icon | `iconLabel: UILabel?` |  A text-based (emoji) alternative to the image icon.\nButton | `button: UIButton?` | An action button.\n\nThe SwiftMessages nib file use `MessageView` as the top-level view with content connected to these outlets. The layouts are done using stack views, which means that you can remove an element by simply hiding it:\n\n````swift\nview.titleLabel.isHidden = true\n````\n\nA common mistake is attempting to remove an element by setting the corresponding outlet to `nil`. This does not work because it does not remove the element from the view hierarchy.\n\n#### Configuration\n\n`MessageView` provides numerous methods that follow the `configure*` naming convention:\n\n````swift\nview.configureTheme(.warning, includeHaptic: true)\nview.configureContent(title: \"Warning\", body: \"Consider yourself warned.\", iconText: \"🤔\")\n````\n\nAll of these methods are shortcuts for quickly configuring the underlying view properties. SwiftMessages strives to avoid doing any internal magic in these methods, so you do not need to call them. You can configure the view properties directly or combine the two approaches.\n\n#### Interaction\n\n`MessageView` provides an optional block-based tap handler for the button and another for the view itself:\n\n````swift\n// Hide when button tapped\nmessageView.buttonTapHandler = { _ in SwiftMessages.hide() }\n\n// Hide when message view tapped\nmessageView.tapHandler = { _ in SwiftMessages.hide() }\n````\n\n#### Extending\n\nThe suggested method for starting with `MessageView` as a base and __adding new elements__, such as additional buttons, is as follows:\n\n  1. Copy one of the bundled nib files into your project or create a new one from scratch.\n  1. Add new elements to the nib file.\n  1. Sublcass `MessageView` and create outlets for the new elements.\n  1. Assign the top-level view in the nib file to the subclass.\n  1. Connect outlets between the nib file and the subclass.\n  1. (recommended) override the implementation of `Identifiable` as needed to incorporate new elements into the message's identity.\n  1. (recommended) override the implementation of `AccessibleMessage` as needed to incorporate new elements into Voice Over.\n  1. Use one of the nib-loading methods above to load the view.\n\n#### BaseView Class\n\n[`BaseView`](./SwiftMessages/BaseView.swift) is the superclass of `MessageView` and provides numerous options that aren't specific to the \"title + body + icon + button\" design of `MessageView`. Custom views that are significantly different from `MessageView`, such as a progress indicator, should subclass `BaseView`.\n\n#### CornerRoundingView Class\n\n[`CornerRoundingView`](./SwiftMessages/CornerRoundingView.swift) is a custom view that messages can use for rounding all or a subset of corners with squircles (the smoother method of rounding corners that you see on app icons). The nib files that feature rounded corners have `backgroundView` assigned to a `CornerRoundingView`. It provides a `roundsLeadingCorners` option to dynamically round only the leading corners of the view when presented from top or bottom (a feature used for the tab-style layouts).\n\n#### Animator Protocol\n\n[`Animator`](./SwiftMessages/Animator.swift) is the protocol that SwiftMessages uses for presentation and dismissal animations. Custom animations can be done through the `SwiftMessages.PresentationStyle.custom(animator:)`. Some related components:\n* [`TopBottomAnimation`](./SwiftMessages/TopBottomAnimation.swift) is a sliding implementation of `Animator` used internally by `.top` and `.bottom` presentation styles. It provides some customization options.\n* [`PhysicsAnimation`](./SwiftMessages/PhysicsAnimation.swift) is a scaling + opacity implementation of `Animator` used internally by the `.center` presentation style. It provides a fun physics-based dismissal gesture and provides customization options including `.top` and `.bottom` placement.\n* [`PhysicsPanHandler`](./SwiftMessages/PhysicsPanHandler.swift) provides the physics-based dismissal gesture for `PhysicsAnimation` and can be incorporated into other `Animator` implementations.\n\nHigh-quality PRs for cool `Animator` implementations are welcome!\n\n#### MarginAdjustable Protocol\n\n[`MarginAdjustable`](./SwiftMessages/MarginAdjustable.swift) is a protocol adopted by `BaseView`. If the view being presented adopts `MarginAdjustable`, SwiftMessages takes ownership of the view's layout margins to ensure ideal spacing across the full range of presentation contexts.\n\n#### BackgroundViewable Protocol\n\n[`BackgroundViewable`](./SwiftMessages/BackgroundViewable.swift) is a protocol adopted by `BaseView` and requires that a view provide a single `backgroundView` property. `BaseView` initializes `backgroundView = self`, which you can freely re-assign to any subview.\n\nIf the view being presented adopts `BackgroundViewable`, SwiftMessages will ignore touches outside of `backgroundView`. This is important because message views always span the full width of the device. Card and tab-style layouts appear inset from the edges of the device because the message view's background is transparent and `backgroundView` is assigned to a subview constrained to the layout margins. In these layouts, touches in the transparent margins should be ignored.\n\n#### Identifiable Protocol\n\n[`Identifiable`](./SwiftMessages/Identifiable.swift) is a protocol adopted by `MessageView` and requires that a view provide a single `id` property, which SwiftMessages uses for message deduplication.\n\n`MessageView` computes the `id` based on the message content, but `id` can also be set explicitly as needed.\n\n#### AccessibleMessage Protocol\n\n[`AccessibleMessage`](./SwiftMessages/AccessibleMessage.swift) is a protocol adopted by `MessageView`. If the view being presented adopts `AccessibleMessage`, SwiftMessages provides improved Voice Over.\n\n\n## About SwiftKick Mobile\nWe build high quality apps! [Get in touch](http://www.swiftkickmobile.com) if you need help with a project.\n\n## License\n\nSwiftMessages is distributed under the MIT license. [See LICENSE](./LICENSE.md) for details.\n"
  },
  {
    "path": "SwiftMessages/AccessibleMessage.swift",
    "content": "//\n//  AccessibleMessage.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 3/11/17.\n//  Copyright © 2017 SwiftKick Mobile. All rights reserved.\n//\n\nimport Foundation\n\n/**\n Message views that conform to `AccessibleMessage` will have proper accessibility behavior when displaying messages.\n `MessageView` implements this protocol.\n */\npublic protocol AccessibleMessage {\n    var accessibilityMessage: String? { get }\n    var accessibilityElement: NSObject? { get }\n    var additionalAccessibilityElements: [NSObject]? { get }\n}\n"
  },
  {
    "path": "SwiftMessages/Animator.swift",
    "content": "//\n//  Animator.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 6/4/17.\n//  Copyright © 2017 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\n\npublic typealias AnimationCompletion = (_ completed: Bool) -> Void\n\n@MainActor\npublic protocol AnimationDelegate: AnyObject {\n    func hide(animator: Animator)\n    func panStarted(animator: Animator)\n    func panEnded(animator: Animator)\n}\n\n/**\n An option set representing the known types of safe area conflicts\n that could require margin adjustments on the message view in order to\n get the layouts to look right.\n */\npublic struct SafeZoneConflicts: OptionSet {\n    public let rawValue: Int\n\n    public init(rawValue: Int) {\n        self.rawValue = rawValue\n    }\n\n    /// Message view behind status bar\n    public static let statusBar = SafeZoneConflicts(rawValue: 1 << 0)\n\n    /// Message view behind the sensor notch on iPhone X\n    public static let sensorNotch = SafeZoneConflicts(rawValue: 1 << 1)\n\n    /// Message view behind home indicator on iPhone X\n    public static let homeIndicator = SafeZoneConflicts(rawValue: 1 << 2)\n\n    /// Message view is over the status bar on an iPhone 8 or lower. This is a special\n    /// case because we logically expect the top safe area to be zero, but it is reported as 20\n    /// (which seems like an iOS bug). We use the `overStatusBar` to indicate this special case.\n    public static let overStatusBar = SafeZoneConflicts(rawValue: 1 << 3)\n}\n\npublic class AnimationContext {\n\n    public let messageView: UIView\n    public let containerView: UIView\n    public let safeZoneConflicts: SafeZoneConflicts\n    public let interactiveHide: Bool\n\n    init(messageView: UIView, containerView: UIView, safeZoneConflicts: SafeZoneConflicts, interactiveHide: Bool) {\n        self.messageView = messageView\n        self.containerView = containerView\n        self.safeZoneConflicts = safeZoneConflicts\n        self.interactiveHide = interactiveHide\n    }\n}\n\n@MainActor\npublic protocol Animator: AnyObject {\n\n    /// Adopting classes should declare as `weak`.\n    var delegate: AnimationDelegate? { get set }\n\n    func show(context: AnimationContext, completion: @escaping AnimationCompletion)\n\n    func hide(context: AnimationContext, completion: @escaping AnimationCompletion)\n\n    /// The show animation duration. If the animation duration is unknown, such as if using `UIDynamicAnimator`,\n    /// then provide an estimate. This value is used by `SwiftMessagesSegue`.\n    var showDuration: TimeInterval { get }\n\n    /// The hide animation duration. If the animation duration is unknown, such as if using `UIDynamicAnimator`,\n    /// then provide an estimate. This value is used by `SwiftMessagesSegue`.\n    var hideDuration: TimeInterval { get }\n}\n\n"
  },
  {
    "path": "SwiftMessages/BackgroundViewable.swift",
    "content": "//\n//  BackgroundViewable.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 8/15/16.\n//  Copyright © 2016 SwiftKick Mobile LLC. All rights reserved.\n//\n\nimport UIKit\n\n/**\n Message views that implement the `BackgroundViewable` protocol will have the\n pan-to-hide gesture recognizer installed in the `backgroundView`. Message views\n always span the full width of the containing view. Typically, the `backgroundView`\n property defines the message view's visible region, allowing for card-style views\n where the message view background is transparent and the background view is inset\n from by some amount. See CardView.nib, for example.\n \n This protocol is optional. Message views that don't implement `BackgroundViewable`\n will have the pan-to-hide gesture installed in the message view itself.\n */\npublic protocol BackgroundViewable {\n    var backgroundView: UIView! { get }\n}"
  },
  {
    "path": "SwiftMessages/BaseView.swift",
    "content": "\n//\n//  BaseView.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 8/17/16.\n//  Copyright © 2016 SwiftKick Mobile LLC. All rights reserved.\n//\n\nimport UIKit\n\n/**\n The `BaseView` class is a reusable message view base class that implements some\n of the optional SwiftMessages protocols and provides some convenience functions\n and a configurable tap handler. Message views do not need to inherit from `BaseVew`.\n */\nopen class BaseView: UIView, BackgroundViewable, MarginAdjustable {\n\n    /*\n     MARK: - IB outlets\n     */\n\n    /**\n     Fulfills the `BackgroundViewable` protocol and is the target for\n     the optional `tapHandler` block. Defaults to `self`.\n     */\n    @IBOutlet open weak var backgroundView: UIView! {\n        didSet {\n            if let old = oldValue {\n                old.removeGestureRecognizer(tapRecognizer)\n            }\n            installTapRecognizer()\n            updateBackgroundHeightConstraint()\n        }\n    }\n\n    // The `contentView` property was removed because it no longer had any functionality\n    // in the framework. This is a minor backwards incompatible change. If you've copied\n    // one of the included nib files from a previous release, you may get a key-value\n    // coding runtime error related to contentView, in which case you can subclass the\n    // view and add a `contentView` property or you can remove the outlet connection in\n    // Interface Builder.\n    // @IBOutlet public var contentView: UIView!\n\n    /*\n     MARK: - Initialization\n     */\n\n    public required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        backgroundView = self\n        layoutMargins = UIEdgeInsets.zero\n    }\n\n    public override init(frame: CGRect) {\n        super.init(frame: frame)\n        backgroundView = self\n        layoutMargins = UIEdgeInsets.zero\n    }\n\n    /*\n     MARK: - Installing background and content\n     */\n\n    /**\n     A convenience function for installing a content view as a subview of `backgroundView`\n     and pinning the edges to `backgroundView` with the specified `insets`.\n\n     - Parameter contentView: The view to be installed into the background view\n       and assigned to the `contentView` property.\n     - Parameter insets: The amount to inset the content view from the background view.\n       Default is zero inset.\n     */\n    open func installContentView(_ contentView: UIView, insets: UIEdgeInsets = UIEdgeInsets.zero) {\n        contentView.translatesAutoresizingMaskIntoConstraints = false\n        backgroundView.addSubview(contentView)\n        contentView.topAnchor.constraint(equalTo: backgroundView.topAnchor, constant: insets.top).isActive = true\n        contentView.bottomAnchor.constraint(equalTo: backgroundView.bottomAnchor, constant: -insets.bottom).isActive = true\n        contentView.leftAnchor.constraint(equalTo: backgroundView.leftAnchor, constant: insets.left).isActive = true\n        contentView.rightAnchor.constraint(equalTo: backgroundView.rightAnchor, constant: -insets.right).isActive = true\n        contentView.heightAnchor.constraint(equalToConstant: 350).with(priority: UILayoutPriority(rawValue: 200)).isActive = true\n    }\n\n    /**\n     A convenience function for installing a background view and pinning to the layout margins.\n     This is useful for creating programatic layouts where the background view needs to be\n     inset from the message view's edges (like a card-style layout).\n\n     - Parameter backgroundView: The view to be installed as a subview and\n       assigned to the `backgroundView` property.\n     - Parameter insets: The amount to inset the content view from the margins. Default is zero inset.\n     */\n    open func installBackgroundView(_ backgroundView: UIView, insets: UIEdgeInsets = UIEdgeInsets.zero) {\n        backgroundView.translatesAutoresizingMaskIntoConstraints = false\n        if backgroundView != self {\n            backgroundView.removeFromSuperview()\n        }\n        addSubview(backgroundView)\n        self.backgroundView = backgroundView\n        backgroundView.centerXAnchor.constraint(equalTo: centerXAnchor).with(priority: UILayoutPriority(rawValue: 950)).isActive = true\n        backgroundView.topAnchor.constraint(equalTo: layoutMarginsGuide.topAnchor, constant: insets.top).with(priority: UILayoutPriority(rawValue: 900)).isActive = true\n        backgroundView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor, constant: -insets.bottom).with(priority: UILayoutPriority(rawValue: 900)).isActive = true\n        backgroundView.heightAnchor.constraint(equalToConstant: 350).with(priority: UILayoutPriority(rawValue: 200)).isActive = true\n        layoutConstraints = [\n            backgroundView.leftAnchor.constraint(equalTo: layoutMarginsGuide.leftAnchor, constant: insets.left).with(priority: UILayoutPriority(rawValue: 900)),\n            backgroundView.rightAnchor.constraint(equalTo: layoutMarginsGuide.rightAnchor, constant: -insets.right).with(priority: UILayoutPriority(rawValue: 900)),\n        ]\n        regularWidthLayoutConstraints = [\n            backgroundView.leftAnchor.constraint(greaterThanOrEqualTo: layoutMarginsGuide.leftAnchor, constant: insets.left).with(priority: UILayoutPriority(rawValue: 900)),\n            backgroundView.rightAnchor.constraint(lessThanOrEqualTo: layoutMarginsGuide.rightAnchor, constant: -insets.right).with(priority: UILayoutPriority(rawValue: 900)),\n            backgroundView.widthAnchor.constraint(lessThanOrEqualToConstant: 500).with(priority: UILayoutPriority(rawValue: 950)),\n            backgroundView.widthAnchor.constraint(equalToConstant: 500).with(priority: UILayoutPriority(rawValue: 200)),\n        ]\n        installTapRecognizer()\n    }\n\n    /**\n     A convenience function for installing a background view and pinning to the horizontal\n     layout margins and to the vertical edges. This is useful for creating programatic layouts where\n     the background view needs to be inset from the message view's horizontal edges (like a tab-style layout).\n\n     - Parameter backgroundView: The view to be installed as a subview and\n       assigned to the `backgroundView` property.\n     - Parameter insets: The amount to inset the content view from the horizontal margins and vertical edges.\n       Default is zero inset.\n     */\n    open func installBackgroundVerticalView(_ backgroundView: UIView, insets: UIEdgeInsets = UIEdgeInsets.zero) {\n        backgroundView.translatesAutoresizingMaskIntoConstraints = false\n        if backgroundView != self {\n            backgroundView.removeFromSuperview()\n        }\n        addSubview(backgroundView)\n        self.backgroundView = backgroundView\n        backgroundView.centerXAnchor.constraint(equalTo: centerXAnchor).with(priority: UILayoutPriority(rawValue: 950)).isActive = true\n        backgroundView.topAnchor.constraint(equalTo: topAnchor, constant: insets.top).with(priority: UILayoutPriority(rawValue: 1000)).isActive = true\n        backgroundView.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -insets.bottom).with(priority: UILayoutPriority(rawValue: 1000)).isActive = true\n        backgroundView.heightAnchor.constraint(equalToConstant: 350).with(priority: UILayoutPriority(rawValue: 200)).isActive = true\n        layoutConstraints = [\n            backgroundView.leftAnchor.constraint(equalTo: layoutMarginsGuide.leftAnchor, constant: insets.left).with(priority: UILayoutPriority(rawValue: 900)),\n            backgroundView.rightAnchor.constraint(equalTo: layoutMarginsGuide.rightAnchor, constant: -insets.right).with(priority: UILayoutPriority(rawValue: 900)),\n        ]\n        regularWidthLayoutConstraints = [\n            backgroundView.leftAnchor.constraint(greaterThanOrEqualTo: layoutMarginsGuide.leftAnchor, constant: insets.left).with(priority: UILayoutPriority(rawValue: 900)),\n            backgroundView.rightAnchor.constraint(lessThanOrEqualTo: layoutMarginsGuide.rightAnchor, constant: -insets.right).with(priority: UILayoutPriority(rawValue: 900)),\n            backgroundView.widthAnchor.constraint(lessThanOrEqualToConstant: 500).with(priority: UILayoutPriority(rawValue: 950)),\n            backgroundView.widthAnchor.constraint(equalToConstant: 500).with(priority: UILayoutPriority(rawValue: 200)),\n        ]\n        installTapRecognizer()\n    }\n\n    /*\n     MARK: - Tap handler\n     */\n\n    /**\n     An optional tap handler that will be called when the `backgroundView` is tapped.\n     */\n    open var tapHandler: ((_ view: BaseView) -> Void)? {\n        didSet {\n            installTapRecognizer()\n        }\n    }\n\n    fileprivate lazy var tapRecognizer: UITapGestureRecognizer = {\n        let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(MessageView.tapped))\n        return tapRecognizer\n    }()\n\n    @objc func tapped() {\n        tapHandler?(self)\n    }\n\n    fileprivate func installTapRecognizer() {\n        guard let backgroundView = backgroundView else { return }\n        removeGestureRecognizer(tapRecognizer)\n        backgroundView.removeGestureRecognizer(tapRecognizer)\n        if tapHandler != nil {\n            // Only install the tap recognizer if there is a tap handler,\n            // which makes it slightly nicer if one wants to install\n            // a custom gesture recognizer.\n            backgroundView.addGestureRecognizer(tapRecognizer)\n        }\n    }\n\n    open override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {\n        if backgroundView != self {\n            let backgroundViewPoint = convert(point, to: backgroundView)\n            return backgroundView.point(inside: backgroundViewPoint, with: event)\n        }\n        return super.point(inside: point, with: event)\n    }\n\n    /*\n     MARK: - MarginAdjustable\n\n     These properties fulfill the `MarginAdjustable` protocol and are exposed\n     as `@IBInspectables` so that they can be adjusted directly in nib files\n     (see MessageView.nib).\n     */\n\n    public var layoutMarginAdditions: UIEdgeInsets {\n        get {\n            return UIEdgeInsets(top: topLayoutMarginAddition, left: leftLayoutMarginAddition, bottom: bottomLayoutMarginAddition, right: rightLayoutMarginAddition)\n        }\n        set {\n            topLayoutMarginAddition = newValue.top\n            leftLayoutMarginAddition = newValue.left\n            bottomLayoutMarginAddition = newValue.bottom\n            rightLayoutMarginAddition = newValue.right\n        }\n    }\n\n    /// Start margins from the safe area.\n    open var respectSafeArea: Bool = true\n\n    /// IBInspectable access to layoutMarginAdditions.top\n    @IBInspectable open var topLayoutMarginAddition: CGFloat = 0\n\n    /// IBInspectable access to layoutMarginAdditions.left\n    @IBInspectable open var leftLayoutMarginAddition: CGFloat = 0\n\n    /// IBInspectable access to layoutMarginAdditions.bottom\n    @IBInspectable open var bottomLayoutMarginAddition: CGFloat = 0\n\n    /// IBInspectable access to layoutMarginAdditions.right\n    @IBInspectable open var rightLayoutMarginAddition: CGFloat = 0\n\n    @IBInspectable open var collapseLayoutMarginAdditions: Bool = true\n\n    @IBInspectable open var bounceAnimationOffset: CGFloat = 5\n\n    /*\n     MARK: - Setting the height\n     */\n\n    /**\n     An optional explicit height for the background view, which can be used if\n     the message view's intrinsic content size does not produce the desired height.\n     */\n    open var backgroundHeight: CGFloat? {\n        didSet {\n            updateBackgroundHeightConstraint()\n        }\n    }\n\n    private func updateBackgroundHeightConstraint() {\n        if let existing = backgroundHeightConstraint {\n            let view = existing.firstItem as! UIView\n            view.removeConstraint(existing)\n            backgroundHeightConstraint = nil\n        }\n        if let height = backgroundHeight, let backgroundView = backgroundView {\n            let constraint = NSLayoutConstraint(item: backgroundView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: height)\n            backgroundView.addConstraint(constraint)\n            backgroundHeightConstraint = constraint\n        }\n    }\n\n    private var backgroundHeightConstraint: NSLayoutConstraint?\n\n    /*\n     Mark: - Layout\n    */\n\n    open override func updateConstraints() {\n        super.updateConstraints()\n        let on: [NSLayoutConstraint]\n        let off: [NSLayoutConstraint]\n        switch traitCollection.horizontalSizeClass {\n        case .regular:\n            on = regularWidthLayoutConstraints\n            off = layoutConstraints\n        default:\n            on = layoutConstraints\n            off = regularWidthLayoutConstraints\n        }\n        on.forEach { $0.isActive = true }\n        off.forEach { $0.isActive = false }\n    }\n\n    private var layoutConstraints: [NSLayoutConstraint] = []\n    private var regularWidthLayoutConstraints: [NSLayoutConstraint] = []\n\n    open override func layoutSubviews() {\n        super.layoutSubviews()\n        updateShadowPath()\n    }\n}\n\n/*\n MARK: - Theming\n */\n\nextension BaseView {\n\n    /// A convenience function to configure a default drop shadow effect.\n    /// The shadow is to this view's layer instead of that of the background view\n    /// because the background view may be masked. So, when modifying the drop shadow,\n    /// be sure to set the shadow properties of this view's layer. The shadow path is\n    /// updated for you automatically.\n    public func configureDropShadow() {\n        layer.shadowColor = UIColor.black.cgColor\n        layer.shadowOffset = CGSize(width: 0.0, height: 2.0)\n        layer.shadowRadius = 6.0\n        layer.shadowOpacity = 0.4\n        layer.masksToBounds = false\n        updateShadowPath()\n    }\n\n    /// A convenience function to turn off drop shadow\n    public func configureNoDropShadow() {\n        layer.shadowOpacity = 0\n    }\n\n    private func updateShadowPath() {\n        backgroundView?.layoutIfNeeded()\n        let shadowLayer = backgroundView?.layer ?? layer\n        let shadowRect = layer.convert(shadowLayer.bounds, from: shadowLayer)\n        let shadowPath: CGPath?\n        if let backgroundMaskLayer = shadowLayer.mask as? CAShapeLayer,\n            let backgroundMaskPath = backgroundMaskLayer.path {\n            var transform = CGAffineTransform(translationX: shadowRect.minX, y: shadowRect.minY)\n            shadowPath = backgroundMaskPath.copy(using: &transform)\n        } else {\n            shadowPath = UIBezierPath(roundedRect: shadowRect, cornerRadius: shadowLayer.cornerRadius).cgPath\n        }\n        // This is a workaround needed for smooth rotation animations.\n        if let foundAnimation = layer.findAnimation(forKeyPath: \"bounds.size\") {\n            // Update the layer's `shadowPath` with animation, copying the relevant properties\n            // from the found animation.\n            let animation = CABasicAnimation(keyPath: \"shadowPath\")\n            animation.duration = foundAnimation.duration\n            animation.timingFunction = foundAnimation.timingFunction\n            animation.fromValue = layer.shadowPath\n            animation.toValue = shadowPath\n            layer.add(animation, forKey: \"shadowPath\")\n            layer.shadowPath = shadowPath\n        } else {\n            // Update the layer's `shadowPath` without animation\n            layer.shadowPath = shadowPath        }\n    }\n}\n\n/*\n MARK: - Configuring the width\n\n This extension provides a few convenience functions for configuring the\n background view's width. You are encouraged to write your own such functions\n if these don't exactly meet your needs.\n */\n\nextension BaseView {\n\n    /**\n     A shortcut for configuring the left and right layout margins. For views that\n     have `backgroundView` as a subview of `MessageView`, the background view should\n     be pinned to the left and right `layoutMargins` in order for this configuration to work.\n     */\n    public func configureBackgroundView(sideMargin: CGFloat) {\n        layoutMargins.left = sideMargin\n        layoutMargins.right = sideMargin\n    }\n\n    /**\n     A shortcut for adding a width constraint to the `backgroundView`. When calling this\n     method, it is important to ensure that the width constraint doesn't conflict with\n     other constraints. The CardView.nib and TabView.nib layouts are compatible with\n     this method.\n     */\n    public func configureBackgroundView(width: CGFloat) {\n        guard let backgroundView = backgroundView else { return }\n        let constraint = NSLayoutConstraint(item: backgroundView, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: width)\n        backgroundView.addConstraint(constraint)\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/CALayer+Extensions.swift",
    "content": "//\n//  CALayer+Extensions.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 8/3/18.\n//  Copyright © 2018 SwiftKick Mobile. All rights reserved.\n//\n\nimport QuartzCore\n\nextension CALayer {\n    func findAnimation(forKeyPath keyPath: String) -> CABasicAnimation? {\n        return animationKeys()?\n            .compactMap({ animation(forKey: $0) as? CABasicAnimation })\n            .filter({ $0.keyPath == keyPath })\n            .first\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/CornerRoundingView.swift",
    "content": "//\n//  CornerRoundingView.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 7/28/18.\n//  Copyright © 2018 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\n\n/// A background view that messages can use for rounding all or a subset of corners with squircles\n/// (the smoother method of rounding corners that you see on app icons).\nopen class CornerRoundingView: UIView {\n\n    /// Specifies the corner radius to use.\n    @IBInspectable\n    open var cornerRadius: CGFloat = 0 {\n        didSet {\n            updateMaskPath()\n        }\n    }\n\n    /// Set to `true` for layouts where only the leading corners should be\n    /// rounded. For example, the layout in TabView.xib rounds the bottom corners\n    /// when displayed from the top and the top corners when displayed from the bottom.\n    /// When this property is `true`, the `roundedCorners` property will be overwritten\n    /// by relevant animators (e.g. `TopBottomAnimation`).\n    @IBInspectable\n    open var roundsLeadingCorners: Bool = false\n\n    /// Specifies which corners should be rounded. When `roundsLeadingCorners = true`, relevant\n    /// relevant animators (e.g. `TopBottomAnimation`) will overwrite the value of this property.\n    open var roundedCorners: UIRectCorner = [.allCorners] {\n        didSet {\n            updateMaskPath()\n        }\n    }\n\n    override public init(frame: CGRect) {\n        super.init(frame: frame)\n        sharedInit()\n    }\n\n    required public init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        sharedInit()\n    }\n\n    private func sharedInit() {\n        layer.mask = shapeLayer\n    }\n\n    private let shapeLayer = CAShapeLayer()\n\n    override open func layoutSubviews() {\n        super.layoutSubviews()\n        updateMaskPath()\n    }\n\n    private func updateMaskPath() {\n        let newPath = UIBezierPath(roundedRect: layer.bounds, byRoundingCorners: roundedCorners, cornerRadii: cornerRadii).cgPath\n        // Update the `shapeLayer's` path with animation if we detect our `layer's` size is being animated.\n        // This is a workaround needed for smooth rotation animations.\n        if let foundAnimation = layer.findAnimation(forKeyPath: \"bounds.size\") {\n            // Update the `shapeLayer's` path with animation, copying the relevant properties\n            // from the found animation.\n            let animation = CABasicAnimation(keyPath: \"path\")\n            animation.duration = foundAnimation.duration\n            animation.timingFunction = foundAnimation.timingFunction\n            animation.fromValue = shapeLayer.path\n            animation.toValue = newPath\n            shapeLayer.add(animation, forKey: \"path\")\n            shapeLayer.path = newPath\n        } else {\n            // Update the `shapeLayer's` path  without animation\n            shapeLayer.path = newPath\n        }\n    }\n\n    private var cornerRadii: CGSize {\n        return CGSize(width: cornerRadius, height: cornerRadius)\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/Error.swift",
    "content": "//\n//  Error.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 8/7/16.\n//  Copyright © 2016 SwiftKick Mobile LLC. All rights reserved.\n//\n\nimport Foundation\n\n/**\n The `SwiftMessagesError` enum contains the errors thrown by SwiftMessages.\n */\nenum SwiftMessagesError: Error {\n    case cannotLoadViewFromNib(nibName: String)\n    case noRootViewController\n}\n"
  },
  {
    "path": "SwiftMessages/HapticMessage.swift",
    "content": "//\n//  HapticMessage.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 1/23/24.\n//  Copyright © 2024 SwiftKick Mobile. All rights reserved.\n//\n\nimport Foundation\n\n/**\n Message views that conform to `HapticMessage` can specify a haptic feedback to be used when presented.\n */\nprotocol HapticMessage {\n    var defaultHaptic: SwiftMessages.Haptic? { get }\n}\n"
  },
  {
    "path": "SwiftMessages/Identifiable.swift",
    "content": "//\n//  Identifiable.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 8/1/16.\n//  Copyright © 2016 SwiftKick Mobile LLC. All rights reserved.\n//\n\nimport Foundation\n\n/**\n Message views that adopt the `Identifiable` protocol will have duplicate messages\n removed from the `MessageView` queue. Typically, the `id` would be set to a string\n representation of the content of the message view. For example, `MessageView`, combines\n the title and message body text.\n \n This protocol is optional. Message views that don't adopt `Identifiable` will not\n have duplicates removed.\n */\n\npublic protocol Identifiable {\n    var id: String { get }\n}\n"
  },
  {
    "path": "SwiftMessages/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "SwiftMessages/KeyboardTrackingView.swift",
    "content": "//\n//  KeyboardTrackingView.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 5/20/19.\n//  Copyright © 2019 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\n\npublic protocol KeyboardTrackingViewDelegate: AnyObject {\n    func keyboardTrackingViewWillChange(change: KeyboardTrackingView.Change, userInfo: [AnyHashable : Any])\n    func keyboardTrackingViewDidChange(change: KeyboardTrackingView.Change, userInfo: [AnyHashable : Any])\n}\n\n/// A view that adjusts it's height based on keyboard hide and show notifications.\n/// Pin it to the bottom of the screen using Auto Layout and then pin views that\n/// should avoid the keyboard to the top of it. Supply an instance of this class\n/// on `SwiftMessages.Config.keyboardTrackingView` or `SwiftMessagesSegue.keyboardTrackingView`\n/// for automatic keyboard avoidance for the entire SwiftMessages view or view controller.\nopen class KeyboardTrackingView: UIView {\n\n    public enum Change {\n        case show\n        case hide\n        case frame\n    }\n\n    public weak var delegate: KeyboardTrackingViewDelegate?\n\n    /// Typically, when a view controller is not being displayed, keyboard\n    /// tracking should be paused to avoid responding to keyboard events\n    /// caused by other view controllers or apps. Setting `isPaused = false` in\n    /// `viewWillAppear` and `isPaused = true` in `viewWillDisappear` usually works. This class\n    /// automatically pauses and resumes when the app resigns and becomes active, respectively.\n    open var isPaused = false {\n        didSet {\n            if !isPaused {\n                isAutomaticallyPaused = false\n            }\n        }\n    }\n\n    /// The margin to maintain between the keyboard and the top of the view.\n    @IBInspectable open var topMargin: CGFloat = 0\n\n    /// Subclasses can override this to do something before the change.\n    open func willChange(\n        change: KeyboardTrackingView.Change,\n        userInfo: [AnyHashable : Any]\n    ) {}\n\n    /// Subclasses can override this to do something after the change.\n    open func didChange(\n        change: KeyboardTrackingView.Change,\n        userInfo: [AnyHashable : Any]\n    ) {}\n\n    override public init(frame: CGRect) {\n        super.init(frame: frame)\n        postInit()\n    }\n\n    required public init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n    }\n\n    open override func awakeFromNib() {\n        super.awakeFromNib()\n        postInit()\n    }\n\n    private var isAutomaticallyPaused = false\n    private var heightConstraint: NSLayoutConstraint!\n    private var lastObservedKeyboardRect: CGRect?\n\n    private func postInit() {\n        translatesAutoresizingMaskIntoConstraints = false\n        heightConstraint = heightAnchor.constraint(equalToConstant: 0)\n        heightConstraint.isActive = true\n        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)\n        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)\n        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)\n        NotificationCenter.default.addObserver(self, selector: #selector(pause), name: UIApplication.willResignActiveNotification, object: nil)\n        NotificationCenter.default.addObserver(self, selector: #selector(resume), name: UIApplication.didBecomeActiveNotification, object: nil)\n        backgroundColor = .clear\n    }\n\n    @objc private func keyboardWillChangeFrame(_ notification: Notification) {\n        show(change: .frame, notification)\n    }\n\n    @objc private func keyboardWillShow(_ notification: Notification) {\n        show(change: .show, notification)\n    }\n\n    @objc private func keyboardWillHide(_ notification: Notification) {\n        guard !(isPaused || isAutomaticallyPaused),\n            let userInfo = (notification as NSNotification).userInfo else { return }\n        guard heightConstraint.constant != 0 else { return }\n        delegate?.keyboardTrackingViewWillChange(change: .hide, userInfo: userInfo)\n        animateKeyboardChange(change: .hide, height: 0, userInfo: userInfo)\n    }\n\n    @objc private func pause() {\n        isAutomaticallyPaused = true\n    }\n\n    @objc private func resume() {\n        isAutomaticallyPaused = false\n    }\n\n    open override func layoutSubviews() {\n        super.layoutSubviews()\n        heightConstraint.constant = calculateHeightConstant()\n    }\n\n    private func show(change: Change, _ notification: Notification) {\n        guard !(isPaused || isAutomaticallyPaused),\n            let userInfo = (notification as NSNotification).userInfo,\n            let value = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }\n        willChange(change: change, userInfo: userInfo)\n        delegate?.keyboardTrackingViewWillChange(change: change, userInfo: userInfo)\n        lastObservedKeyboardRect = value.cgRectValue\n        let newHeight = calculateHeightConstant()\n        guard heightConstraint.constant != newHeight else { return }\n        animateKeyboardChange(change: change, height: newHeight, userInfo: userInfo)\n    }\n\n    private func animateKeyboardChange(change: Change, height: CGFloat, userInfo: [AnyHashable: Any]) {\n        if let durationNumber = userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? NSNumber {\n            UIView.animate(withDuration: durationNumber.doubleValue, delay: 0, options: .curveEaseInOut, animations: {\n                self.heightConstraint.constant = height\n                self.updateConstraintsIfNeeded()\n                self.superview?.layoutIfNeeded()\n            }) { completed in\n                self.didChange(change: change, userInfo: userInfo)\n                self.delegate?.keyboardTrackingViewDidChange(change: change, userInfo: userInfo)\n            }\n        }\n    }\n\n    private func calculateHeightConstant() -> CGFloat {\n        guard let keyboardRect = lastObservedKeyboardRect else { return 0 }\n        let thisRect = convert(bounds, to: nil)\n        return max(0, thisRect.maxY - keyboardRect.minY) + topMargin\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/MarginAdjustable+Extensions.swift",
    "content": "//\n//  MarginAdjustable+Extensions.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 11/5/17.\n//  Copyright © 2017 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\n\nextension MarginAdjustable where Self: UIView {\n    public func defaultMarginAdjustment(context: AnimationContext) -> UIEdgeInsets {\n        var layoutMargins: UIEdgeInsets = layoutMarginAdditions\n        var safeAreaInsets: UIEdgeInsets = {\n            guard respectSafeArea else { return .zero }\n            insetsLayoutMarginsFromSafeArea = false\n            return self.safeAreaInsets\n        }()\n        if !context.safeZoneConflicts.isDisjoint(with: .overStatusBar) {\n            safeAreaInsets.top = 0\n        }\n        layoutMargins = collapseLayoutMarginAdditions\n            ? layoutMargins.collapse(toInsets: safeAreaInsets)\n            : layoutMargins + safeAreaInsets\n        return layoutMargins\n    }\n}\n\nextension UIEdgeInsets {\n    func collapse(toInsets insets: UIEdgeInsets) -> UIEdgeInsets {\n        let top = self.top.collapse(toInset: insets.top)\n        let left = self.left.collapse(toInset: insets.left)\n        let bottom = self.bottom.collapse(toInset: insets.bottom)\n        let right = self.right.collapse(toInset: insets.right)\n        return UIEdgeInsets(top: top, left: left, bottom: bottom, right: right)\n    }\n}\n\nextension CGFloat {\n    func collapse(toInset inset: CGFloat) -> CGFloat {\n        return Swift.max(self, inset)\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/MarginAdjustable.swift",
    "content": "//\n//  MarginAdjustable.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 8/5/16.\n//  Copyright © 2016 SwiftKick Mobile LLC. All rights reserved.\n//\n\nimport UIKit\n\n/*\n Message views that implement the `MarginAdjustable` protocol will have their\n `layoutMargins` adjusted by SwiftMessages to account for the height of the\n status bar (when displayed under the status bar) and a small amount of\n overshoot in the bounce animation. `MessageView` implements this protocol\n by way of its parent class `BaseView`.\n \n For the effect of this protocol to work, subviews should be pinned to the\n message view's margins and the `layoutMargins` property should not be modified.\n \n This protocol is optional. A message view that doesn't implement `MarginAdjustable`\n is responsible for setting is own internal margins appropriately.\n */\npublic protocol MarginAdjustable {\n\n    /// The amount to add to the safe area insets in calculating\n    /// the layout margins.\n    var layoutMarginAdditions: UIEdgeInsets { get }\n\n    /// When `true`, SwiftMessages automatically collapses layout margin additions (topLayoutMarginAddition, etc.)\n    /// when the default layout margins are greater than zero. This is typically used when a margin addition is only\n    /// needed when the safe area inset is zero for a given edge. When the safe area inset for a given edge is non-zero,\n    /// the additional margin is not added.\n    var collapseLayoutMarginAdditions: Bool { get set }\n\n\n    /// Start margins from the safe area.\n    var respectSafeArea: Bool { get set }\n\n    var bounceAnimationOffset: CGFloat { get set }\n}\n\n"
  },
  {
    "path": "SwiftMessages/MaskingView.swift",
    "content": "//\n//  MaskingView.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 3/11/17.\n//  Copyright © 2017 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\n\n\nclass MaskingView: PassthroughView {\n\n    func install(keyboardTrackingView: KeyboardTrackingView) {\n        self.keyboardTrackingView = keyboardTrackingView\n        keyboardTrackingView.translatesAutoresizingMaskIntoConstraints = false\n        addSubview(keyboardTrackingView)\n        keyboardTrackingView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true\n        keyboardTrackingView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true\n        keyboardTrackingView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true\n    }\n\n    var accessibleElements: [NSObject] = []\n\n    weak var backgroundView: UIView? {\n        didSet {\n            oldValue?.removeFromSuperview()\n            if let view = backgroundView {\n                view.isUserInteractionEnabled = false\n                view.frame = bounds\n                view.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n                addSubview(view)\n                sendSubviewToBack(view)\n            }\n        }\n    }\n\n    override func accessibilityElementCount() -> Int {\n        return accessibleElements.count\n    }\n\n    override func accessibilityElement(at index: Int) -> Any? {\n        return accessibleElements[index]\n    }\n\n    override func index(ofAccessibilityElement element: Any) -> Int {\n        guard let object = element as? NSObject else { return 0 }\n        return accessibleElements.firstIndex(of: object) ?? 0\n    }\n\n    init() {\n        super.init(frame: CGRect.zero)\n        clipsToBounds = true\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        clipsToBounds = true\n    }\n\n    private var keyboardTrackingView: KeyboardTrackingView?\n\n    override func addSubview(_ view: UIView) {\n        super.addSubview(view)\n        guard let keyboardTrackingView = keyboardTrackingView,\n            view != keyboardTrackingView,\n            view != backgroundView else { return }\n        let offset: CGFloat\n        if let adjustable = view as? MarginAdjustable {\n            offset = -adjustable.bounceAnimationOffset\n        } else {\n            offset = 0\n        }\n        keyboardTrackingView.topAnchor.constraint(\n            greaterThanOrEqualTo: view.bottomAnchor,\n            constant: offset\n        ).with(priority: UILayoutPriority(250)).isActive = true\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/MessageGeometryProxy.swift",
    "content": "//\n//  MessageGeometryProxy.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 6/24/24.\n//  Copyright © 2024 SwiftKick Mobile. All rights reserved.\n//\n\nimport SwiftUI\n\n/// A  data type that mimicks `GeomtryProxy` and is used with `swiftMessage()` modifier when the geomtry metrics of the container view\n/// are needed, particularly because `GeometryReader` doesn't work inside the view builder due to the way the message view is being\n/// displayed from UIKit.\npublic struct MessageGeometryProxy {\n    public var size: CGSize\n    public var safeAreaInsets: EdgeInsets\n}\n"
  },
  {
    "path": "SwiftMessages/MessageHostingView.swift",
    "content": "//\n//  MessageHostingView.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 10/5/23.\n//\n\nimport SwiftUI\nimport UIKit\n\n/// A rudimentary hosting view for SwiftUI messages.\n@available(iOS 14.0, *)\npublic class MessageHostingView<Content>: UIView, Identifiable where Content: View {\n\n    // MARK: - API\n\n    public let id: String\n\n    public init(id: String, content: Content) {\n        self.id = id\n        self.content = { _ in content }\n        super.init(frame: .zero)\n        backgroundColor = .clear\n    }\n\n    public init<Message>(\n        message: Message,\n        @ViewBuilder content: @escaping (Message, MessageGeometryProxy) -> Content\n    ) where Message: Identifiable {\n        self.id = message.id\n        self.content = { geom in content(message, geom) }\n        super.init(frame: .zero)\n        backgroundColor = .clear\n    }\n\n    convenience public init<Message>(message: Message) where Message: MessageViewConvertible, Message.Content == Content {\n        self.init(id: message.id, content: message.asMessageView() )\n    }\n\n    // MARK: - Constants\n\n    // MARK: - Variables\n\n    private var hostVC: UIHostingController<Content>?\n    private let content: (MessageGeometryProxy) -> Content\n\n    // MARK: - Lifecycle\n\n    @available(*, unavailable)\n    required init?(coder _: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    /// Override hit testing so that only SwiftUI-rendered content inside `MessageHostingView` can receive touches.\n    ///\n    /// Background:\n    /// - `MessageHostingView` does not tightly wrap its SwiftUI content, potentially leaving surrounding regions that should not be tappable. There have\n    ///   been some complications with detecting touches on the SwiftUI content over the years that have led to the current approach:\n    /// - On iOS 18, UIKit performs a second hit test that resolves to the `UIHostingController`'s view instead of the actual SwiftUI element.\n    /// - On iOS 26, the `UIHostingController`'s view no longer contains any subviews, but its `CALayer` *layer* hierarchy still reflects the SwiftUI content.\n    ///\n    /// All of these issues can be solved by hit testing the layer hierarchy instead of the view hierarchy:\n    /// - Call `super.hitTest(point, with: event)` to obtain a candidate view `view`. If our heuristic determines that SwiftUI content was tapped,\n    ///   then we return `view` to accept the touch. Otherwise, return `nil` to pass the touch through.\n    /// - If the candidate is `MessageHostingView` return `nil`.\n    /// - If the candidate is directly parented to `MessageHostingView`, this is the `UIHostingController` view containing the SwiftUI content.\n    ///   To determine if SwiftUI content was touched, we iterate over hosting controller's sublayers and return the candidate if the touch intersects a sublayer.\n    ///   Otherwise, return `nil`.\n    /// - For any other case, we return the candidate because we don't know what's going on.\n    public override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {\n        guard let view = super.hitTest(point, with: event) else { return nil }\n        if view == self { return nil }\n        \n        if view.superview == self {\n            for sublayer in view.layer.sublayers ?? [] {\n                let sublayerPoint = self.layer.convert(point, to: sublayer)\n                if sublayer.contains(sublayerPoint) {\n                    return view\n                }\n            }\n            return nil\n        }\n        return view\n    }\n\n    public override func didMoveToSuperview() {\n        guard let superview = self.superview else { return }\n        let size = superview.bounds.size\n        let insets = superview.safeAreaInsets\n        let ltr = superview.effectiveUserInterfaceLayoutDirection == .leftToRight\n        let proxy = MessageGeometryProxy(\n            size: CGSize(\n                width: size.width - insets.left - insets.right,\n                height: size.height - insets.top - insets.bottom\n            ),\n            safeAreaInsets: EdgeInsets(\n                top: insets.top,\n                leading: ltr ? insets.left : insets.right,\n                bottom: insets.bottom,\n                trailing: ltr ? insets.right : insets.left\n            )\n        )\n        let hostVC = UIHostingController(rootView: content(proxy))\n        self.hostVC = hostVC\n        hostVC.loadViewIfNeeded()\n        installContentView(hostVC.view)\n        hostVC.view.backgroundColor = .clear\n\n    }\n\n    // MARK: - Configuration\n\n    private func installContentView(_ contentView: UIView) {\n        contentView.translatesAutoresizingMaskIntoConstraints = false\n        addSubview(contentView)\n        NSLayoutConstraint.activate([\n            contentView.topAnchor.constraint(equalTo: topAnchor),\n            contentView.bottomAnchor.constraint(equalTo: bottomAnchor),\n            contentView.leftAnchor.constraint(equalTo: leftAnchor),\n            contentView.rightAnchor.constraint(equalTo: rightAnchor),\n        ])\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/MessageView.swift",
    "content": "//\n//  MessageView.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 7/30/16.\n//  Copyright © 2016 SwiftKick Mobile LLC. All rights reserved.\n//\n\nimport UIKit\n\n/*\n */\nopen class MessageView: BaseView, Identifiable, AccessibleMessage, HapticMessage {\n\n    /*\n     MARK: - Haptic feedback\n     */\n    \n    /// The default haptic feedback to be used when the message is presented.\n    open var defaultHaptic: SwiftMessages.Haptic?\n\n    /*\n     MARK: - Button tap handler\n     */\n    \n    /// An optional button tap handler. The `button` is automatically\n    /// configured to call this tap handler on `.TouchUpInside`.\n    open var buttonTapHandler: ((_ button: UIButton) -> Void)?\n    \n    @objc func buttonTapped(_ button: UIButton) {\n        buttonTapHandler?(button)\n    }\n\n    /*\n     MARK: - Touch handling\n     */\n\n    open override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {\n        // Only accept touches within the background view. Anything outside of the\n        // background view's bounds should be transparent and does not need to receive\n        // touches. This helps with tap dismissal when using `DimMode.gray` and `DimMode.color`.\n        return backgroundView == self\n            ? super.point(inside: point, with: event)\n            : backgroundView.point(inside: convert(point, to: backgroundView), with: event)\n    }\n\n    /*\n     MARK: - IB outlets\n     */\n    \n    /// An optional title label.\n    @IBOutlet open var titleLabel: UILabel?\n    \n    /// An optional body text label.\n    @IBOutlet open var bodyLabel: UILabel?\n    \n    /// An optional icon image view.\n    @IBOutlet open var iconImageView: UIImageView?\n    \n    /// An optional icon label (e.g. for emoji character, icon font, etc.).\n    @IBOutlet open var iconLabel: UILabel?\n    \n    /// An optional button. This buttons' `.TouchUpInside` event will automatically\n    /// invoke the optional `buttonTapHandler`, but its fine to add other target\n    /// action handlers can be added.\n    @IBOutlet open var button: UIButton? {\n        didSet {\n            if let old = oldValue {\n                old.removeTarget(self, action: #selector(MessageView.buttonTapped(_:)), for: .touchUpInside)\n            }\n            if let button = button {\n                button.addTarget(self, action: #selector(MessageView.buttonTapped(_:)), for: .touchUpInside)\n            }\n        }\n    }\n    \n    /*\n     MARK: - Identifiable\n     */\n    \n    open var id: String {\n        get {\n            return customId ?? \"MessageView:title=\\(String(describing: titleLabel?.text)), body=\\(String(describing: bodyLabel?.text))\"\n        }\n        set {\n            customId = newValue\n        }\n    }\n    \n    private var customId: String?\n\n    /*\n     MARK: - AccessibleMessage\n     */\n\n    /**\n     An optional prefix for the `accessibilityMessage` that can\n     be used to further clarify the message for VoiceOver. For example,\n     the view's background color or icon might convey that a message is\n     a warning, in which case one may specify the value \"warning\".\n     */\n    open var accessibilityPrefix: String?\n\n    open var accessibilityMessage: String? {\n        #if swift(>=4.1)\n        let components = [accessibilityPrefix, titleLabel?.text, bodyLabel?.text].compactMap { $0 }\n        #else\n        let components = [accessibilityPrefix, titleLabel?.text, bodyLabel?.text].flatMap { $0 }\n        #endif\n        guard components.count > 0 else { return nil }\n        return components.joined(separator: \", \")\n    }\n\n    public var accessibilityElement: NSObject? {\n        return backgroundView\n    }\n\n    open var additionalAccessibilityElements: [NSObject]? {\n        var elements: [NSObject] = []\n        func getAccessibleSubviews(view: UIView) {\n            for subview in view.subviews {\n                if subview.isAccessibilityElement {\n                    elements.append(subview)\n                } else {\n                    // Only doing this for non-accessible `subviews`, which avoids\n                    // including button labels, etc.\n                    getAccessibleSubviews(view: subview)\n                }\n            }\n        }\n        getAccessibleSubviews(view: self.backgroundView)\n        return elements\n    }\n}\n\n/*\n MARK: - Creating message views\n \n This extension provides several convenience functions for instantiating\n `MessageView` from the included nib files in a type-safe way. These nib \n files can be found in the Resources folder and can be drag-and-dropped \n into a project and modified. You may still use these APIs if you've\n copied the nib files because SwiftMessages looks for them in the main\n bundle first. See `SwiftMessages` for additional nib loading options.\n */\n\nextension MessageView {\n    \n    /**\n     Specifies one of the nib files included in the Resources folders.\n     */\n    public enum Layout: String {\n        \n        /**\n         The standard message view that stretches across the full width of the\n         container view.\n         */\n        case messageView = \"MessageView\"\n        \n        /**\n         A floating card-style view with rounded corners.\n         */\n        case cardView = \"CardView\"\n\n        /**\n         Like `CardView` with one end attached to the super view.\n         */\n        case tabView = \"TabView\"\n\n        /**\n         A 20pt tall view that can be used to overlay the status bar.\n         Note that this layout will automatically grow taller if displayed\n         directly under the status bar (see the `ContentInsetting` protocol).\n         */\n        case statusLine = \"StatusLine\"\n\n        /**\n         A floating card-style view with elements centered and arranged vertically.\n         This view is typically used with `.center` presentation style.         \n         */\n        case centeredView = \"CenteredView\"\n    }\n    \n    /**\n     Loads the nib file associated with the given `Layout` and returns the first\n     view found in the nib file with the matching type `T: MessageView`.\n     \n     - Parameter layout: The `Layout` option to use.\n     - Parameter filesOwner: An optional files owner.\n     \n     - Returns: An instance of generic view type `T: MessageView`.\n     */\n    public static func viewFromNib<T: MessageView>(layout: Layout, filesOwner: AnyObject = NSNull.init()) -> T {\n        return try! SwiftMessages.viewFromNib(named: layout.rawValue)\n    }\n    \n    /**\n     Loads the nib file associated with the given `Layout` from\n     the given bundle and returns the first view found in the nib\n     file with the matching type `T: MessageView`.\n     \n     - Parameter layout: The `Layout` option to use.\n     - Parameter bundle: The name of the bundle containing the nib file.\n     - Parameter filesOwner: An optional files owner.\n     \n     - Returns: An instance of generic view type `T: MessageView`.\n     */\n    public static func viewFromNib<T: MessageView>(layout: Layout, bundle: Bundle, filesOwner: AnyObject = NSNull.init()) -> T {\n        return try! SwiftMessages.viewFromNib(named: layout.rawValue, bundle: bundle, filesOwner: filesOwner)\n    }\n}\n\n/*\n MARK: - Layout adjustments\n\n This extension provides a few convenience functions for adjusting the layout.\n */\n\nextension MessageView {\n    /**\n     Constrains the image view to a specified size. By default, the size of the\n     image view is determined by its `intrinsicContentSize`.\n     \n     - Parameter size: The size to be translated into Auto Layout constraints.\n     - Parameter contentMode: The optional content mode to apply.\n     */\n    public func configureIcon(withSize size: CGSize, contentMode: UIView.ContentMode? = nil) {\n        var views: [UIView] = []\n        if let iconImageView = iconImageView { views.append(iconImageView) }\n        if let iconLabel = iconLabel { views.append(iconLabel) }\n        views.forEach {\n            let constraints = [$0.heightAnchor.constraint(equalToConstant: size.height),\n                               $0.widthAnchor.constraint(equalToConstant: size.width)]\n            constraints.forEach { $0.priority = UILayoutPriority(999.0) }\n            $0.addConstraints(constraints)\n            if let contentMode = contentMode {\n                $0.contentMode = contentMode\n            }\n        }\n    }\n}\n\n/*\n MARK: - Theming\n \n This extension provides a few convenience functions for setting styles,\n colors and icons. You are encouraged to write your own such functions\n if these don't exactly meet your needs.\n */\n\nextension MessageView {\n    \n    /**\n     A convenience function for setting some pre-defined colors and icons.\n     \n     - Parameter theme: The theme type to use.\n     - Parameter iconStyle: The icon style to use. Defaults to `.Default`.\n     - Parameter useHaptics: If `true`, configures an appropriate haptic based on theme. Defaults to `false`.\n     */\n    public func configureTheme(_ theme: Theme, iconStyle: IconStyle = .default, includeHaptic: Bool = false) {\n        let iconImage = iconStyle.image(theme: theme)\n        let backgroundColor: UIColor\n        let foregroundColor: UIColor\n        let defaultBackgroundColor: UIColor\n        switch theme {\n        case .info:\n            defaultBackgroundColor = UIColor(red: 225.0/255.0, green: 225.0/255.0, blue: 225.0/255.0, alpha: 1.0)\n        case .success:\n            defaultBackgroundColor = UIColor(red: 97.0/255.0, green: 161.0/255.0, blue: 23.0/255.0, alpha: 1.0)\n        case .warning:\n            defaultBackgroundColor = UIColor(red: 246.0/255.0, green: 197.0/255.0, blue: 44.0/255.0, alpha: 1.0)\n        case .error:\n            defaultBackgroundColor = UIColor(red: 249.0/255.0, green: 66.0/255.0, blue: 47.0/255.0, alpha: 1.0)\n        }\n        if includeHaptic {\n            switch theme {\n            case .success, .info:\n                defaultHaptic = SwiftMessages.Haptic.success\n            case .warning:\n                defaultHaptic = SwiftMessages.Haptic.warning\n            case .error:\n                defaultHaptic = SwiftMessages.Haptic.error\n            }\n        }\n        switch theme {\n        case .info:\n            backgroundColor = UIColor {\n                switch $0.userInterfaceStyle {\n                case .dark, .unspecified: return UIColor(red: 125/255.0, green: 125/255.0, blue: 125/255.0, alpha: 1.0)\n                case .light: fallthrough\n                @unknown default:\n                    return defaultBackgroundColor\n                }\n            }\n            foregroundColor = .label\n        case .success:\n            backgroundColor = UIColor {\n                switch $0.userInterfaceStyle {\n                case .dark, .unspecified: return UIColor(red: 55/255.0, green: 122/255.0, blue: 0/255.0, alpha: 1.0)\n                case .light: fallthrough\n                @unknown default:\n                    return defaultBackgroundColor\n                }\n            }\n            foregroundColor = .white\n        case .warning:\n            backgroundColor = UIColor {\n                switch $0.userInterfaceStyle {\n                case .dark, .unspecified: return UIColor(red: 239/255.0, green: 184/255.0, blue: 10/255.0, alpha: 1.0)\n                case .light: fallthrough\n                @unknown default:\n                    return defaultBackgroundColor\n                }\n            }\n            foregroundColor = .white\n        case .error:\n            backgroundColor = UIColor {\n                switch $0.userInterfaceStyle {\n                case .dark, .unspecified: return UIColor(red: 195/255.0, green: 12/255.0, blue: 12/255.0, alpha: 1.0)\n                case .light: fallthrough\n                @unknown default:\n                    return defaultBackgroundColor\n                }\n            }\n            foregroundColor = .white\n        }\n        configureTheme(backgroundColor: backgroundColor, foregroundColor: foregroundColor, iconImage: iconImage)\n    }\n    \n    /**\n     A convenience function for setting a foreground and background color.\n     Note that images will only display the foreground color if they're\n     configured with UIImageRenderingMode.AlwaysTemplate.\n     \n     - Parameter backgroundColor: The background color to use.\n     - Parameter foregroundColor: The foreground color to use.\n     */\n    public func configureTheme(backgroundColor: UIColor, foregroundColor: UIColor, iconImage: UIImage? = nil, iconText: String? = nil) {\n        iconImageView?.image = iconImage\n        iconLabel?.text = iconText\n        iconImageView?.tintColor = foregroundColor\n        let backgroundView = self.backgroundView ?? self\n        backgroundView.backgroundColor = backgroundColor\n        iconLabel?.textColor = foregroundColor\n        titleLabel?.textColor = foregroundColor\n        bodyLabel?.textColor = foregroundColor\n        button?.backgroundColor = foregroundColor\n        button?.tintColor = backgroundColor\n        button?.contentEdgeInsets = UIEdgeInsets(top: 7.0, left: 7.0, bottom: 7.0, right: 7.0)\n        button?.layer.cornerRadius = 5.0\n        iconImageView?.isHidden = iconImageView?.image == nil\n        iconLabel?.isHidden = iconLabel?.text == nil\n    }\n}\n\n/*\n MARK: - Configuring the content\n \n This extension provides a few convenience functions for configuring the\n message content. You are encouraged to write your own such functions\n if these don't exactly meet your needs.\n \n SwiftMessages does not try to be clever by adjusting the layout based on \n what content you configure. All message elements are optional and it is\n up to you to hide or remove elements you don't need. The easiest way to\n remove unwanted elements is to drag-and-drop one of the included nib\n files into your project as a starting point and make changes.\n */\n\nextension MessageView {\n    \n    /**\n     Sets the message body text.\n     \n     - Parameter body: The message body text to use.\n     */\n    public func configureContent(body: String) {\n        bodyLabel?.text = body\n    }\n    \n    /**\n     Sets the message title and body text.\n     \n     - Parameter title: The message title to use.\n     - Parameter body: The message body text to use.\n     */\n    public func configureContent(title: String, body: String) {\n        configureContent(body: body)\n        titleLabel?.text = title\n    }\n    \n    /**\n     Sets the message title, body text and icon image. Also hides the\n     `iconLabel`.\n     \n     - Parameter title: The message title to use.\n     - Parameter body: The message body text to use.\n     - Parameter iconImage: The icon image to use.\n     */\n    public func configureContent(title: String, body: String, iconImage: UIImage) {\n        configureContent(title: title, body: body)\n        iconImageView?.image = iconImage\n        iconImageView?.isHidden = false\n        iconLabel?.text = nil\n        iconLabel?.isHidden = true\n    }\n    \n    /**\n     Sets the message title, body text and icon text (e.g. an emoji).\n     Also hides the `iconImageView`.\n     \n     - Parameter title: The message title to use.\n     - Parameter body: The message body text to use.\n     - Parameter iconText: The icon text to use (e.g. an emoji).\n     */\n    public func configureContent(title: String, body: String, iconText: String) {\n        configureContent(title: title, body: body)\n        iconLabel?.text = iconText\n        iconLabel?.isHidden = false\n        iconImageView?.isHidden = true\n        iconImageView?.image = nil\n    }\n    \n    /**\n     Sets all configurable elements.\n     \n     - Parameter title: The message title to use.\n     - Parameter body: The message body text to use.\n     - Parameter iconImage: The icon image to use.\n     - Parameter iconText: The icon text to use (e.g. an emoji).\n     - Parameter buttonImage: The button image to use.\n     - Parameter buttonTitle: The button title to use.\n     - Parameter buttonTapHandler: The button tap handler block to use.\n     */\n    public func configureContent(title: String?, body: String?, iconImage: UIImage?, iconText: String?, buttonImage: UIImage?, buttonTitle: String?, buttonTapHandler: ((_ button: UIButton) -> Void)?) {\n        titleLabel?.text = title\n        bodyLabel?.text = body\n        iconImageView?.image = iconImage\n        iconLabel?.text = iconText\n        button?.setImage(buttonImage, for: .normal)\n        button?.setTitle(buttonTitle, for: .normal)\n        self.buttonTapHandler = buttonTapHandler\n        iconImageView?.isHidden = iconImageView?.image == nil\n        iconLabel?.isHidden = iconLabel?.text == nil\n    }\n}\n\n\n"
  },
  {
    "path": "SwiftMessages/MessageViewConvertible.swift",
    "content": "//\n//  MessageViewConvertible.swift\n//  SwiftUIDemo\n//\n//  Created by Timothy Moose on 10/5/23.\n//\n\nimport SwiftUI\n\n@available(iOS 14.0, *)\n/// A protocol used to display a SwiftUI message view using the `swiftMessage()` modifier.\npublic protocol MessageViewConvertible: Equatable, Identifiable {\n    associatedtype Content: View\n    func asMessageView() -> Content\n}\n\n"
  },
  {
    "path": "SwiftMessages/NSBundle+Extensions.swift",
    "content": "//\n//  NSBundle+Extensions.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 8/8/16.\n//  Copyright © 2016 SwiftKick Mobile LLC. All rights reserved.\n//\n\nimport Foundation\n\nprivate class BundleToken {}\n\nextension Bundle {\n    // This is copied method from SPM generated Bundle.module for CocoaPods support\n    static func sm_frameworkBundle() -> Bundle {\n\n        let candidates = [\n            // Bundle should be present here when the package is linked into an App.\n            Bundle.main.resourceURL,\n\n            // Bundle should be present here when the package is linked into a framework.\n            Bundle(for: BundleToken.self).resourceURL,\n\n            // For command-line tools.\n            Bundle.main.bundleURL,\n        ]\n\n        let bundleNames = [\n            // For Swift Package Manager\n            \"SwiftMessages_SwiftMessages\",\n\n            // For Carthage\n            \"SwiftMessages\",\n        ]\n\n        for bundleName in bundleNames {\n            for candidate in candidates {\n                let bundlePath = candidate?.appendingPathComponent(bundleName + \".bundle\")\n                if let bundle = bundlePath.flatMap(Bundle.init(url:)) {\n                    return bundle\n                }\n            }\n        }\n\n        // Return whatever bundle this code is in as a last resort.\n        return Bundle(for: BundleToken.self)\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/NSLayoutConstraint+Extensions.swift",
    "content": "//\n//  NSLayoutConstraint+Extensions.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 5/18/19.\n//  Copyright © 2019 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\n\nextension NSLayoutConstraint {\n    func with(priority: UILayoutPriority) -> NSLayoutConstraint {\n        self.priority = priority\n        return self\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/PassthroughView.swift",
    "content": "//\n//  PassthroughView.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 8/5/16.\n//  Copyright © 2016 SwiftKick Mobile LLC. All rights reserved.\n//\n\nimport UIKit\n\nclass PassthroughView: UIControl {\n\n    var tappedHandler: (() -> Void)?\n\n    override init(frame: CGRect) {\n        super.init(frame: frame)\n        initCommon()\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        initCommon()\n    }\n\n    private func initCommon() {\n        addTarget(self, action: #selector(tapped), for: .touchUpInside)\n    }\n\n    @objc func tapped() {\n        tappedHandler?()\n    }\n    \n    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {\n        let view = super.hitTest(point, with: event)\n        return view == self && tappedHandler == nil ? nil : view\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/PassthroughWindow.swift",
    "content": "//\n//  PassthroughWindow.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 8/5/16.\n//  Copyright © 2016 SwiftKick Mobile LLC. All rights reserved.\n//\n\nimport UIKit\n\nclass PassthroughWindow: UIWindow {\n\n    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {\n        // iOS has started embedding the SwiftMessages view in private views that block\n        // interaction with views underneath, essentially making the window behave like a modal.\n        // To work around this, we'll ignore hit test results on these views.\n        let view = super.hitTest(point, with: event)\n        if let view = view,\n            let hitTestView = hitTestView,\n            hitTestView.isDescendant(of: view) && hitTestView != view {\n            return nil\n        }\n        return view\n    }\n\n    init(hitTestView: UIView) {\n        self.hitTestView = hitTestView\n        super.init(frame: .zero)\n    }\n    \n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    private weak var hitTestView: UIView?\n}\n"
  },
  {
    "path": "SwiftMessages/PhysicsAnimation.swift",
    "content": "//\n//  PhysicsAnimation.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 6/14/17.\n//  Copyright © 2017 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\n\n@MainActor\npublic class PhysicsAnimation: NSObject, Animator {\n\n    public enum Placement {\n        case top\n        case center\n        case bottom\n    }\n\n    open var placement: Placement = .center\n\n    open var showDuration: TimeInterval = 0.5\n\n    open var hideDuration: TimeInterval = 0.15\n\n    public var panHandler = PhysicsPanHandler()\n\n    public weak var delegate: AnimationDelegate?\n    weak var messageView: UIView?\n    weak var containerView: UIView?\n    var context: AnimationContext?\n\n    public override init() {}\n\n    init(delegate: AnimationDelegate) {\n        self.delegate = delegate\n    }\n\n    public func show(context: AnimationContext, completion: @escaping AnimationCompletion) {\n        NotificationCenter.default.addObserver(\n            self,\n            selector: #selector(adjustMargins),\n            name: UIDevice.orientationDidChangeNotification,\n            object: nil\n        )\n        install(context: context)\n        showAnimation(context: context, completion: completion)\n    }\n\n    public func hide(context: AnimationContext, completion: @escaping AnimationCompletion) {\n        NotificationCenter.default.removeObserver(self)\n        if panHandler.isOffScreen {\n            context.messageView.alpha = 0\n            panHandler.state?.stop()\n        }\n        let view = context.messageView\n        self.context = context\n        CATransaction.begin()\n        CATransaction.setCompletionBlock {\n            view.alpha = 1\n            view.transform = CGAffineTransform.identity\n            completion(true)\n        }\n        UIView.animate(\n            withDuration: hideDuration,\n            delay: 0,\n            options: [.beginFromCurrentState, .curveEaseIn, .allowUserInteraction], \n            animations: {\n                view.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)\n            }, \n            completion: nil\n        )\n        UIView.animate(\n            withDuration: hideDuration,\n            delay: 0,\n            options: [.beginFromCurrentState, .curveEaseIn, .allowUserInteraction],\n            animations: {\n                view.alpha = 0\n            },\n            completion: nil\n        )\n        CATransaction.commit()\n    }\n\n    func install(context: AnimationContext) {\n        let view = context.messageView\n        let container = context.containerView\n        messageView = view\n        containerView = container\n        self.context = context\n        view.translatesAutoresizingMaskIntoConstraints = false\n        container.addSubview(view)\n        switch placement {\n        case .center:\n            view.centerYAnchor.constraint(\n                equalTo: container.centerYAnchor\n            )\n            .with(priority: UILayoutPriority(200))\n            .isActive = true\n        case .top:\n            view.topAnchor.constraint(\n                equalTo: container.topAnchor\n            )\n            .with(priority: UILayoutPriority(200))\n            .isActive = true\n        case .bottom:\n            view.bottomAnchor.constraint(\n                equalTo: container.bottomAnchor\n            )\n            .with(priority: UILayoutPriority(200))\n            .isActive = true\n        }\n        NSLayoutConstraint.activate([\n            view.leadingAnchor.constraint(equalTo: container.leadingAnchor),\n            view.trailingAnchor.constraint(equalTo: container.trailingAnchor),\n            // Don't allow the message to spill outside of the top or bottom of the container.\n            view.topAnchor.constraint(greaterThanOrEqualTo: container.topAnchor),\n            view.bottomAnchor.constraint(lessThanOrEqualTo: container.bottomAnchor),\n        ])\n        // Important to layout now in order to get the right safe area insets\n        container.layoutIfNeeded()\n        adjustMargins()\n        container.layoutIfNeeded()\n        installInteractive(context: context)\n    }\n\n    @objc public func adjustMargins() {\n        guard let adjustable = messageView as? MarginAdjustable & UIView,\n            let context = context else { return }\n        adjustable.preservesSuperviewLayoutMargins = false\n        adjustable.insetsLayoutMarginsFromSafeArea = false\n        adjustable.layoutMargins = adjustable.defaultMarginAdjustment(context: context)\n    }\n\n    func showAnimation(context: AnimationContext, completion: @escaping AnimationCompletion) {\n        let view = context.messageView\n        view.alpha = 0.25\n        view.transform = CGAffineTransform(scaleX: 0.6, y: 0.6)\n        CATransaction.begin()\n        CATransaction.setCompletionBlock {\n            completion(true)\n        }\n        UIView.animate(withDuration: showDuration, delay: 0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0, options: [.beginFromCurrentState, .curveLinear, .allowUserInteraction], animations: {\n            view.transform = CGAffineTransform.identity\n        }, completion: nil)\n        UIView.animate(withDuration: 0.3 * showDuration, delay: 0, options: [.beginFromCurrentState, .curveLinear, .allowUserInteraction], animations: {\n            view.alpha = 1\n        }, completion: nil)\n        CATransaction.commit()\n    }\n\n    func installInteractive(context: AnimationContext) {\n        guard context.interactiveHide else { return }\n        panHandler.configure(context: context, animator: self)\n    }\n}\n\n\n"
  },
  {
    "path": "SwiftMessages/PhysicsPanHandler.swift",
    "content": "//\n//  PhysicsPanHandler.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 6/25/17.\n//  Copyright © 2017 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\n\n@MainActor\nopen class PhysicsPanHandler {\n\n    public var hideDelay: TimeInterval = 0.2\n\n    public struct MotionSnapshot {\n        var angle: CGFloat\n        var time: CFAbsoluteTime\n    }\n\n    @MainActor\n    public final class State {\n\n        weak var messageView: UIView?\n        weak var containerView: UIView?\n        var dynamicAnimator: UIDynamicAnimator\n        var itemBehavior: UIDynamicItemBehavior\n        var attachmentBehavior: UIAttachmentBehavior? {\n            didSet {\n                if let oldValue = oldValue {\n                    dynamicAnimator.removeBehavior(oldValue)\n                }\n                if let attachmentBehavior = attachmentBehavior {\n                    dynamicAnimator.addBehavior(attachmentBehavior)\n                    addSnapshot()\n                }\n            }\n        }\n        var snapshots: [MotionSnapshot] = []\n\n        public init(messageView: UIView, containerView: UIView) {\n            self.messageView = messageView\n            self.containerView = containerView\n            let dynamicAnimator = UIDynamicAnimator(referenceView: containerView)\n            let itemBehavior = UIDynamicItemBehavior(items: [messageView])\n            itemBehavior.allowsRotation = true\n            dynamicAnimator.addBehavior(itemBehavior)\n            self.itemBehavior = itemBehavior\n            self.dynamicAnimator = dynamicAnimator\n        }\n\n        func update(attachmentAnchorPoint anchorPoint: CGPoint) {\n            addSnapshot()\n            attachmentBehavior?.anchorPoint = anchorPoint\n        }\n\n        func addSnapshot() {\n            let angle = messageView?.angle ?? snapshots.last?.angle ?? 0\n            let time = CFAbsoluteTimeGetCurrent()\n            snapshots.append(MotionSnapshot(angle: angle, time: time))\n        }\n\n        public func stop() {\n            guard let messageView = messageView else {\n                dynamicAnimator.removeAllBehaviors()\n                return\n            }\n            let center = messageView.center\n            let transform = messageView.transform\n            dynamicAnimator.removeAllBehaviors()\n            messageView.center = center\n            messageView.transform = transform\n        }\n\n        public var angularVelocity: CGFloat {\n            guard let last = snapshots.last else { return 0 }\n            for previous in snapshots.reversed() {\n                // Ignore snapshots where the angle or time hasn't changed to avoid degenerate cases.\n                if previous.angle != last.angle && previous.time != last.time {\n                    return (last.angle - previous.angle) / CGFloat(last.time - previous.time)\n                }\n            }\n            return 0\n        }\n    }\n\n    weak var animator: Animator?\n    weak var messageView: UIView?\n    weak var containerView: UIView?\n    private(set) public var state: State?\n    private(set) public var isOffScreen = false\n    private var restingCenter: CGPoint?\n\n    public init() {}\n\n    public private(set) lazy var pan: UIPanGestureRecognizer = {\n        let pan = UIPanGestureRecognizer()\n        pan.addTarget(self, action: #selector(pan(_:)))\n        return pan\n    }()\n\n    public func configure(context: AnimationContext, animator: Animator) {\n        if let oldView = (messageView as? BackgroundViewable)?.backgroundView ?? messageView {\n            oldView.removeGestureRecognizer(pan)\n        }\n        messageView = context.messageView\n        let view = (messageView as? BackgroundViewable)?.backgroundView ?? messageView\n        view?.addGestureRecognizer(pan)\n        containerView = context.containerView\n        self.animator = animator\n    }\n\n    @objc func pan(_ pan: UIPanGestureRecognizer) {\n        guard let messageView = messageView, let containerView = containerView, let animator = animator else { return }\n        let anchorPoint = pan.location(in: containerView)\n        switch pan.state {\n        case .began:\n            animator.delegate?.panStarted(animator: animator)\n            let state = State(messageView: messageView, containerView: containerView)\n            self.state = state\n            let center = messageView.center\n            restingCenter = center\n            let offset = UIOffset(horizontal: anchorPoint.x - center.x, vertical: anchorPoint.y - center.y)\n            let attachmentBehavior = UIAttachmentBehavior(item: messageView, offsetFromCenter: offset, attachedToAnchor: anchorPoint)\n            state.attachmentBehavior = attachmentBehavior\n            state.itemBehavior.action = { [weak self, weak messageView, weak containerView] in\n                guard let self = self, !self.isOffScreen, let messageView = messageView, let containerView = containerView, let animator = self.animator else { return }\n                let view = (messageView as? BackgroundViewable)?.backgroundView ?? messageView\n                let frame = containerView.convert(view.bounds, from: view)\n                if !containerView.bounds.intersects(frame) {\n                    self.isOffScreen = true\n                    Task {\n                        try? await Task.sleep(seconds: self.hideDelay)\n                        animator.delegate?.hide(animator: animator)\n                    }\n                }\n            }\n        case .changed:\n            guard let state = state else { return }\n            state.update(attachmentAnchorPoint: anchorPoint)\n        case .ended, .cancelled:\n            guard let state = state else { return }\n            state.update(attachmentAnchorPoint: anchorPoint)\n            let velocity = pan.velocity(in: containerView)\n            let angularVelocity = state.angularVelocity\n            let speed = sqrt(pow(velocity.x, 2) + pow(velocity.y, 2))\n            // The multiplier on angular velocity was determined by hand-tuning\n            let energy = sqrt(pow(speed, 2) + pow(angularVelocity * 75, 2))\n            if energy > 200 && speed > 600 {\n                // Limit the speed and angular velocity to reasonable values\n                let speedScale = speed > 0 ? min(1, 1800 / speed) : 1\n                let escapeVelocity = CGPoint(x: velocity.x * speedScale, y: velocity.y * speedScale)\n                let angularSpeedScale = min(1, 10 / abs(angularVelocity))\n                let escapeAngularVelocity = angularVelocity * angularSpeedScale\n                state.itemBehavior.addLinearVelocity(escapeVelocity, for: messageView)\n                state.itemBehavior.addAngularVelocity(escapeAngularVelocity, for: messageView)\n                state.attachmentBehavior = nil\n            } else {\n                state.stop()\n                self.state = nil\n                animator.delegate?.panEnded(animator: animator)\n                UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.65, initialSpringVelocity: 0, options: .beginFromCurrentState, animations: {\n                    messageView.center = self.restingCenter ?? CGPoint(x: containerView.bounds.width / 2, y: containerView.bounds.height / 2)\n                    messageView.transform = CGAffineTransform.identity\n                }, completion: nil)\n            }\n        default:\n            break\n        }\n    }\n}\n\nextension UIView {\n    var angle: CGFloat {\n        // http://stackoverflow.com/a/2051861/1271826\n        return atan2(transform.b, transform.a)\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/Presenter.swift",
    "content": "//\n//  MessagePresenter.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 7/30/16.\n//  Copyright © 2016 SwiftKick Mobile LLC. All rights reserved.\n//\n\nimport UIKit\n\n@MainActor\nprotocol PresenterDelegate: AnimationDelegate {\n    func hide(presenter: Presenter)\n}\n\n@MainActor\nclass Presenter: NSObject {\n    \n    // MARK: - API\n\n    init(config: SwiftMessages.Config, view: UIView, delegate: PresenterDelegate) {\n        self.config = config\n        self.view = view\n        self.delegate = delegate\n        self.animator = Presenter.animator(forPresentationStyle: config.presentationStyle, delegate: delegate)\n        if let identifiable = view as? Identifiable {\n            id = identifiable.id\n        } else {\n            var mutableView = view\n            id = withUnsafePointer(to: &mutableView) { \"\\($0)\" }\n        }\n\n        super.init()\n    }\n    \n    var id: String\n    var config: SwiftMessages.Config\n    let maskingView = MaskingView()\n    let animator: Animator\n    var isHiding = false\n    let view: UIView\n\n    var delayShow: TimeInterval? {\n        if case .indefinite(let delay, _) = config.duration { return delay }\n        return nil\n    }\n\n    var showDate: CFTimeInterval?\n\n    /// Returns the required delay for hiding based on time shown\n    var delayHide: TimeInterval? {\n        if interactivelyHidden { return 0 }\n        if case .indefinite(_, let minimum) = config.duration, let showDate = showDate {\n            let timeIntervalShown = CACurrentMediaTime() - showDate\n            return max(0, minimum - timeIntervalShown)\n        }\n        return nil\n    }\n\n    var pauseDuration: TimeInterval? {\n        let duration: TimeInterval?\n        switch self.config.duration {\n        case .automatic:\n            duration = 2\n        case .seconds(let seconds):\n            duration = seconds\n        case .forever, .indefinite:\n            duration = nil\n        }\n        return duration\n    }\n\n    /// Detects the scenario where the view was shown, but the containing view heirarchy was removed before the view\n    /// was hidden. This unusual scenario could result in the message queue being blocked because the presented\n    /// view was not properly hidden by SwiftMessages. `isOrphaned` allows the queuing logic to unblock the queue.\n    var isOrphaned: Bool {\n        return installed && view.window == nil\n    }\n\n    // MARK: - Constants\n\n    @MainActor\n    enum PresentationContext {\n        case viewController(_: Weak<UIViewController>)\n        case view(_: Weak<UIView>)\n        \n        func viewControllerValue() -> UIViewController? {\n            switch self {\n            case .viewController(let weak):\n                return weak.value\n            case .view:\n                return nil\n            }\n        }\n        \n        func viewValue() -> UIView? {\n            switch self {\n            case .viewController(let weak):\n                return weak.value?.view\n            case .view(let weak):\n                return weak.value\n            }\n        }\n    }\n\n    // MARK: - Variables\n\n    private weak var delegate: PresenterDelegate?\n    private var presentationContext = PresentationContext.viewController(Weak<UIViewController>(value: nil))\n    private var installed = false\n    private var interactivelyHidden = false;\n\n    // MARK: - Showing and hiding\n\n    private static func animator(forPresentationStyle style: SwiftMessages.PresentationStyle, delegate: AnimationDelegate) -> Animator {\n        switch style {\n        case .top:\n            return TopBottomAnimation(style: .top, delegate: delegate)\n        case .bottom:\n            return TopBottomAnimation(style: .bottom, delegate: delegate)\n        case .center:\n            return PhysicsAnimation(delegate: delegate)\n        case .custom(let animator):\n            animator.delegate = delegate\n            return animator\n        }\n    }\n\n    func show(completion: @escaping AnimationCompletion) throws {\n        try presentationContext = getPresentationContext()\n        install()\n        self.config.eventListeners.forEach { $0(.willShow(self.view)) }\n        switch (self.view as? HapticMessage)?.defaultHaptic ?? config.haptic {\n        case .error?: UINotificationFeedbackGenerator().notificationOccurred(.error)\n        case .warning?: UINotificationFeedbackGenerator().notificationOccurred(.warning)\n        case .success?: UINotificationFeedbackGenerator().notificationOccurred(.success)\n        default: break\n        }\n        showAnimation() { completed in\n            completion(completed)\n            if completed {\n                if self.config.dimMode.modal {\n                    self.showAccessibilityFocus()\n                } else {\n                    self.showAccessibilityAnnouncement()\n                }\n                self.config.eventListeners.forEach { $0(.didShow(self.view)) }\n            }\n        }\n    }\n\n    private func showAnimation(completion: @escaping AnimationCompletion) {\n\n        func dim(_ color: UIColor) {\n            self.maskingView.backgroundColor = UIColor.clear\n            UIView.animate(withDuration: 0.2, animations: {\n                self.maskingView.backgroundColor = color\n            })\n        }\n\n        func blur(style: UIBlurEffect.Style, alpha: CGFloat) {\n            let blurView = UIVisualEffectView(effect: nil)\n            blurView.alpha = alpha\n            maskingView.backgroundView = blurView\n            UIView.animate(withDuration: 0.3) {\n                blurView.effect = UIBlurEffect(style: style)\n            }\n        }\n\n        let context = animationContext()\n        animator.show(context: context) { (completed) in\n            completion(completed)\n        }\n        switch config.dimMode {\n        case .none:\n            break\n        case .gray:\n            dim(UIColor(white: 0, alpha: 0.3))\n        case .color(let color, _):\n            dim(color)\n        case .blur(let style, let alpha, _):\n            blur(style: style, alpha: alpha)\n        }\n    }\n\n    private func showAccessibilityAnnouncement() {\n        guard let accessibleMessage = view as? AccessibleMessage,\n            let message = accessibleMessage.accessibilityMessage else { return }\n        UIAccessibility.post(notification: UIAccessibility.Notification.announcement, argument: message)\n    }\n\n    private func showAccessibilityFocus() {\n        guard let accessibleMessage = view as? AccessibleMessage,\n            let focus = accessibleMessage.accessibilityElement ?? accessibleMessage.additionalAccessibilityElements?.first else { return }\n        UIAccessibility.post(notification: UIAccessibility.Notification.layoutChanged, argument: focus)\n    }\n\n    func hide(animated: Bool, completion: @escaping AnimationCompletion) {\n        isHiding = true\n        self.config.eventListeners.forEach { $0(.willHide(self.view)) }\n        let context = animationContext()\n        let action = {\n            if let viewController = self.presentationContext.viewControllerValue() as? WindowViewController {\n                viewController.uninstall()\n            }\n            self.maskingView.removeFromSuperview()\n            completion(true)\n            self.config.eventListeners.forEach { $0(.didHide(self.view)) }\n        }\n        guard animated else {\n            action()\n            return\n        }\n        animator.hide(context: context) { (completed) in\n            action()\n        }\n\n        func undim() {\n            UIView.animate(withDuration: 0.2, delay: 0, options: .beginFromCurrentState, animations: {\n                self.maskingView.backgroundColor = UIColor.clear\n            }, completion: nil)\n        }\n\n        func unblur() {\n            guard let view = maskingView.backgroundView as? UIVisualEffectView else { return }\n            UIView.animate(withDuration: 0.2, delay: 0, options: .beginFromCurrentState, animations: { \n                view.effect = nil\n            }, completion: nil)\n        }\n        \n        switch config.dimMode {\n        case .none:\n            break\n        case .gray:\n            undim()\n        case .color:\n            undim()\n        case .blur:\n            unblur()\n        }\n    }\n\n    private func animationContext() -> AnimationContext {\n        return AnimationContext(messageView: view, containerView: maskingView, safeZoneConflicts: safeZoneConflicts(), interactiveHide: config.interactiveHide)\n    }\n\n    private func safeZoneConflicts() -> SafeZoneConflicts {\n        guard let _ = maskingView.window else { return [] }\n        let windowLevel: UIWindow.Level = {\n            if let vc = presentationContext.viewControllerValue() as? WindowViewController {\n                return vc.config.windowLevel ?? .normal\n            }\n            return .normal\n        }()\n        // TODO `underNavigationBar` and `underTabBar` should look up the presentation context's hierarchy\n        // TODO for cases where both should be true (probably not an issue for typical height messages, though).\n        let underNavigationBar: Bool = {\n            if let vc = presentationContext.viewControllerValue() as? UINavigationController { return vc.sm_isVisible(view: vc.navigationBar) }\n            return false\n        }()\n        let underTabBar: Bool = {\n            if let vc = presentationContext.viewControllerValue() as? UITabBarController { return vc.sm_isVisible(view: vc.tabBar) }\n            return false\n        }()\n        if windowLevel > .normal {\n            // TODO seeing `maskingView.safeAreaInsets.top` value of 20 on\n            // iPhone 8 with status bar window level. This seems like an iOS bug since\n            // the message view's window is above the status bar. Applying a special rule\n            // to allow the animator to revove this amount from the layout margins if needed.\n            // This may need to be reworked if any future device has a legitimate 20pt top safe area,\n            // such as with a potentially smaller notch.\n            if maskingView.safeAreaInsets.top == 20 {\n                return [.overStatusBar]\n            } else {\n                var conflicts: SafeZoneConflicts = []\n                if maskingView.safeAreaInsets.top > 0 {\n                    conflicts.formUnion(.sensorNotch)\n                }\n                if maskingView.safeAreaInsets.bottom > 0 {\n                    conflicts.formUnion(.homeIndicator)\n                }\n                return conflicts\n            }\n        }\n        var conflicts: SafeZoneConflicts = []\n        if !underNavigationBar {\n            conflicts.formUnion(.sensorNotch)\n        }\n        if !underTabBar {\n            conflicts.formUnion(.homeIndicator)\n        }\n        return conflicts\n    }\n\n    private func getPresentationContext() throws -> PresentationContext {\n\n        func newWindowViewController() -> UIViewController {\n            let viewController = WindowViewController.newInstance(config: config)\n            return viewController\n        }\n\n        switch config.presentationContext {\n        case .automatic:\n            #if SWIFTMESSAGES_APP_EXTENSIONS\n            throw SwiftMessagesError.noRootViewController\n            #else\n            if let rootViewController = UIWindow.keyWindow?.rootViewController {\n                let viewController = rootViewController.sm_selectPresentationContextTopDown(config)\n                return .viewController(Weak(value: viewController))\n            } else {\n                throw SwiftMessagesError.noRootViewController\n            }\n            #endif\n        case .window:\n            let viewController = newWindowViewController()\n            return .viewController(Weak(value: viewController))\n        case .windowScene:\n            let viewController = newWindowViewController()\n            return .viewController(Weak(value: viewController))\n        case .viewController(let viewController):\n            let viewController = viewController.sm_selectPresentationContextBottomUp(config)\n            return .viewController(Weak(value: viewController))\n        case .view(let view):\n            return .view(Weak(value: view))\n        }\n    }\n\n    /*\n     MARK: - Installation\n     */\n\n    func install() {\n\n        func topLayoutConstraint(view: UIView, containerView: UIView, viewController: UIViewController?) -> NSLayoutConstraint {\n            if case .top = config.presentationStyle.topBottomStyle, let nav = viewController as? UINavigationController, nav.sm_isVisible(view: nav.navigationBar) {\n                return NSLayoutConstraint(item: view, attribute: .top, relatedBy: .equal, toItem: nav.navigationBar, attribute: .bottom, multiplier: 1.00, constant: 0.0)\n            }\n            return NSLayoutConstraint(item: view, attribute: .top, relatedBy: .equal, toItem: containerView, attribute: .top, multiplier: 1.00, constant: 0.0)\n        }\n\n        func bottomLayoutConstraint(view: UIView, containerView: UIView, viewController: UIViewController?) -> NSLayoutConstraint {\n            if case .bottom = config.presentationStyle.topBottomStyle, let tab = viewController as? UITabBarController, tab.sm_isVisible(view: tab.tabBar), tab.tabBar.superview != nil, !tab.tabBar.frame.isEmpty {\n                return NSLayoutConstraint(item: view, attribute: .bottom, relatedBy: .equal, toItem: tab.tabBar, attribute: .top, multiplier: 1.00, constant: 0.0)\n            }\n            return NSLayoutConstraint(item: view, attribute: .bottom, relatedBy: .equal, toItem: containerView, attribute: .bottom, multiplier: 1.00, constant: 0.0)\n        }\n\n        func installMaskingView(containerView: UIView) {\n            maskingView.translatesAutoresizingMaskIntoConstraints = false\n            if let nav = presentationContext.viewControllerValue() as? UINavigationController {\n                containerView.insertSubview(maskingView, belowSubview: nav.navigationBar)\n            } else if let tab = presentationContext.viewControllerValue() as? UITabBarController {\n                containerView.insertSubview(maskingView, belowSubview: tab.tabBar)\n            } else {\n                containerView.addSubview(maskingView)\n            }\n            maskingView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor).isActive = true\n            maskingView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor).isActive = true\n            topLayoutConstraint(view: maskingView, containerView: containerView, viewController: presentationContext.viewControllerValue()).isActive = true\n            bottomLayoutConstraint(view: maskingView, containerView: containerView, viewController: presentationContext.viewControllerValue()).isActive = true\n            if let keyboardTrackingView = config.keyboardTrackingView {\n                maskingView.install(keyboardTrackingView: keyboardTrackingView)\n            }\n            // Update the container view's layout in order to know the masking view's frame\n            containerView.layoutIfNeeded()\n        }\n\n        func installInteractive() {\n            guard config.dimMode.modal else { return }\n            if config.dimMode.interactive {\n                maskingView.tappedHandler = { [weak self] in\n                    guard let strongSelf = self else { return }\n                    strongSelf.interactivelyHidden = true\n                    strongSelf.delegate?.hide(presenter: strongSelf)\n                }\n            } else {\n                // There's no action to take, but the presence of\n                // a tap handler prevents interaction with underlying views.\n                maskingView.tappedHandler = { }\n            }\n        }\n\n        func installAccessibility() {\n            var elements: [NSObject] = []\n            if let accessibleMessage = view as? AccessibleMessage {\n                if let message = accessibleMessage.accessibilityMessage {\n                    let element = accessibleMessage.accessibilityElement ?? view\n                    element.isAccessibilityElement = true\n                    if element.accessibilityLabel == nil {\n                        element.accessibilityLabel = message\n                    }\n                    elements.append(element)\n                }\n                if let additional = accessibleMessage.additionalAccessibilityElements {\n                    elements += additional\n                }\n            } else {\n                    elements += [view]\n            }\n            if config.dimMode.interactive {\n                let dismissView = maskingViewOverlay()\n                dismissView.accessibilityLabel = config.dimModeAccessibilityLabel\n                dismissView.accessibilityTraits = UIAccessibilityTraits.button\n                elements.append(dismissView)\n            } else if config.dimMode.modal {\n                let plainView = maskingViewOverlay()\n                plainView.accessibilityTraits = UIAccessibilityTraits.none\n                elements.append(plainView)\n            }\n            if config.dimMode.modal {\n                maskingView.accessibilityViewIsModal = true\n            }\n            maskingView.accessibleElements = elements\n        }\n        \n        func maskingViewOverlay() -> UIView {\n            let overlayView = UIView(frame: maskingView.bounds)\n            overlayView.translatesAutoresizingMaskIntoConstraints = true\n            overlayView.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n            maskingView.addSubview(overlayView)\n            maskingView.sendSubviewToBack(overlayView)\n            overlayView.isUserInteractionEnabled = false\n            overlayView.isAccessibilityElement = true\n            \n            return overlayView\n        }\n\n        installed = true\n        guard let containerView = presentationContext.viewValue() else { return }\n        (presentationContext.viewControllerValue() as? WindowViewController)?.install()\n        installMaskingView(containerView: containerView)\n        installInteractive()\n        installAccessibility()\n    }\n}\n\n\n"
  },
  {
    "path": "SwiftMessages/Resources/CardView.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"17506\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina6_1\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"17505\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"uEa-1P-F1Y\" userLabel=\"Card View\" customClass=\"MessageView\" customModule=\"SwiftMessages\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"510\" height=\"160\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"A7b-0a-fJG\" userLabel=\"Corner rounding view\" customClass=\"CornerRoundingView\" customModule=\"SwiftMessages\">\n                    <rect key=\"frame\" x=\"20\" y=\"44\" width=\"470\" height=\"82\"/>\n                    <subviews>\n                        <stackView opaque=\"NO\" contentMode=\"scaleToFill\" alignment=\"center\" spacing=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"SU0-uJ-4pP\" userLabel=\"Content view\">\n                            <rect key=\"frame\" x=\"20\" y=\"20\" width=\"430\" height=\"42\"/>\n                            <subviews>\n                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"252\" verticalHuggingPriority=\"251\" horizontalCompressionResistancePriority=\"752\" text=\"😬\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"T1i-ce-9y8\" userLabel=\"Icon label\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"43\" height=\"42\"/>\n                                    <accessibility key=\"accessibilityConfiguration\">\n                                        <bool key=\"isElement\" value=\"NO\"/>\n                                    </accessibility>\n                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"38\"/>\n                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                                <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"center\" horizontalHuggingPriority=\"252\" verticalHuggingPriority=\"251\" horizontalCompressionResistancePriority=\"752\" image=\"errorIcon\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"RxA-tv-YM7\" userLabel=\"Icon image view\">\n                                    <rect key=\"frame\" x=\"53\" y=\"4\" width=\"33\" height=\"34\"/>\n                                </imageView>\n                                <stackView opaque=\"NO\" contentMode=\"scaleToFill\" axis=\"vertical\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"i9r-ex-CgT\">\n                                    <rect key=\"frame\" x=\"96\" y=\"2\" width=\"267\" height=\"38.5\"/>\n                                    <subviews>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"751\" text=\"[Title]\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8HR-oh-U9F\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"267\" height=\"20.5\"/>\n                                            <accessibility key=\"accessibilityConfiguration\">\n                                                <bool key=\"isElement\" value=\"NO\"/>\n                                            </accessibility>\n                                            <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleHeadline\"/>\n                                            <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"[Message Body]\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"9oc-qg-igL\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"20.5\" width=\"267\" height=\"18\"/>\n                                            <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                            <accessibility key=\"accessibilityConfiguration\">\n                                                <bool key=\"isElement\" value=\"NO\"/>\n                                            </accessibility>\n                                            <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleSubhead\"/>\n                                            <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                    </subviews>\n                                    <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                </stackView>\n                                <button opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"252\" horizontalCompressionResistancePriority=\"752\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"CxK-Y3-nSI\">\n                                    <rect key=\"frame\" x=\"373\" y=\"6\" width=\"57\" height=\"30\"/>\n                                    <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleSubhead\"/>\n                                    <state key=\"normal\" title=\"[Button]\"/>\n                                </button>\n                            </subviews>\n                            <variation key=\"widthClass=regular\" spacing=\"15\"/>\n                        </stackView>\n                    </subviews>\n                    <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"trailing\" secondItem=\"SU0-uJ-4pP\" secondAttribute=\"trailing\" constant=\"20\" id=\"QN2-NH-rWA\"/>\n                        <constraint firstItem=\"SU0-uJ-4pP\" firstAttribute=\"top\" secondItem=\"A7b-0a-fJG\" secondAttribute=\"top\" constant=\"20\" id=\"S9l-zM-0wc\"/>\n                        <constraint firstAttribute=\"bottom\" secondItem=\"SU0-uJ-4pP\" secondAttribute=\"bottom\" constant=\"20\" id=\"YMg-LN-n7f\"/>\n                        <constraint firstAttribute=\"width\" relation=\"lessThanOrEqual\" priority=\"900\" constant=\"500\" id=\"lOa-jP-2uX\"/>\n                        <constraint firstItem=\"SU0-uJ-4pP\" firstAttribute=\"leading\" secondItem=\"A7b-0a-fJG\" secondAttribute=\"leading\" constant=\"20\" id=\"nYJ-Ok-uhC\"/>\n                    </constraints>\n                    <userDefinedRuntimeAttributes>\n                        <userDefinedRuntimeAttribute type=\"number\" keyPath=\"cornerRadius\">\n                            <real key=\"value\" value=\"15\"/>\n                        </userDefinedRuntimeAttribute>\n                    </userDefinedRuntimeAttributes>\n                    <variation key=\"default\">\n                        <mask key=\"constraints\">\n                            <exclude reference=\"lOa-jP-2uX\"/>\n                        </mask>\n                    </variation>\n                    <variation key=\"widthClass=regular\">\n                        <mask key=\"constraints\">\n                            <include reference=\"lOa-jP-2uX\"/>\n                        </mask>\n                    </variation>\n                </view>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <constraints>\n                <constraint firstItem=\"A7b-0a-fJG\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"uEa-1P-F1Y\" secondAttribute=\"leadingMargin\" priority=\"900\" id=\"LWV-wo-Jec\"/>\n                <constraint firstAttribute=\"trailingMargin\" secondItem=\"A7b-0a-fJG\" secondAttribute=\"trailing\" priority=\"900\" id=\"O6e-Yz-cwK\"/>\n                <constraint firstItem=\"A7b-0a-fJG\" firstAttribute=\"leading\" secondItem=\"uEa-1P-F1Y\" secondAttribute=\"leadingMargin\" priority=\"900\" id=\"RiR-2q-ZY5\"/>\n                <constraint firstItem=\"A7b-0a-fJG\" firstAttribute=\"centerX\" secondItem=\"uEa-1P-F1Y\" secondAttribute=\"centerX\" priority=\"950\" id=\"jLv-ud-1WD\"/>\n                <constraint firstAttribute=\"trailingMargin\" relation=\"greaterThanOrEqual\" secondItem=\"A7b-0a-fJG\" secondAttribute=\"trailing\" priority=\"900\" id=\"lGg-Ey-I5f\"/>\n                <constraint firstItem=\"A7b-0a-fJG\" firstAttribute=\"top\" secondItem=\"uEa-1P-F1Y\" secondAttribute=\"topMargin\" id=\"yAH-C4-oUg\"/>\n                <constraint firstAttribute=\"bottomMargin\" secondItem=\"A7b-0a-fJG\" secondAttribute=\"bottom\" id=\"ygs-aa-zj3\"/>\n            </constraints>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n            <userDefinedRuntimeAttributes>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"bounceAnimationOffset\">\n                    <real key=\"value\" value=\"0.0\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"topLayoutMarginAddition\">\n                    <real key=\"value\" value=\"10\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"leftLayoutMarginAddition\">\n                    <real key=\"value\" value=\"10\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"bottomLayoutMarginAddition\">\n                    <real key=\"value\" value=\"10\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"rightLayoutMarginAddition\">\n                    <real key=\"value\" value=\"10\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"collapseLayoutMarginAdditions\" value=\"YES\"/>\n            </userDefinedRuntimeAttributes>\n            <variation key=\"default\">\n                <mask key=\"constraints\">\n                    <exclude reference=\"LWV-wo-Jec\"/>\n                    <exclude reference=\"lGg-Ey-I5f\"/>\n                </mask>\n            </variation>\n            <variation key=\"widthClass=regular\">\n                <mask key=\"constraints\">\n                    <include reference=\"LWV-wo-Jec\"/>\n                    <exclude reference=\"O6e-Yz-cwK\"/>\n                    <exclude reference=\"RiR-2q-ZY5\"/>\n                    <include reference=\"lGg-Ey-I5f\"/>\n                </mask>\n            </variation>\n            <connections>\n                <outlet property=\"backgroundView\" destination=\"A7b-0a-fJG\" id=\"R1k-6D-zIA\"/>\n                <outlet property=\"bodyLabel\" destination=\"9oc-qg-igL\" id=\"ebS-73-kbp\"/>\n                <outlet property=\"button\" destination=\"CxK-Y3-nSI\" id=\"csj-uy-rHl\"/>\n                <outlet property=\"iconImageView\" destination=\"RxA-tv-YM7\" id=\"w6j-4o-RnC\"/>\n                <outlet property=\"iconLabel\" destination=\"T1i-ce-9y8\" id=\"XiD-0J-kdm\"/>\n                <outlet property=\"titleLabel\" destination=\"8HR-oh-U9F\" id=\"Zbb-wl-ubV\"/>\n            </connections>\n            <point key=\"canvasLocation\" x=\"510.35156249999994\" y=\"386.96925329428984\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"errorIcon\" width=\"33\" height=\"34\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "SwiftMessages/Resources/CenteredView.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"17506\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina6_1\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"17505\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"g5x-hF-D0u\" userLabel=\"Centered View\" customClass=\"MessageView\" customModule=\"SwiftMessages\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"434\" height=\"272\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"0Mj-jC-BX6\" userLabel=\"Background view\" customClass=\"CornerRoundingView\" customModule=\"SwiftMessages\">\n                    <rect key=\"frame\" x=\"20\" y=\"44\" width=\"394\" height=\"194\"/>\n                    <subviews>\n                        <stackView opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"700\" axis=\"vertical\" alignment=\"center\" spacing=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"YST-yc-0HK\" userLabel=\"Content view\">\n                            <rect key=\"frame\" x=\"20\" y=\"20\" width=\"354\" height=\"154\"/>\n                            <subviews>\n                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"700\" verticalHuggingPriority=\"251\" horizontalCompressionResistancePriority=\"752\" verticalCompressionResistancePriority=\"753\" text=\"😬\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"elb-HW-olH\" userLabel=\"Icon label\">\n                                    <rect key=\"frame\" x=\"155.5\" y=\"0.0\" width=\"43\" height=\"45.5\"/>\n                                    <accessibility key=\"accessibilityConfiguration\">\n                                        <bool key=\"isElement\" value=\"NO\"/>\n                                    </accessibility>\n                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"38\"/>\n                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                                <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"center\" horizontalHuggingPriority=\"700\" verticalHuggingPriority=\"251\" horizontalCompressionResistancePriority=\"752\" image=\"errorIcon\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"hUK-sr-A3U\" userLabel=\"Icon image view\">\n                                    <rect key=\"frame\" x=\"160.5\" y=\"55.5\" width=\"33\" height=\"0.0\"/>\n                                </imageView>\n                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"700\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"751\" text=\"[Title]\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ggW-gB-SWF\">\n                                    <rect key=\"frame\" x=\"153\" y=\"65.5\" width=\"48.5\" height=\"20.5\"/>\n                                    <accessibility key=\"accessibilityConfiguration\">\n                                        <bool key=\"isElement\" value=\"NO\"/>\n                                    </accessibility>\n                                    <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleHeadline\"/>\n                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"700\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"752\" text=\"[Message Body]\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"TGC-Td-alh\">\n                                    <rect key=\"frame\" x=\"121\" y=\"96\" width=\"112\" height=\"18\"/>\n                                    <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    <accessibility key=\"accessibilityConfiguration\">\n                                        <bool key=\"isElement\" value=\"NO\"/>\n                                    </accessibility>\n                                    <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleSubhead\"/>\n                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                                <button opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"700\" horizontalCompressionResistancePriority=\"752\" verticalCompressionResistancePriority=\"754\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"VOA-Iy-PCr\">\n                                    <rect key=\"frame\" x=\"148.5\" y=\"124\" width=\"57\" height=\"30\"/>\n                                    <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleSubhead\"/>\n                                    <state key=\"normal\" title=\"[Button]\"/>\n                                </button>\n                            </subviews>\n                        </stackView>\n                    </subviews>\n                    <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    <constraints>\n                        <constraint firstItem=\"YST-yc-0HK\" firstAttribute=\"leading\" secondItem=\"0Mj-jC-BX6\" secondAttribute=\"leading\" constant=\"20\" id=\"BRx-pe-2BP\">\n                            <variation key=\"widthClass=regular\" constant=\"30\"/>\n                        </constraint>\n                        <constraint firstAttribute=\"trailing\" secondItem=\"YST-yc-0HK\" secondAttribute=\"trailing\" constant=\"20\" id=\"JYB-gw-7Ol\">\n                            <variation key=\"widthClass=regular\" constant=\"30\"/>\n                        </constraint>\n                        <constraint firstAttribute=\"bottom\" secondItem=\"YST-yc-0HK\" secondAttribute=\"bottom\" constant=\"20\" id=\"Vsy-Y9-qzf\">\n                            <variation key=\"widthClass=regular\" constant=\"30\"/>\n                        </constraint>\n                        <constraint firstAttribute=\"width\" relation=\"lessThanOrEqual\" priority=\"900\" constant=\"500\" id=\"Y89-EE-TtG\"/>\n                        <constraint firstItem=\"YST-yc-0HK\" firstAttribute=\"top\" secondItem=\"0Mj-jC-BX6\" secondAttribute=\"top\" constant=\"20\" id=\"yRl-kK-cQH\">\n                            <variation key=\"widthClass=regular\" constant=\"30\"/>\n                        </constraint>\n                    </constraints>\n                    <userDefinedRuntimeAttributes>\n                        <userDefinedRuntimeAttribute type=\"number\" keyPath=\"cornerRadius\">\n                            <real key=\"value\" value=\"15\"/>\n                        </userDefinedRuntimeAttribute>\n                    </userDefinedRuntimeAttributes>\n                    <variation key=\"default\">\n                        <mask key=\"constraints\">\n                            <exclude reference=\"Y89-EE-TtG\"/>\n                        </mask>\n                    </variation>\n                    <variation key=\"widthClass=regular\">\n                        <mask key=\"constraints\">\n                            <exclude reference=\"Y89-EE-TtG\"/>\n                        </mask>\n                    </variation>\n                </view>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <constraints>\n                <constraint firstItem=\"0Mj-jC-BX6\" firstAttribute=\"top\" secondItem=\"g5x-hF-D0u\" secondAttribute=\"topMargin\" id=\"GWI-aH-o7P\"/>\n                <constraint firstItem=\"0Mj-jC-BX6\" firstAttribute=\"centerX\" secondItem=\"g5x-hF-D0u\" secondAttribute=\"centerX\" priority=\"950\" id=\"XqM-pB-dF4\"/>\n                <constraint firstItem=\"0Mj-jC-BX6\" firstAttribute=\"leading\" secondItem=\"g5x-hF-D0u\" secondAttribute=\"leadingMargin\" priority=\"900\" id=\"bQ3-k8-0v0\"/>\n                <constraint firstItem=\"0Mj-jC-BX6\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"g5x-hF-D0u\" secondAttribute=\"leadingMargin\" priority=\"900\" id=\"iGY-na-87c\"/>\n                <constraint firstAttribute=\"trailingMargin\" secondItem=\"0Mj-jC-BX6\" secondAttribute=\"trailing\" priority=\"900\" id=\"rSj-h2-U7z\"/>\n                <constraint firstAttribute=\"bottomMargin\" secondItem=\"0Mj-jC-BX6\" secondAttribute=\"bottom\" id=\"wRH-k8-J8S\"/>\n                <constraint firstAttribute=\"trailingMargin\" relation=\"greaterThanOrEqual\" secondItem=\"0Mj-jC-BX6\" secondAttribute=\"trailing\" priority=\"900\" id=\"xAq-z5-Gur\"/>\n            </constraints>\n            <nil key=\"simulatedTopBarMetrics\"/>\n            <nil key=\"simulatedBottomBarMetrics\"/>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n            <userDefinedRuntimeAttributes>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"bounceAnimationOffset\">\n                    <real key=\"value\" value=\"0.0\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"topLayoutMarginAddition\">\n                    <real key=\"value\" value=\"10\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"leftLayoutMarginAddition\">\n                    <real key=\"value\" value=\"10\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"bottomLayoutMarginAddition\">\n                    <real key=\"value\" value=\"10\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"rightLayoutMarginAddition\">\n                    <real key=\"value\" value=\"10\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"collapseLayoutMarginAdditions\" value=\"YES\"/>\n            </userDefinedRuntimeAttributes>\n            <variation key=\"default\">\n                <mask key=\"constraints\">\n                    <exclude reference=\"iGY-na-87c\"/>\n                    <exclude reference=\"xAq-z5-Gur\"/>\n                </mask>\n            </variation>\n            <variation key=\"widthClass=regular\">\n                <mask key=\"constraints\">\n                    <exclude reference=\"bQ3-k8-0v0\"/>\n                    <include reference=\"iGY-na-87c\"/>\n                    <exclude reference=\"rSj-h2-U7z\"/>\n                    <include reference=\"xAq-z5-Gur\"/>\n                </mask>\n            </variation>\n            <connections>\n                <outlet property=\"backgroundView\" destination=\"0Mj-jC-BX6\" id=\"idD-fU-aXH\"/>\n                <outlet property=\"bodyLabel\" destination=\"TGC-Td-alh\" id=\"swz-Qb-Dxw\"/>\n                <outlet property=\"button\" destination=\"VOA-Iy-PCr\" id=\"LGs-Ax-1Ds\"/>\n                <outlet property=\"iconImageView\" destination=\"hUK-sr-A3U\" id=\"Htw-4A-Adn\"/>\n                <outlet property=\"iconLabel\" destination=\"elb-HW-olH\" id=\"JXQ-xt-3t7\"/>\n                <outlet property=\"titleLabel\" destination=\"ggW-gB-SWF\" id=\"Coi-Gy-uPh\"/>\n            </connections>\n            <point key=\"canvasLocation\" x=\"368.5546875\" y=\"347.4377745241581\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"errorIcon\" width=\"33\" height=\"34\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "SwiftMessages/Resources/MessageView.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"17156\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina6_1\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"17126\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"iN0-l3-epB\" customClass=\"MessageView\" customModule=\"SwiftMessages\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"154\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <stackView opaque=\"NO\" contentMode=\"scaleToFill\" alignment=\"center\" spacing=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Nx9-Zd-fca\">\n                    <rect key=\"frame\" x=\"20\" y=\"44\" width=\"560\" height=\"76\"/>\n                    <subviews>\n                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"252\" verticalHuggingPriority=\"251\" horizontalCompressionResistancePriority=\"752\" text=\"😬\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1Bu-DY-qZo\" userLabel=\"Icon label\">\n                            <rect key=\"frame\" x=\"0.0\" y=\"15.5\" width=\"43\" height=\"45.5\"/>\n                            <accessibility key=\"accessibilityConfiguration\">\n                                <bool key=\"isElement\" value=\"NO\"/>\n                            </accessibility>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"38\"/>\n                            <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\n                        <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"center\" horizontalHuggingPriority=\"252\" verticalHuggingPriority=\"251\" horizontalCompressionResistancePriority=\"752\" image=\"errorIcon\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"PbA-QP-XpA\" userLabel=\"Icon image view\">\n                            <rect key=\"frame\" x=\"53\" y=\"21\" width=\"33\" height=\"34\"/>\n                        </imageView>\n                        <stackView opaque=\"NO\" contentMode=\"scaleToFill\" axis=\"vertical\" spacing=\"5\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MKC-Mf-yZN\">\n                            <rect key=\"frame\" x=\"96\" y=\"16.5\" width=\"397\" height=\"43.5\"/>\n                            <subviews>\n                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"751\" text=\"[Title]\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8T6-4T-ytS\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"397\" height=\"20.5\"/>\n                                    <accessibility key=\"accessibilityConfiguration\">\n                                        <bool key=\"isElement\" value=\"NO\"/>\n                                    </accessibility>\n                                    <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleHeadline\"/>\n                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"[Message Body]\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dFP-4Z-N2a\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"25.5\" width=\"397\" height=\"18\"/>\n                                    <accessibility key=\"accessibilityConfiguration\">\n                                        <bool key=\"isElement\" value=\"NO\"/>\n                                    </accessibility>\n                                    <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleSubhead\"/>\n                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                            </subviews>\n                            <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        </stackView>\n                        <button opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"252\" horizontalCompressionResistancePriority=\"752\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"VCW-IQ-FfQ\">\n                            <rect key=\"frame\" x=\"503\" y=\"23\" width=\"57\" height=\"30\"/>\n                            <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleSubhead\"/>\n                            <state key=\"normal\" title=\"[Button]\"/>\n                        </button>\n                    </subviews>\n                    <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    <variation key=\"widthClass=regular\" spacing=\"15\"/>\n                </stackView>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <constraints>\n                <constraint firstAttribute=\"trailingMargin\" secondItem=\"Nx9-Zd-fca\" secondAttribute=\"trailing\" id=\"4sW-g4-sKy\"/>\n                <constraint firstAttribute=\"bottomMargin\" secondItem=\"Nx9-Zd-fca\" secondAttribute=\"bottom\" id=\"SPZ-ev-Lj3\"/>\n                <constraint firstItem=\"Nx9-Zd-fca\" firstAttribute=\"top\" secondItem=\"iN0-l3-epB\" secondAttribute=\"topMargin\" id=\"UDP-8w-ZKv\"/>\n                <constraint firstItem=\"Nx9-Zd-fca\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leadingMargin\" id=\"jKx-hQ-JzW\"/>\n            </constraints>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n            <userDefinedRuntimeAttributes>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"bounceAnimationOffset\">\n                    <real key=\"value\" value=\"5\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"topLayoutMarginAddition\">\n                    <real key=\"value\" value=\"20\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"leftLayoutMarginAddition\">\n                    <real key=\"value\" value=\"20\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"bottomLayoutMarginAddition\">\n                    <real key=\"value\" value=\"20\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"rightLayoutMarginAddition\">\n                    <real key=\"value\" value=\"20\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"collapseLayoutMarginAdditions\" value=\"NO\"/>\n            </userDefinedRuntimeAttributes>\n            <connections>\n                <outlet property=\"bodyLabel\" destination=\"dFP-4Z-N2a\" id=\"xf2-M7-BfM\"/>\n                <outlet property=\"button\" destination=\"VCW-IQ-FfQ\" id=\"dmh-w7-uW0\"/>\n                <outlet property=\"iconImageView\" destination=\"PbA-QP-XpA\" id=\"6qO-kh-gGV\"/>\n                <outlet property=\"iconLabel\" destination=\"1Bu-DY-qZo\" id=\"PWN-yD-bZu\"/>\n                <outlet property=\"titleLabel\" destination=\"8T6-4T-ytS\" id=\"ZfL-Z3-Gk0\"/>\n            </connections>\n            <point key=\"canvasLocation\" x=\"359.4202898550725\" y=\"334.15178571428572\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"errorIcon\" width=\"33\" height=\"34\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "SwiftMessages/Resources/StatusLine.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"17156\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina6_1\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"17126\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"mGT-Jp-zjF\" userLabel=\"Status Line\" customClass=\"MessageView\" customModule=\"SwiftMessages\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"96\"/>\n            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"[Message Body]\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Jtv-Px-mvN\" userLabel=\"Body Label\">\n                    <rect key=\"frame\" x=\"20\" y=\"44\" width=\"560\" height=\"18\"/>\n                    <accessibility key=\"accessibilityConfiguration\">\n                        <bool key=\"isElement\" value=\"NO\"/>\n                    </accessibility>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" priority=\"999\" constant=\"20\" id=\"iWH-Cw-QQQ\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"system\" weight=\"semibold\" pointSize=\"12\"/>\n                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <constraints>\n                <constraint firstItem=\"Jtv-Px-mvN\" firstAttribute=\"leading\" secondItem=\"mGT-Jp-zjF\" secondAttribute=\"leadingMargin\" id=\"CHS-zo-loe\"/>\n                <constraint firstItem=\"Jtv-Px-mvN\" firstAttribute=\"top\" secondItem=\"mGT-Jp-zjF\" secondAttribute=\"topMargin\" id=\"dki-gE-LYc\"/>\n                <constraint firstAttribute=\"bottomMargin\" secondItem=\"Jtv-Px-mvN\" secondAttribute=\"bottom\" id=\"gJ8-94-HgY\"/>\n                <constraint firstAttribute=\"trailingMargin\" secondItem=\"Jtv-Px-mvN\" secondAttribute=\"trailing\" id=\"hII-4c-bJX\"/>\n            </constraints>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n            <userDefinedRuntimeAttributes>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"leftLayoutMarginAddition\">\n                    <real key=\"value\" value=\"30\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"rightLayoutMarginAddition\">\n                    <real key=\"value\" value=\"30\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"collapseLayoutMarginAdditions\" value=\"NO\"/>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"topLayoutMarginAddition\">\n                    <real key=\"value\" value=\"0.0\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"bottomLayoutMarginAddition\">\n                    <real key=\"value\" value=\"0.0\"/>\n                </userDefinedRuntimeAttribute>\n            </userDefinedRuntimeAttributes>\n            <connections>\n                <outlet property=\"bodyLabel\" destination=\"Jtv-Px-mvN\" id=\"bcr-eT-Nhm\"/>\n            </connections>\n            <point key=\"canvasLocation\" x=\"495.6521739130435\" y=\"346.20535714285711\"/>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "SwiftMessages/Resources/TabView.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"17506\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina6_1\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"17505\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"Kgd-fq-RpT\" userLabel=\"Tab View\" customClass=\"MessageView\" customModule=\"SwiftMessages\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"123\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8l1-Wp-omF\" userLabel=\"Corner rounding view\" customClass=\"CornerRoundingView\" customModule=\"SwiftMessages\">\n                    <rect key=\"frame\" x=\"20\" y=\"0.0\" width=\"560\" height=\"123\"/>\n                    <subviews>\n                        <stackView opaque=\"NO\" contentMode=\"scaleToFill\" alignment=\"center\" spacing=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"bdc-by-rjM\" userLabel=\"Content view\">\n                            <rect key=\"frame\" x=\"20\" y=\"44\" width=\"520\" height=\"45\"/>\n                            <subviews>\n                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"252\" verticalHuggingPriority=\"251\" horizontalCompressionResistancePriority=\"752\" text=\"😬\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"09t-tr-Q8T\" userLabel=\"Icon label\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"43\" height=\"45\"/>\n                                    <accessibility key=\"accessibilityConfiguration\">\n                                        <bool key=\"isElement\" value=\"NO\"/>\n                                    </accessibility>\n                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"38\"/>\n                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                                <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"center\" horizontalHuggingPriority=\"252\" verticalHuggingPriority=\"251\" horizontalCompressionResistancePriority=\"752\" image=\"errorIcon\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"iJe-yo-EnG\" userLabel=\"Icon image view\">\n                                    <rect key=\"frame\" x=\"53\" y=\"5.5\" width=\"33\" height=\"34\"/>\n                                </imageView>\n                                <stackView opaque=\"NO\" contentMode=\"scaleToFill\" axis=\"vertical\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"h4V-Az-Wau\">\n                                    <rect key=\"frame\" x=\"96\" y=\"3.5\" width=\"357\" height=\"38.5\"/>\n                                    <subviews>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"751\" text=\"[Title]\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"RxN-E1-uzx\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"357\" height=\"20.5\"/>\n                                            <accessibility key=\"accessibilityConfiguration\">\n                                                <bool key=\"isElement\" value=\"NO\"/>\n                                            </accessibility>\n                                            <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleHeadline\"/>\n                                            <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"[Message Body]\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"JoS-PU-kVw\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"20.5\" width=\"357\" height=\"18\"/>\n                                            <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                            <accessibility key=\"accessibilityConfiguration\">\n                                                <bool key=\"isElement\" value=\"NO\"/>\n                                            </accessibility>\n                                            <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleSubhead\"/>\n                                            <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                    </subviews>\n                                    <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                </stackView>\n                                <button opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"252\" horizontalCompressionResistancePriority=\"752\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vBc-Qb-BBh\">\n                                    <rect key=\"frame\" x=\"463\" y=\"7.5\" width=\"57\" height=\"30\"/>\n                                    <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleSubhead\"/>\n                                    <state key=\"normal\" title=\"[Button]\"/>\n                                </button>\n                            </subviews>\n                            <variation key=\"widthClass=regular\" spacing=\"15\"/>\n                        </stackView>\n                    </subviews>\n                    <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    <constraints>\n                        <constraint firstItem=\"bdc-by-rjM\" firstAttribute=\"leading\" secondItem=\"8l1-Wp-omF\" secondAttribute=\"leading\" priority=\"900\" constant=\"20\" id=\"ZeN-Yg-DDA\"/>\n                        <constraint firstAttribute=\"trailing\" secondItem=\"bdc-by-rjM\" secondAttribute=\"trailing\" priority=\"900\" constant=\"20\" id=\"Zuf-gb-AgS\"/>\n                        <constraint firstAttribute=\"width\" relation=\"lessThanOrEqual\" priority=\"900\" constant=\"500\" id=\"eE4-1F-BxM\"/>\n                    </constraints>\n                    <edgeInsets key=\"layoutMargins\" top=\"0.0\" left=\"0.0\" bottom=\"0.0\" right=\"0.0\"/>\n                    <userDefinedRuntimeAttributes>\n                        <userDefinedRuntimeAttribute type=\"number\" keyPath=\"cornerRadius\">\n                            <real key=\"value\" value=\"15\"/>\n                        </userDefinedRuntimeAttribute>\n                        <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"roundsLeadingCorners\" value=\"YES\"/>\n                    </userDefinedRuntimeAttributes>\n                    <variation key=\"default\">\n                        <mask key=\"constraints\">\n                            <exclude reference=\"eE4-1F-BxM\"/>\n                        </mask>\n                    </variation>\n                    <variation key=\"widthClass=regular\">\n                        <mask key=\"constraints\">\n                            <include reference=\"eE4-1F-BxM\"/>\n                        </mask>\n                    </variation>\n                </view>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <constraints>\n                <constraint firstItem=\"8l1-Wp-omF\" firstAttribute=\"centerX\" secondItem=\"Kgd-fq-RpT\" secondAttribute=\"centerX\" priority=\"950\" id=\"7tH-rr-EQZ\"/>\n                <constraint firstAttribute=\"trailingMargin\" relation=\"greaterThanOrEqual\" secondItem=\"8l1-Wp-omF\" secondAttribute=\"trailing\" priority=\"900\" id=\"Auy-Yk-HhC\"/>\n                <constraint firstItem=\"bdc-by-rjM\" firstAttribute=\"top\" secondItem=\"Kgd-fq-RpT\" secondAttribute=\"topMargin\" id=\"ORK-bM-dJT\"/>\n                <constraint firstItem=\"8l1-Wp-omF\" firstAttribute=\"top\" secondItem=\"Kgd-fq-RpT\" secondAttribute=\"top\" id=\"WBW-gJ-lIP\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"8l1-Wp-omF\" secondAttribute=\"bottom\" id=\"cYv-6k-QSZ\"/>\n                <constraint firstAttribute=\"bottomMargin\" secondItem=\"bdc-by-rjM\" secondAttribute=\"bottom\" id=\"foq-FY-TKq\"/>\n                <constraint firstItem=\"8l1-Wp-omF\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"Kgd-fq-RpT\" secondAttribute=\"leadingMargin\" priority=\"900\" id=\"pRc-fu-AhN\"/>\n                <constraint firstItem=\"8l1-Wp-omF\" firstAttribute=\"leading\" secondItem=\"Kgd-fq-RpT\" secondAttribute=\"leadingMargin\" priority=\"900\" id=\"tVC-3b-F2x\"/>\n                <constraint firstItem=\"8l1-Wp-omF\" firstAttribute=\"trailing\" secondItem=\"Kgd-fq-RpT\" secondAttribute=\"trailingMargin\" priority=\"900\" id=\"uZe-cg-8cw\"/>\n            </constraints>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n            <userDefinedRuntimeAttributes>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"bounceAnimationOffset\">\n                    <real key=\"value\" value=\"5\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"topLayoutMarginAddition\">\n                    <real key=\"value\" value=\"20\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"leftLayoutMarginAddition\">\n                    <real key=\"value\" value=\"10\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"bottomLayoutMarginAddition\">\n                    <real key=\"value\" value=\"20\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"number\" keyPath=\"rightLayoutMarginAddition\">\n                    <real key=\"value\" value=\"10\"/>\n                </userDefinedRuntimeAttribute>\n                <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"collapseLayoutMarginAdditions\" value=\"NO\"/>\n            </userDefinedRuntimeAttributes>\n            <variation key=\"default\">\n                <mask key=\"constraints\">\n                    <exclude reference=\"Auy-Yk-HhC\"/>\n                    <exclude reference=\"pRc-fu-AhN\"/>\n                </mask>\n            </variation>\n            <variation key=\"widthClass=regular\">\n                <mask key=\"constraints\">\n                    <include reference=\"Auy-Yk-HhC\"/>\n                    <include reference=\"pRc-fu-AhN\"/>\n                    <exclude reference=\"tVC-3b-F2x\"/>\n                    <exclude reference=\"uZe-cg-8cw\"/>\n                </mask>\n            </variation>\n            <connections>\n                <outlet property=\"backgroundView\" destination=\"8l1-Wp-omF\" id=\"3L7-KM-Nup\"/>\n                <outlet property=\"bodyLabel\" destination=\"JoS-PU-kVw\" id=\"BPZ-4f-hLF\"/>\n                <outlet property=\"button\" destination=\"vBc-Qb-BBh\" id=\"O0j-cP-TJK\"/>\n                <outlet property=\"iconImageView\" destination=\"iJe-yo-EnG\" id=\"s1b-gw-Gyv\"/>\n                <outlet property=\"iconLabel\" destination=\"09t-tr-Q8T\" id=\"6I4-8L-0Fi\"/>\n                <outlet property=\"titleLabel\" destination=\"RxN-E1-uzx\" id=\"ygP-zj-HqG\"/>\n            </connections>\n            <point key=\"canvasLocation\" x=\"360\" y=\"339.5\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"errorIcon\" width=\"33\" height=\"34\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "SwiftMessages/SwiftMessageModifier.swift",
    "content": "//\n//  SwiftMessageModifier.swift\n//  SwiftUIDemo\n//\n//  Created by Timothy Moose on 10/5/23.\n//\n\nimport SwiftUI\n\n@available(iOS 14.0, *)\npublic extension View {\n    /// A view modifier for displaying a message using similar semantics to the `.sheet()` modifier.\n    func swiftMessage<Message, MessageContent>(\n        message: Binding<Message?>,\n        config: SwiftMessages.Config? = nil,\n        swiftMessages: SwiftMessages? = nil,\n        @ViewBuilder messageContent: @escaping (Message) -> MessageContent\n    ) -> some View where Message: Equatable & Identifiable, MessageContent: View {\n        swiftMessage(message: message, config: config, swiftMessages: swiftMessages) { message, _ in\n            messageContent(message)\n        }\n    }\n\n    /// A view modifier for displaying a message using similar semantics to the `.sheet()` modifier. This variant provides a\n    /// `SwiftMessageGeometryProxy`. The proxy is useful when one needs to know the geometry metrics of the container view,\n    /// particularly because `GeometryReader` doesn't work inside the view builder due to the way the message view is being\n    /// displayed from UIKit.\n    func swiftMessage<Message, MessageContent>(\n        message: Binding<Message?>,\n        config: SwiftMessages.Config? = nil,\n        swiftMessages: SwiftMessages? = nil,\n        @ViewBuilder messageContent: @escaping (Message, MessageGeometryProxy) -> MessageContent\n    ) -> some View where Message: Equatable & Identifiable, MessageContent: View {\n        modifier(\n            SwiftMessageModifier(\n                message: message,\n                config: config,\n                swiftMessages: swiftMessages,\n                messageContent: messageContent\n            )\n        )\n    }\n\n    /// A state-based modifier for displaying a message when `Message` conforms to `MessageViewConvertible`. This variant should be used if the message\n    /// view can be represented as pure data. If the message requires a delegate, has callbacks, etc., consider using the variant that takes a message view builder.\n    func swiftMessage<Message>(\n        message: Binding<Message?>,\n        config: SwiftMessages.Config? = nil,\n        swiftMessages: SwiftMessages? = nil\n    ) -> some View where Message: MessageViewConvertible {\n        swiftMessage(message: message, config: config, swiftMessages: swiftMessages) { content in\n            content.asMessageView()\n        }\n    }\n}\n\n@available(iOS 14.0, *)\nprivate struct SwiftMessageModifier<Message, MessageContent>: ViewModifier where Message: Equatable & Identifiable, MessageContent: View {\n\n    // MARK: - API\n\n    fileprivate init(\n        message: Binding<Message?>,\n        config: SwiftMessages.Config? = nil,\n        swiftMessages: SwiftMessages? = nil,\n        @ViewBuilder messageContent: @escaping (Message) -> MessageContent\n    ) {\n        _message = message\n        self.config = config\n        self.swiftMessages = swiftMessages\n        self.messageContent = { message, _ in\n            messageContent(message)\n        }\n    }\n\n    fileprivate init(\n        message: Binding<Message?>,\n        config: SwiftMessages.Config? = nil,\n        swiftMessages: SwiftMessages? = nil,\n        @ViewBuilder messageContent: @escaping (Message, MessageGeometryProxy) -> MessageContent\n    ) {\n        _message = message\n        self.config = config\n        self.swiftMessages = swiftMessages\n        self.messageContent = messageContent\n    }\n\n    fileprivate init(\n        message: Binding<Message?>,\n        config: SwiftMessages.Config? = nil,\n        swiftMessages: SwiftMessages? = nil\n    ) where Message: MessageViewConvertible, Message.Content == MessageContent {\n        _message = message\n        self.config = config\n        self.swiftMessages = swiftMessages\n        self.messageContent = { message, _ in\n            message.asMessageView()\n        }\n    }\n\n    // MARK: - Constants\n\n    // MARK: - Variables\n\n    @Binding private var message: Message?\n    private let config: SwiftMessages.Config?\n    private let swiftMessages: SwiftMessages?\n    @ViewBuilder private let messageContent: (Message, MessageGeometryProxy) -> MessageContent\n\n    // MARK: - Body\n\n    func body(content: Content) -> some View {\n        content\n            .onChange(of: message) { message in\n                let show: @MainActor (SwiftMessages.Config, UIView) -> Void = swiftMessages?.show(config:view:) ?? SwiftMessages.show(config:view:)\n                let hideAll: @MainActor () -> Void = swiftMessages?.hideAll ?? SwiftMessages.hideAll\n                switch message {\n                case let message?:\n                    let view = MessageHostingView(message: message, content: messageContent)\n                    var config = config ?? swiftMessages?.defaultConfig ?? SwiftMessages.defaultConfig\n                    config.eventListeners.append { event in\n                        if case .didHide = event, event.id == self.message?.id {\n                            self.message = nil\n                        }\n                    }\n                    hideAll()\n                    show(config, view)\n                case .none:\n                    hideAll()\n                }\n            }\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/SwiftMessages.Config+Extensions.swift",
    "content": "//\n//  SwiftMessages.Config+Extensions.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 12/26/20.\n//  Copyright © 2020 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\n\nextension SwiftMessages.Config {\n    var windowLevel: UIWindow.Level? {\n        switch presentationContext {\n        case .window(let level): return level\n        case .windowScene(_, let level): return level\n        default: return nil\n        }\n    }\n\n    @available(iOS 13.0, *)\n    var windowScene: UIWindowScene? {\n        switch presentationContext {\n        case .windowScene(let scene, _): return scene as? UIWindowScene\n        default:\n            #if SWIFTMESSAGES_APP_EXTENSIONS\n            return nil\n            #else\n            return UIWindow.keyWindow?.windowScene\n            #endif\n        }\n    }\n\n    var shouldBecomeKeyWindow: Bool {\n        if let becomeKeyWindow = becomeKeyWindow { return becomeKeyWindow }\n        switch dimMode {\n        case .gray, .color, .blur:\n            // Should become key window in modal presentation style\n            // for proper VoiceOver handling.\n            return true\n        case .none:\n            return false\n        }\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/SwiftMessages.h",
    "content": "//\n//  SwiftMessages.h\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 8/9/16.\n//  Copyright © 2016 SwiftKick Mobile LLC. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for SwiftMessages.\nFOUNDATION_EXPORT double SwiftMessagesVersionNumber;\n\n//! Project version string for SwiftMessages.\nFOUNDATION_EXPORT const unsigned char SwiftMessagesVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <SwiftMessages/PublicHeader.h>\n\n\n"
  },
  {
    "path": "SwiftMessages/SwiftMessages.swift",
    "content": "//\n//  SwiftMessages.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 8/1/16.\n//  Copyright © 2016 SwiftKick Mobile LLC. All rights reserved.\n//\n\nimport UIKit\n\nprivate let globalInstance = SwiftMessages()\n\n/**\n The `SwiftMessages` class provides the interface for showing and hiding messages.\n It behaves like a queue, only showing one message at a time. Message views that\n adopt the `Identifiable` protocol (as `MessageView` does) will have duplicates removed.\n */\n@MainActor\nopen class SwiftMessages {\n    \n    /**\n     Specifies whether the message view is displayed at the top or bottom\n     of the selected presentation container.\n    */\n    public enum PresentationStyle {\n        \n        /**\n         Message view slides down from the top.\n        */\n        case top\n\n        /**\n         Message view slides up from the bottom.\n         */\n        case bottom\n\n        /**\n         Message view fades into the center.\n         */\n        case center\n\n        /**\n         User-defined animation\n        */\n        case custom(animator: Animator)\n    }\n\n    /**\n     Specifies how the container for presenting the message view\n     is selected.\n    */\n    public enum PresentationContext {\n        \n        /**\n         Displays the message view under navigation bars and tab bars if an\n         appropriate one is found. Otherwise, it is displayed in a new window\n         at level `UIWindow.Level.normal`. Use this option to automatically display\n         under bars, where applicable. Because this option involves a top-down\n         search, an appropriate context might not be found when the view controller\n         hierarchy incorporates custom containers. If this is the case, the\n         .ViewController option can provide a more targeted context.\n        */\n        case automatic\n\n        /**\n         Displays the message in a new window at the specified window level.\n         SwiftMessages automatically increases the top margins of any message\n         view that adopts the `MarginInsetting` protocol (as `MessageView` does)\n         to account for the status bar. As of iOS 13, windows can no longer cover the\n         status bar. The only alternative is to set `Config.prefersStatusBarHidden = true`\n         to hide it.\n        */\n        case window(windowLevel: UIWindow.Level)\n\n        /**\n         Displays the message in a new window, at the specified window level,\n         in the specified window scene. SwiftMessages automatically increases the top margins\n         of any message view that adopts the `MarginInsetting` protocol (as `MessageView` does)\n         to account for the status bar. As of iOS 13, windows can no longer cover the\n         status bar. The only alternative is to set `Config.prefersStatusBarHidden = true`\n         to hide it. The `WindowScene` protocol works around the change in Xcode 13 that prevents\n         using `@availability` attribute with `enum` cases containing associated values.\n        */\n        case windowScene(_: WindowScene, windowLevel: UIWindow.Level)\n\n        /**\n         Displays the message view under navigation bars and tab bars if an\n         appropriate one is found using the given view controller as a starting\n         point and searching up the parent view controller chain. Otherwise, it\n         is displayed in the given view controller's view. This option can be used\n         for targeted placement in a view controller hierarchy.\n        */\n        case viewController(_: UIViewController)\n\n        /**\n         Displays the message view in the given container view.\n         */\n        case view(_: UIView)\n    }\n    \n    /**\n     Specifies the duration of the message view's time on screen before it is\n     automatically hidden.\n    */\n    public enum Duration {\n        \n        /**\n         Hide the message view after the default duration.\n        */\n        case automatic\n        \n        /**\n         Disables automatic hiding of the message view.\n        */\n        case forever\n        \n        /**\n         Hide the message view after the speficied number of seconds.\n         \n         - Parameter seconds: The number of seconds.\n        */\n        case seconds(seconds: TimeInterval)\n\n        /**\n         The `indefinite` option is similar to `forever` in the sense that\n         the message view will not be automatically hidden. However, it\n         provides two options that can be useful in some scenarios:\n         \n            - `delay`: wait the specified time interval before displaying\n                       the message. If you hide the message during the delay\n                       interval by calling either `hideAll()` or `hide(id:)`,\n                       the message will not be displayed. This is not the case for\n                       `hide()` because it only acts on a visible message. Messages\n                       shown during another message's delay window are displayed first.\n            - `minimum`: if the message is displayed, ensure that it is displayed\n                         for a minimum time interval. If you explicitly hide the\n                         during this interval, the message will be hidden at the\n                         end of the interval.\n\n         This option is useful for displaying a message when a process is taking\n         too long but you don't want to display the message if the process completes\n         in a reasonable amount of time. The value `indefinite(delay: 0, minimum: 0)`\n         is equivalent to `forever`.\n         \n         For example, if a URL load is expected to complete in 2 seconds, you may use\n         the value `indefinite(delay: 2, minimum 1)` to ensure that the message will not\n         be displayed in most cases, but will be displayed for at least 1 second if\n         the operation takes longer than 2 seconds. By specifying a minimum duration,\n         you can avoid hiding the message too fast if the operation finishes right\n         after the delay interval.\n        */\n        case indefinite(delay: TimeInterval, minimum: TimeInterval)\n    }\n    \n    /**\n     Specifies notification's haptic feedback to be used on `MessageView` display\n    */\n\n    /**\n     Specifies an optional haptic feedback to be used on `MessageView` display\n    */\n    public enum Haptic {\n        case success\n        case warning\n        case error\n    }\n    \n    /**\n     Specifies options for dimming the background behind the message view\n     similar to a popover view controller.\n    */\n    public enum DimMode {\n        \n        /**\n         Don't dim the background behind the message view.\n        */\n        case none\n\n        /**\n         Dim the background behind the message view a gray color.\n         \n         - `interactive`: Specifies whether or not tapping the\n                          dimmed area dismisses the message view.\n         */\n        case gray(interactive: Bool)\n\n        /**\n         Dim the background behind the message view using the given color.\n         SwiftMessages does not apply alpha transparency to the color, so any alpha\n         must be baked into the `UIColor` instance.\n         \n         - `color`: The color of the dim view.\n         - `interactive`: Specifies whether or not tapping the\n                          dimmed area dismisses the message view.\n         */\n        case color(color: UIColor, interactive: Bool)\n\n        /**\n         Dim the background behind the message view using a blur effect with\n         the given style\n\n         - `style`: The blur effect style to use\n         - `alpha`: The alpha level of the blur\n         - `interactive`: Specifies whether or not tapping the\n         dimmed area dismisses the message view.\n         */\n        case blur(style: UIBlurEffect.Style, alpha: CGFloat, interactive: Bool)\n\n        public var interactive: Bool {\n            switch self {\n            case .gray(let interactive):\n                return interactive\n            case .color(_, let interactive):\n                return interactive\n            case .blur (_, _, let interactive):\n                return interactive\n            case .none:\n                return false\n            }\n        }\n\n        public var modal: Bool {\n            switch self {\n            case .gray, .color, .blur:\n                return true\n            case .none:\n                return false\n            }\n        }\n    }\n\n    /**\n     Specifies events in the message lifecycle.\n    */\n    public enum Event {\n        case willShow(UIView)\n        case didShow(UIView)\n        case willHide(UIView)\n        case didHide(UIView)\n\n        public var view: UIView {\n            switch self {\n            case .willShow(let view): return view\n            case .didShow(let view): return view\n            case .willHide(let view): return view\n            case .didHide(let view): return view\n            }\n        }\n\n        public var id: String? {\n            return (view as? Identifiable)?.id\n        }\n    }\n    \n    /**\n     A closure that takes an `Event` as an argument.\n     */\n    public typealias EventListener = (Event) -> Void\n    \n    /**\n     The `Config` struct specifies options for displaying a single message view. It is\n     provided as an optional argument to one of the `MessageView.show()` methods.\n     */\n    public struct Config {\n        \n        public init() {}\n        \n        /**\n         Specifies whether the message view is displayed at the top or bottom\n         of the selected presentation container. The default is `.Top`.\n         */\n        public var presentationStyle = PresentationStyle.top\n\n        /**\n         Specifies how the container for presenting the message view\n         is selected. The default is `.Automatic`.\n         */\n        public var presentationContext = PresentationContext.automatic\n\n        /**\n         Specifies the duration of the message view's time on screen before it is\n         automatically hidden. The default is `.Automatic`.\n         */\n        public var duration = Duration.automatic\n        \n        /**\n         Specifies options for dimming the background behind the message view\n         similar to a popover view controller. The default is `.None`.\n         */\n        public var dimMode = DimMode.none\n        \n        \n        /**\n         Specifies notification's haptic feedback to be played on `MessageView` display.\n         No default value is provided.\n         */\n        public var haptic: Haptic? = nil\n        \n        /**\n         Specifies whether or not the interactive pan-to-hide gesture is enabled\n         on the message view. For views that implement the `BackgroundViewable` \n         protocol (as `MessageView` does), the pan gesture recognizer is installed\n         in the `backgroundView`, which allows for card-style views with transparent\n         margins that shouldn't be interactive. Otherwise, it is installed in\n         the message view itself. The default is `true`.\n        */\n        public var interactiveHide = true\n        \n        /**\n         Specifies the preferred status bar style when the view is being\n         displayed in a window. This can be useful when the view is being\n         displayed behind the status bar and the message view has a background\n         color that needs a different status bar style than the current one.\n         The default is `nil`.\n         */\n        public var preferredStatusBarStyle: UIStatusBarStyle?\n\n        /**\n         Specifies the preferred status bar visibility when the view is being\n         displayed in a window. As of iOS 13, windows can no longer cover the\n         status bar. The only alternative is to hide the status bar by setting\n         this options to `true`. Default is `nil`.\n         */\n        public var prefersStatusBarHidden: Bool?\n\n        /**\n         If a view controller is created to host the message view, should the view \n         controller auto rotate?  The default is 'true', meaning it should auto\n         rotate.\n         */\n        public var shouldAutorotate = true\n\n        /**\n         Specified whether or not duplicate `Identifiable` messages are ignored.\n         The default is `true`.\n        */\n        public var ignoreDuplicates = true\n        \n        /**\n         Specifies an optional array of event listeners.\n        */\n        public var eventListeners: [EventListener] = []\n        \n        /**\n         Specifies that in cases where the message is displayed in its own window,\n         such as with `.window` presentation context, the window should become\n         the key window. This option should only be used if the message view\n         needs to receive non-touch events, such as keyboard input. From Apple's\n         documentation https://developer.apple.com/reference/uikit/uiwindow:\n         \n         > Whereas touch events are delivered to the window where they occurred,\n         > events that do not have a relevant coordinate value are delivered to\n         > the key window. Only one window at a time can be the key window, and\n         > you can use a window’s keyWindow property to determine its status.\n         > Most of the time, your app’s main window is the key window, but UIKit\n         > may designate a different window as needed.\n         */\n        public var becomeKeyWindow: Bool?\n\n        /**\n         The `dimMode` background will use this accessibility\n         label, e.g. \"dismiss\" when the `interactive` option is used.\n        */\n        public var dimModeAccessibilityLabel: String = \"dismiss\"\n\n        /**\n         The user interface style to use when SwiftMessages displays a message its own window.\n         Use with apps that don't support dark mode to prevent messages from adopting the\n         system's interface style.\n        */\n        @available(iOS 13, *)\n        public var overrideUserInterfaceStyle: UIUserInterfaceStyle {\n            // Note that this is modelled as a computed property because\n            // Swift doesn't allow `@available` with stored properties.\n            get {\n                guard let rawValue = overrideUserInterfaceStyleRawValue else { return .unspecified }\n                return UIUserInterfaceStyle(rawValue: rawValue) ?? .unspecified\n            }\n            set {\n                overrideUserInterfaceStyleRawValue = newValue.rawValue\n            }\n        }\n        private var overrideUserInterfaceStyleRawValue: Int?\n\n        /**\n         If specified, SwiftMessages calls this closure when an instance of\n         `WindowViewController` is needed. Use this if you need to supply a custom subclass\n         of `WindowViewController`.\n         */\n        public var windowViewController: ((_ config: SwiftMessages.Config) -> WindowViewController)?\n\n        /**\n         Supply an instance of `KeyboardTrackingView` to have the message view avoid the keyboard.\n         */\n        public var keyboardTrackingView: KeyboardTrackingView?\n        \n        /**\n         Specify a positive or negative priority to influence the position of a message in the queue based on it's relative priority.\n         */\n        public var priority: Int = 0\n    }\n    \n    /**\n     Not much to say here.\n     */\n    nonisolated public init() {}\n\n    /**\n     Adds the given configuration and view to the message queue to be displayed.\n     \n     - Parameter config: The configuration options.\n     - Parameter view: The view to be displayed.\n     */\n    open func show(config: Config, view: UIView) {\n        let presenter = Presenter(config: config, view: view, delegate: self)\n        enqueue(presenter: presenter)\n    }\n    \n    /**\n     Adds the given view to the message queue to be displayed\n     with default configuration options.\n     \n     - Parameter config: The configuration options.\n     - Parameter view: The view to be displayed.\n     */\n    public func show(view: UIView) {\n        show(config: defaultConfig, view: view)\n    }\n    \n    /// A block that returns an arbitrary view.\n    public typealias ViewProvider = () -> UIView\n\n    /**\n     Adds the given configuration and view provider to the message queue to be displayed.\n\n     The `viewProvider` block is guaranteed to be called on the main queue where\n     it is safe to interact with `UIKit` components. This variant of `show()` is\n     recommended when the message might be added from a background queue.\n     \n     - Parameter config: The configuration options.\n     - Parameter viewProvider: A block that returns the view to be displayed.\n     */\n    nonisolated open func show(config: Config, viewProvider: @escaping ViewProvider) {\n        Task { @MainActor [weak self] in\n            guard let self else { return }\n            let view = viewProvider()\n            self.show(config: config, view: view)\n        }\n    }\n    \n    /**\n     Adds the given view provider to the message queue to be displayed\n     with default configuration options.\n     \n     The `viewProvider` block is guaranteed to be called on the main queue where\n     it is safe to interact with `UIKit` components. This variant of `show()` is\n     recommended when the message might be added from a background queue.\n     \n     - Parameter viewProvider: A block that returns the view to be displayed.\n     */\n    public func show(viewProvider: @escaping ViewProvider) {\n        show(config: defaultConfig, viewProvider: viewProvider)\n    }\n    \n    /**\n     Hide the current message being displayed by animating it away.\n     */\n    open func hide(animated: Bool = true) {\n        hideCurrent(animated: animated)\n    }\n\n    /**\n     Hide the current message, if there is one, by animating it away and\n     clear the message queue.\n     */\n    open func hideAll() {\n        queue.removeAll()\n        delays.removeAll()\n        counts.removeAll()\n        hideCurrent()\n    }\n\n    /**\n     Hide a message with the given `id`. If the specified message is\n     currently being displayed, it will be animated away. Works with message\n     views, such as `MessageView`, that adopt the `Identifiable` protocol.\n     - Parameter id: The identifier of the message to remove.\n     */\n    open func hide(id: String) {\n        if id == _current?.id {\n            hideCurrent()\n        }\n        queue = queue.filter { $0.id != id }\n        delays.remove(id: id)\n        counts[id] = nil\n    }\n\n    /**\n     Hide the message when the number of calls to show() and hideCounted(id:) for a\n     given message ID are equal. This can be useful for messages that may be\n     shown from  multiple code paths to ensure that all paths are ready to hide.\n     */\n    open func hideCounted(id: String) {\n        if let count = counts[id] {\n            if count < 2 {\n                counts[id] = nil\n            } else {\n                counts[id] = count - 1\n                return\n            }\n        }\n        if id == _current?.id {\n            hideCurrent()\n        }\n        queue = queue.filter { $0.id != id }\n        delays.remove(id: id)\n    }\n\n    /**\n     Get the count of a message with the given ID (see `hideCounted(id:)`)\n     */\n    public func count(id: String) -> Int {\n        return counts[id] ?? 0\n    }\n\n    /**\n     Explicitly set the count of a message with the given ID (see `hideCounted(id:)`).\n     Not sure if there's a use case for this, but why not?!\n     */\n    public func set(count: Int, for id: String) {\n        guard counts[id] != nil else { return }\n        return counts[id] = count\n    }\n\n    /**\n     Specifies the default configuration to use when calling the variants of\n     `show()` that don't take a `config` argument or as a base for custom configs.\n     */\n    public var defaultConfig = Config()\n\n    /**\n     Specifies the amount of time to pause between removing a message\n     and showing the next. Default is 0.5 seconds.\n     */\n    open var pauseBetweenMessages: TimeInterval = 0.5\n\n    /// Type for keeping track of delayed presentations\n    @MainActor\n    fileprivate class Delays {\n\n        fileprivate func add(presenter: Presenter) {\n            presenters.insert(presenter)\n        }\n\n        @discardableResult\n        fileprivate func remove(presenter: Presenter) -> Bool {\n            guard presenters.contains(presenter) else { return false }\n            presenters.remove(presenter)\n            return true\n        }\n\n        fileprivate func remove(id: String) {\n            presenters = presenters.filter { $0.id != id }\n        }\n\n        fileprivate func removeAll() {\n            presenters.removeAll()\n        }\n\n        private var presenters = Set<Presenter>()\n    }\n\n    func show(presenter: Presenter) {\n        enqueue(presenter: presenter)\n    }\n\n    fileprivate var queue: [Presenter] = []\n    fileprivate var delays = Delays()\n    fileprivate var counts: [String : Int] = [:]\n    fileprivate var _current: Presenter? = nil {\n        didSet {\n            if oldValue != nil {\n                Task { [weak self] in\n                    try? await Task.sleep(seconds: self?.pauseBetweenMessages ?? 0)\n                    self?.dequeueNext()\n                }\n            }\n        }\n    }\n\n    fileprivate func enqueue(presenter: Presenter) {\n        if presenter.config.ignoreDuplicates {\n            counts[presenter.id] = (counts[presenter.id] ?? 0) + 1\n            if let _current,\n                _current.id == presenter.id,\n               !_current.isHiding,\n               !_current.isOrphaned { return }\n            if queue.filter({ $0.id == presenter.id }).count > 0 { return }\n        }\n        func doEnqueue() {\n            queue.append(presenter)\n            dequeueNext()\n        }\n        if let delay = presenter.delayShow {\n            delays.add(presenter: presenter)\n            Task { [weak self] in\n                try? await Task.sleep(seconds: delay)\n                // Don't enqueue if the view has been hidden during the delay window.\n                guard let self, self.delays.remove(presenter: presenter) else { return }\n                doEnqueue()\n            }\n        } else {\n            doEnqueue()\n        }\n    }\n    \n    fileprivate func dequeueNext() {\n        guard queue.count > 0 else { return }\n        if let _current, !_current.isOrphaned { return }\n        // Sort by priority\n        queue = queue.sorted { left, right in\n            left.config.priority > right.config.priority\n        }\n        let current = queue.removeFirst()\n        self._current = current\n        // Set `autohideToken` before the animation starts in case\n        // the dismiss gesture begins before we've queued the autohide\n        // block on animation completion.\n        self.autohideToken = current\n        current.showDate = CACurrentMediaTime()\n        do {\n            try current.show { [weak self] completed in\n                guard let self else { return }\n                guard completed else {\n                    self.internalHide(presenter: current)\n                    return\n                }\n                if current === self.autohideToken {\n                    self.queueAutoHide()\n                }\n            }\n        } catch {\n            _current = nil\n        }\n    }\n\n    fileprivate func internalHide(presenter: Presenter) {\n        if presenter == _current {\n            hideCurrent()\n        } else {\n            queue = queue.filter { $0 != presenter }\n            delays.remove(presenter: presenter)\n        }\n    }\n \n    fileprivate func hideCurrent(animated: Bool = true) {\n        guard let current = _current, !current.isHiding else { return }\n        let action = { [weak self] in\n            current.hide(animated: animated) { (completed) in\n                guard completed, let self else { return }\n                guard self._current === current else { return }\n                self.counts[current.id] = nil\n                self._current = nil\n            }\n        }\n        let delay = current.delayHide ?? 0\n        Task {\n            try? await Task.sleep(seconds: delay)\n            action()\n        }\n    }\n\n    fileprivate weak var autohideToken: Presenter?\n\n    fileprivate func queueAutoHide() {\n        guard let current = _current else { return }\n        autohideToken = current\n        if let pauseDuration = current.pauseDuration {\n            Task { [weak self] in\n                try? await Task.sleep(seconds: pauseDuration)\n                // Make sure we've still got a green light to auto-hide.\n                guard let self, self.autohideToken == current else { return }\n                self.internalHide(presenter: current)\n            }\n        }\n    }\n\n    deinit {\n        guard let current = _current else { return }\n        Task { @MainActor [current] in\n            current.hide(animated: true) { _ in }\n        }\n    }\n}\n\n/*\n MARK: - Accessing messages\n */\n\nextension SwiftMessages {\n\n    /**\n     Returns the message view of type `T` if it is currently being shown or hidden.\n\n     - Returns: The view of type `T` if it is currently being shown or hidden.\n     */\n    public func current<T: UIView>() -> T? {\n        _current?.view as? T\n    }\n\n    /**\n     Returns a message view with the given `id` if it is currently being shown or hidden.\n\n     - Parameter id: The id of a message that adopts `Identifiable`.\n     - Returns: The view with matching id if currently being shown or hidden.\n    */\n    public func current<T: UIView>(id: String) -> T? {\n        _current?.id == id ? _current?.view as? T : nil\n    }\n\n    /**\n     Returns a message view with the given `id` if it is currently in the queue to be shown.\n\n     - Parameter id: The id of a message that adopts `Identifiable`.\n     - Returns: The view with matching id if currently queued to be shown.\n     */\n    public func queued<T: UIView>(id: String) -> T? {\n        queue.first { $0.id == id }?.view as? T\n    }\n\n    /**\n     Returns a message view with the given `id` if it is currently being \n     shown, hidden or in the queue to be shown.\n\n     - Parameter id: The id of a message that adopts `Identifiable`.\n     - Returns: The view with matching id if currently queued to be shown.\n     */\n    public func currentOrQueued<T: UIView>(id: String) -> T? {\n        return current(id: id) ?? queued(id: id)\n    }\n}\n\n/*\n MARK: - PresenterDelegate\n */\n\nextension SwiftMessages: PresenterDelegate {\n\n    func hide(presenter: Presenter) {\n        self.internalHide(presenter: presenter)\n    }\n\n    public func hide(animator: Animator) {\n        guard let presenter = self.presenter(forAnimator: animator) else { return }\n        self.internalHide(presenter: presenter)\n    }\n\n    public func panStarted(animator: Animator) {\n        autohideToken = nil\n    }\n\n    public func panEnded(animator: Animator) {\n        queueAutoHide()\n    }\n\n    private func presenter(forAnimator animator: Animator) -> Presenter? {\n        if let current = _current, animator === current.animator {\n            return current\n        }\n        let queued = queue.filter { $0.animator === animator }\n        return queued.first\n    }\n}\n\n/**\n MARK: - Creating views from nibs\n\n This extension provides several convenience functions for instantiating views from nib files.\n SwiftMessages provides several default nib files in the Resources folder that can be\n drag-and-dropped into a project as a starting point and modified.\n */\n\nextension SwiftMessages {\n    \n    /**\n     Loads a nib file with the same name as the generic view type `T` and returns\n     the first view found in the nib file with matching type `T`. For example, if\n     the generic type is `MyView`, a nib file named `MyView.nib` is loaded and the\n     first top-level view of type `MyView` is returned. The main bundle is searched\n     first followed by the SwiftMessages bundle.\n     \n     - Parameter filesOwner: An optional files owner.\n     \n     - Throws: `Error.CannotLoadViewFromNib` if a view matching the\n       generic type `T` is not found in the nib.\n     \n     - Returns: An instance of generic view type `T`.\n     */\n    public class func viewFromNib<T: UIView>(_ filesOwner: AnyObject = NSNull.init()) throws -> T {\n        let name = T.description().components(separatedBy: \".\").last\n        assert(name != nil)\n        let view: T = try internalViewFromNib(named: name!, bundle: nil, filesOwner: filesOwner)\n        return view\n    }\n    \n    /**\n     Loads a nib file with specified name and returns the first view found in the  nib file\n     with matching type `T`. The main bundle is searched first followed by the SwiftMessages bundle.\n     \n     - Parameter name: The name of the nib file (excluding the .xib extension).\n     - Parameter filesOwner: An optional files owner.\n     \n     - Throws: `Error.CannotLoadViewFromNib` if a view matching the\n     generic type `T` is not found in the nib.\n     \n     - Returns: An instance of generic view type `T`.\n     */\n    public class func viewFromNib<T: UIView>(named name: String, filesOwner: AnyObject = NSNull.init()) throws -> T {\n        let view: T = try internalViewFromNib(named: name, bundle: nil, filesOwner: filesOwner)\n        return view\n    }\n    \n    /**\n     Loads a nib file with specified name in the specified bundle and returns the\n     first view found in the  nib file with matching type `T`.\n     \n     - Parameter name: The name of the nib file (excluding the .xib extension).\n     - Parameter bundle: The name of the bundle containing the nib file.\n     - Parameter filesOwner: An optional files owner.\n     \n     - Throws: `Error.CannotLoadViewFromNib` if a view matching the\n     generic type `T` is not found in the nib.\n     \n     - Returns: An instance of generic view type `T`.\n     */\n    public class func viewFromNib<T: UIView>(named name: String, bundle: Bundle, filesOwner: AnyObject = NSNull.init()) throws -> T {\n        let view: T = try internalViewFromNib(named: name, bundle: bundle, filesOwner: filesOwner)\n        return view\n    }\n    \n    fileprivate class func internalViewFromNib<T: UIView>(named name: String, bundle: Bundle? = nil, filesOwner: AnyObject = NSNull.init()) throws -> T {\n        let resolvedBundle: Bundle\n        if let bundle = bundle {\n            resolvedBundle = bundle\n        } else {\n            if Bundle.main.path(forResource: name, ofType: \"nib\") != nil {\n                resolvedBundle = Bundle.main\n            } else {\n                resolvedBundle = Bundle.sm_frameworkBundle()\n            }\n        }\n        let arrayOfViews = resolvedBundle.loadNibNamed(name, owner: filesOwner, options: nil) ?? []\n        #if swift(>=4.1)\n        guard let view = arrayOfViews.compactMap( { $0 as? T} ).first else { throw SwiftMessagesError.cannotLoadViewFromNib(nibName: name) }\n        #else\n        guard let view = arrayOfViews.flatMap( { $0 as? T} ).first else { throw SwiftMessagesError.cannotLoadViewFromNib(nibName: name) }\n        #endif\n        return view\n    }\n}\n\n/*\n MARK: - Static APIs\n \n This extension provides a shared instance of `SwiftMessages` and a static API wrapper around\n this instance for simplified syntax. For example, `SwiftMessages.show()` is equivalent\n to `SwiftMessages.sharedInstance.show()`.\n */\n\nextension SwiftMessages {\n    \n    /**\n     A default shared instance of `SwiftMessages`. The `SwiftMessages` class provides\n     a set of static APIs that wrap calls to this instance. For example, `SwiftMessages.show()`\n     is equivalent to `SwiftMessages.sharedInstance.show()`.\n     */\n    nonisolated public static var sharedInstance: SwiftMessages {\n        return globalInstance\n    }\n\n    public static func show(viewProvider: @escaping ViewProvider) {\n        globalInstance.show(viewProvider: viewProvider)\n    }\n    \n    public static func show(config: Config, viewProvider: @escaping ViewProvider) {\n        globalInstance.show(config: config, viewProvider: viewProvider)\n    }\n    \n    public static func show(view: UIView) {\n        globalInstance.show(view: view)\n    }\n\n    public static func show(config: Config, view: UIView) {\n        globalInstance.show(config: config, view: view)\n    }\n\n    public static func hide(animated: Bool = true) {\n        globalInstance.hide(animated: animated)\n    }\n    \n    public static func hideAll() {\n        globalInstance.hideAll()\n    }\n    \n    public static func hide(id: String) {\n        globalInstance.hide(id: id)\n    }\n\n    public static func hideCounted(id: String) {\n        globalInstance.hideCounted(id: id)\n    }\n\n    public static var defaultConfig: Config {\n        get {\n            return globalInstance.defaultConfig\n        }\n        set {\n            globalInstance.defaultConfig = newValue\n        }\n    }\n    \n    public static var pauseBetweenMessages: TimeInterval {\n        get {\n            return globalInstance.pauseBetweenMessages\n        }\n        set {\n            globalInstance.pauseBetweenMessages = newValue\n        }\n    }\n\n    public static func current<T: UIView>(id: String) -> T? {\n        return globalInstance.current(id: id)\n    }\n\n    public static func queued<T: UIView>(id: String) -> T? {\n        return globalInstance.queued(id: id)\n    }\n\n    public static func currentOrQueued<T: UIView>(id: String) -> T? {\n        return globalInstance.currentOrQueued(id: id)\n    }\n\n    public static func count(id: String) -> Int {\n        return globalInstance.count(id: id)\n    }\n\n    public static func set(count: Int, for id: String) {\n        globalInstance.set(count: count, for: id)\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/SwiftMessagesHideAction.swift",
    "content": "//\n//  SwiftMessagesHideKey.swift\n//  SwiftMessages\n//\n//  Created by Mofe Ejegi on 11/05/2025.\n//  Copyright © 2025 SwiftKick Mobile. All rights reserved.\n//\n\nimport SwiftUI\n\n/// A SwiftUI-style action for dismissing the current SwiftMessage.\npublic struct SwiftMessagesHideAction {\n    public init() {}\n    \n    /// Dismiss with option to disable animation.\n    @MainActor\n    public func callAsFunction(animated: Bool) {\n        SwiftMessages.hide(animated: animated)\n    }\n}\n\npublic extension EnvironmentValues {\n    /// Inject `@Environment(\\.swiftMessagesHide)` into your views to\n    /// access the SwiftUI-style action for dismissing the current SwiftMessage.\n    ///\n    /// Usage:\n    /// ```swift\n    /// @Environment(\\.swiftMessagesHide) private var hide\n    /// ```\n    ///\n    /// Then you can call it like this:\n    /// ```swift\n    /// hide(animated: true)\n    /// ```\n    var swiftMessagesHide: SwiftMessagesHideAction {\n        get { self[SwiftMessagesHideKey.self] }\n        set { self[SwiftMessagesHideKey.self] = newValue }\n    }\n}\n\nprivate struct SwiftMessagesHideKey: EnvironmentKey {\n    /// Default to our action struct, which itself defaults to animated.\n    static let defaultValue: SwiftMessagesHideAction = SwiftMessagesHideAction()\n}\n"
  },
  {
    "path": "SwiftMessages/SwiftMessagesSegue.swift",
    "content": "//\n//  SwiftMessagesSegue.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 5/30/18.\n//  Copyright © 2018 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\n\n/**\n `SwiftMessagesSegue` is a configurable subclass of `UIStoryboardSegue` that utilizes\n SwiftMessages to present and dismiss modal view controllers. It performs these transitions by\n becoming your view controller's `transitioningDelegate` and calling SwiftMessage's `show()`\n and `hide()` under the hood.\n\n To use `SwiftMessagesSegue` with Interface Builder, control-drag a segue, then select\n \"swift messages\" from the Segue Type dialog. This configures a default transition. There are\n two suggested ways to further configure the transition by setting options on `SwiftMessagesSegue`.\n First, and recommended, you may subclass `SwiftMessagesSegue` and override `init(identifier:source:destination:)`.\n Subclasses will automatically appear in the segue type dialog using an auto-generated name (for example, the\n name for \"VeryNiceSegue\" would be \"very nice\"). Second, you may override `prepare(for:sender:)` in the\n presenting view controller and downcast the segue to `SwiftMessagesSegue`.\n\n `SwiftMessagesSegue` can be used without an associated storyboard or segue by doing the following in\n the presenting view controller.\n\n     let destinationVC = ... // make a reference to a destination view controller\n     let segue = SwiftMessagesSegue(identifier: nil, source: self, destination: destinationVC)\n     ... // do any configuration here\n     segue.perform()\n\n To dismiss, call the UIKit API on the presenting view controller:\n\n     dismiss(animated: true, completion: nil)\n\n It is not necessary to retain `segue` because it retains itself until dismissal. However, you can\n retain it if you plan to `perform()` more than once.\n\n #### Present the controller on top of all controllers\n\n If you don't know the presenter or you don't want to pass it as a source, like when you\n have a completely separated message controller, you can pass a `WindowViewController`\n as the `source` argument of the segue's initializer.\n\n By default, the window will be shown in the current window scene at `.normal` window level.\n However, these parameters can be customized by initializing the view controller with a `SwiftMessages.Config` that has the `SwiftMessages.Config.presentationContext` set to either `.window` or `.windowScene`:\n\n + note: Some additional details:\n 1. Your view controller's view will be embedded in a `SwiftMessages.BaseView` in order to\n utilize some SwiftMessages features. This view can be accessed and configured via the\n `SwiftMessagesSegue.messageView` property. For example, you may configure a default drop\n shadow by calling `segue.messageView.configureDropShadow()`.\n 2. SwiftMessagesSegue provides static default view controller sizing based on device.\n However, it is recommended that you specify sizing appropriate for your content using\n one of the following methods.\n    1. Define sufficient width and height constraints in your view controller.\n    2. Set `preferredContentSize` (a.k.a \"Use Preferred Explicit Size\" in Interface Builder's\n       attribute inspector). Zeros are ignored, e.g. `CGSize(width: 0, height: 350)` only\n       affects the height.\n    3. Add explicit width and/or height constraints to `segue.messageView.backgroundView`.\n    Note that `Layout.topMessage` and `Layout.bottomMessage` are always full screen width.\n    For other layouts, the there is a maximum 500pt width on iPad (regular horizontal size class)\n    at 950 priority, which can be overridden by adding higher-priority constraints.\n \n See the \"View Controllers\" selection in the Demo app for examples.\n */\n\nopen class SwiftMessagesSegue: UIStoryboardSegue {\n\n    /**\n     Specifies one of the pre-defined layouts, mirroring a subset of `MessageView.Layout`.\n     */\n    public enum Layout {\n\n        /// The standard message view layout on top.\n        case topMessage\n\n        /// The standard message view layout on bottom.\n        case bottomMessage\n\n        /// A floating card-style view with rounded corners on top\n        case topCard\n\n        /// A floating tab-style view with rounded corners on bottom\n        case topTab\n\n        /// A floating card-style view with rounded corners on bottom\n        case bottomCard\n\n        /// A floating tab-style view with rounded corners on top\n        case bottomTab\n\n        /// A floating card-style view typically used with `.center` presentation style.\n        case centered\n    }\n\n    /**\n     Specifies how the view controller's view is installed into the\n     containing message view.\n     */\n    public enum Containment {\n\n        /**\n         The view controller's view is installed for edge-to-edge display, extending into the safe areas\n         to the device edges. This is done by calling `messageView.installContentView(:insets:)`\n         See that method's documentation for additional details.\n        */\n        case content\n\n        /**\n         The view controller's view is installed for card-style layouts, inset from the margins\n         and avoiding safe areas. This is done by calling `messageView.installBackgroundView(:insets:)`.\n         See that method's documentation for details.\n        */\n        case background\n\n        /**\n         The view controller's view is installed for tab-style layouts, inset from the side margins, but extending\n         to the device edge on the top or bottom. This is done by calling `messageView.installBackgroundVerticalView(:insets:)`.\n         See that method's documentation for details.\n         */\n        case backgroundVertical\n    }\n\n    /// The presentation style to use. See the SwiftMessages.PresentationStyle for details.\n    public var presentationStyle: SwiftMessages.PresentationStyle {\n        get { return messenger.defaultConfig.presentationStyle }\n        set { messenger.defaultConfig.presentationStyle = newValue }\n    }\n\n    /// The dim mode to use. See the SwiftMessages.DimMode for details.\n    public var dimMode: SwiftMessages.DimMode {\n        get { return messenger.defaultConfig.dimMode}\n        set { messenger.defaultConfig.dimMode = newValue }\n    }\n    \n    // duration\n    public var duration: SwiftMessages.Duration {\n        get { return messenger.defaultConfig.duration}\n        set { messenger.defaultConfig.duration = newValue }\n    }\n\n    /// Specifies whether or not the interactive pan-to-hide gesture is enabled\n    /// on the message view. The default value is `true`, but may not be appropriate\n    /// for view controllers that use swipe or pan gestures.\n    public var interactiveHide: Bool {\n        get { return messenger.defaultConfig.interactiveHide }\n        set { messenger.defaultConfig.interactiveHide = newValue }\n    }\n\n    /// Specifies an optional array of event listeners.\n    public var eventListeners: [SwiftMessages.EventListener] {\n        get { return messenger.defaultConfig.eventListeners }\n        set { messenger.defaultConfig.eventListeners = newValue }\n    }\n\n    /**\n     Normally, the destination view controller's `modalPresentationStyle` is changed\n     to `.custom` in the `perform()` function. Set this property to `false` to prevent it from\n     being overridden.\n    */\n    public var overrideModalPresentationStyle: Bool = true\n\n    /**\n     The view that is passed to `SwiftMessages.show(config:view:)` during presentation.\n     The view controller's view is installed into `containerView`, which is itself installed\n     into `messageView`. `SwiftMessagesSegue` does this installation automatically based on the\n     value of the `containment` property. `BaseView` is the parent of `MessageView` and provides a\n     number of configuration options that you may use. For example, you may configure a default drop\n     shadow by calling `messageView.configureDropShadow()`.\n     */\n    public var messageView = BaseView()\n\n    /**\n     The view controller's view is embedded in `containerView` before being installed into\n     `messageView`. This view provides configurable squircle (round) corners (see the parent\n     class `CornerRoundingView`).\n    */\n    public var containerView: CornerRoundingView = CornerRoundingView()\n\n    /**\n     Specifies how the view controller's view is installed into the\n     containing message view. See `Containment` for details.\n     */\n    public var containment: Containment = .content\n\n    /**\n     Supply an instance of `KeyboardTrackingView` to have the message view avoid the keyboard.\n     */\n    public var keyboardTrackingView: KeyboardTrackingView? {\n        get {\n            return messenger.defaultConfig.keyboardTrackingView\n        }\n        set {\n            messenger.defaultConfig.keyboardTrackingView = newValue\n        }\n    }\n\n    private var messenger = SwiftMessages()\n    private var selfRetainer: SwiftMessagesSegue? = nil\n    private lazy var hider = { return TransitioningDismisser(segue: self) }()\n\n    private lazy var presenter = {\n        return Presenter(config: messenger.defaultConfig, view: messageView, delegate: messenger)\n    }()\n\n    override open func perform() {\n        (source as? WindowViewController)?.install()\n        selfRetainer = self\n        startReleaseMonitor()\n        if overrideModalPresentationStyle {\n            destination.modalPresentationStyle = .custom\n        }\n        destination.transitioningDelegate = self\n        source.present(destination, animated: true, completion: nil)\n    }\n\n    override public init(identifier: String?, source: UIViewController, destination: UIViewController) {\n        super.init(identifier: identifier, source: source, destination: destination)\n        dimMode = .gray(interactive: true)\n        messenger.defaultConfig.duration = .forever\n    }\n\n    fileprivate let safeAreaWorkaroundViewController = UIViewController()\n\n    /// The self-retainer will not allow the segue, presenting and presented view controllers to be released if the presenting view controller\n    /// is removed without first dismissing. This monitor handles that scenario by setting `self.selfRetainer = nil` if\n    /// the presenting view controller is no longer in the heirarchy.\n    private func startReleaseMonitor() {\n        Task { @MainActor [weak self] in\n            try? await Task.sleep(seconds: 2)\n            guard let self = self else { return }\n            switch self.source.view.window {\n            case .none: self.selfRetainer = nil\n            case .some: self.startReleaseMonitor()\n            }\n        }\n    }\n}\n\nextension SwiftMessagesSegue {\n    /// A convenience method for configuring some pre-defined layouts that mirror a subset of `MessageView.Layout`.\n    public func configure(layout: Layout) {\n        messageView.bounceAnimationOffset = 0\n        containment = .content\n        containerView.cornerRadius = 0\n        containerView.roundsLeadingCorners = false\n        messageView.configureDropShadow()\n        switch layout {\n        case .topMessage:\n            messageView.layoutMarginAdditions = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)\n            messageView.collapseLayoutMarginAdditions = false\n            let animation = TopBottomAnimation(style: .top)\n            animation.springDamping = 1\n            presentationStyle = .custom(animator: animation)\n        case .bottomMessage:\n            messageView.layoutMarginAdditions = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)\n            messageView.collapseLayoutMarginAdditions = false\n            let animation = TopBottomAnimation(style: .bottom)\n            animation.springDamping = 1\n            presentationStyle = .custom(animator: animation)\n        case .topCard:\n            containment = .background\n            messageView.layoutMarginAdditions = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)\n            messageView.collapseLayoutMarginAdditions = true\n            containerView.cornerRadius = 15\n            presentationStyle = .top\n        case .bottomCard:\n            containment = .background\n            messageView.layoutMarginAdditions = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)\n            messageView.collapseLayoutMarginAdditions = true\n            containerView.cornerRadius = 15\n            presentationStyle = .bottom\n        case .topTab:\n            containment = .backgroundVertical\n            messageView.layoutMarginAdditions = UIEdgeInsets(top: 20, left: 10, bottom: 20, right: 10)\n            messageView.collapseLayoutMarginAdditions = true\n            containerView.cornerRadius = 15\n            containerView.roundsLeadingCorners = true\n            let animation = TopBottomAnimation(style: .top)\n            animation.springDamping = 1\n            presentationStyle = .custom(animator: animation)\n        case .bottomTab:\n            containment = .backgroundVertical\n            messageView.layoutMarginAdditions = UIEdgeInsets(top: 20, left: 10, bottom: 20, right: 10)\n            messageView.collapseLayoutMarginAdditions = true\n            containerView.cornerRadius = 15\n            containerView.roundsLeadingCorners = true\n            let animation = TopBottomAnimation(style: .bottom)\n            animation.springDamping = 1\n            presentationStyle = .custom(animator: animation)\n        case .centered:\n            containment = .background\n            messageView.layoutMarginAdditions = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)\n            messageView.collapseLayoutMarginAdditions = true\n            containerView.cornerRadius = 15\n            presentationStyle = .center\n        }\n    }\n}\n\nextension SwiftMessagesSegue: UIViewControllerTransitioningDelegate {\n    public func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {\n        let shower = TransitioningPresenter(segue: self)\n        let hider = self.hider\n        messenger.defaultConfig.eventListeners.append { [weak self] in\n            switch $0 {\n            case .didShow:\n                shower.completeTransition?(true)\n            case .didHide:\n                if let completeTransition = hider.completeTransition {\n                    completeTransition(true)\n                } else {\n                    // Case where message is internally hidden by SwiftMessages, such as with a\n                    // dismiss gesture, rather than by view controller dismissal.\n                    source.dismiss(animated: false, completion: nil)\n                }\n                (source as? WindowViewController)?.uninstall()\n                self?.selfRetainer = nil\n            default: break\n            }\n        }\n        return shower\n    }\n\n    public func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {\n        return hider\n    }\n}\n\nextension SwiftMessagesSegue {\n    private class TransitioningPresenter: NSObject, UIViewControllerAnimatedTransitioning {\n\n        fileprivate private(set) var completeTransition: ((Bool) -> Void)?\n        private weak var segue: SwiftMessagesSegue?\n\n        fileprivate init(segue: SwiftMessagesSegue) {\n            self.segue = segue\n        }\n\n        func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {\n            return segue?.presenter.animator.showDuration ?? 0.5\n        }\n\n        func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {\n            guard let segue = segue,\n                let toView = transitionContext.view(forKey: .to) else {\n                transitionContext.completeTransition(false)\n                return\n            }\n            completeTransition = transitionContext.completeTransition\n            let transitionContainer = transitionContext.containerView\n            toView.translatesAutoresizingMaskIntoConstraints = false\n            segue.containerView.addSubview(toView)\n            segue.containerView.topAnchor.constraint(equalTo: toView.topAnchor).isActive = true\n            segue.containerView.bottomAnchor.constraint(equalTo: toView.bottomAnchor).isActive = true\n            segue.containerView.leadingAnchor.constraint(equalTo: toView.leadingAnchor).isActive = true\n            segue.containerView.trailingAnchor.constraint(equalTo: toView.trailingAnchor).isActive = true\n            // Install the `toView` into the message view.\n            switch segue.containment {\n            case .content:\n                segue.messageView.installContentView(segue.containerView)\n            case .background:\n                segue.messageView.installBackgroundView(segue.containerView)\n            case .backgroundVertical:\n                segue.messageView.installBackgroundVerticalView(segue.containerView)\n            }\n            let toVC = transitionContext.viewController(forKey: .to)\n            if let preferredHeight = toVC?.preferredContentSize.height,\n                preferredHeight > 0 {\n                segue.containerView.heightAnchor.constraint(equalToConstant: preferredHeight).with(priority: UILayoutPriority(rawValue: 951)).isActive = true\n            }\n            if let preferredWidth = toVC?.preferredContentSize.width,\n                preferredWidth > 0 {\n                segue.containerView.widthAnchor.constraint(equalToConstant: preferredWidth).with(priority: UILayoutPriority(rawValue: 951)).isActive = true\n            }\n            segue.presenter.config.presentationContext = .view(transitionContainer)\n            segue.messenger.show(presenter: segue.presenter)\n        }\n    }\n}\n\nextension SwiftMessagesSegue {\n    private class TransitioningDismisser: NSObject, UIViewControllerAnimatedTransitioning {\n\n        fileprivate private(set) var completeTransition: ((Bool) -> Void)?\n        private weak var segue: SwiftMessagesSegue?\n\n        fileprivate init(segue: SwiftMessagesSegue) {\n            self.segue = segue\n        }\n\n        func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {\n            return segue?.presenter.animator.hideDuration ?? 0.5\n        }\n\n        func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {\n            guard let messenger = segue?.messenger else {\n                transitionContext.completeTransition(false)\n                return\n            }\n            completeTransition = transitionContext.completeTransition\n            messenger.hide()\n        }\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/Task+Extensions.swift",
    "content": "//\n//  Task+Extensions.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 12/3/23.\n//  Copyright © 2023 SwiftKick Mobile. All rights reserved.\n//\n\nimport Foundation\n\nextension Task where Success == Never, Failure == Never {\n    static func sleep(seconds: TimeInterval) async throws {\n        try await sleep(nanoseconds: UInt64(seconds * 1_000_000_000))\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/Theme.swift",
    "content": "//\n//  Theme.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 8/7/16.\n//  Copyright © 2016 SwiftKick Mobile LLC. All rights reserved.\n//\n\nimport UIKit\n\n/// The theme enum specifies the built-in theme options\npublic enum Theme {\n    case info\n    case success\n    case warning\n    case error\n}\n\n/// The Icon enum provides type-safe access to the included icons.\npublic enum Icon: String {\n    \n    case error = \"errorIcon\"\n    case warning = \"warningIcon\"\n    case success = \"successIcon\"\n    case info = \"infoIcon\"\n    case errorLight = \"errorIconLight\"\n    case warningLight = \"warningIconLight\"\n    case successLight = \"successIconLight\"\n    case infoLight = \"infoIconLight\"\n    case errorSubtle = \"errorIconSubtle\"\n    case warningSubtle = \"warningIconSubtle\"\n    case successSubtle = \"successIconSubtle\"\n    case infoSubtle = \"infoIconSubtle\"\n    \n    /// Returns the associated image.\n    public var image: UIImage {\n        return UIImage(named: rawValue, in: Bundle.sm_frameworkBundle(), compatibleWith: nil)!.withRenderingMode(.alwaysTemplate)\n    }\n}\n\n/// The IconStyle enum specifies the different variations of the included icons.\npublic enum IconStyle {\n    \n    case `default`\n    case light\n    case subtle\n    case none\n    \n    /// Returns the image for the given theme\n    public func image(theme: Theme) -> UIImage? {\n        switch (theme, self) {\n        case (.info, .default): return Icon.info.image\n        case (.info, .light): return Icon.infoLight.image\n        case (.info, .subtle): return Icon.infoSubtle.image\n        case (.success, .default): return Icon.success.image\n        case (.success, .light): return Icon.successLight.image\n        case (.success, .subtle): return Icon.successSubtle.image\n        case (.warning, .default): return Icon.warning.image\n        case (.warning, .light): return Icon.warningLight.image\n        case (.warning, .subtle): return Icon.warningSubtle.image\n        case (.error, .default): return Icon.error.image\n        case (.error, .light): return Icon.errorLight.image\n        case (.error, .subtle): return Icon.errorSubtle.image\n        default: return nil\n        }\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/TopBottomAnimation.swift",
    "content": "//\n//  TopBottomAnimation.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 6/4/17.\n//  Copyright © 2017 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\n\n@MainActor\npublic class TopBottomAnimation: NSObject, Animator {\n\n    public weak var delegate: AnimationDelegate?\n\n    public let style: TopBottomAnimationStyle\n\n    public var showDuration: TimeInterval = 0.4\n\n    public var hideDuration: TimeInterval = 0.2\n\n    public var springDamping: CGFloat = 0.8\n\n    public var closeSpeedThreshold: CGFloat = 750.0;\n\n    public var closePercentThreshold: CGFloat = 0.33;\n\n    public var closeAbsoluteThreshold: CGFloat = 75.0;\n\n    public private(set) lazy var panGestureRecognizer: UIPanGestureRecognizer = {\n        let pan = UIPanGestureRecognizer()\n        pan.addTarget(self, action: #selector(pan(_:)))\n        return pan\n    }()\n\n    weak var messageView: UIView?\n    weak var containerView: UIView?\n    var context: AnimationContext?\n\n    public init(style: TopBottomAnimationStyle) {\n        self.style = style\n    }\n\n    init(style: TopBottomAnimationStyle, delegate: AnimationDelegate) {\n        self.style = style\n        self.delegate = delegate\n    }\n\n    public func show(context: AnimationContext, completion: @escaping AnimationCompletion) {\n        NotificationCenter.default.addObserver(self, selector: #selector(adjustMargins), name: UIDevice.orientationDidChangeNotification, object: nil)\n        install(context: context)\n        showAnimation(completion: completion)\n    }\n\n    public func hide(context: AnimationContext, completion: @escaping AnimationCompletion) {\n        NotificationCenter.default.removeObserver(self)\n        let view = context.messageView\n        self.context = context\n        UIView.animate(withDuration: hideDuration, delay: 0, options: [.beginFromCurrentState, .curveEaseIn], animations: {\n            switch self.style {\n            case .top:\n                view.transform = CGAffineTransform(translationX: 0, y: -view.frame.height)\n            case .bottom:\n                view.transform = CGAffineTransform(translationX: 0, y: view.frame.maxY + view.frame.height)\n            }\n        }, completion: { completed in\n            #if SWIFTMESSAGES_APP_EXTENSIONS\n            completion(completed)\n            #else\n            // Fix #131 by always completing if application isn't active.\n            completion(completed || UIApplication.shared.applicationState != .active)\n            #endif\n        })\n    }\n\n    func install(context: AnimationContext) {\n        let view = context.messageView\n        let container = context.containerView\n        messageView = view\n        containerView = container\n        self.context = context\n        if let adjustable = context.messageView as? MarginAdjustable {\n            bounceOffset = adjustable.bounceAnimationOffset\n        }\n        view.translatesAutoresizingMaskIntoConstraints = false\n        container.addSubview(view)\n        view.leadingAnchor.constraint(equalTo: container.leadingAnchor).isActive = true\n        view.trailingAnchor.constraint(equalTo: container.trailingAnchor).isActive = true\n        switch style {\n        case .top:\n            view.topAnchor.constraint(equalTo: container.topAnchor, constant: -bounceOffset).with(priority: UILayoutPriority(200)).isActive = true\n        case .bottom:\n            view.bottomAnchor.constraint(equalTo: container.bottomAnchor, constant: bounceOffset).with(priority: UILayoutPriority(200)).isActive = true\n        }\n        // Important to layout now in order to get the right safe area insets\n        container.layoutIfNeeded()\n        adjustMargins()\n        container.layoutIfNeeded()\n        let animationDistance = view.frame.height\n        switch style {\n        case .top:\n            view.transform = CGAffineTransform(translationX: 0, y: -animationDistance)\n        case .bottom:\n            view.transform = CGAffineTransform(translationX: 0, y: animationDistance)\n        }\n        if context.interactiveHide {\n            if let view = view as? BackgroundViewable {\n                view.backgroundView.addGestureRecognizer(panGestureRecognizer)\n            } else {\n                view.addGestureRecognizer(panGestureRecognizer)\n            }\n        }\n        if let view = view as? BackgroundViewable,\n            let cornerRoundingView = view.backgroundView as? CornerRoundingView,\n            cornerRoundingView.roundsLeadingCorners {\n            switch style {\n            case .top:\n                cornerRoundingView.roundedCorners = [.bottomLeft, .bottomRight]\n            case .bottom:\n                cornerRoundingView.roundedCorners = [.topLeft, .topRight]\n            }\n        }\n    }\n\n    @objc public func adjustMargins() {\n        guard let adjustable = messageView as? MarginAdjustable & UIView,\n            let context = context else { return }\n        adjustable.preservesSuperviewLayoutMargins = false\n        adjustable.insetsLayoutMarginsFromSafeArea = false\n        var layoutMargins = adjustable.defaultMarginAdjustment(context: context)\n        switch style {\n        case .top:\n            layoutMargins.top += bounceOffset\n        case .bottom:\n            layoutMargins.bottom += bounceOffset\n        }\n        adjustable.layoutMargins = layoutMargins\n    }\n\n    func showAnimation(completion: @escaping AnimationCompletion) {\n        guard let view = messageView else {\n            completion(false)\n            return\n        }\n        let animationDistance = abs(view.transform.ty)\n        // Cap the initial velocity at zero because the bounceOffset may not be great\n        // enough to allow for greater bounce induced by a quick panning motion.\n        let initialSpringVelocity = animationDistance == 0.0 ? 0.0 : min(0.0, closeSpeed / animationDistance)\n        UIView.animate(withDuration: showDuration, delay: 0.0, usingSpringWithDamping: springDamping, initialSpringVelocity: initialSpringVelocity, options: [.beginFromCurrentState, .curveLinear, .allowUserInteraction], animations: {\n            view.transform = .identity\n        }, completion: { completed in\n            // Fix #131 by always completing if application isn't active.\n            #if SWIFTMESSAGES_APP_EXTENSIONS\n            completion(completed)\n            #else\n            completion(completed || UIApplication.shared.applicationState != .active)\n            #endif\n        })\n    }\n\n    fileprivate var bounceOffset: CGFloat = 5\n\n    /*\n     MARK: - Pan to close\n     */\n\n    fileprivate var closing = false\n    fileprivate var rubberBanding = false\n    fileprivate var closeSpeed: CGFloat = 0.0\n    fileprivate var closePercent: CGFloat = 0.0\n    fileprivate var panTranslationY: CGFloat = 0.0\n\n    @objc func pan(_ pan: UIPanGestureRecognizer) {\n        switch pan.state {\n        case .changed:\n            guard let view = messageView else { return }\n            let height = view.bounds.height - bounceOffset\n            if height <= 0 { return }\n            var velocity = pan.velocity(in: view)\n            var translation = pan.translation(in: view)\n            if case .top = style {\n                velocity.y *= -1.0\n                translation.y *= -1.0\n            }\n            var translationAmount = translation.y >= 0 ? translation.y : -pow(abs(translation.y), 0.7)\n            if !closing {\n                // Turn on rubber banding if background view is inset from message view.\n                if let background = (messageView as? BackgroundViewable)?.backgroundView, background != view {\n                    switch style {\n                    case .top:\n                        rubberBanding = background.frame.minY > 0\n                    case .bottom:\n                        rubberBanding = background.frame.maxY < view.bounds.height\n                    }\n                }\n                if !rubberBanding && translationAmount < 0 { return }\n                closing = true\n                delegate?.panStarted(animator: self)\n            }\n            if !rubberBanding && translationAmount < 0 { translationAmount = 0 }\n            switch style {\n            case .top:\n                view.transform = CGAffineTransform(translationX: 0, y: -translationAmount)\n            case .bottom:\n                view.transform = CGAffineTransform(translationX: 0, y: translationAmount)\n            }\n            closeSpeed = velocity.y\n            closePercent = translation.y / height\n            panTranslationY = translation.y\n        case .ended, .cancelled:\n            if closeSpeed > closeSpeedThreshold || closePercent > closePercentThreshold || panTranslationY > closeAbsoluteThreshold {\n                delegate?.hide(animator: self)\n            } else {\n                closing = false\n                rubberBanding = false\n                closeSpeed = 0.0\n                closePercent = 0.0\n                panTranslationY = 0.0\n                showAnimation(completion: { (completed) in\n                    self.delegate?.panEnded(animator: self)\n                })\n            }\n        default:\n            break\n        }\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/TopBottomAnimationStyle.swift",
    "content": "//\n//  TopBottomAnimationStyle.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 6/23/24.\n//  Copyright © 2024 SwiftKick Mobile. All rights reserved.\n//\n\npublic enum TopBottomAnimationStyle {\n    case top\n    case bottom\n}\n"
  },
  {
    "path": "SwiftMessages/TopBottomPresentable.swift",
    "content": "//\n//  File.swift\n//  \n//\n//  Created by Julien Di Marco on 23/04/2024.\n//\n\nimport Foundation\n\n// MARK: - TopBottom Presentable Definition\n\n@MainActor\nprotocol TopBottomPresentable {\n    var topBottomStyle: TopBottomAnimationStyle? { get }\n}\n\n// MARK: - TopBottom Presentable Conformances\n\nextension TopBottomAnimation: TopBottomPresentable {\n    var topBottomStyle: TopBottomAnimationStyle? { return style }\n}\n\nextension PhysicsAnimation: TopBottomPresentable {\n    var topBottomStyle: TopBottomAnimationStyle? {\n        switch placement {\n        case .top: return .top\n        case .bottom: return .bottom\n        default: return nil\n        }\n    }\n}\n\n// MARK: - Presentation Style Convenience\n\nextension SwiftMessages.PresentationStyle {\n    /// A temporary workaround to allow custom presentation contexts using `TopBottomAnimation`\n    /// to display properly behind bars. THe long term solution is to refactor all of the\n    /// presentation context logic to work with safe area insets.\n    @MainActor\n    var topBottomStyle: TopBottomAnimationStyle? {\n        switch self {\n        case .top: return .top\n        case .bottom: return .bottom\n        case .custom(let animator as TopBottomPresentable): return animator.topBottomStyle\n        case .center: return nil\n        default: return nil\n        }\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/UIEdgeInsets+Extensions.swift",
    "content": "//\n//  UIEdgeInsets+Extensions.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 5/23/18.\n//  Copyright © 2018 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\n\nextension UIEdgeInsets {\n    public static func +(left: UIEdgeInsets, right: UIEdgeInsets) -> UIEdgeInsets {\n        let topSum = left.top + right.top\n        let leftSum = left.left + right.left\n        let bottomSum = left.bottom + right.bottom\n        let rightSum = left.right + right.right\n        return UIEdgeInsets(top: topSum, left: leftSum, bottom: bottomSum, right: rightSum)\n    }\n\n    public static func -(left: UIEdgeInsets, right: UIEdgeInsets) -> UIEdgeInsets {\n        let topSum = left.top - right.top\n        let leftSum = left.left - right.left\n        let bottomSum = left.bottom - right.bottom\n        let rightSum = left.right - right.right\n        return UIEdgeInsets(top: topSum, left: leftSum, bottom: bottomSum, right: rightSum)\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/UIViewController+Extensions.swift",
    "content": "//\n//  UIViewController+Extensions.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 8/5/16.\n//  Copyright © 2016 SwiftKick Mobile LLC. All rights reserved.\n//\n\nimport UIKit\n\nextension UIViewController {\n    \n    func sm_selectPresentationContextTopDown(_ config: SwiftMessages.Config) -> UIViewController {\n        let topBottomStyle = config.presentationStyle.topBottomStyle\n        if let presented = presentedViewController {\n            return presented.sm_selectPresentationContextTopDown(config)\n        } else if case .top? = topBottomStyle, let navigationController = sm_selectNavigationControllerTopDown() {\n            return navigationController\n        } else if case .bottom? = topBottomStyle, let tabBarController = sm_selectTabBarControllerTopDown() {\n            return tabBarController\n        }\n        return WindowViewController.newInstance(config: config)\n    }\n    \n    fileprivate func sm_selectNavigationControllerTopDown() -> UINavigationController? {\n        if let presented = presentedViewController {\n            return presented.sm_selectNavigationControllerTopDown()\n        } else if let navigationController = self as? UINavigationController {\n            if navigationController.sm_isVisible(view: navigationController.navigationBar) {\n                return navigationController\n            }\n            return navigationController.topViewController?.sm_selectNavigationControllerTopDown()\n        } else if let tabBarController = self as? UITabBarController {\n            return tabBarController.selectedViewController?.sm_selectNavigationControllerTopDown()\n        }\n        return nil\n    }\n\n    fileprivate func sm_selectTabBarControllerTopDown() -> UITabBarController? {\n        if let presented = presentedViewController {\n            return presented.sm_selectTabBarControllerTopDown()\n        } else if let navigationController = self as? UINavigationController {\n            return navigationController.topViewController?.sm_selectTabBarControllerTopDown()\n        } else if let tabBarController = self as? UITabBarController {\n            if tabBarController.sm_isVisible(view: tabBarController.tabBar) {\n                return tabBarController\n            }\n            return tabBarController.selectedViewController?.sm_selectTabBarControllerTopDown()\n        }\n        return nil\n    }\n\n    func sm_selectPresentationContextBottomUp(_ config: SwiftMessages.Config) -> UIViewController {\n        let topBottomStyle = config.presentationStyle.topBottomStyle\n        if let parent = parent {\n            if let navigationController = parent as? UINavigationController {\n                if case .top? = topBottomStyle, navigationController.sm_isVisible(view: navigationController.navigationBar) {\n                    return navigationController\n                }\n                return navigationController.sm_selectPresentationContextBottomUp(config)\n            } else if let tabBarController = parent as? UITabBarController {\n                if case .bottom? = topBottomStyle, tabBarController.sm_isVisible(view: tabBarController.tabBar) {\n                    return tabBarController\n                }\n                return tabBarController.sm_selectPresentationContextBottomUp(config)\n            }\n        }\n        if self.view is UITableView {\n            // Never select scroll view as presentation context\n            // because, you know, it scrolls.\n            if let parent = self.parent {\n                return parent.sm_selectPresentationContextBottomUp(config)\n            } else {\n                return WindowViewController.newInstance(config: config)\n            }\n        }\n        return self\n    }\n    \n    func sm_isVisible(view: UIView) -> Bool {\n        if view.isHidden { return false }\n        if view.alpha == 0.0 { return false }\n        let frame = self.view.convert(view.bounds, from: view)\n        if !self.view.bounds.intersects(frame) { return false }\n        return true\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/UIWindow+Extensions.swift",
    "content": "//\n//  UIWindow+Extensions.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 3/11/21.\n//  Copyright © 2021 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\n\nextension UIWindow {\n    #if !SWIFTMESSAGES_APP_EXTENSIONS\n    static var keyWindow: UIWindow? {\n        return UIApplication.shared.connectedScenes\n            .sorted { $0.activationState.sortPriority < $1.activationState.sortPriority }\n            .compactMap { $0 as? UIWindowScene }\n            .compactMap { $0.windows.first { $0.isKeyWindow } }\n            .first\n    }\n    #endif\n}\n\n@available(iOS 13.0, *)\nprivate extension UIScene.ActivationState {\n    var sortPriority: Int {\n        switch self {\n        case .foregroundActive: return 1\n        case .foregroundInactive: return 2\n        case .background: return 3\n        case .unattached: return 4\n        @unknown default: return 5\n        }\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/Weak.swift",
    "content": "//\n//  Weak.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 6/4/17.\n//  Copyright © 2017 SwiftKick Mobile. All rights reserved.\n//\n\nimport Foundation\n\npublic class Weak<T: AnyObject> {\n    public weak var value : T?\n    public init(value: T?) {\n        self.value = value\n    }\n}\n"
  },
  {
    "path": "SwiftMessages/WindowScene.swift",
    "content": "import Foundation\nimport UIKit\n\n/// A workaround for the change in Xcode 13 that prevents using `@availability` attribute\n/// with `enum` cases containing associated values.\npublic protocol WindowScene {}\n\n@available(iOS 13.0, *)\nextension UIWindowScene: WindowScene {}\n"
  },
  {
    "path": "SwiftMessages/WindowViewController.swift",
    "content": "//\n//  WindowViewController.swift\n//  SwiftMessages\n//\n//  Created by Timothy Moose on 8/1/16.\n//  Copyright © 2016 SwiftKick Mobile LLC. All rights reserved.\n//\n\nimport UIKit\n\nopen class WindowViewController: UIViewController\n{\n    override open var shouldAutorotate: Bool {\n        return config.shouldAutorotate\n    }\n\n    convenience public init() {\n        self.init(config: SwiftMessages.Config())\n    }\n\n    public init(config: SwiftMessages.Config) {\n        self.config = config\n        let view = PassthroughView()\n        let window = PassthroughWindow(hitTestView: view)\n        self.window = window\n        super.init(nibName: nil, bundle: nil)\n        self.view = view\n        window.rootViewController = self\n        window.windowLevel = config.windowLevel ?? UIWindow.Level.normal\n        window.overrideUserInterfaceStyle = config.overrideUserInterfaceStyle\n    }\n\n    func install() {\n        window?.windowScene = config.windowScene\n        #if !SWIFTMESSAGES_APP_EXTENSIONS\n        previousKeyWindow = UIWindow.keyWindow\n        #endif\n        show(\n            becomeKey: config.shouldBecomeKeyWindow,\n            frame: config.windowScene?.coordinateSpace.bounds\n        )\n    }\n\n    private func show(becomeKey: Bool, frame: CGRect? = nil) {\n        guard let window = window else { return }\n        window.frame = frame ?? UIScreen.main.bounds\n        if becomeKey {\n            window.makeKeyAndVisible()\n        } else {\n            window.isHidden = false\n        }\n    }\n    \n    func uninstall() {\n        if window?.isKeyWindow == true {\n            previousKeyWindow?.makeKey()\n        }\n        window?.windowScene = nil\n        window?.isHidden = true\n        window = nil\n    }\n    \n    required public init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    override open var preferredStatusBarStyle: UIStatusBarStyle {\n        return config.preferredStatusBarStyle ?? super.preferredStatusBarStyle\n    }\n\n    open override var prefersStatusBarHidden: Bool {\n        return config.prefersStatusBarHidden ?? super.prefersStatusBarHidden\n    }\n\n    // MARK: - Variables\n\n    private var window: UIWindow?\n    private weak var previousKeyWindow: UIWindow?\n\n    let config: SwiftMessages.Config\n}\n\nextension WindowViewController {\n    static func newInstance(config: SwiftMessages.Config) -> WindowViewController {\n        return config.windowViewController?(config) ?? WindowViewController(config: config)\n    }\n}\n"
  },
  {
    "path": "SwiftMessages.podspec",
    "content": "Pod::Spec.new do |spec|\n    spec.name             = 'SwiftMessages'\n    spec.version          = '10.0.2'\n    spec.license          = { :type => 'MIT' }\n    spec.homepage         = 'https://github.com/SwiftKickMobile/SwiftMessages'\n    spec.authors          = { 'Timothy Moose' => 'tim@swiftkickmobile.com' }\n    spec.summary          = 'A very flexible message bar for iOS written in Swift.'\n    spec.source           = {:git => 'https://github.com/SwiftKickMobile/SwiftMessages.git', :tag => spec.version}\n    spec.platform         = :ios, '13.0'\n    spec.swift_version    = '5.0'\n    spec.ios.deployment_target = '13.0'\n    spec.framework        = 'UIKit'\n    spec.requires_arc     = true\n    spec.default_subspec  = 'App'\n\n    spec.subspec 'App' do |app|\n        app.source_files = 'SwiftMessages/**/*.swift'\n        app.resource_bundles = {'SwiftMessages' => ['SwiftMessages/Resources/*.*']}\n    end\n\n    spec.subspec 'AppExtension' do |ext|\n        ext.source_files  = 'SwiftMessages/**/*.swift'\n        ext.exclude_files = 'SwiftMessages/**/SegueConvenienceClasses.swift'\n        ext.resource_bundles = {'SwiftMessages_SwiftMessages' => ['SwiftMessages/Resources/**/*.*']}\n\n        # For app extensions, disabling code paths using unavailable API\n        ext.pod_target_xcconfig = {\n            'SWIFT_ACTIVE_COMPILATION_CONDITIONS' => 'SWIFTMESSAGES_APP_EXTENSIONS',\n            'GCC_PREPROCESSOR_DEFINITIONS' => 'SWIFTMESSAGES_APP_EXTENSIONS=1'\n        }\n    end\nend\n"
  },
  {
    "path": "SwiftMessages.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t0797E40E26EE12B400691606 /* WindowScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0797E40D26EE12B400691606 /* WindowScene.swift */; };\n\t\t220655121FAF82B600F4E00F /* MarginAdjustable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 220655111FAF82B600F4E00F /* MarginAdjustable+Extensions.swift */; };\n\t\t220D386E2597AA5B00BB2B88 /* SwiftMessages.Config+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 220D386D2597AA5B00BB2B88 /* SwiftMessages.Config+Extensions.swift */; };\n\t\t223DE69D2C29E50C000161E5 /* MessageGeometryProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 223DE69C2C29E50B000161E5 /* MessageGeometryProxy.swift */; };\n\t\t224C3C902C28A2F900B50B18 /* TopBottomPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 224C3C8F2C28A2F900B50B18 /* TopBottomPresentable.swift */; };\n\t\t224C3C932C28BC4900B50B18 /* TopBottomAnimationStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 224C3C922C28BC4400B50B18 /* TopBottomAnimationStyle.swift */; };\n\t\t224FB69921153B440081D4DE /* CALayer+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 224FB69821153B440081D4DE /* CALayer+Extensions.swift */; };\n\t\t225304622290C76E00A03ACF /* NSLayoutConstraint+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225304612290C76E00A03ACF /* NSLayoutConstraint+Extensions.swift */; };\n\t\t225304662293000C00A03ACF /* KeyboardTrackingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225304652293000C00A03ACF /* KeyboardTrackingView.swift */; };\n\t\t2270044B1FAFA6DD0045DDC3 /* PhysicsAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2270044A1FAFA6DD0045DDC3 /* PhysicsAnimation.swift */; };\n\t\t22774BA020B5EF2A00813732 /* UIEdgeInsets+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22774B9F20B5EF2A00813732 /* UIEdgeInsets+Extensions.swift */; };\n\t\t227BA6D920BF224A00E5A843 /* SwiftMessagesSegue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 227BA6D820BF224A00E5A843 /* SwiftMessagesSegue.swift */; };\n\t\t228DF5261FACAC51004F8A39 /* errorIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5231FACAC51004F8A39 /* errorIcon.png */; };\n\t\t228DF5271FACAC51004F8A39 /* errorIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5241FACAC51004F8A39 /* errorIcon@2x.png */; };\n\t\t228DF5281FACAC51004F8A39 /* errorIcon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5251FACAC51004F8A39 /* errorIcon@3x.png */; };\n\t\t228DF54A1FAD0806004F8A39 /* successIconLight@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5291FAD0802004F8A39 /* successIconLight@3x.png */; };\n\t\t228DF54B1FAD0806004F8A39 /* warningIconLight.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF52A1FAD0802004F8A39 /* warningIconLight.png */; };\n\t\t228DF54C1FAD0806004F8A39 /* errorIconLight.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF52B1FAD0802004F8A39 /* errorIconLight.png */; };\n\t\t228DF54D1FAD0806004F8A39 /* infoIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF52C1FAD0803004F8A39 /* infoIcon@2x.png */; };\n\t\t228DF54E1FAD0806004F8A39 /* warningIconSubtle.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF52D1FAD0803004F8A39 /* warningIconSubtle.png */; };\n\t\t228DF54F1FAD0806004F8A39 /* successIconSubtle@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF52E1FAD0803004F8A39 /* successIconSubtle@3x.png */; };\n\t\t228DF5501FAD0806004F8A39 /* infoIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF52F1FAD0803004F8A39 /* infoIcon.png */; };\n\t\t228DF5511FAD0806004F8A39 /* infoIconLight@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5301FAD0803004F8A39 /* infoIconLight@2x.png */; };\n\t\t228DF5521FAD0806004F8A39 /* successIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5311FAD0803004F8A39 /* successIcon.png */; };\n\t\t228DF5531FAD0806004F8A39 /* successIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5321FAD0803004F8A39 /* successIcon@2x.png */; };\n\t\t228DF5541FAD0806004F8A39 /* successIcon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5331FAD0803004F8A39 /* successIcon@3x.png */; };\n\t\t228DF5551FAD0806004F8A39 /* warningIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5341FAD0803004F8A39 /* warningIcon@2x.png */; };\n\t\t228DF5561FAD0806004F8A39 /* successIconSubtle.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5351FAD0803004F8A39 /* successIconSubtle.png */; };\n\t\t228DF5571FAD0806004F8A39 /* warningIconSubtle@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5361FAD0803004F8A39 /* warningIconSubtle@2x.png */; };\n\t\t228DF5581FAD0806004F8A39 /* errorIconSubtle.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5371FAD0803004F8A39 /* errorIconSubtle.png */; };\n\t\t228DF5591FAD0806004F8A39 /* successIconSubtle@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5381FAD0803004F8A39 /* successIconSubtle@2x.png */; };\n\t\t228DF55A1FAD0806004F8A39 /* errorIconLight@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5391FAD0804004F8A39 /* errorIconLight@3x.png */; };\n\t\t228DF55B1FAD0806004F8A39 /* warningIconLight@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF53A1FAD0804004F8A39 /* warningIconLight@3x.png */; };\n\t\t228DF55C1FAD0806004F8A39 /* warningIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF53B1FAD0804004F8A39 /* warningIcon.png */; };\n\t\t228DF55D1FAD0806004F8A39 /* warningIconLight@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF53C1FAD0804004F8A39 /* warningIconLight@2x.png */; };\n\t\t228DF55E1FAD0806004F8A39 /* warningIconSubtle@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF53D1FAD0804004F8A39 /* warningIconSubtle@3x.png */; };\n\t\t228DF55F1FAD0806004F8A39 /* errorIconLight@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF53E1FAD0804004F8A39 /* errorIconLight@2x.png */; };\n\t\t228DF5601FAD0806004F8A39 /* warningIcon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF53F1FAD0804004F8A39 /* warningIcon@3x.png */; };\n\t\t228DF5611FAD0806004F8A39 /* infoIcon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5401FAD0804004F8A39 /* infoIcon@3x.png */; };\n\t\t228DF5621FAD0806004F8A39 /* infoIconLight.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5411FAD0804004F8A39 /* infoIconLight.png */; };\n\t\t228DF5631FAD0806004F8A39 /* infoIconSubtle@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5421FAD0804004F8A39 /* infoIconSubtle@2x.png */; };\n\t\t228DF5641FAD0806004F8A39 /* errorIconSubtle@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5431FAD0805004F8A39 /* errorIconSubtle@2x.png */; };\n\t\t228DF5651FAD0806004F8A39 /* successIconLight@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5441FAD0805004F8A39 /* successIconLight@2x.png */; };\n\t\t228DF5661FAD0806004F8A39 /* errorIconSubtle@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5451FAD0805004F8A39 /* errorIconSubtle@3x.png */; };\n\t\t228DF5671FAD0806004F8A39 /* infoIconLight@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5461FAD0805004F8A39 /* infoIconLight@3x.png */; };\n\t\t228DF5681FAD0806004F8A39 /* infoIconSubtle.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5471FAD0805004F8A39 /* infoIconSubtle.png */; };\n\t\t228DF5691FAD0806004F8A39 /* successIconLight.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5481FAD0805004F8A39 /* successIconLight.png */; };\n\t\t228DF56A1FAD0806004F8A39 /* infoIconSubtle@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 228DF5491FAD0805004F8A39 /* infoIconSubtle@3x.png */; };\n\t\t228F7DDE2ACF703A006C9644 /* MessageHostingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 228F7DDB2ACF7039006C9644 /* MessageHostingView.swift */; };\n\t\t228F7DDF2ACF703A006C9644 /* SwiftMessageModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 228F7DDC2ACF703A006C9644 /* SwiftMessageModifier.swift */; };\n\t\t228F7DE02ACF703A006C9644 /* MessageViewConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 228F7DDD2ACF703A006C9644 /* MessageViewConvertible.swift */; };\n\t\t22982C172B6030B000852311 /* HapticMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22982C162B6030B000852311 /* HapticMessage.swift */; };\n\t\t2298C2051EE47DC900E2DDC1 /* Weak.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2298C2041EE47DC900E2DDC1 /* Weak.swift */; };\n\t\t2298C2071EE480D000E2DDC1 /* Animator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2298C2061EE480D000E2DDC1 /* Animator.swift */; };\n\t\t2298C2091EE486E300E2DDC1 /* TopBottomAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2298C2081EE486E300E2DDC1 /* TopBottomAnimation.swift */; };\n\t\t229F778125FAB1E9008C2ACB /* UIWindow+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 229F778025FAB1E9008C2ACB /* UIWindow+Extensions.swift */; };\n\t\t22D3B4562B1CEF76002D8665 /* Task+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22D3B4552B1CEF76002D8665 /* Task+Extensions.swift */; };\n\t\t22DFC9161EFF30F6001B1CA1 /* CenteredView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 22DFC9151EFF30F6001B1CA1 /* CenteredView.xib */; };\n\t\t22DFC9181F00674E001B1CA1 /* PhysicsPanHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22DFC9171F00674E001B1CA1 /* PhysicsPanHandler.swift */; };\n\t\t22E01F641E74EC8B00ACE19A /* MaskingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22E01F631E74EC8B00ACE19A /* MaskingView.swift */; };\n\t\t22E307FF1E74C5B100E35893 /* AccessibleMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22E307FE1E74C5B100E35893 /* AccessibleMessage.swift */; };\n\t\t22F27951210CE25900273E7F /* CornerRoundingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22F27950210CE25900273E7F /* CornerRoundingView.swift */; };\n\t\t86589D471D64B6E40041676C /* BaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86589D461D64B6E40041676C /* BaseView.swift */; };\n\t\t86589D911D692B1C0041676C /* TabView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 86589D901D692B1B0041676C /* TabView.xib */; };\n\t\t867BED211D622793005212E3 /* BackgroundViewable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 867BED201D622793005212E3 /* BackgroundViewable.swift */; };\n\t\t86B48AEF1D5A41C900063E2B /* SwiftMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 86B48AEE1D5A41C900063E2B /* SwiftMessages.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t86B48AF61D5A41C900063E2B /* SwiftMessages.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 86B48AEC1D5A41C900063E2B /* SwiftMessages.framework */; };\n\t\t86B48AFB1D5A41C900063E2B /* SwiftMessagesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86B48AFA1D5A41C900063E2B /* SwiftMessagesTests.swift */; };\n\t\t86BBA8F91D5E01FC00FE8F16 /* CardView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 86BBA8F81D5E01FC00FE8F16 /* CardView.xib */; };\n\t\t86BBA8FC1D5E03F100FE8F16 /* MessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 867E21821D4D025200594A41 /* MessageView.swift */; };\n\t\t86BBA8FD1D5E03F800FE8F16 /* SwiftMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = 864495581D4FA0AD0056EB2A /* SwiftMessages.swift */; };\n\t\t86BBA8FF1D5E040600FE8F16 /* Presenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 867E21931D4D50BB00594A41 /* Presenter.swift */; };\n\t\t86BBA9001D5E040600FE8F16 /* PassthroughView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86AAF8171D54F0650031EE32 /* PassthroughView.swift */; };\n\t\t86BBA9011D5E040600FE8F16 /* PassthroughWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86AAF8191D54F0850031EE32 /* PassthroughWindow.swift */; };\n\t\t86BBA9021D5E040600FE8F16 /* WindowViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8644955C1D4FAF7C0056EB2A /* WindowViewController.swift */; };\n\t\t86BBA9031D5E040600FE8F16 /* UIViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86AAF81B1D551FE60031EE32 /* UIViewController+Extensions.swift */; };\n\t\t86BBA9041D5E040600FE8F16 /* NSBundle+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 862C0CB01D5911C100D06168 /* NSBundle+Extensions.swift */; };\n\t\t86BBA9051D5E040C00FE8F16 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86AAF82C1D580F410031EE32 /* Theme.swift */; };\n\t\t86BBA9061D5E040C00FE8F16 /* Identifiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 864495551D4F7C390056EB2A /* Identifiable.swift */; };\n\t\t86BBA9071D5E040C00FE8F16 /* MarginAdjustable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86AAF81D1D5549680031EE32 /* MarginAdjustable.swift */; };\n\t\t86BBA9081D5E040C00FE8F16 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86AAF82A1D580DD70031EE32 /* Error.swift */; };\n\t\tB0E55A662DD110EA003D97B1 /* SwiftMessagesHideAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0E55A652DD110DB003D97B1 /* SwiftMessagesHideAction.swift */; };\n\t\tE6E49F911D70A344006CB883 /* MessageView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 862C0CDA1D5A397F00D06168 /* MessageView.xib */; };\n\t\tE6E49F921D70A349006CB883 /* StatusLine.xib in Resources */ = {isa = PBXBuildFile; fileRef = 862C0CDB1D5A397F00D06168 /* StatusLine.xib */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t86B48AF71D5A41C900063E2B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 867E21471D4D01D500594A41 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 86B48AEB1D5A41C900063E2B;\n\t\t\tremoteInfo = SwiftMessages;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t0797E40D26EE12B400691606 /* WindowScene.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WindowScene.swift; sourceTree = \"<group>\"; };\n\t\t220655111FAF82B600F4E00F /* MarginAdjustable+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"MarginAdjustable+Extensions.swift\"; sourceTree = \"<group>\"; };\n\t\t220D386D2597AA5B00BB2B88 /* SwiftMessages.Config+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"SwiftMessages.Config+Extensions.swift\"; sourceTree = \"<group>\"; };\n\t\t223DE69C2C29E50B000161E5 /* MessageGeometryProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageGeometryProxy.swift; sourceTree = \"<group>\"; };\n\t\t224C3C8F2C28A2F900B50B18 /* TopBottomPresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopBottomPresentable.swift; sourceTree = \"<group>\"; };\n\t\t224C3C922C28BC4400B50B18 /* TopBottomAnimationStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopBottomAnimationStyle.swift; sourceTree = \"<group>\"; };\n\t\t224FB69821153B440081D4DE /* CALayer+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"CALayer+Extensions.swift\"; sourceTree = \"<group>\"; };\n\t\t225304612290C76E00A03ACF /* NSLayoutConstraint+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSLayoutConstraint+Extensions.swift\"; sourceTree = \"<group>\"; };\n\t\t225304652293000C00A03ACF /* KeyboardTrackingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardTrackingView.swift; sourceTree = \"<group>\"; };\n\t\t2270044A1FAFA6DD0045DDC3 /* PhysicsAnimation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhysicsAnimation.swift; sourceTree = \"<group>\"; };\n\t\t22774B9F20B5EF2A00813732 /* UIEdgeInsets+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"UIEdgeInsets+Extensions.swift\"; sourceTree = \"<group>\"; };\n\t\t227BA6D820BF224A00E5A843 /* SwiftMessagesSegue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftMessagesSegue.swift; sourceTree = \"<group>\"; };\n\t\t228DF5231FACAC51004F8A39 /* errorIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = errorIcon.png; path = Resources/errorIcon.png; sourceTree = \"<group>\"; };\n\t\t228DF5241FACAC51004F8A39 /* errorIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"errorIcon@2x.png\"; path = \"Resources/errorIcon@2x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF5251FACAC51004F8A39 /* errorIcon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"errorIcon@3x.png\"; path = \"Resources/errorIcon@3x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF5291FAD0802004F8A39 /* successIconLight@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"successIconLight@3x.png\"; path = \"Resources/successIconLight@3x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF52A1FAD0802004F8A39 /* warningIconLight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = warningIconLight.png; path = Resources/warningIconLight.png; sourceTree = \"<group>\"; };\n\t\t228DF52B1FAD0802004F8A39 /* errorIconLight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = errorIconLight.png; path = Resources/errorIconLight.png; sourceTree = \"<group>\"; };\n\t\t228DF52C1FAD0803004F8A39 /* infoIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"infoIcon@2x.png\"; path = \"Resources/infoIcon@2x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF52D1FAD0803004F8A39 /* warningIconSubtle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = warningIconSubtle.png; path = Resources/warningIconSubtle.png; sourceTree = \"<group>\"; };\n\t\t228DF52E1FAD0803004F8A39 /* successIconSubtle@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"successIconSubtle@3x.png\"; path = \"Resources/successIconSubtle@3x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF52F1FAD0803004F8A39 /* infoIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = infoIcon.png; path = Resources/infoIcon.png; sourceTree = \"<group>\"; };\n\t\t228DF5301FAD0803004F8A39 /* infoIconLight@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"infoIconLight@2x.png\"; path = \"Resources/infoIconLight@2x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF5311FAD0803004F8A39 /* successIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = successIcon.png; path = Resources/successIcon.png; sourceTree = \"<group>\"; };\n\t\t228DF5321FAD0803004F8A39 /* successIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"successIcon@2x.png\"; path = \"Resources/successIcon@2x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF5331FAD0803004F8A39 /* successIcon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"successIcon@3x.png\"; path = \"Resources/successIcon@3x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF5341FAD0803004F8A39 /* warningIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"warningIcon@2x.png\"; path = \"Resources/warningIcon@2x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF5351FAD0803004F8A39 /* successIconSubtle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = successIconSubtle.png; path = Resources/successIconSubtle.png; sourceTree = \"<group>\"; };\n\t\t228DF5361FAD0803004F8A39 /* warningIconSubtle@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"warningIconSubtle@2x.png\"; path = \"Resources/warningIconSubtle@2x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF5371FAD0803004F8A39 /* errorIconSubtle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = errorIconSubtle.png; path = Resources/errorIconSubtle.png; sourceTree = \"<group>\"; };\n\t\t228DF5381FAD0803004F8A39 /* successIconSubtle@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"successIconSubtle@2x.png\"; path = \"Resources/successIconSubtle@2x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF5391FAD0804004F8A39 /* errorIconLight@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"errorIconLight@3x.png\"; path = \"Resources/errorIconLight@3x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF53A1FAD0804004F8A39 /* warningIconLight@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"warningIconLight@3x.png\"; path = \"Resources/warningIconLight@3x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF53B1FAD0804004F8A39 /* warningIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = warningIcon.png; path = Resources/warningIcon.png; sourceTree = \"<group>\"; };\n\t\t228DF53C1FAD0804004F8A39 /* warningIconLight@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"warningIconLight@2x.png\"; path = \"Resources/warningIconLight@2x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF53D1FAD0804004F8A39 /* warningIconSubtle@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"warningIconSubtle@3x.png\"; path = \"Resources/warningIconSubtle@3x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF53E1FAD0804004F8A39 /* errorIconLight@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"errorIconLight@2x.png\"; path = \"Resources/errorIconLight@2x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF53F1FAD0804004F8A39 /* warningIcon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"warningIcon@3x.png\"; path = \"Resources/warningIcon@3x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF5401FAD0804004F8A39 /* infoIcon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"infoIcon@3x.png\"; path = \"Resources/infoIcon@3x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF5411FAD0804004F8A39 /* infoIconLight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = infoIconLight.png; path = Resources/infoIconLight.png; sourceTree = \"<group>\"; };\n\t\t228DF5421FAD0804004F8A39 /* infoIconSubtle@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"infoIconSubtle@2x.png\"; path = \"Resources/infoIconSubtle@2x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF5431FAD0805004F8A39 /* errorIconSubtle@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"errorIconSubtle@2x.png\"; path = \"Resources/errorIconSubtle@2x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF5441FAD0805004F8A39 /* successIconLight@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"successIconLight@2x.png\"; path = \"Resources/successIconLight@2x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF5451FAD0805004F8A39 /* errorIconSubtle@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"errorIconSubtle@3x.png\"; path = \"Resources/errorIconSubtle@3x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF5461FAD0805004F8A39 /* infoIconLight@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"infoIconLight@3x.png\"; path = \"Resources/infoIconLight@3x.png\"; sourceTree = \"<group>\"; };\n\t\t228DF5471FAD0805004F8A39 /* infoIconSubtle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = infoIconSubtle.png; path = Resources/infoIconSubtle.png; sourceTree = \"<group>\"; };\n\t\t228DF5481FAD0805004F8A39 /* successIconLight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = successIconLight.png; path = Resources/successIconLight.png; sourceTree = \"<group>\"; };\n\t\t228DF5491FAD0805004F8A39 /* infoIconSubtle@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"infoIconSubtle@3x.png\"; path = \"Resources/infoIconSubtle@3x.png\"; sourceTree = \"<group>\"; };\n\t\t228F7DDB2ACF7039006C9644 /* MessageHostingView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageHostingView.swift; sourceTree = \"<group>\"; };\n\t\t228F7DDC2ACF703A006C9644 /* SwiftMessageModifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftMessageModifier.swift; sourceTree = \"<group>\"; };\n\t\t228F7DDD2ACF703A006C9644 /* MessageViewConvertible.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageViewConvertible.swift; sourceTree = \"<group>\"; };\n\t\t22982C162B6030B000852311 /* HapticMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HapticMessage.swift; sourceTree = \"<group>\"; };\n\t\t2298C2041EE47DC900E2DDC1 /* Weak.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Weak.swift; sourceTree = \"<group>\"; };\n\t\t2298C2061EE480D000E2DDC1 /* Animator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Animator.swift; sourceTree = \"<group>\"; };\n\t\t2298C2081EE486E300E2DDC1 /* TopBottomAnimation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TopBottomAnimation.swift; sourceTree = \"<group>\"; };\n\t\t229F778025FAB1E9008C2ACB /* UIWindow+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"UIWindow+Extensions.swift\"; sourceTree = \"<group>\"; };\n\t\t22A2EA6E24EC6CFA00BB2540 /* Package.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Package.swift; sourceTree = \"<group>\"; };\n\t\t22D3B4552B1CEF76002D8665 /* Task+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"Task+Extensions.swift\"; sourceTree = \"<group>\"; };\n\t\t22DFC9151EFF30F6001B1CA1 /* CenteredView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CenteredView.xib; path = Resources/CenteredView.xib; sourceTree = \"<group>\"; };\n\t\t22DFC9171F00674E001B1CA1 /* PhysicsPanHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhysicsPanHandler.swift; sourceTree = \"<group>\"; };\n\t\t22E01F631E74EC8B00ACE19A /* MaskingView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MaskingView.swift; sourceTree = \"<group>\"; };\n\t\t22E307FE1E74C5B100E35893 /* AccessibleMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccessibleMessage.swift; sourceTree = \"<group>\"; };\n\t\t22F27950210CE25900273E7F /* CornerRoundingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CornerRoundingView.swift; sourceTree = \"<group>\"; };\n\t\t862C0C6A1D58E93300D06168 /* SwiftMessages.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; fileEncoding = 4; path = SwiftMessages.podspec; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t862C0CB01D5911C100D06168 /* NSBundle+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"NSBundle+Extensions.swift\"; sourceTree = \"<group>\"; };\n\t\t862C0CDA1D5A397F00D06168 /* MessageView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = MessageView.xib; path = Resources/MessageView.xib; sourceTree = \"<group>\"; };\n\t\t862C0CDB1D5A397F00D06168 /* StatusLine.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = StatusLine.xib; path = Resources/StatusLine.xib; sourceTree = \"<group>\"; };\n\t\t864495551D4F7C390056EB2A /* Identifiable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Identifiable.swift; sourceTree = \"<group>\"; };\n\t\t864495581D4FA0AD0056EB2A /* SwiftMessages.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftMessages.swift; sourceTree = \"<group>\"; };\n\t\t8644955C1D4FAF7C0056EB2A /* WindowViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WindowViewController.swift; sourceTree = \"<group>\"; };\n\t\t86589D461D64B6E40041676C /* BaseView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseView.swift; sourceTree = \"<group>\"; };\n\t\t86589D901D692B1B0041676C /* TabView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = TabView.xib; path = Resources/TabView.xib; sourceTree = \"<group>\"; };\n\t\t867BED201D622793005212E3 /* BackgroundViewable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BackgroundViewable.swift; sourceTree = \"<group>\"; };\n\t\t867E21821D4D025200594A41 /* MessageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageView.swift; sourceTree = \"<group>\"; };\n\t\t867E21931D4D50BB00594A41 /* Presenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Presenter.swift; sourceTree = \"<group>\"; };\n\t\t86AAF8171D54F0650031EE32 /* PassthroughView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PassthroughView.swift; sourceTree = \"<group>\"; };\n\t\t86AAF8191D54F0850031EE32 /* PassthroughWindow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PassthroughWindow.swift; sourceTree = \"<group>\"; };\n\t\t86AAF81B1D551FE60031EE32 /* UIViewController+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"UIViewController+Extensions.swift\"; sourceTree = \"<group>\"; };\n\t\t86AAF81D1D5549680031EE32 /* MarginAdjustable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MarginAdjustable.swift; sourceTree = \"<group>\"; };\n\t\t86AAF82A1D580DD70031EE32 /* Error.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Error.swift; sourceTree = \"<group>\"; };\n\t\t86AAF82C1D580F410031EE32 /* Theme.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = \"<group>\"; };\n\t\t86B48AEC1D5A41C900063E2B /* SwiftMessages.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftMessages.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t86B48AEE1D5A41C900063E2B /* SwiftMessages.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwiftMessages.h; sourceTree = \"<group>\"; };\n\t\t86B48AF01D5A41C900063E2B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t86B48AF51D5A41C900063E2B /* SwiftMessagesTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftMessagesTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t86B48AFA1D5A41C900063E2B /* SwiftMessagesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftMessagesTests.swift; sourceTree = \"<group>\"; };\n\t\t86B48AFC1D5A41C900063E2B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t86BBA8F81D5E01FC00FE8F16 /* CardView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CardView.xib; path = Resources/CardView.xib; sourceTree = \"<group>\"; };\n\t\tB0E55A652DD110DB003D97B1 /* SwiftMessagesHideAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftMessagesHideAction.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t86B48AE81D5A41C900063E2B /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t86B48AF21D5A41C900063E2B /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t86B48AF61D5A41C900063E2B /* SwiftMessages.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t220D38672597A94C00BB2B88 /* Extensions */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t224FB69821153B440081D4DE /* CALayer+Extensions.swift */,\n\t\t\t\t862C0CB01D5911C100D06168 /* NSBundle+Extensions.swift */,\n\t\t\t\t86AAF81B1D551FE60031EE32 /* UIViewController+Extensions.swift */,\n\t\t\t\t225304612290C76E00A03ACF /* NSLayoutConstraint+Extensions.swift */,\n\t\t\t\t220D386D2597AA5B00BB2B88 /* SwiftMessages.Config+Extensions.swift */,\n\t\t\t);\n\t\t\tname = Extensions;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t220D38682597A9FD00BB2B88 /* Extensions */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t220655111FAF82B600F4E00F /* MarginAdjustable+Extensions.swift */,\n\t\t\t\t22774B9F20B5EF2A00813732 /* UIEdgeInsets+Extensions.swift */,\n\t\t\t\t229F778025FAB1E9008C2ACB /* UIWindow+Extensions.swift */,\n\t\t\t\t22D3B4552B1CEF76002D8665 /* Task+Extensions.swift */,\n\t\t\t);\n\t\t\tname = Extensions;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2244656C1EF1D62700C50413 /* Animations */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2298C2081EE486E300E2DDC1 /* TopBottomAnimation.swift */,\n\t\t\t\t2270044A1FAFA6DD0045DDC3 /* PhysicsAnimation.swift */,\n\t\t\t\t22DFC9171F00674E001B1CA1 /* PhysicsPanHandler.swift */,\n\t\t\t);\n\t\t\tname = Animations;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t224FB6C8211651D10081D4DE /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t228F7DDA2ACF7029006C9644 /* SwiftUI */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB0E55A652DD110DB003D97B1 /* SwiftMessagesHideAction.swift */,\n\t\t\t\t223DE69C2C29E50B000161E5 /* MessageGeometryProxy.swift */,\n\t\t\t\t228F7DDB2ACF7039006C9644 /* MessageHostingView.swift */,\n\t\t\t\t228F7DDD2ACF703A006C9644 /* MessageViewConvertible.swift */,\n\t\t\t\t228F7DDC2ACF703A006C9644 /* SwiftMessageModifier.swift */,\n\t\t\t);\n\t\t\tname = SwiftUI;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t22D4779B20BF1C54005D0D71 /* View Controllers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t227BA6D820BF224A00E5A843 /* SwiftMessagesSegue.swift */,\n\t\t\t);\n\t\t\tname = \"View Controllers\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t862C0CD81D5A396900D06168 /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t862C0CDA1D5A397F00D06168 /* MessageView.xib */,\n\t\t\t\t86BBA8F81D5E01FC00FE8F16 /* CardView.xib */,\n\t\t\t\t86589D901D692B1B0041676C /* TabView.xib */,\n\t\t\t\t862C0CDB1D5A397F00D06168 /* StatusLine.xib */,\n\t\t\t\t22DFC9151EFF30F6001B1CA1 /* CenteredView.xib */,\n\t\t\t\t228DF52B1FAD0802004F8A39 /* errorIconLight.png */,\n\t\t\t\t228DF53E1FAD0804004F8A39 /* errorIconLight@2x.png */,\n\t\t\t\t228DF5391FAD0804004F8A39 /* errorIconLight@3x.png */,\n\t\t\t\t228DF5371FAD0803004F8A39 /* errorIconSubtle.png */,\n\t\t\t\t228DF5431FAD0805004F8A39 /* errorIconSubtle@2x.png */,\n\t\t\t\t228DF5451FAD0805004F8A39 /* errorIconSubtle@3x.png */,\n\t\t\t\t228DF52F1FAD0803004F8A39 /* infoIcon.png */,\n\t\t\t\t228DF52C1FAD0803004F8A39 /* infoIcon@2x.png */,\n\t\t\t\t228DF5401FAD0804004F8A39 /* infoIcon@3x.png */,\n\t\t\t\t228DF5411FAD0804004F8A39 /* infoIconLight.png */,\n\t\t\t\t228DF5301FAD0803004F8A39 /* infoIconLight@2x.png */,\n\t\t\t\t228DF5461FAD0805004F8A39 /* infoIconLight@3x.png */,\n\t\t\t\t228DF5471FAD0805004F8A39 /* infoIconSubtle.png */,\n\t\t\t\t228DF5421FAD0804004F8A39 /* infoIconSubtle@2x.png */,\n\t\t\t\t228DF5491FAD0805004F8A39 /* infoIconSubtle@3x.png */,\n\t\t\t\t228DF5311FAD0803004F8A39 /* successIcon.png */,\n\t\t\t\t228DF5321FAD0803004F8A39 /* successIcon@2x.png */,\n\t\t\t\t228DF5331FAD0803004F8A39 /* successIcon@3x.png */,\n\t\t\t\t228DF5481FAD0805004F8A39 /* successIconLight.png */,\n\t\t\t\t228DF5441FAD0805004F8A39 /* successIconLight@2x.png */,\n\t\t\t\t228DF5291FAD0802004F8A39 /* successIconLight@3x.png */,\n\t\t\t\t228DF5351FAD0803004F8A39 /* successIconSubtle.png */,\n\t\t\t\t228DF5381FAD0803004F8A39 /* successIconSubtle@2x.png */,\n\t\t\t\t228DF52E1FAD0803004F8A39 /* successIconSubtle@3x.png */,\n\t\t\t\t228DF53B1FAD0804004F8A39 /* warningIcon.png */,\n\t\t\t\t228DF5341FAD0803004F8A39 /* warningIcon@2x.png */,\n\t\t\t\t228DF53F1FAD0804004F8A39 /* warningIcon@3x.png */,\n\t\t\t\t228DF52A1FAD0802004F8A39 /* warningIconLight.png */,\n\t\t\t\t228DF53C1FAD0804004F8A39 /* warningIconLight@2x.png */,\n\t\t\t\t228DF53A1FAD0804004F8A39 /* warningIconLight@3x.png */,\n\t\t\t\t228DF52D1FAD0803004F8A39 /* warningIconSubtle.png */,\n\t\t\t\t228DF5361FAD0803004F8A39 /* warningIconSubtle@2x.png */,\n\t\t\t\t228DF53D1FAD0804004F8A39 /* warningIconSubtle@3x.png */,\n\t\t\t\t228DF5231FACAC51004F8A39 /* errorIcon.png */,\n\t\t\t\t228DF5241FACAC51004F8A39 /* errorIcon@2x.png */,\n\t\t\t\t228DF5251FACAC51004F8A39 /* errorIcon@3x.png */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t864495571D4F7C490056EB2A /* Base */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t22E307FE1E74C5B100E35893 /* AccessibleMessage.swift */,\n\t\t\t\t2298C2061EE480D000E2DDC1 /* Animator.swift */,\n\t\t\t\t867BED201D622793005212E3 /* BackgroundViewable.swift */,\n\t\t\t\t86589D461D64B6E40041676C /* BaseView.swift */,\n\t\t\t\t22F27950210CE25900273E7F /* CornerRoundingView.swift */,\n\t\t\t\t86AAF82A1D580DD70031EE32 /* Error.swift */,\n\t\t\t\t22982C162B6030B000852311 /* HapticMessage.swift */,\n\t\t\t\t864495551D4F7C390056EB2A /* Identifiable.swift */,\n\t\t\t\t225304652293000C00A03ACF /* KeyboardTrackingView.swift */,\n\t\t\t\t86AAF81D1D5549680031EE32 /* MarginAdjustable.swift */,\n\t\t\t\t86AAF82C1D580F410031EE32 /* Theme.swift */,\n\t\t\t\t224C3C922C28BC4400B50B18 /* TopBottomAnimationStyle.swift */,\n\t\t\t\t224C3C8F2C28A2F900B50B18 /* TopBottomPresentable.swift */,\n\t\t\t\t2298C2041EE47DC900E2DDC1 /* Weak.swift */,\n\t\t\t\t0797E40D26EE12B400691606 /* WindowScene.swift */,\n\t\t\t\t8644955C1D4FAF7C0056EB2A /* WindowViewController.swift */,\n\t\t\t);\n\t\t\tname = Base;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t867E21461D4D01D500594A41 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t86B48AED1D5A41C900063E2B /* SwiftMessages */,\n\t\t\t\t86B48AF91D5A41C900063E2B /* SwiftMessagesTests */,\n\t\t\t\t867E21501D4D01D500594A41 /* Products */,\n\t\t\t\t224FB6C8211651D10081D4DE /* Frameworks */,\n\t\t\t\t22A2EA6E24EC6CFA00BB2540 /* Package.swift */,\n\t\t\t\t862C0C6A1D58E93300D06168 /* SwiftMessages.podspec */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t867E21501D4D01D500594A41 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t86B48AEC1D5A41C900063E2B /* SwiftMessages.framework */,\n\t\t\t\t86B48AF51D5A41C900063E2B /* SwiftMessagesTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t867E218E1D4D3DFD00594A41 /* Internal */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t867E21931D4D50BB00594A41 /* Presenter.swift */,\n\t\t\t\t86AAF8171D54F0650031EE32 /* PassthroughView.swift */,\n\t\t\t\t22E01F631E74EC8B00ACE19A /* MaskingView.swift */,\n\t\t\t\t86AAF8191D54F0850031EE32 /* PassthroughWindow.swift */,\n\t\t\t\t220D38672597A94C00BB2B88 /* Extensions */,\n\t\t\t);\n\t\t\tname = Internal;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t86B48AED1D5A41C900063E2B /* SwiftMessages */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t864495581D4FA0AD0056EB2A /* SwiftMessages.swift */,\n\t\t\t\t867E21821D4D025200594A41 /* MessageView.swift */,\n\t\t\t\t862C0CD81D5A396900D06168 /* Resources */,\n\t\t\t\t2244656C1EF1D62700C50413 /* Animations */,\n\t\t\t\t22D4779B20BF1C54005D0D71 /* View Controllers */,\n\t\t\t\t228F7DDA2ACF7029006C9644 /* SwiftUI */,\n\t\t\t\t864495571D4F7C490056EB2A /* Base */,\n\t\t\t\t220D38682597A9FD00BB2B88 /* Extensions */,\n\t\t\t\t867E218E1D4D3DFD00594A41 /* Internal */,\n\t\t\t\t86B48B031D5A41E500063E2B /* Support */,\n\t\t\t);\n\t\t\tpath = SwiftMessages;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t86B48AF91D5A41C900063E2B /* SwiftMessagesTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t86B48AFA1D5A41C900063E2B /* SwiftMessagesTests.swift */,\n\t\t\t\t86B48AFC1D5A41C900063E2B /* Info.plist */,\n\t\t\t);\n\t\t\tpath = SwiftMessagesTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t86B48B031D5A41E500063E2B /* Support */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t86B48AEE1D5A41C900063E2B /* SwiftMessages.h */,\n\t\t\t\t86B48AF01D5A41C900063E2B /* Info.plist */,\n\t\t\t);\n\t\t\tname = Support;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t86B48AE91D5A41C900063E2B /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t86B48AEF1D5A41C900063E2B /* SwiftMessages.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t86B48AEB1D5A41C900063E2B /* SwiftMessages */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 86B48AFD1D5A41C900063E2B /* Build configuration list for PBXNativeTarget \"SwiftMessages\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t86B48AE71D5A41C900063E2B /* Sources */,\n\t\t\t\t86B48AE81D5A41C900063E2B /* Frameworks */,\n\t\t\t\t86B48AE91D5A41C900063E2B /* Headers */,\n\t\t\t\t86B48AEA1D5A41C900063E2B /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = SwiftMessages;\n\t\t\tproductName = SwiftMessages;\n\t\t\tproductReference = 86B48AEC1D5A41C900063E2B /* SwiftMessages.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t86B48AF41D5A41C900063E2B /* SwiftMessagesTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 86B48B001D5A41C900063E2B /* Build configuration list for PBXNativeTarget \"SwiftMessagesTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t86B48AF11D5A41C900063E2B /* Sources */,\n\t\t\t\t86B48AF21D5A41C900063E2B /* Frameworks */,\n\t\t\t\t86B48AF31D5A41C900063E2B /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t86B48AF81D5A41C900063E2B /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = SwiftMessagesTests;\n\t\t\tproductName = SwiftMessagesTests;\n\t\t\tproductReference = 86B48AF51D5A41C900063E2B /* SwiftMessagesTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t867E21471D4D01D500594A41 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tBuildIndependentTargetsInParallel = YES;\n\t\t\t\tLastSwiftUpdateCheck = 0730;\n\t\t\t\tLastUpgradeCheck = 1510;\n\t\t\t\tORGANIZATIONNAME = \"SwiftKick Mobile\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t86B48AEB1D5A41C900063E2B = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3.1;\n\t\t\t\t\t\tLastSwiftMigration = 1020;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t86B48AF41D5A41C900063E2B = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3.1;\n\t\t\t\t\t\tLastSwiftMigration = 0900;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 867E214A1D4D01D500594A41 /* Build configuration list for PBXProject \"SwiftMessages\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 867E21461D4D01D500594A41;\n\t\t\tproductRefGroup = 867E21501D4D01D500594A41 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t86B48AEB1D5A41C900063E2B /* SwiftMessages */,\n\t\t\t\t86B48AF41D5A41C900063E2B /* SwiftMessagesTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t86B48AEA1D5A41C900063E2B /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t228DF5581FAD0806004F8A39 /* errorIconSubtle.png in Resources */,\n\t\t\t\t228DF55C1FAD0806004F8A39 /* warningIcon.png in Resources */,\n\t\t\t\t228DF5521FAD0806004F8A39 /* successIcon.png in Resources */,\n\t\t\t\t228DF5531FAD0806004F8A39 /* successIcon@2x.png in Resources */,\n\t\t\t\t228DF54C1FAD0806004F8A39 /* errorIconLight.png in Resources */,\n\t\t\t\t228DF55B1FAD0806004F8A39 /* warningIconLight@3x.png in Resources */,\n\t\t\t\t228DF5571FAD0806004F8A39 /* warningIconSubtle@2x.png in Resources */,\n\t\t\t\t228DF5651FAD0806004F8A39 /* successIconLight@2x.png in Resources */,\n\t\t\t\t228DF5671FAD0806004F8A39 /* infoIconLight@3x.png in Resources */,\n\t\t\t\tE6E49F911D70A344006CB883 /* MessageView.xib in Resources */,\n\t\t\t\t228DF5551FAD0806004F8A39 /* warningIcon@2x.png in Resources */,\n\t\t\t\t228DF5661FAD0806004F8A39 /* errorIconSubtle@3x.png in Resources */,\n\t\t\t\t228DF5511FAD0806004F8A39 /* infoIconLight@2x.png in Resources */,\n\t\t\t\t228DF5611FAD0806004F8A39 /* infoIcon@3x.png in Resources */,\n\t\t\t\t228DF54A1FAD0806004F8A39 /* successIconLight@3x.png in Resources */,\n\t\t\t\t228DF5271FACAC51004F8A39 /* errorIcon@2x.png in Resources */,\n\t\t\t\t228DF55D1FAD0806004F8A39 /* warningIconLight@2x.png in Resources */,\n\t\t\t\t228DF5501FAD0806004F8A39 /* infoIcon.png in Resources */,\n\t\t\t\t228DF54E1FAD0806004F8A39 /* warningIconSubtle.png in Resources */,\n\t\t\t\t228DF5601FAD0806004F8A39 /* warningIcon@3x.png in Resources */,\n\t\t\t\t228DF5641FAD0806004F8A39 /* errorIconSubtle@2x.png in Resources */,\n\t\t\t\t228DF55F1FAD0806004F8A39 /* errorIconLight@2x.png in Resources */,\n\t\t\t\t228DF55A1FAD0806004F8A39 /* errorIconLight@3x.png in Resources */,\n\t\t\t\t228DF5631FAD0806004F8A39 /* infoIconSubtle@2x.png in Resources */,\n\t\t\t\t86BBA8F91D5E01FC00FE8F16 /* CardView.xib in Resources */,\n\t\t\t\t228DF5681FAD0806004F8A39 /* infoIconSubtle.png in Resources */,\n\t\t\t\t228DF54F1FAD0806004F8A39 /* successIconSubtle@3x.png in Resources */,\n\t\t\t\t228DF56A1FAD0806004F8A39 /* infoIconSubtle@3x.png in Resources */,\n\t\t\t\t228DF5261FACAC51004F8A39 /* errorIcon.png in Resources */,\n\t\t\t\t228DF5691FAD0806004F8A39 /* successIconLight.png in Resources */,\n\t\t\t\t86589D911D692B1C0041676C /* TabView.xib in Resources */,\n\t\t\t\t228DF5621FAD0806004F8A39 /* infoIconLight.png in Resources */,\n\t\t\t\t228DF55E1FAD0806004F8A39 /* warningIconSubtle@3x.png in Resources */,\n\t\t\t\t228DF5591FAD0806004F8A39 /* successIconSubtle@2x.png in Resources */,\n\t\t\t\tE6E49F921D70A349006CB883 /* StatusLine.xib in Resources */,\n\t\t\t\t228DF5561FAD0806004F8A39 /* successIconSubtle.png in Resources */,\n\t\t\t\t228DF5541FAD0806004F8A39 /* successIcon@3x.png in Resources */,\n\t\t\t\t228DF54B1FAD0806004F8A39 /* warningIconLight.png in Resources */,\n\t\t\t\t228DF54D1FAD0806004F8A39 /* infoIcon@2x.png in Resources */,\n\t\t\t\t22DFC9161EFF30F6001B1CA1 /* CenteredView.xib in Resources */,\n\t\t\t\t228DF5281FACAC51004F8A39 /* errorIcon@3x.png in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t86B48AF31D5A41C900063E2B /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t86B48AE71D5A41C900063E2B /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t225304662293000C00A03ACF /* KeyboardTrackingView.swift in Sources */,\n\t\t\t\t22774BA020B5EF2A00813732 /* UIEdgeInsets+Extensions.swift in Sources */,\n\t\t\t\t86BBA8FC1D5E03F100FE8F16 /* MessageView.swift in Sources */,\n\t\t\t\t86BBA9061D5E040C00FE8F16 /* Identifiable.swift in Sources */,\n\t\t\t\t22F27951210CE25900273E7F /* CornerRoundingView.swift in Sources */,\n\t\t\t\t86BBA9011D5E040600FE8F16 /* PassthroughWindow.swift in Sources */,\n\t\t\t\t2298C2071EE480D000E2DDC1 /* Animator.swift in Sources */,\n\t\t\t\t22D3B4562B1CEF76002D8665 /* Task+Extensions.swift in Sources */,\n\t\t\t\t22982C172B6030B000852311 /* HapticMessage.swift in Sources */,\n\t\t\t\t86BBA9031D5E040600FE8F16 /* UIViewController+Extensions.swift in Sources */,\n\t\t\t\t228F7DDF2ACF703A006C9644 /* SwiftMessageModifier.swift in Sources */,\n\t\t\t\t224FB69921153B440081D4DE /* CALayer+Extensions.swift in Sources */,\n\t\t\t\t22E01F641E74EC8B00ACE19A /* MaskingView.swift in Sources */,\n\t\t\t\t224C3C932C28BC4900B50B18 /* TopBottomAnimationStyle.swift in Sources */,\n\t\t\t\t2298C2051EE47DC900E2DDC1 /* Weak.swift in Sources */,\n\t\t\t\t228F7DE02ACF703A006C9644 /* MessageViewConvertible.swift in Sources */,\n\t\t\t\t86BBA9001D5E040600FE8F16 /* PassthroughView.swift in Sources */,\n\t\t\t\t22DFC9181F00674E001B1CA1 /* PhysicsPanHandler.swift in Sources */,\n\t\t\t\t227BA6D920BF224A00E5A843 /* SwiftMessagesSegue.swift in Sources */,\n\t\t\t\t220655121FAF82B600F4E00F /* MarginAdjustable+Extensions.swift in Sources */,\n\t\t\t\t228F7DDE2ACF703A006C9644 /* MessageHostingView.swift in Sources */,\n\t\t\t\t22E307FF1E74C5B100E35893 /* AccessibleMessage.swift in Sources */,\n\t\t\t\t220D386E2597AA5B00BB2B88 /* SwiftMessages.Config+Extensions.swift in Sources */,\n\t\t\t\t2270044B1FAFA6DD0045DDC3 /* PhysicsAnimation.swift in Sources */,\n\t\t\t\t224C3C902C28A2F900B50B18 /* TopBottomPresentable.swift in Sources */,\n\t\t\t\tB0E55A662DD110EA003D97B1 /* SwiftMessagesHideAction.swift in Sources */,\n\t\t\t\t86BBA9041D5E040600FE8F16 /* NSBundle+Extensions.swift in Sources */,\n\t\t\t\t86BBA8FD1D5E03F800FE8F16 /* SwiftMessages.swift in Sources */,\n\t\t\t\t86BBA9021D5E040600FE8F16 /* WindowViewController.swift in Sources */,\n\t\t\t\t229F778125FAB1E9008C2ACB /* UIWindow+Extensions.swift in Sources */,\n\t\t\t\t86BBA8FF1D5E040600FE8F16 /* Presenter.swift in Sources */,\n\t\t\t\t86BBA9051D5E040C00FE8F16 /* Theme.swift in Sources */,\n\t\t\t\t86BBA9081D5E040C00FE8F16 /* Error.swift in Sources */,\n\t\t\t\t2298C2091EE486E300E2DDC1 /* TopBottomAnimation.swift in Sources */,\n\t\t\t\t86589D471D64B6E40041676C /* BaseView.swift in Sources */,\n\t\t\t\t0797E40E26EE12B400691606 /* WindowScene.swift in Sources */,\n\t\t\t\t225304622290C76E00A03ACF /* NSLayoutConstraint+Extensions.swift in Sources */,\n\t\t\t\t223DE69D2C29E50C000161E5 /* MessageGeometryProxy.swift in Sources */,\n\t\t\t\t86BBA9071D5E040C00FE8F16 /* MarginAdjustable.swift in Sources */,\n\t\t\t\t867BED211D622793005212E3 /* BackgroundViewable.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t86B48AF11D5A41C900063E2B /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t86B48AFB1D5A41C900063E2B /* SwiftMessagesTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t86B48AF81D5A41C900063E2B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 86B48AEB1D5A41C900063E2B /* SwiftMessages */;\n\t\t\ttargetProxy = 86B48AF71D5A41C900063E2B /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t867E21751D4D01D500594A41 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tENABLE_USER_SCRIPT_SANDBOXING = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t867E21761D4D01D500594A41 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_USER_SCRIPT_SANDBOXING = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t86B48AFE1D5A41C900063E2B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_MODULE_VERIFIER = YES;\n\t\t\t\tGCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES;\n\t\t\t\tINFOPLIST_FILE = SwiftMessages/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMODULE_VERIFIER_SUPPORTED_LANGUAGES = \"objective-c objective-c++\";\n\t\t\t\tMODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = \"gnu99 gnu++11\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = it.swiftkick.SwiftMessages;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_INSTALL_OBJC_HEADER = NO;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t\tWARNING_CFLAGS = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t86B48AFF1D5A41C900063E2B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_MODULE_VERIFIER = YES;\n\t\t\t\tGCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES;\n\t\t\t\tINFOPLIST_FILE = SwiftMessages/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMODULE_VERIFIER_SUPPORTED_LANGUAGES = \"objective-c objective-c++\";\n\t\t\t\tMODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = \"gnu99 gnu++11\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = it.swiftkick.SwiftMessages;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_INSTALL_OBJC_HEADER = NO;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t\tWARNING_CFLAGS = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t86B48B011D5A41C900063E2B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = SwiftMessagesTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = it.swiftkick.SwiftMessagesTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = On;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t86B48B021D5A41C900063E2B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = SwiftMessagesTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = it.swiftkick.SwiftMessagesTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = On;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t867E214A1D4D01D500594A41 /* Build configuration list for PBXProject \"SwiftMessages\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t867E21751D4D01D500594A41 /* Debug */,\n\t\t\t\t867E21761D4D01D500594A41 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t86B48AFD1D5A41C900063E2B /* Build configuration list for PBXNativeTarget \"SwiftMessages\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t86B48AFE1D5A41C900063E2B /* Debug */,\n\t\t\t\t86B48AFF1D5A41C900063E2B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t86B48B001D5A41C900063E2B /* Build configuration list for PBXNativeTarget \"SwiftMessagesTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t86B48B011D5A41C900063E2B /* Debug */,\n\t\t\t\t86B48B021D5A41C900063E2B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 867E21471D4D01D500594A41 /* Project object */;\n}\n"
  },
  {
    "path": "SwiftMessages.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:SwiftMessages.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "SwiftMessages.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "SwiftMessages.xcodeproj/xcshareddata/xcschemes/SwiftMessages.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"86B48AEB1D5A41C900063E2B\"\n               BuildableName = \"SwiftMessages.framework\"\n               BlueprintName = \"SwiftMessages\"\n               ReferencedContainer = \"container:SwiftMessages.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"86B48AF41D5A41C900063E2B\"\n               BuildableName = \"SwiftMessagesTests.xctest\"\n               BlueprintName = \"SwiftMessagesTests\"\n               ReferencedContainer = \"container:SwiftMessages.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"867E216D1D4D01D500594A41\"\n               BuildableName = \"SwiftMessagesUITests.xctest\"\n               BlueprintName = \"SwiftMessagesUITests\"\n               ReferencedContainer = \"container:SwiftMessages.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"86B48AEB1D5A41C900063E2B\"\n            BuildableName = \"SwiftMessages.framework\"\n            BlueprintName = \"SwiftMessages\"\n            ReferencedContainer = \"container:SwiftMessages.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"86B48AEB1D5A41C900063E2B\"\n            BuildableName = \"SwiftMessages.framework\"\n            BlueprintName = \"SwiftMessages\"\n            ReferencedContainer = \"container:SwiftMessages.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "SwiftMessagesTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "SwiftMessagesTests/SwiftMessagesTests.swift",
    "content": "//\n//  SwiftMessagesTests.swift\n//  SwiftMessagesTests\n//\n//  Created by Timothy Moose on 8/9/16.\n//  Copyright © 2016 SwiftKick Mobile LLC. All rights reserved.\n//\n\nimport XCTest\n@testable import SwiftMessages\n\nclass SwiftMessagesTests: XCTestCase {\n    \n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n    \n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n    \n    func testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n    \n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        self.measure {\n            // Put the code you want to measure the time of here.\n        }\n    }\n    \n}\n"
  },
  {
    "path": "SwiftUIDemo/SwiftUIDemo/Assets.xcassets/AccentColor.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "SwiftUIDemo/SwiftUIDemo/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"platform\" : \"ios\",\n      \"size\" : \"1024x1024\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "SwiftUIDemo/SwiftUIDemo/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "SwiftUIDemo/SwiftUIDemo/Assets.xcassets/Demo message background.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0xEB\",\n          \"green\" : \"0xE1\",\n          \"red\" : \"0xAC\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "SwiftUIDemo/SwiftUIDemo/DemoMessage.swift",
    "content": "//\n//  DemoMessage.swift\n//  SwiftUIDemo\n//\n//  Created by Timothy Moose on 10/5/23.\n//\n\nimport SwiftUI\nimport SwiftMessages\n\nstruct DemoMessage: Identifiable {\n    let title: String\n    let body: String\n    let style: DemoMessageView.Style\n\n    var id: String { title + body }\n}\n\nextension DemoMessage: MessageViewConvertible {\n    func asMessageView() -> DemoMessageView {\n        DemoMessageView(message: self, style: style)\n    }\n}\n"
  },
  {
    "path": "SwiftUIDemo/SwiftUIDemo/DemoMessageView.swift",
    "content": "//\n//  DemoMessageView.swift\n//  SwiftUIDemo\n//\n//  Created by Timothy Moose on 10/5/23.\n//\n\nimport SwiftUI\n\n// A message view with a title and message.\nstruct DemoMessageView: View {\n\n    // MARK: - API\n\n    enum Style {\n        case standard\n        case card\n        case tab\n    }\n\n    let message: DemoMessage\n    let style: Style\n\n\n    // MARK: - Variables\n\n    // MARK: - Constants\n\n    // MARK: - Body\n\n    var body: some View {\n        switch style {\n        case .standard:\n            content()\n                // Mask the content and extend background into the safe area.\n                .mask {\n                    Rectangle()\n                        .edgesIgnoringSafeArea(.top)\n                }\n        case .card:\n            content()\n                // Mask the content with a rounded rectangle\n                .mask {\n                    RoundedRectangle(cornerRadius: 15)\n                }\n                // External padding around the card\n                .padding(10)\n        case .tab:\n            content()\n                // Mask the content with rounded bottom edge and extend background into the safe area.\n                .mask {\n                    UnevenRoundedRectangle(bottomLeadingRadius: 15, bottomTrailingRadius: 15)\n                        .edgesIgnoringSafeArea(.top)\n                }\n        }\n    }\n\n    @ViewBuilder private func content() -> some View {\n        VStack(alignment: .leading) {\n            Text(message.title).font(.system(size: 20, weight: .bold))\n            Text(message.body)\n        }\n        .multilineTextAlignment(.leading)\n        // Internal padding of the card\n        .padding(30)\n        // Greedy width\n        .frame(maxWidth: .infinity)\n        .background(.demoMessageBackground)\n    }\n}\n"
  },
  {
    "path": "SwiftUIDemo/SwiftUIDemo/DemoMessageWithButtonView.swift",
    "content": "//\n//  DemoMessageWithButtonView.swift\n//  SwiftUIDemo\n//\n//  Created by Timothy Moose on 1/15/24.\n//\n\nimport SwiftUI\n\n// A message view with a title, message and button.\nstruct DemoMessageWithButtonView<Button>: View where Button: View {\n\n    // MARK: - API\n\n    enum Style {\n        case standard\n        case card\n        case tab\n    }\n\n    init(message: DemoMessage, style: Style, @ViewBuilder button: @escaping () -> Button) {\n        self.message = message\n        self.style = style\n        self.button = button\n    }\n\n    // MARK: - Variables\n\n    let message: DemoMessage\n    let style: Style\n    @ViewBuilder let button: () -> Button\n\n    // MARK: - Constants\n\n    // MARK: - Body\n\n    var body: some View {\n        switch style {\n        case .standard:\n            content()\n                // Mask the content and extend background into the safe area.\n                .mask {\n                    Rectangle()\n                        .edgesIgnoringSafeArea(.top)\n                }\n        case .card:\n            content()\n                // Mask the content with a rounded rectangle\n                .mask {\n                    RoundedRectangle(cornerRadius: 15)\n                }\n                // External padding around the card\n                .padding(10)\n        case .tab:\n            content()\n                // Mask the content with rounded bottom edge and extend background into the safe area.\n                .mask {\n                    UnevenRoundedRectangle(bottomLeadingRadius: 15, bottomTrailingRadius: 15)\n                        .edgesIgnoringSafeArea(.top)\n                }\n        }\n    }\n\n    @ViewBuilder private func content() -> some View {\n        VStack() {\n            Text(message.title).font(.system(size: 20, weight: .bold))\n            Text(message.body)\n            button()\n        }\n        .multilineTextAlignment(.center)\n        // Internal padding of the card\n        .padding(30)\n        // Greedy width\n        .frame(maxWidth: .infinity)\n        .background(.demoMessageBackground)\n    }\n}\n"
  },
  {
    "path": "SwiftUIDemo/SwiftUIDemo/DemoView.swift",
    "content": "//\n//  DemoView.swift\n//  SwiftUIDemo\n//\n//  Created by Timothy Moose on 10/5/23.\n//\n\nimport SwiftUI\nimport SwiftMessages\n\nstruct DemoView: View {\n    \n    /// Use this to manually hide the swift message\n    @Environment(\\.swiftMessagesHide) private var hide\n\n    /// Demonstrates purely data-driven message presentation.\n    @State var message: DemoMessage?\n\n    /// Demonstrates message presentation with a view builder.\n    @State var messageWithButton: DemoMessage?\n\n    var body: some View {\n        VStack {\n            Button(\"Show standard message\") {\n                message = DemoMessage(\n                    title: \"Demo\",\n                    body: \"This is a sample SwiftUI card-style message! This content should be long enough to wrap.\",\n                    style: .standard\n                )\n            }\n            Button(\"Show card message\") {\n                message = DemoMessage(\n                    title: \"Demo\",\n                    body: \"This is a sample SwiftUI card-style message! This content should be long enough to wrap.\",\n                    style: .card\n                )\n            }\n            Button(\"Show tab message\") {\n                message = DemoMessage(\n                    title: \"Demo\",\n                    body: \"This is a sample SwiftUI card-style message! This content should be long enough to wrap.\",\n                    style: .tab\n                )\n            }\n            Button(\"Show message with button\") {\n                messageWithButton = DemoMessage(\n                    title: \"Demo\",\n                    body: \"This message view has a button was constructed with a view builder.\",\n                    style: .card\n                )\n            }\n        }\n        .buttonStyle(.bordered)\n        .swiftMessage(message: $message)\n        .swiftMessage(message: $messageWithButton) { message in\n            DemoMessageWithButtonView(message: message, style: .card) {\n                Button(\"Hide\") {\n                    hide(animated: true)\n                }\n                .buttonStyle(.bordered)\n            }\n        }\n    }\n}\n\n#Preview {\n    DemoView()\n}\n"
  },
  {
    "path": "SwiftUIDemo/SwiftUIDemo/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict/>\n</plist>\n"
  },
  {
    "path": "SwiftUIDemo/SwiftUIDemo/Preview Content/Preview Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "SwiftUIDemo/SwiftUIDemo/SwiftUIDemoApp.swift",
    "content": "//\n//  SwiftUIDemoApp.swift\n//  SwiftUIDemo\n//\n//  Created by Timothy Moose on 10/5/23.\n//\n\nimport SwiftUI\n\n@main\nstruct SwiftUIDemoApp: App {\n    var body: some Scene {\n        WindowGroup {\n            DemoView()\n        }\n    }\n}\n"
  },
  {
    "path": "SwiftUIDemo/SwiftUIDemo.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 56;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t22549DC02B55CFE8005E3E21 /* DemoMessageWithButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22549DBF2B55CFE8005E3E21 /* DemoMessageWithButtonView.swift */; };\n\t\t228F7DAD2ACF17E8006C9644 /* SwiftUIDemoApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 228F7DAC2ACF17E8006C9644 /* SwiftUIDemoApp.swift */; };\n\t\t228F7DAF2ACF17E8006C9644 /* DemoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 228F7DAE2ACF17E8006C9644 /* DemoView.swift */; };\n\t\t228F7DB12ACF17E9006C9644 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 228F7DB02ACF17E9006C9644 /* Assets.xcassets */; };\n\t\t228F7DB42ACF17E9006C9644 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 228F7DB32ACF17E9006C9644 /* Preview Assets.xcassets */; };\n\t\t228F7DC82ACF1E63006C9644 /* SwiftMessages.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 228F7DC32ACF1E1E006C9644 /* SwiftMessages.framework */; };\n\t\t228F7DC92ACF1E63006C9644 /* SwiftMessages.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 228F7DC32ACF1E1E006C9644 /* SwiftMessages.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t228F7DD52ACF59E4006C9644 /* DemoMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 228F7DD42ACF59E4006C9644 /* DemoMessage.swift */; };\n\t\t228F7DD72ACF5C2E006C9644 /* DemoMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 228F7DD62ACF5C2E006C9644 /* DemoMessageView.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t228F7DC22ACF1E1E006C9644 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 228F7DBD2ACF1E1E006C9644 /* SwiftMessages.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 86B48AEC1D5A41C900063E2B;\n\t\t\tremoteInfo = SwiftMessages;\n\t\t};\n\t\t228F7DC42ACF1E1E006C9644 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 228F7DBD2ACF1E1E006C9644 /* SwiftMessages.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 86B48AF51D5A41C900063E2B;\n\t\t\tremoteInfo = SwiftMessagesTests;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t228F7DCA2ACF1E63006C9644 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\t228F7DC92ACF1E63006C9644 /* SwiftMessages.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t22549DBF2B55CFE8005E3E21 /* DemoMessageWithButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoMessageWithButtonView.swift; sourceTree = \"<group>\"; };\n\t\t228F7DA92ACF17E8006C9644 /* SwiftUIDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftUIDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t228F7DAC2ACF17E8006C9644 /* SwiftUIDemoApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUIDemoApp.swift; sourceTree = \"<group>\"; };\n\t\t228F7DAE2ACF17E8006C9644 /* DemoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoView.swift; sourceTree = \"<group>\"; };\n\t\t228F7DB02ACF17E9006C9644 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t228F7DB32ACF17E9006C9644 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = \"Preview Assets.xcassets\"; sourceTree = \"<group>\"; };\n\t\t228F7DBB2ACF1DB5006C9644 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t228F7DBD2ACF1E1E006C9644 /* SwiftMessages.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = SwiftMessages.xcodeproj; path = ../SwiftMessages.xcodeproj; sourceTree = \"<group>\"; };\n\t\t228F7DD42ACF59E4006C9644 /* DemoMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoMessage.swift; sourceTree = \"<group>\"; };\n\t\t228F7DD62ACF5C2E006C9644 /* DemoMessageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoMessageView.swift; sourceTree = \"<group>\"; };\n\t\t2291AA492AD1E3EC0084868E /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = \"<group>\"; };\n\t\t2291AA4C2AD1E4520084868E /* CHANGELOG.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = CHANGELOG.md; path = ../CHANGELOG.md; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t228F7DA62ACF17E8006C9644 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t228F7DC82ACF1E63006C9644 /* SwiftMessages.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t228F7DA02ACF17E8006C9644 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2291AA4C2AD1E4520084868E /* CHANGELOG.md */,\n\t\t\t\t2291AA492AD1E3EC0084868E /* README.md */,\n\t\t\t\t228F7DAB2ACF17E8006C9644 /* SwiftUIDemo */,\n\t\t\t\t228F7DAA2ACF17E8006C9644 /* Products */,\n\t\t\t\t228F7DC72ACF1E63006C9644 /* Frameworks */,\n\t\t\t\t228F7DBD2ACF1E1E006C9644 /* SwiftMessages.xcodeproj */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t228F7DAA2ACF17E8006C9644 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t228F7DA92ACF17E8006C9644 /* SwiftUIDemo.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t228F7DAB2ACF17E8006C9644 /* SwiftUIDemo */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t228F7DBB2ACF1DB5006C9644 /* Info.plist */,\n\t\t\t\t228F7DAC2ACF17E8006C9644 /* SwiftUIDemoApp.swift */,\n\t\t\t\t228F7DAE2ACF17E8006C9644 /* DemoView.swift */,\n\t\t\t\t228F7DD42ACF59E4006C9644 /* DemoMessage.swift */,\n\t\t\t\t228F7DD62ACF5C2E006C9644 /* DemoMessageView.swift */,\n\t\t\t\t22549DBF2B55CFE8005E3E21 /* DemoMessageWithButtonView.swift */,\n\t\t\t\t228F7DB02ACF17E9006C9644 /* Assets.xcassets */,\n\t\t\t\t228F7DB22ACF17E9006C9644 /* Preview Content */,\n\t\t\t);\n\t\t\tpath = SwiftUIDemo;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t228F7DB22ACF17E9006C9644 /* Preview Content */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t228F7DB32ACF17E9006C9644 /* Preview Assets.xcassets */,\n\t\t\t);\n\t\t\tpath = \"Preview Content\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t228F7DBE2ACF1E1E006C9644 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t228F7DC32ACF1E1E006C9644 /* SwiftMessages.framework */,\n\t\t\t\t228F7DC52ACF1E1E006C9644 /* SwiftMessagesTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t228F7DC72ACF1E63006C9644 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t228F7DA82ACF17E8006C9644 /* SwiftUIDemo */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 228F7DB72ACF17E9006C9644 /* Build configuration list for PBXNativeTarget \"SwiftUIDemo\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t228F7DA52ACF17E8006C9644 /* Sources */,\n\t\t\t\t228F7DA62ACF17E8006C9644 /* Frameworks */,\n\t\t\t\t228F7DA72ACF17E8006C9644 /* Resources */,\n\t\t\t\t228F7DCA2ACF1E63006C9644 /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = SwiftUIDemo;\n\t\t\tproductName = SwiftUIDemo;\n\t\t\tproductReference = 228F7DA92ACF17E8006C9644 /* SwiftUIDemo.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t228F7DA12ACF17E8006C9644 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tBuildIndependentTargetsInParallel = 1;\n\t\t\t\tLastSwiftUpdateCheck = 1500;\n\t\t\t\tLastUpgradeCheck = 1500;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t228F7DA82ACF17E8006C9644 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 15.0;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 228F7DA42ACF17E8006C9644 /* Build configuration list for PBXProject \"SwiftUIDemo\" */;\n\t\t\tcompatibilityVersion = \"Xcode 14.0\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 228F7DA02ACF17E8006C9644;\n\t\t\tproductRefGroup = 228F7DAA2ACF17E8006C9644 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectReferences = (\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 228F7DBE2ACF1E1E006C9644 /* Products */;\n\t\t\t\t\tProjectRef = 228F7DBD2ACF1E1E006C9644 /* SwiftMessages.xcodeproj */;\n\t\t\t\t},\n\t\t\t);\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t228F7DA82ACF17E8006C9644 /* SwiftUIDemo */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXReferenceProxy section */\n\t\t228F7DC32ACF1E1E006C9644 /* SwiftMessages.framework */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = wrapper.framework;\n\t\t\tpath = SwiftMessages.framework;\n\t\t\tremoteRef = 228F7DC22ACF1E1E006C9644 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t228F7DC52ACF1E1E006C9644 /* SwiftMessagesTests.xctest */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = wrapper.cfbundle;\n\t\t\tpath = SwiftMessagesTests.xctest;\n\t\t\tremoteRef = 228F7DC42ACF1E1E006C9644 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n/* End PBXReferenceProxy section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t228F7DA72ACF17E8006C9644 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t228F7DB42ACF17E9006C9644 /* Preview Assets.xcassets in Resources */,\n\t\t\t\t228F7DB12ACF17E9006C9644 /* Assets.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t228F7DA52ACF17E8006C9644 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t228F7DD52ACF59E4006C9644 /* DemoMessage.swift in Sources */,\n\t\t\t\t228F7DD72ACF5C2E006C9644 /* DemoMessageView.swift in Sources */,\n\t\t\t\t228F7DAF2ACF17E8006C9644 /* DemoView.swift in Sources */,\n\t\t\t\t228F7DAD2ACF17E8006C9644 /* SwiftUIDemoApp.swift in Sources */,\n\t\t\t\t22549DC02B55CFE8005E3E21 /* DemoMessageWithButtonView.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t228F7DB52ACF17E9006C9644 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++20\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tENABLE_USER_SCRIPT_SANDBOXING = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu17;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 17.0;\n\t\t\t\tLOCALIZATION_PREFERS_STRING_CATALOGS = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"DEBUG $(inherited)\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t228F7DB62ACF17E9006C9644 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++20\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_USER_SCRIPT_SANDBOXING = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu17;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 17.0;\n\t\t\t\tLOCALIZATION_PREFERS_STRING_CATALOGS = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t228F7DB82ACF17E9006C9644 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_ASSET_PATHS = \"\\\"SwiftUIDemo/Preview Content\\\"\";\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\n\t\t\t\tENABLE_PREVIEWS = YES;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = SwiftUIDemo/Info.plist;\n\t\t\t\tINFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;\n\t\t\t\tINFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;\n\t\t\t\tINFOPLIST_KEY_UILaunchScreen_Generation = YES;\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = \"UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight\";\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = \"UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.swiftkickmobile.SwiftMessages.SwiftUIDemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t228F7DB92ACF17E9006C9644 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_ASSET_PATHS = \"\\\"SwiftUIDemo/Preview Content\\\"\";\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\n\t\t\t\tENABLE_PREVIEWS = YES;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = SwiftUIDemo/Info.plist;\n\t\t\t\tINFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;\n\t\t\t\tINFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;\n\t\t\t\tINFOPLIST_KEY_UILaunchScreen_Generation = YES;\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = \"UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight\";\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = \"UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.swiftkickmobile.SwiftMessages.SwiftUIDemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t228F7DA42ACF17E8006C9644 /* Build configuration list for PBXProject \"SwiftUIDemo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t228F7DB52ACF17E9006C9644 /* Debug */,\n\t\t\t\t228F7DB62ACF17E9006C9644 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t228F7DB72ACF17E9006C9644 /* Build configuration list for PBXNativeTarget \"SwiftUIDemo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t228F7DB82ACF17E9006C9644 /* Debug */,\n\t\t\t\t228F7DB92ACF17E9006C9644 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 228F7DA12ACF17E8006C9644 /* Project object */;\n}\n"
  },
  {
    "path": "SwiftUIDemo/SwiftUIDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "SwiftUIDemo/SwiftUIDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "ViewControllers.md",
    "content": "# View Controllers\n\n[`SwiftMessagesSegue`](./SwiftMessages/SwiftMessagesSegue.swift) is a configurable subclass of `UIStoryboardSegue` that presents and dismisses modal view controllers by acting as the presenting view controller's `transitioningDelegate` and utilizing SwiftMessages' `show()` and `hide()` function on the destination view controller's view.\n\n## Usage\n\n### Interface Builder\n\nFirst, create a segue by control-dragging from the sender element to the destination view controller. Then select \"swift messages\" (or the name of a `SwiftMessagesSegue` subclass) in the segue type prompt. In the image below, we've created a segue using the `VeryNiceSegue` subclass by selecting \"very nice\" from the prompt.\n\n<p align=\"center\">\n  <img src=\"./Design/SwiftMessagesSegueCreate.png\" />\n</p>\n\n### Programatic\n\n`SwiftMessagesSegue` can be used without an associated storyboard or segue by doing the following in the presenting view controller.\n\n````swift\nlet destinationVC = ... // make a reference to a destination view controller\nlet segue = SwiftMessagesSegue(identifier: nil, source: self, destination: destinationVC)\n... // do any configuration here\nsegue.perform()\n````\n\nTo dismiss, call the UIKit API on the presenting view controller:\n\n````swift\ndismiss(animated: true, completion: nil)\n````\n\nIt is not necessary to retain `segue` because it retains itself until dismissal. However, you can retain it if you plan to `perform()` more than once.\n\n#### Present the controller on top of all controllers\n\nIf you don't know the presenter or you don't want to pass it as a source, like when you\nhave a completely separated message controller, you can pass a `WindowViewController`\nas the `source` argument of the segue's initializer.\n\nBy default, the window will be shown in the current window scene at `.normal` window level.\nHowever, these parameters can be customized by initializing the view controller with a `SwiftMessages.Config` that has the `SwiftMessages.Config.presentationContext` set to either `.window` or `.windowScene`:\n\n```swift\nlet destinationVC = ... // make a reference to a destination view controller\nvar config = SwiftMessages.defaultConfig\nconfig.presentationContext = .windowScene(...) // specify the window properties\nlet sourceVC = WindowViewController(config: config)\nlet segue = SwiftMessagesSegue(identifier: nil, source: self, destination: destinationVC)\nsegue.perform()\n```\n\n### Configuration\n\n`SwiftMessagesSegue` generally requires configuration to achieve specific layouts and optional behaviors. There are a few good ways to do this:\n\n1. __(Recommended)__ Subclass `SwiftMessagesSegue` and apply configurations in `init(identifier:source:destination:)`. Subclasses will automatically appear in the segue type dialog using an auto-generated name. For example, the name for \"VeryNiceSegue\" would be \"very nice\".\n\n\n    ```swift\n    class VeryNiceSegue: SwiftMessagesSegue {\n        override public  init(identifier: String?, source: UIViewController, destination: UIViewController) {\n            super.init(identifier: identifier, source: source, destination: destination)\n            configure(layout: .bottomCard)\n            dimMode = .blur(style: .dark, alpha: 0.9, interactive: true)\n            messageView.configureNoDropShadow()\n        }\n    }\n    ```\n\n\n1. Apply configurations in `prepare(for:sender:)` of the presenting view controller after down-casting the segue to `SwiftMessagesSegue`.\n\n    ````swift\n    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n        if let segue = segue as? SwiftMessagesSegue {\n            segue.configure(layout: .bottomCard)\n            segue.dimMode = .blur(style: .dark, alpha: 0.9, interactive: true)\n            segue.messageView.configureNoDropShadow()\n        }\n    }\n    ````\n\nThe `configure(layout:)` method is a shortcut for configuring some basic layout and animation options that roughly mirror the options in `SwiftMessages.Layout`.\n\n````swift\n// Configure a bottom card-style presentation\nsegue.configure(layout: .bottomCard)\n````\n\nMany more styles can be achieved by customizing the underlying options. Some of the `SwiftMessages.Config` options are useful for view controller presentation and are mirrored on `SwiftMessagesSegue`.\n\n````swift\n// Turn off interactive dismiss\nsegue.interactiveHide = false\n\n// Enable dimmed background with tap-to-dismiss\nsegue.dimMode = .gray(interactive: true)\n\n// Specify the animation and positioning\nsegue.presentationStyle = .bottom\n````\n\nThe `messageView` property provides access to an instance of [`BaseView`](./SwiftMessages/BaseView.swift), the superclass of [`MessageView`](./SwiftMessages/MessageView.swift), that serves as the view presented by SwiftMessages. The view controller's view is contained as a descendant of this view. There are some useful options available on `messageView`:\n\n````swift\n// Increase the internal layout margins. With the `.background` containment option,\n// the margin additions specify the outer margins around `messageView.backgroundView`.\nsegue.messageView.layoutMarginAdditions = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)\n\n// Collapse layout margin edges that encroach on non-zero safe area insets.\nmessageView.collapseLayoutMarginAdditions = true\n\n// Add a default drop shadow.\nsegue.messageView.configureDropShadow()\n\n// Indicate that the view controller's view should be installed\n// as the `backgroundView` of `messageView`.\nsegue.containment = .background\n````\n\nThe view controller's view is a direct subview of `containerView`, an instance of [`ViewControllerContainerView`](./SwiftMessages/ViewControllerContainerView.swift), which provides corner rounding options.\n\n````swift\n// Change the corner radius\nsegue.containerView.cornerRadius = 20\n````\n\n### Sizing\n\n`SwiftMessagesSegue` provides default view controller sizing based on device, with width on iPad being limited to 500pt max. However, it is recommended that you explicitly specify size appropriate for your content using one of the following methods.\n  1. Define sufficient width and height constraints in your view controller such that it sizes itself.\n  1. Set the `preferredContentSize` property (a.k.a \"Use Preferred Explicit Size\" in Interface Builder's attribute inspector). Zeros are ignored, e.g. `CGSize(width: 0, height: 350)` only affects the height.\n  1. Add explicit width and/or height constraints to `segue.messageView.backgroundView`.  \n\nNote that `Layout.topMessage` and `Layout.bottomMessage` are always full screen width. For other layouts, the there is a maximum 500pt width on for regular horizontal size class (iPad) at 950 priority. This limit can be overridden by adding higher-priority constraints.\n\n### Keyboard Avoidance\n\nThe `KeyboardTrackingView` class can be used to cause the message view to avoid the keyboard by sliding up when the keyboard gets too close.\n\n````swift\nsegue.keyboardTrackingView = KeyboardTrackingView()\n````\n\nYou can incorporate `KeyboardTrackingView` into your app even when you're not using SwiftMessages. Install into your view hierarchy by pinning `KeyboardTrackingView` to the bottom, leading, and trailing edges of the screen. Then pin the bottom of your content that should avoid the keyboard to the top `KeyboardTrackingView`. Use an equality constraint to strictly track the keyboard or an inequality constraint to only move when the keyboard gets too close. `KeyboardTrackingView` works by observing keyboard notifications and adjusting its height to maintain its top edge above the keyboard, thereby pushing your content up. See the comments in `KeyboardTrackingView` for configuration options.\n\nSee [`SwiftMessagesSegue`](./SwiftMessages/SwiftMessagesSegue.swift) for additional documentation and technical details.\n"
  },
  {
    "path": "iMessageDemo/.Podfile",
    "content": "target 'iMessageDemo' do\n   use_frameworks!\n   workspace 'iMessageDemo.xcworkspace'\n   xcodeproj 'iMessageDemo.xcodeproj'\nend\n\ntarget 'iMessageExtensionDemo' do\n   use_frameworks!\n   workspace 'iMessageDemo.xcworkspace'\n   xcodeproj 'iMessageDemo.xcodeproj'\n   pod 'SwiftMessages/AppExtension', :path => '../'\nend\n"
  },
  {
    "path": "iMessageDemo/Podfile",
    "content": "# Uncomment the next line to define a global platform for your project\n# platform :ios, '9.0'\n\ninstall! 'cocoapods',\n    :share_schemes_for_development_pods => false\n\ntarget 'iMessageDemo' do\n  # Comment the next line if you don't want to use dynamic frameworks\n  use_frameworks!\n\n  # Pods for iMessageDemo\n\nend\n\ntarget 'iMessageExtensionDemo' do\n  # Comment the next line if you don't want to use dynamic frameworks\n  use_frameworks!\n\n  # Pods for iMessageExtensionDemo\n  pod 'SwiftMessages/AppExtension', :path => \"../\"\n\nend\n\npost_install do |installer|\n  # Blow away schemes – the schemes created by CocoaPods break Carthage builds\n  # because they incluede a SwiftMessages framework that Carthage picks\n  # over the main SwiftMessages framework. The SwiftMessages framework that gets\n  # picked is configured for an app extension and doesn't work correctly in an app.\n  File.directory?(path)\n  [\n    \"#{installer.sandbox.root}/Pods.xcodeproj/xcuserdata\",\n    \"#{installer.sandbox.root}/Pods.xcodeproj/xcshareddata\"\n  ].each { |path|\n    if File.directory?(path)\n      FileUtils.remove_dir(path)\n    end\n  }\nend\n"
  },
  {
    "path": "iMessageDemo/Pods/Local Podspecs/SwiftMessages.podspec.json",
    "content": "{\n  \"name\": \"SwiftMessages\",\n  \"version\": \"10.0.1\",\n  \"license\": {\n    \"type\": \"MIT\"\n  },\n  \"homepage\": \"https://github.com/SwiftKickMobile/SwiftMessages\",\n  \"authors\": {\n    \"Timothy Moose\": \"tim@swiftkickmobile.com\"\n  },\n  \"summary\": \"A very flexible message bar for iOS written in Swift.\",\n  \"source\": {\n    \"git\": \"https://github.com/SwiftKickMobile/SwiftMessages.git\",\n    \"tag\": \"10.0.1\"\n  },\n  \"platforms\": {\n    \"ios\": \"13.0\"\n  },\n  \"swift_versions\": \"5.0\",\n  \"frameworks\": \"UIKit\",\n  \"requires_arc\": true,\n  \"default_subspecs\": \"App\",\n  \"subspecs\": [\n    {\n      \"name\": \"App\",\n      \"source_files\": \"SwiftMessages/**/*.swift\",\n      \"resource_bundles\": {\n        \"SwiftMessages\": [\n          \"SwiftMessages/Resources/*.*\"\n        ]\n      }\n    },\n    {\n      \"name\": \"AppExtension\",\n      \"source_files\": \"SwiftMessages/**/*.swift\",\n      \"exclude_files\": \"SwiftMessages/**/SegueConvenienceClasses.swift\",\n      \"resource_bundles\": {\n        \"SwiftMessages_SwiftMessages\": [\n          \"SwiftMessages/Resources/**/*.*\"\n        ]\n      },\n      \"pod_target_xcconfig\": {\n        \"SWIFT_ACTIVE_COMPILATION_CONDITIONS\": \"SWIFTMESSAGES_APP_EXTENSIONS\",\n        \"GCC_PREPROCESSOR_DEFINITIONS\": \"SWIFTMESSAGES_APP_EXTENSIONS=1\"\n      }\n    }\n  ],\n  \"swift_version\": \"5.0\"\n}\n"
  },
  {
    "path": "iMessageDemo/Pods/Pods.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t00A4A53E0D1EFC70DA1EFAEFA82C4BA1 /* Weak.swift in Sources */ = {isa = PBXBuildFile; fileRef = 442F9FAEDF369CADB9E6E8FF3668FD95 /* Weak.swift */; };\n\t\t03C7FA1BE62CCD280D63F4C7CDDFB27F /* AccessibleMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9E8A4D41E0A0E52C839F7197C4CE2A0 /* AccessibleMessage.swift */; };\n\t\t04BCE3C12FDE7E91C9EF1FE154E80E2B /* SwiftMessageModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = B19DACBEC8DD85FB850D299DFB7A0374 /* SwiftMessageModifier.swift */; };\n\t\t04C771EB4784B94AC6CA28ED6A919D50 /* WindowScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AB9866F195EB0AED31A33AEC27B67C1 /* WindowScene.swift */; };\n\t\t096A6663757CB52C8A34B3E3146279C8 /* infoIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2CF5DC74916EBE02E70234620CD80150 /* infoIcon@2x.png */; };\n\t\t0ADA608E3B9307694DCF4D0BC426E7FE /* warningIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B241F1B5D295E7806363B802DF03A085 /* warningIcon@2x.png */; };\n\t\t0C093AF5F4D753325F4CE92F2F943CB4 /* MarginAdjustable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14DF8F43552C4F1C4CAEFBAFD9A77004 /* MarginAdjustable.swift */; };\n\t\t0D53997CCCD141D2303E87C29CEFE211 /* MessageView.xib in Resources */ = {isa = PBXBuildFile; fileRef = A4D741EF8B40F5472CE2C1C1A34426BD /* MessageView.xib */; };\n\t\t1441D5A06DD6903562EB794FC1AE8822 /* TabView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C33B3DA756F19F5C93D498D557BEB820 /* TabView.xib */; };\n\t\t158EF18377B720081C31C2F2100DDA7A /* Presenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D18688EA04EA2F2BC48ED05D1FE5404 /* Presenter.swift */; };\n\t\t19C0F7897044E72D3A13DE703920FFE1 /* MessageHostingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F989D33CAC3BCDA9B3C4B18F23A4DBE /* MessageHostingView.swift */; };\n\t\t1E507663F3C402CBCA0C50A876F472EF /* errorIconLight@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D6A205E933052E98349DC710D78304CB /* errorIconLight@3x.png */; };\n\t\t205A52121D20436063240893A461B29C /* errorIconSubtle@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 38D28C78FCAE6706F1294CEFA6B25F88 /* errorIconSubtle@2x.png */; };\n\t\t24DA4886290040A0EC88B63D82EF412D /* warningIconSubtle@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5E02B1554754BA1F8EF318D567875139 /* warningIconSubtle@3x.png */; };\n\t\t274D5DE28E0446655163A48E2272860A /* CornerRoundingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86872F4639B26435D20BED0CE7E35C7F /* CornerRoundingView.swift */; };\n\t\t28D6446B971F186BACDED83CD8DE4D44 /* SwiftMessages-SwiftMessages_SwiftMessages in Resources */ = {isa = PBXBuildFile; fileRef = BEBF018059B0DFCAC8494ABD1C578AD9 /* SwiftMessages-SwiftMessages_SwiftMessages */; };\n\t\t31660027252C457325491844F16AEBDD /* successIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 74793ADC8ADF7674EA6C3041E2B54354 /* successIcon.png */; };\n\t\t330C59E62D17601422EDB29513B9856C /* SwiftMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC10D7DB2D227D4AA8F41CDFDDC24F37 /* SwiftMessages.swift */; };\n\t\t3451B2775584DD75A3BDF9BF28A03F76 /* SwiftMessagesSegue.swift in Sources */ = {isa = PBXBuildFile; fileRef = B17EF282E0A0F329DDF17226E83706F8 /* SwiftMessagesSegue.swift */; };\n\t\t3479628DE3B6C9005316A7F591F5E68F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; };\n\t\t360BEE76BBF40319E6638B3E027E1474 /* errorIconSubtle.png in Resources */ = {isa = PBXBuildFile; fileRef = EDFC2E756AAB98672C4B241097AAF0F6 /* errorIconSubtle.png */; };\n\t\t3613DBA9CBD7E092BD7DC1924E6648D2 /* infoIconLight@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ACCCF5B75EA41D844ED936A92602C5B1 /* infoIconLight@2x.png */; };\n\t\t37A8DD40AF13BCABE7A3CD8EF15A4C53 /* successIconSubtle@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D146564C0660B5F616D6736F6560E17C /* successIconSubtle@2x.png */; };\n\t\t3C566158256E9CC711B73810B2C64E3B /* KeyboardTrackingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A99EE79DBFA3C24A372DDB69162E36C /* KeyboardTrackingView.swift */; };\n\t\t3F53FCE80C716C7DE7A3B1D8D65077BC /* CALayer+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35F5FB13175EC0E13D53B445CE31395A /* CALayer+Extensions.swift */; };\n\t\t422B422F962FD298F963F84934A21529 /* infoIconLight.png in Resources */ = {isa = PBXBuildFile; fileRef = C3701E97FDB85EFCE90E06D8CBC8ED41 /* infoIconLight.png */; };\n\t\t436D8C63FBE86FF8271ABC32F9A52A9D /* Pods-iMessageDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 14BF989232A1D55A0FDAAB70B5A8E1BF /* Pods-iMessageDemo-dummy.m */; };\n\t\t450919BA3A4D984DC24822CD80483419 /* TopBottomPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A102DE8896931D80E06F2C74C2B003AC /* TopBottomPresentable.swift */; };\n\t\t45A4B95F1F73413A3001B95E1F91D697 /* UIWindow+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBC808D0C98F682E01DC43B544ED093F /* UIWindow+Extensions.swift */; };\n\t\t4609D5EC365EABFE507781BF911B887B /* warningIconLight.png in Resources */ = {isa = PBXBuildFile; fileRef = 004EE347886E2355CCB352F2AE7A35D6 /* warningIconLight.png */; };\n\t\t469995B0FC2E3748F59D0E3A4445E197 /* CenteredView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 975A42F4C16B65B38769916EC5468D2A /* CenteredView.xib */; };\n\t\t47CC2A912B82A499DB2F5E2ADBE664CF /* HapticMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA8BFA921A44ED7AEAA0E08BCE17EDDA /* HapticMessage.swift */; };\n\t\t47EFB870CC797D2F54396F0AEBC8F576 /* errorIconLight.png in Resources */ = {isa = PBXBuildFile; fileRef = EC387534FD34764D4CC28B276A500AD6 /* errorIconLight.png */; };\n\t\t48ADA8D4633776558E7D216434057A2A /* SwiftMessages.Config+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D83D1CC131CDAC7CA2C5BFD8701E8A79 /* SwiftMessages.Config+Extensions.swift */; };\n\t\t4980F404C2B391C621CE2BCF05E08BDF /* errorIconSubtle@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C12E87D0EA045A56FC0B45F072C74D2 /* errorIconSubtle@3x.png */; };\n\t\t4C9FED5D268E82325C17309FB8904C43 /* warningIcon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = B8B9892D8D5596E09F02DA2D71BF60B4 /* warningIcon@3x.png */; };\n\t\t52A01853AC4F2D0E720579D7F8A531CF /* WindowViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9908774A62A95BF5BA8FE65842868043 /* WindowViewController.swift */; };\n\t\t60F02D519964FFEE8A21221FF5E0B0C5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; };\n\t\t61F532D30833A9FF1DE00EC98BC018C2 /* successIconLight@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5686DFC1E0B24A3051EF376AD8A162C0 /* successIconLight@3x.png */; };\n\t\t634267873AC0F98140DBAFFF9A180BA8 /* MarginAdjustable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B602E4E64DAEF1468DD2F5C2C5DFD00 /* MarginAdjustable+Extensions.swift */; };\n\t\t6583C565BE5BB9E52213854AA85F5A93 /* warningIconSubtle.png in Resources */ = {isa = PBXBuildFile; fileRef = 6924A0A48B715EA35080ABB106B96BF7 /* warningIconSubtle.png */; };\n\t\t67DC4D170143131B8AFFB558FDD00465 /* SwiftMessages-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D091A06E439F734980F26F81E9161EF2 /* SwiftMessages-dummy.m */; };\n\t\t67F7D444EAC4475021B3458B21B2A162 /* Identifiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88398B7A70E5B00495B670516D964701 /* Identifiable.swift */; };\n\t\t698F203577674AFA4BBCDE93B01B9EEC /* UIViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57EB79F63EA99ADBBDA408015A4599BB /* UIViewController+Extensions.swift */; };\n\t\t6A04C3E1C3437ED6BC6F096302B458AB /* errorIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8605740B16E17342A29212D21C380249 /* errorIcon@2x.png */; };\n\t\t6CDE06668BB53C70BF1456F8EEE845D9 /* infoIconSubtle@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = C40BBCF3A77C5C7A01708634BB4275C3 /* infoIconSubtle@3x.png */; };\n\t\t6DC0B420F622E197919276CFF2C063CE /* BaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790409B3FBA491A9262ACCB929F30104 /* BaseView.swift */; };\n\t\t72026C4424B7A1650CBEED98ED9AA288 /* successIconSubtle.png in Resources */ = {isa = PBXBuildFile; fileRef = 7B9CEE1B17C98E76723E7404C532515D /* successIconSubtle.png */; };\n\t\t744EA4AF597AFEFEE5B398434F47CA26 /* warningIconLight@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 71699C81494BC6585B862CDFC1CDAF54 /* warningIconLight@2x.png */; };\n\t\t7590FF543E2634A83059E509D5B05583 /* Pods-iMessageExtensionDemo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CAB201AD00CAB811B045E2FFB5C03A8 /* Pods-iMessageExtensionDemo-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t79BB175F4750822409AB9ED0A9D90D09 /* successIcon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6EA088414C10E47808EA8490D9BBF64F /* successIcon@3x.png */; };\n\t\t81B1015F29547CAB449757FC5ABCAFAB /* warningIconLight@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5FE01208AD70F1B35201AB04E50A23EC /* warningIconLight@3x.png */; };\n\t\t88D024879AEAE247899BFB50C8516515 /* Pods-iMessageDemo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D0ECE831FB5E0EE1D68E837671320C7 /* Pods-iMessageDemo-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t8CB7CCDF07E1CE6838C7278BC19968B6 /* infoIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 79A086337846180B9A63D8492CCE45B4 /* infoIcon.png */; };\n\t\t8F63F1ABAB21FA99A6CB1A54D5F2B5AA /* infoIcon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 560722B244EB84DF745199247129C164 /* infoIcon@3x.png */; };\n\t\t942468E4C1AEFCF10D5043243B4007E7 /* NSBundle+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073CD58B2E8E255484D239A01D707B81 /* NSBundle+Extensions.swift */; };\n\t\t9FBBA6E4D3A2A4CA4BA8535E35D54CA8 /* successIconLight@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 44DAC25C8D6D72F70BD1CF9099BDAF10 /* successIconLight@2x.png */; };\n\t\tA4724FC3B4F49DCBF50D395257BB6B8E /* CardView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 03B5D12D54ACC75F929389CFF15E91FF /* CardView.xib */; };\n\t\tA52191D65F4C725EBF61D27F40FEA970 /* infoIconLight@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 88237113DAAD8ECF8D5E3FAA27D8A02F /* infoIconLight@3x.png */; };\n\t\tA836F848C83565B2A0A06AB23D491946 /* MessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9BBC4BF82FBB152E34F2D1EF36A0FB1 /* MessageView.swift */; };\n\t\tA865FCE8718103C8E725EC1EC0F9F4F6 /* BackgroundViewable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86C1C9601BF8A5BC563062C310C0E3B5 /* BackgroundViewable.swift */; };\n\t\tA8C4AD87F73E9C51F797F34BCFF5AA17 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; };\n\t\tA8EF6BE26B31A8713E37E0629F6466EB /* successIconLight.png in Resources */ = {isa = PBXBuildFile; fileRef = 252A5DF0FE3237691B8C50B969857389 /* successIconLight.png */; };\n\t\tA90C06B459CC64A243DD1184024E5D22 /* infoIconSubtle.png in Resources */ = {isa = PBXBuildFile; fileRef = A6C7FF0D9E13571262231B72D0553E49 /* infoIconSubtle.png */; };\n\t\tB04AA81A8A8CE0BCEFD5FAFD841F461F /* Task+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9610DCAAD9A55CDF73BAD54D523E1273 /* Task+Extensions.swift */; };\n\t\tB1B4D240B65FFC5A7A981B9504C55270 /* NSLayoutConstraint+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 882EF814D0A1EE2AB28BFEE5C067EE6F /* NSLayoutConstraint+Extensions.swift */; };\n\t\tB22AF07D79D1A82DE583AC49E3D472D3 /* Pods-iMessageExtensionDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F40CA14AD738DD186B4DA8FD14AE5BD /* Pods-iMessageExtensionDemo-dummy.m */; };\n\t\tB61EBE61C31E78140BF12D32A008A43B /* StatusLine.xib in Resources */ = {isa = PBXBuildFile; fileRef = 62332870F1E2AE3FA16EE5ADC85C104A /* StatusLine.xib */; };\n\t\tB646E1CD53F14E0DEE53740799C06AC5 /* SwiftMessages-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 080E269BABA7D072D8C51E29E9AC4A91 /* SwiftMessages-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB6D0E2FA454A946D6C9A7494648F49D9 /* MessageGeometryProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28456F0421422D16D71D14D426309B3F /* MessageGeometryProxy.swift */; };\n\t\tB9FDFA90A4FB68CA5357AB70427B4DCD /* TopBottomAnimationStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = C61DD3C66AC7ADE1E9CCFE7A4A0BEA59 /* TopBottomAnimationStyle.swift */; };\n\t\tBA4779B82B35B85EFE9F595624BA3943 /* UIEdgeInsets+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16B5B2B5429B01345E4DA361DE01904D /* UIEdgeInsets+Extensions.swift */; };\n\t\tBAB66573FF29F6337237A8DA0EB9E3E8 /* PassthroughWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0398CE267904AF6C2FD03B3766511ECF /* PassthroughWindow.swift */; };\n\t\tBBF31491EF3411DCFA7E649645229E2A /* successIconSubtle@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 47A710678B44C50DA470D1BCF94B87B8 /* successIconSubtle@3x.png */; };\n\t\tC2031E7EC3C60B876F2AC04253D3AFC4 /* MessageViewConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06DB4311BFB347093FC18777A503B461 /* MessageViewConvertible.swift */; };\n\t\tCCBFBDB03B2444C911BADDE6A6BA08AD /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9414B7316138752779A4B9C7E5C988DB /* Error.swift */; };\n\t\tD3B31A631C754CAECABFA4DC672D3D0B /* warningIconSubtle@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 85C6BEF274CDB3807F9BD452A26C68E6 /* warningIconSubtle@2x.png */; };\n\t\tD8DFC45149C57377B5C90B3457090564 /* warningIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = D47C1471CCFFBEF214DF9F0ECBDD408B /* warningIcon.png */; };\n\t\tD9519DD580DF2E744AB4C4087FA28BCD /* Animator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F67BD26788FA0C70E942A7629E41C5E8 /* Animator.swift */; };\n\t\tDC6C4E22FA8DD6FA491066A738132EF1 /* infoIconSubtle@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8026A87EEBF1A86A282563F974C4225C /* infoIconSubtle@2x.png */; };\n\t\tDD406A0C002AC1D02A6E5794B1729C22 /* PassthroughView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03A865E97261799942A6F29092D3D7AE /* PassthroughView.swift */; };\n\t\tDE2531A67AEBFED61A060DF13790C3BE /* errorIcon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 91013DDC05BDB2787740B0C9E5444D23 /* errorIcon@3x.png */; };\n\t\tE03C930AD56F078DCD1357E5C83AD67A /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = B32459A84426DD5E88256AD61F3D4E91 /* Theme.swift */; };\n\t\tE4906D67B9F27E11EE9F8E8F5C847A14 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D245E0514AAC1A2B9A6D5EA2F383E90F /* UIKit.framework */; };\n\t\tE54040398A9AD751393A2171DC64D70E /* errorIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 71D489FBDD84B41576199298F717BC08 /* errorIcon.png */; };\n\t\tEE9A5A3877D99BFCA5DA70BA4E049CA9 /* successIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4DBF06E9B2F93F081139B8A6A922F569 /* successIcon@2x.png */; };\n\t\tF2D3ABB0C7B6EB5B531E4E68C40AA89C /* PhysicsPanHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AEEED9FBEA6C5DB7EE3B95E7D8115B3 /* PhysicsPanHandler.swift */; };\n\t\tF516490B5276943A352D597431B079B6 /* TopBottomAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1F1B1264A726D334A72AB1CB001CA9F /* TopBottomAnimation.swift */; };\n\t\tF667CC7C7F3285FC39427F2AAA8E7665 /* PhysicsAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D7E08E0434930866B59A3F17A3A577B /* PhysicsAnimation.swift */; };\n\t\tF8D0D33FC1C833490057108C322E56CB /* MaskingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC4854845AC1848C056C36719A5D7420 /* MaskingView.swift */; };\n\t\tFC0E2BA3CD9C6C3ACF3681841D8EF5BA /* errorIconLight@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C49B964EF7710D818E0AF0321724EEF4 /* errorIconLight@2x.png */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t146D3A65FCE17293CC3AD6CBEAE15F9A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1FC5E8328653C350899229BDF89FACE5;\n\t\t\tremoteInfo = \"SwiftMessages-SwiftMessages_SwiftMessages\";\n\t\t};\n\t\t70E6358901408AED062E820735630F69 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DAB613A18652334F6BFC5F27BADF515D;\n\t\t\tremoteInfo = SwiftMessages;\n\t\t};\n\t\tD297C84AE0F13FB6A76F2F391D21D679 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DAB613A18652334F6BFC5F27BADF515D;\n\t\t\tremoteInfo = SwiftMessages;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t004EE347886E2355CCB352F2AE7A35D6 /* warningIconLight.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = warningIconLight.png; path = SwiftMessages/Resources/warningIconLight.png; sourceTree = \"<group>\"; };\n\t\t0398CE267904AF6C2FD03B3766511ECF /* PassthroughWindow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PassthroughWindow.swift; path = SwiftMessages/PassthroughWindow.swift; sourceTree = \"<group>\"; };\n\t\t03A865E97261799942A6F29092D3D7AE /* PassthroughView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PassthroughView.swift; path = SwiftMessages/PassthroughView.swift; sourceTree = \"<group>\"; };\n\t\t03B5D12D54ACC75F929389CFF15E91FF /* CardView.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = CardView.xib; path = SwiftMessages/Resources/CardView.xib; sourceTree = \"<group>\"; };\n\t\t06DB4311BFB347093FC18777A503B461 /* MessageViewConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageViewConvertible.swift; path = SwiftMessages/MessageViewConvertible.swift; sourceTree = \"<group>\"; };\n\t\t073CD58B2E8E255484D239A01D707B81 /* NSBundle+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"NSBundle+Extensions.swift\"; path = \"SwiftMessages/NSBundle+Extensions.swift\"; sourceTree = \"<group>\"; };\n\t\t080E269BABA7D072D8C51E29E9AC4A91 /* SwiftMessages-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"SwiftMessages-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t093D5BBE2A96A1A7AC0432A3AB933576 /* Pods-iMessageDemo-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"Pods-iMessageDemo-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t0FD758C8718F3EEFB5E97E34A29CE1CC /* SwiftMessages-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"SwiftMessages-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t1341BB7116EC50FDF7062C6A91DEDF49 /* Pods-iMessageExtensionDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"Pods-iMessageExtensionDemo-acknowledgements.plist\"; sourceTree = \"<group>\"; };\n\t\t14BF989232A1D55A0FDAAB70B5A8E1BF /* Pods-iMessageDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"Pods-iMessageDemo-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t14DF8F43552C4F1C4CAEFBAFD9A77004 /* MarginAdjustable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarginAdjustable.swift; path = SwiftMessages/MarginAdjustable.swift; sourceTree = \"<group>\"; };\n\t\t16B5B2B5429B01345E4DA361DE01904D /* UIEdgeInsets+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"UIEdgeInsets+Extensions.swift\"; path = \"SwiftMessages/UIEdgeInsets+Extensions.swift\"; sourceTree = \"<group>\"; };\n\t\t252A5DF0FE3237691B8C50B969857389 /* successIconLight.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = successIconLight.png; path = SwiftMessages/Resources/successIconLight.png; sourceTree = \"<group>\"; };\n\t\t28456F0421422D16D71D14D426309B3F /* MessageGeometryProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageGeometryProxy.swift; path = SwiftMessages/MessageGeometryProxy.swift; sourceTree = \"<group>\"; };\n\t\t2AB9866F195EB0AED31A33AEC27B67C1 /* WindowScene.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WindowScene.swift; path = SwiftMessages/WindowScene.swift; sourceTree = \"<group>\"; };\n\t\t2CF5DC74916EBE02E70234620CD80150 /* infoIcon@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"infoIcon@2x.png\"; path = \"SwiftMessages/Resources/infoIcon@2x.png\"; sourceTree = \"<group>\"; };\n\t\t2D0ECE831FB5E0EE1D68E837671320C7 /* Pods-iMessageDemo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Pods-iMessageDemo-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t35F5FB13175EC0E13D53B445CE31395A /* CALayer+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"CALayer+Extensions.swift\"; path = \"SwiftMessages/CALayer+Extensions.swift\"; sourceTree = \"<group>\"; };\n\t\t38D28C78FCAE6706F1294CEFA6B25F88 /* errorIconSubtle@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"errorIconSubtle@2x.png\"; path = \"SwiftMessages/Resources/errorIconSubtle@2x.png\"; sourceTree = \"<group>\"; };\n\t\t442F9FAEDF369CADB9E6E8FF3668FD95 /* Weak.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Weak.swift; path = SwiftMessages/Weak.swift; sourceTree = \"<group>\"; };\n\t\t44DAC25C8D6D72F70BD1CF9099BDAF10 /* successIconLight@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"successIconLight@2x.png\"; path = \"SwiftMessages/Resources/successIconLight@2x.png\"; sourceTree = \"<group>\"; };\n\t\t47A710678B44C50DA470D1BCF94B87B8 /* successIconSubtle@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"successIconSubtle@3x.png\"; path = \"SwiftMessages/Resources/successIconSubtle@3x.png\"; sourceTree = \"<group>\"; };\n\t\t4824F23D80FF9070A5F8A452DB11EB9A /* SwiftMessages */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SwiftMessages; path = SwiftMessages.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t4DBF06E9B2F93F081139B8A6A922F569 /* successIcon@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"successIcon@2x.png\"; path = \"SwiftMessages/Resources/successIcon@2x.png\"; sourceTree = \"<group>\"; };\n\t\t560722B244EB84DF745199247129C164 /* infoIcon@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"infoIcon@3x.png\"; path = \"SwiftMessages/Resources/infoIcon@3x.png\"; sourceTree = \"<group>\"; };\n\t\t5686DFC1E0B24A3051EF376AD8A162C0 /* successIconLight@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"successIconLight@3x.png\"; path = \"SwiftMessages/Resources/successIconLight@3x.png\"; sourceTree = \"<group>\"; };\n\t\t573965F15F83BD70EEAC9E1E8B0F85C6 /* SwiftMessages.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = SwiftMessages.podspec; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t57EB79F63EA99ADBBDA408015A4599BB /* UIViewController+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"UIViewController+Extensions.swift\"; path = \"SwiftMessages/UIViewController+Extensions.swift\"; sourceTree = \"<group>\"; };\n\t\t5CAB201AD00CAB811B045E2FFB5C03A8 /* Pods-iMessageExtensionDemo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Pods-iMessageExtensionDemo-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t5E02B1554754BA1F8EF318D567875139 /* warningIconSubtle@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"warningIconSubtle@3x.png\"; path = \"SwiftMessages/Resources/warningIconSubtle@3x.png\"; sourceTree = \"<group>\"; };\n\t\t5F989D33CAC3BCDA9B3C4B18F23A4DBE /* MessageHostingView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageHostingView.swift; path = SwiftMessages/MessageHostingView.swift; sourceTree = \"<group>\"; };\n\t\t5FE01208AD70F1B35201AB04E50A23EC /* warningIconLight@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"warningIconLight@3x.png\"; path = \"SwiftMessages/Resources/warningIconLight@3x.png\"; sourceTree = \"<group>\"; };\n\t\t6228A8E37F7905D75917DD4CBE65B03C /* SwiftMessages.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftMessages.modulemap; sourceTree = \"<group>\"; };\n\t\t62332870F1E2AE3FA16EE5ADC85C104A /* StatusLine.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = StatusLine.xib; path = SwiftMessages/Resources/StatusLine.xib; sourceTree = \"<group>\"; };\n\t\t6489B2A759075E9DC1D1406734F45B5F /* Pods-iMessageExtensionDemo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = \"Pods-iMessageExtensionDemo.modulemap\"; sourceTree = \"<group>\"; };\n\t\t6924A0A48B715EA35080ABB106B96BF7 /* warningIconSubtle.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = warningIconSubtle.png; path = SwiftMessages/Resources/warningIconSubtle.png; sourceTree = \"<group>\"; };\n\t\t6C12E87D0EA045A56FC0B45F072C74D2 /* errorIconSubtle@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"errorIconSubtle@3x.png\"; path = \"SwiftMessages/Resources/errorIconSubtle@3x.png\"; sourceTree = \"<group>\"; };\n\t\t6EA088414C10E47808EA8490D9BBF64F /* successIcon@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"successIcon@3x.png\"; path = \"SwiftMessages/Resources/successIcon@3x.png\"; sourceTree = \"<group>\"; };\n\t\t71699C81494BC6585B862CDFC1CDAF54 /* warningIconLight@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"warningIconLight@2x.png\"; path = \"SwiftMessages/Resources/warningIconLight@2x.png\"; sourceTree = \"<group>\"; };\n\t\t71D489FBDD84B41576199298F717BC08 /* errorIcon.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = errorIcon.png; path = SwiftMessages/Resources/errorIcon.png; sourceTree = \"<group>\"; };\n\t\t74793ADC8ADF7674EA6C3041E2B54354 /* successIcon.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = successIcon.png; path = SwiftMessages/Resources/successIcon.png; sourceTree = \"<group>\"; };\n\t\t790409B3FBA491A9262ACCB929F30104 /* BaseView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseView.swift; path = SwiftMessages/BaseView.swift; sourceTree = \"<group>\"; };\n\t\t79A086337846180B9A63D8492CCE45B4 /* infoIcon.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = infoIcon.png; path = SwiftMessages/Resources/infoIcon.png; sourceTree = \"<group>\"; };\n\t\t7B9CEE1B17C98E76723E7404C532515D /* successIconSubtle.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = successIconSubtle.png; path = SwiftMessages/Resources/successIconSubtle.png; sourceTree = \"<group>\"; };\n\t\t7CC6A596A9C1659D8E93222DA4144414 /* Pods-iMessageExtensionDemo-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"Pods-iMessageExtensionDemo-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t7F40CA14AD738DD186B4DA8FD14AE5BD /* Pods-iMessageExtensionDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"Pods-iMessageExtensionDemo-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t8026A87EEBF1A86A282563F974C4225C /* infoIconSubtle@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"infoIconSubtle@2x.png\"; path = \"SwiftMessages/Resources/infoIconSubtle@2x.png\"; sourceTree = \"<group>\"; };\n\t\t820B743874F7AC9F9E3970D68E2E60FA /* Pods-iMessageDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-iMessageDemo.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t85C6BEF274CDB3807F9BD452A26C68E6 /* warningIconSubtle@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"warningIconSubtle@2x.png\"; path = \"SwiftMessages/Resources/warningIconSubtle@2x.png\"; sourceTree = \"<group>\"; };\n\t\t8605740B16E17342A29212D21C380249 /* errorIcon@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"errorIcon@2x.png\"; path = \"SwiftMessages/Resources/errorIcon@2x.png\"; sourceTree = \"<group>\"; };\n\t\t86872F4639B26435D20BED0CE7E35C7F /* CornerRoundingView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CornerRoundingView.swift; path = SwiftMessages/CornerRoundingView.swift; sourceTree = \"<group>\"; };\n\t\t86C1C9601BF8A5BC563062C310C0E3B5 /* BackgroundViewable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BackgroundViewable.swift; path = SwiftMessages/BackgroundViewable.swift; sourceTree = \"<group>\"; };\n\t\t88237113DAAD8ECF8D5E3FAA27D8A02F /* infoIconLight@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"infoIconLight@3x.png\"; path = \"SwiftMessages/Resources/infoIconLight@3x.png\"; sourceTree = \"<group>\"; };\n\t\t882EF814D0A1EE2AB28BFEE5C067EE6F /* NSLayoutConstraint+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"NSLayoutConstraint+Extensions.swift\"; path = \"SwiftMessages/NSLayoutConstraint+Extensions.swift\"; sourceTree = \"<group>\"; };\n\t\t88398B7A70E5B00495B670516D964701 /* Identifiable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Identifiable.swift; path = SwiftMessages/Identifiable.swift; sourceTree = \"<group>\"; };\n\t\t8940290DCDAD08810FE0CD944F376444 /* ResourceBundle-SwiftMessages_SwiftMessages-SwiftMessages-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"ResourceBundle-SwiftMessages_SwiftMessages-SwiftMessages-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t8AEEED9FBEA6C5DB7EE3B95E7D8115B3 /* PhysicsPanHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhysicsPanHandler.swift; path = SwiftMessages/PhysicsPanHandler.swift; sourceTree = \"<group>\"; };\n\t\t8D18688EA04EA2F2BC48ED05D1FE5404 /* Presenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Presenter.swift; path = SwiftMessages/Presenter.swift; sourceTree = \"<group>\"; };\n\t\t8D54691037F1CA4653B76F0558E2AA82 /* Pods-iMessageExtensionDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = \"Pods-iMessageExtensionDemo-acknowledgements.markdown\"; sourceTree = \"<group>\"; };\n\t\t8D7E08E0434930866B59A3F17A3A577B /* PhysicsAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhysicsAnimation.swift; path = SwiftMessages/PhysicsAnimation.swift; sourceTree = \"<group>\"; };\n\t\t91013DDC05BDB2787740B0C9E5444D23 /* errorIcon@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"errorIcon@3x.png\"; path = \"SwiftMessages/Resources/errorIcon@3x.png\"; sourceTree = \"<group>\"; };\n\t\t915DE2E4E300BAD440BE13F72E49D731 /* Pods-iMessageDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"Pods-iMessageDemo-acknowledgements.plist\"; sourceTree = \"<group>\"; };\n\t\t9414B7316138752779A4B9C7E5C988DB /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = SwiftMessages/Error.swift; sourceTree = \"<group>\"; };\n\t\t9610DCAAD9A55CDF73BAD54D523E1273 /* Task+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"Task+Extensions.swift\"; path = \"SwiftMessages/Task+Extensions.swift\"; sourceTree = \"<group>\"; };\n\t\t975A42F4C16B65B38769916EC5468D2A /* CenteredView.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = CenteredView.xib; path = SwiftMessages/Resources/CenteredView.xib; sourceTree = \"<group>\"; };\n\t\t9908774A62A95BF5BA8FE65842868043 /* WindowViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WindowViewController.swift; path = SwiftMessages/WindowViewController.swift; sourceTree = \"<group>\"; };\n\t\t9A99EE79DBFA3C24A372DDB69162E36C /* KeyboardTrackingView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyboardTrackingView.swift; path = SwiftMessages/KeyboardTrackingView.swift; sourceTree = \"<group>\"; };\n\t\t9B602E4E64DAEF1468DD2F5C2C5DFD00 /* MarginAdjustable+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"MarginAdjustable+Extensions.swift\"; path = \"SwiftMessages/MarginAdjustable+Extensions.swift\"; sourceTree = \"<group>\"; };\n\t\t9D5A75A919AE6C6D38A627636D7ADC11 /* LICENSE.md */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE.md; sourceTree = \"<group>\"; };\n\t\t9D940727FF8FB9C785EB98E56350EF41 /* 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; };\n\t\tA102DE8896931D80E06F2C74C2B003AC /* TopBottomPresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TopBottomPresentable.swift; path = SwiftMessages/TopBottomPresentable.swift; sourceTree = \"<group>\"; };\n\t\tA1F1B1264A726D334A72AB1CB001CA9F /* TopBottomAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TopBottomAnimation.swift; path = SwiftMessages/TopBottomAnimation.swift; sourceTree = \"<group>\"; };\n\t\tA399825CF45C4427BF9B80A590BF2BD5 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = \"<group>\"; };\n\t\tA4D741EF8B40F5472CE2C1C1A34426BD /* MessageView.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = MessageView.xib; path = SwiftMessages/Resources/MessageView.xib; sourceTree = \"<group>\"; };\n\t\tA6C7FF0D9E13571262231B72D0553E49 /* infoIconSubtle.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = infoIconSubtle.png; path = SwiftMessages/Resources/infoIconSubtle.png; sourceTree = \"<group>\"; };\n\t\tACCCF5B75EA41D844ED936A92602C5B1 /* infoIconLight@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"infoIconLight@2x.png\"; path = \"SwiftMessages/Resources/infoIconLight@2x.png\"; sourceTree = \"<group>\"; };\n\t\tAE7AEA9CE6B44DCC96AE4E68FA644DAA /* Pods-iMessageExtensionDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-iMessageExtensionDemo.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tAFC41396FB1BD59C9A69EE1DD82E47C2 /* Pods-iMessageDemo */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = \"Pods-iMessageDemo\"; path = Pods_iMessageDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB17EF282E0A0F329DDF17226E83706F8 /* SwiftMessagesSegue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftMessagesSegue.swift; path = SwiftMessages/SwiftMessagesSegue.swift; sourceTree = \"<group>\"; };\n\t\tB19DACBEC8DD85FB850D299DFB7A0374 /* SwiftMessageModifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftMessageModifier.swift; path = SwiftMessages/SwiftMessageModifier.swift; sourceTree = \"<group>\"; };\n\t\tB241F1B5D295E7806363B802DF03A085 /* warningIcon@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"warningIcon@2x.png\"; path = \"SwiftMessages/Resources/warningIcon@2x.png\"; sourceTree = \"<group>\"; };\n\t\tB32459A84426DD5E88256AD61F3D4E91 /* Theme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Theme.swift; path = SwiftMessages/Theme.swift; sourceTree = \"<group>\"; };\n\t\tB8B9892D8D5596E09F02DA2D71BF60B4 /* warningIcon@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"warningIcon@3x.png\"; path = \"SwiftMessages/Resources/warningIcon@3x.png\"; sourceTree = \"<group>\"; };\n\t\tB941E5186F814BF618D9D0458496379C /* SwiftMessages-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"SwiftMessages-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tB99CBDE49D6502CF64EB9059C005BF31 /* Pods-iMessageDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-iMessageDemo.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tBA61C87AB568667230DCD9DC2E423722 /* SwiftMessages.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftMessages.release.xcconfig; sourceTree = \"<group>\"; };\n\t\tBEBF018059B0DFCAC8494ABD1C578AD9 /* SwiftMessages-SwiftMessages_SwiftMessages */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = \"SwiftMessages-SwiftMessages_SwiftMessages\"; path = SwiftMessages_SwiftMessages.bundle; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tBF61E78F8E8EE539F4A63C5A9D43AC15 /* Pods-iMessageDemo-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-iMessageDemo-frameworks.sh\"; sourceTree = \"<group>\"; };\n\t\tC306ACAFEE157959D78E71DBBBD675DC /* Pods-iMessageExtensionDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-iMessageExtensionDemo.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tC33B3DA756F19F5C93D498D557BEB820 /* TabView.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = TabView.xib; path = SwiftMessages/Resources/TabView.xib; sourceTree = \"<group>\"; };\n\t\tC3701E97FDB85EFCE90E06D8CBC8ED41 /* infoIconLight.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = infoIconLight.png; path = SwiftMessages/Resources/infoIconLight.png; sourceTree = \"<group>\"; };\n\t\tC40BBCF3A77C5C7A01708634BB4275C3 /* infoIconSubtle@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"infoIconSubtle@3x.png\"; path = \"SwiftMessages/Resources/infoIconSubtle@3x.png\"; sourceTree = \"<group>\"; };\n\t\tC49B964EF7710D818E0AF0321724EEF4 /* errorIconLight@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"errorIconLight@2x.png\"; path = \"SwiftMessages/Resources/errorIconLight@2x.png\"; sourceTree = \"<group>\"; };\n\t\tC61DD3C66AC7ADE1E9CCFE7A4A0BEA59 /* TopBottomAnimationStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TopBottomAnimationStyle.swift; path = SwiftMessages/TopBottomAnimationStyle.swift; sourceTree = \"<group>\"; };\n\t\tC9BBC4BF82FBB152E34F2D1EF36A0FB1 /* MessageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageView.swift; path = SwiftMessages/MessageView.swift; sourceTree = \"<group>\"; };\n\t\tC9E8A4D41E0A0E52C839F7197C4CE2A0 /* AccessibleMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AccessibleMessage.swift; path = SwiftMessages/AccessibleMessage.swift; sourceTree = \"<group>\"; };\n\t\tCBC3F501D8BC852716D085B3022E68CA /* Pods-iMessageExtensionDemo */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = \"Pods-iMessageExtensionDemo\"; path = Pods_iMessageExtensionDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tCC4854845AC1848C056C36719A5D7420 /* MaskingView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MaskingView.swift; path = SwiftMessages/MaskingView.swift; sourceTree = \"<group>\"; };\n\t\tCC9152C843976F18EF9AE005786DCC80 /* Pods-iMessageDemo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = \"Pods-iMessageDemo.modulemap\"; sourceTree = \"<group>\"; };\n\t\tD091A06E439F734980F26F81E9161EF2 /* SwiftMessages-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"SwiftMessages-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tD146564C0660B5F616D6736F6560E17C /* successIconSubtle@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"successIconSubtle@2x.png\"; path = \"SwiftMessages/Resources/successIconSubtle@2x.png\"; sourceTree = \"<group>\"; };\n\t\tD245E0514AAC1A2B9A6D5EA2F383E90F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };\n\t\tD47C1471CCFFBEF214DF9F0ECBDD408B /* warningIcon.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = warningIcon.png; path = SwiftMessages/Resources/warningIcon.png; sourceTree = \"<group>\"; };\n\t\tD6A205E933052E98349DC710D78304CB /* errorIconLight@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = \"errorIconLight@3x.png\"; path = \"SwiftMessages/Resources/errorIconLight@3x.png\"; sourceTree = \"<group>\"; };\n\t\tD83D1CC131CDAC7CA2C5BFD8701E8A79 /* SwiftMessages.Config+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"SwiftMessages.Config+Extensions.swift\"; path = \"SwiftMessages/SwiftMessages.Config+Extensions.swift\"; sourceTree = \"<group>\"; };\n\t\tDBF30CA29E00D6768396013A24DDE9E9 /* SwiftMessages.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftMessages.debug.xcconfig; sourceTree = \"<group>\"; };\n\t\tE473E4F019E816262A61B7F5E8B42373 /* Pods-iMessageDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = \"Pods-iMessageDemo-acknowledgements.markdown\"; sourceTree = \"<group>\"; };\n\t\tEA8BFA921A44ED7AEAA0E08BCE17EDDA /* HapticMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HapticMessage.swift; path = SwiftMessages/HapticMessage.swift; sourceTree = \"<group>\"; };\n\t\tEAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };\n\t\tEC10D7DB2D227D4AA8F41CDFDDC24F37 /* SwiftMessages.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftMessages.swift; path = SwiftMessages/SwiftMessages.swift; sourceTree = \"<group>\"; };\n\t\tEC387534FD34764D4CC28B276A500AD6 /* errorIconLight.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = errorIconLight.png; path = SwiftMessages/Resources/errorIconLight.png; sourceTree = \"<group>\"; };\n\t\tEDFC2E756AAB98672C4B241097AAF0F6 /* errorIconSubtle.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = errorIconSubtle.png; path = SwiftMessages/Resources/errorIconSubtle.png; sourceTree = \"<group>\"; };\n\t\tF67BD26788FA0C70E942A7629E41C5E8 /* Animator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Animator.swift; path = SwiftMessages/Animator.swift; sourceTree = \"<group>\"; };\n\t\tFBC808D0C98F682E01DC43B544ED093F /* UIWindow+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = \"UIWindow+Extensions.swift\"; path = \"SwiftMessages/UIWindow+Extensions.swift\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t534FFF2C8F91B03C61DA3655C52CCCA2 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t60F02D519964FFEE8A21221FF5E0B0C5 /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA018844B6146EA7B81717B756ED28077 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA8C4AD87F73E9C51F797F34BCFF5AA17 /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC38F39DB95AA37C32F6FD3963E1EC781 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF5DA2E5126F8D945676819F4BFBBFFEB /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3479628DE3B6C9005316A7F591F5E68F /* Foundation.framework in Frameworks */,\n\t\t\t\tE4906D67B9F27E11EE9F8E8F5C847A14 /* UIKit.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t0949E0D44EEAC7E812C141F4941C490F /* AppExtension */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC9E8A4D41E0A0E52C839F7197C4CE2A0 /* AccessibleMessage.swift */,\n\t\t\t\tF67BD26788FA0C70E942A7629E41C5E8 /* Animator.swift */,\n\t\t\t\t86C1C9601BF8A5BC563062C310C0E3B5 /* BackgroundViewable.swift */,\n\t\t\t\t790409B3FBA491A9262ACCB929F30104 /* BaseView.swift */,\n\t\t\t\t35F5FB13175EC0E13D53B445CE31395A /* CALayer+Extensions.swift */,\n\t\t\t\t03B5D12D54ACC75F929389CFF15E91FF /* CardView.xib */,\n\t\t\t\t975A42F4C16B65B38769916EC5468D2A /* CenteredView.xib */,\n\t\t\t\t86872F4639B26435D20BED0CE7E35C7F /* CornerRoundingView.swift */,\n\t\t\t\t9414B7316138752779A4B9C7E5C988DB /* Error.swift */,\n\t\t\t\t71D489FBDD84B41576199298F717BC08 /* errorIcon.png */,\n\t\t\t\t8605740B16E17342A29212D21C380249 /* errorIcon@2x.png */,\n\t\t\t\t91013DDC05BDB2787740B0C9E5444D23 /* errorIcon@3x.png */,\n\t\t\t\tEC387534FD34764D4CC28B276A500AD6 /* errorIconLight.png */,\n\t\t\t\tC49B964EF7710D818E0AF0321724EEF4 /* errorIconLight@2x.png */,\n\t\t\t\tD6A205E933052E98349DC710D78304CB /* errorIconLight@3x.png */,\n\t\t\t\tEDFC2E756AAB98672C4B241097AAF0F6 /* errorIconSubtle.png */,\n\t\t\t\t38D28C78FCAE6706F1294CEFA6B25F88 /* errorIconSubtle@2x.png */,\n\t\t\t\t6C12E87D0EA045A56FC0B45F072C74D2 /* errorIconSubtle@3x.png */,\n\t\t\t\tEA8BFA921A44ED7AEAA0E08BCE17EDDA /* HapticMessage.swift */,\n\t\t\t\t88398B7A70E5B00495B670516D964701 /* Identifiable.swift */,\n\t\t\t\t79A086337846180B9A63D8492CCE45B4 /* infoIcon.png */,\n\t\t\t\t2CF5DC74916EBE02E70234620CD80150 /* infoIcon@2x.png */,\n\t\t\t\t560722B244EB84DF745199247129C164 /* infoIcon@3x.png */,\n\t\t\t\tC3701E97FDB85EFCE90E06D8CBC8ED41 /* infoIconLight.png */,\n\t\t\t\tACCCF5B75EA41D844ED936A92602C5B1 /* infoIconLight@2x.png */,\n\t\t\t\t88237113DAAD8ECF8D5E3FAA27D8A02F /* infoIconLight@3x.png */,\n\t\t\t\tA6C7FF0D9E13571262231B72D0553E49 /* infoIconSubtle.png */,\n\t\t\t\t8026A87EEBF1A86A282563F974C4225C /* infoIconSubtle@2x.png */,\n\t\t\t\tC40BBCF3A77C5C7A01708634BB4275C3 /* infoIconSubtle@3x.png */,\n\t\t\t\t9A99EE79DBFA3C24A372DDB69162E36C /* KeyboardTrackingView.swift */,\n\t\t\t\t14DF8F43552C4F1C4CAEFBAFD9A77004 /* MarginAdjustable.swift */,\n\t\t\t\t9B602E4E64DAEF1468DD2F5C2C5DFD00 /* MarginAdjustable+Extensions.swift */,\n\t\t\t\tCC4854845AC1848C056C36719A5D7420 /* MaskingView.swift */,\n\t\t\t\t28456F0421422D16D71D14D426309B3F /* MessageGeometryProxy.swift */,\n\t\t\t\t5F989D33CAC3BCDA9B3C4B18F23A4DBE /* MessageHostingView.swift */,\n\t\t\t\tC9BBC4BF82FBB152E34F2D1EF36A0FB1 /* MessageView.swift */,\n\t\t\t\tA4D741EF8B40F5472CE2C1C1A34426BD /* MessageView.xib */,\n\t\t\t\t06DB4311BFB347093FC18777A503B461 /* MessageViewConvertible.swift */,\n\t\t\t\t073CD58B2E8E255484D239A01D707B81 /* NSBundle+Extensions.swift */,\n\t\t\t\t882EF814D0A1EE2AB28BFEE5C067EE6F /* NSLayoutConstraint+Extensions.swift */,\n\t\t\t\t03A865E97261799942A6F29092D3D7AE /* PassthroughView.swift */,\n\t\t\t\t0398CE267904AF6C2FD03B3766511ECF /* PassthroughWindow.swift */,\n\t\t\t\t8D7E08E0434930866B59A3F17A3A577B /* PhysicsAnimation.swift */,\n\t\t\t\t8AEEED9FBEA6C5DB7EE3B95E7D8115B3 /* PhysicsPanHandler.swift */,\n\t\t\t\t8D18688EA04EA2F2BC48ED05D1FE5404 /* Presenter.swift */,\n\t\t\t\t62332870F1E2AE3FA16EE5ADC85C104A /* StatusLine.xib */,\n\t\t\t\t74793ADC8ADF7674EA6C3041E2B54354 /* successIcon.png */,\n\t\t\t\t4DBF06E9B2F93F081139B8A6A922F569 /* successIcon@2x.png */,\n\t\t\t\t6EA088414C10E47808EA8490D9BBF64F /* successIcon@3x.png */,\n\t\t\t\t252A5DF0FE3237691B8C50B969857389 /* successIconLight.png */,\n\t\t\t\t44DAC25C8D6D72F70BD1CF9099BDAF10 /* successIconLight@2x.png */,\n\t\t\t\t5686DFC1E0B24A3051EF376AD8A162C0 /* successIconLight@3x.png */,\n\t\t\t\t7B9CEE1B17C98E76723E7404C532515D /* successIconSubtle.png */,\n\t\t\t\tD146564C0660B5F616D6736F6560E17C /* successIconSubtle@2x.png */,\n\t\t\t\t47A710678B44C50DA470D1BCF94B87B8 /* successIconSubtle@3x.png */,\n\t\t\t\tB19DACBEC8DD85FB850D299DFB7A0374 /* SwiftMessageModifier.swift */,\n\t\t\t\tEC10D7DB2D227D4AA8F41CDFDDC24F37 /* SwiftMessages.swift */,\n\t\t\t\tD83D1CC131CDAC7CA2C5BFD8701E8A79 /* SwiftMessages.Config+Extensions.swift */,\n\t\t\t\tB17EF282E0A0F329DDF17226E83706F8 /* SwiftMessagesSegue.swift */,\n\t\t\t\tC33B3DA756F19F5C93D498D557BEB820 /* TabView.xib */,\n\t\t\t\t9610DCAAD9A55CDF73BAD54D523E1273 /* Task+Extensions.swift */,\n\t\t\t\tB32459A84426DD5E88256AD61F3D4E91 /* Theme.swift */,\n\t\t\t\tA1F1B1264A726D334A72AB1CB001CA9F /* TopBottomAnimation.swift */,\n\t\t\t\tC61DD3C66AC7ADE1E9CCFE7A4A0BEA59 /* TopBottomAnimationStyle.swift */,\n\t\t\t\tA102DE8896931D80E06F2C74C2B003AC /* TopBottomPresentable.swift */,\n\t\t\t\t16B5B2B5429B01345E4DA361DE01904D /* UIEdgeInsets+Extensions.swift */,\n\t\t\t\t57EB79F63EA99ADBBDA408015A4599BB /* UIViewController+Extensions.swift */,\n\t\t\t\tFBC808D0C98F682E01DC43B544ED093F /* UIWindow+Extensions.swift */,\n\t\t\t\tD47C1471CCFFBEF214DF9F0ECBDD408B /* warningIcon.png */,\n\t\t\t\tB241F1B5D295E7806363B802DF03A085 /* warningIcon@2x.png */,\n\t\t\t\tB8B9892D8D5596E09F02DA2D71BF60B4 /* warningIcon@3x.png */,\n\t\t\t\t004EE347886E2355CCB352F2AE7A35D6 /* warningIconLight.png */,\n\t\t\t\t71699C81494BC6585B862CDFC1CDAF54 /* warningIconLight@2x.png */,\n\t\t\t\t5FE01208AD70F1B35201AB04E50A23EC /* warningIconLight@3x.png */,\n\t\t\t\t6924A0A48B715EA35080ABB106B96BF7 /* warningIconSubtle.png */,\n\t\t\t\t85C6BEF274CDB3807F9BD452A26C68E6 /* warningIconSubtle@2x.png */,\n\t\t\t\t5E02B1554754BA1F8EF318D567875139 /* warningIconSubtle@3x.png */,\n\t\t\t\t442F9FAEDF369CADB9E6E8FF3668FD95 /* Weak.swift */,\n\t\t\t\t2AB9866F195EB0AED31A33AEC27B67C1 /* WindowScene.swift */,\n\t\t\t\t9908774A62A95BF5BA8FE65842868043 /* WindowViewController.swift */,\n\t\t\t);\n\t\t\tname = AppExtension;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t59DA5C1F72E1D5BABC43EACBA672C3BA /* iOS */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t367D4F82667A10E742DF94EEDD05B67C /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9D5A75A919AE6C6D38A627636D7ADC11 /* LICENSE.md */,\n\t\t\t\tA399825CF45C4427BF9B80A590BF2BD5 /* README.md */,\n\t\t\t\t573965F15F83BD70EEAC9E1E8B0F85C6 /* SwiftMessages.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3B07A3E7DF9452FD2B994A3383A19C32 /* SwiftMessages */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0949E0D44EEAC7E812C141F4941C490F /* AppExtension */,\n\t\t\t\t367D4F82667A10E742DF94EEDD05B67C /* Pod */,\n\t\t\t\tD1F228CBB00BC0EEBE5243BDCD591903 /* Support Files */,\n\t\t\t);\n\t\t\tname = SwiftMessages;\n\t\t\tpath = ../..;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t46F000C5D88847E6B7EDC4BA40536149 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAFC41396FB1BD59C9A69EE1DD82E47C2 /* Pods-iMessageDemo */,\n\t\t\t\tCBC3F501D8BC852716D085B3022E68CA /* Pods-iMessageExtensionDemo */,\n\t\t\t\t4824F23D80FF9070A5F8A452DB11EB9A /* SwiftMessages */,\n\t\t\t\tBEBF018059B0DFCAC8494ABD1C578AD9 /* SwiftMessages-SwiftMessages_SwiftMessages */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t59DA5C1F72E1D5BABC43EACBA672C3BA /* iOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */,\n\t\t\t\tD245E0514AAC1A2B9A6D5EA2F383E90F /* UIKit.framework */,\n\t\t\t);\n\t\t\tname = iOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t8F3CF4AFB0CA47B3BFE1C68E51CDF0A9 /* Targets Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9A912CA1E54EADE1787311C1DF7E8F2E /* Pods-iMessageDemo */,\n\t\t\t\tBD13800F87C70DC802DBC0C37E8C5E99 /* Pods-iMessageExtensionDemo */,\n\t\t\t);\n\t\t\tname = \"Targets Support Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9A912CA1E54EADE1787311C1DF7E8F2E /* Pods-iMessageDemo */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCC9152C843976F18EF9AE005786DCC80 /* Pods-iMessageDemo.modulemap */,\n\t\t\t\tE473E4F019E816262A61B7F5E8B42373 /* Pods-iMessageDemo-acknowledgements.markdown */,\n\t\t\t\t915DE2E4E300BAD440BE13F72E49D731 /* Pods-iMessageDemo-acknowledgements.plist */,\n\t\t\t\t14BF989232A1D55A0FDAAB70B5A8E1BF /* Pods-iMessageDemo-dummy.m */,\n\t\t\t\tBF61E78F8E8EE539F4A63C5A9D43AC15 /* Pods-iMessageDemo-frameworks.sh */,\n\t\t\t\t093D5BBE2A96A1A7AC0432A3AB933576 /* Pods-iMessageDemo-Info.plist */,\n\t\t\t\t2D0ECE831FB5E0EE1D68E837671320C7 /* Pods-iMessageDemo-umbrella.h */,\n\t\t\t\tB99CBDE49D6502CF64EB9059C005BF31 /* Pods-iMessageDemo.debug.xcconfig */,\n\t\t\t\t820B743874F7AC9F9E3970D68E2E60FA /* Pods-iMessageDemo.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Pods-iMessageDemo\";\n\t\t\tpath = \"Target Support Files/Pods-iMessageDemo\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tBD13800F87C70DC802DBC0C37E8C5E99 /* Pods-iMessageExtensionDemo */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6489B2A759075E9DC1D1406734F45B5F /* Pods-iMessageExtensionDemo.modulemap */,\n\t\t\t\t8D54691037F1CA4653B76F0558E2AA82 /* Pods-iMessageExtensionDemo-acknowledgements.markdown */,\n\t\t\t\t1341BB7116EC50FDF7062C6A91DEDF49 /* Pods-iMessageExtensionDemo-acknowledgements.plist */,\n\t\t\t\t7F40CA14AD738DD186B4DA8FD14AE5BD /* Pods-iMessageExtensionDemo-dummy.m */,\n\t\t\t\t7CC6A596A9C1659D8E93222DA4144414 /* Pods-iMessageExtensionDemo-Info.plist */,\n\t\t\t\t5CAB201AD00CAB811B045E2FFB5C03A8 /* Pods-iMessageExtensionDemo-umbrella.h */,\n\t\t\t\tC306ACAFEE157959D78E71DBBBD675DC /* Pods-iMessageExtensionDemo.debug.xcconfig */,\n\t\t\t\tAE7AEA9CE6B44DCC96AE4E68FA644DAA /* Pods-iMessageExtensionDemo.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Pods-iMessageExtensionDemo\";\n\t\t\tpath = \"Target Support Files/Pods-iMessageExtensionDemo\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC5AAA95D48373FAC474F6EFCC1749444 /* Development Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3B07A3E7DF9452FD2B994A3383A19C32 /* SwiftMessages */,\n\t\t\t);\n\t\t\tname = \"Development Pods\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tCF1408CF629C7361332E53B88F7BD30C = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9D940727FF8FB9C785EB98E56350EF41 /* Podfile */,\n\t\t\t\tC5AAA95D48373FAC474F6EFCC1749444 /* Development Pods */,\n\t\t\t\t1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */,\n\t\t\t\t46F000C5D88847E6B7EDC4BA40536149 /* Products */,\n\t\t\t\t8F3CF4AFB0CA47B3BFE1C68E51CDF0A9 /* Targets Support Files */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD1F228CBB00BC0EEBE5243BDCD591903 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8940290DCDAD08810FE0CD944F376444 /* ResourceBundle-SwiftMessages_SwiftMessages-SwiftMessages-Info.plist */,\n\t\t\t\t6228A8E37F7905D75917DD4CBE65B03C /* SwiftMessages.modulemap */,\n\t\t\t\tD091A06E439F734980F26F81E9161EF2 /* SwiftMessages-dummy.m */,\n\t\t\t\t0FD758C8718F3EEFB5E97E34A29CE1CC /* SwiftMessages-Info.plist */,\n\t\t\t\tB941E5186F814BF618D9D0458496379C /* SwiftMessages-prefix.pch */,\n\t\t\t\t080E269BABA7D072D8C51E29E9AC4A91 /* SwiftMessages-umbrella.h */,\n\t\t\t\tDBF30CA29E00D6768396013A24DDE9E9 /* SwiftMessages.debug.xcconfig */,\n\t\t\t\tBA61C87AB568667230DCD9DC2E423722 /* SwiftMessages.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"iMessageDemo/Pods/Target Support Files/SwiftMessages\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t5E0996100D0B6376DB378D36C49FEB72 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t88D024879AEAE247899BFB50C8516515 /* Pods-iMessageDemo-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t94D488A57BCCF0DF1CE9E3AA109BAF42 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t7590FF543E2634A83059E509D5B05583 /* Pods-iMessageExtensionDemo-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9F82EEB2B7A573A17661E879E23301CC /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB646E1CD53F14E0DEE53740799C06AC5 /* SwiftMessages-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t1FC5E8328653C350899229BDF89FACE5 /* SwiftMessages-SwiftMessages_SwiftMessages */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = B9E25A37EB36EDFCDE7B709EF28887E1 /* Build configuration list for PBXNativeTarget \"SwiftMessages-SwiftMessages_SwiftMessages\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t27425DAD651893A17CC601370E148AA6 /* Sources */,\n\t\t\t\tC38F39DB95AA37C32F6FD3963E1EC781 /* Frameworks */,\n\t\t\t\tB677C83AAEA5EB9CD3E80A8BA2A910E7 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"SwiftMessages-SwiftMessages_SwiftMessages\";\n\t\t\tproductName = SwiftMessages_SwiftMessages;\n\t\t\tproductReference = BEBF018059B0DFCAC8494ABD1C578AD9 /* SwiftMessages-SwiftMessages_SwiftMessages */;\n\t\t\tproductType = \"com.apple.product-type.bundle\";\n\t\t};\n\t\t2757367020CF4EA7726D56118C89F6AE /* Pods-iMessageExtensionDemo */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D4007834B8D8DEA14D3016E025D2E198 /* Build configuration list for PBXNativeTarget \"Pods-iMessageExtensionDemo\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t94D488A57BCCF0DF1CE9E3AA109BAF42 /* Headers */,\n\t\t\t\t7C2BDA53E99CB24205C4C877E7B01D37 /* Sources */,\n\t\t\t\tA018844B6146EA7B81717B756ED28077 /* Frameworks */,\n\t\t\t\t1A38555F56C7853980EFF926359385D4 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t8935DBBDEDCE7F48711B98D9DB279717 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Pods-iMessageExtensionDemo\";\n\t\t\tproductName = Pods_iMessageExtensionDemo;\n\t\t\tproductReference = CBC3F501D8BC852716D085B3022E68CA /* Pods-iMessageExtensionDemo */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tDAB613A18652334F6BFC5F27BADF515D /* SwiftMessages */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = BC0696CE4F28B31FF26CA99798FE7058 /* Build configuration list for PBXNativeTarget \"SwiftMessages\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9F82EEB2B7A573A17661E879E23301CC /* Headers */,\n\t\t\t\tF72FF659E811A6D8DFB11AE35F7C3B09 /* Sources */,\n\t\t\t\tF5DA2E5126F8D945676819F4BFBBFFEB /* Frameworks */,\n\t\t\t\t3825F2CC81138FAE9F77136A6C646663 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tE98E5B4F9A2B7044ED32678F81832AEE /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = SwiftMessages;\n\t\t\tproductName = SwiftMessages;\n\t\t\tproductReference = 4824F23D80FF9070A5F8A452DB11EB9A /* SwiftMessages */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tE2AECC8B9DD9E437C7DD0FD0FFC881F3 /* Pods-iMessageDemo */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1A195C86FC7EF00767CF99ECEBE42625 /* Build configuration list for PBXNativeTarget \"Pods-iMessageDemo\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t5E0996100D0B6376DB378D36C49FEB72 /* Headers */,\n\t\t\t\t0642123BC3DE909207A9EC283F481AD9 /* Sources */,\n\t\t\t\t534FFF2C8F91B03C61DA3655C52CCCA2 /* Frameworks */,\n\t\t\t\t9859D25D3582DB4C5A3D5ADA90024549 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t5AEACA50B99030606B5CAF987F9793FD /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Pods-iMessageDemo\";\n\t\t\tproductName = Pods_iMessageDemo;\n\t\t\tproductReference = AFC41396FB1BD59C9A69EE1DD82E47C2 /* Pods-iMessageDemo */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tBFDFE7DC352907FC980B868725387E98 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 1500;\n\t\t\t\tLastUpgradeCheck = 1500;\n\t\t\t};\n\t\t\tbuildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject \"Pods\" */;\n\t\t\tcompatibilityVersion = \"Xcode 12.0\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\tBase,\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = CF1408CF629C7361332E53B88F7BD30C;\n\t\t\tproductRefGroup = 46F000C5D88847E6B7EDC4BA40536149 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tE2AECC8B9DD9E437C7DD0FD0FFC881F3 /* Pods-iMessageDemo */,\n\t\t\t\t2757367020CF4EA7726D56118C89F6AE /* Pods-iMessageExtensionDemo */,\n\t\t\t\tDAB613A18652334F6BFC5F27BADF515D /* SwiftMessages */,\n\t\t\t\t1FC5E8328653C350899229BDF89FACE5 /* SwiftMessages-SwiftMessages_SwiftMessages */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t1A38555F56C7853980EFF926359385D4 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t3825F2CC81138FAE9F77136A6C646663 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t28D6446B971F186BACDED83CD8DE4D44 /* SwiftMessages-SwiftMessages_SwiftMessages in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9859D25D3582DB4C5A3D5ADA90024549 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB677C83AAEA5EB9CD3E80A8BA2A910E7 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA4724FC3B4F49DCBF50D395257BB6B8E /* CardView.xib in Resources */,\n\t\t\t\t469995B0FC2E3748F59D0E3A4445E197 /* CenteredView.xib in Resources */,\n\t\t\t\tE54040398A9AD751393A2171DC64D70E /* errorIcon.png in Resources */,\n\t\t\t\t6A04C3E1C3437ED6BC6F096302B458AB /* errorIcon@2x.png in Resources */,\n\t\t\t\tDE2531A67AEBFED61A060DF13790C3BE /* errorIcon@3x.png in Resources */,\n\t\t\t\t47EFB870CC797D2F54396F0AEBC8F576 /* errorIconLight.png in Resources */,\n\t\t\t\tFC0E2BA3CD9C6C3ACF3681841D8EF5BA /* errorIconLight@2x.png in Resources */,\n\t\t\t\t1E507663F3C402CBCA0C50A876F472EF /* errorIconLight@3x.png in Resources */,\n\t\t\t\t360BEE76BBF40319E6638B3E027E1474 /* errorIconSubtle.png in Resources */,\n\t\t\t\t205A52121D20436063240893A461B29C /* errorIconSubtle@2x.png in Resources */,\n\t\t\t\t4980F404C2B391C621CE2BCF05E08BDF /* errorIconSubtle@3x.png in Resources */,\n\t\t\t\t8CB7CCDF07E1CE6838C7278BC19968B6 /* infoIcon.png in Resources */,\n\t\t\t\t096A6663757CB52C8A34B3E3146279C8 /* infoIcon@2x.png in Resources */,\n\t\t\t\t8F63F1ABAB21FA99A6CB1A54D5F2B5AA /* infoIcon@3x.png in Resources */,\n\t\t\t\t422B422F962FD298F963F84934A21529 /* infoIconLight.png in Resources */,\n\t\t\t\t3613DBA9CBD7E092BD7DC1924E6648D2 /* infoIconLight@2x.png in Resources */,\n\t\t\t\tA52191D65F4C725EBF61D27F40FEA970 /* infoIconLight@3x.png in Resources */,\n\t\t\t\tA90C06B459CC64A243DD1184024E5D22 /* infoIconSubtle.png in Resources */,\n\t\t\t\tDC6C4E22FA8DD6FA491066A738132EF1 /* infoIconSubtle@2x.png in Resources */,\n\t\t\t\t6CDE06668BB53C70BF1456F8EEE845D9 /* infoIconSubtle@3x.png in Resources */,\n\t\t\t\t0D53997CCCD141D2303E87C29CEFE211 /* MessageView.xib in Resources */,\n\t\t\t\tB61EBE61C31E78140BF12D32A008A43B /* StatusLine.xib in Resources */,\n\t\t\t\t31660027252C457325491844F16AEBDD /* successIcon.png in Resources */,\n\t\t\t\tEE9A5A3877D99BFCA5DA70BA4E049CA9 /* successIcon@2x.png in Resources */,\n\t\t\t\t79BB175F4750822409AB9ED0A9D90D09 /* successIcon@3x.png in Resources */,\n\t\t\t\tA8EF6BE26B31A8713E37E0629F6466EB /* successIconLight.png in Resources */,\n\t\t\t\t9FBBA6E4D3A2A4CA4BA8535E35D54CA8 /* successIconLight@2x.png in Resources */,\n\t\t\t\t61F532D30833A9FF1DE00EC98BC018C2 /* successIconLight@3x.png in Resources */,\n\t\t\t\t72026C4424B7A1650CBEED98ED9AA288 /* successIconSubtle.png in Resources */,\n\t\t\t\t37A8DD40AF13BCABE7A3CD8EF15A4C53 /* successIconSubtle@2x.png in Resources */,\n\t\t\t\tBBF31491EF3411DCFA7E649645229E2A /* successIconSubtle@3x.png in Resources */,\n\t\t\t\t1441D5A06DD6903562EB794FC1AE8822 /* TabView.xib in Resources */,\n\t\t\t\tD8DFC45149C57377B5C90B3457090564 /* warningIcon.png in Resources */,\n\t\t\t\t0ADA608E3B9307694DCF4D0BC426E7FE /* warningIcon@2x.png in Resources */,\n\t\t\t\t4C9FED5D268E82325C17309FB8904C43 /* warningIcon@3x.png in Resources */,\n\t\t\t\t4609D5EC365EABFE507781BF911B887B /* warningIconLight.png in Resources */,\n\t\t\t\t744EA4AF597AFEFEE5B398434F47CA26 /* warningIconLight@2x.png in Resources */,\n\t\t\t\t81B1015F29547CAB449757FC5ABCAFAB /* warningIconLight@3x.png in Resources */,\n\t\t\t\t6583C565BE5BB9E52213854AA85F5A93 /* warningIconSubtle.png in Resources */,\n\t\t\t\tD3B31A631C754CAECABFA4DC672D3D0B /* warningIconSubtle@2x.png in Resources */,\n\t\t\t\t24DA4886290040A0EC88B63D82EF412D /* warningIconSubtle@3x.png in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t0642123BC3DE909207A9EC283F481AD9 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t436D8C63FBE86FF8271ABC32F9A52A9D /* Pods-iMessageDemo-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t27425DAD651893A17CC601370E148AA6 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7C2BDA53E99CB24205C4C877E7B01D37 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB22AF07D79D1A82DE583AC49E3D472D3 /* Pods-iMessageExtensionDemo-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF72FF659E811A6D8DFB11AE35F7C3B09 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t03C7FA1BE62CCD280D63F4C7CDDFB27F /* AccessibleMessage.swift in Sources */,\n\t\t\t\tD9519DD580DF2E744AB4C4087FA28BCD /* Animator.swift in Sources */,\n\t\t\t\tA865FCE8718103C8E725EC1EC0F9F4F6 /* BackgroundViewable.swift in Sources */,\n\t\t\t\t6DC0B420F622E197919276CFF2C063CE /* BaseView.swift in Sources */,\n\t\t\t\t3F53FCE80C716C7DE7A3B1D8D65077BC /* CALayer+Extensions.swift in Sources */,\n\t\t\t\t274D5DE28E0446655163A48E2272860A /* CornerRoundingView.swift in Sources */,\n\t\t\t\tCCBFBDB03B2444C911BADDE6A6BA08AD /* Error.swift in Sources */,\n\t\t\t\t47CC2A912B82A499DB2F5E2ADBE664CF /* HapticMessage.swift in Sources */,\n\t\t\t\t67F7D444EAC4475021B3458B21B2A162 /* Identifiable.swift in Sources */,\n\t\t\t\t3C566158256E9CC711B73810B2C64E3B /* KeyboardTrackingView.swift in Sources */,\n\t\t\t\t0C093AF5F4D753325F4CE92F2F943CB4 /* MarginAdjustable.swift in Sources */,\n\t\t\t\t634267873AC0F98140DBAFFF9A180BA8 /* MarginAdjustable+Extensions.swift in Sources */,\n\t\t\t\tF8D0D33FC1C833490057108C322E56CB /* MaskingView.swift in Sources */,\n\t\t\t\tB6D0E2FA454A946D6C9A7494648F49D9 /* MessageGeometryProxy.swift in Sources */,\n\t\t\t\t19C0F7897044E72D3A13DE703920FFE1 /* MessageHostingView.swift in Sources */,\n\t\t\t\tA836F848C83565B2A0A06AB23D491946 /* MessageView.swift in Sources */,\n\t\t\t\tC2031E7EC3C60B876F2AC04253D3AFC4 /* MessageViewConvertible.swift in Sources */,\n\t\t\t\t942468E4C1AEFCF10D5043243B4007E7 /* NSBundle+Extensions.swift in Sources */,\n\t\t\t\tB1B4D240B65FFC5A7A981B9504C55270 /* NSLayoutConstraint+Extensions.swift in Sources */,\n\t\t\t\tDD406A0C002AC1D02A6E5794B1729C22 /* PassthroughView.swift in Sources */,\n\t\t\t\tBAB66573FF29F6337237A8DA0EB9E3E8 /* PassthroughWindow.swift in Sources */,\n\t\t\t\tF667CC7C7F3285FC39427F2AAA8E7665 /* PhysicsAnimation.swift in Sources */,\n\t\t\t\tF2D3ABB0C7B6EB5B531E4E68C40AA89C /* PhysicsPanHandler.swift in Sources */,\n\t\t\t\t158EF18377B720081C31C2F2100DDA7A /* Presenter.swift in Sources */,\n\t\t\t\t04BCE3C12FDE7E91C9EF1FE154E80E2B /* SwiftMessageModifier.swift in Sources */,\n\t\t\t\t330C59E62D17601422EDB29513B9856C /* SwiftMessages.swift in Sources */,\n\t\t\t\t67DC4D170143131B8AFFB558FDD00465 /* SwiftMessages-dummy.m in Sources */,\n\t\t\t\t48ADA8D4633776558E7D216434057A2A /* SwiftMessages.Config+Extensions.swift in Sources */,\n\t\t\t\t3451B2775584DD75A3BDF9BF28A03F76 /* SwiftMessagesSegue.swift in Sources */,\n\t\t\t\tB04AA81A8A8CE0BCEFD5FAFD841F461F /* Task+Extensions.swift in Sources */,\n\t\t\t\tE03C930AD56F078DCD1357E5C83AD67A /* Theme.swift in Sources */,\n\t\t\t\tF516490B5276943A352D597431B079B6 /* TopBottomAnimation.swift in Sources */,\n\t\t\t\tB9FDFA90A4FB68CA5357AB70427B4DCD /* TopBottomAnimationStyle.swift in Sources */,\n\t\t\t\t450919BA3A4D984DC24822CD80483419 /* TopBottomPresentable.swift in Sources */,\n\t\t\t\tBA4779B82B35B85EFE9F595624BA3943 /* UIEdgeInsets+Extensions.swift in Sources */,\n\t\t\t\t698F203577674AFA4BBCDE93B01B9EEC /* UIViewController+Extensions.swift in Sources */,\n\t\t\t\t45A4B95F1F73413A3001B95E1F91D697 /* UIWindow+Extensions.swift in Sources */,\n\t\t\t\t00A4A53E0D1EFC70DA1EFAEFA82C4BA1 /* Weak.swift in Sources */,\n\t\t\t\t04C771EB4784B94AC6CA28ED6A919D50 /* WindowScene.swift in Sources */,\n\t\t\t\t52A01853AC4F2D0E720579D7F8A531CF /* WindowViewController.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t5AEACA50B99030606B5CAF987F9793FD /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = SwiftMessages;\n\t\t\ttarget = DAB613A18652334F6BFC5F27BADF515D /* SwiftMessages */;\n\t\t\ttargetProxy = D297C84AE0F13FB6A76F2F391D21D679 /* PBXContainerItemProxy */;\n\t\t};\n\t\t8935DBBDEDCE7F48711B98D9DB279717 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = SwiftMessages;\n\t\t\ttarget = DAB613A18652334F6BFC5F27BADF515D /* SwiftMessages */;\n\t\t\ttargetProxy = 70E6358901408AED062E820735630F69 /* PBXContainerItemProxy */;\n\t\t};\n\t\tE98E5B4F9A2B7044ED32678F81832AEE /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"SwiftMessages-SwiftMessages_SwiftMessages\";\n\t\t\ttarget = 1FC5E8328653C350899229BDF89FACE5 /* SwiftMessages-SwiftMessages_SwiftMessages */;\n\t\t\ttargetProxy = 146D3A65FCE17293CC3AD6CBEAE15F9A /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t3FC2D46D829830CE0E848EA5B410073A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = DBF30CA29E00D6768396013A24DDE9E9 /* SwiftMessages.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGNING_ALLOWED = NO;\n\t\t\t\tCONFIGURATION_BUILD_DIR = \"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SwiftMessages\";\n\t\t\t\tIBSC_MODULE = SwiftMessages;\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/SwiftMessages/ResourceBundle-SwiftMessages_SwiftMessages-SwiftMessages-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tPRODUCT_NAME = SwiftMessages_SwiftMessages;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tWRAPPER_EXTENSION = bundle;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t4503CB76C2B552AADDBE817FB3830956 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = C306ACAFEE157959D78E71DBBBD675DC /* Pods-iMessageExtensionDemo.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/Pods-iMessageExtensionDemo/Pods-iMessageExtensionDemo-Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 17.6;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-iMessageExtensionDemo/Pods-iMessageExtensionDemo.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t59909018A45193B32A9AC1A497747707 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 820B743874F7AC9F9E3970D68E2E60FA /* Pods-iMessageDemo.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo-Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 17.6;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t8C9963745FD01B6B3EF95F9CE58D9F10 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"POD_CONFIGURATION_DEBUG=1\",\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 17.6;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSTRIP_INSTALLED_PRODUCT = NO;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tSYMROOT = \"${SRCROOT}/../build\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9AA80409B5B73B4F3944DDDD6463F2F3 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = DBF30CA29E00D6768396013A24DDE9E9 /* SwiftMessages.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/SwiftMessages/SwiftMessages-prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/SwiftMessages/SwiftMessages-Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/SwiftMessages/SwiftMessages.modulemap\";\n\t\t\t\tPRODUCT_MODULE_NAME = SwiftMessages;\n\t\t\t\tPRODUCT_NAME = SwiftMessages;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9FEE8F2AB72B17FFBCF0628B7DCBB31F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = BA61C87AB568667230DCD9DC2E423722 /* SwiftMessages.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGNING_ALLOWED = NO;\n\t\t\t\tCONFIGURATION_BUILD_DIR = \"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SwiftMessages\";\n\t\t\t\tIBSC_MODULE = SwiftMessages;\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/SwiftMessages/ResourceBundle-SwiftMessages_SwiftMessages-SwiftMessages-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tPRODUCT_NAME = SwiftMessages_SwiftMessages;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tWRAPPER_EXTENSION = bundle;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA96FA7E94B943E99EB50714920749FAA /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = BA61C87AB568667230DCD9DC2E423722 /* SwiftMessages.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/SwiftMessages/SwiftMessages-prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/SwiftMessages/SwiftMessages-Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/SwiftMessages/SwiftMessages.modulemap\";\n\t\t\t\tPRODUCT_MODULE_NAME = SwiftMessages;\n\t\t\t\tPRODUCT_NAME = SwiftMessages;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tB9F3557045385CA606F5AF548D58B58A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"POD_CONFIGURATION_RELEASE=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 17.6;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSTRIP_INSTALLED_PRODUCT = NO;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tSYMROOT = \"${SRCROOT}/../build\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC071287F0603F63CE0FC42C4A8BB3E9A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = AE7AEA9CE6B44DCC96AE4E68FA644DAA /* Pods-iMessageExtensionDemo.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/Pods-iMessageExtensionDemo/Pods-iMessageExtensionDemo-Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 17.6;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-iMessageExtensionDemo/Pods-iMessageExtensionDemo.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tDFD90EB1585D1CB60C100925E96958A9 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = B99CBDE49D6502CF64EB9059C005BF31 /* Pods-iMessageDemo.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo-Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 17.6;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMODULEMAP_FILE = \"Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1A195C86FC7EF00767CF99ECEBE42625 /* Build configuration list for PBXNativeTarget \"Pods-iMessageDemo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tDFD90EB1585D1CB60C100925E96958A9 /* Debug */,\n\t\t\t\t59909018A45193B32A9AC1A497747707 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject \"Pods\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t8C9963745FD01B6B3EF95F9CE58D9F10 /* Debug */,\n\t\t\t\tB9F3557045385CA606F5AF548D58B58A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tB9E25A37EB36EDFCDE7B709EF28887E1 /* Build configuration list for PBXNativeTarget \"SwiftMessages-SwiftMessages_SwiftMessages\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t3FC2D46D829830CE0E848EA5B410073A /* Debug */,\n\t\t\t\t9FEE8F2AB72B17FFBCF0628B7DCBB31F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tBC0696CE4F28B31FF26CA99798FE7058 /* Build configuration list for PBXNativeTarget \"SwiftMessages\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9AA80409B5B73B4F3944DDDD6463F2F3 /* Debug */,\n\t\t\t\tA96FA7E94B943E99EB50714920749FAA /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD4007834B8D8DEA14D3016E025D2E198 /* Build configuration list for PBXNativeTarget \"Pods-iMessageExtensionDemo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4503CB76C2B552AADDBE817FB3830956 /* Debug */,\n\t\t\t\tC071287F0603F63CE0FC42C4A8BB3E9A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n}\n"
  },
  {
    "path": "iMessageDemo/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "iMessageDemo/Pods/Pods.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "iMessageDemo/Pods/Pods.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n  <key>CFBundleDevelopmentRegion</key>\n  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>\n  <key>CFBundleExecutable</key>\n  <string>${EXECUTABLE_NAME}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>${CURRENT_PROJECT_VERSION}</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo-acknowledgements.markdown",
    "content": "# Acknowledgements\nThis application makes use of the following third party libraries:\n\n## SwiftMessages\n\nCopyright (c) 2016 SwiftKick Mobile LLC\n\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\nGenerated by CocoaPods - https://cocoapods.org\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo-acknowledgements.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>PreferenceSpecifiers</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>This application makes use of the following third party libraries:</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Acknowledgements</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Copyright (c) 2016 SwiftKick Mobile LLC\n\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>SwiftMessages</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Generated by CocoaPods - https://cocoapods.org</string>\n\t\t\t<key>Title</key>\n\t\t\t<string></string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t</array>\n\t<key>StringsTable</key>\n\t<string>Acknowledgements</string>\n\t<key>Title</key>\n\t<string>Acknowledgements</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Pods_iMessageDemo : NSObject\n@end\n@implementation PodsDummy_Pods_iMessageDemo\n@end\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo-frameworks-Debug-input-files.xcfilelist",
    "content": "${PODS_ROOT}/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo-frameworks.sh\n${BUILT_PRODUCTS_DIR}/SwiftMessages/SwiftMessages.framework"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo-frameworks-Debug-output-files.xcfilelist",
    "content": "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftMessages.framework"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo-frameworks-Release-input-files.xcfilelist",
    "content": "${PODS_ROOT}/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo-frameworks.sh\n${BUILT_PRODUCTS_DIR}/SwiftMessages/SwiftMessages.framework"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo-frameworks-Release-output-files.xcfilelist",
    "content": "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftMessages.framework"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo-frameworks.sh",
    "content": "#!/bin/sh\nset -e\nset -u\nset -o pipefail\n\nfunction on_error {\n  echo \"$(realpath -mq \"${0}\"):$1: error: Unexpected failure\"\n}\ntrap 'on_error $LINENO' ERR\n\nif [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then\n  # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy\n  # frameworks to, so exit 0 (signalling the script phase was successful).\n  exit 0\nfi\n\necho \"mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nmkdir -p \"${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\nCOCOAPODS_PARALLEL_CODE_SIGN=\"${COCOAPODS_PARALLEL_CODE_SIGN:-false}\"\nSWIFT_STDLIB_PATH=\"${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}\"\nBCSYMBOLMAP_DIR=\"BCSymbolMaps\"\n\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\n# Copies and strips a vendored framework\ninstall_framework()\n{\n  if [ -r \"${BUILT_PRODUCTS_DIR}/$1\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$1\"\n  elif [ -r \"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\"\n  elif [ -r \"$1\" ]; then\n    local source=\"$1\"\n  fi\n\n  local destination=\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\n  if [ -L \"${source}\" ]; then\n    echo \"Symlinked...\"\n    source=\"$(readlink -f \"${source}\")\"\n  fi\n\n  if [ -d \"${source}/${BCSYMBOLMAP_DIR}\" ]; then\n    # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied\n    find \"${source}/${BCSYMBOLMAP_DIR}\" -name \"*.bcsymbolmap\"|while read f; do\n      echo \"Installing $f\"\n      install_bcsymbolmap \"$f\" \"$destination\"\n      rm \"$f\"\n    done\n    rmdir \"${source}/${BCSYMBOLMAP_DIR}\"\n  fi\n\n  # Use filter instead of exclude so missing patterns don't throw errors.\n  echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --links --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${source}\\\" \\\"${destination}\\\"\"\n  rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"\n\n  local basename\n  basename=\"$(basename -s .framework \"$1\")\"\n  binary=\"${destination}/${basename}.framework/${basename}\"\n\n  if ! [ -r \"$binary\" ]; then\n    binary=\"${destination}/${basename}\"\n  elif [ -L \"${binary}\" ]; then\n    echo \"Destination binary is symlinked...\"\n    dirname=\"$(dirname \"${binary}\")\"\n    binary=\"${dirname}/$(readlink \"${binary}\")\"\n  fi\n\n  # Strip invalid architectures so \"fat\" simulator / device frameworks work on device\n  if [[ \"$(file \"$binary\")\" == *\"dynamically linked shared library\"* ]]; then\n    strip_invalid_archs \"$binary\"\n  fi\n\n  # Resign the code if required by the build settings to avoid unstable apps\n  code_sign_if_enabled \"${destination}/$(basename \"$1\")\"\n\n  # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.\n  if [ \"${XCODE_VERSION_MAJOR}\" -lt 7 ]; then\n    local swift_runtime_libs\n    swift_runtime_libs=$(xcrun otool -LX \"$binary\" | grep --color=never @rpath/libswift | sed -E s/@rpath\\\\/\\(.+dylib\\).*/\\\\1/g | uniq -u)\n    for lib in $swift_runtime_libs; do\n      echo \"rsync -auv \\\"${SWIFT_STDLIB_PATH}/${lib}\\\" \\\"${destination}\\\"\"\n      rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"\n      code_sign_if_enabled \"${destination}/${lib}\"\n    done\n  fi\n}\n# Copies and strips a vendored dSYM\ninstall_dsym() {\n  local source=\"$1\"\n  warn_missing_arch=${2:-true}\n  if [ -r \"$source\" ]; then\n    # Copy the dSYM into the targets temp dir.\n    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}\\\"\"\n    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}\"\n\n    local basename\n    basename=\"$(basename -s .dSYM \"$source\")\"\n    binary_name=\"$(ls \"$source/Contents/Resources/DWARF\")\"\n    binary=\"${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}\"\n\n    # Strip invalid architectures from the dSYM.\n    if [[ \"$(file \"$binary\")\" == *\"Mach-O \"*\"dSYM companion\"* ]]; then\n      strip_invalid_archs \"$binary\" \"$warn_missing_arch\"\n    fi\n    if [[ $STRIP_BINARY_RETVAL == 0 ]]; then\n      # Move the stripped file into its final destination.\n      echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --links --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\\\" \\\"${DWARF_DSYM_FOLDER_PATH}\\\"\"\n      rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"\n    else\n      # 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.\n      mkdir -p \"${DWARF_DSYM_FOLDER_PATH}\"\n      touch \"${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM\"\n    fi\n  fi\n}\n\n# Used as a return value for each invocation of `strip_invalid_archs` function.\nSTRIP_BINARY_RETVAL=0\n\n# Strip invalid architectures\nstrip_invalid_archs() {\n  binary=\"$1\"\n  warn_missing_arch=${2:-true}\n  # Get architectures for current target binary\n  binary_archs=\"$(lipo -info \"$binary\" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)\"\n  # Intersect them with the architectures we are building for\n  intersected_archs=\"$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\\n' | sort | uniq -d)\"\n  # If there are no archs supported by this binary then warn the user\n  if [[ -z \"$intersected_archs\" ]]; then\n    if [[ \"$warn_missing_arch\" == \"true\" ]]; then\n      echo \"warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS).\"\n    fi\n    STRIP_BINARY_RETVAL=1\n    return\n  fi\n  stripped=\"\"\n  for arch in $binary_archs; do\n    if ! [[ \"${ARCHS}\" == *\"$arch\"* ]]; then\n      # Strip non-valid architectures in-place\n      lipo -remove \"$arch\" -output \"$binary\" \"$binary\"\n      stripped=\"$stripped $arch\"\n    fi\n  done\n  if [[ \"$stripped\" ]]; then\n    echo \"Stripped $binary of architectures:$stripped\"\n  fi\n  STRIP_BINARY_RETVAL=0\n}\n\n# Copies the bcsymbolmap files of a vendored framework\ninstall_bcsymbolmap() {\n    local bcsymbolmap_path=\"$1\"\n    local destination=\"${BUILT_PRODUCTS_DIR}\"\n    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}\"\"\n    rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${bcsymbolmap_path}\" \"${destination}\"\n}\n\n# Signs a framework with the provided identity\ncode_sign_if_enabled() {\n  if [ -n \"${EXPANDED_CODE_SIGN_IDENTITY:-}\" -a \"${CODE_SIGNING_REQUIRED:-}\" != \"NO\" -a \"${CODE_SIGNING_ALLOWED}\" != \"NO\" ]; then\n    # Use the current code_sign_identity\n    echo \"Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\n    local code_sign_cmd=\"/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'\"\n\n    if [ \"${COCOAPODS_PARALLEL_CODE_SIGN}\" == \"true\" ]; then\n      code_sign_cmd=\"$code_sign_cmd &\"\n    fi\n    echo \"$code_sign_cmd\"\n    eval \"$code_sign_cmd\"\n  fi\n}\n\nif [[ \"$CONFIGURATION\" == \"Debug\" ]]; then\n  install_framework \"${BUILT_PRODUCTS_DIR}/SwiftMessages/SwiftMessages.framework\"\nfi\nif [[ \"$CONFIGURATION\" == \"Release\" ]]; then\n  install_framework \"${BUILT_PRODUCTS_DIR}/SwiftMessages/SwiftMessages.framework\"\nfi\nif [ \"${COCOAPODS_PARALLEL_CODE_SIGN}\" == \"true\" ]; then\n  wait\nfi\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n\nFOUNDATION_EXPORT double Pods_iMessageDemoVersionNumber;\nFOUNDATION_EXPORT const unsigned char Pods_iMessageDemoVersionString[];\n\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo.debug.xcconfig",
    "content": "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_CONFIGURATION_BUILD_DIR}/SwiftMessages\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_CONFIGURATION_BUILD_DIR}/SwiftMessages/SwiftMessages.framework/Headers\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'\nLIBRARY_SEARCH_PATHS = $(inherited) \"${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}\" /usr/lib/swift\nOTHER_LDFLAGS = $(inherited) -framework \"SwiftMessages\" -framework \"UIKit\"\nOTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo.modulemap",
    "content": "framework module Pods_iMessageDemo {\n  umbrella header \"Pods-iMessageDemo-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo.release.xcconfig",
    "content": "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_CONFIGURATION_BUILD_DIR}/SwiftMessages\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_CONFIGURATION_BUILD_DIR}/SwiftMessages/SwiftMessages.framework/Headers\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'\nLIBRARY_SEARCH_PATHS = $(inherited) \"${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}\" /usr/lib/swift\nOTHER_LDFLAGS = $(inherited) -framework \"SwiftMessages\" -framework \"UIKit\"\nOTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageExtensionDemo/Pods-iMessageExtensionDemo-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n  <key>CFBundleDevelopmentRegion</key>\n  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>\n  <key>CFBundleExecutable</key>\n  <string>${EXECUTABLE_NAME}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>${CURRENT_PROJECT_VERSION}</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageExtensionDemo/Pods-iMessageExtensionDemo-acknowledgements.markdown",
    "content": "# Acknowledgements\nThis application makes use of the following third party libraries:\n\n## SwiftMessages\n\nCopyright (c) 2016 SwiftKick Mobile LLC\n\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\nGenerated by CocoaPods - https://cocoapods.org\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageExtensionDemo/Pods-iMessageExtensionDemo-acknowledgements.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>PreferenceSpecifiers</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>This application makes use of the following third party libraries:</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Acknowledgements</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Copyright (c) 2016 SwiftKick Mobile LLC\n\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>SwiftMessages</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Generated by CocoaPods - https://cocoapods.org</string>\n\t\t\t<key>Title</key>\n\t\t\t<string></string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t</array>\n\t<key>StringsTable</key>\n\t<string>Acknowledgements</string>\n\t<key>Title</key>\n\t<string>Acknowledgements</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageExtensionDemo/Pods-iMessageExtensionDemo-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Pods_iMessageExtensionDemo : NSObject\n@end\n@implementation PodsDummy_Pods_iMessageExtensionDemo\n@end\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageExtensionDemo/Pods-iMessageExtensionDemo-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n\nFOUNDATION_EXPORT double Pods_iMessageExtensionDemoVersionNumber;\nFOUNDATION_EXPORT const unsigned char Pods_iMessageExtensionDemoVersionString[];\n\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageExtensionDemo/Pods-iMessageExtensionDemo.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_CONFIGURATION_BUILD_DIR}/SwiftMessages\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_CONFIGURATION_BUILD_DIR}/SwiftMessages/SwiftMessages.framework/Headers\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks'\nLIBRARY_SEARCH_PATHS = $(inherited) \"${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}\" /usr/lib/swift\nOTHER_LDFLAGS = $(inherited) -framework \"SwiftMessages\" -framework \"UIKit\"\nOTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageExtensionDemo/Pods-iMessageExtensionDemo.modulemap",
    "content": "framework module Pods_iMessageExtensionDemo {\n  umbrella header \"Pods-iMessageExtensionDemo-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/Pods-iMessageExtensionDemo/Pods-iMessageExtensionDemo.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_CONFIGURATION_BUILD_DIR}/SwiftMessages\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_CONFIGURATION_BUILD_DIR}/SwiftMessages/SwiftMessages.framework/Headers\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks'\nLIBRARY_SEARCH_PATHS = $(inherited) \"${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}\" /usr/lib/swift\nOTHER_LDFLAGS = $(inherited) -framework \"SwiftMessages\" -framework \"UIKit\"\nOTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/SwiftMessages/ResourceBundle-SwiftMessages-SwiftMessages-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>BNDL</string>\n  <key>CFBundleShortVersionString</key>\n  <string>9.0.1</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>1</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/SwiftMessages/ResourceBundle-SwiftMessages_SwiftMessages-SwiftMessages-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n  <key>CFBundleDevelopmentRegion</key>\n  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>BNDL</string>\n  <key>CFBundleShortVersionString</key>\n  <string>10.0.1</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>1</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/SwiftMessages/SwiftMessages-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n  <key>CFBundleDevelopmentRegion</key>\n  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>\n  <key>CFBundleExecutable</key>\n  <string>${EXECUTABLE_NAME}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>10.0.1</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>${CURRENT_PROJECT_VERSION}</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/SwiftMessages/SwiftMessages-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_SwiftMessages : NSObject\n@end\n@implementation PodsDummy_SwiftMessages\n@end\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/SwiftMessages/SwiftMessages-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/SwiftMessages/SwiftMessages-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n\nFOUNDATION_EXPORT double SwiftMessagesVersionNumber;\nFOUNDATION_EXPORT const unsigned char SwiftMessagesVersionString[];\n\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/SwiftMessages/SwiftMessages.debug.xcconfig",
    "content": "APPLICATION_EXTENSION_API_ONLY = YES\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftMessages\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 SWIFTMESSAGES_APP_EXTENSIONS=1\nLIBRARY_SEARCH_PATHS = $(inherited) \"${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}\" /usr/lib/swift\nOTHER_LDFLAGS = $(inherited) -framework \"UIKit\"\nOTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../..\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nSWIFT_ACTIVE_COMPILATION_CONDITIONS = SWIFTMESSAGES_APP_EXTENSIONS\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/SwiftMessages/SwiftMessages.modulemap",
    "content": "framework module SwiftMessages {\n  umbrella header \"SwiftMessages-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "iMessageDemo/Pods/Target Support Files/SwiftMessages/SwiftMessages.release.xcconfig",
    "content": "APPLICATION_EXTENSION_API_ONLY = YES\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftMessages\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 SWIFTMESSAGES_APP_EXTENSIONS=1\nLIBRARY_SEARCH_PATHS = $(inherited) \"${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}\" /usr/lib/swift\nOTHER_LDFLAGS = $(inherited) -framework \"UIKit\"\nOTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../..\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nSWIFT_ACTIVE_COMPILATION_CONDITIONS = SWIFTMESSAGES_APP_EXTENSIONS\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "iMessageDemo/iMessageDemo/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  iMessageDemo\n//\n//  Created by Timothy Moose on 7/24/18.\n//  Copyright © 2018 it.swiftkick. All rights reserved.\n//\n\nimport UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n    var window: UIWindow?\n}\n\n"
  },
  {
    "path": "iMessageDemo/iMessageDemo/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "iMessageDemo/iMessageDemo/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"14113\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14088\"/>\n        <capability name=\"Constraints with non-1.0 multipliers\" minToolsVersion=\"5.1\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"obG-Y5-kRd\">\n                                <rect key=\"frame\" x=\"30\" y=\"606\" width=\"315\" height=\"41\"/>\n                                <string key=\"text\">Copyright © 2018 it.swiftkick\nAll rights reserved.</string>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"iMessageDemo\" textAlignment=\"center\" lineBreakMode=\"middleTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"GJd-Yh-RWb\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"202\" width=\"375\" height=\"43\"/>\n                                <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"36\"/>\n                                <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"Bcu-3y-fUS\" firstAttribute=\"centerX\" secondItem=\"obG-Y5-kRd\" secondAttribute=\"centerX\" id=\"5cz-MP-9tL\"/>\n                            <constraint firstItem=\"Bcu-3y-fUS\" firstAttribute=\"centerX\" secondItem=\"GJd-Yh-RWb\" secondAttribute=\"centerX\" id=\"Q3B-4B-g5h\"/>\n                            <constraint firstItem=\"obG-Y5-kRd\" firstAttribute=\"leading\" secondItem=\"Bcu-3y-fUS\" secondAttribute=\"leading\" constant=\"30\" id=\"SfN-ll-jLj\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"obG-Y5-kRd\" secondAttribute=\"bottom\" constant=\"20\" id=\"Y44-ml-fuU\"/>\n                            <constraint firstItem=\"GJd-Yh-RWb\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"bottom\" multiplier=\"1/3\" constant=\"1\" id=\"moa-c2-u7t\"/>\n                            <constraint firstItem=\"GJd-Yh-RWb\" firstAttribute=\"leading\" secondItem=\"Bcu-3y-fUS\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"x7j-FC-K8j\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"Bcu-3y-fUS\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "iMessageDemo/iMessageDemo/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"14113\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"zZj-3H-hcB\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14088\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"3Nc-P1-eQ3\">\n            <objects>\n                <viewController id=\"zZj-3H-hcB\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"PbU-Gb-nkc\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"This app is for testing SwiftMessages built for iMessage extensions. Run the iMessageExtensionDemo target.\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"KJc-2q-VVl\">\n                                <rect key=\"frame\" x=\"30\" y=\"303\" width=\"315\" height=\"61\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"textColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstItem=\"KJc-2q-VVl\" firstAttribute=\"centerY\" secondItem=\"PbU-Gb-nkc\" secondAttribute=\"centerY\" id=\"HZG-sD-ICp\"/>\n                            <constraint firstItem=\"KJc-2q-VVl\" firstAttribute=\"leading\" secondItem=\"xhg-mc-eEY\" secondAttribute=\"leading\" constant=\"30\" id=\"PCq-J0-T1A\"/>\n                            <constraint firstItem=\"xhg-mc-eEY\" firstAttribute=\"trailing\" secondItem=\"KJc-2q-VVl\" secondAttribute=\"trailing\" constant=\"30\" id=\"lEm-Vd-IE8\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"xhg-mc-eEY\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"x0r-iX-g1P\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"154\" y=\"162\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "iMessageDemo/iMessageDemo.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t2272F1F521080DAE00AD190C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2272F1F421080DAE00AD190C /* AppDelegate.swift */; };\n\t\t2272F21021080DD500AD190C /* MessagesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2272F20F21080DD500AD190C /* MessagesViewController.swift */; };\n\t\t2272F21321080DD500AD190C /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2272F21121080DD500AD190C /* MainInterface.storyboard */; };\n\t\t2272F21921080DD600AD190C /* iMessageExtensionDemo.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 2272F20A21080DD500AD190C /* iMessageExtensionDemo.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\t2272F21F2108113F00AD190C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2272F21E2108113F00AD190C /* Main.storyboard */; };\n\t\t2272F221210811BE00AD190C /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2272F220210811BE00AD190C /* LaunchScreen.storyboard */; };\n\t\t76D3135B88AA54ECC98CBD36 /* Pods_iMessageDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73DC8D5C3B1552230D960BF7 /* Pods_iMessageDemo.framework */; };\n\t\tF49106CE51DB9708982AF779 /* Pods_iMessageExtensionDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E1E18BC615CEA5704F4B5FB /* Pods_iMessageExtensionDemo.framework */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t2272F21721080DD600AD190C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 2272F1E921080DAE00AD190C /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2272F20921080DD500AD190C;\n\t\t\tremoteInfo = iMessageExtensionDemo;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t2272F21D21080DD600AD190C /* Embed App Extensions */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 13;\n\t\t\tfiles = (\n\t\t\t\t2272F21921080DD600AD190C /* iMessageExtensionDemo.appex in Embed App Extensions */,\n\t\t\t);\n\t\t\tname = \"Embed App Extensions\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t22FE4001211944040017303D /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t212D588BA5EE4E8BF07B02D8 /* Pods-iMessageExtensionDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-iMessageExtensionDemo.release.xcconfig\"; path = \"Target Support Files/Pods-iMessageExtensionDemo/Pods-iMessageExtensionDemo.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t21DDEA06F4193D7F35B70A53 /* Pods-iMessageDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-iMessageDemo.release.xcconfig\"; path = \"Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t2272F1F121080DAE00AD190C /* iMessageDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iMessageDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t2272F1F421080DAE00AD190C /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t2272F20021080DB200AD190C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t2272F20A21080DD500AD190C /* iMessageExtensionDemo.appex */ = {isa = PBXFileReference; explicitFileType = \"wrapper.app-extension\"; includeInIndex = 0; path = iMessageExtensionDemo.appex; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t2272F20C21080DD500AD190C /* Messages.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Messages.framework; path = System/Library/Frameworks/Messages.framework; sourceTree = SDKROOT; };\n\t\t2272F20F21080DD500AD190C /* MessagesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesViewController.swift; sourceTree = \"<group>\"; };\n\t\t2272F21221080DD500AD190C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = \"<group>\"; };\n\t\t2272F21621080DD600AD190C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t2272F21E2108113F00AD190C /* Main.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = \"<group>\"; };\n\t\t2272F220210811BE00AD190C /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t4E1E18BC615CEA5704F4B5FB /* Pods_iMessageExtensionDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_iMessageExtensionDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t73DC8D5C3B1552230D960BF7 /* Pods_iMessageDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_iMessageDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t76B6E320915B554B5D628DFC /* Pods-iMessageDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-iMessageDemo.debug.xcconfig\"; path = \"Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tEE094075BD5252DAD69071F9 /* Pods-iMessageExtensionDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-iMessageExtensionDemo.debug.xcconfig\"; path = \"Target Support Files/Pods-iMessageExtensionDemo/Pods-iMessageExtensionDemo.debug.xcconfig\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t2272F1EE21080DAE00AD190C /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t76D3135B88AA54ECC98CBD36 /* Pods_iMessageDemo.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2272F20721080DD500AD190C /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF49106CE51DB9708982AF779 /* Pods_iMessageExtensionDemo.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t2272F1E821080DAE00AD190C = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2272F1F321080DAE00AD190C /* iMessageDemo */,\n\t\t\t\t2272F20E21080DD500AD190C /* iMessageExtensionDemo */,\n\t\t\t\t2272F20B21080DD500AD190C /* Frameworks */,\n\t\t\t\t2272F1F221080DAE00AD190C /* Products */,\n\t\t\t\tC99B3449FCA583CA3ECDC53C /* Pods */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2272F1F221080DAE00AD190C /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2272F1F121080DAE00AD190C /* iMessageDemo.app */,\n\t\t\t\t2272F20A21080DD500AD190C /* iMessageExtensionDemo.appex */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2272F1F321080DAE00AD190C /* iMessageDemo */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2272F1F421080DAE00AD190C /* AppDelegate.swift */,\n\t\t\t\t2272F20021080DB200AD190C /* Info.plist */,\n\t\t\t\t2272F21E2108113F00AD190C /* Main.storyboard */,\n\t\t\t\t2272F220210811BE00AD190C /* LaunchScreen.storyboard */,\n\t\t\t);\n\t\t\tpath = iMessageDemo;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2272F20B21080DD500AD190C /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2272F20C21080DD500AD190C /* Messages.framework */,\n\t\t\t\t73DC8D5C3B1552230D960BF7 /* Pods_iMessageDemo.framework */,\n\t\t\t\t4E1E18BC615CEA5704F4B5FB /* Pods_iMessageExtensionDemo.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2272F20E21080DD500AD190C /* iMessageExtensionDemo */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2272F21121080DD500AD190C /* MainInterface.storyboard */,\n\t\t\t\t2272F20F21080DD500AD190C /* MessagesViewController.swift */,\n\t\t\t\t2272F21621080DD600AD190C /* Info.plist */,\n\t\t\t);\n\t\t\tpath = iMessageExtensionDemo;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC99B3449FCA583CA3ECDC53C /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t76B6E320915B554B5D628DFC /* Pods-iMessageDemo.debug.xcconfig */,\n\t\t\t\t21DDEA06F4193D7F35B70A53 /* Pods-iMessageDemo.release.xcconfig */,\n\t\t\t\tEE094075BD5252DAD69071F9 /* Pods-iMessageExtensionDemo.debug.xcconfig */,\n\t\t\t\t212D588BA5EE4E8BF07B02D8 /* Pods-iMessageExtensionDemo.release.xcconfig */,\n\t\t\t);\n\t\t\tpath = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t2272F1F021080DAE00AD190C /* iMessageDemo */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 2272F20321080DB200AD190C /* Build configuration list for PBXNativeTarget \"iMessageDemo\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC9C10288A07806AC55B5E4B3 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t2272F1ED21080DAE00AD190C /* Sources */,\n\t\t\t\t2272F1EE21080DAE00AD190C /* Frameworks */,\n\t\t\t\t2272F1EF21080DAE00AD190C /* Resources */,\n\t\t\t\t2272F21D21080DD600AD190C /* Embed App Extensions */,\n\t\t\t\t22FE4001211944040017303D /* Embed Frameworks */,\n\t\t\t\t77C3B4728FB9FC385B4279B6 /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t2272F21821080DD600AD190C /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = iMessageDemo;\n\t\t\tproductName = iMessageDemo;\n\t\t\tproductReference = 2272F1F121080DAE00AD190C /* iMessageDemo.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t2272F20921080DD500AD190C /* iMessageExtensionDemo */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 2272F21A21080DD600AD190C /* Build configuration list for PBXNativeTarget \"iMessageExtensionDemo\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t7FD245EE0E3D4F436FEB306E /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t2272F20621080DD500AD190C /* Sources */,\n\t\t\t\t2272F20721080DD500AD190C /* Frameworks */,\n\t\t\t\t2272F20821080DD500AD190C /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = iMessageExtensionDemo;\n\t\t\tproductName = iMessageExtensionDemo;\n\t\t\tproductReference = 2272F20A21080DD500AD190C /* iMessageExtensionDemo.appex */;\n\t\t\tproductType = \"com.apple.product-type.app-extension.messages\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t2272F1E921080DAE00AD190C /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0940;\n\t\t\t\tLastUpgradeCheck = 0940;\n\t\t\t\tORGANIZATIONNAME = it.swiftkick;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t2272F1F021080DAE00AD190C = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.4.1;\n\t\t\t\t\t};\n\t\t\t\t\t2272F20921080DD500AD190C = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.4.1;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 2272F1EC21080DAE00AD190C /* Build configuration list for PBXProject \"iMessageDemo\" */;\n\t\t\tcompatibilityVersion = \"Xcode 9.3\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 2272F1E821080DAE00AD190C;\n\t\t\tproductRefGroup = 2272F1F221080DAE00AD190C /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t2272F1F021080DAE00AD190C /* iMessageDemo */,\n\t\t\t\t2272F20921080DD500AD190C /* iMessageExtensionDemo */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t2272F1EF21080DAE00AD190C /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t2272F21F2108113F00AD190C /* Main.storyboard in Resources */,\n\t\t\t\t2272F221210811BE00AD190C /* LaunchScreen.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2272F20821080DD500AD190C /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t2272F21321080DD500AD190C /* MainInterface.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t77C3B4728FB9FC385B4279B6 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo-frameworks-${CONFIGURATION}-input-files.xcfilelist\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo-frameworks-${CONFIGURATION}-output-files.xcfilelist\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-iMessageDemo/Pods-iMessageDemo-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t7FD245EE0E3D4F436FEB306E /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-iMessageExtensionDemo-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"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\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tC9C10288A07806AC55B5E4B3 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-iMessageDemo-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"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\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t2272F1ED21080DAE00AD190C /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t2272F1F521080DAE00AD190C /* AppDelegate.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2272F20621080DD500AD190C /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t2272F21021080DD500AD190C /* MessagesViewController.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t2272F21821080DD600AD190C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 2272F20921080DD500AD190C /* iMessageExtensionDemo */;\n\t\t\ttargetProxy = 2272F21721080DD600AD190C /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t2272F21121080DD500AD190C /* MainInterface.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t2272F21221080DD500AD190C /* Base */,\n\t\t\t);\n\t\t\tname = MainInterface.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t2272F20121080DB200AD190C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.4;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t2272F20221080DB200AD190C /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.4;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t2272F20421080DB200AD190C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 76B6E320915B554B5D628DFC /* Pods-iMessageDemo.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 38R82CD868;\n\t\t\t\tINFOPLIST_FILE = iMessageDemo/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 17.6;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = it.swiftkick.Demo.iMessageDemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 4.2;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t2272F20521080DB200AD190C /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 21DDEA06F4193D7F35B70A53 /* Pods-iMessageDemo.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 38R82CD868;\n\t\t\t\tINFOPLIST_FILE = iMessageDemo/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 17.6;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = it.swiftkick.Demo.iMessageDemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 4.2;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t2272F21B21080DD600AD190C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = EE094075BD5252DAD69071F9 /* Pods-iMessageExtensionDemo.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = \"iMessage App Icon\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 38R82CD868;\n\t\t\t\tINFOPLIST_FILE = iMessageExtensionDemo/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 17.6;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = it.swiftkick.Demo.iMessageDemo.iMessageExtensionDemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 4.2;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t2272F21C21080DD600AD190C /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 212D588BA5EE4E8BF07B02D8 /* Pods-iMessageExtensionDemo.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = \"iMessage App Icon\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 38R82CD868;\n\t\t\t\tINFOPLIST_FILE = iMessageExtensionDemo/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 17.6;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = it.swiftkick.Demo.iMessageDemo.iMessageExtensionDemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 4.2;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t2272F1EC21080DAE00AD190C /* Build configuration list for PBXProject \"iMessageDemo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t2272F20121080DB200AD190C /* Debug */,\n\t\t\t\t2272F20221080DB200AD190C /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t2272F20321080DB200AD190C /* Build configuration list for PBXNativeTarget \"iMessageDemo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t2272F20421080DB200AD190C /* Debug */,\n\t\t\t\t2272F20521080DB200AD190C /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t2272F21A21080DD600AD190C /* Build configuration list for PBXNativeTarget \"iMessageExtensionDemo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t2272F21B21080DD600AD190C /* Debug */,\n\t\t\t\t2272F21C21080DD600AD190C /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 2272F1E921080DAE00AD190C /* Project object */;\n}\n"
  },
  {
    "path": "iMessageDemo/iMessageDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:../../SwiftMessages.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "iMessageDemo/iMessageDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "iMessageDemo/iMessageDemo.xcodeproj/xcshareddata/xcschemes/iMessageExtensionDemo.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   wasCreatedForAppExtension = \"YES\"\n   version = \"2.0\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"2272F20921080DD500AD190C\"\n               BuildableName = \"iMessageExtensionDemo.appex\"\n               BlueprintName = \"iMessageExtensionDemo\"\n               ReferencedContainer = \"container:iMessageDemo.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"2272F1F021080DAE00AD190C\"\n               BuildableName = \"iMessageDemo.app\"\n               BlueprintName = \"iMessageDemo\"\n               ReferencedContainer = \"container:iMessageDemo.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"2272F20921080DD500AD190C\"\n            BuildableName = \"iMessageExtensionDemo.appex\"\n            BlueprintName = \"iMessageExtensionDemo\"\n            ReferencedContainer = \"container:iMessageDemo.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"\"\n      selectedLauncherIdentifier = \"Xcode.IDEFoundation.Launcher.PosixSpawn\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\"\n      launchAutomaticallySubstyle = \"2\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"2272F1F021080DAE00AD190C\"\n            BuildableName = \"iMessageDemo.app\"\n            BlueprintName = \"iMessageDemo\"\n            ReferencedContainer = \"container:iMessageDemo.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      launchAutomaticallySubstyle = \"2\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"2272F1F021080DAE00AD190C\"\n            BuildableName = \"iMessageDemo.app\"\n            BlueprintName = \"iMessageDemo\"\n            ReferencedContainer = \"container:iMessageDemo.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "iMessageDemo/iMessageDemo.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:iMessageDemo.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "iMessageDemo/iMessageDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "iMessageDemo/iMessageDemo.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "iMessageDemo/iMessageExtensionDemo/Base.lproj/MainInterface.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"14109\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"ObA-dk-sSI\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14088\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Messages View Controller-->\n        <scene sceneID=\"7MM-of-jgj\">\n            <objects>\n                <viewController id=\"ObA-dk-sSI\" customClass=\"MessagesViewController\" customModule=\"iMessageDemo\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"zMn-AG-sqS\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"528\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"pjb-TD-WZf\">\n                                <rect key=\"frame\" x=\"132.5\" y=\"242\" width=\"55\" height=\"44\"/>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"44\" id=\"zlU-jj-d5D\"/>\n                                </constraints>\n                                <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"0.0\" maxX=\"10\" maxY=\"0.0\"/>\n                                <state key=\"normal\" title=\"Test\"/>\n                                <connections>\n                                    <action selector=\"buttonTapped\" destination=\"ObA-dk-sSI\" eventType=\"touchUpInside\" id=\"W8K-oF-WAU\"/>\n                                </connections>\n                            </button>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"pjb-TD-WZf\" firstAttribute=\"centerY\" secondItem=\"zMn-AG-sqS\" secondAttribute=\"centerY\" id=\"VJC-Go-emt\"/>\n                            <constraint firstItem=\"pjb-TD-WZf\" firstAttribute=\"centerX\" secondItem=\"zMn-AG-sqS\" secondAttribute=\"centerX\" id=\"pa5-MH-D6S\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"LDy-ih-0nr\"/>\n                    </view>\n                    <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n                    <size key=\"freeformSize\" width=\"320\" height=\"528\"/>\n                    <connections>\n                        <outlet property=\"button\" destination=\"pjb-TD-WZf\" id=\"6xJ-Ph-fBt\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"X47-rx-isc\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "iMessageDemo/iMessageExtensionDemo/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>iMessageExtensionDemo</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>XPC!</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>NSExtension</key>\n\t<dict>\n\t\t<key>NSExtensionMainStoryboard</key>\n\t\t<string>MainInterface</string>\n\t\t<key>NSExtensionPointIdentifier</key>\n\t\t<string>com.apple.message-payload-provider</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "iMessageDemo/iMessageExtensionDemo/MessagesViewController.swift",
    "content": "//\n//  MessagesViewController.swift\n//  iMessageDemo\n//\n//  Created by Timothy Moose on 5/25/18.\n//  Copyright © 2018 SwiftKick Mobile. All rights reserved.\n//\n\nimport UIKit\nimport Messages\nimport SwiftMessages\n\nclass MessagesViewController: MSMessagesAppViewController {\n\n    @IBOutlet weak var button: UIButton! {\n        didSet {\n            button.layer.cornerRadius = 5\n        }\n    }\n\n    @IBAction func buttonTapped() {\n        let messageView: MessageView = MessageView.viewFromNib(layout: .centeredView)\n        messageView.configureContent(title: \"Test\", body: \"Yep, it works!\")\n        messageView.button?.isHidden = true\n        messageView.iconLabel?.isHidden = true\n        messageView.iconImageView?.isHidden = true\n        messageView.configureTheme(backgroundColor: .black, foregroundColor: .white)\n        messageView.configureDropShadow()\n        messageView.configureBackgroundView(width: 200)\n        var config = SwiftMessages.defaultConfig\n        config.presentationStyle = .center\n        config.presentationContext = .viewController(self)\n        SwiftMessages.show(config: config, view: messageView)\n    }\n}\n"
  }
]