diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 96f2f278..e28086dc 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -44,7 +44,7 @@ SPEC CHECKSUMS: SlackTextViewController: b854e62c1c156336bc4fd409c6ca79b5773e8f9d SnapKit: a42d492c16e80209130a3379f73596c3454b7694 SQLite.swift: 6e5356850bb1791459f8c16d6ee9195b28714a2e - WebimClientLibrary: 15d8419d64556547ea93921089bf31f21e16c7bb + WebimClientLibrary: f41308ab4a9c9b918eaf30cc0e320edad92dd87e PODFILE CHECKSUM: 3ae813f4c3db6d1830eddfcf1600cb0f21e44002 diff --git a/Example/Pods/Cosmos/Cosmos/CosmosAccessibility.swift b/Example/Pods/Cosmos/Cosmos/CosmosAccessibility.swift deleted file mode 100644 index 9cd39117..00000000 --- a/Example/Pods/Cosmos/Cosmos/CosmosAccessibility.swift +++ /dev/null @@ -1,99 +0,0 @@ -import UIKit - -/** - -Functions for making cosmos view accessible. - -*/ -struct CosmosAccessibility { - /** - - Makes the view accesible by settings its label and using rating as value. - - */ - - static func update(_ view: UIView, rating: Double, text: String?, settings: CosmosSettings) { - view.isAccessibilityElement = true - - view.accessibilityTraits = settings.updateOnTouch ? - UIAccessibilityTraitAdjustable :UIAccessibilityTraitNone - - var accessibilityLabel = CosmosLocalizedRating.ratingTranslation - - if let text = text, text != "" { - accessibilityLabel += " \(text)" - } - - view.accessibilityLabel = accessibilityLabel - - view.accessibilityValue = accessibilityValue(view, rating: rating, settings: settings) - } - - /** - - Returns the rating that is used as accessibility value. - The accessibility value depends on the star fill mode. - - For example, if rating is 4.6 and fill mode is .half the value will be 4.5. And if the fill mode - if .full the value will be 5. - - */ - static func accessibilityValue(_ view: UIView, rating: Double, settings: CosmosSettings) -> String { - let accessibilityRating = CosmosRating.displayedRatingFromPreciseRating(rating, - fillMode: settings.fillMode, totalStars: settings.totalStars) - - // Omit decimals if the value is an integer - let isInteger = (accessibilityRating * 10).truncatingRemainder(dividingBy: 10) == 0 - - if isInteger { - return "\(Int(accessibilityRating))" - } else { - // Only show a single decimal place - let roundedToFirstDecimalPlace = Double( round(10 * accessibilityRating) / 10 ) - return "\(roundedToFirstDecimalPlace)" - } - } - - /** - - Returns the amount of increment for the rating. When .half and .precise fill modes are used the - rating is incremented by 0.5. - - */ - static func accessibilityIncrement(_ rating: Double, settings: CosmosSettings) -> Double { - var increment: Double = 0 - - switch settings.fillMode { - case .full: - increment = ceil(rating) - rating - if increment == 0 { increment = 1 } - - case .half, .precise: - increment = (ceil(rating * 2) - rating * 2) / 2 - if increment == 0 { increment = 0.5 } - } - - if rating >= Double(settings.totalStars) { increment = 0 } - - return increment - } - - static func accessibilityDecrement(_ rating: Double, settings: CosmosSettings) -> Double { - var increment: Double = 0 - - switch settings.fillMode { - case .full: - increment = rating - floor(rating) - if increment == 0 { increment = 1 } - - case .half, .precise: - increment = (rating * 2 - floor(rating * 2)) / 2 - if increment == 0 { increment = 0.5 } - } - - if rating <= settings.minTouchRating { increment = 0 } - - return increment - } -} - diff --git a/Example/Pods/Cosmos/Cosmos/CosmosDefaultSettings.swift b/Example/Pods/Cosmos/Cosmos/CosmosDefaultSettings.swift deleted file mode 100644 index 3b1eadcf..00000000 --- a/Example/Pods/Cosmos/Cosmos/CosmosDefaultSettings.swift +++ /dev/null @@ -1,102 +0,0 @@ -import UIKit - -/** - -Defaults setting values. - -*/ -struct CosmosDefaultSettings { - init() {} - - static let defaultColor = UIColor(red: 1, green: 149/255, blue: 0, alpha: 1) - - - // MARK: - Star settings - // ----------------------------- - - /// Border color of an empty star. - static let emptyBorderColor = defaultColor - - /// Width of the border for the empty star. - static let emptyBorderWidth: Double = 1 / Double(UIScreen.main.scale) - - /// Border color of a filled star. - static let filledBorderColor = defaultColor - - /// Width of the border for a filled star. - static let filledBorderWidth: Double = 1 / Double(UIScreen.main.scale) - - /// Background color of an empty star. - static let emptyColor = UIColor.clear - - /// Background color of a filled star. - static let filledColor = defaultColor - - /** - - Defines how the star is filled when the rating value is not an integer value. It can either show full stars, half stars or stars partially filled according to the rating value. - - */ - static let fillMode = StarFillMode.full - - /// Rating value that is shown in the storyboard by default. - static let rating: Double = 2.718281828 - - /// Distance between stars. - static let starMargin: Double = 5 - - /** - - Array of points for drawing the star with size of 100 by 100 pixels. Supply your points if you need to draw a different shape. - - */ - static let starPoints: [CGPoint] = [ - CGPoint(x: 49.5, y: 0.0), - CGPoint(x: 60.5, y: 35.0), - CGPoint(x: 99.0, y: 35.0), - CGPoint(x: 67.5, y: 58.0), - CGPoint(x: 78.5, y: 92.0), - CGPoint(x: 49.5, y: 71.0), - CGPoint(x: 20.5, y: 92.0), - CGPoint(x: 31.5, y: 58.0), - CGPoint(x: 0.0, y: 35.0), - CGPoint(x: 38.5, y: 35.0) - ] - - /// Size of a single star. - static var starSize: Double = 20 - - /// The total number of stars to be shown. - static let totalStars = 5 - - - // MARK: - Text settings - // ----------------------------- - - - /// Color of the text. - static let textColor = UIColor(red: 127/255, green: 127/255, blue: 127/255, alpha: 1) - - /// Font for the text. - static let textFont = UIFont.preferredFont(forTextStyle: UIFontTextStyle.footnote) - - /// Distance between the text and the stars. - static let textMargin: Double = 5 - - /// Calculates the size of the default text font. It is used for making the text size configurable from the storyboard. - static var textSize: Double { - get { - return Double(textFont.pointSize) - } - } - - - // MARK: - Touch settings - // ----------------------------- - - /// The lowest rating that user can set by touching the stars. - static let minTouchRating: Double = 1 - - /// When `true` the star fill level is updated when user touches the cosmos view. When `false` the Cosmos view only shows the rating and does not act as the input control. - static let updateOnTouch = true -} diff --git a/Example/Pods/Cosmos/Cosmos/CosmosLayerHelper.swift b/Example/Pods/Cosmos/Cosmos/CosmosLayerHelper.swift deleted file mode 100644 index ef19ff06..00000000 --- a/Example/Pods/Cosmos/Cosmos/CosmosLayerHelper.swift +++ /dev/null @@ -1,31 +0,0 @@ -import UIKit - -/// Helper class for creating CALayer objects. -class CosmosLayerHelper { - /** - - Creates a text layer for the given text string and font. - - - parameter text: The text shown in the layer. - - parameter font: The text font. It is also used to calculate the layer bounds. - - parameter color: Text color. - - - returns: New text layer. - - */ - class func createTextLayer(_ text: String, font: UIFont, color: UIColor) -> CATextLayer { - let size = NSString(string: text).size(withAttributes: [NSAttributedStringKey.font: font]) - - let layer = CATextLayer() - layer.bounds = CGRect(origin: CGPoint(), size: size) - layer.anchorPoint = CGPoint() - - layer.string = text - layer.font = CGFont(font.fontName as CFString) - layer.fontSize = font.pointSize - layer.foregroundColor = color.cgColor - layer.contentsScale = UIScreen.main.scale - - return layer - } -} diff --git a/Example/Pods/Cosmos/Cosmos/CosmosLayers.swift b/Example/Pods/Cosmos/Cosmos/CosmosLayers.swift deleted file mode 100644 index dff1d73a..00000000 --- a/Example/Pods/Cosmos/Cosmos/CosmosLayers.swift +++ /dev/null @@ -1,137 +0,0 @@ -import UIKit - - -/** - -Colection of helper functions for creating star layers. - -*/ -class CosmosLayers { - /** - - Creates the layers for the stars. - - - parameter rating: The decimal number representing the rating. Usually a number between 1 and 5 - - parameter settings: Star view settings. - - returns: Array of star layers. - - */ - class func createStarLayers(_ rating: Double, settings: CosmosSettings, isRightToLeft: Bool) -> [CALayer] { - - var ratingRemander = CosmosRating.numberOfFilledStars(rating, - totalNumberOfStars: settings.totalStars) - - var starLayers = [CALayer]() - - for _ in (0.. CALayer { - - if starFillLevel >= 1 { - return createStarLayer(true, settings: settings) - } - - if starFillLevel == 0 { - return createStarLayer(false, settings: settings) - } - - return createPartialStar(starFillLevel, settings: settings, isRightToLeft: isRightToLeft) - } - - /** - - Creates a partially filled star layer with two sub-layers: - - 1. The layer for the filled star on top. The fill level parameter determines the width of this layer. - 2. The layer for the empty star below. - - - parameter starFillLevel: Decimal number between 0 and 1 describing the star fill level. - - parameter settings: Star view settings. - - - returns: Layer that contains the partially filled star. - - */ - class func createPartialStar(_ starFillLevel: Double, settings: CosmosSettings, isRightToLeft: Bool) -> CALayer { - let filledStar = createStarLayer(true, settings: settings) - let emptyStar = createStarLayer(false, settings: settings) - - - let parentLayer = CALayer() - parentLayer.contentsScale = UIScreen.main.scale - parentLayer.bounds = CGRect(origin: CGPoint(), size: filledStar.bounds.size) - parentLayer.anchorPoint = CGPoint() - parentLayer.addSublayer(emptyStar) - parentLayer.addSublayer(filledStar) - - if isRightToLeft { - // Flip the star horizontally for a right-to-left language - let rotation = CATransform3DMakeRotation(CGFloat(Double.pi), 0, 1, 0) - filledStar.transform = CATransform3DTranslate(rotation, -filledStar.bounds.size.width, 0, 0) - } - - // Make filled layer width smaller according to the fill level - filledStar.bounds.size.width *= CGFloat(starFillLevel) - - return parentLayer - } - - private class func createStarLayer(_ isFilled: Bool, settings: CosmosSettings) -> CALayer { - if let image = isFilled ? settings.filledImage : settings.emptyImage { - // Create a layer that shows a star from an image - return StarLayer.create(image: image, size: settings.starSize) - } - - // Create a layer that draws a star from an array of points - - let fillColor = isFilled ? settings.filledColor : settings.emptyColor - let strokeColor = isFilled ? settings.filledBorderColor : settings.emptyBorderColor - - return StarLayer.create(settings.starPoints, - size: settings.starSize, - lineWidth: isFilled ? settings.filledBorderWidth : settings.emptyBorderWidth, - fillColor: fillColor, - strokeColor: strokeColor) - } - - /** - - Positions the star layers one after another with a margin in between. - - - parameter layers: The star layers array. - - parameter starMargin: Margin between stars. - - */ - class func positionStarLayers(_ layers: [CALayer], starMargin: Double) { - var positionX:CGFloat = 0 - - for layer in layers { - layer.position.x = positionX - positionX += layer.bounds.width + CGFloat(starMargin) - } - } -} diff --git a/Example/Pods/Cosmos/Cosmos/CosmosLocalizedRating.swift b/Example/Pods/Cosmos/Cosmos/CosmosLocalizedRating.swift deleted file mode 100644 index be50d1b1..00000000 --- a/Example/Pods/Cosmos/Cosmos/CosmosLocalizedRating.swift +++ /dev/null @@ -1,110 +0,0 @@ -import Foundation - -/** - -Returns the word "Rating" in user's language. It is used for voice-over in accessibility mode. - -*/ -struct CosmosLocalizedRating { - static var defaultText = "Rating" - - static var localizedRatings = [ - "ar": "تصنيف", - "bg": "Рейтинг", - "cy": "Sgôr", - "da": "Rating", - "de": "Bewertung", - "el": "Βαθμολογία", - "en": defaultText, - "es": "Valorar", - "et": "Reiting", - "fi": "Luokitus", - "fr": "De note", - "he": "דירוג", - "hi": "रेटिंग", - "hr": "Ocjena", - "hu": "Értékelés", - "id": "Peringkat", - "it": "Voto", - "ko": "등급", - "lt": "Reitingas", - "lv": "Vērtējums", - "nl": "Rating", - "no": "Vurdering", - "pl": "Ocena", - "pt": "Classificação", - "ro": "Evaluare", - "ru": "Рейтинг", - "sk": "Hodnotenie", - "sl": "Ocena", - "sr": "Рејтинг", - "sw": "Rating", - "th": "การจัดอันดับ", - "tr": "Oy verin", - "cs": "Hodnocení", - "uk": "Рейтинг", - "vi": "Đánh giá", - "zh": "评分" - ] - - static var ratingTranslation: String { - let languages = preferredLanguages(Locale.preferredLanguages) - return ratingInPreferredLanguage(languages) - } - - /** - - Returns the word "Rating" in user's language. - - - parameter language: ISO 639-1 language code. Example: 'en'. - - */ - static func translation(_ language: String) -> String? { - return localizedRatings[language] - } - - /** - - Returns translation using the preferred language. - - - parameter preferredLanguages: Array of preferred language codes (ISO 639-1). The first element is most preferred. - - - parameter localizedText: Dictionary with translations for the languages. The keys are ISO 639-1 language codes and values are the text. - - - parameter fallbackTranslation: The translation text used if no translation found for the preferred languages. - - - returns: Translation for the preferred language. - - */ - static func translationInPreferredLanguage(_ preferredLanguages: [String], - localizedText: [String: String], - fallbackTranslation: String) -> String { - - for language in preferredLanguages { - if let translatedText = translation(language) { - return translatedText - } - } - - return fallbackTranslation - } - - static func ratingInPreferredLanguage(_ preferredLanguages: [String]) -> String { - return translationInPreferredLanguage(preferredLanguages, - localizedText: localizedRatings, - fallbackTranslation: defaultText) - } - - static func preferredLanguages(_ preferredLocales: [String]) -> [String] { - return preferredLocales.map { element in - - let dashSeparated = element.components(separatedBy: "-") - if dashSeparated.count > 1 { return dashSeparated[0] } - - let underscoreSeparated = element.components(separatedBy: "_") - if underscoreSeparated.count > 1 { return underscoreSeparated[0] } - - return element - } - } -} diff --git a/Example/Pods/Cosmos/Cosmos/CosmosRating.swift b/Example/Pods/Cosmos/Cosmos/CosmosRating.swift deleted file mode 100644 index bcdcbfb0..00000000 --- a/Example/Pods/Cosmos/Cosmos/CosmosRating.swift +++ /dev/null @@ -1,98 +0,0 @@ -import UIKit - -/** - -Helper functions for calculating rating. - -*/ -struct CosmosRating { - - /** - - Returns a decimal number between 0 and 1 describing the star fill level. - - - parameter ratingRemainder: This value is passed from the loop that creates star layers. The value starts with the rating value and decremented by 1 when each star is created. For example, suppose we want to display rating of 3.5. When the first star is created the ratingRemainder parameter will be 3.5. For the second star it will be 2.5. Third: 1.5. Fourth: 0.5. Fifth: -0.5. - - - parameter fillMode: Describe how stars should be filled: full, half or precise. - - - returns: Decimal value between 0 and 1 describing the star fill level. 1 is a fully filled star. 0 is an empty star. 0.5 is a half-star. - - */ - static func starFillLevel(ratingRemainder: Double, fillMode: StarFillMode) -> Double { - - var result = ratingRemainder - - if result > 1 { result = 1 } - if result < 0 { result = 0 } - - return roundFillLevel(result, fillMode: fillMode) - } - - /** - - Rounds a single star's fill level according to the fill mode. "Full" mode returns 0 or 1 by using the standard decimal rounding. "Half" mode returns 0, 0.5 or 1 by rounding the decimal to closest of 3 values. "Precise" mode will return the fill level unchanged. - - - parameter starFillLevel: Decimal number between 0 and 1 describing the star fill level. - - - parameter fillMode: Fill mode that is used to round the fill level value. - - - returns: The rounded fill level. - - */ - static func roundFillLevel(_ starFillLevel: Double, fillMode: StarFillMode) -> Double { - switch fillMode { - case .full: - return Double(round(starFillLevel)) - case .half: - return Double(round(starFillLevel * 2) / 2) - case .precise : - return starFillLevel - } - } - - - /** - - Helper function for calculating the rating that is displayed to the user - taking into account the star fill mode. For example, if the fill mode is .half and precise rating is 4.6, the displayed rating will be 4.5. And if the fill mode is .full the displayed rating will be 5. - - - parameter preciseRating: Precise rating value, like 4.8237 - - - parameter fillMode: Describe how stars should be filled: full, half or precise. - - - parameter totalStars: Total number of stars. - - - returns: Returns rating that is displayed to the user taking into account the star fill mode. - - */ - static func displayedRatingFromPreciseRating(_ preciseRating: Double, - fillMode: StarFillMode, totalStars: Int) -> Double { - - let starFloorNumber = floor(preciseRating) - let singleStarRemainder = preciseRating - starFloorNumber - - var displayedRating = starFloorNumber + starFillLevel( - ratingRemainder: singleStarRemainder, fillMode: fillMode) - - displayedRating = min(Double(totalStars), displayedRating) // Can't go bigger than number of stars - displayedRating = max(0, displayedRating) // Can't be less than zero - - return displayedRating - } - - /** - - Returns the number of filled stars for given rating. - - - parameter rating: The rating to be displayed. - - parameter totalNumberOfStars: Total number of stars. - - returns: Number of filled stars. If rating is biggen than the total number of stars (usually 5) it returns the maximum number of stars. - - */ - static func numberOfFilledStars(_ rating: Double, totalNumberOfStars: Int) -> Double { - if rating > Double(totalNumberOfStars) { return Double(totalNumberOfStars) } - if rating < 0 { return 0 } - - return rating - } -} diff --git a/Example/Pods/Cosmos/Cosmos/CosmosSettings.swift b/Example/Pods/Cosmos/Cosmos/CosmosSettings.swift deleted file mode 100644 index 35f8f29f..00000000 --- a/Example/Pods/Cosmos/Cosmos/CosmosSettings.swift +++ /dev/null @@ -1,101 +0,0 @@ -import UIKit - -/** - -Settings that define the appearance of the star rating views. - -*/ -public struct CosmosSettings { - - /// Returns default set of settings for CosmosView - public static var `default`: CosmosSettings { - return CosmosSettings() - } - - public init() {} - - // MARK: - Star settings - // ----------------------------- - - /// Border color of an empty star. - public var emptyBorderColor = CosmosDefaultSettings.emptyBorderColor - - /// Width of the border for empty star. - public var emptyBorderWidth: Double = CosmosDefaultSettings.emptyBorderWidth - - /// Border color of a filled star. - public var filledBorderColor = CosmosDefaultSettings.filledBorderColor - - /// Width of the border for a filled star. - public var filledBorderWidth: Double = CosmosDefaultSettings.filledBorderWidth - - /// Background color of an empty star. - public var emptyColor = CosmosDefaultSettings.emptyColor - - /// Background color of a filled star. - public var filledColor = CosmosDefaultSettings.filledColor - - /** - - Defines how the star is filled when the rating value is not a whole integer. It can either show full stars, half stars or stars partially filled according to the rating value. - - */ - public var fillMode = CosmosDefaultSettings.fillMode - - /// Distance between stars. - public var starMargin: Double = CosmosDefaultSettings.starMargin - - /** - - Array of points for drawing the star with size of 100 by 100 pixels. Supply your points if you need to draw a different shape. - - */ - public var starPoints: [CGPoint] = CosmosDefaultSettings.starPoints - - /// Size of a single star. - public var starSize: Double = CosmosDefaultSettings.starSize - - /// The maximum number of stars to be shown. - public var totalStars = CosmosDefaultSettings.totalStars - - // MARK: - Star image settings - // ----------------------------- - - /** - - Image used for the filled portion of the star. By default the star is drawn from the array of points unless an image is supplied. - - */ - public var filledImage: UIImage? = nil - - /** - - Image used for the empty portion of the star. By default the star is drawn from the array of points unless an image is supplied. - - */ - public var emptyImage: UIImage? = nil - - // MARK: - Text settings - // ----------------------------- - - /// Color of the text. - public var textColor = CosmosDefaultSettings.textColor - - /// Font for the text. - public var textFont = CosmosDefaultSettings.textFont - - /// Distance between the text and the stars. - public var textMargin: Double = CosmosDefaultSettings.textMargin - - - // MARK: - Touch settings - // ----------------------------- - - /// The lowest rating that user can set by touching the stars. - public var minTouchRating: Double = CosmosDefaultSettings.minTouchRating - - /// When `true` the star fill level is updated when user touches the cosmos view. When `false` the Cosmos view only shows the rating and does not act as the input control. - public var updateOnTouch = CosmosDefaultSettings.updateOnTouch -} - - diff --git a/Example/Pods/Cosmos/Cosmos/CosmosSize.swift b/Example/Pods/Cosmos/Cosmos/CosmosSize.swift deleted file mode 100644 index f6807b7f..00000000 --- a/Example/Pods/Cosmos/Cosmos/CosmosSize.swift +++ /dev/null @@ -1,29 +0,0 @@ -import UIKit - -/** - -Helper class for calculating size for the cosmos view. - -*/ -class CosmosSize { - /** - - Calculates the size of the cosmos view. It goes through all the star and text layers and makes size the view size is large enough to show all of them. - - */ - class func calculateSizeToFitLayers(_ layers: [CALayer]) -> CGSize { - var size = CGSize() - - for layer in layers { - if layer.frame.maxX > size.width { - size.width = layer.frame.maxX - } - - if layer.frame.maxY > size.height { - size.height = layer.frame.maxY - } - } - - return size - } -} diff --git a/Example/Pods/Cosmos/Cosmos/CosmosText.swift b/Example/Pods/Cosmos/Cosmos/CosmosText.swift deleted file mode 100644 index 278e6dfe..00000000 --- a/Example/Pods/Cosmos/Cosmos/CosmosText.swift +++ /dev/null @@ -1,25 +0,0 @@ - - -import UIKit - -/** - -Positions the text layer to the right of the stars. - -*/ -class CosmosText { - /** - - Positions the text layer to the right from the stars. Text is aligned to the center of the star superview vertically. - - - parameter layer: The text layer to be positioned. - - parameter starsSize: The size of the star superview. - - parameter textMargin: The distance between the stars and the text. - - */ - class func position(_ layer: CALayer, starsSize: CGSize, textMargin: Double) { - layer.position.x = starsSize.width + CGFloat(textMargin) - let yOffset = (starsSize.height - layer.bounds.height) / 2 - layer.position.y = yOffset - } -} diff --git a/Example/Pods/Cosmos/Cosmos/CosmosTouch.swift b/Example/Pods/Cosmos/Cosmos/CosmosTouch.swift deleted file mode 100644 index 9b9bf71f..00000000 --- a/Example/Pods/Cosmos/Cosmos/CosmosTouch.swift +++ /dev/null @@ -1,80 +0,0 @@ -import UIKit - -/** - -Functions for working with touch input. - -*/ -struct CosmosTouch { - /** - - Calculates the rating based on the touch location. - - - parameter position: The horizontal location of the touch relative to the width of the stars. - - - returns: The rating representing the touch location. - - */ - static func touchRating(_ position: CGFloat, settings: CosmosSettings) -> Double { - var rating = preciseRating( - position: Double(position), - numberOfStars: settings.totalStars, - starSize: settings.starSize, - starMargin: settings.starMargin) - - if settings.fillMode == .half { - rating += 0.20 - } - - if settings.fillMode == .full { - rating += 0.45 - } - - rating = CosmosRating.displayedRatingFromPreciseRating(rating, - fillMode: settings.fillMode, totalStars: settings.totalStars) - - rating = max(settings.minTouchRating, rating) // Can't be less than min rating - - return rating - } - - - /** - - Returns the precise rating based on the touch position. - - - parameter position: The horizontal location of the touch relative to the width of the stars. - - parameter numberOfStars: Total number of stars, filled and full. - - parameter starSize: The width of a star. - - parameter starSize: Margin between stars. - - returns: The precise rating. - - */ - static func preciseRating(position: Double, numberOfStars: Int, - starSize: Double, starMargin: Double) -> Double { - - if position < 0 { return 0 } - var positionRemainder = position; - - // Calculate the number of times the star with a margin fits the position - // This will be the whole part of the rating - var rating: Double = Double(Int(position / (starSize + starMargin))) - - // If rating is grater than total number of stars - return maximum rating - if Int(rating) > numberOfStars { return Double(numberOfStars) } - - // Calculate what portion of the last star does the position correspond to - // This will be the added partial part of the rating - - positionRemainder -= rating * (starSize + starMargin) - - if positionRemainder > starSize - { - rating += 1 - } else { - rating += positionRemainder / starSize - } - - return rating - } -} diff --git a/Example/Pods/Cosmos/Cosmos/CosmosView.swift b/Example/Pods/Cosmos/Cosmos/CosmosView.swift deleted file mode 100644 index ec3549a7..00000000 --- a/Example/Pods/Cosmos/Cosmos/CosmosView.swift +++ /dev/null @@ -1,442 +0,0 @@ -import UIKit - -/** - -A star rating view that can be used to show customer rating for the products. On can select stars by tapping on them when updateOnTouch settings is true. An optional text can be supplied that is shown on the right side. - -Example: - - cosmosView.rating = 4 - cosmosView.text = "(123)" - -Shows: ★★★★☆ (123) - -*/ -@IBDesignable open class CosmosView: UIView { - - /** - - The currently shown number of stars, usually between 1 and 5. If the value is decimal the stars will be shown according to the Fill Mode setting. - - */ - @IBInspectable open var rating: Double = CosmosDefaultSettings.rating { - didSet { - if oldValue != rating { - update() - } - } - } - - /// Currently shown text. Set it to nil to display just the stars without text. - @IBInspectable open var text: String? { - didSet { - if oldValue != text { - update() - } - } - } - - /// Star rating settings. - open var settings: CosmosSettings = .default { - didSet { - update() - } - } - - /// Stores calculated size of the view. It is used as intrinsic content size. - private var viewSize = CGSize() - - /// Draws the stars when the view comes out of storyboard with default settings - open override func awakeFromNib() { - super.awakeFromNib() - - update() - } - - /** - - Initializes and returns a newly allocated cosmos view object. - - */ - public convenience init(settings: CosmosSettings = .default) { - self.init(frame: .zero, settings: settings) - } - - /** - - Initializes and returns a newly allocated cosmos view object with the specified frame rectangle. - - - parameter frame: The frame rectangle for the view. - - */ - override public convenience init(frame: CGRect) { - self.init(frame: frame, settings: .default) - } - - public init(frame: CGRect, settings: CosmosSettings) { - super.init(frame: frame) - self.settings = settings - update() - improvePerformance() - } - - /// Initializes and returns a newly allocated cosmos view object. - required public init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - - improvePerformance() - } - - /// Change view settings for faster drawing - private func improvePerformance() { - /// Cache the view into a bitmap instead of redrawing the stars each time - layer.shouldRasterize = true - layer.rasterizationScale = UIScreen.main.scale - - isOpaque = true - } - - /** - - Updates the stars and optional text based on current values of `rating` and `text` properties. - - */ - open func update() { - - // Create star layers - // ------------ - - var layers = CosmosLayers.createStarLayers( - rating, - settings: settings, - isRightToLeft: RightToLeft.isRightToLeft(self) - ) - - // Create text layer - // ------------ - - if let text = text { - let textLayer = createTextLayer(text, layers: layers) - layers = addTextLayer(textLayer: textLayer, layers: layers) - } - - layer.sublayers = layers - - - // Update size - // ------------ - - updateSize(layers) - - // Update accesibility - // ------------ - - updateAccessibility() - } - - /** - - Creates the text layer for the given text string. - - - parameter text: Text string for the text layer. - - parameter layers: Arrays of layers containing the stars. - - - returns: The newly created text layer. - - */ - private func createTextLayer(_ text: String, layers: [CALayer]) -> CALayer { - let textLayer = CosmosLayerHelper.createTextLayer(text, - font: settings.textFont, color: settings.textColor) - - let starsSize = CosmosSize.calculateSizeToFitLayers(layers) - - if RightToLeft.isRightToLeft(self) { - CosmosText.position(textLayer, starsSize: CGSize(width: 0, height: starsSize.height), textMargin: 0) - } else { - CosmosText.position(textLayer, starsSize: starsSize, textMargin: settings.textMargin) - } - - layer.addSublayer(textLayer) - - return textLayer - } - - /** - - Adds text layer to the array of layers - - - parameter textLayer: A text layer. - - parameter layers: An array where the text layer will be added. - - returns: An array of layer with the text layer. - - */ - private func addTextLayer(textLayer: CALayer, layers: [CALayer]) -> [CALayer] { - var allLayers = layers - // Position stars after the text for right-to-left languages - if RightToLeft.isRightToLeft(self) { - for starLayer in layers { - starLayer.position.x += textLayer.bounds.width + CGFloat(settings.textMargin); - } - - allLayers.insert(textLayer, at: 0) - } else { - allLayers.append(textLayer) - } - - return allLayers - } - - /** - - Updates the size to fit all the layers containing stars and text. - - - parameter layers: Array of layers containing stars and the text. - - */ - private func updateSize(_ layers: [CALayer]) { - viewSize = CosmosSize.calculateSizeToFitLayers(layers) - invalidateIntrinsicContentSize() - - // Stretch the view to include all stars and the text. - // Needed when used without Auto Layout to receive touches for all stars. - frame.size = intrinsicContentSize - } - - /// Returns the content size to fit all the star and text layers. - override open var intrinsicContentSize:CGSize { - return viewSize - } - - /** - - Prepares the Cosmos view for reuse in a table view cell. - If the cosmos view is used in a table view cell, call this method after the - cell is dequeued. Alternatively, override UITableViewCell's prepareForReuse method and call - this method from there. - - */ - open func prepareForReuse() { - previousRatingForDidTouchCallback = -123.192 - } - - // MARK: - Accessibility - - private func updateAccessibility() { - CosmosAccessibility.update(self, rating: rating, text: text, settings: settings) - } - - /// Called by the system in accessibility voice-over mode when the value is incremented by the user. - open override func accessibilityIncrement() { - super.accessibilityIncrement() - - rating += CosmosAccessibility.accessibilityIncrement(rating, settings: settings) - didTouchCosmos?(rating) - didFinishTouchingCosmos?(rating) - } - - /// Called by the system in accessibility voice-over mode when the value is decremented by the user. - open override func accessibilityDecrement() { - super.accessibilityDecrement() - - rating -= CosmosAccessibility.accessibilityDecrement(rating, settings: settings) - didTouchCosmos?(rating) - didFinishTouchingCosmos?(rating) - } - - // MARK: - Touch recognition - - /// Closure will be called when user touches the cosmos view. The touch rating argument is passed to the closure. - open var didTouchCosmos: ((Double)->())? - - /// Closure will be called when the user lifts finger from the cosmos view. The touch rating argument is passed to the closure. - open var didFinishTouchingCosmos: ((Double)->())? - - /// Overriding the function to detect the first touch gesture. - open override func touchesBegan(_ touches: Set, with event: UIEvent?) { - super.touchesBegan(touches, with: event) - guard let location = touchLocationFromBeginningOfRating(touches) else { return } - onDidTouch(location) - } - - /// Overriding the function to detect touch move. - open override func touchesMoved(_ touches: Set, with event: UIEvent?) { - super.touchesMoved(touches, with: event) - guard let location = touchLocationFromBeginningOfRating(touches) else { return } - onDidTouch(location) - } - - /// Returns the distance of the touch relative to the left edge of the first star - func touchLocationFromBeginningOfRating(_ touches: Set) -> CGFloat? { - guard let touch = touches.first else { return nil } - var location = touch.location(in: self).x - - // In right-to-left languages, the first star will be on the right - if RightToLeft.isRightToLeft(self) { location = bounds.width - location } - - return location - } - - /// Detecting event when the user lifts their finger. - open override func touchesEnded(_ touches: Set, with event: UIEvent?) { - super.touchesEnded(touches, with: event) - - didFinishTouchingCosmos?(rating) - } - - /** - - Detecting event when the touches are cancelled (can happen in a scroll view). - Behave as if user has lifted their finger. - - */ - open override func touchesCancelled(_ touches: Set, with event: UIEvent?) { - super.touchesCancelled(touches, with: event) - - didFinishTouchingCosmos?(rating) - } - - /** - - Called when the view is touched. - - - parameter locationX: The horizontal location of the touch relative to the width of the stars. - - - parameter starsWidth: The width of the stars excluding the text. - - */ - func onDidTouch(_ locationX: CGFloat) { - let calculatedTouchRating = CosmosTouch.touchRating(locationX, settings: settings) - - if settings.updateOnTouch { - rating = calculatedTouchRating - } - - if calculatedTouchRating == previousRatingForDidTouchCallback { - // Do not call didTouchCosmos if rating has not changed - return - } - - didTouchCosmos?(calculatedTouchRating) - previousRatingForDidTouchCallback = calculatedTouchRating - } - - private var previousRatingForDidTouchCallback: Double = -123.192 - - /// Increase the hitsize of the view if it's less than 44px for easier touching. - override open func point(inside point: CGPoint, with event: UIEvent?) -> Bool { - let oprimizedBounds = CosmosTouchTarget.optimize(bounds) - return oprimizedBounds.contains(point) - } - - - // MARK: - Properties inspectable from the storyboard - - @IBInspectable var totalStars: Int = CosmosDefaultSettings.totalStars { - didSet { - settings.totalStars = totalStars - } - } - - @IBInspectable var starSize: Double = CosmosDefaultSettings.starSize { - didSet { - settings.starSize = starSize - } - } - - @IBInspectable var filledColor: UIColor = CosmosDefaultSettings.filledColor { - didSet { - settings.filledColor = filledColor - } - } - - @IBInspectable var emptyColor: UIColor = CosmosDefaultSettings.emptyColor { - didSet { - settings.emptyColor = emptyColor - } - } - - @IBInspectable var emptyBorderColor: UIColor = CosmosDefaultSettings.emptyBorderColor { - didSet { - settings.emptyBorderColor = emptyBorderColor - } - } - - @IBInspectable var emptyBorderWidth: Double = CosmosDefaultSettings.emptyBorderWidth { - didSet { - settings.emptyBorderWidth = emptyBorderWidth - } - } - - @IBInspectable var filledBorderColor: UIColor = CosmosDefaultSettings.filledBorderColor { - didSet { - settings.filledBorderColor = filledBorderColor - } - } - - @IBInspectable var filledBorderWidth: Double = CosmosDefaultSettings.filledBorderWidth { - didSet { - settings.filledBorderWidth = filledBorderWidth - } - } - - @IBInspectable var starMargin: Double = CosmosDefaultSettings.starMargin { - didSet { - settings.starMargin = starMargin - } - } - - @IBInspectable var fillMode: Int = CosmosDefaultSettings.fillMode.rawValue { - didSet { - settings.fillMode = StarFillMode(rawValue: fillMode) ?? CosmosDefaultSettings.fillMode - } - } - - @IBInspectable var textSize: Double = CosmosDefaultSettings.textSize { - didSet { - settings.textFont = settings.textFont.withSize(CGFloat(textSize)) - } - } - - @IBInspectable var textMargin: Double = CosmosDefaultSettings.textMargin { - didSet { - settings.textMargin = textMargin - } - } - - @IBInspectable var textColor: UIColor = CosmosDefaultSettings.textColor { - didSet { - settings.textColor = textColor - } - } - - @IBInspectable var updateOnTouch: Bool = CosmosDefaultSettings.updateOnTouch { - didSet { - settings.updateOnTouch = updateOnTouch - } - } - - @IBInspectable var minTouchRating: Double = CosmosDefaultSettings.minTouchRating { - didSet { - settings.minTouchRating = minTouchRating - } - } - - @IBInspectable var filledImage: UIImage? { - didSet { - settings.filledImage = filledImage - } - } - - @IBInspectable var emptyImage: UIImage? { - didSet { - settings.emptyImage = emptyImage - } - } - - /// Draw the stars in interface buidler - open override func prepareForInterfaceBuilder() { - super.prepareForInterfaceBuilder() - - update() - } -} diff --git a/Example/Pods/Cosmos/Cosmos/Helpers/CosmosTouchTarget.swift b/Example/Pods/Cosmos/Cosmos/Helpers/CosmosTouchTarget.swift deleted file mode 100644 index 6685ad63..00000000 --- a/Example/Pods/Cosmos/Cosmos/Helpers/CosmosTouchTarget.swift +++ /dev/null @@ -1,24 +0,0 @@ -import UIKit - -/** - -Helper function to make sure bounds are big enought to be used as touch target. -The function is used in pointInside(point: CGPoint, withEvent event: UIEvent?) of UIImageView. - -*/ -struct CosmosTouchTarget { - static func optimize(_ bounds: CGRect) -> CGRect { - let recommendedHitSize: CGFloat = 44 - - var hitWidthIncrease:CGFloat = recommendedHitSize - bounds.width - var hitHeightIncrease:CGFloat = recommendedHitSize - bounds.height - - if hitWidthIncrease < 0 { hitWidthIncrease = 0 } - if hitHeightIncrease < 0 { hitHeightIncrease = 0 } - - let extendedBounds: CGRect = bounds.insetBy(dx: -hitWidthIncrease / 2, - dy: -hitHeightIncrease / 2) - - return extendedBounds - } -} diff --git a/Example/Pods/Cosmos/Cosmos/Helpers/RightToLeft.swift b/Example/Pods/Cosmos/Cosmos/Helpers/RightToLeft.swift deleted file mode 100644 index 7bbf5d20..00000000 --- a/Example/Pods/Cosmos/Cosmos/Helpers/RightToLeft.swift +++ /dev/null @@ -1,17 +0,0 @@ -import UIKit - -/** - - Helper functions for dealing with right-to-left languages. - - */ -struct RightToLeft { - static func isRightToLeft(_ view: UIView) -> Bool { - if #available(iOS 9.0, *) { - return UIView.userInterfaceLayoutDirection( - for: view.semanticContentAttribute) == .rightToLeft - } else { - return false - } - } -} diff --git a/Example/Pods/Cosmos/Cosmos/StarFillMode.swift b/Example/Pods/Cosmos/Cosmos/StarFillMode.swift deleted file mode 100644 index 6261af24..00000000 --- a/Example/Pods/Cosmos/Cosmos/StarFillMode.swift +++ /dev/null @@ -1,17 +0,0 @@ -import Foundation - -/** - -Defines how the star is filled when the rating is not an integer number. For example, if rating is 4.6 and the fill more is Half, the star will appear to be half filled. - -*/ -public enum StarFillMode: Int { - /// Show only fully filled stars. For example, fourth star will be empty for 3.2. - case full = 0 - - /// Show fully filled and half-filled stars. For example, fourth star will be half filled for 3.6. - case half = 1 - - /// Fill star according to decimal rating. For example, fourth star will be 20% filled for 3.2. - case precise = 2 -} diff --git a/Example/Pods/Cosmos/Cosmos/StarLayer.swift b/Example/Pods/Cosmos/Cosmos/StarLayer.swift deleted file mode 100644 index b2a6f0d5..00000000 --- a/Example/Pods/Cosmos/Cosmos/StarLayer.swift +++ /dev/null @@ -1,159 +0,0 @@ -import UIKit - -/** - -Creates a layer with a single star in it. - -*/ -struct StarLayer { - /** - - Creates a square layer with given size and draws the star shape in it. - - - parameter starPoints: Array of points for drawing a closed shape. The size of enclosing rectangle is 100 by 100. - - - parameter size: The width and height of the layer. The star shape is scaled to fill the size of the layer. - - - parameter lineWidth: The width of the star stroke. - - - parameter fillColor: Star shape fill color. Fill color is invisible if it is a clear color. - - - parameter strokeColor: Star shape stroke color. Stroke is invisible if it is a clear color. - - - returns: New layer containing the star shape. - - */ - static func create(_ starPoints: [CGPoint], size: Double, - lineWidth: Double, fillColor: UIColor, strokeColor: UIColor) -> CALayer { - - let containerLayer = createContainerLayer(size) - let path = createStarPath(starPoints, size: size, lineWidth: lineWidth) - - let shapeLayer = createShapeLayer(path.cgPath, lineWidth: lineWidth, - fillColor: fillColor, strokeColor: strokeColor, size: size) - - containerLayer.addSublayer(shapeLayer) - - return containerLayer - } - - /** - - Creates the star layer from an image - - - parameter image: a star image to be shown. - - - parameter size: The width and height of the layer. The image is scaled to fit the layer. - - */ - static func create(image: UIImage, size: Double) -> CALayer { - let containerLayer = createContainerLayer(size) - let imageLayer = createContainerLayer(size) - - containerLayer.addSublayer(imageLayer) - imageLayer.contents = image.cgImage - imageLayer.contentsGravity = kCAGravityResizeAspect - - return containerLayer - } - - /** - - Creates the star shape layer. - - - parameter path: The star shape path. - - - parameter lineWidth: The width of the star stroke. - - - parameter fillColor: Star shape fill color. Fill color is invisible if it is a clear color. - - - parameter strokeColor: Star shape stroke color. Stroke is invisible if it is a clear color. - - - returns: New shape layer. - - */ - static func createShapeLayer(_ path: CGPath, lineWidth: Double, fillColor: UIColor, - strokeColor: UIColor, size: Double) -> CALayer { - - let layer = CAShapeLayer() - layer.anchorPoint = CGPoint() - layer.contentsScale = UIScreen.main.scale - layer.strokeColor = strokeColor.cgColor - layer.fillColor = fillColor.cgColor - layer.lineWidth = CGFloat(lineWidth) - layer.bounds.size = CGSize(width: size, height: size) - layer.masksToBounds = true - layer.path = path - layer.isOpaque = true - return layer - } - - /** - - Creates a layer that will contain the shape layer. - - - returns: New container layer. - - */ - static func createContainerLayer(_ size: Double) -> CALayer { - let layer = CALayer() - layer.contentsScale = UIScreen.main.scale - layer.anchorPoint = CGPoint() - layer.masksToBounds = true - layer.bounds.size = CGSize(width: size, height: size) - layer.isOpaque = true - return layer - } - - /** - - Creates a path for the given star points and size. The star points specify a shape of size 100 by 100. The star shape will be scaled if the size parameter is not 100. For exampe, if size parameter is 200 the shape will be scaled by 2. - - - parameter starPoints: Array of points for drawing a closed shape. The size of enclosing rectangle is 100 by 100. - - - parameter size: Specifies the size of the shape to return. - - - returns: New shape path. - - */ - static func createStarPath(_ starPoints: [CGPoint], size: Double, - lineWidth: Double) -> UIBezierPath { - - let lineWidthLocal = lineWidth + ceil(lineWidth * 0.3) - let sizeWithoutLineWidth = size - lineWidthLocal * 2 - - let points = scaleStar(starPoints, factor: sizeWithoutLineWidth / 100, - lineWidth: lineWidthLocal) - - let path = UIBezierPath() - path.move(to: points[0]) - let remainingPoints = Array(points[1.. [CGPoint] { - return starPoints.map { point in - return CGPoint( - x: point.x * CGFloat(factor) + CGFloat(lineWidth), - y: point.y * CGFloat(factor) + CGFloat(lineWidth) - ) - } - } -} diff --git a/Example/Pods/Cosmos/LICENSE b/Example/Pods/Cosmos/LICENSE deleted file mode 100644 index 276da5f1..00000000 --- a/Example/Pods/Cosmos/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License - -Copyright (c) 2015 Evgenii Neumerzhitckii - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/Example/Pods/Cosmos/README.md b/Example/Pods/Cosmos/README.md deleted file mode 100644 index 6a71b256..00000000 --- a/Example/Pods/Cosmos/README.md +++ /dev/null @@ -1,217 +0,0 @@ -# Cosmos, a star rating control for iOS and tvOS - -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) -[![CocoaPods Version](https://img.shields.io/cocoapods/v/Cosmos.svg?style=flat)](http://cocoadocs.org/docsets/Cosmos) -[![License](https://img.shields.io/cocoapods/l/Cosmos.svg?style=flat)](LICENSE) -[![Platform](https://img.shields.io/cocoapods/p/Cosmos.svg?style=flat)](http://cocoadocs.org/docsets/Cosmos) - -Cosmos, star rating control for iOS / Swift - -This is a UI control for iOS and tvOS written in Swift. It shows a star rating and takes rating input from the user. Cosmos is a subclass of a UIView that will allow your users to post those inescapable 1-star reviews! - -* Shows star rating with an optional text label. -* Can be used as a rating input control (iOS only). -* Cosmos view can be customized in the Storyboard without writing code. -* Includes different star filling modes: full, half-filled and precise. -* Cosmos is accessible and works with voice-over. -* Supports right-to-left languages. - - -Binary star system of Sirius A and Sirius B (artist's impression) - -*Picture of binary star system of Sirius A and Sirius B by [NASA](http://www.nasa.gov), [ESA](http://www.esa.int/ESA) and G. Bacon ([STScI](http://www.stsci.edu/portal/)). Source: [spacetelescope.org](http://www.spacetelescope.org/images/heic0516b/).* - - -## Setup - -There are three ways you can add Cosmos to your Xcode project. - -#### Add source (iOS 8+) - -Simply add [CosmosDistrib.swift](https://github.com/evgenyneu/Cosmos/blob/master/Distrib/CosmosDistrib.swift) file into your Xcode project. - -#### Setup with Carthage (iOS 8+) - -Alternatively, add `github "evgenyneu/Cosmos" ~> 16.0` to your Cartfile and run `carthage update`. - -#### Setup with CocoaPods (iOS 8+) - -If you are using CocoaPods add this text to your Podfile and run `pod install`. - - use_frameworks! - target 'Your target name' - pod 'Cosmos', '~> 16.0' - - -#### Legacy Swift versions - -Setup a [previous version](https://github.com/evgenyneu/Cosmos/wiki/Legacy-Swift-versions) of the library if you use an older version of Swift. - - -## Usage - - -1) Drag `View` object from the *Object Library* into your storyboard. - - -Add view control in attributes inspector - - -2) Set the view's class to `CosmosView` in the *Identity Inspector*. Set its *module* property to `Cosmos` if you used Carthage or CocoaPods setup methods. - - -Add Cosmos rating view to the storyboard - -*tvOS note*: read the collowing [setup instructions for tvOS](https://github.com/evgenyneu/Cosmos/wiki/tvOS-CocoaPods-error) if you see build errors at this stage. - - -3) Customize the Cosmos view appearance in the *Attributes Inspector*. If storyboard does not show the stars click **Refresh All Views** from the **Editor** menu. - - -Customize cosmos appearance in the attributes inspector in Xcode. - - -## Positioning the Cosmos view - -One can position the Cosmos view using Auto Layout constaints. The width and height of the view is determined automatically based on the size of its content - stars and text. Therefore, there is no need to set width/height constaints on the Cosmos view. - -## Using Cosmos in code - -Add `import Cosmos` to your source code if you used Carthage or CocoaPods setup methods. - -You can style and control Cosmos view from your code by creating an outlet in your view controller. Alternatively, one can instantiate `CosmosView` class and add it to the view manually without using Storyboard. - - -```Swift -// Change the cosmos view rating -cosmosView.rating = 4 - -// Change the text -cosmosView.text = "(123)" - -// Called when user finishes changing the rating by lifting the finger from the view. -// This may be a good place to save the rating in the database or send to the server. -cosmosView.didFinishTouchingCosmos = { rating in } - -// A closure that is called when user changes the rating by touching the view. -// This can be used to update UI as the rating is being changed by moving a finger. -cosmosView.didTouchCosmos = { rating in } -``` - - -## Customization - -One can customize Cosmos from code by changing its `settings`. See the [Cosmos configuration manual](https://github.com/evgenyneu/Cosmos/wiki/Cosmos-configuration) for the complete list of configuration options. - -```Swift -// Do not change rating when touched -// Use if you need just to show the stars without getting user's input -cosmosView.settings.updateOnTouch = false - -// Show only fully filled stars -cosmosView.settings.fillMode = .full -// Other fill modes: .half, .precise - -// Change the size of the stars -cosmosView.settings.starSize = 30 - -// Set the distance between stars -cosmosView.settings.starMargin = 5 - -// Set the color of a filled star -cosmosView.settings.filledColor = UIColor.orange - -// Set the border color of an empty star -cosmosView.settings.emptyBorderColor = UIColor.orange - -// Set the border color of a filled star -cosmosView.settings.filledBorderColor = UIColor.orange -``` - - - -## Supplying images for the stars - -By default, Cosmos draws the stars from an array of points. Alternatively, one can supply custom images for the stars, both in the Storyboard and from code. - -#### Using star images from the Storyboard - -Supplying an image for a star in Xcode. - -#### Using star images from code - -```Swift -// Set image for the filled star -cosmosView.settings.filledImage = UIImage(named: "GoldStarFilled") - -// Set image for the empty star -cosmosView.settings.emptyImage = UIImage(named: "GoldStarEmpty") -``` -Note: you need to have the images for the filled and empty star in your project for this code to work. - -#### Download star image files - -Images for the golden star used in the demo app are available in [here](https://github.com/evgenyneu/Cosmos/tree/master/graphics/Stars/GoldStar). Contributions for other star images are very welcome: add vector images to `/graphics/Stars/` directory and submit a pull request. - - -## Using Cosmos in a scroll/table view - -[Here](https://github.com/evgenyneu/Cosmos/wiki/Using-Cosmos-in-a-scroll-view) is how to use Cosmos in a scroll view or a table view. - -## Using Cosmos settings from Objective-C - -[This manual](https://github.com/evgenyneu/Cosmos/wiki/Using-Cosmos-settings-in-Objective-C) describes how to set/read Cosmos settings in Objective-C apps. - -## Demo app - -This project includes a demo iOS app. - -Five star rating control for iOS written in Swift - -#### Using cosmos in a table view - -Using cosmos in a table view - - - -## Alternative solutions - -Here are some other star rating controls for iOS: - -* [danwilliams64/DJWStarRatingView](https://github.com/danwilliams64/DJWStarRatingView) -* [dlinsin/DLStarRating](https://github.com/dlinsin/DLStarRating) -* [dyang/DYRateView](https://github.com/dyang/DYRateView) -* [erndev/EDStarRating](https://github.com/erndev/EDStarRating) -* [hugocampossousa/HCSStarRatingView](https://github.com/hugocampossousa/HCSStarRatingView) -* [shuhrat10/STRatingControl](https://github.com/shuhrat10/STRatingControl) -* [strekfus/FloatRatingView](https://github.com/strekfus/FloatRatingView) -* [yanguango/ASStarRatingView](https://github.com/yanguango/ASStarRatingView) - -## Thanks 👍 - -We would like to thank the following people for their valuable contributions. - -* [jsahoo](https://github.com/jsahoo) for additing ability to customize the Cosmos view from the interface build with Carthage setup method. -* [0x7fffffff](https://github.com/0x7fffffff) for changing `public` access-level modifiers to `open`. -* [ali-zahedi](https://github.com/ali-zahedi) for updating to the latest version of Swift 3.0. -* [augmentedworks](https://github.com/augmentedworks) for adding borders to filled stars. -* [craiggrummitt](https://github.com/craiggrummitt) for Xcode 8 beta 4 support. -* [JimiSmith](https://github.com/JimiSmith) for Xcode 8 beta 6 support. -* [nickhart](https://github.com/nickhart) for adding compatibility with Xcode 6. -* [staticdreams](https://github.com/staticdreams) for bringing tvOS support. -* [wagnersouz4](https://github.com/wagnersouz4) for Swift 3.1 update. -* [paoloq](https://github.com/paoloq) for reporting the CosmoView frame size issue when the view is used without Auto Layout. -* [danshevluk](https://github.com/danshevluk) for adding ability to reuse settings in multiple cosmos views. -* [xrayman](https://github.com/xrayman) for reporting a table view reusability bug and improving the table view screen of the demo app. - - -## License - -Cosmos is released under the [MIT License](LICENSE). - -## 🌌⭐️🌕🚀🌠 - -> We are a way for the cosmos to know itself. - -*Carl Sagan, from 1980 "Cosmos: A Personal Voyage" TV series.* diff --git a/Example/Pods/Crashlytics/Crashlytics.framework/README b/Example/Pods/Crashlytics/Crashlytics.framework/README deleted file mode 100644 index 3ebf7671..00000000 --- a/Example/Pods/Crashlytics/Crashlytics.framework/README +++ /dev/null @@ -1 +0,0 @@ -We've now combined all our supported platforms into a single podspec. As a result, we moved our submit script to a new location for Cocoapods projects: ${PODS_ROOT}/Crashlytics/submit. To avoid breaking functionality that references the old location of the submit, we've placed this dummy script that calls to the correct location, while providing a helpful warning if it is invoked. This bridge for backwards compatibility will be removed in a future release, so please heed the warning! diff --git a/Example/Pods/Crashlytics/Crashlytics.framework/submit b/Example/Pods/Crashlytics/Crashlytics.framework/submit deleted file mode 100755 index b7de4e37..00000000 --- a/Example/Pods/Crashlytics/Crashlytics.framework/submit +++ /dev/null @@ -1,6 +0,0 @@ -if [[ -z $PODS_ROOT ]]; then -echo "error: The submit binary delivered by cocoapods is in a new location, under '$"{"PODS_ROOT"}"/Crashlytics/submit'. This script was put in place for backwards compatibility, but it relies on PODS_ROOT, which does not have a value in your current setup. Please update the path to the submit binary to fix this issue." -else -echo "warning: The submit script is now located at '$"{"PODS_ROOT"}"/Crashlytics/submit'. To remove this warning, update your path to point to this new location." -sh "${PODS_ROOT}/Crashlytics/submit" "$@" -fi diff --git a/Example/Pods/Crashlytics/README.md b/Example/Pods/Crashlytics/README.md deleted file mode 100644 index 2715a06b..00000000 --- a/Example/Pods/Crashlytics/README.md +++ /dev/null @@ -1,39 +0,0 @@ -![Crashlytics Header](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-crashlytics-header.png) - -Part of [Google Fabric](https://get.fabric.io), [Crashlytics](http://try.crashlytics.com/) offers the most powerful, yet lightest weight crash reporting solution for iOS. Crashlytics also provides real-time analytics through [Answers](https://answers.io/) and app distributions to testers using [Beta](http://try.crashlytics.com/beta/). - -## Setup - -1. Visit [https://fabric.io/sign_up](https://fabric.io/sign_up) to create your Fabric account and to download Fabric.app. - -1. Open Fabric.app, login and select the Crashlytics SDK. - - ![Fabric Plugin](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-fabric-plugin.png) - -1. The Fabric app automatically detects when a project uses CocoaPods and gives you the option to install via the Podfile or Xcode. - - ![Fabric Installation Options](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-pod-installation-option.png) - -1. Select the Podfile option and follow the installation instructions to update your Podfile. **Note:** the Crashlytics Pod includes Answers. If you have Answers included as a separate Pod it should be removed from your Podfile to avoid duplicate symbol errors. - - ``` - pod 'Fabric' - pod 'Crashlytics' - ``` - -1. Run `pod install` - -1. Add a Run Script Build Phase and build your app. - - ![Fabric Run Script Build Phase](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-rsbp.png) - -1. Initialize the SDK by inserting code outlined in the Fabric.app. - -1. Run your app to finish the installation. - -## Resources - -* [Documentation](https://docs.fabric.io/apple/crashlytics/overview.html) -* [Forums](https://stackoverflow.com/questions/tagged/google-fabric) -* [Website](http://try.crashlytics.com/) -* Follow us on Twitter: [@fabric](https://twitter.com/fabric) and [@crashlytics](https://twitter.com/crashlytics) diff --git a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics b/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics deleted file mode 100755 index 887ea76a..00000000 Binary files a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics and /dev/null differ diff --git a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/ANSCompatibility.h b/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/ANSCompatibility.h deleted file mode 100644 index 6ec011d9..00000000 --- a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/ANSCompatibility.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// ANSCompatibility.h -// AnswersKit -// -// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. -// - -#pragma once - -#if !__has_feature(nullability) -#define nonnull -#define nullable -#define _Nullable -#define _Nonnull -#endif - -#ifndef NS_ASSUME_NONNULL_BEGIN -#define NS_ASSUME_NONNULL_BEGIN -#endif - -#ifndef NS_ASSUME_NONNULL_END -#define NS_ASSUME_NONNULL_END -#endif - -#if __has_feature(objc_generics) -#define ANS_GENERIC_NSARRAY(type) NSArray -#define ANS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary -#else -#define ANS_GENERIC_NSARRAY(type) NSArray -#define ANS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary -#endif diff --git a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Answers.h b/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Answers.h deleted file mode 100644 index 8deacbee..00000000 --- a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Answers.h +++ /dev/null @@ -1,210 +0,0 @@ -// -// Answers.h -// Crashlytics -// -// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. -// - -#import -#import "ANSCompatibility.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - * This class exposes the Answers Events API, allowing you to track key - * user user actions and metrics in your app. - */ -@interface Answers : NSObject - -/** - * Log a Sign Up event to see users signing up for your app in real-time, understand how - * many users are signing up with different methods and their success rate signing up. - * - * @param signUpMethodOrNil The method by which a user logged in, e.g. Twitter or Digits. - * @param signUpSucceededOrNil The ultimate success or failure of the login - * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. - */ -+ (void)logSignUpWithMethod:(nullable NSString *)signUpMethodOrNil - success:(nullable NSNumber *)signUpSucceededOrNil - customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; - -/** - * Log an Log In event to see users logging into your app in real-time, understand how many - * users are logging in with different methods and their success rate logging into your app. - * - * @param loginMethodOrNil The method by which a user logged in, e.g. email, Twitter or Digits. - * @param loginSucceededOrNil The ultimate success or failure of the login - * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. - */ -+ (void)logLoginWithMethod:(nullable NSString *)loginMethodOrNil - success:(nullable NSNumber *)loginSucceededOrNil - customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; - -/** - * Log a Share event to see users sharing from your app in real-time, letting you - * understand what content they're sharing from the type or genre down to the specific id. - * - * @param shareMethodOrNil The method by which a user shared, e.g. email, Twitter, SMS. - * @param contentNameOrNil The human readable name for this piece of content. - * @param contentTypeOrNil The type of content shared. - * @param contentIdOrNil The unique identifier for this piece of content. Useful for finding the top shared item. - * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. - */ -+ (void)logShareWithMethod:(nullable NSString *)shareMethodOrNil - contentName:(nullable NSString *)contentNameOrNil - contentType:(nullable NSString *)contentTypeOrNil - contentId:(nullable NSString *)contentIdOrNil - customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; - -/** - * Log an Invite Event to track how users are inviting other users into - * your application. - * - * @param inviteMethodOrNil The method of invitation, e.g. GameCenter, Twitter, email. - * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. - */ -+ (void)logInviteWithMethod:(nullable NSString *)inviteMethodOrNil - customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; - -/** - * Log a Purchase event to see your revenue in real-time, understand how many users are making purchases, see which - * items are most popular, and track plenty of other important purchase-related metrics. - * - * @param itemPriceOrNil The purchased item's price. - * @param currencyOrNil The ISO4217 currency code. Example: USD - * @param purchaseSucceededOrNil Was the purchase successful or unsuccessful - * @param itemNameOrNil The human-readable form of the item's name. Example: - * @param itemTypeOrNil The type, or genre of the item. Example: Song - * @param itemIdOrNil The machine-readable, unique item identifier Example: SKU - * @param customAttributesOrNil A dictionary of custom attributes to associate with this purchase. - */ -+ (void)logPurchaseWithPrice:(nullable NSDecimalNumber *)itemPriceOrNil - currency:(nullable NSString *)currencyOrNil - success:(nullable NSNumber *)purchaseSucceededOrNil - itemName:(nullable NSString *)itemNameOrNil - itemType:(nullable NSString *)itemTypeOrNil - itemId:(nullable NSString *)itemIdOrNil - customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; - -/** - * Log a Level Start Event to track where users are in your game. - * - * @param levelNameOrNil The level name - * @param customAttributesOrNil A dictionary of custom attributes to associate with this level start event. - */ -+ (void)logLevelStart:(nullable NSString *)levelNameOrNil - customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; - -/** - * Log a Level End event to track how users are completing levels in your game. - * - * @param levelNameOrNil The name of the level completed, E.G. "1" or "Training" - * @param scoreOrNil The score the user completed the level with. - * @param levelCompletedSuccesfullyOrNil A boolean representing whether or not the level was completed successfully. - * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. - */ -+ (void)logLevelEnd:(nullable NSString *)levelNameOrNil - score:(nullable NSNumber *)scoreOrNil - success:(nullable NSNumber *)levelCompletedSuccesfullyOrNil - customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; - -/** - * Log an Add to Cart event to see users adding items to a shopping cart in real-time, understand how - * many users start the purchase flow, see which items are most popular, and track plenty of other important - * purchase-related metrics. - * - * @param itemPriceOrNil The purchased item's price. - * @param currencyOrNil The ISO4217 currency code. Example: USD - * @param itemNameOrNil The human-readable form of the item's name. Example: - * @param itemTypeOrNil The type, or genre of the item. Example: Song - * @param itemIdOrNil The machine-readable, unique item identifier Example: SKU - * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. - */ -+ (void)logAddToCartWithPrice:(nullable NSDecimalNumber *)itemPriceOrNil - currency:(nullable NSString *)currencyOrNil - itemName:(nullable NSString *)itemNameOrNil - itemType:(nullable NSString *)itemTypeOrNil - itemId:(nullable NSString *)itemIdOrNil - customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; - -/** - * Log a Start Checkout event to see users moving through the purchase funnel in real-time, understand how many - * users are doing this and how much they're spending per checkout, and see how it related to other important - * purchase-related metrics. - * - * @param totalPriceOrNil The total price of the cart. - * @param currencyOrNil The ISO4217 currency code. Example: USD - * @param itemCountOrNil The number of items in the cart. - * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. - */ -+ (void)logStartCheckoutWithPrice:(nullable NSDecimalNumber *)totalPriceOrNil - currency:(nullable NSString *)currencyOrNil - itemCount:(nullable NSNumber *)itemCountOrNil - customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; - -/** - * Log a Rating event to see users rating content within your app in real-time and understand what - * content is most engaging, from the type or genre down to the specific id. - * - * @param ratingOrNil The integer rating given by the user. - * @param contentNameOrNil The human readable name for this piece of content. - * @param contentTypeOrNil The type of content shared. - * @param contentIdOrNil The unique identifier for this piece of content. Useful for finding the top shared item. - * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. - */ -+ (void)logRating:(nullable NSNumber *)ratingOrNil - contentName:(nullable NSString *)contentNameOrNil - contentType:(nullable NSString *)contentTypeOrNil - contentId:(nullable NSString *)contentIdOrNil - customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; - -/** - * Log a Content View event to see users viewing content within your app in real-time and - * understand what content is most engaging, from the type or genre down to the specific id. - * - * @param contentNameOrNil The human readable name for this piece of content. - * @param contentTypeOrNil The type of content shared. - * @param contentIdOrNil The unique identifier for this piece of content. Useful for finding the top shared item. - * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. - */ -+ (void)logContentViewWithName:(nullable NSString *)contentNameOrNil - contentType:(nullable NSString *)contentTypeOrNil - contentId:(nullable NSString *)contentIdOrNil - customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; - -/** - * Log a Search event allows you to see users searching within your app in real-time and understand - * exactly what they're searching for. - * - * @param queryOrNil The user's query. - * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. - */ -+ (void)logSearchWithQuery:(nullable NSString *)queryOrNil - customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; - -/** - * Log a Custom Event to see user actions that are uniquely important for your app in real-time, to see how often - * they're performing these actions with breakdowns by different categories you add. Use a human-readable name for - * the name of the event, since this is how the event will appear in Answers. - * - * @param eventName The human-readable name for the event. - * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. Attribute keys - * must be NSString and values must be NSNumber or NSString. - * @discussion How we treat NSNumbers: - * We will provide information about the distribution of values over time. - * - * How we treat NSStrings: - * NSStrings are used as categorical data, allowing comparison across different category values. - * Strings are limited to a maximum length of 100 characters, attributes over this length will be - * truncated. - * - * When tracking the Tweet views to better understand user engagement, sending the tweet's length - * and the type of media present in the tweet allows you to track how tweet length and the type of media influence - * engagement. - */ -+ (void)logCustomEventWithName:(NSString *)eventName - customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSAttributes.h b/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSAttributes.h deleted file mode 100644 index 1526b0dc..00000000 --- a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSAttributes.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// CLSAttributes.h -// Crashlytics -// -// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. -// - -#pragma once - -#define CLS_DEPRECATED(x) __attribute__ ((deprecated(x))) - -#if !__has_feature(nullability) - #define nonnull - #define nullable - #define _Nullable - #define _Nonnull -#endif - -#ifndef NS_ASSUME_NONNULL_BEGIN - #define NS_ASSUME_NONNULL_BEGIN -#endif - -#ifndef NS_ASSUME_NONNULL_END - #define NS_ASSUME_NONNULL_END -#endif - -#if __has_feature(objc_generics) - #define CLS_GENERIC_NSARRAY(type) NSArray - #define CLS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary -#else - #define CLS_GENERIC_NSARRAY(type) NSArray - #define CLS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary -#endif diff --git a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSLogging.h b/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSLogging.h deleted file mode 100644 index 59590d54..00000000 --- a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSLogging.h +++ /dev/null @@ -1,64 +0,0 @@ -// -// CLSLogging.h -// Crashlytics -// -// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. -// -#ifdef __OBJC__ -#import "CLSAttributes.h" -#import - -NS_ASSUME_NONNULL_BEGIN -#endif - - - -/** - * - * The CLS_LOG macro provides as easy way to gather more information in your log messages that are - * sent with your crash data. CLS_LOG prepends your custom log message with the function name and - * line number where the macro was used. If your app was built with the DEBUG preprocessor macro - * defined CLS_LOG uses the CLSNSLog function which forwards your log message to NSLog and CLSLog. - * If the DEBUG preprocessor macro is not defined CLS_LOG uses CLSLog only. - * - * Example output: - * -[AppDelegate login:] line 134 $ login start - * - * If you would like to change this macro, create a new header file, unset our define and then define - * your own version. Make sure this new header file is imported after the Crashlytics header file. - * - * #undef CLS_LOG - * #define CLS_LOG(__FORMAT__, ...) CLSNSLog... - * - **/ -#ifdef __OBJC__ -#ifdef DEBUG -#define CLS_LOG(__FORMAT__, ...) CLSNSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) -#else -#define CLS_LOG(__FORMAT__, ...) CLSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) -#endif -#endif - -/** - * - * Add logging that will be sent with your crash data. This logging will not show up in the system.log - * and will only be visible in your Crashlytics dashboard. - * - **/ - -#ifdef __OBJC__ -OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2); -OBJC_EXTERN void CLSLogv(NSString *format, va_list ap) NS_FORMAT_FUNCTION(1,0); - -/** - * - * Add logging that will be sent with your crash data. This logging will show up in the system.log - * and your Crashlytics dashboard. It is not recommended for Release builds. - * - **/ -OBJC_EXTERN void CLSNSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2); -OBJC_EXTERN void CLSNSLogv(NSString *format, va_list ap) NS_FORMAT_FUNCTION(1,0); - - -NS_ASSUME_NONNULL_END -#endif diff --git a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSReport.h b/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSReport.h deleted file mode 100644 index a8ff3b0b..00000000 --- a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSReport.h +++ /dev/null @@ -1,103 +0,0 @@ -// -// CLSReport.h -// Crashlytics -// -// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. -// - -#import -#import "CLSAttributes.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - * The CLSCrashReport protocol is deprecated. See the CLSReport class and the CrashyticsDelegate changes for details. - **/ -@protocol CLSCrashReport - -@property (nonatomic, copy, readonly) NSString *identifier; -@property (nonatomic, copy, readonly) NSDictionary *customKeys; -@property (nonatomic, copy, readonly) NSString *bundleVersion; -@property (nonatomic, copy, readonly) NSString *bundleShortVersionString; -@property (nonatomic, readonly, nullable) NSDate *crashedOnDate; -@property (nonatomic, copy, readonly) NSString *OSVersion; -@property (nonatomic, copy, readonly) NSString *OSBuildVersion; - -@end - -/** - * The CLSReport exposes an interface to the phsyical report that Crashlytics has created. You can - * use this class to get information about the event, and can also set some values after the - * event has occurred. - **/ -@interface CLSReport : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - * Returns the session identifier for the report. - **/ -@property (nonatomic, copy, readonly) NSString *identifier; - -/** - * Returns the custom key value data for the report. - **/ -@property (nonatomic, copy, readonly) NSDictionary *customKeys; - -/** - * Returns the CFBundleVersion of the application that generated the report. - **/ -@property (nonatomic, copy, readonly) NSString *bundleVersion; - -/** - * Returns the CFBundleShortVersionString of the application that generated the report. - **/ -@property (nonatomic, copy, readonly) NSString *bundleShortVersionString; - -/** - * Returns the date that the report was created. - **/ -@property (nonatomic, copy, readonly) NSDate *dateCreated; - -/** - * Returns the os version that the application crashed on. - **/ -@property (nonatomic, copy, readonly) NSString *OSVersion; - -/** - * Returns the os build version that the application crashed on. - **/ -@property (nonatomic, copy, readonly) NSString *OSBuildVersion; - -/** - * Returns YES if the report contains any crash information, otherwise returns NO. - **/ -@property (nonatomic, assign, readonly) BOOL isCrash; - -/** - * You can use this method to set, after the event, additional custom keys. The rules - * and semantics for this method are the same as those documented in Crashlytics.h. Be aware - * that the maximum size and count of custom keys is still enforced, and you can overwrite keys - * and/or cause excess keys to be deleted by using this method. - **/ -- (void)setObjectValue:(nullable id)value forKey:(NSString *)key; - -/** - * Record an application-specific user identifier. See Crashlytics.h for details. - **/ -@property (nonatomic, copy, nullable) NSString * userIdentifier; - -/** - * Record a user name. See Crashlytics.h for details. - **/ -@property (nonatomic, copy, nullable) NSString * userName; - -/** - * Record a user email. See Crashlytics.h for details. - **/ -@property (nonatomic, copy, nullable) NSString * userEmail; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSStackFrame.h b/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSStackFrame.h deleted file mode 100644 index cdb5596c..00000000 --- a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSStackFrame.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// CLSStackFrame.h -// Crashlytics -// -// Copyright 2015 Crashlytics, Inc. All rights reserved. -// - -#import -#import "CLSAttributes.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - * - * This class is used in conjunction with -[Crashlytics recordCustomExceptionName:reason:frameArray:] to - * record information about non-ObjC/C++ exceptions. All information included here will be displayed - * in the Crashlytics UI, and can influence crash grouping. Be particularly careful with the use of the - * address property. If set, Crashlytics will attempt symbolication and could overwrite other properities - * in the process. - * - **/ -@interface CLSStackFrame : NSObject - -+ (instancetype)stackFrame; -+ (instancetype)stackFrameWithAddress:(NSUInteger)address; -+ (instancetype)stackFrameWithSymbol:(NSString *)symbol; - -@property (nonatomic, copy, nullable) NSString *symbol; -@property (nonatomic, copy, nullable) NSString *rawSymbol; -@property (nonatomic, copy, nullable) NSString *library; -@property (nonatomic, copy, nullable) NSString *fileName; -@property (nonatomic, assign) uint32_t lineNumber; -@property (nonatomic, assign) uint64_t offset; -@property (nonatomic, assign) uint64_t address; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Crashlytics.h b/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Crashlytics.h deleted file mode 100644 index 7104ca81..00000000 --- a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Crashlytics.h +++ /dev/null @@ -1,288 +0,0 @@ -// -// Crashlytics.h -// Crashlytics -// -// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. -// - -#import - -#import "CLSAttributes.h" -#import "CLSLogging.h" -#import "CLSReport.h" -#import "CLSStackFrame.h" -#import "Answers.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol CrashlyticsDelegate; - -/** - * Crashlytics. Handles configuration and initialization of Crashlytics. - * - * Note: The Crashlytics class cannot be subclassed. If this is causing you pain for - * testing, we suggest using either a wrapper class or a protocol extension. - */ -@interface Crashlytics : NSObject - -@property (nonatomic, readonly, copy) NSString *APIKey; -@property (nonatomic, readonly, copy) NSString *version; -@property (nonatomic, assign) BOOL debugMode; - -/** - * - * The delegate can be used to influence decisions on reporting and behavior, as well as reacting - * to previous crashes. - * - * Make certain that the delegate is setup before starting Crashlytics with startWithAPIKey:... or - * via +[Fabric with:...]. Failure to do will result in missing any delegate callbacks that occur - * synchronously during start. - * - **/ -@property (nonatomic, assign, nullable) id delegate; - -/** - * The recommended way to install Crashlytics into your application is to place a call to +startWithAPIKey: - * in your -application:didFinishLaunchingWithOptions: or -applicationDidFinishLaunching: - * method. - * - * Note: Starting with 3.0, the submission process has been significantly improved. The delay parameter - * is no longer required to throttle submissions on launch, performance will be great without it. - * - * @param apiKey The Crashlytics API Key for this app - * - * @return The singleton Crashlytics instance - */ -+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey; -+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey afterDelay:(NSTimeInterval)delay CLS_DEPRECATED("Crashlytics no longer needs or uses the delay parameter. Please use +startWithAPIKey: instead."); - -/** - * If you need the functionality provided by the CrashlyticsDelegate protocol, you can use - * these convenience methods to activate the framework and set the delegate in one call. - * - * @param apiKey The Crashlytics API Key for this app - * @param delegate A delegate object which conforms to CrashlyticsDelegate. - * - * @return The singleton Crashlytics instance - */ -+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(nullable id)delegate; -+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(nullable id)delegate afterDelay:(NSTimeInterval)delay CLS_DEPRECATED("Crashlytics no longer needs or uses the delay parameter. Please use +startWithAPIKey:delegate: instead."); - -/** - * Access the singleton Crashlytics instance. - * - * @return The singleton Crashlytics instance - */ -+ (Crashlytics *)sharedInstance; - -/** - * The easiest way to cause a crash - great for testing! - */ -- (void)crash; - -/** - * The easiest way to cause a crash with an exception - great for testing. - */ -- (void)throwException; - -/** - * Specify a user identifier which will be visible in the Crashlytics UI. - * - * Many of our customers have requested the ability to tie crashes to specific end-users of their - * application in order to facilitate responses to support requests or permit the ability to reach - * out for more information. We allow you to specify up to three separate values for display within - * the Crashlytics UI - but please be mindful of your end-user's privacy. - * - * We recommend specifying a user identifier - an arbitrary string that ties an end-user to a record - * in your system. This could be a database id, hash, or other value that is meaningless to a - * third-party observer but can be indexed and queried by you. - * - * Optionally, you may also specify the end-user's name or username, as well as email address if you - * do not have a system that works well with obscured identifiers. - * - * Pursuant to our EULA, this data is transferred securely throughout our system and we will not - * disseminate end-user data unless required to by law. That said, if you choose to provide end-user - * contact information, we strongly recommend that you disclose this in your application's privacy - * policy. Data privacy is of our utmost concern. - * - * @param identifier An arbitrary user identifier string which ties an end-user to a record in your system. - */ -- (void)setUserIdentifier:(nullable NSString *)identifier; - -/** - * Specify a user name which will be visible in the Crashlytics UI. - * Please be mindful of your end-user's privacy and see if setUserIdentifier: can fulfil your needs. - * @see setUserIdentifier: - * - * @param name An end user's name. - */ -- (void)setUserName:(nullable NSString *)name; - -/** - * Specify a user email which will be visible in the Crashlytics UI. - * Please be mindful of your end-user's privacy and see if setUserIdentifier: can fulfil your needs. - * - * @see setUserIdentifier: - * - * @param email An end user's email address. - */ -- (void)setUserEmail:(nullable NSString *)email; - -+ (void)setUserIdentifier:(nullable NSString *)identifier CLS_DEPRECATED("Please access this method via +sharedInstance"); -+ (void)setUserName:(nullable NSString *)name CLS_DEPRECATED("Please access this method via +sharedInstance"); -+ (void)setUserEmail:(nullable NSString *)email CLS_DEPRECATED("Please access this method via +sharedInstance"); - -/** - * Set a value for a for a key to be associated with your crash data which will be visible in the Crashlytics UI. - * When setting an object value, the object is converted to a string. This is typically done by calling - * -[NSObject description]. - * - * @param value The object to be associated with the key - * @param key The key with which to associate the value - */ -- (void)setObjectValue:(nullable id)value forKey:(NSString *)key; - -/** - * Set an int value for a key to be associated with your crash data which will be visible in the Crashlytics UI. - * - * @param value The integer value to be set - * @param key The key with which to associate the value - */ -- (void)setIntValue:(int)value forKey:(NSString *)key; - -/** - * Set an BOOL value for a key to be associated with your crash data which will be visible in the Crashlytics UI. - * - * @param value The BOOL value to be set - * @param key The key with which to associate the value - */ -- (void)setBoolValue:(BOOL)value forKey:(NSString *)key; - -/** - * Set an float value for a key to be associated with your crash data which will be visible in the Crashlytics UI. - * - * @param value The float value to be set - * @param key The key with which to associate the value - */ -- (void)setFloatValue:(float)value forKey:(NSString *)key; - -+ (void)setObjectValue:(nullable id)value forKey:(NSString *)key CLS_DEPRECATED("Please access this method via +sharedInstance"); -+ (void)setIntValue:(int)value forKey:(NSString *)key CLS_DEPRECATED("Please access this method via +sharedInstance"); -+ (void)setBoolValue:(BOOL)value forKey:(NSString *)key CLS_DEPRECATED("Please access this method via +sharedInstance"); -+ (void)setFloatValue:(float)value forKey:(NSString *)key CLS_DEPRECATED("Please access this method via +sharedInstance"); - -/** - * This method can be used to record a single exception structure in a report. This is particularly useful - * when your code interacts with non-native languages like Lua, C#, or Javascript. This call can be - * expensive and should only be used shortly before process termination. This API is not intended be to used - * to log NSException objects. All safely-reportable NSExceptions are automatically captured by - * Crashlytics. - * - * @param name The name of the custom exception - * @param reason The reason this exception occurred - * @param frameArray An array of CLSStackFrame objects - */ -- (void)recordCustomExceptionName:(NSString *)name reason:(nullable NSString *)reason frameArray:(CLS_GENERIC_NSARRAY(CLSStackFrame *) *)frameArray; - -/** - * - * This allows you to record a non-fatal event, described by an NSError object. These events will be grouped and - * displayed similarly to crashes. Keep in mind that this method can be expensive. Also, the total number of - * NSErrors that can be recorded during your app's life-cycle is limited by a fixed-size circular buffer. If the - * buffer is overrun, the oldest data is dropped. Errors are relayed to Crashlytics on a subsequent launch - * of your application. - * - * You can also use the -recordError:withAdditionalUserInfo: to include additional context not represented - * by the NSError instance itself. - * - **/ -- (void)recordError:(NSError *)error; -- (void)recordError:(NSError *)error withAdditionalUserInfo:(nullable CLS_GENERIC_NSDICTIONARY(NSString *, id) *)userInfo; - -- (void)logEvent:(NSString *)eventName CLS_DEPRECATED("Please refer to Answers +logCustomEventWithName:"); -- (void)logEvent:(NSString *)eventName attributes:(nullable NSDictionary *) attributes CLS_DEPRECATED("Please refer to Answers +logCustomEventWithName:"); -+ (void)logEvent:(NSString *)eventName CLS_DEPRECATED("Please refer to Answers +logCustomEventWithName:"); -+ (void)logEvent:(NSString *)eventName attributes:(nullable NSDictionary *) attributes CLS_DEPRECATED("Please refer to Answers +logCustomEventWithName:"); - -@end - -/** - * - * The CrashlyticsDelegate protocol provides a mechanism for your application to take - * action on events that occur in the Crashlytics crash reporting system. You can make - * use of these calls by assigning an object to the Crashlytics' delegate property directly, - * or through the convenience +startWithAPIKey:delegate: method. - * - */ -@protocol CrashlyticsDelegate -@optional - - -- (void)crashlyticsDidDetectCrashDuringPreviousExecution:(Crashlytics *)crashlytics CLS_DEPRECATED("Please refer to -crashlyticsDidDetectReportForLastExecution:"); -- (void)crashlytics:(Crashlytics *)crashlytics didDetectCrashDuringPreviousExecution:(id )crash CLS_DEPRECATED("Please refer to -crashlyticsDidDetectReportForLastExecution:"); - -/** - * - * Called when a Crashlytics instance has determined that the last execution of the - * application resulted in a saved report. This is called synchronously on Crashlytics - * initialization. Your delegate must invoke the completionHandler, but does not need to do so - * synchronously, or even on the main thread. Invoking completionHandler with NO will cause the - * detected report to be deleted and not submitted to Crashlytics. This is useful for - * implementing permission prompts, or other more-complex forms of logic around submitting crashes. - * - * Instead of using this method, you should try to make use of -crashlyticsDidDetectReportForLastExecution: - * if you can. - * - * @warning Failure to invoke the completionHandler will prevent submissions from being reported. Watch out. - * - * @warning Just implementing this delegate method will disable all forms of synchronous report submission. This can - * impact the reliability of reporting crashes very early in application launch. - * - * @param report The CLSReport object representing the last detected report - * @param completionHandler The completion handler to call when your logic has completed. - * - */ -- (void)crashlyticsDidDetectReportForLastExecution:(CLSReport *)report completionHandler:(void (^)(BOOL submit))completionHandler; - -/** - * - * Called when a Crashlytics instance has determined that the last execution of the - * application resulted in a saved report. This method differs from - * -crashlyticsDidDetectReportForLastExecution:completionHandler: in three important ways: - * - * - it is not called synchronously during initialization - * - it does not give you the ability to prevent the report from being submitted - * - the report object itself is immutable - * - * Thanks to these limitations, making use of this method does not impact reporting - * reliabilty in any way. - * - * @param report The read-only CLSReport object representing the last detected report - * - */ - -- (void)crashlyticsDidDetectReportForLastExecution:(CLSReport *)report; - -/** - * If your app is running on an OS that supports it (OS X 10.9+, iOS 7.0+), Crashlytics will submit - * most reports using out-of-process background networking operations. This results in a significant - * improvement in reliability of reporting, as well as power and performance wins for your users. - * If you don't want this functionality, you can disable by returning NO from this method. - * - * @warning Background submission is not supported for extensions on iOS or OS X. - * - * @param crashlytics The Crashlytics singleton instance - * - * @return Return NO if you don't want out-of-process background network operations. - * - */ -- (BOOL)crashlyticsCanUseBackgroundSessions:(Crashlytics *)crashlytics; - -@end - -/** - * `CrashlyticsKit` can be used as a parameter to `[Fabric with:@[CrashlyticsKit]];` in Objective-C. In Swift, use Crashlytics.sharedInstance() - */ -#define CrashlyticsKit [Crashlytics sharedInstance] - -NS_ASSUME_NONNULL_END diff --git a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist b/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist deleted file mode 100644 index 1d568961..00000000 Binary files a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist and /dev/null differ diff --git a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Modules/module.modulemap b/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Modules/module.modulemap deleted file mode 100644 index da0845e3..00000000 --- a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/Modules/module.modulemap +++ /dev/null @@ -1,14 +0,0 @@ -framework module Crashlytics { - header "Crashlytics.h" - header "Answers.h" - header "ANSCompatibility.h" - header "CLSLogging.h" - header "CLSReport.h" - header "CLSStackFrame.h" - header "CLSAttributes.h" - - export * - - link "z" - link "c++" -} diff --git a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/run b/Example/Pods/Crashlytics/iOS/Crashlytics.framework/run deleted file mode 100755 index 9058ea62..00000000 --- a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/run +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -# run -# -# Copyright (c) 2015 Crashlytics. All rights reserved. - -# Figure out where we're being called from -DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) - -# Quote path in case of spaces or special chars -DIR="\"${DIR}" - -PATH_SEP="/" -VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script" -UPLOAD_COMMAND="uploadDSYM\" $@ run-script" - -# Ensure params are as expected, run in sync mode to validate -eval $DIR$PATH_SEP$VALIDATE_COMMAND -return_code=$? - -if [[ $return_code != 0 ]]; then - exit $return_code -fi - -# Verification passed, upload dSYM in background to prevent Xcode from waiting -# Note: Validation is performed again before upload. -# Output can still be found in Console.app -eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 & diff --git a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/submit b/Example/Pods/Crashlytics/iOS/Crashlytics.framework/submit deleted file mode 100755 index 42e72311..00000000 Binary files a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/submit and /dev/null differ diff --git a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM b/Example/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM deleted file mode 100755 index e584ac2b..00000000 Binary files a/Example/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM and /dev/null differ diff --git a/Example/Pods/Crashlytics/submit b/Example/Pods/Crashlytics/submit deleted file mode 100755 index 42e72311..00000000 Binary files a/Example/Pods/Crashlytics/submit and /dev/null differ diff --git a/Example/Pods/Fabric/Fabric.framework/README b/Example/Pods/Fabric/Fabric.framework/README deleted file mode 100644 index 3b1fbe24..00000000 --- a/Example/Pods/Fabric/Fabric.framework/README +++ /dev/null @@ -1 +0,0 @@ -We've now combined all our supported platforms into a single podspec. As a result, we moved our run script to a new location for Cocoapods projects: ${PODS_ROOT}/Fabric/run. To avoid breaking builds that reference the old location of the run script, we've placed this dummy script that calls to the correct location, while providing a helpful warning in Xcode if it is invoked. This bridge for backwards compatibility will be removed in a future release, so please heed the warning! diff --git a/Example/Pods/Fabric/Fabric.framework/run b/Example/Pods/Fabric/Fabric.framework/run deleted file mode 100755 index b9edd17f..00000000 --- a/Example/Pods/Fabric/Fabric.framework/run +++ /dev/null @@ -1,6 +0,0 @@ -if [[ -z $PODS_ROOT ]]; then - echo "error: The run binary delivered by cocoapods is in a new location, under '$"{"PODS_ROOT"}"/Fabric/run'. This script was put in place for backwards compatibility, but it relies on PODS_ROOT, which does not have a value in your current setup. Please update the path to the run binary to fix this issue." -else - echo "warning: The run script is now located at '$"{"PODS_ROOT"}"/Fabric/run'. To remove this warning, update your Run Script Build Phase to point to this new location." - sh "${PODS_ROOT}/Fabric/run" "$@" -fi diff --git a/Example/Pods/Fabric/README.md b/Example/Pods/Fabric/README.md deleted file mode 100644 index 9eca6105..00000000 --- a/Example/Pods/Fabric/README.md +++ /dev/null @@ -1,42 +0,0 @@ -![Fabric Header](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-fabric-header.png) - -# Fabric - -## Overview - -[Fabric](https://get.fabric.io) provides developers with the tools they need to build the best apps. Developed and maintained by Google and the team that built Crashlytics, Fabric provides an easy way to manage all your SDKs so that you’ll never have to worry about tedious configurations or juggling different accounts. We let you get right into coding and building the next big app. - -For a full list of SDK provided through Fabric visit [https://fabric.io/kits](https://fabric.io/kits). - -## Setup - -The Fabric Pod is a dependency for all Fabric SDKs and is included when installing any Fabric related Pods. General setup instructions are shown below; however, these vary depending on the selected SDK. - -1. Visit [https://fabric.io/sign_up](https://fabric.io/sign_up) to create your Fabric account and to download Fabric.app. - -1. Open Fabric.app, login and select an SDK to install. - - ![Fabric Plugin](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-fabric-plugin.png) - -1. The Fabric app automatically detects when a project uses CocoaPods and gives you the option to install via the Podfile or Xcode. - - ![Fabric Installation Options](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-pod-installation-option.png) - -1. Select the Podfile option and follow the installation instructions to update your Podfile. Note: the example below is for the Crashlytics SDK. The instructions will vary based on the selected SDK. - - ![Fabric Podfile Instructions](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-podfile-instructions.png) - -1. Add a Run Script Build Phase and build your app. - - ![Fabric Run Script Build Phase](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-rsbp.png) - -1. Initialize the SDK by inserting code outlined in Fabric.app. - -1. Run your app to finish the installation. - -## Resources - -* [Documentation](https://docs.fabric.io/) -* [Forums](https://stackoverflow.com/questions/tagged/google-fabric) -* [Website](https://get.fabric.io) -* Follow us on Twitter: [@fabric](https://twitter.com/fabric) diff --git a/Example/Pods/Fabric/iOS/Fabric.framework/Fabric b/Example/Pods/Fabric/iOS/Fabric.framework/Fabric deleted file mode 100755 index 5ac78486..00000000 Binary files a/Example/Pods/Fabric/iOS/Fabric.framework/Fabric and /dev/null differ diff --git a/Example/Pods/Fabric/iOS/Fabric.framework/Headers/FABAttributes.h b/Example/Pods/Fabric/iOS/Fabric.framework/Headers/FABAttributes.h deleted file mode 100644 index 3a9355a7..00000000 --- a/Example/Pods/Fabric/iOS/Fabric.framework/Headers/FABAttributes.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// FABAttributes.h -// Fabric -// -// Copyright (C) 2015 Twitter, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#pragma once - -#define FAB_UNAVAILABLE(x) __attribute__((unavailable(x))) - -#if !__has_feature(nullability) - #define nonnull - #define nullable - #define _Nullable - #define _Nonnull -#endif - -#ifndef NS_ASSUME_NONNULL_BEGIN - #define NS_ASSUME_NONNULL_BEGIN -#endif - -#ifndef NS_ASSUME_NONNULL_END - #define NS_ASSUME_NONNULL_END -#endif - - -/** - * The following macros are defined here to provide - * backwards compatability. If you are still using - * them you should migrate to the native nullability - * macros. - */ -#define fab_nullable nullable -#define fab_nonnull nonnull -#define FAB_NONNULL __fab_nonnull -#define FAB_NULLABLE __fab_nullable -#define FAB_START_NONNULL NS_ASSUME_NONNULL_BEGIN -#define FAB_END_NONNULL NS_ASSUME_NONNULL_END diff --git a/Example/Pods/Fabric/iOS/Fabric.framework/Headers/Fabric.h b/Example/Pods/Fabric/iOS/Fabric.framework/Headers/Fabric.h deleted file mode 100644 index ecbdb53b..00000000 --- a/Example/Pods/Fabric/iOS/Fabric.framework/Headers/Fabric.h +++ /dev/null @@ -1,82 +0,0 @@ -// -// Fabric.h -// Fabric -// -// Copyright (C) 2015 Twitter, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import "FABAttributes.h" - -NS_ASSUME_NONNULL_BEGIN - -#if TARGET_OS_IPHONE -#if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000 - #error "Fabric's minimum iOS version is 6.0" -#endif -#else -#if __MAC_OS_X_VERSION_MIN_REQUIRED < 1070 - #error "Fabric's minimum OS X version is 10.7" -#endif -#endif - -/** - * Fabric Base. Coordinates configuration and starts all provided kits. - */ -@interface Fabric : NSObject - -/** - * Initialize Fabric and all provided kits. Call this method within your App Delegate's `application:didFinishLaunchingWithOptions:` and provide the kits you wish to use. - * - * For example, in Objective-C: - * - * `[Fabric with:@[[Crashlytics class], [Twitter class], [Digits class], [MoPub class]]];` - * - * Swift: - * - * `Fabric.with([Crashlytics.self(), Twitter.self(), Digits.self(), MoPub.self()])` - * - * Only the first call to this method is honored. Subsequent calls are no-ops. - * - * @param kitClasses An array of kit Class objects - * - * @return Returns the shared Fabric instance. In most cases this can be ignored. - */ -+ (instancetype)with:(NSArray *)kitClasses; - -/** - * Returns the Fabric singleton object. - */ -+ (instancetype)sharedSDK; - -/** - * This BOOL enables or disables debug logging, such as kit version information. The default value is NO. - */ -@property (nonatomic, assign) BOOL debug; - -/** - * Unavailable. Use `+sharedSDK` to retrieve the shared Fabric instance. - */ -- (id)init FAB_UNAVAILABLE("Use +sharedSDK to retrieve the shared Fabric instance."); - -/** - * Unavailable. Use `+sharedSDK` to retrieve the shared Fabric instance. - */ -+ (instancetype)new FAB_UNAVAILABLE("Use +sharedSDK to retrieve the shared Fabric instance."); - -@end - -NS_ASSUME_NONNULL_END - diff --git a/Example/Pods/Fabric/iOS/Fabric.framework/Info.plist b/Example/Pods/Fabric/iOS/Fabric.framework/Info.plist deleted file mode 100644 index a00e88db..00000000 Binary files a/Example/Pods/Fabric/iOS/Fabric.framework/Info.plist and /dev/null differ diff --git a/Example/Pods/Fabric/iOS/Fabric.framework/Modules/module.modulemap b/Example/Pods/Fabric/iOS/Fabric.framework/Modules/module.modulemap deleted file mode 100644 index 2a312239..00000000 --- a/Example/Pods/Fabric/iOS/Fabric.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Fabric { - umbrella header "Fabric.h" - - export * - module * { export * } -} \ No newline at end of file diff --git a/Example/Pods/Fabric/iOS/Fabric.framework/run b/Example/Pods/Fabric/iOS/Fabric.framework/run deleted file mode 100755 index 9058ea62..00000000 --- a/Example/Pods/Fabric/iOS/Fabric.framework/run +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -# run -# -# Copyright (c) 2015 Crashlytics. All rights reserved. - -# Figure out where we're being called from -DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) - -# Quote path in case of spaces or special chars -DIR="\"${DIR}" - -PATH_SEP="/" -VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script" -UPLOAD_COMMAND="uploadDSYM\" $@ run-script" - -# Ensure params are as expected, run in sync mode to validate -eval $DIR$PATH_SEP$VALIDATE_COMMAND -return_code=$? - -if [[ $return_code != 0 ]]; then - exit $return_code -fi - -# Verification passed, upload dSYM in background to prevent Xcode from waiting -# Note: Validation is performed again before upload. -# Output can still be found in Console.app -eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 & diff --git a/Example/Pods/Fabric/iOS/Fabric.framework/uploadDSYM b/Example/Pods/Fabric/iOS/Fabric.framework/uploadDSYM deleted file mode 100755 index 1581be8d..00000000 Binary files a/Example/Pods/Fabric/iOS/Fabric.framework/uploadDSYM and /dev/null differ diff --git a/Example/Pods/Fabric/run b/Example/Pods/Fabric/run deleted file mode 100755 index 9058ea62..00000000 --- a/Example/Pods/Fabric/run +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -# run -# -# Copyright (c) 2015 Crashlytics. All rights reserved. - -# Figure out where we're being called from -DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) - -# Quote path in case of spaces or special chars -DIR="\"${DIR}" - -PATH_SEP="/" -VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script" -UPLOAD_COMMAND="uploadDSYM\" $@ run-script" - -# Ensure params are as expected, run in sync mode to validate -eval $DIR$PATH_SEP$VALIDATE_COMMAND -return_code=$? - -if [[ $return_code != 0 ]]; then - exit $return_code -fi - -# Verification passed, upload dSYM in background to prevent Xcode from waiting -# Note: Validation is performed again before upload. -# Output can still be found in Console.app -eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 & diff --git a/Example/Pods/Fabric/upload-symbols b/Example/Pods/Fabric/upload-symbols deleted file mode 100755 index 2f0674f3..00000000 Binary files a/Example/Pods/Fabric/upload-symbols and /dev/null differ diff --git a/Example/Pods/Fabric/uploadDSYM b/Example/Pods/Fabric/uploadDSYM deleted file mode 100755 index 1581be8d..00000000 Binary files a/Example/Pods/Fabric/uploadDSYM and /dev/null differ diff --git a/Example/Pods/Local Podspecs/WebimClientLibrary.podspec.json b/Example/Pods/Local Podspecs/WebimClientLibrary.podspec.json deleted file mode 100644 index e6f92497..00000000 --- a/Example/Pods/Local Podspecs/WebimClientLibrary.podspec.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "WebimClientLibrary", - "version": "3.22.1", - "authors": { - "Webim.ru Ltd.": "n.lazarev-zubov@webim.ru" - }, - "homepage": "https://webim.ru/integration/mobile-sdk/ios-sdk-howto/", - "license": { - "type": "MIT", - "file": "LICENSE" - }, - "summary": "Webim.ru client SDK for iOS.", - "platforms": { - "ios": "8.0" - }, - "swift_version": "4.0", - "source": { - "git": "https://github.com/webim/webim-client-sdk-ios.git", - "tag": "3.22.1" - }, - "dependencies": { - "SQLite.swift": [ - - ] - }, - "frameworks": "Foundation", - "source_files": "WebimClientLibrary/**/*" -} diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock deleted file mode 100644 index 96f2f278..00000000 --- a/Example/Pods/Manifest.lock +++ /dev/null @@ -1,51 +0,0 @@ -PODS: - - Cosmos (16.0.0) - - Crashlytics (3.10.7): - - Fabric (~> 1.7.11) - - Fabric (1.7.11) - - PopupDialog (0.6.2) - - SlackTextViewController (1.9.6) - - SnapKit (4.0.0) - - SQLite.swift (0.11.5): - - SQLite.swift/standard (= 0.11.5) - - SQLite.swift/standard (0.11.5) - - WebimClientLibrary (3.22.1): - - SQLite.swift - -DEPENDENCIES: - - Cosmos - - Crashlytics - - Fabric - - PopupDialog (~> 0.6.2) - - SlackTextViewController - - SnapKit - - SQLite.swift - - WebimClientLibrary (from `../`) - -SPEC REPOS: - https://github.com/cocoapods/specs.git: - - Cosmos - - Crashlytics - - Fabric - - PopupDialog - - SlackTextViewController - - SnapKit - - SQLite.swift - -EXTERNAL SOURCES: - WebimClientLibrary: - :path: "../" - -SPEC CHECKSUMS: - Cosmos: 7bcee0fa858a9355a214f2a181be5dffcee42c81 - Crashlytics: ccaac42660eb9351b9960c0d66106b0bcf99f4fa - Fabric: f233c9492b3bbc1f04e3882986740f7988a58edb - PopupDialog: d4336d7274a6aa3af4cb26d8b6691510eba90cc3 - SlackTextViewController: b854e62c1c156336bc4fd409c6ca79b5773e8f9d - SnapKit: a42d492c16e80209130a3379f73596c3454b7694 - SQLite.swift: 6e5356850bb1791459f8c16d6ee9195b28714a2e - WebimClientLibrary: 15d8419d64556547ea93921089bf31f21e16c7bb - -PODFILE CHECKSUM: 3ae813f4c3db6d1830eddfcf1600cb0f21e44002 - -COCOAPODS: 1.5.3 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj deleted file mode 100644 index df8f83bc..00000000 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ /dev/null @@ -1,2613 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 007C6115B51A9D172CD57B019C72E082 /* Int.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C56EE14CECF6E9521747F534561174 /* Int.swift */; }; - 011B5EBEC92A00426E4E9F00579F363F /* MessageStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BE6492EF8EDB148139B49E96A365298 /* MessageStream.swift */; }; - 018861606C5CEF21D239837F8E555670 /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76B0F8B2A9EAF22095BFBEEF36FD2937 /* ConstraintPriority.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 02AB5C2F0881477406092C50B7CE2DA2 /* UIViewController+Visibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FA97BBF09804ACE1BCF879C7A92F76C /* UIViewController+Visibility.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0301A49FC6C52CCE51E6367605380D55 /* MessageFactories.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8B33DCE33106F90A30A3202BCCDA76 /* MessageFactories.swift */; }; - 05F6893B689CD4ED98CCB15EA8B84FCD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F76DC2C907652127B4034C23D0EBC722 /* Foundation.framework */; }; - 068A9C50AE475FD02D471404CE055571 /* SQLite.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB44F0C85553660857F351B59660E399 /* SQLite.framework */; }; - 06DE836C6DB8EEC80187CA213E0ED718 /* UIView+Animations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83519CCDAB486B59FE551AF5C1D1DD75 /* UIView+Animations.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 08798A7954C06DCE1B2444BF3B40A52F /* SLKTypingIndicatorView.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = C98470DA861742FA94D3E549FF68530A /* SLKTypingIndicatorView.h */; }; - 0C56B3650BF8C0456B98F4A56C77C45E /* UIScrollView+SLKAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 65C3FED974F91A0222043C47CFAF00B8 /* UIScrollView+SLKAdditions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0D51FDDA3F3842712EF75D1EF552F06A /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 862AC483DDA1ABA46DF332A2C1E7B123 /* ConstraintPriorityTarget.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0F95B13E5CB69AFD87A1FF2822A07FFD /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D3650CB77674EF197916E050A152E59 /* Helpers.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0FEF8025DB22C5AEBAFD7358E2493534 /* SQLiteHistoryStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5461A01E462C46F9BF155B773265EB47 /* SQLiteHistoryStorage.swift */; }; - 11C91D5038C126C1C8CA214C293A4134 /* FXBlurView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D3BDD6C00F7116CCFFA9867453B329F /* FXBlurView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 12225583A2162EAA0864C31ADC319B6D /* SLKTextView+SLKAdditions.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 2DBD18B64CC7D939ECB27D7784B39754 /* SLKTextView+SLKAdditions.h */; }; - 127AA70931D4914EE0B60BD7E932D6D9 /* PresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D63D3A5BBCD13F26961A54C552734BFB /* PresentationController.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1479F75F3D3A21DDF67996F80B1371D4 /* Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9A24F0FB73BA16952E0A2FD6AA94750 /* Foundation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 15C5DFB3AA2419728C4E5DEE6F155E9A /* ClientSideID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74245141AFF147861EEF0E6E4DDC6BFE /* ClientSideID.swift */; }; - 178A2ADE59A90E489CA6DF2FFF12BB55 /* Webim.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9465A51D5A1C6097AC306AE5E029796E /* Webim.swift */; }; - 17ED4545C09C246758BC3A463CD05F57 /* UIView+SLKAdditions.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 89C66CDC24D923C2764C4ABF2A5F1A39 /* UIView+SLKAdditions.h */; }; - 18D0036998848CA706F9A3F63E9A275F /* HistoryMetaInformationStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = E44FDED000CFEA5E8997684166E94A14 /* HistoryMetaInformationStorage.swift */; }; - 198236EEC7780633EE16040E8791A44F /* SLKTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 044895A375E387E5F5695591955EF1F2 /* SLKTextView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1A243C994AC7D57D5D886C112569BC41 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F76DC2C907652127B4034C23D0EBC722 /* Foundation.framework */; }; - 1A48C22A3F5EE6735BE212F9C5E7ED74 /* SLKTextInput+Implementation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E77CC482E52D09A7B7C7111BEFBB5DF /* SLKTextInput+Implementation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1D1F8AA42D6D18D605849481AFD649AA /* DeltaCallback.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33EBB768A6F587EE78D14B9982DD1C99 /* DeltaCallback.swift */; }; - 1DA16B933B2353589E888B6434E5E2FC /* WebimError.swift in Sources */ = {isa = PBXBuildFile; fileRef = D88C19AC19FDC7DE1A90CB39512B317D /* WebimError.swift */; }; - 20151B8AFE949A6DED7533ADA7E2E18D /* CosmosRating.swift in Sources */ = {isa = PBXBuildFile; fileRef = 674A84FEFE228BD6D26EDC0DC2768E99 /* CosmosRating.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2161A2E00532131F2BD8772BA0F1BFB4 /* DeltaItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DFB19BF17E22E5E8D00A3D8B2A4B65C /* DeltaItem.swift */; }; - 21A1D8B874B63496EA13F0301BD003E8 /* SLKTypingIndicatorProtocol.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 2BDF424E8F4B8350C171B707D40E67B8 /* SLKTypingIndicatorProtocol.h */; }; - 233E1A979C61DB9EEDE2966F15BB3B6C /* PopupDialogDefaultView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AD66C3FE6FB01768ECB85396B708305 /* PopupDialogDefaultView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 250CD0CC859C82EDDDA3A85160655BAE /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69FBC5329532C7920789EBD5112032F9 /* ConstraintInsets.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 26D1FA47296097E7B917AF1955658B85 /* SQLite-Bridging.m in Sources */ = {isa = PBXBuildFile; fileRef = 6314DC439A00AF1A001EDD2AE1178632 /* SQLite-Bridging.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 26E61D033EC59FEFA604F27EBBC433DC /* StarLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EAB3D37248165415C063F97954B9467 /* StarLayer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2787C518EDDAA8476B67BD0D575A4E1F /* OperatorFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FBC8379477B67860460DBA29C44823C /* OperatorFactory.swift */; }; - 289D3CE643F45B7038B002E5B3AE89FF /* Pods-WebimClientLibrary_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EAF4CB6D73818A89D9D94E40D5188687 /* Pods-WebimClientLibrary_Example-dummy.m */; }; - 2A31784762FF01923A27E6C3F87F8ECA /* PresentationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D0C05557781C5379C725BBB2973421E /* PresentationManager.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2B4585AF049705891248452AE7F15E2C /* RightToLeft.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBEDC5C6F2A5CBB16A3A72B1B3BCD6AD /* RightToLeft.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2C069DAC17B01675555F303FC9055568 /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1175CEEE6A6CE2A67BC15FD5F5DA8303 /* Schema.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2F1A89C1C3EE47085359808D4B774A29 /* WebimRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E97FF4DCF2C742492CAF208A5A57E4C /* WebimRequest.swift */; }; - 30AD5E2B8C58D246A6AE865AC36AEB37 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E23F2AC0E8E6DFB2E563077C5296618 /* LayoutConstraintItem.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3260968506173EADE5150D579B81AE2F /* OperatorImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = C004A8FC4B6BB5B475A1EFB306D86D19 /* OperatorImpl.swift */; }; - 32E097B64A3A1DAEEFBD88ACF9B0B238 /* WebimSessionImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51763A3FC4BC6D4B3BF8F59647C04B9E /* WebimSessionImpl.swift */; }; - 34A37D957ED4E0DC5BE518D4500AAF57 /* SLKInputAccessoryView.h in Headers */ = {isa = PBXBuildFile; fileRef = C39D88E88CFF4C159390622BA985BE8B /* SLKInputAccessoryView.h */; }; - 356EB6A90D6B2BFD871A25BE01E39555 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F76DC2C907652127B4034C23D0EBC722 /* Foundation.framework */; }; - 381DC60B003AA80CB89F2DB162681543 /* CosmosView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1F684EDBA435076F36F46FD1CA37AA /* CosmosView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 390E3467FFE22F7F826F106D01B8D95E /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = C71BB5FD3648A1C88510492D54EFEBF5 /* ConstraintConfig.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3AB236AD57AFEF156C2683CFAAE4B11A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F76DC2C907652127B4034C23D0EBC722 /* Foundation.framework */; }; - 3B86C5D83D51B0AD3A978CE5F065C131 /* CosmosLayers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45734B5573624C3BF0014DE3A678C722 /* CosmosLayers.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3E9D60EF5A01C4A64013E7DAACBB7357 /* Setter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23468802FA8FB875EC559DE300D8AEB5 /* Setter.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3FEFC7E33A504134F4D6C459AF25589A /* ProvidedVisitorFields.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45D11EC7E8FF92719A0E1C630BE12DE /* ProvidedVisitorFields.swift */; }; - 424CD548B3A428FC555851F398F0FEEA /* FTS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF48F4EEBF581512D4C679AF79F2DCF /* FTS5.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 42A56F2791C5DA72ECB6E4FC6E58F4B1 /* UIView+SLKAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 89C66CDC24D923C2764C4ABF2A5F1A39 /* UIView+SLKAdditions.h */; }; - 4382FA30ADF7E1006C6016718099220A /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9058DD2369437C210BD80C50F70DE0CF /* ConstraintMakerRelatable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 44AB859AED411011EA15727C757AA69A /* WebimInternalError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 178C90AFB8090C6F91A16A6307B84C2C /* WebimInternalError.swift */; }; - 45F1E40653A05F843A8ECA52BF5F5D19 /* PopupDialogDefaultButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2F953AC0AC02DB901427DCF8BBE5451 /* PopupDialogDefaultButtons.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4634351C09D12DEDB55F2ADF19702875 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A242DC696A091612A93C381A0405C6F /* ConstraintRelation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4648F0EADAF6AB0F040136693F14A42F /* WebimRemoteNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 486C240F9A27DDB9E0B2DAD55FC4EBAB /* WebimRemoteNotification.swift */; }; - 47147754891D220CE819479153E26A71 /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5C5104C50B5210EE6672486CD7728BD /* ConstraintLayoutGuideDSL.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 47FEF8F6730D2FD71212C5197E71ECDE /* PopupDialog-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D424D8D17487CF77887C3C014EF9BF2C /* PopupDialog-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 494B0146EC43A050E227D900818AB133 /* RTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FE020505CE6ECF61DC9692772335DF8 /* RTree.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 49DB8DB5AC32D3AB30BE6A0311112ED8 /* LocationSettingsImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97E1BB7405A05BA96F5E47AE3E3606BA /* LocationSettingsImpl.swift */; }; - 4A0FB8CC3DCE2AB7714DBBE28EBE1C84 /* MessageTrackerImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 664E4FAF65FE576ABE814C9B4373ACF1 /* MessageTrackerImpl.swift */; }; - 4C05E79CF131466F774E980B5C700088 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F76DC2C907652127B4034C23D0EBC722 /* Foundation.framework */; }; - 4CE94770E88B40DD3F06797F9B35B81A /* Cosmos-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 441EEAF33DDB2A66F3A5FB470B679E64 /* Cosmos-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4D84CF98CC048790434A0470E7F47ABF /* UIView+SLKAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A748B325C96F357F4CB1EE5A92482766 /* UIView+SLKAdditions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4E61910733FC0F4BE0D919D11C325A4A /* SlackTextViewController-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F8130E1042B3FA834B608E4E757DAF1E /* SlackTextViewController-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4EAE493F17DF13784170AD302123F931 /* MessageListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = 976FEFC2BAF7806C07EDF4371B51425B /* MessageListener.swift */; }; - 4FB1970832B90E74B474D10C11EE171B /* SLKTextViewController.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 59D6646DF99628AAB8B30829DB393FA4 /* SLKTextViewController.h */; }; - 501879650E15D9A2094A4974EA79B192 /* DeltaRequestLoop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 812B6CD93226E9E8F4A69539560951E2 /* DeltaRequestLoop.swift */; }; - 509EB393D4825131F19DF86536E4C5C4 /* Query.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68A778D4E523D12A12C64934A17B9F36 /* Query.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 50ED867995F85124265185FEDC0FC381 /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFC124D9576482D972503ACCD3C48F86 /* String.swift */; }; - 51FCE95F979FB22A85B93DAFCF4641BF /* CosmosAccessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 589CDB8EE66225B61D953B5B2130BB1B /* CosmosAccessibility.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 520512C3C34FCAA4370E816ED45D544D /* CosmosText.swift in Sources */ = {isa = PBXBuildFile; fileRef = B31BB16AC664F4594A4DF5E537276CDE /* CosmosText.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5339488672692217CA9AA60EFBE7FE48 /* CosmosSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9DC431C1F0581F2DBF3B18B35028A1A /* CosmosSettings.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 537EBDA103178318B1317DB1DE752B4B /* MessageToSend.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC632DDED7CF1BF1421FE8E7F0FFE651 /* MessageToSend.swift */; }; - 53A150B52D70B015C1DA82633241C2C7 /* PopupDialogDefaultViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6B79F4DA41D5130904FD456FE22113 /* PopupDialogDefaultViewController.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5784E58AB76380FB081849A955CC5F9B /* Pods-WebimClientLibrary_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F87105350AE77591C8FEC5EA2C3F7190 /* Pods-WebimClientLibrary_Tests-dummy.m */; }; - 581612BC903BAFB0928A8E92F47F2B66 /* StarFillMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66297257B46A0B04E1F0D23851BF3FB9 /* StarFillMode.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5A237350A4996570FF670AC55527A850 /* DepartmentImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 748EC9667F598F615C648373AC6A38C1 /* DepartmentImpl.swift */; }; - 5A33AF6AFFCA549F8C76D57B50E51824 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FBD1628B05EBA4AFA2FA943EBE83E39 /* ConstraintOffsetTarget.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5A7D52E3FF21474982BD6CF04217852F /* UIResponder+SLKAdditions.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = B237068A8D72FEFF28592B7B49449CCD /* UIResponder+SLKAdditions.h */; }; - 5CFBA0979D13A0CA252D2170179426E7 /* WebimInternalLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94738B2F820AFDC3085F59678AE16A32 /* WebimInternalLogger.swift */; }; - 6029A76E1D3C8DC87C87064669F69799 /* VisitSessionStateItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11187C43953CAFFFF1AE5EA9F649EBB6 /* VisitSessionStateItem.swift */; }; - 6036843C3849CEA55000F90CAC965448 /* SLKInputAccessoryView.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = C39D88E88CFF4C159390622BA985BE8B /* SLKInputAccessoryView.h */; }; - 604D24F2D108337EEDFE62682DD523E5 /* PopupDialogButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCDE4C39116B4AAE6604CCAEDDDE9E00 /* PopupDialogButton.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 60BB3050FCA69667BA1BA58368E8E544 /* CosmosSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46DC90CA6AB31326B645D490D36F360D /* CosmosSize.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 62ADE882A7B914EE33D86B3BA8C2AEE0 /* SLKUIConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C342D50880096E16DEE77520817A72E /* SLKUIConstants.h */; }; - 63560440E8FBCBF1B1E48668E9314E57 /* CosmosLocalizedRating.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC15F1A566EBF7122EAC9D4CD61B73F /* CosmosLocalizedRating.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 64C9F226D4D8A4781E02F84E231A9F26 /* CosmosTouch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2BF07B73FDBB90C4C1A8897F9521A83 /* CosmosTouch.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 654F9F0ECB2F12F8C4C26AEE0CCA20C1 /* MessageTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9ADE5CC421AA8C62E071B1CC4F626AF /* MessageTracker.swift */; }; - 66483ECF68F5E6407D023073369AFB44 /* SessionDestroyer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16AB9B6D895690822A693689EE57F20F /* SessionDestroyer.swift */; }; - 665FBE655A69F6D8CB53EF9AFAA782E4 /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CB846EE4ADDB3DA5851E05625D7CAF99 /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6698662B8A1C3B0E390B6E3588BEEE03 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC2A05AC20F044D9647C8FA90450C208 /* ConstraintItem.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6712404EA9814E1BBCE72D915C4A1640 /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1783698FAEE06C0CB74DA14E7EC431D5 /* ConstraintMaker.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 678EAF4018ED6CD7457DC48FA26B4E9E /* ActionRequestLoop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 031A76851F5F9F83F68BBE2D84A11914 /* ActionRequestLoop.swift */; }; - 6BEE22C3AEE2A84502DD871D91B736C4 /* PopupDialogOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65C6B1DB7FD2FDEA3527CA95DCD29E7D /* PopupDialogOverlayView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6C44748BE2A3FBC6AC65D3C0D8F00BD4 /* RemoteHistoryProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE53FBAE4518028FA72FAEF79BA5A571 /* RemoteHistoryProvider.swift */; }; - 6E0FB55AF7BB77A7E22565448AD6A813 /* Dictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0491AFDCF982959F9324FD8393C1BAC9 /* Dictionary.swift */; }; - 6E4BE6E51EB186C3897BAC62582B097A /* Department.swift in Sources */ = {isa = PBXBuildFile; fileRef = 799A957762BB118D419942064F856D37 /* Department.swift */; }; - 6EEB9A233F7B8BB3C1B0EB27FCF1E0D7 /* fts3_tokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E7C41FF27BC65BD8A082EE7D6DFBCB6 /* fts3_tokenizer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 70C5D29921A12A8783E8CFD54A3FD811 /* AbstractRequestLoop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 424064D2E146A3B86BE494CCFEFB13EE /* AbstractRequestLoop.swift */; }; - 713F4B1758AC531D6DDA209752FAF465 /* FileParametersItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DAE32AED11C1788D3D40B240179ABC4 /* FileParametersItem.swift */; }; - 73195B17526EE5C8D889AFEFE361AE38 /* Coding.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7E6F65C54F9DA6869D9EDC041125EC /* Coding.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 752066C425262B6EFEC031718A5BBF93 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F76DC2C907652127B4034C23D0EBC722 /* Foundation.framework */; }; - 76D74DDCFA74D89F0FFE1B8F9AFA065C /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2B9FE92B60ADD3BC1A9F02F605DB108 /* Message.swift */; }; - 7913FC70BED549DDB177334A6FF1880C /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63716EFE92E8E8A8E9C48A5A13CB76DE /* ConstraintMakerFinalizable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 799B723F86585CCE268DD7A7924D269A /* TransitionAnimations.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5C6B603C8647D2F917E828B2834BD16 /* TransitionAnimations.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 79AA63452E70A8A1ADAC6E2DBA7E3971 /* MessageComposingHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B50DF8265348B3DF6C66646ED143614 /* MessageComposingHandler.swift */; }; - 7C28CA9D43618E62581EC46CB2D1F0ED /* UIResponder+SLKAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D412AD82B46FB3337211280A79EE1978 /* UIResponder+SLKAdditions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7EAC1F8A096A2FBA10570D8AA3D6BFB1 /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB4AE55286E3B1E8445C6EA19AE51119 /* ConstraintInsetTarget.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7F5816B34E3458BC617AF1DA599F68BE /* DepartmentFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 275ADDC61AB76931E634684AB15BF0A1 /* DepartmentFactory.swift */; }; - 800C74DDA9CE32B3AECF9945B7ECC3B7 /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DE1F11718C901A07CFD427BD194D858 /* ConstraintLayoutGuide+Extensions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 81D7D2BDA942BAB8D1F4B2D31D3F469B /* SQLite.swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0693791EE1FF9F7A7FBA622466950F /* SQLite.swift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 835847724475C8D541436C7FCE755DC4 /* WebimRemoteNotificationImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC09A6794593E514725D5D5A0CC6C71 /* WebimRemoteNotificationImpl.swift */; }; - 839050762A87E2C32521314FF3C91F9A /* ProvidedAuthorizationTokenStateListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = E334599F24531CF54B4CDF423BCD705A /* ProvidedAuthorizationTokenStateListener.swift */; }; - 839609AA05161EDB374C960F426ADC03 /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E9951E0E06C067364D4A49099B53BEA /* ConstraintLayoutSupportDSL.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 86CC625794EB61E22982DC4BCDC15600 /* SLKTypingIndicatorProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDF424E8F4B8350C171B707D40E67B8 /* SLKTypingIndicatorProtocol.h */; }; - 8CEC156ADBE45CF3FBF2770FF76B4663 /* ExecIfNotDestroyedHandlerExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E61B74DC1E23B0D76F220BAA27F4D849 /* ExecIfNotDestroyedHandlerExecutor.swift */; }; - 8DC419F99ABD2EFAEB9057A16F68BED2 /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B01822C249BE61FF36B8D93944E4FEF9 /* ConstraintMakerExtendable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8F37F6B86EC4236C24AD491A9B6E48E7 /* SLKTextInput.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 62A72ABAC306489335A995A96B554709 /* SLKTextInput.h */; }; - 904B38DB75C9047001717C1DEFC1F58F /* UInt32.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D9370B508D0493EBA8A10B99C825E26 /* UInt32.swift */; }; - 917058BCBCD33C7A09D346DDA0512515 /* FatalErrorHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = B65139E38C30F90DFA787ECA784C2DC2 /* FatalErrorHandler.swift */; }; - 91DDD76106AC6208C78A5E6A0971F3EA /* SQLite-Bridging.h in Headers */ = {isa = PBXBuildFile; fileRef = C8E8B75EAA68CC151FB6616E545A864A /* SQLite-Bridging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 91F6A789ED3DFD53F9DE29381800A315 /* CompletionHandlerWrappers.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA6689B5BD274AAAA1CE7E90FA4714B2 /* CompletionHandlerWrappers.swift */; }; - 95276AF2B7EDC4A571A95BE762F0BC2D /* UIResponder+SLKAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = B237068A8D72FEFF28592B7B49449CCD /* UIResponder+SLKAdditions.h */; }; - 96740031C2E5BB4C498668C1FFD8EAE2 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1BE798778A71FFBAC0A3F707F64868B /* ConstraintMultiplierTarget.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 96A75209DDDD1D5793802A77671578AF /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04055536F5FE91CD5501A087E7DE968 /* Typealiases.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9948CB319273CE5A22D61BE2BE2B0D44 /* HistoryID.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE098FA70E560168BB99945C731A31E5 /* HistoryID.swift */; }; - 9A132E03502EEF77CB534CE5D45D241B /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 365F83154629BD47C328EC8207E30F78 /* Debugging.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9B5622A5A987B7E30191415C16F90FF1 /* OperatorItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68DFF15284ED58C4872C8F7F7551A74A /* OperatorItem.swift */; }; - 9BF63B343EBE97A26C3C04ED2E47BB8E /* UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33F60BC55DF51EEFB71240CBCA412ED0 /* UIColor.swift */; }; - 9C529CB569F351D5D5F0D83A803A2924 /* SLKTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E1657D49F34C96846D1FA55302BE31A /* SLKTextView.h */; }; - 9E2C7C64A9123DF398A4BCA375F5F492 /* InternalUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9208B4B52BDD1CA15A72FD72B2E3EF82 /* InternalUtils.swift */; }; - 9E3ED1280783C5A6C6B5C6B75C6C1C27 /* DepartmentItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CA9CFC058B0DE538EA6458F17C60EF0 /* DepartmentItem.swift */; }; - 9E5280CA697E2AFD6940D956C17FBC8E /* AccessChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 574DA971889D27700C255D23FB009E67 /* AccessChecker.swift */; }; - 9EA4C59F5863D2D7A0BE93CF4A76B849 /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AF576B4B964A0C4607573E1247EE26E /* ConstraintView+Extensions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9FB548A2B7FD068B7087C53647A7E964 /* RatingItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48740EC71FBEF2D78841DBED6641CE48 /* RatingItem.swift */; }; - 9FBF424E7F385F241417B2524CC07360 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B391643705AE625944E65B46E68AA52 /* Expression.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9FC2599078A562BDA2833918AD724919 /* MemoryHistoryStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE9B210FE2EF8692B21BEEB1D7CBD887 /* MemoryHistoryStorage.swift */; }; - 9FF475768019DE8831A0B06BBE249C86 /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4375DF2C2EEB6B5F2F0774A75C331709 /* ConstraintView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A0B3689A1785165D9A290E408B909AF8 /* SLKTypingIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 41E92E8C07D5B2F02E47A0127C96D841 /* SLKTypingIndicatorView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A145BE224AB4AF076640D931E221C919 /* WebimActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E1F93690F6CA2E6B9029C8863DDF46F /* WebimActions.swift */; }; - A15AEE4689D690D87DDA46F4A326F754 /* Statement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C463204C55F6BD61A19CDAFD1E1F6CC /* Statement.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A198D2516ADE22A1FBDE7C72B6CAABBC /* MessageImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F9CE38BF060921C9A191B0C55196638 /* MessageImpl.swift */; }; - A21393F16B91BC265737B7669C99C8AB /* TransitionAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 701B1077AA9ABDCA06C1D36D0B20FD0B /* TransitionAnimator.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A25C6CCA27526F919C7C8C57FD7CDD24 /* CoreFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E05B0AB2A158BE0AED146D9CE9656DB /* CoreFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A3974F3CF0B8483CBFBA69EB8CA1CC29 /* ChatItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916001497C7F1413D1405BF3113FB8BD /* ChatItem.swift */; }; - A84CD24CAE7C2DDAF65F44794D6E96B3 /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39EBAD471601B480F694A6117222F362 /* ConstraintDescription.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AA502AB9E400A3DA1AFE34C5D9582B59 /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05E3FC8EBC71B7122F06AF64A1963779 /* ConstraintViewDSL.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - ABAE43484C7077202025C80346AE47CA /* MemoryHistoryMetaInformationStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083F196AF47F7F9C0A3A1DA019D98BBC /* MemoryHistoryMetaInformationStorage.swift */; }; - AD9C0D21E05EAAAB4DF1930C36793617 /* SLKTextView+SLKAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A4183B44B9110396705711FCF422C303 /* SLKTextView+SLKAdditions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AEF719C625CF6D2B5F37F20BDF26F566 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F76DC2C907652127B4034C23D0EBC722 /* Foundation.framework */; }; - B0D98492078DECAB5666A762017B0DCE /* Pods-WebimClientLibrary_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 23C9CB269996E5AAF073C5F5636F096F /* Pods-WebimClientLibrary_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B34B05913CA41A098BAD9ACBA0E34195 /* HistoryStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94DB905432A1C4E89B011879CCF15EA /* HistoryStorage.swift */; }; - B510A78CA45709B3B8E0220A8D894432 /* SLKUIConstants.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 2C342D50880096E16DEE77520817A72E /* SLKUIConstants.h */; }; - B73F602E13B2ECF2A7F037FFBDAF6A42 /* CustomFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6511D19F28E61BE5EB298D7D7CC35D3 /* CustomFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B79D2B740071FCD39C3EBD0BF8556F1E /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794782EEF80522A6D607C066166DFC58 /* ConstraintAttributes.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B82496837D12CD93204C9D41FD10CCC3 /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A541555875AD8A3D9028E22DB39BE37D /* SnapKit-dummy.m */; }; - BC39B28995BFFC0C0A72323C9A783E85 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DB039E47DCDEF37A37FC345CF6E4E00 /* ConstraintMakerEditable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BD424143175E21B2A09227594AC685FF /* SLKTextViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F1C12BE07902C611C23DE45A04DE3C0 /* SLKTextViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BD5F3640B845386EB5FD8A5DDC45F468 /* WebimErrorImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = F220E304B22DAE4253EC4F1C3165C028 /* WebimErrorImpl.swift */; }; - BDBA1CC133E6171AC3542C6F2057C5AA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F76DC2C907652127B4034C23D0EBC722 /* Foundation.framework */; }; - BFC5EAB94C86D336F111F2D9A23CAD23 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DD0DF542C4250DAAA403FC160A5A3BF /* LayoutConstraint.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C00363AC47FDD5D763B0EB940433CB22 /* UIScrollView+SLKAdditions.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = AAE8BD38ECC431D4935FFEC0AD1F1DD6 /* UIScrollView+SLKAdditions.h */; }; - C1C83385C325696717057CDB9C80ECE9 /* Array.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA4C13B6D142392F31DCF6B47BB344DD /* Array.swift */; }; - C215DECF5AEEE88018AA045E346A3871 /* PopupDialogContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AE3CE47E298A5486AC08E1AE80FA32E /* PopupDialogContainerView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C3E0889BBFF85769F855C551B7B2C7B0 /* SLKTypingIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = C98470DA861742FA94D3E549FF68530A /* SLKTypingIndicatorView.h */; }; - C50DC3A9BBB63766090D111CFB7E4339 /* SLKTextView+SLKAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DBD18B64CC7D939ECB27D7784B39754 /* SLKTextView+SLKAdditions.h */; }; - C58FD2114DE0856299BF6CC5D1A9F9F1 /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53F5BBEFD90D802D74EC71D0366F81B4 /* UILayoutSupport+Extensions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C778F806C13A586005FDF6D1E61C00E3 /* Operator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC537E206030C9AC6FCF246EA9F4E15A /* Operator.swift */; }; - C91A6B8B8DCA9889D2CCD12C9993D3A1 /* LocationSettingsHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = A19D41CC83E90795ED8C2844D85DC4FF /* LocationSettingsHolder.swift */; }; - C9647A77E211A4480FB66D087DC6B404 /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8927D1A5A5D6E9A5F14E8C8F5509B527 /* ConstraintLayoutGuide.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CC2DCF2DC45C48327910327797C1A211 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 428FE0BAACC1D8E6E684DE697C79B180 /* Operators.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CF372E29BB5C5C2738DF22E3B1199270 /* HistorySinceResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCFE11EDF8ED6FB356F670929F45B7B7 /* HistorySinceResponse.swift */; }; - D17FA6F728691AE51D43ED4876EF69BE /* PopupDialog-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 15C03AA13FFEA43C3F4E6369D5788DCA /* PopupDialog-dummy.m */; }; - D275FC128A0F407C94124D4118490FEF /* SQLite.h in Headers */ = {isa = PBXBuildFile; fileRef = AB8E60388D4FAB9EE5502C7BCD60E6B2 /* SQLite.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D28CC0316F172C9B90176A5935CA7536 /* DeltaResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DC2978B1D9B8C22FE818340BF9B78C2 /* DeltaResponse.swift */; }; - D4EF4C4A24122115339D90CA25D9CFB4 /* MessageStreamImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C86A3F05065EA1AAB353138DFD7D0B6 /* MessageStreamImpl.swift */; }; - D57CCF7B9DDB30D5BDB24C681FC5CF43 /* ConstraintMakerPriortizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F6B0CAAD2E7AE71CCB59A4E0868433D /* ConstraintMakerPriortizable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D5B2FD9D11696E35FFFB884F184977C3 /* WebimSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B7E45992B3B6C8E86885954DED1DB72 /* WebimSession.swift */; }; - D60B4A82D2CD60753FE4F7FB2DE0C5E1 /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98B06FBFFF03146BA6B54D94A84437C5 /* ConstraintDSL.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D62D20B065AE9A11785CA04B0050BC29 /* SlackTextViewController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B7EFE3E2822F1C37ACE1F18135E0818D /* SlackTextViewController-dummy.m */; }; - D656F2542FF374F07C309DFC29A2C26C /* CosmosDefaultSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35064B13F956BA1FA962ABE2A52192CA /* CosmosDefaultSettings.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D671F9B8C0C7D6105EF3277B24B65772 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00853F996137B9DB1AAC0548227A9350 /* Constraint.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D6E68527C79516FEADFBD96CEA15D5DC /* SessionParametersListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FDD1338B037FEFD772B3283D5A1AE8D /* SessionParametersListener.swift */; }; - D83E87F8C1FF792850B4B484EF89DE27 /* SLKInputAccessoryView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5796439079F1037FB7BA9A17DF14C526 /* SLKInputAccessoryView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D925EEA3D16B28E8EE1042C7F85177A5 /* DateAndTimeFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27A99E429CFF8B3AACFDDAE81E8E07D7 /* DateAndTimeFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DA261B63DD6ACAEBD78BC543685E2C37 /* FullUpdate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 184AE39EA003B696105AEF8FA304492C /* FullUpdate.swift */; }; - DAE614425034B4FA59922B27C0D5B4A5 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2014331447201D489E7F8B2178A4CED2 /* Errors.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DAEF2BC07E931929331323DB19E94786 /* SLKTextViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 59D6646DF99628AAB8B30829DB393FA4 /* SLKTextViewController.h */; }; - DC79D16432713F76FE88314E7F3C55A2 /* OnlineStatusItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3242238072AD02323A0499BE3422F4F8 /* OnlineStatusItem.swift */; }; - DE2C4153590F8BD92595E402964115FA /* CosmosTouchTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF8580ECAD238587E0F5440EDAD11D6E /* CosmosTouchTarget.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DE5FD80A65F386F24A159F225D063785 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35E596152ADD915D8BD53033E5834584 /* ConstraintRelatableTarget.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DEEC9C8A95B5BD257F9E0AA4D9ADFA74 /* AuthorizationData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 556D2E20FAFCEAEB67F3CC2FC303643F /* AuthorizationData.swift */; }; - DF8E5CA0C386835D90AC4EF93D76CE62 /* UIScrollView+SLKAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE8BD38ECC431D4935FFEC0AD1F1DD6 /* UIScrollView+SLKAdditions.h */; }; - E06D7389382D8C32172468E7A0FE6945 /* InternalErrorListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3EA98390ACC5C7B7679C0F507EA0F3E /* InternalErrorListener.swift */; }; - E157169A5018F20AE6AB5FF9A40D0AD7 /* UIImageView+Calculations.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC653149D8C812AA5E52B48F2DD9498E /* UIImageView+Calculations.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E225B51204B6B8A7EE32DB66D660F897 /* WebimClientLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = BBE7FD1D4E433F3FAAB93E1CF24A74E4 /* WebimClientLibrary.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E4F311B94CBDD9A9BDDD1534F0B04275 /* Blob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BF4D0C968280B1FEC1BE1681523B823 /* Blob.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E6887C2D52DA216F194865816887A9F3 /* Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850A6435920A6F9CF58A8D8CE687D183 /* Collection.swift */; }; - E935952900A2D50C7C3797D44E9E6C37 /* Pods-WebimClientLibrary_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A39D8A7D919E04BCFAB21036A1AC4DC5 /* Pods-WebimClientLibrary_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E9627DF0A7E5DBFB43CCCE4469E29711 /* InteractiveTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8387904866322F009CB5C5264A098B0D /* InteractiveTransition.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E9A5259C61B1BAE283A0C48DF9CB091B /* WebimLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C470023B540C860A6BFF2A528F003DB5 /* WebimLogger.swift */; }; - E9C79C959F785FB6D685E94896A80308 /* FXBlurView.h in Headers */ = {isa = PBXBuildFile; fileRef = F2AD3B701744E1B73341944062B2919C /* FXBlurView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E9F926AA0E26D4D450522D0A6AE7E520 /* WebimClientLibrary-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 14AE187B703B991040A2AC24ECE52DC8 /* WebimClientLibrary-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EAFAB5FCA8A1E844D1470CF04759F0B0 /* HistoryBeforeResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = A193CC2710805DA939D32EC09565ACCB /* HistoryBeforeResponse.swift */; }; - EBDA9D986D3B29181DCE45F61309AB4F /* Cosmos-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BF1A0160861949970986DC345DCE9ECB /* Cosmos-dummy.m */; }; - EBEE031011B787C1304C67C278B777BB /* CosmosLayerHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8325F92B3D087D71E5617B6D2D29D7 /* CosmosLayerHelper.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EBF81C5FF163E78981E845313B2640ED /* FTS4.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE1668116AC3687EC96F741765F56E22 /* FTS4.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - ECB881CCF71F7CDB8F86FF6ACBCA5185 /* MessageItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DC7724A2982CDC1CD7D602ACA393B9E /* MessageItem.swift */; }; - ECBB00201626AF4AE62F6784902B6189 /* WebimClientLibrary-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 754FCD497F6F3304F104C8E40D115A5B /* WebimClientLibrary-dummy.m */; }; - ED9B78F1348221AD6D6696A04F463019 /* SLKTextInputbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 23540EBC02B4CDAC0FC39B408311CBF0 /* SLKTextInputbar.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EE694A2AD7590D2A1ADAFBF4BF9088F1 /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = E875FDE45DED7A69F1967B35A3AB34AC /* ConstraintLayoutSupport.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F1489064F81F9F31CC05684CBB167F9C /* PopupDialog+Keyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD03B769FD977A4025C02108E374AC30 /* PopupDialog+Keyboard.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F158D475C132569A319D4D678DEBF2BD /* WebimClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 473D1F55471229ADC88FB88A6A14AA83 /* WebimClient.swift */; }; - F335E9990A1204AE53ECC1C46E89D44A /* VisitorItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB2B3B57C4BDFBED302FD55C3C496460 /* VisitorItem.swift */; }; - F41FB230CBEBBFEAC5712DD7489953D6 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D2AFB0776B9615FE086C08BE0BACDAC /* ConstraintConstantTarget.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F474833BDB6FF494602E8EFE4C514B26 /* SLKTextView.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 3E1657D49F34C96846D1FA55302BE31A /* SLKTextView.h */; }; - F52E294F17106D3719C54646D1E9C10A /* MessageHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130D261D6D66B4EB871D63BB225AE684 /* MessageHolder.swift */; }; - F74524062D20759239CB73AC6AA399D2 /* PopupDialog.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCEDB31AD7D4CEA880910146D1DC3811 /* PopupDialog.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F84C2CB44208B8F36D4A131BAB32F5EA /* SQLite.swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AE6509574FFFEBCF09E63C3F0A868B2A /* SQLite.swift-dummy.m */; }; - FA0683FE579F81120BE6464991943973 /* SLKTextInputbar.h in Headers */ = {isa = PBXBuildFile; fileRef = D737EAF097E5B5581F3F28349AD1E978 /* SLKTextInputbar.h */; }; - FAB305B721DCF780896A998F00B6FA7B /* SLKTextInput.h in Headers */ = {isa = PBXBuildFile; fileRef = 62A72ABAC306489335A995A96B554709 /* SLKTextInput.h */; }; - FADEC12BE90DCFEDED6A7D376D864D67 /* Value.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50AE43DCF31E0AAAF1C38A86666EB441 /* Value.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FC968FE229A578DE5EBF0142D2125E55 /* AggregateFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01C9F2839854B61F3FF5CE76CACFBB63 /* AggregateFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FD299A75858423DE0D755E4BECBC0114 /* SLKTextInputbar.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = D737EAF097E5B5581F3F28349AD1E978 /* SLKTextInputbar.h */; }; - FD786ADB56CCD018674972FCDCA94F80 /* Collation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B82EC87F482F8E63EFA80A3DF32D0C5D /* Collation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FF6718274A4D83133669A1DE7E48AE69 /* Connection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 520FA0FAB92C60049AEC618B86BA9387 /* Connection.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 3261CAE01D1C144CF85F9D7449172A30 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 210878043DFCCAD9394DF1089E605053; - remoteInfo = "Pods-WebimClientLibrary_Example"; - }; - 789D60512234826D494F71F316C34C65 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = B6C5BC764869FA8C174F0AD2B7761A80; - remoteInfo = SlackTextViewController; - }; - 7D00A6A905E7DD05BA2B08B93BBAA56B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 69EB2061B31BDDDC614CBB76CA6B70FA; - remoteInfo = SQLite.swift; - }; - 7DFFA6F788D48645E149C58CF78E7A28 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = E6FCAC234963C095748C8F1E8E988809; - remoteInfo = SnapKit; - }; - 9091E7D44FF050AB5C79A3E2FDC14C30 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 3EE4C940CC68C90974F2C4B92892B688; - remoteInfo = PopupDialog; - }; - A856BC7FDB1332233FCACBD44FF73C4B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 69EB2061B31BDDDC614CBB76CA6B70FA; - remoteInfo = SQLite.swift; - }; - C25066A7950794DA5B37A4C5D56C0B53 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 93BE6772ABD5E75C25FD45D48900958A; - remoteInfo = WebimClientLibrary; - }; - D894376C46B25C0551CEAF7AA28A7060 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 224580824D4276BBCB37A928CF5E9482; - remoteInfo = Cosmos; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - A0B8DC93C4322ADEF4C25AF5D968BFFB /* Copy . Public Headers */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "$(PUBLIC_HEADERS_FOLDER_PATH)/."; - dstSubfolderSpec = 16; - files = ( - 6036843C3849CEA55000F90CAC965448 /* SLKInputAccessoryView.h in Copy . Public Headers */, - 8F37F6B86EC4236C24AD491A9B6E48E7 /* SLKTextInput.h in Copy . Public Headers */, - FD299A75858423DE0D755E4BECBC0114 /* SLKTextInputbar.h in Copy . Public Headers */, - 12225583A2162EAA0864C31ADC319B6D /* SLKTextView+SLKAdditions.h in Copy . Public Headers */, - F474833BDB6FF494602E8EFE4C514B26 /* SLKTextView.h in Copy . Public Headers */, - 4FB1970832B90E74B474D10C11EE171B /* SLKTextViewController.h in Copy . Public Headers */, - 21A1D8B874B63496EA13F0301BD003E8 /* SLKTypingIndicatorProtocol.h in Copy . Public Headers */, - 08798A7954C06DCE1B2444BF3B40A52F /* SLKTypingIndicatorView.h in Copy . Public Headers */, - B510A78CA45709B3B8E0220A8D894432 /* SLKUIConstants.h in Copy . Public Headers */, - 5A7D52E3FF21474982BD6CF04217852F /* UIResponder+SLKAdditions.h in Copy . Public Headers */, - C00363AC47FDD5D763B0EB940433CB22 /* UIScrollView+SLKAdditions.h in Copy . Public Headers */, - 17ED4545C09C246758BC3A463CD05F57 /* UIView+SLKAdditions.h in Copy . Public Headers */, - ); - name = "Copy . Public Headers"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 00853F996137B9DB1AAC0548227A9350 /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Source/Constraint.swift; sourceTree = ""; }; - 01C9F2839854B61F3FF5CE76CACFBB63 /* AggregateFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AggregateFunctions.swift; path = Sources/SQLite/Typed/AggregateFunctions.swift; sourceTree = ""; }; - 031A76851F5F9F83F68BBE2D84A11914 /* ActionRequestLoop.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ActionRequestLoop.swift; sourceTree = ""; }; - 044895A375E387E5F5695591955EF1F2 /* SLKTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SLKTextView.m; path = Source/SLKTextView.m; sourceTree = ""; }; - 0491AFDCF982959F9324FD8393C1BAC9 /* Dictionary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Dictionary.swift; sourceTree = ""; }; - 05E3FC8EBC71B7122F06AF64A1963779 /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Source/ConstraintViewDSL.swift; sourceTree = ""; }; - 06D62980BACBB770306487FE4C185595 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 083F196AF47F7F9C0A3A1DA019D98BBC /* MemoryHistoryMetaInformationStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MemoryHistoryMetaInformationStorage.swift; sourceTree = ""; }; - 0A242DC696A091612A93C381A0405C6F /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Source/ConstraintRelation.swift; sourceTree = ""; }; - 0AF48F4EEBF581512D4C679AF79F2DCF /* FTS5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5.swift; path = Sources/SQLite/Extensions/FTS5.swift; sourceTree = ""; }; - 0B50DF8265348B3DF6C66646ED143614 /* MessageComposingHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessageComposingHandler.swift; sourceTree = ""; }; - 0B7E45992B3B6C8E86885954DED1DB72 /* WebimSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebimSession.swift; path = WebimClientLibrary/WebimSession.swift; sourceTree = ""; }; - 0C463204C55F6BD61A19CDAFD1E1F6CC /* Statement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Statement.swift; path = Sources/SQLite/Core/Statement.swift; sourceTree = ""; }; - 0C86A3F05065EA1AAB353138DFD7D0B6 /* MessageStreamImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessageStreamImpl.swift; sourceTree = ""; }; - 0CA9CFC058B0DE538EA6458F17C60EF0 /* DepartmentItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DepartmentItem.swift; sourceTree = ""; }; - 0D2AFB0776B9615FE086C08BE0BACDAC /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Source/ConstraintConstantTarget.swift; sourceTree = ""; }; - 0DC2978B1D9B8C22FE818340BF9B78C2 /* DeltaResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeltaResponse.swift; sourceTree = ""; }; - 0DC7724A2982CDC1CD7D602ACA393B9E /* MessageItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessageItem.swift; sourceTree = ""; }; - 0E23F2AC0E8E6DFB2E563077C5296618 /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Source/LayoutConstraintItem.swift; sourceTree = ""; }; - 0EC15F1A566EBF7122EAC9D4CD61B73F /* CosmosLocalizedRating.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CosmosLocalizedRating.swift; path = Cosmos/CosmosLocalizedRating.swift; sourceTree = ""; }; - 0FBC8379477B67860460DBA29C44823C /* OperatorFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = OperatorFactory.swift; sourceTree = ""; }; - 10D81E0177A9FAC99655E1B41654D535 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 11187C43953CAFFFF1AE5EA9F649EBB6 /* VisitSessionStateItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = VisitSessionStateItem.swift; sourceTree = ""; }; - 1175CEEE6A6CE2A67BC15FD5F5DA8303 /* Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Schema.swift; path = Sources/SQLite/Typed/Schema.swift; sourceTree = ""; }; - 11A56FABF10A24216771AC84E410BD4F /* Cosmos.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Cosmos.framework; path = Cosmos.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 123BB0532A2810889D6942D8C0838937 /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = iOS/Crashlytics.framework; sourceTree = ""; }; - 130D261D6D66B4EB871D63BB225AE684 /* MessageHolder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessageHolder.swift; sourceTree = ""; }; - 14A604358BE60AC85BFECC4951F291C1 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; - 14AE187B703B991040A2AC24ECE52DC8 /* WebimClientLibrary-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "WebimClientLibrary-umbrella.h"; sourceTree = ""; }; - 15C03AA13FFEA43C3F4E6369D5788DCA /* PopupDialog-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PopupDialog-dummy.m"; sourceTree = ""; }; - 16AB9B6D895690822A693689EE57F20F /* SessionDestroyer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SessionDestroyer.swift; sourceTree = ""; }; - 1783698FAEE06C0CB74DA14E7EC431D5 /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Source/ConstraintMaker.swift; sourceTree = ""; }; - 178C90AFB8090C6F91A16A6307B84C2C /* WebimInternalError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WebimInternalError.swift; sourceTree = ""; }; - 184AE39EA003B696105AEF8FA304492C /* FullUpdate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FullUpdate.swift; sourceTree = ""; }; - 19BBC33E35927522DB4A5D5E3219048D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 1A47949C61BCCE7C8DEB72DF882ECD0C /* Pods-WebimClientLibrary_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-WebimClientLibrary_Example.debug.xcconfig"; sourceTree = ""; }; - 1B13DDE51DE201948A4F370B01AFA800 /* SlackTextViewController.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SlackTextViewController.xcconfig; sourceTree = ""; }; - 1BE6492EF8EDB148139B49E96A365298 /* MessageStream.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageStream.swift; path = WebimClientLibrary/MessageStream.swift; sourceTree = ""; }; - 1D9370B508D0493EBA8A10B99C825E26 /* UInt32.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UInt32.swift; sourceTree = ""; }; - 1E7C41FF27BC65BD8A082EE7D6DFBCB6 /* fts3_tokenizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fts3_tokenizer.h; path = Sources/SQLiteObjc/fts3_tokenizer.h; sourceTree = ""; }; - 1FBD1628B05EBA4AFA2FA943EBE83E39 /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Source/ConstraintOffsetTarget.swift; sourceTree = ""; }; - 2014331447201D489E7F8B2178A4CED2 /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = Sources/SQLite/Core/Errors.swift; sourceTree = ""; }; - 21E7CD506292AD43E31BAB7527070AD6 /* PopupDialog-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PopupDialog-prefix.pch"; sourceTree = ""; }; - 23468802FA8FB875EC559DE300D8AEB5 /* Setter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Setter.swift; path = Sources/SQLite/Typed/Setter.swift; sourceTree = ""; }; - 23540EBC02B4CDAC0FC39B408311CBF0 /* SLKTextInputbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SLKTextInputbar.m; path = Source/SLKTextInputbar.m; sourceTree = ""; }; - 23C9CB269996E5AAF073C5F5636F096F /* Pods-WebimClientLibrary_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-WebimClientLibrary_Tests-umbrella.h"; sourceTree = ""; }; - 2622391C91F5B6214B33023DCD260A62 /* Pods-WebimClientLibrary_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-WebimClientLibrary_Tests-frameworks.sh"; sourceTree = ""; }; - 26241D6FD7DC6DF93EF4AB6991B9F771 /* PopupDialog.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = PopupDialog.modulemap; sourceTree = ""; }; - 275ADDC61AB76931E634684AB15BF0A1 /* DepartmentFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DepartmentFactory.swift; sourceTree = ""; }; - 27A99E429CFF8B3AACFDDAE81E8E07D7 /* DateAndTimeFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateAndTimeFunctions.swift; path = Sources/SQLite/Typed/DateAndTimeFunctions.swift; sourceTree = ""; }; - 27AC9AB26C6035F63C7DEB7494C45D3A /* SQLite.swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-prefix.pch"; sourceTree = ""; }; - 2B391643705AE625944E65B46E68AA52 /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Sources/SQLite/Typed/Expression.swift; sourceTree = ""; }; - 2BDF424E8F4B8350C171B707D40E67B8 /* SLKTypingIndicatorProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SLKTypingIndicatorProtocol.h; path = Source/SLKTypingIndicatorProtocol.h; sourceTree = ""; }; - 2C342D50880096E16DEE77520817A72E /* SLKUIConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SLKUIConstants.h; path = Source/SLKUIConstants.h; sourceTree = ""; }; - 2DBD18B64CC7D939ECB27D7784B39754 /* SLKTextView+SLKAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SLKTextView+SLKAdditions.h"; path = "Source/SLKTextView+SLKAdditions.h"; sourceTree = ""; }; - 2DFB19BF17E22E5E8D00A3D8B2A4B65C /* DeltaItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeltaItem.swift; sourceTree = ""; }; - 2EFCCE4F8D8906F8D5F76CA8AE894C87 /* SnapKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.xcconfig; sourceTree = ""; }; - 2F919A175990F97BCDBDE83420483623 /* Pods-WebimClientLibrary_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-WebimClientLibrary_Tests.release.xcconfig"; sourceTree = ""; }; - 3242238072AD02323A0499BE3422F4F8 /* OnlineStatusItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = OnlineStatusItem.swift; sourceTree = ""; }; - 33B9D4FAC1A7C5B3F38BED0585AF2632 /* Pods-WebimClientLibrary_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-WebimClientLibrary_Example-acknowledgements.plist"; sourceTree = ""; }; - 33EBB768A6F587EE78D14B9982DD1C99 /* DeltaCallback.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeltaCallback.swift; sourceTree = ""; }; - 33F60BC55DF51EEFB71240CBCA412ED0 /* UIColor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIColor.swift; sourceTree = ""; }; - 35064B13F956BA1FA962ABE2A52192CA /* CosmosDefaultSettings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CosmosDefaultSettings.swift; path = Cosmos/CosmosDefaultSettings.swift; sourceTree = ""; }; - 35E596152ADD915D8BD53033E5834584 /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Source/ConstraintRelatableTarget.swift; sourceTree = ""; }; - 361203BA40196D60F8B7297AC8188F57 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 365F83154629BD47C328EC8207E30F78 /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Source/Debugging.swift; sourceTree = ""; }; - 39EBAD471601B480F694A6117222F362 /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Source/ConstraintDescription.swift; sourceTree = ""; }; - 3AE3CE47E298A5486AC08E1AE80FA32E /* PopupDialogContainerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PopupDialogContainerView.swift; path = PopupDialog/Classes/PopupDialogContainerView.swift; sourceTree = ""; }; - 3B8C9A3A62FCF8E8D51A89FF3159ED4D /* Crashlytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Crashlytics.h; path = iOS/Crashlytics.framework/Headers/Crashlytics.h; sourceTree = ""; }; - 3D0693791EE1FF9F7A7FBA622466950F /* SQLite.swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-umbrella.h"; sourceTree = ""; }; - 3DAE32AED11C1788D3D40B240179ABC4 /* FileParametersItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FileParametersItem.swift; sourceTree = ""; }; - 3DE1F11718C901A07CFD427BD194D858 /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Source/ConstraintLayoutGuide+Extensions.swift"; sourceTree = ""; }; - 3E1657D49F34C96846D1FA55302BE31A /* SLKTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SLKTextView.h; path = Source/SLKTextView.h; sourceTree = ""; }; - 41E92E8C07D5B2F02E47A0127C96D841 /* SLKTypingIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SLKTypingIndicatorView.m; path = Source/SLKTypingIndicatorView.m; sourceTree = ""; }; - 424064D2E146A3B86BE494CCFEFB13EE /* AbstractRequestLoop.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AbstractRequestLoop.swift; sourceTree = ""; }; - 428FE0BAACC1D8E6E684DE697C79B180 /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Sources/SQLite/Typed/Operators.swift; sourceTree = ""; }; - 4375DF2C2EEB6B5F2F0774A75C331709 /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Source/ConstraintView.swift; sourceTree = ""; }; - 441EEAF33DDB2A66F3A5FB470B679E64 /* Cosmos-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Cosmos-umbrella.h"; sourceTree = ""; }; - 44ABF483FEB8DBFFA207EB62EA0A60F7 /* Pods-WebimClientLibrary_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-WebimClientLibrary_Example-frameworks.sh"; sourceTree = ""; }; - 45734B5573624C3BF0014DE3A678C722 /* CosmosLayers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CosmosLayers.swift; path = Cosmos/CosmosLayers.swift; sourceTree = ""; }; - 463223D08135539339108546B8852D5F /* Pods-WebimClientLibrary_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-WebimClientLibrary_Tests.modulemap"; sourceTree = ""; }; - 46DC90CA6AB31326B645D490D36F360D /* CosmosSize.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CosmosSize.swift; path = Cosmos/CosmosSize.swift; sourceTree = ""; }; - 473D1F55471229ADC88FB88A6A14AA83 /* WebimClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WebimClient.swift; sourceTree = ""; }; - 47A5C32AA9C9B2118090465607BF42D7 /* CLSLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSLogging.h; path = iOS/Crashlytics.framework/Headers/CLSLogging.h; sourceTree = ""; }; - 486C240F9A27DDB9E0B2DAD55FC4EBAB /* WebimRemoteNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebimRemoteNotification.swift; path = WebimClientLibrary/WebimRemoteNotification.swift; sourceTree = ""; }; - 48740EC71FBEF2D78841DBED6641CE48 /* RatingItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RatingItem.swift; sourceTree = ""; }; - 4BA2BB6E83604490D6997926386668F6 /* Cosmos.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Cosmos.modulemap; sourceTree = ""; }; - 4DB039E47DCDEF37A37FC345CF6E4E00 /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Source/ConstraintMakerEditable.swift; sourceTree = ""; }; - 4E97FF4DCF2C742492CAF208A5A57E4C /* WebimRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WebimRequest.swift; sourceTree = ""; }; - 4EAB6F1595655C26A2D14C8CDA815B21 /* SlackTextViewController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SlackTextViewController-prefix.pch"; sourceTree = ""; }; - 4FDD1338B037FEFD772B3283D5A1AE8D /* SessionParametersListener.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SessionParametersListener.swift; sourceTree = ""; }; - 50AE43DCF31E0AAAF1C38A86666EB441 /* Value.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Value.swift; path = Sources/SQLite/Core/Value.swift; sourceTree = ""; }; - 51763A3FC4BC6D4B3BF8F59647C04B9E /* WebimSessionImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WebimSessionImpl.swift; sourceTree = ""; }; - 520FA0FAB92C60049AEC618B86BA9387 /* Connection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Connection.swift; path = Sources/SQLite/Core/Connection.swift; sourceTree = ""; }; - 52595AB53ADE814912E6AF0F39689999 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 53C0C139832A4ABB53099261AC7F9527 /* Fabric.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Fabric.h; path = iOS/Fabric.framework/Headers/Fabric.h; sourceTree = ""; }; - 53F5BBEFD90D802D74EC71D0366F81B4 /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Source/UILayoutSupport+Extensions.swift"; sourceTree = ""; }; - 5461A01E462C46F9BF155B773265EB47 /* SQLiteHistoryStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SQLiteHistoryStorage.swift; sourceTree = ""; }; - 556D2E20FAFCEAEB67F3CC2FC303643F /* AuthorizationData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthorizationData.swift; sourceTree = ""; }; - 574DA971889D27700C255D23FB009E67 /* AccessChecker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccessChecker.swift; sourceTree = ""; }; - 5796439079F1037FB7BA9A17DF14C526 /* SLKInputAccessoryView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SLKInputAccessoryView.m; path = Source/SLKInputAccessoryView.m; sourceTree = ""; }; - 589CDB8EE66225B61D953B5B2130BB1B /* CosmosAccessibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CosmosAccessibility.swift; path = Cosmos/CosmosAccessibility.swift; sourceTree = ""; }; - 59D6646DF99628AAB8B30829DB393FA4 /* SLKTextViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SLKTextViewController.h; path = Source/SLKTextViewController.h; sourceTree = ""; }; - 5AF576B4B964A0C4607573E1247EE26E /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Source/ConstraintView+Extensions.swift"; sourceTree = ""; }; - 5B7EE681B87D8AAF1BF5016B46319D63 /* WebimClientLibrary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = WebimClientLibrary.framework; path = WebimClientLibrary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5E9951E0E06C067364D4A49099B53BEA /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Source/ConstraintLayoutSupportDSL.swift; sourceTree = ""; }; - 5FA97BBF09804ACE1BCF879C7A92F76C /* UIViewController+Visibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIViewController+Visibility.swift"; path = "PopupDialog/Classes/UIViewController+Visibility.swift"; sourceTree = ""; }; - 62A72ABAC306489335A995A96B554709 /* SLKTextInput.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SLKTextInput.h; path = Source/SLKTextInput.h; sourceTree = ""; }; - 6314DC439A00AF1A001EDD2AE1178632 /* SQLite-Bridging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SQLite-Bridging.m"; path = "Sources/SQLiteObjc/SQLite-Bridging.m"; sourceTree = ""; }; - 63716EFE92E8E8A8E9C48A5A13CB76DE /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Source/ConstraintMakerFinalizable.swift; sourceTree = ""; }; - 63BA50E91B4381486E26B0365B635B0D /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = ""; }; - 6426622D04E20EA925E2627C7F3F0C11 /* SQLite.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SQLite.framework; path = SQLite.swift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 64FF9394922483DDA5448657B56E6E4E /* Pods-WebimClientLibrary_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-WebimClientLibrary_Example.modulemap"; sourceTree = ""; }; - 65C3FED974F91A0222043C47CFAF00B8 /* UIScrollView+SLKAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+SLKAdditions.m"; path = "Source/UIScrollView+SLKAdditions.m"; sourceTree = ""; }; - 65C6B1DB7FD2FDEA3527CA95DCD29E7D /* PopupDialogOverlayView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PopupDialogOverlayView.swift; path = PopupDialog/Classes/PopupDialogOverlayView.swift; sourceTree = ""; }; - 65CBAECCE3C2CDB4BD5A332A08CA6766 /* Pods-WebimClientLibrary_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-WebimClientLibrary_Tests-resources.sh"; sourceTree = ""; }; - 66297257B46A0B04E1F0D23851BF3FB9 /* StarFillMode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StarFillMode.swift; path = Cosmos/StarFillMode.swift; sourceTree = ""; }; - 664AC0A85E99720C015D8B7E8FAF5AE8 /* ANSCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ANSCompatibility.h; path = iOS/Crashlytics.framework/Headers/ANSCompatibility.h; sourceTree = ""; }; - 664E4FAF65FE576ABE814C9B4373ACF1 /* MessageTrackerImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessageTrackerImpl.swift; sourceTree = ""; }; - 66FF158F5D045BCF7312B62F4BD7F86C /* Pods-WebimClientLibrary_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-WebimClientLibrary_Example-resources.sh"; sourceTree = ""; }; - 674A84FEFE228BD6D26EDC0DC2768E99 /* CosmosRating.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CosmosRating.swift; path = Cosmos/CosmosRating.swift; sourceTree = ""; }; - 68A778D4E523D12A12C64934A17B9F36 /* Query.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Query.swift; path = Sources/SQLite/Typed/Query.swift; sourceTree = ""; }; - 68DFF15284ED58C4872C8F7F7551A74A /* OperatorItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = OperatorItem.swift; sourceTree = ""; }; - 69FBC5329532C7920789EBD5112032F9 /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Source/ConstraintInsets.swift; sourceTree = ""; }; - 6B6B79F4DA41D5130904FD456FE22113 /* PopupDialogDefaultViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PopupDialogDefaultViewController.swift; path = PopupDialog/Classes/PopupDialogDefaultViewController.swift; sourceTree = ""; }; - 6C1F684EDBA435076F36F46FD1CA37AA /* CosmosView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CosmosView.swift; path = Cosmos/CosmosView.swift; sourceTree = ""; }; - 6FE020505CE6ECF61DC9692772335DF8 /* RTree.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RTree.swift; path = Sources/SQLite/Extensions/RTree.swift; sourceTree = ""; }; - 701B1077AA9ABDCA06C1D36D0B20FD0B /* TransitionAnimator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransitionAnimator.swift; path = PopupDialog/Classes/TransitionAnimator.swift; sourceTree = ""; }; - 74245141AFF147861EEF0E6E4DDC6BFE /* ClientSideID.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClientSideID.swift; sourceTree = ""; }; - 748EC9667F598F615C648373AC6A38C1 /* DepartmentImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DepartmentImpl.swift; sourceTree = ""; }; - 753C10651B46B038EB66F243787DC617 /* WebimClientLibrary.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = WebimClientLibrary.xcconfig; sourceTree = ""; }; - 754FCD497F6F3304F104C8E40D115A5B /* WebimClientLibrary-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "WebimClientLibrary-dummy.m"; sourceTree = ""; }; - 75C56EE14CECF6E9521747F534561174 /* Int.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Int.swift; sourceTree = ""; }; - 7663A6AB1AAA074B75EAC8D69251B798 /* Pods-WebimClientLibrary_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-WebimClientLibrary_Example-acknowledgements.markdown"; sourceTree = ""; }; - 76B0F8B2A9EAF22095BFBEEF36FD2937 /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Source/ConstraintPriority.swift; sourceTree = ""; }; - 7713FFF549B559D0D25EC63F35B37D48 /* PopupDialog.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PopupDialog.xcconfig; sourceTree = ""; }; - 77C15577D727B197B824E1FB659901D1 /* Pods-WebimClientLibrary_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-WebimClientLibrary_Tests-acknowledgements.plist"; sourceTree = ""; }; - 794782EEF80522A6D607C066166DFC58 /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Source/ConstraintAttributes.swift; sourceTree = ""; }; - 799A957762BB118D419942064F856D37 /* Department.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Department.swift; path = WebimClientLibrary/Department.swift; sourceTree = ""; }; - 7BF4D0C968280B1FEC1BE1681523B823 /* Blob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Blob.swift; path = Sources/SQLite/Core/Blob.swift; sourceTree = ""; }; - 7DD0DF542C4250DAAA403FC160A5A3BF /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Source/LayoutConstraint.swift; sourceTree = ""; }; - 7DF24728930842F475EFA07CED5227D9 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; - 7E05B0AB2A158BE0AED146D9CE9656DB /* CoreFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CoreFunctions.swift; path = Sources/SQLite/Typed/CoreFunctions.swift; sourceTree = ""; }; - 7F1C12BE07902C611C23DE45A04DE3C0 /* SLKTextViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SLKTextViewController.m; path = Source/SLKTextViewController.m; sourceTree = ""; }; - 7F9CE38BF060921C9A191B0C55196638 /* MessageImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessageImpl.swift; sourceTree = ""; }; - 812B6CD93226E9E8F4A69539560951E2 /* DeltaRequestLoop.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeltaRequestLoop.swift; sourceTree = ""; }; - 814A8AF4CE81F01C13A95BD22BA425CF /* CLSAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSAttributes.h; path = iOS/Crashlytics.framework/Headers/CLSAttributes.h; sourceTree = ""; }; - 83519CCDAB486B59FE551AF5C1D1DD75 /* UIView+Animations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Animations.swift"; path = "PopupDialog/Classes/UIView+Animations.swift"; sourceTree = ""; }; - 8387904866322F009CB5C5264A098B0D /* InteractiveTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InteractiveTransition.swift; path = PopupDialog/Classes/InteractiveTransition.swift; sourceTree = ""; }; - 850A6435920A6F9CF58A8D8CE687D183 /* Collection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Collection.swift; sourceTree = ""; }; - 862AC483DDA1ABA46DF332A2C1E7B123 /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Source/ConstraintPriorityTarget.swift; sourceTree = ""; }; - 8631E31F47FE2F38449A1FB83F991806 /* Pods-WebimClientLibrary_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-WebimClientLibrary_Tests.debug.xcconfig"; sourceTree = ""; }; - 8927D1A5A5D6E9A5F14E8C8F5509B527 /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Source/ConstraintLayoutGuide.swift; sourceTree = ""; }; - 89C66CDC24D923C2764C4ABF2A5F1A39 /* UIView+SLKAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+SLKAdditions.h"; path = "Source/UIView+SLKAdditions.h"; sourceTree = ""; }; - 8D3650CB77674EF197916E050A152E59 /* Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Helpers.swift; path = Sources/SQLite/Helpers.swift; sourceTree = ""; }; - 8F6B0CAAD2E7AE71CCB59A4E0868433D /* ConstraintMakerPriortizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPriortizable.swift; path = Source/ConstraintMakerPriortizable.swift; sourceTree = ""; }; - 9058DD2369437C210BD80C50F70DE0CF /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Source/ConstraintMakerRelatable.swift; sourceTree = ""; }; - 916001497C7F1413D1405BF3113FB8BD /* ChatItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChatItem.swift; sourceTree = ""; }; - 91B6B8F69DA629C6A3D7B9E1F5BF6DD5 /* Pods-WebimClientLibrary_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-WebimClientLibrary_Tests-acknowledgements.markdown"; sourceTree = ""; }; - 9208B4B52BDD1CA15A72FD72B2E3EF82 /* InternalUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = InternalUtils.swift; sourceTree = ""; }; - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9465A51D5A1C6097AC306AE5E029796E /* Webim.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Webim.swift; path = WebimClientLibrary/Webim.swift; sourceTree = ""; }; - 94738B2F820AFDC3085F59678AE16A32 /* WebimInternalLogger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WebimInternalLogger.swift; sourceTree = ""; }; - 976FEFC2BAF7806C07EDF4371B51425B /* MessageListener.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageListener.swift; path = WebimClientLibrary/MessageListener.swift; sourceTree = ""; }; - 97E1BB7405A05BA96F5E47AE3E3606BA /* LocationSettingsImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LocationSettingsImpl.swift; sourceTree = ""; }; - 983646B23C603BEE80E6377080B0D2AF /* CLSReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSReport.h; path = iOS/Crashlytics.framework/Headers/CLSReport.h; sourceTree = ""; }; - 98B06FBFFF03146BA6B54D94A84437C5 /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Source/ConstraintDSL.swift; sourceTree = ""; }; - 9AD66C3FE6FB01768ECB85396B708305 /* PopupDialogDefaultView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PopupDialogDefaultView.swift; path = PopupDialog/Classes/PopupDialogDefaultView.swift; sourceTree = ""; }; - 9D0C05557781C5379C725BBB2973421E /* PresentationManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PresentationManager.swift; path = PopupDialog/Classes/PresentationManager.swift; sourceTree = ""; }; - 9D3BDD6C00F7116CCFFA9867453B329F /* FXBlurView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FXBlurView.m; path = PopupDialog/Classes/FXBlurView.m; sourceTree = ""; }; - 9E1F93690F6CA2E6B9029C8863DDF46F /* WebimActions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WebimActions.swift; sourceTree = ""; }; - 9E66ED366078205E23E6999EBF0EB4D6 /* WebimClientLibrary.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; path = WebimClientLibrary.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9E77CC482E52D09A7B7C7111BEFBB5DF /* SLKTextInput+Implementation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SLKTextInput+Implementation.m"; path = "Source/SLKTextInput+Implementation.m"; sourceTree = ""; }; - 9EAB3D37248165415C063F97954B9467 /* StarLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StarLayer.swift; path = Cosmos/StarLayer.swift; sourceTree = ""; }; - 9EB0B529568CD1CAC40E0F6EBA1D4C94 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A193CC2710805DA939D32EC09565ACCB /* HistoryBeforeResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HistoryBeforeResponse.swift; sourceTree = ""; }; - A19D41CC83E90795ED8C2844D85DC4FF /* LocationSettingsHolder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LocationSettingsHolder.swift; sourceTree = ""; }; - A258925EDFD70F31A17398FEDCEDA7C3 /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = ""; }; - A2B9FE92B60ADD3BC1A9F02F605DB108 /* Message.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Message.swift; path = WebimClientLibrary/Message.swift; sourceTree = ""; }; - A39D8A7D919E04BCFAB21036A1AC4DC5 /* Pods-WebimClientLibrary_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-WebimClientLibrary_Example-umbrella.h"; sourceTree = ""; }; - A4183B44B9110396705711FCF422C303 /* SLKTextView+SLKAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SLKTextView+SLKAdditions.m"; path = "Source/SLKTextView+SLKAdditions.m"; sourceTree = ""; }; - A4461E947E27C56D20CE57FE9D3729E3 /* Answers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Answers.h; path = iOS/Crashlytics.framework/Headers/Answers.h; sourceTree = ""; }; - A541555875AD8A3D9028E22DB39BE37D /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = ""; }; - A5C6B603C8647D2F917E828B2834BD16 /* TransitionAnimations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransitionAnimations.swift; path = PopupDialog/Classes/TransitionAnimations.swift; sourceTree = ""; }; - A748B325C96F357F4CB1EE5A92482766 /* UIView+SLKAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+SLKAdditions.m"; path = "Source/UIView+SLKAdditions.m"; sourceTree = ""; }; - A81F48F4145E840A2F3B171694AC483A /* WebimClientLibrary.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = WebimClientLibrary.modulemap; sourceTree = ""; }; - AAE8BD38ECC431D4935FFEC0AD1F1DD6 /* UIScrollView+SLKAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+SLKAdditions.h"; path = "Source/UIScrollView+SLKAdditions.h"; sourceTree = ""; }; - AB4AE55286E3B1E8445C6EA19AE51119 /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Source/ConstraintInsetTarget.swift; sourceTree = ""; }; - AB8E60388D4FAB9EE5502C7BCD60E6B2 /* SQLite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SQLite.h; path = Sources/SQLite/SQLite.h; sourceTree = ""; }; - AE098FA70E560168BB99945C731A31E5 /* HistoryID.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HistoryID.swift; sourceTree = ""; }; - AE6509574FFFEBCF09E63C3F0A868B2A /* SQLite.swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SQLite.swift-dummy.m"; sourceTree = ""; }; - B01822C249BE61FF36B8D93944E4FEF9 /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Source/ConstraintMakerExtendable.swift; sourceTree = ""; }; - B16B0DDEECECCEACBF03FA417D4C0D7E /* WebimClientLibrary-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "WebimClientLibrary-prefix.pch"; sourceTree = ""; }; - B237068A8D72FEFF28592B7B49449CCD /* UIResponder+SLKAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIResponder+SLKAdditions.h"; path = "Source/UIResponder+SLKAdditions.h"; sourceTree = ""; }; - B31BB16AC664F4594A4DF5E537276CDE /* CosmosText.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CosmosText.swift; path = Cosmos/CosmosText.swift; sourceTree = ""; }; - B527214951BD11F916FF3930927320F5 /* Pods-WebimClientLibrary_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-WebimClientLibrary_Example.release.xcconfig"; sourceTree = ""; }; - B57D6E90DD0A4D86D4D7007D4C5B72C0 /* PopupDialog.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = PopupDialog.framework; path = PopupDialog.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B6511D19F28E61BE5EB298D7D7CC35D3 /* CustomFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomFunctions.swift; path = Sources/SQLite/Typed/CustomFunctions.swift; sourceTree = ""; }; - B65139E38C30F90DFA787ECA784C2DC2 /* FatalErrorHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FatalErrorHandler.swift; path = WebimClientLibrary/FatalErrorHandler.swift; sourceTree = ""; }; - B7EFE3E2822F1C37ACE1F18135E0818D /* SlackTextViewController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SlackTextViewController-dummy.m"; sourceTree = ""; }; - B82EC87F482F8E63EFA80A3DF32D0C5D /* Collation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collation.swift; path = Sources/SQLite/Typed/Collation.swift; sourceTree = ""; }; - B94DB905432A1C4E89B011879CCF15EA /* HistoryStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HistoryStorage.swift; sourceTree = ""; }; - BA4C13B6D142392F31DCF6B47BB344DD /* Array.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Array.swift; sourceTree = ""; }; - BBE7FD1D4E433F3FAAB93E1CF24A74E4 /* WebimClientLibrary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WebimClientLibrary.h; path = WebimClientLibrary/WebimClientLibrary.h; sourceTree = ""; }; - BC632DDED7CF1BF1421FE8E7F0FFE651 /* MessageToSend.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessageToSend.swift; sourceTree = ""; }; - BCFE11EDF8ED6FB356F670929F45B7B7 /* HistorySinceResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HistorySinceResponse.swift; sourceTree = ""; }; - BF1A0160861949970986DC345DCE9ECB /* Cosmos-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Cosmos-dummy.m"; sourceTree = ""; }; - C004A8FC4B6BB5B475A1EFB306D86D19 /* OperatorImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = OperatorImpl.swift; sourceTree = ""; }; - C2BF07B73FDBB90C4C1A8897F9521A83 /* CosmosTouch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CosmosTouch.swift; path = Cosmos/CosmosTouch.swift; sourceTree = ""; }; - C2CBD32AFB9A00E3D09182E09197C258 /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Fabric.framework; path = iOS/Fabric.framework; sourceTree = ""; }; - C2F953AC0AC02DB901427DCF8BBE5451 /* PopupDialogDefaultButtons.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PopupDialogDefaultButtons.swift; path = PopupDialog/Classes/PopupDialogDefaultButtons.swift; sourceTree = ""; }; - C39D88E88CFF4C159390622BA985BE8B /* SLKInputAccessoryView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SLKInputAccessoryView.h; path = Source/SLKInputAccessoryView.h; sourceTree = ""; }; - C45D11EC7E8FF92719A0E1C630BE12DE /* ProvidedVisitorFields.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ProvidedVisitorFields.swift; sourceTree = ""; }; - C470023B540C860A6BFF2A528F003DB5 /* WebimLogger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebimLogger.swift; path = WebimClientLibrary/WebimLogger.swift; sourceTree = ""; }; - C5461A6FEECDCABF147D05EDA4A2FB72 /* Pods_WebimClientLibrary_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_WebimClientLibrary_Example.framework; path = "Pods-WebimClientLibrary_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - C71BB5FD3648A1C88510492D54EFEBF5 /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Source/ConstraintConfig.swift; sourceTree = ""; }; - C8E8B75EAA68CC151FB6616E545A864A /* SQLite-Bridging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SQLite-Bridging.h"; path = "Sources/SQLiteObjc/include/SQLite-Bridging.h"; sourceTree = ""; }; - C98470DA861742FA94D3E549FF68530A /* SLKTypingIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SLKTypingIndicatorView.h; path = Source/SLKTypingIndicatorView.h; sourceTree = ""; }; - C9DC431C1F0581F2DBF3B18B35028A1A /* CosmosSettings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CosmosSettings.swift; path = Cosmos/CosmosSettings.swift; sourceTree = ""; }; - CA6689B5BD274AAAA1CE7E90FA4714B2 /* CompletionHandlerWrappers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CompletionHandlerWrappers.swift; sourceTree = ""; }; - CB846EE4ADDB3DA5851E05625D7CAF99 /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = ""; }; - CC537E206030C9AC6FCF246EA9F4E15A /* Operator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operator.swift; path = WebimClientLibrary/Operator.swift; sourceTree = ""; }; - CCDE4C39116B4AAE6604CCAEDDDE9E00 /* PopupDialogButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PopupDialogButton.swift; path = PopupDialog/Classes/PopupDialogButton.swift; sourceTree = ""; }; - CDC09A6794593E514725D5D5A0CC6C71 /* WebimRemoteNotificationImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WebimRemoteNotificationImpl.swift; sourceTree = ""; }; - CFB0283A14F19FA09E6EFCD689CD04CE /* Cosmos-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Cosmos-prefix.pch"; sourceTree = ""; }; - D04055536F5FE91CD5501A087E7DE968 /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Source/Typealiases.swift; sourceTree = ""; }; - D0590A7FFF11C65F879FF56C5905285A /* Pods_WebimClientLibrary_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_WebimClientLibrary_Tests.framework; path = "Pods-WebimClientLibrary_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - D0FAB3E46C608770C483EA96E3773CCE /* Cosmos.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Cosmos.xcconfig; sourceTree = ""; }; - D412AD82B46FB3337211280A79EE1978 /* UIResponder+SLKAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIResponder+SLKAdditions.m"; path = "Source/UIResponder+SLKAdditions.m"; sourceTree = ""; }; - D424D8D17487CF77887C3C014EF9BF2C /* PopupDialog-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PopupDialog-umbrella.h"; sourceTree = ""; }; - D4866F233682791E792A409EDAFDC329 /* SQLite.swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SQLite.swift.modulemap; sourceTree = ""; }; - D4F91B76119F30A014A9F3AE4F30B835 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D5C5104C50B5210EE6672486CD7728BD /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Source/ConstraintLayoutGuideDSL.swift; sourceTree = ""; }; - D63D3A5BBCD13F26961A54C552734BFB /* PresentationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PresentationController.swift; path = PopupDialog/Classes/PresentationController.swift; sourceTree = ""; }; - D6F8177EE6789172507581ADFBC158FA /* SQLite.swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SQLite.swift.xcconfig; sourceTree = ""; }; - D737EAF097E5B5581F3F28349AD1E978 /* SLKTextInputbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SLKTextInputbar.h; path = Source/SLKTextInputbar.h; sourceTree = ""; }; - D88C19AC19FDC7DE1A90CB39512B317D /* WebimError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebimError.swift; path = WebimClientLibrary/WebimError.swift; sourceTree = ""; }; - D9A24F0FB73BA16952E0A2FD6AA94750 /* Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Foundation.swift; path = Sources/SQLite/Foundation.swift; sourceTree = ""; }; - DB44F0C85553660857F351B59660E399 /* SQLite.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SQLite.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DB8325F92B3D087D71E5617B6D2D29D7 /* CosmosLayerHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CosmosLayerHelper.swift; path = Cosmos/CosmosLayerHelper.swift; sourceTree = ""; }; - DC2A05AC20F044D9647C8FA90450C208 /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Source/ConstraintItem.swift; sourceTree = ""; }; - DCEDB31AD7D4CEA880910146D1DC3811 /* PopupDialog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PopupDialog.swift; path = PopupDialog/Classes/PopupDialog.swift; sourceTree = ""; }; - DE53FBAE4518028FA72FAEF79BA5A571 /* RemoteHistoryProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RemoteHistoryProvider.swift; sourceTree = ""; }; - DFC124D9576482D972503ACCD3C48F86 /* String.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = String.swift; sourceTree = ""; }; - E334599F24531CF54B4CDF423BCD705A /* ProvidedAuthorizationTokenStateListener.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProvidedAuthorizationTokenStateListener.swift; path = WebimClientLibrary/ProvidedAuthorizationTokenStateListener.swift; sourceTree = ""; }; - E358DE4A92DB5E6E4AD8CC4DDB695938 /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapKit.framework; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E3EA98390ACC5C7B7679C0F507EA0F3E /* InternalErrorListener.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = InternalErrorListener.swift; sourceTree = ""; }; - E44FDED000CFEA5E8997684166E94A14 /* HistoryMetaInformationStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HistoryMetaInformationStorage.swift; sourceTree = ""; }; - E61B74DC1E23B0D76F220BAA27F4D849 /* ExecIfNotDestroyedHandlerExecutor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExecIfNotDestroyedHandlerExecutor.swift; sourceTree = ""; }; - E875FDE45DED7A69F1967B35A3AB34AC /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Source/ConstraintLayoutSupport.swift; sourceTree = ""; }; - E9ADE5CC421AA8C62E071B1CC4F626AF /* MessageTracker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageTracker.swift; path = WebimClientLibrary/MessageTracker.swift; sourceTree = ""; }; - EAF4CB6D73818A89D9D94E40D5188687 /* Pods-WebimClientLibrary_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-WebimClientLibrary_Example-dummy.m"; sourceTree = ""; }; - EB2B3B57C4BDFBED302FD55C3C496460 /* VisitorItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = VisitorItem.swift; sourceTree = ""; }; - EB7E6F65C54F9DA6869D9EDC041125EC /* Coding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Coding.swift; path = Sources/SQLite/Typed/Coding.swift; sourceTree = ""; }; - EC653149D8C812AA5E52B48F2DD9498E /* UIImageView+Calculations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImageView+Calculations.swift"; path = "PopupDialog/Classes/UIImageView+Calculations.swift"; sourceTree = ""; }; - EE1668116AC3687EC96F741765F56E22 /* FTS4.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS4.swift; path = Sources/SQLite/Extensions/FTS4.swift; sourceTree = ""; }; - EF3AE431C2755F726910335443B22A4D /* FABAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FABAttributes.h; path = iOS/Fabric.framework/Headers/FABAttributes.h; sourceTree = ""; }; - F0555D753B0E9060B817298EE0E762A7 /* SlackTextViewController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SlackTextViewController.framework; path = SlackTextViewController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F1BE798778A71FFBAC0A3F707F64868B /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Source/ConstraintMultiplierTarget.swift; sourceTree = ""; }; - F220E304B22DAE4253EC4F1C3165C028 /* WebimErrorImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WebimErrorImpl.swift; sourceTree = ""; }; - F2AD3B701744E1B73341944062B2919C /* FXBlurView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FXBlurView.h; path = PopupDialog/Classes/FXBlurView.h; sourceTree = ""; }; - F63138EEB9E10DBC2D1DDA9BCACA61C2 /* SlackTextViewController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SlackTextViewController.modulemap; sourceTree = ""; }; - F76DC2C907652127B4034C23D0EBC722 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - F8130E1042B3FA834B608E4E757DAF1E /* SlackTextViewController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SlackTextViewController-umbrella.h"; sourceTree = ""; }; - F87105350AE77591C8FEC5EA2C3F7190 /* Pods-WebimClientLibrary_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-WebimClientLibrary_Tests-dummy.m"; sourceTree = ""; }; - FA8B33DCE33106F90A30A3202BCCDA76 /* MessageFactories.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessageFactories.swift; sourceTree = ""; }; - FADBE7CC7D4AAA3D8572476A7EA2631F /* CLSStackFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSStackFrame.h; path = iOS/Crashlytics.framework/Headers/CLSStackFrame.h; sourceTree = ""; }; - FBEDC5C6F2A5CBB16A3A72B1B3BCD6AD /* RightToLeft.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RightToLeft.swift; path = Cosmos/Helpers/RightToLeft.swift; sourceTree = ""; }; - FD03B769FD977A4025C02108E374AC30 /* PopupDialog+Keyboard.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PopupDialog+Keyboard.swift"; path = "PopupDialog/Classes/PopupDialog+Keyboard.swift"; sourceTree = ""; }; - FE6F8E616FA96AE3FE2AADC952E629C0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FE9B210FE2EF8692B21BEEB1D7CBD887 /* MemoryHistoryStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MemoryHistoryStorage.swift; sourceTree = ""; }; - FF8580ECAD238587E0F5440EDAD11D6E /* CosmosTouchTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CosmosTouchTarget.swift; path = Cosmos/Helpers/CosmosTouchTarget.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 1FD566264E5B7DEA19C479A4F892AE24 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AEF719C625CF6D2B5F37F20BDF26F566 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2A226471F7884C9084FA2E8684AFD88C /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 05F6893B689CD4ED98CCB15EA8B84FCD /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4EF5B7A1EAEF7AAE1780E8EA9C5FC807 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 3AB236AD57AFEF156C2683CFAAE4B11A /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 65D5E7361A0EF5427197B00BEF2B1D5E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 356EB6A90D6B2BFD871A25BE01E39555 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 66D971B96F6044D20549D7BA17162992 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - BDBA1CC133E6171AC3542C6F2057C5AA /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8F6275C1E4765EE819AEC4293350D943 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1A243C994AC7D57D5D886C112569BC41 /* Foundation.framework in Frameworks */, - 068A9C50AE475FD02D471404CE055571 /* SQLite.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CEF9ECA3924E0DCA0FF55BB51B84D454 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4C05E79CF131466F774E980B5C700088 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DE4E72098AA87286A0DB0E88F71E55EE /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 752066C425262B6EFEC031718A5BBF93 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 05345C2AAE326B3D85361CF00B712995 /* Backend */ = { - isa = PBXGroup; - children = ( - 424064D2E146A3B86BE494CCFEFB13EE /* AbstractRequestLoop.swift */, - 574DA971889D27700C255D23FB009E67 /* AccessChecker.swift */, - 031A76851F5F9F83F68BBE2D84A11914 /* ActionRequestLoop.swift */, - 556D2E20FAFCEAEB67F3CC2FC303643F /* AuthorizationData.swift */, - 74245141AFF147861EEF0E6E4DDC6BFE /* ClientSideID.swift */, - 33EBB768A6F587EE78D14B9982DD1C99 /* DeltaCallback.swift */, - 812B6CD93226E9E8F4A69539560951E2 /* DeltaRequestLoop.swift */, - E61B74DC1E23B0D76F220BAA27F4D849 /* ExecIfNotDestroyedHandlerExecutor.swift */, - AE098FA70E560168BB99945C731A31E5 /* HistoryID.swift */, - E44FDED000CFEA5E8997684166E94A14 /* HistoryMetaInformationStorage.swift */, - B94DB905432A1C4E89B011879CCF15EA /* HistoryStorage.swift */, - E3EA98390ACC5C7B7679C0F507EA0F3E /* InternalErrorListener.swift */, - A19D41CC83E90795ED8C2844D85DC4FF /* LocationSettingsHolder.swift */, - 083F196AF47F7F9C0A3A1DA019D98BBC /* MemoryHistoryMetaInformationStorage.swift */, - FE9B210FE2EF8692B21BEEB1D7CBD887 /* MemoryHistoryStorage.swift */, - 0B50DF8265348B3DF6C66646ED143614 /* MessageComposingHandler.swift */, - 130D261D6D66B4EB871D63BB225AE684 /* MessageHolder.swift */, - BC632DDED7CF1BF1421FE8E7F0FFE651 /* MessageToSend.swift */, - C45D11EC7E8FF92719A0E1C630BE12DE /* ProvidedVisitorFields.swift */, - DE53FBAE4518028FA72FAEF79BA5A571 /* RemoteHistoryProvider.swift */, - 16AB9B6D895690822A693689EE57F20F /* SessionDestroyer.swift */, - 4FDD1338B037FEFD772B3283D5A1AE8D /* SessionParametersListener.swift */, - 5461A01E462C46F9BF155B773265EB47 /* SQLiteHistoryStorage.swift */, - 9E1F93690F6CA2E6B9029C8863DDF46F /* WebimActions.swift */, - 473D1F55471229ADC88FB88A6A14AA83 /* WebimClient.swift */, - 178C90AFB8090C6F91A16A6307B84C2C /* WebimInternalError.swift */, - 94738B2F820AFDC3085F59678AE16A32 /* WebimInternalLogger.swift */, - 4E97FF4DCF2C742492CAF208A5A57E4C /* WebimRequest.swift */, - 7C2C777D5E554FBB020A1013853E66F4 /* Items */, - D2517BA3FEDAD351280A0397178191DC /* Utilities */, - ); - name = Backend; - path = WebimClientLibrary/Backend; - sourceTree = ""; - }; - 0B5318934A8F5D6E1E300C4CF2DAD6BD /* Frameworks */ = { - isa = PBXGroup; - children = ( - 123BB0532A2810889D6942D8C0838937 /* Crashlytics.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 0C6F036241DC2567C45B54F9FBF9A07E /* Fabric */ = { - isa = PBXGroup; - children = ( - EF3AE431C2755F726910335443B22A4D /* FABAttributes.h */, - 53C0C139832A4ABB53099261AC7F9527 /* Fabric.h */, - 1354418EE61DAC0EF6EF89048B4DD2B5 /* Frameworks */, - ); - name = Fabric; - path = Fabric; - sourceTree = ""; - }; - 0D12F68CC78C58417909B9B3C3AC3CD2 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - EA25FE0D70AB56FA61FD0659E4455628 /* Pods-WebimClientLibrary_Example */, - 2300EE974EB027DF8D10FDA9834F67E0 /* Pods-WebimClientLibrary_Tests */, - ); - name = "Targets Support Files"; - sourceTree = ""; - }; - 0E9CC0217CE03B66912982F024F7C64D /* Frameworks */ = { - isa = PBXGroup; - children = ( - DB44F0C85553660857F351B59660E399 /* SQLite.framework */, - BD6E1B90AA08234791918BB0C2672022 /* iOS */, - ); - name = Frameworks; - sourceTree = ""; - }; - 1354418EE61DAC0EF6EF89048B4DD2B5 /* Frameworks */ = { - isa = PBXGroup; - children = ( - C2CBD32AFB9A00E3D09182E09197C258 /* Fabric.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 2300EE974EB027DF8D10FDA9834F67E0 /* Pods-WebimClientLibrary_Tests */ = { - isa = PBXGroup; - children = ( - 361203BA40196D60F8B7297AC8188F57 /* Info.plist */, - 463223D08135539339108546B8852D5F /* Pods-WebimClientLibrary_Tests.modulemap */, - 91B6B8F69DA629C6A3D7B9E1F5BF6DD5 /* Pods-WebimClientLibrary_Tests-acknowledgements.markdown */, - 77C15577D727B197B824E1FB659901D1 /* Pods-WebimClientLibrary_Tests-acknowledgements.plist */, - F87105350AE77591C8FEC5EA2C3F7190 /* Pods-WebimClientLibrary_Tests-dummy.m */, - 2622391C91F5B6214B33023DCD260A62 /* Pods-WebimClientLibrary_Tests-frameworks.sh */, - 65CBAECCE3C2CDB4BD5A332A08CA6766 /* Pods-WebimClientLibrary_Tests-resources.sh */, - 23C9CB269996E5AAF073C5F5636F096F /* Pods-WebimClientLibrary_Tests-umbrella.h */, - 8631E31F47FE2F38449A1FB83F991806 /* Pods-WebimClientLibrary_Tests.debug.xcconfig */, - 2F919A175990F97BCDBDE83420483623 /* Pods-WebimClientLibrary_Tests.release.xcconfig */, - ); - name = "Pods-WebimClientLibrary_Tests"; - path = "Target Support Files/Pods-WebimClientLibrary_Tests"; - sourceTree = ""; - }; - 4F04F5EF05B3CA4C518608B33CF778E7 /* Support Files */ = { - isa = PBXGroup; - children = ( - 4BA2BB6E83604490D6997926386668F6 /* Cosmos.modulemap */, - D0FAB3E46C608770C483EA96E3773CCE /* Cosmos.xcconfig */, - BF1A0160861949970986DC345DCE9ECB /* Cosmos-dummy.m */, - CFB0283A14F19FA09E6EFCD689CD04CE /* Cosmos-prefix.pch */, - 441EEAF33DDB2A66F3A5FB470B679E64 /* Cosmos-umbrella.h */, - FE6F8E616FA96AE3FE2AADC952E629C0 /* Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/Cosmos"; - sourceTree = ""; - }; - 4F7219C21B5C0BD731FF3045802743C0 /* SlackTextViewController */ = { - isa = PBXGroup; - children = ( - C39D88E88CFF4C159390622BA985BE8B /* SLKInputAccessoryView.h */, - 5796439079F1037FB7BA9A17DF14C526 /* SLKInputAccessoryView.m */, - 62A72ABAC306489335A995A96B554709 /* SLKTextInput.h */, - 9E77CC482E52D09A7B7C7111BEFBB5DF /* SLKTextInput+Implementation.m */, - D737EAF097E5B5581F3F28349AD1E978 /* SLKTextInputbar.h */, - 23540EBC02B4CDAC0FC39B408311CBF0 /* SLKTextInputbar.m */, - 3E1657D49F34C96846D1FA55302BE31A /* SLKTextView.h */, - 044895A375E387E5F5695591955EF1F2 /* SLKTextView.m */, - 2DBD18B64CC7D939ECB27D7784B39754 /* SLKTextView+SLKAdditions.h */, - A4183B44B9110396705711FCF422C303 /* SLKTextView+SLKAdditions.m */, - 59D6646DF99628AAB8B30829DB393FA4 /* SLKTextViewController.h */, - 7F1C12BE07902C611C23DE45A04DE3C0 /* SLKTextViewController.m */, - 2BDF424E8F4B8350C171B707D40E67B8 /* SLKTypingIndicatorProtocol.h */, - C98470DA861742FA94D3E549FF68530A /* SLKTypingIndicatorView.h */, - 41E92E8C07D5B2F02E47A0127C96D841 /* SLKTypingIndicatorView.m */, - 2C342D50880096E16DEE77520817A72E /* SLKUIConstants.h */, - B237068A8D72FEFF28592B7B49449CCD /* UIResponder+SLKAdditions.h */, - D412AD82B46FB3337211280A79EE1978 /* UIResponder+SLKAdditions.m */, - AAE8BD38ECC431D4935FFEC0AD1F1DD6 /* UIScrollView+SLKAdditions.h */, - 65C3FED974F91A0222043C47CFAF00B8 /* UIScrollView+SLKAdditions.m */, - 89C66CDC24D923C2764C4ABF2A5F1A39 /* UIView+SLKAdditions.h */, - A748B325C96F357F4CB1EE5A92482766 /* UIView+SLKAdditions.m */, - 5A9F5EA9276DB36C40552C9CEAEB8FE6 /* Support Files */, - ); - name = SlackTextViewController; - path = SlackTextViewController; - sourceTree = ""; - }; - 5370902B1A051C2D49E4D06B946D1C38 /* Pod */ = { - isa = PBXGroup; - children = ( - 14A604358BE60AC85BFECC4951F291C1 /* LICENSE */, - 7DF24728930842F475EFA07CED5227D9 /* README.md */, - 9E66ED366078205E23E6999EBF0EB4D6 /* WebimClientLibrary.podspec */, - ); - name = Pod; - sourceTree = ""; - }; - 5A26FB8026FC0797467C702191A258E1 /* Support Files */ = { - isa = PBXGroup; - children = ( - 9EB0B529568CD1CAC40E0F6EBA1D4C94 /* Info.plist */, - D4866F233682791E792A409EDAFDC329 /* SQLite.swift.modulemap */, - D6F8177EE6789172507581ADFBC158FA /* SQLite.swift.xcconfig */, - AE6509574FFFEBCF09E63C3F0A868B2A /* SQLite.swift-dummy.m */, - 27AC9AB26C6035F63C7DEB7494C45D3A /* SQLite.swift-prefix.pch */, - 3D0693791EE1FF9F7A7FBA622466950F /* SQLite.swift-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/SQLite.swift"; - sourceTree = ""; - }; - 5A9F5EA9276DB36C40552C9CEAEB8FE6 /* Support Files */ = { - isa = PBXGroup; - children = ( - 19BBC33E35927522DB4A5D5E3219048D /* Info.plist */, - F63138EEB9E10DBC2D1DDA9BCACA61C2 /* SlackTextViewController.modulemap */, - 1B13DDE51DE201948A4F370B01AFA800 /* SlackTextViewController.xcconfig */, - B7EFE3E2822F1C37ACE1F18135E0818D /* SlackTextViewController-dummy.m */, - 4EAB6F1595655C26A2D14C8CDA815B21 /* SlackTextViewController-prefix.pch */, - F8130E1042B3FA834B608E4E757DAF1E /* SlackTextViewController-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/SlackTextViewController"; - sourceTree = ""; - }; - 5BA3711370ECA7DC734E8E7A9F37FBEE /* Deltas */ = { - isa = PBXGroup; - children = ( - 2DFB19BF17E22E5E8D00A3D8B2A4B65C /* DeltaItem.swift */, - 184AE39EA003B696105AEF8FA304492C /* FullUpdate.swift */, - ); - name = Deltas; - path = Deltas; - sourceTree = ""; - }; - 665560399382CB071AAF9886BA066DC2 /* Extensions */ = { - isa = PBXGroup; - children = ( - BA4C13B6D142392F31DCF6B47BB344DD /* Array.swift */, - 850A6435920A6F9CF58A8D8CE687D183 /* Collection.swift */, - 0491AFDCF982959F9324FD8393C1BAC9 /* Dictionary.swift */, - 75C56EE14CECF6E9521747F534561174 /* Int.swift */, - DFC124D9576482D972503ACCD3C48F86 /* String.swift */, - 33F60BC55DF51EEFB71240CBCA412ED0 /* UIColor.swift */, - 1D9370B508D0493EBA8A10B99C825E26 /* UInt32.swift */, - ); - name = Extensions; - path = Extensions; - sourceTree = ""; - }; - 6792C73D30346037F1AD7859F8E2032A /* standard */ = { - isa = PBXGroup; - children = ( - 01C9F2839854B61F3FF5CE76CACFBB63 /* AggregateFunctions.swift */, - 7BF4D0C968280B1FEC1BE1681523B823 /* Blob.swift */, - EB7E6F65C54F9DA6869D9EDC041125EC /* Coding.swift */, - B82EC87F482F8E63EFA80A3DF32D0C5D /* Collation.swift */, - 520FA0FAB92C60049AEC618B86BA9387 /* Connection.swift */, - 7E05B0AB2A158BE0AED146D9CE9656DB /* CoreFunctions.swift */, - B6511D19F28E61BE5EB298D7D7CC35D3 /* CustomFunctions.swift */, - 27A99E429CFF8B3AACFDDAE81E8E07D7 /* DateAndTimeFunctions.swift */, - 2014331447201D489E7F8B2178A4CED2 /* Errors.swift */, - 2B391643705AE625944E65B46E68AA52 /* Expression.swift */, - D9A24F0FB73BA16952E0A2FD6AA94750 /* Foundation.swift */, - 1E7C41FF27BC65BD8A082EE7D6DFBCB6 /* fts3_tokenizer.h */, - EE1668116AC3687EC96F741765F56E22 /* FTS4.swift */, - 0AF48F4EEBF581512D4C679AF79F2DCF /* FTS5.swift */, - 8D3650CB77674EF197916E050A152E59 /* Helpers.swift */, - 428FE0BAACC1D8E6E684DE697C79B180 /* Operators.swift */, - 68A778D4E523D12A12C64934A17B9F36 /* Query.swift */, - 6FE020505CE6ECF61DC9692772335DF8 /* RTree.swift */, - 1175CEEE6A6CE2A67BC15FD5F5DA8303 /* Schema.swift */, - 23468802FA8FB875EC559DE300D8AEB5 /* Setter.swift */, - AB8E60388D4FAB9EE5502C7BCD60E6B2 /* SQLite.h */, - C8E8B75EAA68CC151FB6616E545A864A /* SQLite-Bridging.h */, - 6314DC439A00AF1A001EDD2AE1178632 /* SQLite-Bridging.m */, - 0C463204C55F6BD61A19CDAFD1E1F6CC /* Statement.swift */, - 50AE43DCF31E0AAAF1C38A86666EB441 /* Value.swift */, - ); - name = standard; - sourceTree = ""; - }; - 67E50522365B84DD2654604E9BD9B474 /* Cosmos */ = { - isa = PBXGroup; - children = ( - 589CDB8EE66225B61D953B5B2130BB1B /* CosmosAccessibility.swift */, - 35064B13F956BA1FA962ABE2A52192CA /* CosmosDefaultSettings.swift */, - DB8325F92B3D087D71E5617B6D2D29D7 /* CosmosLayerHelper.swift */, - 45734B5573624C3BF0014DE3A678C722 /* CosmosLayers.swift */, - 0EC15F1A566EBF7122EAC9D4CD61B73F /* CosmosLocalizedRating.swift */, - 674A84FEFE228BD6D26EDC0DC2768E99 /* CosmosRating.swift */, - C9DC431C1F0581F2DBF3B18B35028A1A /* CosmosSettings.swift */, - 46DC90CA6AB31326B645D490D36F360D /* CosmosSize.swift */, - B31BB16AC664F4594A4DF5E537276CDE /* CosmosText.swift */, - C2BF07B73FDBB90C4C1A8897F9521A83 /* CosmosTouch.swift */, - FF8580ECAD238587E0F5440EDAD11D6E /* CosmosTouchTarget.swift */, - 6C1F684EDBA435076F36F46FD1CA37AA /* CosmosView.swift */, - FBEDC5C6F2A5CBB16A3A72B1B3BCD6AD /* RightToLeft.swift */, - 66297257B46A0B04E1F0D23851BF3FB9 /* StarFillMode.swift */, - 9EAB3D37248165415C063F97954B9467 /* StarLayer.swift */, - 4F04F5EF05B3CA4C518608B33CF778E7 /* Support Files */, - ); - name = Cosmos; - path = Cosmos; - sourceTree = ""; - }; - 6A59216DBDCFBCF6F360BE8DB2261CF9 /* SQLite.swift */ = { - isa = PBXGroup; - children = ( - 6792C73D30346037F1AD7859F8E2032A /* standard */, - 5A26FB8026FC0797467C702191A258E1 /* Support Files */, - ); - name = SQLite.swift; - path = SQLite.swift; - sourceTree = ""; - }; - 6B6E0A1C9F347FBF18E8DEB527919627 /* Products */ = { - isa = PBXGroup; - children = ( - 11A56FABF10A24216771AC84E410BD4F /* Cosmos.framework */, - C5461A6FEECDCABF147D05EDA4A2FB72 /* Pods_WebimClientLibrary_Example.framework */, - D0590A7FFF11C65F879FF56C5905285A /* Pods_WebimClientLibrary_Tests.framework */, - B57D6E90DD0A4D86D4D7007D4C5B72C0 /* PopupDialog.framework */, - F0555D753B0E9060B817298EE0E762A7 /* SlackTextViewController.framework */, - E358DE4A92DB5E6E4AD8CC4DDB695938 /* SnapKit.framework */, - 6426622D04E20EA925E2627C7F3F0C11 /* SQLite.framework */, - 5B7EE681B87D8AAF1BF5016B46319D63 /* WebimClientLibrary.framework */, - ); - name = Products; - sourceTree = ""; - }; - 6C27F106E0D346141C6EB41C45389EAA /* Support Files */ = { - isa = PBXGroup; - children = ( - 06D62980BACBB770306487FE4C185595 /* Info.plist */, - 63BA50E91B4381486E26B0365B635B0D /* SnapKit.modulemap */, - 2EFCCE4F8D8906F8D5F76CA8AE894C87 /* SnapKit.xcconfig */, - A541555875AD8A3D9028E22DB39BE37D /* SnapKit-dummy.m */, - A258925EDFD70F31A17398FEDCEDA7C3 /* SnapKit-prefix.pch */, - CB846EE4ADDB3DA5851E05625D7CAF99 /* SnapKit-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/SnapKit"; - sourceTree = ""; - }; - 6FC5B1F15A9B51ECE75DFEB94709466F /* WebimClientLibrary */ = { - isa = PBXGroup; - children = ( - 799A957762BB118D419942064F856D37 /* Department.swift */, - B65139E38C30F90DFA787ECA784C2DC2 /* FatalErrorHandler.swift */, - A2B9FE92B60ADD3BC1A9F02F605DB108 /* Message.swift */, - 976FEFC2BAF7806C07EDF4371B51425B /* MessageListener.swift */, - 1BE6492EF8EDB148139B49E96A365298 /* MessageStream.swift */, - E9ADE5CC421AA8C62E071B1CC4F626AF /* MessageTracker.swift */, - CC537E206030C9AC6FCF246EA9F4E15A /* Operator.swift */, - E334599F24531CF54B4CDF423BCD705A /* ProvidedAuthorizationTokenStateListener.swift */, - 9465A51D5A1C6097AC306AE5E029796E /* Webim.swift */, - BBE7FD1D4E433F3FAAB93E1CF24A74E4 /* WebimClientLibrary.h */, - D88C19AC19FDC7DE1A90CB39512B317D /* WebimError.swift */, - C470023B540C860A6BFF2A528F003DB5 /* WebimLogger.swift */, - 486C240F9A27DDB9E0B2DAD55FC4EBAB /* WebimRemoteNotification.swift */, - 0B7E45992B3B6C8E86885954DED1DB72 /* WebimSession.swift */, - 05345C2AAE326B3D85361CF00B712995 /* Backend */, - EDD1AFB9D3B5C2C5697E64CEADE5486E /* Implementation */, - 5370902B1A051C2D49E4D06B946D1C38 /* Pod */, - DBAE63B10C9CB6DE39788D9B26EF4C72 /* Support Files */, - ); - name = WebimClientLibrary; - path = ../..; - sourceTree = ""; - }; - 7C2C777D5E554FBB020A1013853E66F4 /* Items */ = { - isa = PBXGroup; - children = ( - 916001497C7F1413D1405BF3113FB8BD /* ChatItem.swift */, - 0CA9CFC058B0DE538EA6458F17C60EF0 /* DepartmentItem.swift */, - 3DAE32AED11C1788D3D40B240179ABC4 /* FileParametersItem.swift */, - 0DC7724A2982CDC1CD7D602ACA393B9E /* MessageItem.swift */, - 3242238072AD02323A0499BE3422F4F8 /* OnlineStatusItem.swift */, - 68DFF15284ED58C4872C8F7F7551A74A /* OperatorItem.swift */, - 48740EC71FBEF2D78841DBED6641CE48 /* RatingItem.swift */, - EB2B3B57C4BDFBED302FD55C3C496460 /* VisitorItem.swift */, - 11187C43953CAFFFF1AE5EA9F649EBB6 /* VisitSessionStateItem.swift */, - 5BA3711370ECA7DC734E8E7A9F37FBEE /* Deltas */, - 8F9F8D85A679AB1B262A43317D2997BC /* Responses */, - ); - name = Items; - path = Items; - sourceTree = ""; - }; - 7DB346D0F39D3F0E887471402A8071AB = { - isa = PBXGroup; - children = ( - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, - F0634773A9F01C1013CBF116ACC21762 /* Development Pods */, - 0E9CC0217CE03B66912982F024F7C64D /* Frameworks */, - 82F9867CBFC28285253A45EECA6E470F /* Pods */, - 6B6E0A1C9F347FBF18E8DEB527919627 /* Products */, - 0D12F68CC78C58417909B9B3C3AC3CD2 /* Targets Support Files */, - ); - sourceTree = ""; - }; - 81B175995141E0D53C22427069DDF84B /* Support Files */ = { - isa = PBXGroup; - children = ( - D4F91B76119F30A014A9F3AE4F30B835 /* Info.plist */, - 26241D6FD7DC6DF93EF4AB6991B9F771 /* PopupDialog.modulemap */, - 7713FFF549B559D0D25EC63F35B37D48 /* PopupDialog.xcconfig */, - 15C03AA13FFEA43C3F4E6369D5788DCA /* PopupDialog-dummy.m */, - 21E7CD506292AD43E31BAB7527070AD6 /* PopupDialog-prefix.pch */, - D424D8D17487CF77887C3C014EF9BF2C /* PopupDialog-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/PopupDialog"; - sourceTree = ""; - }; - 82F9867CBFC28285253A45EECA6E470F /* Pods */ = { - isa = PBXGroup; - children = ( - 67E50522365B84DD2654604E9BD9B474 /* Cosmos */, - F81FF03F2692806734FF508D71D2CE3E /* Crashlytics */, - 0C6F036241DC2567C45B54F9FBF9A07E /* Fabric */, - 9982DC52A74A79F23ED7C24374E32D5A /* PopupDialog */, - 4F7219C21B5C0BD731FF3045802743C0 /* SlackTextViewController */, - C5D650CD2401DC6A9A676C3FE58F24B4 /* SnapKit */, - 6A59216DBDCFBCF6F360BE8DB2261CF9 /* SQLite.swift */, - ); - name = Pods; - sourceTree = ""; - }; - 8F9F8D85A679AB1B262A43317D2997BC /* Responses */ = { - isa = PBXGroup; - children = ( - 0DC2978B1D9B8C22FE818340BF9B78C2 /* DeltaResponse.swift */, - A193CC2710805DA939D32EC09565ACCB /* HistoryBeforeResponse.swift */, - BCFE11EDF8ED6FB356F670929F45B7B7 /* HistorySinceResponse.swift */, - ); - name = Responses; - path = Responses; - sourceTree = ""; - }; - 9982DC52A74A79F23ED7C24374E32D5A /* PopupDialog */ = { - isa = PBXGroup; - children = ( - F2AD3B701744E1B73341944062B2919C /* FXBlurView.h */, - 9D3BDD6C00F7116CCFFA9867453B329F /* FXBlurView.m */, - 8387904866322F009CB5C5264A098B0D /* InteractiveTransition.swift */, - DCEDB31AD7D4CEA880910146D1DC3811 /* PopupDialog.swift */, - FD03B769FD977A4025C02108E374AC30 /* PopupDialog+Keyboard.swift */, - CCDE4C39116B4AAE6604CCAEDDDE9E00 /* PopupDialogButton.swift */, - 3AE3CE47E298A5486AC08E1AE80FA32E /* PopupDialogContainerView.swift */, - C2F953AC0AC02DB901427DCF8BBE5451 /* PopupDialogDefaultButtons.swift */, - 9AD66C3FE6FB01768ECB85396B708305 /* PopupDialogDefaultView.swift */, - 6B6B79F4DA41D5130904FD456FE22113 /* PopupDialogDefaultViewController.swift */, - 65C6B1DB7FD2FDEA3527CA95DCD29E7D /* PopupDialogOverlayView.swift */, - D63D3A5BBCD13F26961A54C552734BFB /* PresentationController.swift */, - 9D0C05557781C5379C725BBB2973421E /* PresentationManager.swift */, - A5C6B603C8647D2F917E828B2834BD16 /* TransitionAnimations.swift */, - 701B1077AA9ABDCA06C1D36D0B20FD0B /* TransitionAnimator.swift */, - EC653149D8C812AA5E52B48F2DD9498E /* UIImageView+Calculations.swift */, - 83519CCDAB486B59FE551AF5C1D1DD75 /* UIView+Animations.swift */, - 5FA97BBF09804ACE1BCF879C7A92F76C /* UIViewController+Visibility.swift */, - 81B175995141E0D53C22427069DDF84B /* Support Files */, - ); - name = PopupDialog; - path = PopupDialog; - sourceTree = ""; - }; - BD6E1B90AA08234791918BB0C2672022 /* iOS */ = { - isa = PBXGroup; - children = ( - F76DC2C907652127B4034C23D0EBC722 /* Foundation.framework */, - ); - name = iOS; - sourceTree = ""; - }; - C5D650CD2401DC6A9A676C3FE58F24B4 /* SnapKit */ = { - isa = PBXGroup; - children = ( - 00853F996137B9DB1AAC0548227A9350 /* Constraint.swift */, - 794782EEF80522A6D607C066166DFC58 /* ConstraintAttributes.swift */, - C71BB5FD3648A1C88510492D54EFEBF5 /* ConstraintConfig.swift */, - 0D2AFB0776B9615FE086C08BE0BACDAC /* ConstraintConstantTarget.swift */, - 39EBAD471601B480F694A6117222F362 /* ConstraintDescription.swift */, - 98B06FBFFF03146BA6B54D94A84437C5 /* ConstraintDSL.swift */, - 69FBC5329532C7920789EBD5112032F9 /* ConstraintInsets.swift */, - AB4AE55286E3B1E8445C6EA19AE51119 /* ConstraintInsetTarget.swift */, - DC2A05AC20F044D9647C8FA90450C208 /* ConstraintItem.swift */, - 8927D1A5A5D6E9A5F14E8C8F5509B527 /* ConstraintLayoutGuide.swift */, - 3DE1F11718C901A07CFD427BD194D858 /* ConstraintLayoutGuide+Extensions.swift */, - D5C5104C50B5210EE6672486CD7728BD /* ConstraintLayoutGuideDSL.swift */, - E875FDE45DED7A69F1967B35A3AB34AC /* ConstraintLayoutSupport.swift */, - 5E9951E0E06C067364D4A49099B53BEA /* ConstraintLayoutSupportDSL.swift */, - 1783698FAEE06C0CB74DA14E7EC431D5 /* ConstraintMaker.swift */, - 4DB039E47DCDEF37A37FC345CF6E4E00 /* ConstraintMakerEditable.swift */, - B01822C249BE61FF36B8D93944E4FEF9 /* ConstraintMakerExtendable.swift */, - 63716EFE92E8E8A8E9C48A5A13CB76DE /* ConstraintMakerFinalizable.swift */, - 8F6B0CAAD2E7AE71CCB59A4E0868433D /* ConstraintMakerPriortizable.swift */, - 9058DD2369437C210BD80C50F70DE0CF /* ConstraintMakerRelatable.swift */, - F1BE798778A71FFBAC0A3F707F64868B /* ConstraintMultiplierTarget.swift */, - 1FBD1628B05EBA4AFA2FA943EBE83E39 /* ConstraintOffsetTarget.swift */, - 76B0F8B2A9EAF22095BFBEEF36FD2937 /* ConstraintPriority.swift */, - 862AC483DDA1ABA46DF332A2C1E7B123 /* ConstraintPriorityTarget.swift */, - 35E596152ADD915D8BD53033E5834584 /* ConstraintRelatableTarget.swift */, - 0A242DC696A091612A93C381A0405C6F /* ConstraintRelation.swift */, - 4375DF2C2EEB6B5F2F0774A75C331709 /* ConstraintView.swift */, - 5AF576B4B964A0C4607573E1247EE26E /* ConstraintView+Extensions.swift */, - 05E3FC8EBC71B7122F06AF64A1963779 /* ConstraintViewDSL.swift */, - 365F83154629BD47C328EC8207E30F78 /* Debugging.swift */, - 7DD0DF542C4250DAAA403FC160A5A3BF /* LayoutConstraint.swift */, - 0E23F2AC0E8E6DFB2E563077C5296618 /* LayoutConstraintItem.swift */, - D04055536F5FE91CD5501A087E7DE968 /* Typealiases.swift */, - 53F5BBEFD90D802D74EC71D0366F81B4 /* UILayoutSupport+Extensions.swift */, - 6C27F106E0D346141C6EB41C45389EAA /* Support Files */, - ); - name = SnapKit; - path = SnapKit; - sourceTree = ""; - }; - D2517BA3FEDAD351280A0397178191DC /* Utilities */ = { - isa = PBXGroup; - children = ( - CA6689B5BD274AAAA1CE7E90FA4714B2 /* CompletionHandlerWrappers.swift */, - 275ADDC61AB76931E634684AB15BF0A1 /* DepartmentFactory.swift */, - 9208B4B52BDD1CA15A72FD72B2E3EF82 /* InternalUtils.swift */, - FA8B33DCE33106F90A30A3202BCCDA76 /* MessageFactories.swift */, - 0FBC8379477B67860460DBA29C44823C /* OperatorFactory.swift */, - 665560399382CB071AAF9886BA066DC2 /* Extensions */, - ); - name = Utilities; - path = Utilities; - sourceTree = ""; - }; - DBAE63B10C9CB6DE39788D9B26EF4C72 /* Support Files */ = { - isa = PBXGroup; - children = ( - 10D81E0177A9FAC99655E1B41654D535 /* Info.plist */, - A81F48F4145E840A2F3B171694AC483A /* WebimClientLibrary.modulemap */, - 753C10651B46B038EB66F243787DC617 /* WebimClientLibrary.xcconfig */, - 754FCD497F6F3304F104C8E40D115A5B /* WebimClientLibrary-dummy.m */, - B16B0DDEECECCEACBF03FA417D4C0D7E /* WebimClientLibrary-prefix.pch */, - 14AE187B703B991040A2AC24ECE52DC8 /* WebimClientLibrary-umbrella.h */, - ); - name = "Support Files"; - path = "Example/Pods/Target Support Files/WebimClientLibrary"; - sourceTree = ""; - }; - EA25FE0D70AB56FA61FD0659E4455628 /* Pods-WebimClientLibrary_Example */ = { - isa = PBXGroup; - children = ( - 52595AB53ADE814912E6AF0F39689999 /* Info.plist */, - 64FF9394922483DDA5448657B56E6E4E /* Pods-WebimClientLibrary_Example.modulemap */, - 7663A6AB1AAA074B75EAC8D69251B798 /* Pods-WebimClientLibrary_Example-acknowledgements.markdown */, - 33B9D4FAC1A7C5B3F38BED0585AF2632 /* Pods-WebimClientLibrary_Example-acknowledgements.plist */, - EAF4CB6D73818A89D9D94E40D5188687 /* Pods-WebimClientLibrary_Example-dummy.m */, - 44ABF483FEB8DBFFA207EB62EA0A60F7 /* Pods-WebimClientLibrary_Example-frameworks.sh */, - 66FF158F5D045BCF7312B62F4BD7F86C /* Pods-WebimClientLibrary_Example-resources.sh */, - A39D8A7D919E04BCFAB21036A1AC4DC5 /* Pods-WebimClientLibrary_Example-umbrella.h */, - 1A47949C61BCCE7C8DEB72DF882ECD0C /* Pods-WebimClientLibrary_Example.debug.xcconfig */, - B527214951BD11F916FF3930927320F5 /* Pods-WebimClientLibrary_Example.release.xcconfig */, - ); - name = "Pods-WebimClientLibrary_Example"; - path = "Target Support Files/Pods-WebimClientLibrary_Example"; - sourceTree = ""; - }; - EDD1AFB9D3B5C2C5697E64CEADE5486E /* Implementation */ = { - isa = PBXGroup; - children = ( - 748EC9667F598F615C648373AC6A38C1 /* DepartmentImpl.swift */, - 97E1BB7405A05BA96F5E47AE3E3606BA /* LocationSettingsImpl.swift */, - 7F9CE38BF060921C9A191B0C55196638 /* MessageImpl.swift */, - 0C86A3F05065EA1AAB353138DFD7D0B6 /* MessageStreamImpl.swift */, - 664E4FAF65FE576ABE814C9B4373ACF1 /* MessageTrackerImpl.swift */, - C004A8FC4B6BB5B475A1EFB306D86D19 /* OperatorImpl.swift */, - F220E304B22DAE4253EC4F1C3165C028 /* WebimErrorImpl.swift */, - CDC09A6794593E514725D5D5A0CC6C71 /* WebimRemoteNotificationImpl.swift */, - 51763A3FC4BC6D4B3BF8F59647C04B9E /* WebimSessionImpl.swift */, - ); - name = Implementation; - path = WebimClientLibrary/Implementation; - sourceTree = ""; - }; - F0634773A9F01C1013CBF116ACC21762 /* Development Pods */ = { - isa = PBXGroup; - children = ( - 6FC5B1F15A9B51ECE75DFEB94709466F /* WebimClientLibrary */, - ); - name = "Development Pods"; - sourceTree = ""; - }; - F81FF03F2692806734FF508D71D2CE3E /* Crashlytics */ = { - isa = PBXGroup; - children = ( - 664AC0A85E99720C015D8B7E8FAF5AE8 /* ANSCompatibility.h */, - A4461E947E27C56D20CE57FE9D3729E3 /* Answers.h */, - 814A8AF4CE81F01C13A95BD22BA425CF /* CLSAttributes.h */, - 47A5C32AA9C9B2118090465607BF42D7 /* CLSLogging.h */, - 983646B23C603BEE80E6377080B0D2AF /* CLSReport.h */, - FADBE7CC7D4AAA3D8572476A7EA2631F /* CLSStackFrame.h */, - 3B8C9A3A62FCF8E8D51A89FF3159ED4D /* Crashlytics.h */, - 0B5318934A8F5D6E1E300C4CF2DAD6BD /* Frameworks */, - ); - name = Crashlytics; - path = Crashlytics; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 92B6B3E77B43641E47510C8F57963B9B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 4CE94770E88B40DD3F06797F9B35B81A /* Cosmos-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 95784E1DC5FB5E1B5985EA68457CE6C8 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - B0D98492078DECAB5666A762017B0DCE /* Pods-WebimClientLibrary_Tests-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B30A9468ED9D0383517191D70BF80686 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 6EEB9A233F7B8BB3C1B0EB27FCF1E0D7 /* fts3_tokenizer.h in Headers */, - 91DDD76106AC6208C78A5E6A0971F3EA /* SQLite-Bridging.h in Headers */, - D275FC128A0F407C94124D4118490FEF /* SQLite.h in Headers */, - 81D7D2BDA942BAB8D1F4B2D31D3F469B /* SQLite.swift-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BFF408A7761D389BF7437248539D3F98 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - E9C79C959F785FB6D685E94896A80308 /* FXBlurView.h in Headers */, - 47FEF8F6730D2FD71212C5197E71ECDE /* PopupDialog-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C5549644B3707E4771133D65630B08BA /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - E935952900A2D50C7C3797D44E9E6C37 /* Pods-WebimClientLibrary_Example-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E140BA52D8CD184A7DEAD13FE67A7D31 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 665FBE655A69F6D8CB53EF9AFAA782E4 /* SnapKit-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EA5EE02D9008B72C6C41C221F3AAC632 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 4E61910733FC0F4BE0D919D11C325A4A /* SlackTextViewController-umbrella.h in Headers */, - 34A37D957ED4E0DC5BE518D4500AAF57 /* SLKInputAccessoryView.h in Headers */, - FAB305B721DCF780896A998F00B6FA7B /* SLKTextInput.h in Headers */, - FA0683FE579F81120BE6464991943973 /* SLKTextInputbar.h in Headers */, - C50DC3A9BBB63766090D111CFB7E4339 /* SLKTextView+SLKAdditions.h in Headers */, - 9C529CB569F351D5D5F0D83A803A2924 /* SLKTextView.h in Headers */, - DAEF2BC07E931929331323DB19E94786 /* SLKTextViewController.h in Headers */, - 86CC625794EB61E22982DC4BCDC15600 /* SLKTypingIndicatorProtocol.h in Headers */, - C3E0889BBFF85769F855C551B7B2C7B0 /* SLKTypingIndicatorView.h in Headers */, - 62ADE882A7B914EE33D86B3BA8C2AEE0 /* SLKUIConstants.h in Headers */, - 95276AF2B7EDC4A571A95BE762F0BC2D /* UIResponder+SLKAdditions.h in Headers */, - DF8E5CA0C386835D90AC4EF93D76CE62 /* UIScrollView+SLKAdditions.h in Headers */, - 42A56F2791C5DA72ECB6E4FC6E58F4B1 /* UIView+SLKAdditions.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FABE5DE7F4ECDA48AE4A9F3EECE0CA6E /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - E9F926AA0E26D4D450522D0A6AE7E520 /* WebimClientLibrary-umbrella.h in Headers */, - E225B51204B6B8A7EE32DB66D660F897 /* WebimClientLibrary.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 210878043DFCCAD9394DF1089E605053 /* Pods-WebimClientLibrary_Example */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1331725F12710A199E93B9362D83E053 /* Build configuration list for PBXNativeTarget "Pods-WebimClientLibrary_Example" */; - buildPhases = ( - C5549644B3707E4771133D65630B08BA /* Headers */, - 3DA37DD18960624107C44108D58B8BFB /* Sources */, - 1FD566264E5B7DEA19C479A4F892AE24 /* Frameworks */, - 11FF1E36C6D890CC493BFAE9DAF78D6D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - D68BC9BE9FB32DA93BDA6845ADEA0DE4 /* PBXTargetDependency */, - 3296FF81AF38A6E5AF6087E01DB3144D /* PBXTargetDependency */, - BB10468F998C1DFEFED699674E459FB4 /* PBXTargetDependency */, - 2F695A99572DA6136CCE5A193C0BA00B /* PBXTargetDependency */, - 889B10E9CA49A18B22095779C7E4438A /* PBXTargetDependency */, - EBDB0263541DE0A3F979B17A8D0B7E32 /* PBXTargetDependency */, - ); - name = "Pods-WebimClientLibrary_Example"; - productName = "Pods-WebimClientLibrary_Example"; - productReference = C5461A6FEECDCABF147D05EDA4A2FB72 /* Pods_WebimClientLibrary_Example.framework */; - productType = "com.apple.product-type.framework"; - }; - 224580824D4276BBCB37A928CF5E9482 /* Cosmos */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7D6C475B9EA32C4BBF9FABE9BD31D7DC /* Build configuration list for PBXNativeTarget "Cosmos" */; - buildPhases = ( - 92B6B3E77B43641E47510C8F57963B9B /* Headers */, - 2B03CF3D547EF98A1EB1949B7C437D01 /* Sources */, - 4EF5B7A1EAEF7AAE1780E8EA9C5FC807 /* Frameworks */, - D6FD094E21EDFCFCFE1B6D13E36D1F3A /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Cosmos; - productName = Cosmos; - productReference = 11A56FABF10A24216771AC84E410BD4F /* Cosmos.framework */; - productType = "com.apple.product-type.framework"; - }; - 2D49E8216C5BDA38D816A285446473B8 /* Pods-WebimClientLibrary_Tests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4C61372340C871AD3C1803E4CC219F5E /* Build configuration list for PBXNativeTarget "Pods-WebimClientLibrary_Tests" */; - buildPhases = ( - 95784E1DC5FB5E1B5985EA68457CE6C8 /* Headers */, - 5EF92DA86E35751D2D97855947654A98 /* Sources */, - 66D971B96F6044D20549D7BA17162992 /* Frameworks */, - C0BF07799F74EF89E870E56C06FA12B7 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1155D656B161C21AFC64A98DE326EC2D /* PBXTargetDependency */, - ); - name = "Pods-WebimClientLibrary_Tests"; - productName = "Pods-WebimClientLibrary_Tests"; - productReference = D0590A7FFF11C65F879FF56C5905285A /* Pods_WebimClientLibrary_Tests.framework */; - productType = "com.apple.product-type.framework"; - }; - 3EE4C940CC68C90974F2C4B92892B688 /* PopupDialog */ = { - isa = PBXNativeTarget; - buildConfigurationList = A1267B519BEC5E9CBF4FEB5007A5BC58 /* Build configuration list for PBXNativeTarget "PopupDialog" */; - buildPhases = ( - BFF408A7761D389BF7437248539D3F98 /* Headers */, - 95B73F2BC980BD5900FF17282BD4D713 /* Sources */, - CEF9ECA3924E0DCA0FF55BB51B84D454 /* Frameworks */, - 5A408B846EC9FFCAF11A8EC760190E1B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = PopupDialog; - productName = PopupDialog; - productReference = B57D6E90DD0A4D86D4D7007D4C5B72C0 /* PopupDialog.framework */; - productType = "com.apple.product-type.framework"; - }; - 69EB2061B31BDDDC614CBB76CA6B70FA /* SQLite.swift */ = { - isa = PBXNativeTarget; - buildConfigurationList = E638652580646550105C48D7D86B05F6 /* Build configuration list for PBXNativeTarget "SQLite.swift" */; - buildPhases = ( - B30A9468ED9D0383517191D70BF80686 /* Headers */, - A8C26C572A3B4AD376C6D94F89AF522A /* Sources */, - 65D5E7361A0EF5427197B00BEF2B1D5E /* Frameworks */, - 58EBD8A0BA6D0C16ECEC25FA83617044 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SQLite.swift; - productName = SQLite.swift; - productReference = 6426622D04E20EA925E2627C7F3F0C11 /* SQLite.framework */; - productType = "com.apple.product-type.framework"; - }; - 93BE6772ABD5E75C25FD45D48900958A /* WebimClientLibrary */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3E5C3E8D70C3EC13BB22F1DFF36D0E38 /* Build configuration list for PBXNativeTarget "WebimClientLibrary" */; - buildPhases = ( - FABE5DE7F4ECDA48AE4A9F3EECE0CA6E /* Headers */, - C274A55991F1DD5B8012B52BECAD5075 /* Sources */, - 8F6275C1E4765EE819AEC4293350D943 /* Frameworks */, - D03F2FB90D24F6A87527822A93FCEAF8 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 388F267CEE9380DE4E7AD0DE9ED43D30 /* PBXTargetDependency */, - ); - name = WebimClientLibrary; - productName = WebimClientLibrary; - productReference = 5B7EE681B87D8AAF1BF5016B46319D63 /* WebimClientLibrary.framework */; - productType = "com.apple.product-type.framework"; - }; - B6C5BC764869FA8C174F0AD2B7761A80 /* SlackTextViewController */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5270921954DE42D1421932792BFE0F2D /* Build configuration list for PBXNativeTarget "SlackTextViewController" */; - buildPhases = ( - EA5EE02D9008B72C6C41C221F3AAC632 /* Headers */, - 922EDD3EDEC4724098FA2EE5C60F6301 /* Sources */, - 2A226471F7884C9084FA2E8684AFD88C /* Frameworks */, - F78CBC32A5B0DD19746737305EC48C16 /* Resources */, - A0B8DC93C4322ADEF4C25AF5D968BFFB /* Copy . Public Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SlackTextViewController; - productName = SlackTextViewController; - productReference = F0555D753B0E9060B817298EE0E762A7 /* SlackTextViewController.framework */; - productType = "com.apple.product-type.framework"; - }; - E6FCAC234963C095748C8F1E8E988809 /* SnapKit */ = { - isa = PBXNativeTarget; - buildConfigurationList = C1087926630019C5C339B864AC1CE59B /* Build configuration list for PBXNativeTarget "SnapKit" */; - buildPhases = ( - E140BA52D8CD184A7DEAD13FE67A7D31 /* Headers */, - BCAD09B8A814C7FB7483A22BBF38BCAA /* Sources */, - DE4E72098AA87286A0DB0E88F71E55EE /* Frameworks */, - E9D216D9E390968A178E5D0C2D810DA6 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SnapKit; - productName = SnapKit; - productReference = E358DE4A92DB5E6E4AD8CC4DDB695938 /* SnapKit.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0930; - LastUpgradeCheck = 0930; - }; - buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = 6B6E0A1C9F347FBF18E8DEB527919627 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 224580824D4276BBCB37A928CF5E9482 /* Cosmos */, - 210878043DFCCAD9394DF1089E605053 /* Pods-WebimClientLibrary_Example */, - 2D49E8216C5BDA38D816A285446473B8 /* Pods-WebimClientLibrary_Tests */, - 3EE4C940CC68C90974F2C4B92892B688 /* PopupDialog */, - B6C5BC764869FA8C174F0AD2B7761A80 /* SlackTextViewController */, - E6FCAC234963C095748C8F1E8E988809 /* SnapKit */, - 69EB2061B31BDDDC614CBB76CA6B70FA /* SQLite.swift */, - 93BE6772ABD5E75C25FD45D48900958A /* WebimClientLibrary */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 11FF1E36C6D890CC493BFAE9DAF78D6D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 58EBD8A0BA6D0C16ECEC25FA83617044 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5A408B846EC9FFCAF11A8EC760190E1B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C0BF07799F74EF89E870E56C06FA12B7 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D03F2FB90D24F6A87527822A93FCEAF8 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D6FD094E21EDFCFCFE1B6D13E36D1F3A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E9D216D9E390968A178E5D0C2D810DA6 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F78CBC32A5B0DD19746737305EC48C16 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 2B03CF3D547EF98A1EB1949B7C437D01 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EBDA9D986D3B29181DCE45F61309AB4F /* Cosmos-dummy.m in Sources */, - 51FCE95F979FB22A85B93DAFCF4641BF /* CosmosAccessibility.swift in Sources */, - D656F2542FF374F07C309DFC29A2C26C /* CosmosDefaultSettings.swift in Sources */, - EBEE031011B787C1304C67C278B777BB /* CosmosLayerHelper.swift in Sources */, - 3B86C5D83D51B0AD3A978CE5F065C131 /* CosmosLayers.swift in Sources */, - 63560440E8FBCBF1B1E48668E9314E57 /* CosmosLocalizedRating.swift in Sources */, - 20151B8AFE949A6DED7533ADA7E2E18D /* CosmosRating.swift in Sources */, - 5339488672692217CA9AA60EFBE7FE48 /* CosmosSettings.swift in Sources */, - 60BB3050FCA69667BA1BA58368E8E544 /* CosmosSize.swift in Sources */, - 520512C3C34FCAA4370E816ED45D544D /* CosmosText.swift in Sources */, - 64C9F226D4D8A4781E02F84E231A9F26 /* CosmosTouch.swift in Sources */, - DE2C4153590F8BD92595E402964115FA /* CosmosTouchTarget.swift in Sources */, - 381DC60B003AA80CB89F2DB162681543 /* CosmosView.swift in Sources */, - 2B4585AF049705891248452AE7F15E2C /* RightToLeft.swift in Sources */, - 581612BC903BAFB0928A8E92F47F2B66 /* StarFillMode.swift in Sources */, - 26E61D033EC59FEFA604F27EBBC433DC /* StarLayer.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3DA37DD18960624107C44108D58B8BFB /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 289D3CE643F45B7038B002E5B3AE89FF /* Pods-WebimClientLibrary_Example-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5EF92DA86E35751D2D97855947654A98 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5784E58AB76380FB081849A955CC5F9B /* Pods-WebimClientLibrary_Tests-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 922EDD3EDEC4724098FA2EE5C60F6301 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D62D20B065AE9A11785CA04B0050BC29 /* SlackTextViewController-dummy.m in Sources */, - D83E87F8C1FF792850B4B484EF89DE27 /* SLKInputAccessoryView.m in Sources */, - 1A48C22A3F5EE6735BE212F9C5E7ED74 /* SLKTextInput+Implementation.m in Sources */, - ED9B78F1348221AD6D6696A04F463019 /* SLKTextInputbar.m in Sources */, - AD9C0D21E05EAAAB4DF1930C36793617 /* SLKTextView+SLKAdditions.m in Sources */, - 198236EEC7780633EE16040E8791A44F /* SLKTextView.m in Sources */, - BD424143175E21B2A09227594AC685FF /* SLKTextViewController.m in Sources */, - A0B3689A1785165D9A290E408B909AF8 /* SLKTypingIndicatorView.m in Sources */, - 7C28CA9D43618E62581EC46CB2D1F0ED /* UIResponder+SLKAdditions.m in Sources */, - 0C56B3650BF8C0456B98F4A56C77C45E /* UIScrollView+SLKAdditions.m in Sources */, - 4D84CF98CC048790434A0470E7F47ABF /* UIView+SLKAdditions.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 95B73F2BC980BD5900FF17282BD4D713 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 11C91D5038C126C1C8CA214C293A4134 /* FXBlurView.m in Sources */, - E9627DF0A7E5DBFB43CCCE4469E29711 /* InteractiveTransition.swift in Sources */, - F1489064F81F9F31CC05684CBB167F9C /* PopupDialog+Keyboard.swift in Sources */, - D17FA6F728691AE51D43ED4876EF69BE /* PopupDialog-dummy.m in Sources */, - F74524062D20759239CB73AC6AA399D2 /* PopupDialog.swift in Sources */, - 604D24F2D108337EEDFE62682DD523E5 /* PopupDialogButton.swift in Sources */, - C215DECF5AEEE88018AA045E346A3871 /* PopupDialogContainerView.swift in Sources */, - 45F1E40653A05F843A8ECA52BF5F5D19 /* PopupDialogDefaultButtons.swift in Sources */, - 233E1A979C61DB9EEDE2966F15BB3B6C /* PopupDialogDefaultView.swift in Sources */, - 53A150B52D70B015C1DA82633241C2C7 /* PopupDialogDefaultViewController.swift in Sources */, - 6BEE22C3AEE2A84502DD871D91B736C4 /* PopupDialogOverlayView.swift in Sources */, - 127AA70931D4914EE0B60BD7E932D6D9 /* PresentationController.swift in Sources */, - 2A31784762FF01923A27E6C3F87F8ECA /* PresentationManager.swift in Sources */, - 799B723F86585CCE268DD7A7924D269A /* TransitionAnimations.swift in Sources */, - A21393F16B91BC265737B7669C99C8AB /* TransitionAnimator.swift in Sources */, - E157169A5018F20AE6AB5FF9A40D0AD7 /* UIImageView+Calculations.swift in Sources */, - 06DE836C6DB8EEC80187CA213E0ED718 /* UIView+Animations.swift in Sources */, - 02AB5C2F0881477406092C50B7CE2DA2 /* UIViewController+Visibility.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A8C26C572A3B4AD376C6D94F89AF522A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FC968FE229A578DE5EBF0142D2125E55 /* AggregateFunctions.swift in Sources */, - E4F311B94CBDD9A9BDDD1534F0B04275 /* Blob.swift in Sources */, - 73195B17526EE5C8D889AFEFE361AE38 /* Coding.swift in Sources */, - FD786ADB56CCD018674972FCDCA94F80 /* Collation.swift in Sources */, - FF6718274A4D83133669A1DE7E48AE69 /* Connection.swift in Sources */, - A25C6CCA27526F919C7C8C57FD7CDD24 /* CoreFunctions.swift in Sources */, - B73F602E13B2ECF2A7F037FFBDAF6A42 /* CustomFunctions.swift in Sources */, - D925EEA3D16B28E8EE1042C7F85177A5 /* DateAndTimeFunctions.swift in Sources */, - DAE614425034B4FA59922B27C0D5B4A5 /* Errors.swift in Sources */, - 9FBF424E7F385F241417B2524CC07360 /* Expression.swift in Sources */, - 1479F75F3D3A21DDF67996F80B1371D4 /* Foundation.swift in Sources */, - EBF81C5FF163E78981E845313B2640ED /* FTS4.swift in Sources */, - 424CD548B3A428FC555851F398F0FEEA /* FTS5.swift in Sources */, - 0F95B13E5CB69AFD87A1FF2822A07FFD /* Helpers.swift in Sources */, - CC2DCF2DC45C48327910327797C1A211 /* Operators.swift in Sources */, - 509EB393D4825131F19DF86536E4C5C4 /* Query.swift in Sources */, - 494B0146EC43A050E227D900818AB133 /* RTree.swift in Sources */, - 2C069DAC17B01675555F303FC9055568 /* Schema.swift in Sources */, - 3E9D60EF5A01C4A64013E7DAACBB7357 /* Setter.swift in Sources */, - 26D1FA47296097E7B917AF1955658B85 /* SQLite-Bridging.m in Sources */, - F84C2CB44208B8F36D4A131BAB32F5EA /* SQLite.swift-dummy.m in Sources */, - A15AEE4689D690D87DDA46F4A326F754 /* Statement.swift in Sources */, - FADEC12BE90DCFEDED6A7D376D864D67 /* Value.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BCAD09B8A814C7FB7483A22BBF38BCAA /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D671F9B8C0C7D6105EF3277B24B65772 /* Constraint.swift in Sources */, - B79D2B740071FCD39C3EBD0BF8556F1E /* ConstraintAttributes.swift in Sources */, - 390E3467FFE22F7F826F106D01B8D95E /* ConstraintConfig.swift in Sources */, - F41FB230CBEBBFEAC5712DD7489953D6 /* ConstraintConstantTarget.swift in Sources */, - A84CD24CAE7C2DDAF65F44794D6E96B3 /* ConstraintDescription.swift in Sources */, - D60B4A82D2CD60753FE4F7FB2DE0C5E1 /* ConstraintDSL.swift in Sources */, - 250CD0CC859C82EDDDA3A85160655BAE /* ConstraintInsets.swift in Sources */, - 7EAC1F8A096A2FBA10570D8AA3D6BFB1 /* ConstraintInsetTarget.swift in Sources */, - 6698662B8A1C3B0E390B6E3588BEEE03 /* ConstraintItem.swift in Sources */, - 800C74DDA9CE32B3AECF9945B7ECC3B7 /* ConstraintLayoutGuide+Extensions.swift in Sources */, - C9647A77E211A4480FB66D087DC6B404 /* ConstraintLayoutGuide.swift in Sources */, - 47147754891D220CE819479153E26A71 /* ConstraintLayoutGuideDSL.swift in Sources */, - EE694A2AD7590D2A1ADAFBF4BF9088F1 /* ConstraintLayoutSupport.swift in Sources */, - 839609AA05161EDB374C960F426ADC03 /* ConstraintLayoutSupportDSL.swift in Sources */, - 6712404EA9814E1BBCE72D915C4A1640 /* ConstraintMaker.swift in Sources */, - BC39B28995BFFC0C0A72323C9A783E85 /* ConstraintMakerEditable.swift in Sources */, - 8DC419F99ABD2EFAEB9057A16F68BED2 /* ConstraintMakerExtendable.swift in Sources */, - 7913FC70BED549DDB177334A6FF1880C /* ConstraintMakerFinalizable.swift in Sources */, - D57CCF7B9DDB30D5BDB24C681FC5CF43 /* ConstraintMakerPriortizable.swift in Sources */, - 4382FA30ADF7E1006C6016718099220A /* ConstraintMakerRelatable.swift in Sources */, - 96740031C2E5BB4C498668C1FFD8EAE2 /* ConstraintMultiplierTarget.swift in Sources */, - 5A33AF6AFFCA549F8C76D57B50E51824 /* ConstraintOffsetTarget.swift in Sources */, - 018861606C5CEF21D239837F8E555670 /* ConstraintPriority.swift in Sources */, - 0D51FDDA3F3842712EF75D1EF552F06A /* ConstraintPriorityTarget.swift in Sources */, - DE5FD80A65F386F24A159F225D063785 /* ConstraintRelatableTarget.swift in Sources */, - 4634351C09D12DEDB55F2ADF19702875 /* ConstraintRelation.swift in Sources */, - 9EA4C59F5863D2D7A0BE93CF4A76B849 /* ConstraintView+Extensions.swift in Sources */, - 9FF475768019DE8831A0B06BBE249C86 /* ConstraintView.swift in Sources */, - AA502AB9E400A3DA1AFE34C5D9582B59 /* ConstraintViewDSL.swift in Sources */, - 9A132E03502EEF77CB534CE5D45D241B /* Debugging.swift in Sources */, - BFC5EAB94C86D336F111F2D9A23CAD23 /* LayoutConstraint.swift in Sources */, - 30AD5E2B8C58D246A6AE865AC36AEB37 /* LayoutConstraintItem.swift in Sources */, - B82496837D12CD93204C9D41FD10CCC3 /* SnapKit-dummy.m in Sources */, - 96A75209DDDD1D5793802A77671578AF /* Typealiases.swift in Sources */, - C58FD2114DE0856299BF6CC5D1A9F9F1 /* UILayoutSupport+Extensions.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C274A55991F1DD5B8012B52BECAD5075 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 70C5D29921A12A8783E8CFD54A3FD811 /* AbstractRequestLoop.swift in Sources */, - 9E5280CA697E2AFD6940D956C17FBC8E /* AccessChecker.swift in Sources */, - 678EAF4018ED6CD7457DC48FA26B4E9E /* ActionRequestLoop.swift in Sources */, - C1C83385C325696717057CDB9C80ECE9 /* Array.swift in Sources */, - DEEC9C8A95B5BD257F9E0AA4D9ADFA74 /* AuthorizationData.swift in Sources */, - A3974F3CF0B8483CBFBA69EB8CA1CC29 /* ChatItem.swift in Sources */, - 15C5DFB3AA2419728C4E5DEE6F155E9A /* ClientSideID.swift in Sources */, - E6887C2D52DA216F194865816887A9F3 /* Collection.swift in Sources */, - 91F6A789ED3DFD53F9DE29381800A315 /* CompletionHandlerWrappers.swift in Sources */, - 1D1F8AA42D6D18D605849481AFD649AA /* DeltaCallback.swift in Sources */, - 2161A2E00532131F2BD8772BA0F1BFB4 /* DeltaItem.swift in Sources */, - 501879650E15D9A2094A4974EA79B192 /* DeltaRequestLoop.swift in Sources */, - D28CC0316F172C9B90176A5935CA7536 /* DeltaResponse.swift in Sources */, - 6E4BE6E51EB186C3897BAC62582B097A /* Department.swift in Sources */, - 7F5816B34E3458BC617AF1DA599F68BE /* DepartmentFactory.swift in Sources */, - 5A237350A4996570FF670AC55527A850 /* DepartmentImpl.swift in Sources */, - 9E3ED1280783C5A6C6B5C6B75C6C1C27 /* DepartmentItem.swift in Sources */, - 6E0FB55AF7BB77A7E22565448AD6A813 /* Dictionary.swift in Sources */, - 8CEC156ADBE45CF3FBF2770FF76B4663 /* ExecIfNotDestroyedHandlerExecutor.swift in Sources */, - 917058BCBCD33C7A09D346DDA0512515 /* FatalErrorHandler.swift in Sources */, - 713F4B1758AC531D6DDA209752FAF465 /* FileParametersItem.swift in Sources */, - DA261B63DD6ACAEBD78BC543685E2C37 /* FullUpdate.swift in Sources */, - EAFAB5FCA8A1E844D1470CF04759F0B0 /* HistoryBeforeResponse.swift in Sources */, - 9948CB319273CE5A22D61BE2BE2B0D44 /* HistoryID.swift in Sources */, - 18D0036998848CA706F9A3F63E9A275F /* HistoryMetaInformationStorage.swift in Sources */, - CF372E29BB5C5C2738DF22E3B1199270 /* HistorySinceResponse.swift in Sources */, - B34B05913CA41A098BAD9ACBA0E34195 /* HistoryStorage.swift in Sources */, - 007C6115B51A9D172CD57B019C72E082 /* Int.swift in Sources */, - E06D7389382D8C32172468E7A0FE6945 /* InternalErrorListener.swift in Sources */, - 9E2C7C64A9123DF398A4BCA375F5F492 /* InternalUtils.swift in Sources */, - C91A6B8B8DCA9889D2CCD12C9993D3A1 /* LocationSettingsHolder.swift in Sources */, - 49DB8DB5AC32D3AB30BE6A0311112ED8 /* LocationSettingsImpl.swift in Sources */, - ABAE43484C7077202025C80346AE47CA /* MemoryHistoryMetaInformationStorage.swift in Sources */, - 9FC2599078A562BDA2833918AD724919 /* MemoryHistoryStorage.swift in Sources */, - 76D74DDCFA74D89F0FFE1B8F9AFA065C /* Message.swift in Sources */, - 79AA63452E70A8A1ADAC6E2DBA7E3971 /* MessageComposingHandler.swift in Sources */, - 0301A49FC6C52CCE51E6367605380D55 /* MessageFactories.swift in Sources */, - F52E294F17106D3719C54646D1E9C10A /* MessageHolder.swift in Sources */, - A198D2516ADE22A1FBDE7C72B6CAABBC /* MessageImpl.swift in Sources */, - ECB881CCF71F7CDB8F86FF6ACBCA5185 /* MessageItem.swift in Sources */, - 4EAE493F17DF13784170AD302123F931 /* MessageListener.swift in Sources */, - 011B5EBEC92A00426E4E9F00579F363F /* MessageStream.swift in Sources */, - D4EF4C4A24122115339D90CA25D9CFB4 /* MessageStreamImpl.swift in Sources */, - 537EBDA103178318B1317DB1DE752B4B /* MessageToSend.swift in Sources */, - 654F9F0ECB2F12F8C4C26AEE0CCA20C1 /* MessageTracker.swift in Sources */, - 4A0FB8CC3DCE2AB7714DBBE28EBE1C84 /* MessageTrackerImpl.swift in Sources */, - DC79D16432713F76FE88314E7F3C55A2 /* OnlineStatusItem.swift in Sources */, - C778F806C13A586005FDF6D1E61C00E3 /* Operator.swift in Sources */, - 2787C518EDDAA8476B67BD0D575A4E1F /* OperatorFactory.swift in Sources */, - 3260968506173EADE5150D579B81AE2F /* OperatorImpl.swift in Sources */, - 9B5622A5A987B7E30191415C16F90FF1 /* OperatorItem.swift in Sources */, - 839050762A87E2C32521314FF3C91F9A /* ProvidedAuthorizationTokenStateListener.swift in Sources */, - 3FEFC7E33A504134F4D6C459AF25589A /* ProvidedVisitorFields.swift in Sources */, - 9FB548A2B7FD068B7087C53647A7E964 /* RatingItem.swift in Sources */, - 6C44748BE2A3FBC6AC65D3C0D8F00BD4 /* RemoteHistoryProvider.swift in Sources */, - 66483ECF68F5E6407D023073369AFB44 /* SessionDestroyer.swift in Sources */, - D6E68527C79516FEADFBD96CEA15D5DC /* SessionParametersListener.swift in Sources */, - 0FEF8025DB22C5AEBAFD7358E2493534 /* SQLiteHistoryStorage.swift in Sources */, - 50ED867995F85124265185FEDC0FC381 /* String.swift in Sources */, - 9BF63B343EBE97A26C3C04ED2E47BB8E /* UIColor.swift in Sources */, - 904B38DB75C9047001717C1DEFC1F58F /* UInt32.swift in Sources */, - F335E9990A1204AE53ECC1C46E89D44A /* VisitorItem.swift in Sources */, - 6029A76E1D3C8DC87C87064669F69799 /* VisitSessionStateItem.swift in Sources */, - 178A2ADE59A90E489CA6DF2FFF12BB55 /* Webim.swift in Sources */, - A145BE224AB4AF076640D931E221C919 /* WebimActions.swift in Sources */, - F158D475C132569A319D4D678DEBF2BD /* WebimClient.swift in Sources */, - ECBB00201626AF4AE62F6784902B6189 /* WebimClientLibrary-dummy.m in Sources */, - 1DA16B933B2353589E888B6434E5E2FC /* WebimError.swift in Sources */, - BD5F3640B845386EB5FD8A5DDC45F468 /* WebimErrorImpl.swift in Sources */, - 44AB859AED411011EA15727C757AA69A /* WebimInternalError.swift in Sources */, - 5CFBA0979D13A0CA252D2170179426E7 /* WebimInternalLogger.swift in Sources */, - E9A5259C61B1BAE283A0C48DF9CB091B /* WebimLogger.swift in Sources */, - 4648F0EADAF6AB0F040136693F14A42F /* WebimRemoteNotification.swift in Sources */, - 835847724475C8D541436C7FCE755DC4 /* WebimRemoteNotificationImpl.swift in Sources */, - 2F1A89C1C3EE47085359808D4B774A29 /* WebimRequest.swift in Sources */, - D5B2FD9D11696E35FFFB884F184977C3 /* WebimSession.swift in Sources */, - 32E097B64A3A1DAEEFBD88ACF9B0B238 /* WebimSessionImpl.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 1155D656B161C21AFC64A98DE326EC2D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Pods-WebimClientLibrary_Example"; - target = 210878043DFCCAD9394DF1089E605053 /* Pods-WebimClientLibrary_Example */; - targetProxy = 3261CAE01D1C144CF85F9D7449172A30 /* PBXContainerItemProxy */; - }; - 2F695A99572DA6136CCE5A193C0BA00B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SlackTextViewController; - target = B6C5BC764869FA8C174F0AD2B7761A80 /* SlackTextViewController */; - targetProxy = 789D60512234826D494F71F316C34C65 /* PBXContainerItemProxy */; - }; - 3296FF81AF38A6E5AF6087E01DB3144D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = PopupDialog; - target = 3EE4C940CC68C90974F2C4B92892B688 /* PopupDialog */; - targetProxy = 9091E7D44FF050AB5C79A3E2FDC14C30 /* PBXContainerItemProxy */; - }; - 388F267CEE9380DE4E7AD0DE9ED43D30 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SQLite.swift; - target = 69EB2061B31BDDDC614CBB76CA6B70FA /* SQLite.swift */; - targetProxy = A856BC7FDB1332233FCACBD44FF73C4B /* PBXContainerItemProxy */; - }; - 889B10E9CA49A18B22095779C7E4438A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SnapKit; - target = E6FCAC234963C095748C8F1E8E988809 /* SnapKit */; - targetProxy = 7DFFA6F788D48645E149C58CF78E7A28 /* PBXContainerItemProxy */; - }; - BB10468F998C1DFEFED699674E459FB4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SQLite.swift; - target = 69EB2061B31BDDDC614CBB76CA6B70FA /* SQLite.swift */; - targetProxy = 7D00A6A905E7DD05BA2B08B93BBAA56B /* PBXContainerItemProxy */; - }; - D68BC9BE9FB32DA93BDA6845ADEA0DE4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Cosmos; - target = 224580824D4276BBCB37A928CF5E9482 /* Cosmos */; - targetProxy = D894376C46B25C0551CEAF7AA28A7060 /* PBXContainerItemProxy */; - }; - EBDB0263541DE0A3F979B17A8D0B7E32 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = WebimClientLibrary; - target = 93BE6772ABD5E75C25FD45D48900958A /* WebimClientLibrary */; - targetProxy = C25066A7950794DA5B37A4C5D56C0B53 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 19C00E854DFC8DD752A98E1C8A25132D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D0FAB3E46C608770C483EA96E3773CCE /* Cosmos.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Cosmos/Cosmos-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Cosmos/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Cosmos/Cosmos.modulemap"; - OTHER_SWIFT_FLAGS = "$(inherited) -Onone"; - PRODUCT_MODULE_NAME = Cosmos; - PRODUCT_NAME = Cosmos; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 34DD6D078D96AA022FF351D918E2629F /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D6F8177EE6789172507581ADFBC158FA /* SQLite.swift.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SQLite.swift/SQLite.swift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SQLite.swift/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SQLite.swift/SQLite.swift.modulemap"; - PRODUCT_MODULE_NAME = SQLite; - PRODUCT_NAME = SQLite; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 3.2; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 36226959DF2142709F1FD6272E1E90EC /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2EFCCE4F8D8906F8D5F76CA8AE894C87 /* SnapKit.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SnapKit/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; - OTHER_SWIFT_FLAGS = "$(inherited) -Onone"; - PRODUCT_MODULE_NAME = SnapKit; - PRODUCT_NAME = SnapKit; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 46C180702D7B28BE2A19F7D1B98AB6C2 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7713FFF549B559D0D25EC63F35B37D48 /* PopupDialog.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/PopupDialog/PopupDialog-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/PopupDialog/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/PopupDialog/PopupDialog.modulemap"; - OTHER_SWIFT_FLAGS = "$(inherited) -Onone"; - PRODUCT_MODULE_NAME = PopupDialog; - PRODUCT_NAME = PopupDialog; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.2; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 4D0BCD2F292079EFC90A84E96D00F874 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2EFCCE4F8D8906F8D5F76CA8AE894C87 /* SnapKit.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SnapKit/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; - PRODUCT_MODULE_NAME = SnapKit; - PRODUCT_NAME = SnapKit; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 52C1828493D4537DF044D0629E8D3A04 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2F919A175990F97BCDBDE83420483623 /* Pods-WebimClientLibrary_Tests.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-WebimClientLibrary_Tests/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.2; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 60DAF49CA7A9F362148D49C3C3123B2A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_ALLOWED = NO; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; - }; - 6A204ED9AAD3D7E0C29057269917A13D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 753C10651B46B038EB66F243787DC617 /* WebimClientLibrary.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/WebimClientLibrary/WebimClientLibrary-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/WebimClientLibrary/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/WebimClientLibrary/WebimClientLibrary.modulemap"; - OTHER_SWIFT_FLAGS = "$(inherited) -Onone"; - PRODUCT_MODULE_NAME = WebimClientLibrary; - PRODUCT_NAME = WebimClientLibrary; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 8CC2E0F5BD4B9891272CAB02ABCB34E2 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1A47949C61BCCE7C8DEB72DF882ECD0C /* Pods-WebimClientLibrary_Example.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-WebimClientLibrary_Example/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - OTHER_SWIFT_FLAGS = "$(inherited) -Onone"; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.2; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - A54BB9CF60D4BFC90AF8804F2A01F9D1 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7713FFF549B559D0D25EC63F35B37D48 /* PopupDialog.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/PopupDialog/PopupDialog-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/PopupDialog/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/PopupDialog/PopupDialog.modulemap"; - PRODUCT_MODULE_NAME = PopupDialog; - PRODUCT_NAME = PopupDialog; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 3.2; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - A87536F5D47569078C66DB381FCE760A /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8631E31F47FE2F38449A1FB83F991806 /* Pods-WebimClientLibrary_Tests.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-WebimClientLibrary_Tests/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - OTHER_SWIFT_FLAGS = "$(inherited) -Onone"; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.2; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - C4EAA84F44D044E108500A81C635F21E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_ALLOWED = NO; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; - CC26F94CE688F266C680EE240B8FF65C /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 753C10651B46B038EB66F243787DC617 /* WebimClientLibrary.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/WebimClientLibrary/WebimClientLibrary-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/WebimClientLibrary/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/WebimClientLibrary/WebimClientLibrary.modulemap"; - PRODUCT_MODULE_NAME = WebimClientLibrary; - PRODUCT_NAME = WebimClientLibrary; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - D2E249AB2F48C5EEE796BBF3709CA3A0 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D0FAB3E46C608770C483EA96E3773CCE /* Cosmos.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Cosmos/Cosmos-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Cosmos/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Cosmos/Cosmos.modulemap"; - PRODUCT_MODULE_NAME = Cosmos; - PRODUCT_NAME = Cosmos; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - DD3FFF8FFF9980599DDEDD48E826B8A4 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1B13DDE51DE201948A4F370B01AFA800 /* SlackTextViewController.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SlackTextViewController/SlackTextViewController-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SlackTextViewController/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SlackTextViewController/SlackTextViewController.modulemap"; - OTHER_SWIFT_FLAGS = "$(inherited) -Onone"; - PRODUCT_MODULE_NAME = SlackTextViewController; - PRODUCT_NAME = SlackTextViewController; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.2; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - E7865EFD0850FE0AD08079E7E9B58B40 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B527214951BD11F916FF3930927320F5 /* Pods-WebimClientLibrary_Example.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-WebimClientLibrary_Example/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 3.2; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - EBFD107521CFD3C958975080F6A9F4BA /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1B13DDE51DE201948A4F370B01AFA800 /* SlackTextViewController.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SlackTextViewController/SlackTextViewController-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SlackTextViewController/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SlackTextViewController/SlackTextViewController.modulemap"; - PRODUCT_MODULE_NAME = SlackTextViewController; - PRODUCT_NAME = SlackTextViewController; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 3.2; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - FE80D0809F138F81226CCB868B4A7BFC /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D6F8177EE6789172507581ADFBC158FA /* SQLite.swift.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SQLite.swift/SQLite.swift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SQLite.swift/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SQLite.swift/SQLite.swift.modulemap"; - OTHER_SWIFT_FLAGS = "$(inherited) -Onone"; - PRODUCT_MODULE_NAME = SQLite; - PRODUCT_NAME = SQLite; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.2; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1331725F12710A199E93B9362D83E053 /* Build configuration list for PBXNativeTarget "Pods-WebimClientLibrary_Example" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8CC2E0F5BD4B9891272CAB02ABCB34E2 /* Debug */, - E7865EFD0850FE0AD08079E7E9B58B40 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 60DAF49CA7A9F362148D49C3C3123B2A /* Debug */, - C4EAA84F44D044E108500A81C635F21E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3E5C3E8D70C3EC13BB22F1DFF36D0E38 /* Build configuration list for PBXNativeTarget "WebimClientLibrary" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 6A204ED9AAD3D7E0C29057269917A13D /* Debug */, - CC26F94CE688F266C680EE240B8FF65C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4C61372340C871AD3C1803E4CC219F5E /* Build configuration list for PBXNativeTarget "Pods-WebimClientLibrary_Tests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A87536F5D47569078C66DB381FCE760A /* Debug */, - 52C1828493D4537DF044D0629E8D3A04 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5270921954DE42D1421932792BFE0F2D /* Build configuration list for PBXNativeTarget "SlackTextViewController" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DD3FFF8FFF9980599DDEDD48E826B8A4 /* Debug */, - EBFD107521CFD3C958975080F6A9F4BA /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 7D6C475B9EA32C4BBF9FABE9BD31D7DC /* Build configuration list for PBXNativeTarget "Cosmos" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 19C00E854DFC8DD752A98E1C8A25132D /* Debug */, - D2E249AB2F48C5EEE796BBF3709CA3A0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - A1267B519BEC5E9CBF4FEB5007A5BC58 /* Build configuration list for PBXNativeTarget "PopupDialog" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 46C180702D7B28BE2A19F7D1B98AB6C2 /* Debug */, - A54BB9CF60D4BFC90AF8804F2A01F9D1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C1087926630019C5C339B864AC1CE59B /* Build configuration list for PBXNativeTarget "SnapKit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 36226959DF2142709F1FD6272E1E90EC /* Debug */, - 4D0BCD2F292079EFC90A84E96D00F874 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - E638652580646550105C48D7D86B05F6 /* Build configuration list for PBXNativeTarget "SQLite.swift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FE80D0809F138F81226CCB868B4A7BFC /* Debug */, - 34DD6D078D96AA022FF351D918E2629F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; -} diff --git a/Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a6..00000000 --- a/Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/Example/Pods/PopupDialog/LICENSE b/Example/Pods/PopupDialog/LICENSE deleted file mode 100644 index 6431917c..00000000 --- a/Example/Pods/PopupDialog/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -Author - Martin Wildfeuer (http://www.mwfire.de) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/FXBlurView.h b/Example/Pods/PopupDialog/PopupDialog/Classes/FXBlurView.h deleted file mode 100644 index 75256c47..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/FXBlurView.h +++ /dev/null @@ -1,81 +0,0 @@ -// -// FXBlurView.h -// -// Version 1.6.4 -// -// Created by Nick Lockwood on 25/08/2013. -// Copyright (c) 2013 Charcoal Design -// -// Distributed under the permissive zlib License -// Get the latest version from here: -// -// https://github.com/nicklockwood/FXBlurView -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// - - -#import -#import -#import - - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wobjc-missing-property-synthesis" - - -#import -#undef weak_ref -#if __has_feature(objc_arc) && __has_feature(objc_arc_weak) -#define weak_ref weak -#else -#define weak_ref unsafe_unretained -#endif - - -@interface UIImage (FXBlurView) - -- (UIImage *)blurredImageWithRadius:(CGFloat)radius iterations:(NSUInteger)iterations tintColor:(UIColor *)tintColor; - -@end - - -@interface FXBlurView : UIView - -+ (void)setBlurEnabled:(BOOL)blurEnabled; -+ (void)setUpdatesEnabled; -+ (void)setUpdatesDisabled; - -@property (nonatomic, getter = isBlurEnabled) BOOL blurEnabled; -@property (nonatomic, getter = isDynamic) BOOL dynamic; -@property (nonatomic, assign) NSUInteger iterations; -@property (nonatomic, assign) NSTimeInterval updateInterval; -@property (nonatomic, assign) CGFloat blurRadius; -@property (nonatomic, strong) UIColor *tintColor; -@property (nonatomic, weak_ref) IBOutlet UIView *underlyingView; - -- (void)updateAsynchronously:(BOOL)async completion:(void (^)(void))completion; - -- (void)clearImage; - -@end - - -#pragma GCC diagnostic pop - diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/FXBlurView.m b/Example/Pods/PopupDialog/PopupDialog/Classes/FXBlurView.m deleted file mode 100755 index 8ec4e239..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/FXBlurView.m +++ /dev/null @@ -1,712 +0,0 @@ -// -// FXBlurView.m -// -// Version 1.6.4 -// -// Created by Nick Lockwood on 25/08/2013. -// Copyright (c) 2013 Charcoal Design -// -// Distributed under the permissive zlib License -// Get the latest version from here: -// -// https://github.com/nicklockwood/FXBlurView -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// - - -#import "FXBlurView.h" -#import - - -#pragma GCC diagnostic ignored "-Wobjc-missing-property-synthesis" -#pragma GCC diagnostic ignored "-Wdirect-ivar-access" -#pragma GCC diagnostic ignored "-Wgnu" - - -#import -#if !__has_feature(objc_arc) -#error This class requires automatic reference counting -#endif - - -@implementation UIImage (FXBlurView) - -- (UIImage *)blurredImageWithRadius:(CGFloat)radius iterations:(NSUInteger)iterations tintColor:(UIColor *)tintColor -{ - //image must be nonzero size - if (floorf(self.size.width) * floorf(self.size.height) <= 0.0f) return self; - - //boxsize must be an odd integer - uint32_t boxSize = (uint32_t)(radius * self.scale); - if (boxSize % 2 == 0) boxSize ++; - - //create image buffers - CGImageRef imageRef = self.CGImage; - - //convert to ARGB if it isn't - if (CGImageGetBitsPerPixel(imageRef) != 32 || - CGImageGetBitsPerComponent(imageRef) != 8 || - !((CGImageGetBitmapInfo(imageRef) & kCGBitmapAlphaInfoMask))) - { - UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale); - [self drawAtPoint:CGPointZero]; - imageRef = UIGraphicsGetImageFromCurrentImageContext().CGImage; - UIGraphicsEndImageContext(); - } - - vImage_Buffer buffer1, buffer2; - buffer1.width = buffer2.width = CGImageGetWidth(imageRef); - buffer1.height = buffer2.height = CGImageGetHeight(imageRef); - buffer1.rowBytes = buffer2.rowBytes = CGImageGetBytesPerRow(imageRef); - size_t bytes = buffer1.rowBytes * buffer1.height; - buffer1.data = malloc(bytes); - buffer2.data = malloc(bytes); - - //create temp buffer - void *tempBuffer = malloc((size_t)vImageBoxConvolve_ARGB8888(&buffer1, &buffer2, NULL, 0, 0, boxSize, boxSize, - NULL, kvImageEdgeExtend + kvImageGetTempBufferSize)); - - //copy image data - CFDataRef dataSource = CGDataProviderCopyData(CGImageGetDataProvider(imageRef)); - memcpy(buffer1.data, CFDataGetBytePtr(dataSource), bytes); - CFRelease(dataSource); - - for (NSUInteger i = 0; i < iterations; i++) - { - //perform blur - vImageBoxConvolve_ARGB8888(&buffer1, &buffer2, tempBuffer, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend); - - //swap buffers - void *temp = buffer1.data; - buffer1.data = buffer2.data; - buffer2.data = temp; - } - - //free buffers - free(buffer2.data); - free(tempBuffer); - - //create image context from buffer - CGContextRef ctx = CGBitmapContextCreate(buffer1.data, buffer1.width, buffer1.height, - 8, buffer1.rowBytes, CGImageGetColorSpace(imageRef), - CGImageGetBitmapInfo(imageRef)); - - //apply tint - if (tintColor && CGColorGetAlpha(tintColor.CGColor) > 0.0f) - { - CGContextSetFillColorWithColor(ctx, [tintColor colorWithAlphaComponent:0.25].CGColor); - CGContextSetBlendMode(ctx, kCGBlendModePlusLighter); - CGContextFillRect(ctx, CGRectMake(0, 0, buffer1.width, buffer1.height)); - } - - //create image from context - imageRef = CGBitmapContextCreateImage(ctx); - UIImage *image = [UIImage imageWithCGImage:imageRef scale:self.scale orientation:self.imageOrientation]; - CGImageRelease(imageRef); - CGContextRelease(ctx); - free(buffer1.data); - return image; -} - -@end - - -@interface FXBlurScheduler : NSObject - -@property (nonatomic, strong) NSMutableArray *views; -@property (nonatomic, assign) NSUInteger viewIndex; -@property (nonatomic, assign) NSUInteger updatesEnabled; -@property (nonatomic, assign) BOOL blurEnabled; -@property (nonatomic, assign) BOOL updating; - -@end - - -@interface FXBlurLayer: CALayer - -@property (nonatomic, assign) CGFloat blurRadius; - -@end - - -@implementation FXBlurLayer - -@dynamic blurRadius; - -+ (BOOL)needsDisplayForKey:(NSString *)key -{ - if ([@[@"blurRadius", @"bounds", @"position"] containsObject:key]) - { - return YES; - } - return [super needsDisplayForKey:key]; -} - -@end - - -@interface FXBlurView () - -@property (nonatomic, assign) BOOL iterationsSet; -@property (nonatomic, assign) BOOL blurRadiusSet; -@property (nonatomic, assign) BOOL dynamicSet; -@property (nonatomic, assign) BOOL blurEnabledSet; -@property (nonatomic, strong) NSDate *lastUpdate; -@property (nonatomic, assign) BOOL needsDrawViewHierarchy; - -- (UIImage *)snapshotOfUnderlyingView; -- (BOOL)shouldUpdate; - -@end - - -@implementation FXBlurScheduler - -+ (instancetype)sharedInstance -{ - static FXBlurScheduler *sharedInstance = nil; - if (!sharedInstance) - { - sharedInstance = [[FXBlurScheduler alloc] init]; - } - return sharedInstance; -} - -- (instancetype)init -{ - if ((self = [super init])) - { - _updatesEnabled = 1; - _blurEnabled = YES; - _views = [[NSMutableArray alloc] init]; - } - return self; -} - -- (void)setBlurEnabled:(BOOL)blurEnabled -{ - _blurEnabled = blurEnabled; - if (blurEnabled) - { - for (FXBlurView *view in self.views) - { - [view setNeedsDisplay]; - } - [self updateAsynchronously]; - } -} - -- (void)setUpdatesEnabled -{ - _updatesEnabled ++; - [self updateAsynchronously]; -} - -- (void)setUpdatesDisabled -{ - _updatesEnabled --; -} - -- (void)addView:(FXBlurView *)view -{ - if (![self.views containsObject:view]) - { - [self.views addObject:view]; - [self updateAsynchronously]; - } -} - -- (void)removeView:(FXBlurView *)view -{ - NSUInteger index = [self.views indexOfObject:view]; - if (index != NSNotFound) - { - if (index <= self.viewIndex) - { - self.viewIndex --; - } - [self.views removeObjectAtIndex:index]; - } -} - -- (void)updateAsynchronously -{ - if (self.blurEnabled && !self.updating && self.updatesEnabled > 0 && [self.views count]) - { - NSTimeInterval timeUntilNextUpdate = 1.0 / 60; - - //loop through until we find a view that's ready to be drawn - self.viewIndex = self.viewIndex % [self.views count]; - for (NSUInteger i = self.viewIndex; i < [self.views count]; i++) - { - FXBlurView *view = self.views[i]; - if (view.dynamic && !view.hidden && view.window && [view shouldUpdate]) - { - NSTimeInterval nextUpdate = [view.lastUpdate timeIntervalSinceNow] + view.updateInterval; - if (!view.lastUpdate || nextUpdate <= 0) - { - self.updating = YES; - [view updateAsynchronously:YES completion:^{ - - //render next view - self.updating = NO; - self.viewIndex = i + 1; - [self updateAsynchronously]; - }]; - return; - } - else - { - timeUntilNextUpdate = MIN(timeUntilNextUpdate, nextUpdate); - } - } - } - - //try again, delaying until the time when the next view needs an update. - self.viewIndex = 0; - [self performSelector:@selector(updateAsynchronously) - withObject:nil - afterDelay:timeUntilNextUpdate - inModes:@[NSDefaultRunLoopMode, UITrackingRunLoopMode]]; - } -} - -@end - - -@implementation FXBlurView - -@synthesize underlyingView = _underlyingView; - -+ (void)setBlurEnabled:(BOOL)blurEnabled -{ - [FXBlurScheduler sharedInstance].blurEnabled = blurEnabled; -} - -+ (void)setUpdatesEnabled -{ - [[FXBlurScheduler sharedInstance] setUpdatesEnabled]; -} - -+ (void)setUpdatesDisabled -{ - [[FXBlurScheduler sharedInstance] setUpdatesDisabled]; -} - -+ (Class)layerClass -{ - return [FXBlurLayer class]; -} - -- (void)setUp -{ - if (!_iterationsSet) _iterations = 3; - if (!_blurRadiusSet) [self blurLayer].blurRadius = 40; - if (!_dynamicSet) _dynamic = YES; - if (!_blurEnabledSet) _blurEnabled = YES; - self.updateInterval = _updateInterval; - self.layer.magnificationFilter = @"linear"; // kCAFilterLinear - - unsigned int numberOfMethods; - Method *methods = class_copyMethodList([UIView class], &numberOfMethods); - for (unsigned int i = 0; i < numberOfMethods; i++) - { - Method method = methods[i]; - SEL selector = method_getName(method); - if (selector == @selector(tintColor)) - { - _tintColor = ((id (*)(id,SEL))method_getImplementation(method))(self, selector); - break; - } - } - free(methods); - -} - -- (id)initWithFrame:(CGRect)frame -{ - if ((self = [super initWithFrame:frame])) - { - [self setUp]; - self.clipsToBounds = YES; - } - return self; -} - -- (id)initWithCoder:(NSCoder *)aDecoder -{ - if ((self = [super initWithCoder:aDecoder])) - { - [self setUp]; - } - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - - -- (BOOL)viewOrSubviewNeedsDrawViewHierarchy:(UIView *)view -{ - if ([view isKindOfClass:NSClassFromString(@"SKView")] || - [view.layer isKindOfClass:NSClassFromString(@"CAEAGLLayer")] || - [view.layer isKindOfClass:NSClassFromString(@"AVPlayerLayer")] || - ABS(view.layer.transform.m34) > 0) - { - return YES; - } - for (UIView *subview in view.subviews) - { - if ([self viewOrSubviewNeedsDrawViewHierarchy:subview]) - { - return YES; - } - } - return NO; -} - -- (void)willMoveToSuperview:(UIView *)newSuperview -{ - [super willMoveToSuperview:newSuperview]; - if (!_underlyingView) - { - _needsDrawViewHierarchy = [self viewOrSubviewNeedsDrawViewHierarchy:newSuperview]; - } -} - -- (void)setIterations:(NSUInteger)iterations -{ - _iterationsSet = YES; - _iterations = iterations; - [self setNeedsDisplay]; -} - -- (void)setBlurRadius:(CGFloat)blurRadius -{ - _blurRadiusSet = YES; - [self blurLayer].blurRadius = blurRadius; -} - -- (CGFloat)blurRadius -{ - return [self blurLayer].blurRadius; -} - -- (void)setBlurEnabled:(BOOL)blurEnabled -{ - _blurEnabledSet = YES; - if (_blurEnabled != blurEnabled) - { - _blurEnabled = blurEnabled; - [self schedule]; - if (_blurEnabled) - { - [self setNeedsDisplay]; - } - } -} - -- (void)setDynamic:(BOOL)dynamic -{ - _dynamicSet = YES; - if (_dynamic != dynamic) - { - _dynamic = dynamic; - [self schedule]; - if (!dynamic) - { - [self setNeedsDisplay]; - } - } -} - -- (UIView *)underlyingView -{ - return _underlyingView ?: self.superview; -} - -- (void)setUnderlyingView:(UIView *)underlyingView -{ - _underlyingView = underlyingView; - _needsDrawViewHierarchy = [self viewOrSubviewNeedsDrawViewHierarchy:self.underlyingView]; - [self setNeedsDisplay]; -} - -- (CALayer *)underlyingLayer -{ - return self.underlyingView.layer; -} - -- (FXBlurLayer *)blurLayer -{ - return (FXBlurLayer *)self.layer; -} - -- (FXBlurLayer *)blurPresentationLayer -{ - FXBlurLayer *blurLayer = [self blurLayer]; - return (FXBlurLayer *)blurLayer.presentationLayer ?: blurLayer; -} - -- (void)setUpdateInterval:(NSTimeInterval)updateInterval -{ - _updateInterval = updateInterval; - if (_updateInterval <= 0) _updateInterval = 1.0/60; -} - -- (void)setTintColor:(UIColor *)tintColor -{ - _tintColor = tintColor; - [self setNeedsDisplay]; -} - -- (void)clearImage { - self.layer.contents = nil; - [self setNeedsDisplay]; -} - -- (void)didMoveToSuperview -{ - [super didMoveToSuperview]; - [self.layer setNeedsDisplay]; -} - -- (void)didMoveToWindow -{ - [super didMoveToWindow]; - [self schedule]; -} - -- (void)schedule -{ - if (self.window && self.dynamic && self.blurEnabled) - { - [[FXBlurScheduler sharedInstance] addView:self]; - } - else - { - [[FXBlurScheduler sharedInstance] removeView:self]; - } -} - -- (void)setNeedsDisplay -{ - [super setNeedsDisplay]; - [self.layer setNeedsDisplay]; -} - -- (BOOL)shouldUpdate -{ - __strong CALayer *underlyingLayer = [self underlyingLayer]; - - return - underlyingLayer && !underlyingLayer.hidden && - self.blurEnabled && [FXBlurScheduler sharedInstance].blurEnabled && - !CGRectIsEmpty([self.layer.presentationLayer ?: self.layer bounds]) && !CGRectIsEmpty(underlyingLayer.bounds); -} - -- (void)displayLayer:(__unused CALayer *)layer -{ - [self updateAsynchronously:NO completion:NULL]; -} - -- (id)actionForLayer:(CALayer *)layer forKey:(NSString *)key -{ - if ([key isEqualToString:@"blurRadius"]) - { - //animations are enabled - CAAnimation *action = (CAAnimation *)[super actionForLayer:layer forKey:@"backgroundColor"]; - if ((NSNull *)action != [NSNull null]) - { - CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:key]; - animation.fromValue = [layer.presentationLayer valueForKey:key]; - - //CAMediatiming attributes - animation.beginTime = action.beginTime; - animation.duration = action.duration; - animation.speed = action.speed; - animation.timeOffset = action.timeOffset; - animation.repeatCount = action.repeatCount; - animation.repeatDuration = action.repeatDuration; - animation.autoreverses = action.autoreverses; - animation.fillMode = action.fillMode; - - //CAAnimation attributes - animation.timingFunction = action.timingFunction; - animation.delegate = action.delegate; - - return animation; - } - } - return [super actionForLayer:layer forKey:key]; -} - -- (UIImage *)snapshotOfUnderlyingView -{ - __strong FXBlurLayer *blurLayer = [self blurPresentationLayer]; - __strong CALayer *underlyingLayer = [self underlyingLayer]; - CGRect bounds = [blurLayer convertRect:blurLayer.bounds toLayer:underlyingLayer]; - - self.lastUpdate = [NSDate date]; - CGFloat scale = 0.5; - if (self.iterations) - { - CGFloat blockSize = 12.0/self.iterations; - scale = blockSize/MAX(blockSize * 2, blurLayer.blurRadius); - scale = 1.0/floor(1.0/scale); - } - CGSize size = bounds.size; - if (self.contentMode == UIViewContentModeScaleToFill || - self.contentMode == UIViewContentModeScaleAspectFill || - self.contentMode == UIViewContentModeScaleAspectFit || - self.contentMode == UIViewContentModeRedraw) - { - //prevents edge artefacts - size.width = floor(size.width * scale) / scale; - size.height = floor(size.height * scale) / scale; - } - else if ([[UIDevice currentDevice].systemVersion floatValue] < 7.0 && [UIScreen mainScreen].scale == 1.0) - { - //prevents pixelation on old devices - scale = 1.0; - } - UIGraphicsBeginImageContextWithOptions(size, NO, scale); - CGContextRef context = UIGraphicsGetCurrentContext(); - if (context) - { - CGContextTranslateCTM(context, -bounds.origin.x, -bounds.origin.y); - - NSArray *hiddenViews = [self prepareUnderlyingViewForSnapshot]; - if (self.needsDrawViewHierarchy) - { - __strong UIView *underlyingView = self.underlyingView; - [underlyingView drawViewHierarchyInRect:underlyingView.bounds afterScreenUpdates:YES]; - } - else - { - [underlyingLayer renderInContext:context]; - } - [self restoreSuperviewAfterSnapshot:hiddenViews]; - UIImage *snapshot = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return snapshot; - } - return nil; -} - -- (NSArray *)hideEmptyLayers:(CALayer *)layer -{ - NSMutableArray *layers = [NSMutableArray array]; - - // See https://github.com/nicklockwood/FXBlurView/issues/126 - if (CGRectIsEmpty(layer.bounds) && !layer.hidden) - { - layer.hidden = YES; - [layers addObject:layer]; - } - for (CALayer *sublayer in layer.sublayers) - { - [layers addObjectsFromArray:[self hideEmptyLayers:sublayer]]; - } - return layers; -} - -- (NSArray *)prepareUnderlyingViewForSnapshot -{ - __strong CALayer *blurlayer = [self blurLayer]; - __strong CALayer *underlyingLayer = [self underlyingLayer]; - while (blurlayer.superlayer && blurlayer.superlayer != underlyingLayer) - { - blurlayer = blurlayer.superlayer; - } - NSMutableArray *layers = [NSMutableArray array]; - NSUInteger index = [underlyingLayer.sublayers indexOfObject:blurlayer]; - if (index != NSNotFound) - { - for (NSUInteger i = index; i < [underlyingLayer.sublayers count]; i++) - { - CALayer *layer = underlyingLayer.sublayers[i]; - if (!layer.hidden) - { - layer.hidden = YES; - [layers addObject:layer]; - } - } - } - - //also hide any sublayers with empty bounds to prevent a crash on iOS 8 - [layers addObjectsFromArray:[self hideEmptyLayers:underlyingLayer]]; - - return layers; -} - -- (void)restoreSuperviewAfterSnapshot:(NSArray *)hiddenLayers -{ - for (CALayer *layer in hiddenLayers) - { - layer.hidden = NO; - } -} - -- (UIImage *)blurredSnapshot:(UIImage *)snapshot radius:(CGFloat)blurRadius -{ - return [snapshot blurredImageWithRadius:blurRadius - iterations:self.iterations - tintColor:self.tintColor]; -} - -- (void)setLayerContents:(UIImage *)image -{ - self.layer.contents = (id)image.CGImage; - self.layer.contentsScale = image.scale; -} - -- (void)updateAsynchronously:(BOOL)async completion:(void (^)(void))completion -{ - if ([self shouldUpdate]) - { - UIImage *snapshot = [self snapshotOfUnderlyingView]; - if (async) - { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - - UIImage *blurredImage = [self blurredSnapshot:snapshot radius:self.blurRadius]; - dispatch_sync(dispatch_get_main_queue(), ^{ - - [self setLayerContents:blurredImage]; - if (completion) completion(); - }); - }); - } - else - { - [self setLayerContents:[self blurredSnapshot:snapshot radius:[self blurPresentationLayer].blurRadius]]; - if (completion) completion(); - } - } - else if (completion) - { - completion(); - } -} - -@end diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/InteractiveTransition.swift b/Example/Pods/PopupDialog/PopupDialog/Classes/InteractiveTransition.swift deleted file mode 100644 index 0f9f2f43..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/InteractiveTransition.swift +++ /dev/null @@ -1,86 +0,0 @@ -// -// PopupDialogInteractiveTransition.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -// Handles interactive transition triggered via pan gesture recognizer on dialog -final internal class InteractiveTransition: UIPercentDrivenInteractiveTransition { - - // If the interactive transition was started - var hasStarted = false - - // If the interactive transition - var shouldFinish = false - - // The view controller containing the views - // with attached gesture recognizers - weak var viewController: UIViewController? - - @objc func handlePan(_ sender: UIPanGestureRecognizer) { - - guard let vc = viewController else { return } - - guard let progress = calculateProgress(sender: sender) else { return } - - switch sender.state { - case .began: - hasStarted = true - vc.dismiss(animated: true, completion: nil) - case .changed: - shouldFinish = progress > 0.3 - update(progress) - case .cancelled: - hasStarted = false - cancel() - case .ended: - hasStarted = false - completionSpeed = 0.55 - shouldFinish ? finish() : cancel() - default: - break - } - } -} - -internal extension InteractiveTransition { - - /*! - Translates the pan gesture recognizer position to the progress percentage - - parameter sender: A UIPanGestureRecognizer - - returns: Progress - */ - func calculateProgress(sender: UIPanGestureRecognizer) -> CGFloat? { - guard let vc = viewController else { return nil } - - // http://www.thorntech.com/2016/02/ios-tutorial-close-modal-dragging/ - let translation = sender.translation(in: vc.view) - let verticalMovement = translation.y / vc.view.bounds.height - let downwardMovement = fmaxf(Float(verticalMovement), 0.0) - let downwardMovementPercent = fminf(downwardMovement, 1.0) - let progress = CGFloat(downwardMovementPercent) - - return progress - } -} diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialog+Keyboard.swift b/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialog+Keyboard.swift deleted file mode 100644 index f472f2df..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialog+Keyboard.swift +++ /dev/null @@ -1,132 +0,0 @@ -// -// PopupDialog+Keyboard.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation -import UIKit - -/// This extension is designed to handle dialog positioning -/// if a keyboard is displayed while the popup is on top -internal extension PopupDialog { - - // MARK: - Keyboard & orientation observers - - /*! Add obserservers for UIKeyboard notifications */ - internal func addObservers() { - NotificationCenter.default.addObserver(self, selector: #selector(orientationChanged), - name: NSNotification.Name.UIDeviceOrientationDidChange, - object: nil) - - NotificationCenter.default.addObserver(self, - selector: #selector(keyboardWillShow), - name: NSNotification.Name.UIKeyboardWillShow, - object: nil) - - NotificationCenter.default.addObserver(self, - selector: #selector(keyboardWillHide), - name: NSNotification.Name.UIKeyboardWillHide, - object: nil) - - NotificationCenter.default.addObserver(self, - selector: #selector(keyboardWillChangeFrame), - name: NSNotification.Name.UIKeyboardWillChangeFrame, - object: nil) - } - - /*! Remove observers */ - internal func removeObservers() { - NotificationCenter.default.removeObserver(self, - name: NSNotification.Name.UIDeviceOrientationDidChange, - object: nil) - - NotificationCenter.default.removeObserver(self, - name: NSNotification.Name.UIKeyboardWillShow, - object: nil) - - NotificationCenter.default.removeObserver(self, - name: NSNotification.Name.UIKeyboardWillHide, - object: nil) - - NotificationCenter.default.removeObserver(self, - name: NSNotification.Name.UIKeyboardWillChangeFrame, - object: nil) - } - - // MARK: - Actions - - /*! - Keyboard will show notification listener - - parameter notification: NSNotification - */ - @objc fileprivate func keyboardWillShow(_ notification: Notification) { - guard isTopAndVisible else { return } - keyboardShown = true - centerPopup() - } - - /*! - Keyboard will hide notification listener - - parameter notification: NSNotification - */ - @objc fileprivate func keyboardWillHide(_ notification: Notification) { - guard isTopAndVisible else { return } - keyboardShown = false - centerPopup() - } - - /*! - Keyboard will change frame notification listener - - parameter notification: NSNotification - */ - @objc fileprivate func keyboardWillChangeFrame(_ notification: Notification) { - guard let keyboardRect = (notification as NSNotification).userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue else { - return - } - keyboardHeight = keyboardRect.cgRectValue.height - } - - /*! - Listen to orientation changes - - parameter notification: NSNotification - */ - @objc fileprivate func orientationChanged(_ notification: Notification) { - if keyboardShown { centerPopup() } - } - - fileprivate func centerPopup() { - - // Make sure keyboard should reposition on keayboard notifications - guard keyboardShiftsView else { return } - - // Make sure a valid keyboard height is available - guard let keyboardHeight = keyboardHeight else { return } - - // Calculate new center of shadow background - let popupCenter = keyboardShown ? keyboardHeight / -2 : 0 - - // Reposition and animate - popupContainerView.centerYConstraint?.constant = popupCenter - popupContainerView.pv_layoutIfNeededAnimated() - } -} diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialog.swift b/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialog.swift deleted file mode 100644 index 12b75cc3..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialog.swift +++ /dev/null @@ -1,334 +0,0 @@ -// -// PopupDialog.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation -import UIKit - -/// Creates a Popup dialog similar to UIAlertController -final public class PopupDialog: UIViewController { - - // MARK: Private / Internal - - /// First init flag - fileprivate var initialized = false - - /// StatusBar display related - fileprivate let hideStatusBar: Bool - fileprivate var statusBarShouldBeHidden: Bool = false - - /// Width for iPad displays - fileprivate let preferredWidth: CGFloat - - /// The completion handler - fileprivate var completion: (() -> Void)? - - /// The custom transition presentation manager - fileprivate var presentationManager: PresentationManager! - - /// Interactor class for pan gesture dismissal - fileprivate lazy var interactor = InteractiveTransition() - - /// Returns the controllers view - internal var popupContainerView: PopupDialogContainerView { - return view as! PopupDialogContainerView // swiftlint:disable:this force_cast - } - - /// The set of buttons - fileprivate var buttons = [PopupDialogButton]() - - /// Whether keyboard has shifted view - internal var keyboardShown = false - - /// Keyboard height - internal var keyboardHeight: CGFloat? - - // MARK: Public - - /// The content view of the popup dialog - public var viewController: UIViewController - - /// Whether or not to shift view for keyboard display - public var keyboardShiftsView = true - - // MARK: - Initializers - - /*! - Creates a standard popup dialog with title, message and image field - - - parameter title: The dialog title - - parameter message: The dialog message - - parameter image: The dialog image - - parameter buttonAlignment: The dialog button alignment - - parameter transitionStyle: The dialog transition style - - parameter preferredWidth: The preferred width for iPad screens - - parameter gestureDismissal: Indicates if dialog can be dismissed via pan gesture - - parameter hideStatusBar: Whether to hide the status bar on PopupDialog presentation - - parameter completion: Completion block invoked when dialog was dismissed - - - returns: Popup dialog default style - */ - public convenience init( - title: String?, - message: String?, - image: UIImage? = nil, - buttonAlignment: UILayoutConstraintAxis = .vertical, - transitionStyle: PopupDialogTransitionStyle = .bounceUp, - preferredWidth: CGFloat = 340, - gestureDismissal: Bool = true, - hideStatusBar: Bool = false, - completion: (() -> Void)? = nil) { - - // Create and configure the standard popup dialog view - let viewController = PopupDialogDefaultViewController() - viewController.titleText = title - viewController.messageText = message - viewController.image = image - - // Call designated initializer - self.init(viewController: viewController, - buttonAlignment: buttonAlignment, - transitionStyle: transitionStyle, - preferredWidth: preferredWidth, - gestureDismissal: gestureDismissal, - hideStatusBar: hideStatusBar, - completion: completion) - } - - /*! - Creates a popup dialog containing a custom view - - - parameter viewController: A custom view controller to be displayed - - parameter buttonAlignment: The dialog button alignment - - parameter transitionStyle: The dialog transition style - - parameter preferredWidth: The preferred width for iPad screens - - parameter gestureDismissal: Indicates if dialog can be dismissed via pan gesture - - parameter hideStatusBar: Whether to hide the status bar on PopupDialog presentation - - parameter completion: Completion block invoked when dialog was dismissed - - - returns: Popup dialog with a custom view controller - */ - public init( - viewController: UIViewController, - buttonAlignment: UILayoutConstraintAxis = .vertical, - transitionStyle: PopupDialogTransitionStyle = .bounceUp, - preferredWidth: CGFloat = 340, - gestureDismissal: Bool = true, - hideStatusBar: Bool = false, - completion: (() -> Void)? = nil) { - - self.viewController = viewController - self.preferredWidth = preferredWidth - self.hideStatusBar = hideStatusBar - self.completion = completion - super.init(nibName: nil, bundle: nil) - - // Init the presentation manager - presentationManager = PresentationManager(transitionStyle: transitionStyle, interactor: interactor) - - // Assign the interactor view controller - interactor.viewController = self - - // Define presentation styles - transitioningDelegate = presentationManager - modalPresentationStyle = .custom - - // StatusBar setup - modalPresentationCapturesStatusBarAppearance = true - - // Add our custom view to the container - addChildViewController(viewController) - popupContainerView.stackView.insertArrangedSubview(viewController.view, at: 0) - popupContainerView.buttonStackView.axis = buttonAlignment - viewController.didMove(toParentViewController: self) - - // Allow for dialog dismissal on background tap and dialog pan gesture - if gestureDismissal { - let panRecognizer = UIPanGestureRecognizer(target: interactor, action: #selector(InteractiveTransition.handlePan)) - popupContainerView.stackView.addGestureRecognizer(panRecognizer) - let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap)) - tapRecognizer.cancelsTouchesInView = false - panRecognizer.cancelsTouchesInView = false - popupContainerView.addGestureRecognizer(tapRecognizer) - } - } - - // Init with coder not implemented - required public init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - View life cycle - - /// Replaces controller view with popup view - public override func loadView() { - view = PopupDialogContainerView(frame: UIScreen.main.bounds, preferredWidth: preferredWidth) - } - - public override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - addObservers() - - guard !initialized else { return } - appendButtons() - initialized = true - } - - public override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - - statusBarShouldBeHidden = hideStatusBar - UIView.animate(withDuration: 0.15) { - self.setNeedsStatusBarAppearanceUpdate() - } - } - - public override func viewWillDisappear(_ animated: Bool) { - super.viewWillDisappear(animated) - removeObservers() - } - - deinit { - completion?() - completion = nil - } - - // MARK: - Dismissal related - - @objc fileprivate func handleTap(_ sender: UITapGestureRecognizer) { - - // Make sure it's not a tap on the dialog but the background - let point = sender.location(in: popupContainerView.stackView) - guard !popupContainerView.stackView.point(inside: point, with: nil) else { return } - dismiss() - } - - /*! - Dismisses the popup dialog - */ - public func dismiss(_ completion: (() -> Void)? = nil) { - self.dismiss(animated: true) { - completion?() - } - } - - // MARK: - Button related - - /*! - Appends the buttons added to the popup dialog - to the placeholder stack view - */ - fileprivate func appendButtons() { - - // Add action to buttons - let stackView = popupContainerView.stackView - let buttonStackView = popupContainerView.buttonStackView - if buttons.isEmpty { - stackView.removeArrangedSubview(popupContainerView.buttonStackView) - } - - for (index, button) in buttons.enumerated() { - button.needsLeftSeparator = buttonStackView.axis == .horizontal && index > 0 - buttonStackView.addArrangedSubview(button) - button.addTarget(self, action: #selector(buttonTapped(_:)), for: .touchUpInside) - } - } - - /*! - Adds a single PopupDialogButton to the Popup dialog - - parameter button: A PopupDialogButton instance - */ - public func addButton(_ button: PopupDialogButton) { - buttons.append(button) - } - - /*! - Adds an array of PopupDialogButtons to the Popup dialog - - parameter buttons: A list of PopupDialogButton instances - */ - public func addButtons(_ buttons: [PopupDialogButton]) { - self.buttons += buttons - } - - /// Calls the action closure of the button instance tapped - @objc fileprivate func buttonTapped(_ button: PopupDialogButton) { - if button.dismissOnTap { - dismiss({ button.buttonAction?() }) - } else { - button.buttonAction?() - } - } - - /*! - Simulates a button tap for the given index - Makes testing a breeze - - parameter index: The index of the button to tap - */ - public func tapButtonWithIndex(_ index: Int) { - let button = buttons[index] - button.buttonAction?() - } - - // MARK: - StatusBar display related - - public override var prefersStatusBarHidden: Bool { - return statusBarShouldBeHidden - } - - public override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { - return .slide - } -} - -// MARK: - View proxy values - -extension PopupDialog { - - /// The button alignment of the alert dialog - public var buttonAlignment: UILayoutConstraintAxis { - get { - return popupContainerView.buttonStackView.axis - } - set { - popupContainerView.buttonStackView .axis = newValue - popupContainerView.pv_layoutIfNeededAnimated() - } - } - - /// The transition style - public var transitionStyle: PopupDialogTransitionStyle { - get { return presentationManager.transitionStyle } - set { presentationManager.transitionStyle = newValue } - } -} - -// MARK: - Shake - -extension PopupDialog { - - /// Performs a shake animation on the dialog - public func shake() { - popupContainerView.pv_shake() - } -} diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogButton.swift b/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogButton.swift deleted file mode 100644 index 52ce6f81..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogButton.swift +++ /dev/null @@ -1,168 +0,0 @@ -// -// PopupDialogButton.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation -import UIKit - -/// Represents the default button for the popup dialog -open class PopupDialogButton: UIButton { - - public typealias PopupDialogButtonAction = () -> Void - - // MARK: Public - - /// The font and size of the button title - @objc open dynamic var titleFont: UIFont? { - get { return titleLabel?.font } - set { titleLabel?.font = newValue } - } - - /// The height of the button - @objc open dynamic var buttonHeight: Int - - /// The title color of the button - @objc open dynamic var titleColor: UIColor? { - get { return self.titleColor(for: UIControlState()) } - set { setTitleColor(newValue, for: UIControlState()) } - } - - /// The background color of the button - @objc open dynamic var buttonColor: UIColor? { - get { return backgroundColor } - set { backgroundColor = newValue } - } - - /// The separator color of this button - @objc open dynamic var separatorColor: UIColor? { - get { return separator.backgroundColor } - set { - separator.backgroundColor = newValue - leftSeparator.backgroundColor = newValue - } - } - - /// Default appearance of the button - open var defaultTitleFont = UIFont.systemFont(ofSize: 14) - open var defaultTitleColor = UIColor(red: 0.25, green: 0.53, blue: 0.91, alpha: 1) - open var defaultButtonColor = UIColor.clear - open var defaultSeparatorColor = UIColor(white: 0.9, alpha: 1) - - /// Whether button should dismiss popup when tapped - open var dismissOnTap = true - - /// The action called when the button is tapped - open fileprivate(set) var buttonAction: PopupDialogButtonAction? - - // MARK: Private - - fileprivate lazy var separator: UIView = { - let line = UIView(frame: .zero) - line.translatesAutoresizingMaskIntoConstraints = false - return line - }() - - fileprivate lazy var leftSeparator: UIView = { - let line = UIView(frame: .zero) - line.translatesAutoresizingMaskIntoConstraints = false - line.alpha = 0 - return line - }() - - // MARK: Internal - - internal var needsLeftSeparator: Bool = false { - didSet { - leftSeparator.alpha = needsLeftSeparator ? 1.0 : 0.0 - } - } - - // MARK: Initializers - - /*! - Creates a button that can be added to the popup dialog - - - parameter title: The button title - - parameter dismisssOnTap: Whether a tap automatically dismisses the dialog - - parameter action: The action closure - - - returns: PopupDialogButton - */ - public init(title: String, - height: Int = 45, - dismissOnTap: Bool = true, action: PopupDialogButtonAction?) { - - // Assign the button height - buttonHeight = height - - // Assign the button action - buttonAction = action - - super.init(frame: .zero) - - // Set the button title - setTitle(title, for: UIControlState()) - - self.dismissOnTap = dismissOnTap - - // Setup the views - setupView() - } - - required public init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: View setup - - open func setupView() { - - // Default appearance - setTitleColor(defaultTitleColor, for: UIControlState()) - titleLabel?.font = defaultTitleFont - backgroundColor = defaultButtonColor - separator.backgroundColor = defaultSeparatorColor - leftSeparator.backgroundColor = defaultSeparatorColor - - // Add and layout views - addSubview(separator) - addSubview(leftSeparator) - - let views = ["separator": separator, "leftSeparator": leftSeparator, "button": self] - let metrics = ["buttonHeight": buttonHeight] - var constraints = [NSLayoutConstraint]() - constraints += NSLayoutConstraint.constraints(withVisualFormat: "V:[button(buttonHeight)]", options: [], metrics: metrics, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|[separator]|", options: [], metrics: nil, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "V:|[separator(1)]", options: [], metrics: nil, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|[leftSeparator(1)]", options: [], metrics: nil, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "V:|[leftSeparator]|", options: [], metrics: nil, views: views) - NSLayoutConstraint.activate(constraints) - } - - open override var isHighlighted: Bool { - didSet { - isHighlighted ? pv_fade(.out, 0.5) : pv_fade(.in, 1.0) - } - } -} diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogContainerView.swift b/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogContainerView.swift deleted file mode 100644 index 8fdd31be..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogContainerView.swift +++ /dev/null @@ -1,171 +0,0 @@ -// -// PopupDialogContainerView.swift -// Pods -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation -import UIKit - -/// The main view of the popup dialog -final public class PopupDialogContainerView: UIView { - - // MARK: - Appearance - - /// The background color of the popup dialog - override public dynamic var backgroundColor: UIColor? { - get { return container.backgroundColor } - set { container.backgroundColor = newValue } - } - - /// The corner radius of the popup view - @objc public dynamic var cornerRadius: Float { - get { return Float(shadowContainer.layer.cornerRadius) } - set { - let radius = CGFloat(newValue) - shadowContainer.layer.cornerRadius = radius - container.layer.cornerRadius = radius - } - } - - /// Enable / disable shadow rendering - @objc public dynamic var shadowEnabled: Bool { - get { return shadowContainer.layer.shadowRadius > 0 } - set { shadowContainer.layer.shadowRadius = newValue ? 5 : 0 } - } - - /// The shadow color - @objc public dynamic var shadowColor: UIColor? { - get { - guard let color = shadowContainer.layer.shadowColor else { - return nil - } - return UIColor(cgColor: color) - } - set { shadowContainer.layer.shadowColor = newValue?.cgColor } - } - - // MARK: - Views - - /// The shadow container is the basic view of the PopupDialog - /// As it does not clip subviews, a shadow can be applied to it - internal lazy var shadowContainer: UIView = { - let shadowContainer = UIView(frame: .zero) - shadowContainer.translatesAutoresizingMaskIntoConstraints = false - shadowContainer.backgroundColor = UIColor.clear - shadowContainer.layer.shadowColor = UIColor.black.cgColor - shadowContainer.layer.shadowRadius = 5 - shadowContainer.layer.shadowOpacity = 0.4 - shadowContainer.layer.shadowOffset = CGSize(width: 0, height: 0) - shadowContainer.layer.cornerRadius = 4 - return shadowContainer - }() - - /// The container view is a child of shadowContainer and contains - /// all other views. It clips to bounds so cornerRadius can be set - internal lazy var container: UIView = { - let container = UIView(frame: .zero) - container.translatesAutoresizingMaskIntoConstraints = false - container.backgroundColor = UIColor.white - container.clipsToBounds = true - container.layer.cornerRadius = 4 - return container - }() - - // The container stack view for buttons - internal lazy var buttonStackView: UIStackView = { - let buttonStackView = UIStackView() - buttonStackView.translatesAutoresizingMaskIntoConstraints = false - buttonStackView.distribution = .fillEqually - buttonStackView.spacing = 0 - return buttonStackView - }() - - // The main stack view, containing all relevant views - internal lazy var stackView: UIStackView = { - let stackView = UIStackView(arrangedSubviews: [self.buttonStackView]) - stackView.translatesAutoresizingMaskIntoConstraints = false - stackView.axis = .vertical - stackView.spacing = 0 - return stackView - }() - - // The preferred width for iPads - fileprivate let preferredWidth: CGFloat - - // MARK: - Constraints - - /// The center constraint of the shadow container - internal var centerYConstraint: NSLayoutConstraint? - - // MARK: - Initializers - - internal init(frame: CGRect, preferredWidth: CGFloat) { - self.preferredWidth = preferredWidth - super.init(frame: frame) - setupViews() - } - - required public init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - View setup - - internal func setupViews() { - - // Add views - addSubview(shadowContainer) - shadowContainer.addSubview(container) - container.addSubview(stackView) - - // Layout views - let views = ["shadowContainer": shadowContainer, "container": container, "stackView": stackView] - var constraints = [NSLayoutConstraint]() - - // Shadow container constraints - if UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.pad { - let metrics = ["preferredWidth": preferredWidth] - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|-(>=40)-[shadowContainer(==preferredWidth@900)]-(>=40)-|", options: [], metrics: metrics, views: views) - } else { - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|-(>=10,==20@900)-[shadowContainer(<=340,>=300)]-(>=10,==20@900)-|", options: [], metrics: nil, views: views) - } - constraints += [NSLayoutConstraint(item: shadowContainer, attribute: .centerX, relatedBy: .equal, toItem: self, attribute: .centerX, multiplier: 1, constant: 0)] - centerYConstraint = NSLayoutConstraint(item: shadowContainer, attribute: .centerY, relatedBy: .equal, toItem: self, attribute: .centerY, multiplier: 1, constant: 0) - - if let centerYConstraint = centerYConstraint { - constraints.append(centerYConstraint) - } - - // Container constraints - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|[container]|", options: [], metrics: nil, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "V:|[container]|", options: [], metrics: nil, views: views) - - // Main stack view constraints - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|[stackView]|", options: [], metrics: nil, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "V:|[stackView]|", options: [], metrics: nil, views: views) - - // Activate constraints - NSLayoutConstraint.activate(constraints) - } -} diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultButtons.swift b/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultButtons.swift deleted file mode 100644 index 0bb130ff..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultButtons.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// PopupDialogDefaultButtons.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation -import UIKit - -// MARK: Default button - -/// Represents the default button for the popup dialog -public final class DefaultButton: PopupDialogButton {} - -// MARK: Cancel button - -/// Represents a cancel button for the popup dialog -public final class CancelButton: PopupDialogButton { - - override public func setupView() { - defaultTitleColor = UIColor.lightGray - super.setupView() - } -} - -// MARK: destructive button - -/// Represents a destructive button for the popup dialog -public final class DestructiveButton: PopupDialogButton { - - override public func setupView() { - defaultTitleColor = UIColor.red - super.setupView() - } -} diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultView.swift b/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultView.swift deleted file mode 100644 index 55c1f7dc..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultView.swift +++ /dev/null @@ -1,148 +0,0 @@ -// -// PopupDialogView.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation -import UIKit - -/// The main view of the popup dialog -final public class PopupDialogDefaultView: UIView { - - // MARK: - Appearance - - /// The font and size of the title label - @objc public dynamic var titleFont: UIFont { - get { return titleLabel.font } - set { titleLabel.font = newValue } - } - - /// The color of the title label - @objc public dynamic var titleColor: UIColor? { - get { return titleLabel.textColor } - set { titleLabel.textColor = newValue } - } - - /// The text alignment of the title label - @objc public dynamic var titleTextAlignment: NSTextAlignment { - get { return titleLabel.textAlignment } - set { titleLabel.textAlignment = newValue } - } - - /// The font and size of the body label - @objc public dynamic var messageFont: UIFont { - get { return messageLabel.font } - set { messageLabel.font = newValue } - } - - /// The color of the message label - @objc public dynamic var messageColor: UIColor? { - get { return messageLabel.textColor } - set { messageLabel.textColor = newValue} - } - - /// The text alignment of the message label - @objc public dynamic var messageTextAlignment: NSTextAlignment { - get { return messageLabel.textAlignment } - set { messageLabel.textAlignment = newValue } - } - - // MARK: - Views - - /// The view that will contain the image, if set - internal lazy var imageView: UIImageView = { - let imageView = UIImageView(frame: .zero) - imageView.translatesAutoresizingMaskIntoConstraints = false - imageView.contentMode = .scaleAspectFill - imageView.clipsToBounds = true - return imageView - }() - - /// The title label of the dialog - internal lazy var titleLabel: UILabel = { - let titleLabel = UILabel(frame: .zero) - titleLabel.translatesAutoresizingMaskIntoConstraints = false - titleLabel.numberOfLines = 0 - titleLabel.textAlignment = .center - titleLabel.textColor = UIColor(white: 0.4, alpha: 1) - titleLabel.font = UIFont.boldSystemFont(ofSize: 14) - return titleLabel - }() - - /// The message label of the dialog - internal lazy var messageLabel: UILabel = { - let messageLabel = UILabel(frame: .zero) - messageLabel.translatesAutoresizingMaskIntoConstraints = false - messageLabel.numberOfLines = 0 - messageLabel.textAlignment = .center - messageLabel.textColor = UIColor(white: 0.6, alpha: 1) - messageLabel.font = UIFont.systemFont(ofSize: 14) - return messageLabel - }() - - /// The height constraint of the image view, 0 by default - internal var imageHeightConstraint: NSLayoutConstraint? - - // MARK: - Initializers - - internal override init(frame: CGRect) { - super.init(frame: frame) - setupViews() - } - - required public init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - View setup - - internal func setupViews() { - - // Self setup - translatesAutoresizingMaskIntoConstraints = false - - // Add views - addSubview(imageView) - addSubview(titleLabel) - addSubview(messageLabel) - - // Layout views - let views = ["imageView": imageView, "titleLabel": titleLabel, "messageLabel": messageLabel] as [String: Any] - var constraints = [NSLayoutConstraint]() - - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|[imageView]|", options: [], metrics: nil, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|-(==20@900)-[titleLabel]-(==20@900)-|", options: [], metrics: nil, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|-(==20@900)-[messageLabel]-(==20@900)-|", options: [], metrics: nil, views: views) - constraints += NSLayoutConstraint.constraints(withVisualFormat: "V:|[imageView]-(==30@900)-[titleLabel]-(==8@900)-[messageLabel]-(==30@900)-|", options: [], metrics: nil, views: views) - - // ImageView height constraint - imageHeightConstraint = NSLayoutConstraint(item: imageView, attribute: .height, relatedBy: .equal, toItem: imageView, attribute: .height, multiplier: 0, constant: 0) - - if let imageHeightConstraint = imageHeightConstraint { - constraints.append(imageHeightConstraint) - } - - // Activate constraints - NSLayoutConstraint.activate(constraints) - } -} diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultViewController.swift b/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultViewController.swift deleted file mode 100644 index 7ac9015a..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogDefaultViewController.swift +++ /dev/null @@ -1,133 +0,0 @@ -// -// PopupDialogDefaultViewController.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import UIKit - -final public class PopupDialogDefaultViewController: UIViewController { - - public var standardView: PopupDialogDefaultView { - return view as! PopupDialogDefaultView // swiftlint:disable:this force_cast - } - - override public func loadView() { - super.loadView() - view = PopupDialogDefaultView(frame: .zero) - } -} - -public extension PopupDialogDefaultViewController { - - // MARK: - Setter / Getter - - // MARK: Content - - /// The dialog image - public var image: UIImage? { - get { return standardView.imageView.image } - set { - standardView.imageView.image = newValue - standardView.imageHeightConstraint?.constant = standardView.imageView.pv_heightForImageView() - } - } - - /// The title text of the dialog - public var titleText: String? { - get { return standardView.titleLabel.text } - set { - standardView.titleLabel.text = newValue - standardView.pv_layoutIfNeededAnimated() - } - } - - /// The message text of the dialog - public var messageText: String? { - get { return standardView.messageLabel.text } - set { - standardView.messageLabel.text = newValue - standardView.pv_layoutIfNeededAnimated() - } - } - - // MARK: Appearance - - /// The font and size of the title label - @objc public dynamic var titleFont: UIFont { - get { return standardView.titleFont } - set { - standardView.titleFont = newValue - standardView.pv_layoutIfNeededAnimated() - } - } - - /// The color of the title label - @objc public dynamic var titleColor: UIColor? { - get { return standardView.titleLabel.textColor } - set { - standardView.titleColor = newValue - standardView.pv_layoutIfNeededAnimated() - } - } - - /// The text alignment of the title label - @objc public dynamic var titleTextAlignment: NSTextAlignment { - get { return standardView.titleTextAlignment } - set { - standardView.titleTextAlignment = newValue - standardView.pv_layoutIfNeededAnimated() - } - } - - /// The font and size of the body label - @objc public dynamic var messageFont: UIFont { - get { return standardView.messageFont} - set { - standardView.messageFont = newValue - standardView.pv_layoutIfNeededAnimated() - } - } - - /// The color of the message label - @objc public dynamic var messageColor: UIColor? { - get { return standardView.messageColor } - set { - standardView.messageColor = newValue - standardView.pv_layoutIfNeededAnimated() - } - } - - /// The text alignment of the message label - @objc public dynamic var messageTextAlignment: NSTextAlignment { - get { return standardView.messageTextAlignment } - set { - standardView.messageTextAlignment = newValue - standardView.pv_layoutIfNeededAnimated() - } - } - - public override func viewDidLayoutSubviews() { - super.viewDidLayoutSubviews() - standardView.imageHeightConstraint?.constant = standardView.imageView.pv_heightForImageView() - } -} diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogOverlayView.swift b/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogOverlayView.swift deleted file mode 100644 index 32d80c63..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/PopupDialogOverlayView.swift +++ /dev/null @@ -1,111 +0,0 @@ -// -// PopupDialogOverlayView.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -/// The (blurred) overlay view below the popup dialog -final public class PopupDialogOverlayView: UIView { - - // MARK: - Appearance - - /// The blur radius of the overlay view - @objc public dynamic var blurRadius: Float { - get { return Float(blurView.blurRadius) } - set { blurView.blurRadius = CGFloat(newValue) } - } - - /// Turns the blur of the overlay view on or off - @objc public dynamic var blurEnabled: Bool { - get { return blurView.isBlurEnabled } - set { - blurView.isBlurEnabled = newValue - blurView.alpha = newValue ? 1 : 0 - } - } - - /// Whether the blur view should allow for - /// dynamic rendering of the background - @objc public dynamic var liveBlur: Bool { - get { return blurView.isDynamic } - set { return blurView.isDynamic = newValue } - } - - /// The background color of the overlay view - @objc public dynamic var color: UIColor? { - get { return overlay.backgroundColor } - set { overlay.backgroundColor = newValue } - } - - /// The opacity of the overay view - @objc public dynamic var opacity: Float { - get { return Float(overlay.alpha) } - set { overlay.alpha = CGFloat(newValue) } - } - - // MARK: - Views - - internal lazy var blurView: FXBlurView = { - let blurView = FXBlurView(frame: .zero) - blurView.blurRadius = 8 - blurView.isDynamic = false - blurView.tintColor = UIColor.clear - blurView.autoresizingMask = [.flexibleHeight, .flexibleWidth] - return blurView - }() - - internal lazy var overlay: UIView = { - let overlay = UIView(frame: .zero) - overlay.backgroundColor = UIColor.black - overlay.autoresizingMask = [.flexibleHeight, .flexibleWidth] - overlay.alpha = 0.7 - return overlay - }() - - // MARK: - Inititalizers - - override init(frame: CGRect) { - super.init(frame: frame) - setupView() - } - - required public init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - View setup - - fileprivate func setupView() { - - // Self appearance - self.autoresizingMask = [.flexibleHeight, .flexibleWidth] - self.backgroundColor = UIColor.clear - self.alpha = 0 - - // Add subviews - addSubview(blurView) - addSubview(overlay) - } - -} diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/PresentationController.swift b/Example/Pods/PopupDialog/PopupDialog/Classes/PresentationController.swift deleted file mode 100644 index c03e5a50..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/PresentationController.swift +++ /dev/null @@ -1,70 +0,0 @@ -// -// PopupDialogPresentationController.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation -import UIKit - -final internal class PresentationController: UIPresentationController { - - fileprivate lazy var overlay: PopupDialogOverlayView = { - return PopupDialogOverlayView(frame: .zero) - }() - - override init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController?) { - super.init(presentedViewController: presentedViewController, presenting: presentingViewController) - - guard let presentingViewController = presentingViewController else { return } - - overlay.blurView.underlyingView = presentingViewController.view - overlay.frame = presentingViewController.view.bounds - } - - override func presentationTransitionWillBegin() { - - guard let containerView = containerView else { return } - - overlay.frame = containerView.bounds - containerView.insertSubview(overlay, at: 0) - - presentedViewController.transitionCoordinator?.animate(alongsideTransition: { _ -> Void in - self.overlay.alpha = 1.0 - }, completion: nil) - } - - override func dismissalTransitionWillBegin() { - presentedViewController.transitionCoordinator?.animate(alongsideTransition: { _ -> Void in - self.overlay.alpha = 0.0 - }, completion: nil) - } - - override func containerViewWillLayoutSubviews() { - - guard let presentedView = presentedView else { return } - - presentedView.frame = frameOfPresentedViewInContainerView - overlay.blurView.setNeedsDisplay() - } - -} diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/PresentationManager.swift b/Example/Pods/PopupDialog/PopupDialog/Classes/PresentationManager.swift deleted file mode 100644 index fdc1072a..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/PresentationManager.swift +++ /dev/null @@ -1,86 +0,0 @@ -// -// PopupDialogPresentationManager.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation -import UIKit - -final internal class PresentationManager: NSObject, UIViewControllerTransitioningDelegate { - - var transitionStyle: PopupDialogTransitionStyle - var interactor: InteractiveTransition - - init(transitionStyle: PopupDialogTransitionStyle, interactor: InteractiveTransition) { - self.transitionStyle = transitionStyle - self.interactor = interactor - super.init() - } - - func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? { - let presentationController = PresentationController(presentedViewController: presented, presenting: source) - return presentationController - } - - func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? { - - var transition: TransitionAnimator - switch transitionStyle { - case .bounceUp: - transition = BounceUpTransition(direction: .in) - case .bounceDown: - transition = BounceDownTransition(direction: .in) - case .zoomIn: - transition = ZoomTransition(direction: .in) - case .fadeIn: - transition = FadeTransition(direction: .in) - } - - return transition - } - - func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { - - if interactor.hasStarted || interactor.shouldFinish { - return DismissInteractiveTransition() - } - - var transition: TransitionAnimator - switch transitionStyle { - case .bounceUp: - transition = BounceUpTransition(direction: .out) - case .bounceDown: - transition = BounceDownTransition(direction: .out) - case .zoomIn: - transition = ZoomTransition(direction: .out) - case .fadeIn: - transition = FadeTransition(direction: .out) - } - - return transition - } - - func interactionControllerForDismissal(using animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? { - return interactor.hasStarted ? interactor : nil - } -} diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/TransitionAnimations.swift b/Example/Pods/PopupDialog/PopupDialog/Classes/TransitionAnimations.swift deleted file mode 100644 index 348b6b5e..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/TransitionAnimations.swift +++ /dev/null @@ -1,177 +0,0 @@ -// -// PopupDialogTransitionAnimations.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation -import UIKit - -/*! - Presentation transition styles for the popup dialog - - - BounceUp: Dialog bounces in from bottom and is dismissed to bottom - - BounceDown: Dialog bounces in from top and is dismissed to top - - ZoomIn: Dialog zooms in and is dismissed by zooming out - - FadeIn: Dialog fades in and is dismissed by fading out - */ -@objc public enum PopupDialogTransitionStyle: Int { - case bounceUp - case bounceDown - case zoomIn - case fadeIn -} - -/// Dialog bounces in from bottom and is dismissed to bottom -final internal class BounceUpTransition: TransitionAnimator { - - init(direction: AnimationDirection) { - super.init(inDuration: 0.22, outDuration: 0.2, direction: direction) - } - - override func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - super.animateTransition(using: transitionContext) - - switch direction { - case .in: - to.view.bounds.origin = CGPoint(x: 0, y: -from.view.bounds.size.height) - UIView.animate(withDuration: 0.6, delay: 0.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0, options: [.curveEaseOut], animations: { - self.to.view.bounds = self.from.view.bounds - }, completion: { completed in - transitionContext.completeTransition(completed) - }) - case .out: - UIView.animate(withDuration: outDuration, delay: 0.0, options: [.curveEaseIn], animations: { - self.from.view.bounds.origin = CGPoint(x: 0, y: -self.from.view.bounds.size.height) - self.from.view.alpha = 0.0 - }, completion: { _ in - transitionContext.completeTransition(!transitionContext.transitionWasCancelled) - }) - } - } -} - - -/// Dialog bounces in from top and is dismissed to top -final internal class BounceDownTransition: TransitionAnimator { - - init(direction: AnimationDirection) { - super.init(inDuration: 0.22, outDuration: 0.2, direction: direction) - } - - override func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - super.animateTransition(using: transitionContext) - - switch direction { - case .in: - to.view.bounds.origin = CGPoint(x: 0, y: from.view.bounds.size.height) - UIView.animate(withDuration: 0.6, delay: 0.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0, options: [.curveEaseOut], animations: { - self.to.view.bounds = self.from.view.bounds - }, completion: { completed in - transitionContext.completeTransition(completed) - }) - case .out: - UIView.animate(withDuration: outDuration, delay: 0.0, options: [.curveEaseIn], animations: { - self.from.view.bounds.origin = CGPoint(x: 0, y: self.from.view.bounds.size.height) - self.from.view.alpha = 0.0 - }, completion: { _ in - transitionContext.completeTransition(!transitionContext.transitionWasCancelled) - }) - } - } -} - -/// Dialog zooms in and is dismissed by zooming out -final internal class ZoomTransition: TransitionAnimator { - - init(direction: AnimationDirection) { - super.init(inDuration: 0.22, outDuration: 0.2, direction: direction) - } - - override func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - super.animateTransition(using: transitionContext) - - switch direction { - case .in: - to.view.transform = CGAffineTransform(scaleX: 0.1, y: 0.1) - UIView.animate(withDuration: 0.6, delay: 0.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0, options: [.curveEaseOut], animations: { - self.to.view.transform = CGAffineTransform(scaleX: 1, y: 1) - }, completion: { completed in - transitionContext.completeTransition(completed) - }) - case .out: - UIView.animate(withDuration: outDuration, delay: 0.0, options: [.curveEaseIn], animations: { - self.from.view.transform = CGAffineTransform(scaleX: 0.1, y: 0.1) - self.from.view.alpha = 0.0 - }, completion: { _ in - transitionContext.completeTransition(!transitionContext.transitionWasCancelled) - }) - } - } -} - -/// Dialog fades in and is dismissed by fading out -final internal class FadeTransition: TransitionAnimator { - - init(direction: AnimationDirection) { - super.init(inDuration: 0.22, outDuration: 0.2, direction: direction) - } - - override func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - super.animateTransition(using: transitionContext) - - switch direction { - case .in: - to.view.alpha = 0 - UIView.animate(withDuration: 0.6, delay: 0.0, options: [.curveEaseOut], - animations: { - self.to.view.alpha = 1 - }, completion: { completed in - transitionContext.completeTransition(completed) - }) - case .out: - UIView.animate(withDuration: outDuration, delay: 0.0, options: [.curveEaseIn], animations: { - self.from.view.alpha = 0.0 - }, completion: { _ in - transitionContext.completeTransition(!transitionContext.transitionWasCancelled) - }) - } - } -} - -/// Used for the always drop out animation with pan gesture dismissal -final internal class DismissInteractiveTransition: TransitionAnimator { - - init() { - super.init(inDuration: 0.22, outDuration: 0.32, direction: .out) - } - - override func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - super.animateTransition(using: transitionContext) - UIView.animate(withDuration: outDuration, delay: 0.0, options: [.beginFromCurrentState], animations: { - self.from.view.bounds.origin = CGPoint(x: 0, y: -self.from.view.bounds.size.height) - self.from.view.alpha = 0.0 - }, completion: { _ in - transitionContext.completeTransition(!transitionContext.transitionWasCancelled) - }) - } -} diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/TransitionAnimator.swift b/Example/Pods/PopupDialog/PopupDialog/Classes/TransitionAnimator.swift deleted file mode 100644 index d709759b..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/TransitionAnimator.swift +++ /dev/null @@ -1,68 +0,0 @@ -// -// PopupDialogTransitionAnimator.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation -import UIKit - -/// Base class for custom transition animations -internal class TransitionAnimator: NSObject, UIViewControllerAnimatedTransitioning { - - var to: UIViewController! // swiftlint:disable:this identifier_name - var from: UIViewController! - let inDuration: TimeInterval - let outDuration: TimeInterval - let direction: AnimationDirection - - init(inDuration: TimeInterval, outDuration: TimeInterval, direction: AnimationDirection) { - self.inDuration = inDuration - self.outDuration = outDuration - self.direction = direction - super.init() - } - - internal func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { - return direction == .in ? inDuration : outDuration - } - - internal func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - switch direction { - case .in: - guard let to = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to), - let from = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from) else { return } - - self.to = to - self.from = from - - let container = transitionContext.containerView - container.addSubview(to.view) - case .out: - guard let to = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to), - let from = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from) else { return } - - self.to = to - self.from = from - } - } -} diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/UIImageView+Calculations.swift b/Example/Pods/PopupDialog/PopupDialog/Classes/UIImageView+Calculations.swift deleted file mode 100755 index 641cfeda..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/UIImageView+Calculations.swift +++ /dev/null @@ -1,44 +0,0 @@ -// -// UIImageView+Calculations.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation -import UIKit - -internal extension UIImageView { - - /*! - Calculates the height of the the UIImageView has to - have so the image is displayed correctly - - returns: Height to set on the imageView - */ - internal func pv_heightForImageView() -> CGFloat { - guard let image = image, image.size.height > 0 else { - return 0.0 - } - let width = bounds.size.width - let ratio = image.size.height / image.size.width - return width * ratio - } -} diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/UIView+Animations.swift b/Example/Pods/PopupDialog/PopupDialog/Classes/UIView+Animations.swift deleted file mode 100644 index bff27c60..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/UIView+Animations.swift +++ /dev/null @@ -1,82 +0,0 @@ -// -// UIView+Animations.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation -import UIKit - -/*! - The intended direction of the animation - - in: Animate in - - out: Animate out - */ -internal enum AnimationDirection { - case `in` // swiftlint:disable:this identifier_name - case out -} - -internal extension UIView { - - /// The key for the fade animation - internal var fadeKey: String { return "FadeAnimation" } - internal var shakeKey: String { return "ShakeAnimation" } - - internal func pv_fade(_ direction: AnimationDirection, _ value: Float, duration: CFTimeInterval = 0.08) { - layer.removeAnimation(forKey: fadeKey) - let animation = CABasicAnimation(keyPath: "opacity") - animation.duration = duration - animation.fromValue = layer.presentation()?.opacity - layer.opacity = value - animation.fillMode = kCAFillModeForwards - layer.add(animation, forKey: fadeKey) - } - - internal func pv_layoutIfNeededAnimated(duration: CFTimeInterval = 0.08) { - UIView.animate(withDuration: duration, delay: 0, options: UIViewAnimationOptions(), animations: { - self.layoutIfNeeded() - }, completion: nil) - } - - // As found at https://gist.github.com/mourad-brahim/cf0bfe9bec5f33a6ea66#file-uiview-animations-swift-L9 - // Slightly modified - internal func pv_shake() { - layer.removeAnimation(forKey: shakeKey) - let vals: [Double] = [-2, 2, -2, 2, 0] - - let translation = CAKeyframeAnimation(keyPath: "transform.translation.x") - translation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) - translation.values = vals - - let rotation = CAKeyframeAnimation(keyPath: "transform.rotation.z") - rotation.values = vals.map { (degrees: Double) in - let radians: Double = (Double.pi * degrees) / 180.0 - return radians - } - - let shakeGroup: CAAnimationGroup = CAAnimationGroup() - shakeGroup.animations = [translation, rotation] - shakeGroup.duration = 0.3 - self.layer.add(shakeGroup, forKey: shakeKey) - } -} diff --git a/Example/Pods/PopupDialog/PopupDialog/Classes/UIViewController+Visibility.swift b/Example/Pods/PopupDialog/PopupDialog/Classes/UIViewController+Visibility.swift deleted file mode 100644 index 2ceb9e93..00000000 --- a/Example/Pods/PopupDialog/PopupDialog/Classes/UIViewController+Visibility.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// UIViewController+Visibility.swift -// -// Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -// Author - Martin Wildfeuer (http://www.mwfire.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation -import UIKit - -// http://stackoverflow.com/questions/2777438/how-to-tell-if-uiviewcontrollers-view-is-visible -internal extension UIViewController { - - internal var isTopAndVisible: Bool { - return isVisible && isTopViewController - } - - internal var isVisible: Bool { - if isViewLoaded { - return view.window != nil - } - return false - } - - internal var isTopViewController: Bool { - if self.navigationController != nil { - return self.navigationController?.visibleViewController === self - } else if self.tabBarController != nil { - return self.tabBarController?.selectedViewController == self && self.presentedViewController == nil - } else { - return self.presentedViewController == nil && self.isVisible - } - } -} diff --git a/Example/Pods/PopupDialog/README.md b/Example/Pods/PopupDialog/README.md deleted file mode 100644 index cfc34f6d..00000000 --- a/Example/Pods/PopupDialog/README.md +++ /dev/null @@ -1,472 +0,0 @@ - - -

 

- -[![Version](https://img.shields.io/cocoapods/v/PopupDialog.svg?style=flat)](http://cocoapods.org/pods/PopupDialog) -[![License](https://img.shields.io/cocoapods/l/PopupDialog.svg?style=flat)](http://cocoapods.org/pods/PopupDialog) -[![Platform](https://img.shields.io/cocoapods/p/PopupDialog.svg?style=flat)](http://cocoapods.org/pods/PopupDialog) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) -[![codebeat badge](https://codebeat.co/badges/006f8d13-072a-42bb-a584-6b97e60201e1)](https://codebeat.co/projects/github-com-orderella-popupdialog) -[![Build Status Master](https://travis-ci.org/Orderella/PopupDialog.svg?branch=master)](https://travis-ci.org/Orderella/PopupDialog) -[![Build Status Development](https://travis-ci.org/Orderella/PopupDialog.svg?branch=development)](https://travis-ci.org/Orderella/PopupDialog) - -

 

- -# Introduction - -Popup Dialog is a simple, customizable popup dialog written in Swift. - - - - - - -## Features - -- [x] Easy to use API with hardly any boilerplate code -- [x] Convenient default view with image, title, message -- [x] Supports custom view controllers -- [x] Slick transition animations -- [x] Fully themeable via appearance, including fonts, colors, corner radius, shadow, overlay color and blur, etc. -- [x] Can be dismissed via swipe and background tap -- [x] Objective-C compatible -- [x] Works on all screens and devices supporting iOS 9.0+ - -

 

- -# Installation - -This version is Swift 4 compatible. For the Swift 3 version, please use [V0.5.4](https://github.com/Orderella/PopupDialog/releases/tag/0.5.4). - -## Cocoapods - -PopupDialog is available through [CocoaPods](http://cocoapods.org). Simply add the following to your Podfile: - -```ruby -use_frameworks! - -target '' -pod 'PopupDialog', '~> 0.6' -``` - -## Carthage - -[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. A minimum version of `0.17` is required. - -To install, simply add the following lines to your Cartfile: - -```ruby -github "Orderella/PopupDialog" ~> 0.6 -``` - -## Manually - -If you prefer not to use either of the above mentioned dependency managers, you can integrate PopupDialog into your project manually by adding the files contained in the [Classes](https://github.com/trungp/PopupDialog/tree/master/PopupDialog/Classes) -folder to your project. - - -

 

- -# Example - -You can find this and more example projects in the repo. To run it, clone the repo, and run `pod install` from the Example directory first. - -```swift -import PopupDialog - -// Prepare the popup assets -let title = "THIS IS THE DIALOG TITLE" -let message = "This is the message section of the popup dialog default view" -let image = UIImage(named: "pexels-photo-103290") - -// Create the dialog -let popup = PopupDialog(title: title, message: message, image: image) - -// Create buttons -let buttonOne = CancelButton(title: "CANCEL") { - print("You canceled the car dialog.") -} - -// This button will not the dismiss the dialog -let buttonTwo = DefaultButton(title: "ADMIRE CAR", dismissOnTap: false) { - print("What a beauty!") -} - -let buttonThree = DefaultButton(title: "BUY CAR", height: 60) { - print("Ah, maybe next time :)") -} - -// Add buttons to dialog -// Alternatively, you can use popup.addButton(buttonOne) -// to add a single button -popup.addButtons([buttonOne, buttonTwo, buttonThree]) - -// Present dialog -self.present(popup, animated: true, completion: nil) -``` - -

 

- -# Usage - -PopupDialog is a subclass of UIViewController and as such can be added to your view controller modally. You can initialize it either with the handy default view or a custom view controller. - -## Default Dialog - -```swift -public convenience init( - title: String?, - message: String?, - image: UIImage? = nil, - buttonAlignment: UILayoutConstraintAxis = .vertical, - transitionStyle: PopupDialogTransitionStyle = .bounceUp, - preferredWidth: CGFloat = 340, - gestureDismissal: Bool = true, - hideStatusBar: Bool = false, - completion: (() -> Void)? = nil) -``` - -The default dialog initializer is a convenient way of creating a popup with image, title and message (see image one and two). - -Bascially, all parameters are optional, although this makes no sense at all. You want to at least add a message and a single button, otherwise the dialog can't be dismissed, unless you do it manually. - -If you provide an image it will be pinned to the top/left/right of the dialog. The ratio of the image will be used to set the height of the image view, so no distortion will occur. - -## Custom View Controller - -```swift -public init( - viewController: UIViewController, - buttonAlignment: UILayoutConstraintAxis = .vertical, - transitionStyle: PopupDialogTransitionStyle = .bounceUp, - preferredWidth: CGFloat = 340, - gestureDismissal: Bool = true, - hideStatusBar: Bool = false, - completion: (() -> Void)? = nil) -``` - -You can pass your own view controller to PopupDialog (see image three). It is accessible via the `viewController` property of PopupDialog, which has to be casted to your view controllers class to access its properties. Make sure the custom view defines all constraints needed, so you don't run into any autolayout issues. - -Buttons are added below the controllers view, however, these buttons are optional. If you decide to not add any buttons, you have to take care of dismissing the dialog manually. Being a subclass of view controller, this can be easily done via `dismissViewControllerAnimated(flag: Bool, completion: (() -> Void)?)`. - -## Button Alignment - -Buttons can be distributed either `.horizontal` or `.vertical`, with the latter being the default. Please note distributing buttons horizontally might not be a good idea if you have more than two buttons. - -```swift -public enum UILayoutConstraintAxis : Int { - case horizontal - case vertical -} -``` - -## Transition Style - -You can set a transition animation style with `.bounceUp` being the default. The following transition styles are available - -```swift -public enum PopupDialogTransitionStyle: Int { - case bounceUp - case bounceDown - case zoomIn - case fadeIn -} -``` - -## Preferred Width - -PopupDialog will always try to have a max width of 340 . On iPhones with smaller screens, like iPhone 5 SE, width would be 320. -340 is also the standard width for iPads. By setting preferredWidth you can override the max width of 340 for iPads only. - -## Gesture Dismissal - -Gesture dismissal allows your dialog being dismissed either by a background tap or by swiping the dialog down. By default, this is set to `true`. You can prevent this behavior by setting `gestureDismissal` to `false` in the initializer. - - -## Completion -This completion handler is called when the dialog was dismissed. This is especially useful for catching a gesture dismissal. - -

 

- -# Default Dialog Properties - -If you are using the default dialog, you can change selected properties at runtime: - -```swift -// Create the dialog -let popup = PopupDialog(title: title, message: message, image: image) - -// Present dialog -self.present(popup, animated: true, completion: nil) - -// Get the default view controller and cast it -// Unfortunately, casting is necessary to support Objective-C -let vc = popup.viewController as! PopupDialogDefaultViewController - -// Set dialog properties -vc.image = UIImage(...) -vc.titleText = "..." -vc.messageText = "..." -vc.buttonAlignment = .horizontal -vc.transitionStyle = .bounceUp -``` - -

 

- -# Styling PopupDialog - -Appearance is the preferred way of customizing the style of PopupDialog. -The idea of PopupDialog is to define a theme in a single place, without having to provide style settings with every single instantiation. This way, creating a PopupDialog requires only minimal code to be written and no "wrappers". - -This makes even more sense, as popup dialogs and alerts are supposed to look consistent throughout the app, that is, maintain a single style. - -## Dialog Default View Appearance Settings - -If you are using the default popup view, the following appearance settings are available: - -```swift -let dialogAppearance = PopupDialogDefaultView.appearance() - -dialogAppearance.backgroundColor = UIColor.white -dialogAppearance.titleFont = UIFont.boldSystemFont(ofSize: 14) -dialogAppearance.titleColor = UIColor(white: 0.4, alpha: 1) -dialogAppearance.titleTextAlignment = .center -dialogAppearance.messageFont = UIFont.systemFont(ofSize: 14) -dialogAppearance.messageColor = UIColor(white: 0.6, alpha: 1) -dialogAppearance.messageTextAlignment = .center -``` - -## Dialog Container Appearance Settings - -The container view contains the PopupDialogDefaultView or your custom view controller. the following appearence settings are available: - -```swift -let containerAppearance = PopupDialogContainerView.appearance() - -containerAppearance.backgroundColor = UIColor(red:0.23, green:0.23, blue:0.27, alpha:1.00) -containerAppearance.cornerRadius = 2 -containerAppearance.shadowEnabled = true -containerAppearance.shadowColor = UIColor.black -``` - -## Overlay View Appearance Settings - -This refers to the view that is used as an overlay above the underlying view controller but below the popup dialog view. If that makes sense ;) - -```swift -let overlayAppearance = PopupDialogOverlayView.appearance() - -overlayAppearance.color = UIColor.black -overlayAppearance.blurRadius = 20 -overlayAppearance.blurEnabled = true -overlayAppearance.liveBlur = false -overlayAppearance.opacity = 0.7 -``` - -#### Note -Turning on `liveBlur`, that is realtime updates of the background view, results in a significantly higher CPU usage /power consumption and is therefore turned off by default now. -Choose wisely whether you need this feature or not ;) - -## Button Appearance Settings - -The standard button classes available are `DefaultButton`, `CancelButton` and `DestructiveButton`. All buttons feature the same appearance settings and can be styled seperately. - -```swift -var buttonAppearance = DefaultButton.appearance() - -// Default button -buttonAppearance.titleFont = UIFont.systemFont(ofSize: 14) -buttonAppearance.titleColor = UIColor(red: 0.25, green: 0.53, blue: 0.91, alpha: 1) -buttonAppearance.buttonColor = UIColor.clear -buttonAppearance.separatorColor = UIColor(white: 0.9, alpha: 1) - -// Below, only the differences are highlighted - -// Cancel button -CancelButton.appearance().titleColor = UIColor.lightGray - -// Destructive button -DestructiveButton.appearance().titleColor = UIColor.red -``` - -Moreover, you can create a custom button by subclassing `PopupDialogButton`. The following example creates a solid blue button, featuring a bold white title font. Separators are invisble. - -```swift -public final class SolidBlueButton: PopupDialogButton { - - override public func setupView() { - defaultFont = UIFont.boldSystemFont(ofSize: 16) - defaultTitleColor = UIColor.white - defaultButtonColor = UIColor.blue - defaultSeparatorColor = UIColor.clear - super.setupView() - } -} - -``` - -These buttons can be customized with the appearance settings given above as well. - -

 

- -## Dark mode example - -The following is an example of a *Dark Mode* theme. You can find this in the Example project `AppDelegate`, just uncomment it to apply the custom appearance. - -```swift -// Customize dialog appearance -let pv = PopupDialogDefaultView.appearance() -pv.titleFont = UIFont(name: "HelveticaNeue-Light", size: 16)! -pv.titleColor = UIColor.white -pv.messageFont = UIFont(name: "HelveticaNeue", size: 14)! -pv.messageColor = UIColor(white: 0.8, alpha: 1) - -// Customize the container view appearance -let pcv = PopupDialogContainerView.appearance() -pcv.backgroundColor = UIColor(red:0.23, green:0.23, blue:0.27, alpha:1.00) -pcv.cornerRadius = 2 -pcv.shadowEnabled = true -pcv.shadowColor = UIColor.black - -// Customize overlay appearance -let ov = PopupDialogOverlayView.appearance() -ov.blurEnabled = true -ov.blurRadius = 30 -ov.liveBlur = true -ov.opacity = 0.7 -ov.color = UIColor.black - -// Customize default button appearance -let db = DefaultButton.appearance() -db.titleFont = UIFont(name: "HelveticaNeue-Medium", size: 14)! -db.titleColor = UIColor.white -db.buttonColor = UIColor(red:0.25, green:0.25, blue:0.29, alpha:1.00) -db.separatorColor = UIColor(red:0.20, green:0.20, blue:0.25, alpha:1.00) - -// Customize cancel button appearance -let cb = CancelButton.appearance() -cb.titleFont = UIFont(name: "HelveticaNeue-Medium", size: 14)! -cb.titleColor = UIColor(white: 0.6, alpha: 1) -cb.buttonColor = UIColor(red:0.25, green:0.25, blue:0.29, alpha:1.00) -cb.separatorColor = UIColor(red:0.20, green:0.20, blue:0.25, alpha:1.00) - -``` - - - - -I can see that there is room for more customization options. I might add more of them over time. - -

 

- -# Screen sizes and rotation - -Rotation and all screen sizes are supported. However, the dialog will never exceed a width of 340 points. This way, the dialog won't be too big on devices like iPads. However, landscape mode will not work well if the height of the dialog exceeds the width of the screen. - -

 

- -# Working with text fields - -If you are using text fields in your custom view controller, popup dialog makes sure that the dialog is positioned above the keybord whenever it appears. You can opt out of this behaviour by setting `keyboardShiftsView` to false on a PopupDialog. - -# Testing - -PopupDialog exposes a nice and handy method that lets you trigger a button tap programmatically: - -```swift -public func tapButtonWithIndex(index: Int) -``` - -Other than that, PopupDialog unit tests are included in the root folder. - -

 

- -# Objective-C - -PopupDialog can be used in Objective-C projects as well. -Here is a basic example: - -```objective-c -#import - -PopupDialog *popup = [[PopupDialog alloc] initWithTitle:@"TEST" - message:@"This is a test message!" - image:nil - buttonAlignment:UILayoutConstraintAxisHorizontal - transitionStyle:PopupDialogTransitionStyleBounceUp - preferredWidth: 340.0, - gestureDismissal:YES - hideStatusBar:NO - completion:nil]; - -CancelButton *cancel = [[CancelButton alloc] initWithTitle:@"CANCEL" dismissOnTap:YES action:^{ - // Default action -}]; - -DefaultButton *ok = [[DefaultButton alloc] initWithTitle:@"OK" dismissOnTap:YES action:^{ - // Ok action -}]; - -[popup addButtons: @[cancel, ok]]; - -[self presentViewController:popup animated:YES completion:nil]; -``` - -

 

- - -# Bonus - -## Shake animation - -If you happen to use PopupDialog to validate text input, for example, you can call the handy `shake()` method on PopupDialog. - -

 

- -# Requirements - -Minimum requirement is iOS 9.0. This dialog was written with Swift 4, for support of older versions please head over to releases. - -

 

- -# Changelog -* **0.6.2** Added preferredWidth option for iPads -* **0.6.1** Added shake animation
Introduced hideStatusBar option -* **0.6.0** Swift 4 support
Dropped iOS8 compatibility -* **0.5.4** Fixed bug where blur view would reveal hidden layer
Improved view controller lifecycle handling
Scroll views can now be used with gesture dismissal -* **0.5.3** Fixed memory leak with custom view controllers
Added UI automation & snapshot tests -* **0.5.2** Fixed image scaling for default view -* **0.5.1** Introduced custom button height parameter
Reintroduced iOS8 compatibility -* **0.5.0** Swift 3 compatibility / removed iOS8 -* **0.4.0** iOS 8 compatibility -* **0.3.3** Fixes buttons being added multiple times -* **0.3.2** Dialog repositioning when interacting with keyboard
Non dismissable buttons option
Additional completion handler when dialog is dismissed -* **0.3.1** Fixed Carthage issues -* **0.3.0** Objective-C compatibility -* **0.2.2** Turned off liveBlur by default to increase performance -* **0.2.1** Dismiss via background tap or swipe down transition -* **0.2.0** You can now pass custom view controllers to the dialog. This introduces breaking changes. -* **0.1.6** Defer button action until animation completes -* **0.1.5** Exposed dialog properties
(titleText, messageText, image, buttonAlignment, transitionStyle) -* **0.1.4** Pick transition animation style -* **0.1.3** Big screen support
Exposed basic shadow appearance -* **0.1.2** Exposed blur and overlay appearance -* **0.1.1** Added themeing example -* **0.1.0** Intitial version - -

 

- -# Author - -Martin Wildfeuer, mwfire@mwfire.de -for Orderella Ltd., [orderella.co.uk](http://orderella.co.uk)
-You might also want to follow us on Twitter, [@theMWFire](https://twitter.com/theMWFire) | [@Orderella](https://twitter.com/orderella) - -# Thank you -Thanks to everyone who uses, enhances and improves this library, especially the contributors. - -

 

- -# License - -PopupDialog is available under the MIT license. See the LICENSE file for more info. diff --git a/Example/Pods/SQLite.swift/LICENSE.txt b/Example/Pods/SQLite.swift/LICENSE.txt deleted file mode 100644 index 13303c11..00000000 --- a/Example/Pods/SQLite.swift/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -(The MIT License) - -Copyright (c) 2014-2015 Stephen Celis () - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Example/Pods/SQLite.swift/README.md b/Example/Pods/SQLite.swift/README.md deleted file mode 100644 index bc43b6ec..00000000 --- a/Example/Pods/SQLite.swift/README.md +++ /dev/null @@ -1,293 +0,0 @@ -# SQLite.swift - -[![Build Status][TravisBadge]][TravisLink] [![CocoaPods Version][CocoaPodsVersionBadge]][CocoaPodsVersionLink] [![Swift4 compatible][Swift4Badge]][Swift4Link] [![Platform][PlatformBadge]][PlatformLink] [![Carthage compatible][CartagheBadge]][CarthageLink] [![Join the chat at https://gitter.im/stephencelis/SQLite.swift][GitterBadge]][GitterLink] - -A type-safe, [Swift][]-language layer over [SQLite3][]. - -[SQLite.swift][] provides compile-time confidence in SQL statement -syntax _and_ intent. - -## Features - - - A pure-Swift interface - - A type-safe, optional-aware SQL expression builder - - A flexible, chainable, lazy-executing query layer - - Automatically-typed data access - - A lightweight, uncomplicated query and parameter binding interface - - Developer-friendly error handling and debugging - - [Full-text search][] support - - [Well-documented][See Documentation] - - Extensively tested - - [SQLCipher][] support via CocoaPods - - Active support at - [StackOverflow](http://stackoverflow.com/questions/tagged/sqlite.swift), - and [Gitter Chat Room](https://gitter.im/stephencelis/SQLite.swift) - (_experimental_) - -[SQLCipher]: https://www.zetetic.net/sqlcipher/ -[Full-text search]: Documentation/Index.md#full-text-search -[See Documentation]: Documentation/Index.md#sqliteswift-documentation - - -## Usage - -```swift -import SQLite - -let db = try Connection("path/to/db.sqlite3") - -let users = Table("users") -let id = Expression("id") -let name = Expression("name") -let email = Expression("email") - -try db.run(users.create { t in - t.column(id, primaryKey: true) - t.column(name) - t.column(email, unique: true) -}) -// CREATE TABLE "users" ( -// "id" INTEGER PRIMARY KEY NOT NULL, -// "name" TEXT, -// "email" TEXT NOT NULL UNIQUE -// ) - -let insert = users.insert(name <- "Alice", email <- "alice@mac.com") -let rowid = try db.run(insert) -// INSERT INTO "users" ("name", "email") VALUES ('Alice', 'alice@mac.com') - -for user in try db.prepare(users) { - print("id: \(user[id]), name: \(user[name]), email: \(user[email])") - // id: 1, name: Optional("Alice"), email: alice@mac.com -} -// SELECT * FROM "users" - -let alice = users.filter(id == rowid) - -try db.run(alice.update(email <- email.replace("mac.com", with: "me.com"))) -// UPDATE "users" SET "email" = replace("email", 'mac.com', 'me.com') -// WHERE ("id" = 1) - -try db.run(alice.delete()) -// DELETE FROM "users" WHERE ("id" = 1) - -try db.scalar(users.count) // 0 -// SELECT count(*) FROM "users" -``` - -SQLite.swift also works as a lightweight, Swift-friendly wrapper over the C -API. - -```swift -let stmt = try db.prepare("INSERT INTO users (email) VALUES (?)") -for email in ["betty@icloud.com", "cathy@icloud.com"] { - try stmt.run(email) -} - -db.totalChanges // 3 -db.changes // 1 -db.lastInsertRowid // 3 - -for row in try db.prepare("SELECT id, email FROM users") { - print("id: \(row[0]), email: \(row[1])") - // id: Optional(2), email: Optional("betty@icloud.com") - // id: Optional(3), email: Optional("cathy@icloud.com") -} - -try db.scalar("SELECT count(*) FROM users") // 2 -``` - -[Read the documentation][See Documentation] or explore more, -interactively, from the Xcode project’s playground. - -![SQLite.playground Screen Shot](Documentation/Resources/playground@2x.png) - -For a more comprehensive example, see -[this article][Create a Data Access Layer with SQLite.swift and Swift 2] -and the [companion repository][SQLiteDataAccessLayer2]. - - -[Create a Data Access Layer with SQLite.swift and Swift 2]: http://masteringswift.blogspot.com/2015/09/create-data-access-layer-with.html -[SQLiteDataAccessLayer2]: https://github.com/hoffmanjon/SQLiteDataAccessLayer2/tree/master - -## Installation - -> _Note:_ SQLite.swift requires Swift 4.1 (and [Xcode][] 9.3). - -### Carthage - -[Carthage][] is a simple, decentralized dependency manager for Cocoa. To -install SQLite.swift with Carthage: - - 1. Make sure Carthage is [installed][Carthage Installation]. - - 2. Update your Cartfile to include the following: - - ```ruby - github "stephencelis/SQLite.swift" ~> 0.11.5 - ``` - - 3. Run `carthage update` and - [add the appropriate framework][Carthage Usage]. - - -[Carthage]: https://github.com/Carthage/Carthage -[Carthage Installation]: https://github.com/Carthage/Carthage#installing-carthage -[Carthage Usage]: https://github.com/Carthage/Carthage#adding-frameworks-to-an-application - - -### CocoaPods - -[CocoaPods][] is a dependency manager for Cocoa projects. To install -SQLite.swift with CocoaPods: - - 1. Make sure CocoaPods is [installed][CocoaPods Installation]. (SQLite.swift - requires version 1.0.0 or greater.) - - ```sh - # Using the default Ruby install will require you to use sudo when - # installing and updating gems. - [sudo] gem install cocoapods - ``` - - 2. Update your Podfile to include the following: - - ```ruby - use_frameworks! - - target 'YourAppTargetName' do - pod 'SQLite.swift', '~> 0.11.5' - end - ``` - - 3. Run `pod install --repo-update`. - -[CocoaPods]: https://cocoapods.org -[CocoaPods Installation]: https://guides.cocoapods.org/using/getting-started.html#getting-started - -### Swift Package Manager - -The [Swift Package Manager][] is a tool for managing the distribution of -Swift code. - -1. Add the following to your `Package.swift` file: - - ```swift - dependencies: [ - .package(url: "https://github.com/stephencelis/SQLite.swift.git", from: "0.11.5") - ] - ``` - -2. Build your project: - - ```sh - $ swift build - ``` - -[Swift Package Manager]: https://swift.org/package-manager - -### Manual - -To install SQLite.swift as an Xcode sub-project: - - 1. Drag the **SQLite.xcodeproj** file into your own project. - ([Submodule][], clone, or [download][] the project first.) - - ![Installation Screen Shot](Documentation/Resources/installation@2x.png) - - 2. In your target’s **General** tab, click the **+** button under **Linked - Frameworks and Libraries**. - - 3. Select the appropriate **SQLite.framework** for your platform. - - 4. **Add**. - -Some additional steps are required to install the application on an actual -device: - - 5. In the **General** tab, click the **+** button under **Embedded - Binaries**. - - 6. Select the appropriate **SQLite.framework** for your platform. - - 7. **Add**. - - -[Xcode]: https://developer.apple.com/xcode/downloads/ -[Submodule]: http://git-scm.com/book/en/Git-Tools-Submodules -[download]: https://github.com/stephencelis/SQLite.swift/archive/master.zip - - -## Communication - -[See the planning document] for a roadmap and existing feature requests. - -[Read the contributing guidelines][]. The _TL;DR_ (but please; _R_): - - - Need **help** or have a **general question**? [Ask on Stack - Overflow][] (tag `sqlite.swift`). - - Found a **bug** or have a **feature request**? [Open an issue][]. - - Want to **contribute**? [Submit a pull request][]. - -[See the planning document]: /Documentation/Planning.md -[Read the contributing guidelines]: ./CONTRIBUTING.md#contributing -[Ask on Stack Overflow]: http://stackoverflow.com/questions/tagged/sqlite.swift -[Open an issue]: https://github.com/stephencelis/SQLite.swift/issues/new -[Submit a pull request]: https://github.com/stephencelis/SQLite.swift/fork - - -## Author - - - [Stephen Celis](mailto:stephen@stephencelis.com) - ([@stephencelis](https://twitter.com/stephencelis)) - - -## License - -SQLite.swift is available under the MIT license. See [the LICENSE -file](./LICENSE.txt) for more information. - -## Related - -These projects enhance or use SQLite.swift: - - - [SQLiteMigrationManager.swift][] (inspired by - [FMDBMigrationManager][]) - - -## Alternatives - -Looking for something else? Try another Swift wrapper (or [FMDB][]): - - - [Camembert](https://github.com/remirobert/Camembert) - - [GRDB](https://github.com/groue/GRDB.swift) - - [SQLiteDB](https://github.com/FahimF/SQLiteDB) - - [Squeal](https://github.com/nerdyc/Squeal) - - [SwiftData](https://github.com/ryanfowler/SwiftData) - - [SwiftSQLite](https://github.com/chrismsimpson/SwiftSQLite) - -[Swift]: https://swift.org/ -[SQLite3]: http://www.sqlite.org -[SQLite.swift]: https://github.com/stephencelis/SQLite.swift - -[TravisBadge]: https://img.shields.io/travis/stephencelis/SQLite.swift/master.svg?style=flat -[TravisLink]: https://travis-ci.org/stephencelis/SQLite.swift - -[CocoaPodsVersionBadge]: https://cocoapod-badges.herokuapp.com/v/SQLite.swift/badge.png -[CocoaPodsVersionLink]: http://cocoadocs.org/docsets/SQLite.swift - -[PlatformBadge]: https://cocoapod-badges.herokuapp.com/p/SQLite.swift/badge.png -[PlatformLink]: http://cocoadocs.org/docsets/SQLite.swift - -[CartagheBadge]: https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat -[CarthageLink]: https://github.com/Carthage/Carthage - -[GitterBadge]: https://badges.gitter.im/stephencelis/SQLite.swift.svg -[GitterLink]: https://gitter.im/stephencelis/SQLite.swift - -[Swift4Badge]: https://img.shields.io/badge/swift-4.1-orange.svg?style=flat -[Swift4Link]: https://developer.apple.com/swift/ - -[SQLiteMigrationManager.swift]: https://github.com/garriguv/SQLiteMigrationManager.swift -[FMDB]: https://github.com/ccgus/fmdb -[FMDBMigrationManager]: https://github.com/layerhq/FMDBMigrationManager diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Core/Blob.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Core/Blob.swift deleted file mode 100644 index 2f5d2a14..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Core/Blob.swift +++ /dev/null @@ -1,60 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -public struct Blob { - - public let bytes: [UInt8] - - public init(bytes: [UInt8]) { - self.bytes = bytes - } - - public init(bytes: UnsafeRawPointer, length: Int) { - let i8bufptr = UnsafeBufferPointer(start: bytes.assumingMemoryBound(to: UInt8.self), count: length) - self.init(bytes: [UInt8](i8bufptr)) - } - - public func toHex() -> String { - return bytes.map { - ($0 < 16 ? "0" : "") + String($0, radix: 16, uppercase: false) - }.joined(separator: "") - } - -} - -extension Blob : CustomStringConvertible { - - public var description: String { - return "x'\(toHex())'" - } - -} - -extension Blob : Equatable { - -} - -public func ==(lhs: Blob, rhs: Blob) -> Bool { - return lhs.bytes == rhs.bytes -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Core/Connection.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Core/Connection.swift deleted file mode 100644 index 1bbf7f73..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Core/Connection.swift +++ /dev/null @@ -1,750 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation -import Dispatch -#if SQLITE_SWIFT_STANDALONE -import sqlite3 -#elseif SQLITE_SWIFT_SQLCIPHER -import SQLCipher -#elseif os(Linux) -import CSQLite -#else -import SQLite3 -#endif - -/// A connection to SQLite. -public final class Connection { - - /// The location of a SQLite database. - public enum Location { - - /// An in-memory database (equivalent to `.uri(":memory:")`). - /// - /// See: - case inMemory - - /// A temporary, file-backed database (equivalent to `.uri("")`). - /// - /// See: - case temporary - - /// A database located at the given URI filename (or path). - /// - /// See: - /// - /// - Parameter filename: A URI filename - case uri(String) - } - - /// An SQL operation passed to update callbacks. - public enum Operation { - - /// An INSERT operation. - case insert - - /// An UPDATE operation. - case update - - /// A DELETE operation. - case delete - - fileprivate init(rawValue:Int32) { - switch rawValue { - case SQLITE_INSERT: - self = .insert - case SQLITE_UPDATE: - self = .update - case SQLITE_DELETE: - self = .delete - default: - fatalError("unhandled operation code: \(rawValue)") - } - } - } - - public var handle: OpaquePointer { return _handle! } - - fileprivate var _handle: OpaquePointer? = nil - - /// Initializes a new SQLite connection. - /// - /// - Parameters: - /// - /// - location: The location of the database. Creates a new database if it - /// doesn’t already exist (unless in read-only mode). - /// - /// Default: `.inMemory`. - /// - /// - readonly: Whether or not to open the database in a read-only state. - /// - /// Default: `false`. - /// - /// - Returns: A new database connection. - public init(_ location: Location = .inMemory, readonly: Bool = false) throws { - let flags = readonly ? SQLITE_OPEN_READONLY : SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE - try check(sqlite3_open_v2(location.description, &_handle, flags | SQLITE_OPEN_FULLMUTEX, nil)) - queue.setSpecific(key: Connection.queueKey, value: queueContext) - } - - /// Initializes a new connection to a database. - /// - /// - Parameters: - /// - /// - filename: The location of the database. Creates a new database if - /// it doesn’t already exist (unless in read-only mode). - /// - /// - readonly: Whether or not to open the database in a read-only state. - /// - /// Default: `false`. - /// - /// - Throws: `Result.Error` iff a connection cannot be established. - /// - /// - Returns: A new database connection. - public convenience init(_ filename: String, readonly: Bool = false) throws { - try self.init(.uri(filename), readonly: readonly) - } - - deinit { - sqlite3_close(handle) - } - - // MARK: - - - /// Whether or not the database was opened in a read-only state. - public var readonly: Bool { return sqlite3_db_readonly(handle, nil) == 1 } - - /// The last rowid inserted into the database via this connection. - public var lastInsertRowid: Int64 { - return sqlite3_last_insert_rowid(handle) - } - - /// The last number of changes (inserts, updates, or deletes) made to the - /// database via this connection. - public var changes: Int { - return Int(sqlite3_changes(handle)) - } - - /// The total number of changes (inserts, updates, or deletes) made to the - /// database via this connection. - public var totalChanges: Int { - return Int(sqlite3_total_changes(handle)) - } - - // MARK: - Execute - - /// Executes a batch of SQL statements. - /// - /// - Parameter SQL: A batch of zero or more semicolon-separated SQL - /// statements. - /// - /// - Throws: `Result.Error` if query execution fails. - public func execute(_ SQL: String) throws { - _ = try sync { try self.check(sqlite3_exec(self.handle, SQL, nil, nil, nil)) } - } - - // MARK: - Prepare - - /// Prepares a single SQL statement (with optional parameter bindings). - /// - /// - Parameters: - /// - /// - statement: A single SQL statement. - /// - /// - bindings: A list of parameters to bind to the statement. - /// - /// - Returns: A prepared statement. - public func prepare(_ statement: String, _ bindings: Binding?...) throws -> Statement { - if !bindings.isEmpty { return try prepare(statement, bindings) } - return try Statement(self, statement) - } - - /// Prepares a single SQL statement and binds parameters to it. - /// - /// - Parameters: - /// - /// - statement: A single SQL statement. - /// - /// - bindings: A list of parameters to bind to the statement. - /// - /// - Returns: A prepared statement. - public func prepare(_ statement: String, _ bindings: [Binding?]) throws -> Statement { - return try prepare(statement).bind(bindings) - } - - /// Prepares a single SQL statement and binds parameters to it. - /// - /// - Parameters: - /// - /// - statement: A single SQL statement. - /// - /// - bindings: A dictionary of named parameters to bind to the statement. - /// - /// - Returns: A prepared statement. - public func prepare(_ statement: String, _ bindings: [String: Binding?]) throws -> Statement { - return try prepare(statement).bind(bindings) - } - - // MARK: - Run - - /// Runs a single SQL statement (with optional parameter bindings). - /// - /// - Parameters: - /// - /// - statement: A single SQL statement. - /// - /// - bindings: A list of parameters to bind to the statement. - /// - /// - Throws: `Result.Error` if query execution fails. - /// - /// - Returns: The statement. - @discardableResult public func run(_ statement: String, _ bindings: Binding?...) throws -> Statement { - return try run(statement, bindings) - } - - /// Prepares, binds, and runs a single SQL statement. - /// - /// - Parameters: - /// - /// - statement: A single SQL statement. - /// - /// - bindings: A list of parameters to bind to the statement. - /// - /// - Throws: `Result.Error` if query execution fails. - /// - /// - Returns: The statement. - @discardableResult public func run(_ statement: String, _ bindings: [Binding?]) throws -> Statement { - return try prepare(statement).run(bindings) - } - - /// Prepares, binds, and runs a single SQL statement. - /// - /// - Parameters: - /// - /// - statement: A single SQL statement. - /// - /// - bindings: A dictionary of named parameters to bind to the statement. - /// - /// - Throws: `Result.Error` if query execution fails. - /// - /// - Returns: The statement. - @discardableResult public func run(_ statement: String, _ bindings: [String: Binding?]) throws -> Statement { - return try prepare(statement).run(bindings) - } - - // MARK: - Scalar - - /// Runs a single SQL statement (with optional parameter bindings), - /// returning the first value of the first row. - /// - /// - Parameters: - /// - /// - statement: A single SQL statement. - /// - /// - bindings: A list of parameters to bind to the statement. - /// - /// - Returns: The first value of the first row returned. - public func scalar(_ statement: String, _ bindings: Binding?...) throws -> Binding? { - return try scalar(statement, bindings) - } - - /// Runs a single SQL statement (with optional parameter bindings), - /// returning the first value of the first row. - /// - /// - Parameters: - /// - /// - statement: A single SQL statement. - /// - /// - bindings: A list of parameters to bind to the statement. - /// - /// - Returns: The first value of the first row returned. - public func scalar(_ statement: String, _ bindings: [Binding?]) throws -> Binding? { - return try prepare(statement).scalar(bindings) - } - - /// Runs a single SQL statement (with optional parameter bindings), - /// returning the first value of the first row. - /// - /// - Parameters: - /// - /// - statement: A single SQL statement. - /// - /// - bindings: A dictionary of named parameters to bind to the statement. - /// - /// - Returns: The first value of the first row returned. - public func scalar(_ statement: String, _ bindings: [String: Binding?]) throws -> Binding? { - return try prepare(statement).scalar(bindings) - } - - // MARK: - Transactions - - /// The mode in which a transaction acquires a lock. - public enum TransactionMode : String { - - /// Defers locking the database till the first read/write executes. - case deferred = "DEFERRED" - - /// Immediately acquires a reserved lock on the database. - case immediate = "IMMEDIATE" - - /// Immediately acquires an exclusive lock on all databases. - case exclusive = "EXCLUSIVE" - - } - - // TODO: Consider not requiring a throw to roll back? - /// Runs a transaction with the given mode. - /// - /// - Note: Transactions cannot be nested. To nest transactions, see - /// `savepoint()`, instead. - /// - /// - Parameters: - /// - /// - mode: The mode in which a transaction acquires a lock. - /// - /// Default: `.deferred` - /// - /// - block: A closure to run SQL statements within the transaction. - /// The transaction will be committed when the block returns. The block - /// must throw to roll the transaction back. - /// - /// - Throws: `Result.Error`, and rethrows. - public func transaction(_ mode: TransactionMode = .deferred, block: () throws -> Void) throws { - try transaction("BEGIN \(mode.rawValue) TRANSACTION", block, "COMMIT TRANSACTION", or: "ROLLBACK TRANSACTION") - } - - // TODO: Consider not requiring a throw to roll back? - // TODO: Consider removing ability to set a name? - /// Runs a transaction with the given savepoint name (if omitted, it will - /// generate a UUID). - /// - /// - SeeAlso: `transaction()`. - /// - /// - Parameters: - /// - /// - savepointName: A unique identifier for the savepoint (optional). - /// - /// - block: A closure to run SQL statements within the transaction. - /// The savepoint will be released (committed) when the block returns. - /// The block must throw to roll the savepoint back. - /// - /// - Throws: `SQLite.Result.Error`, and rethrows. - public func savepoint(_ name: String = UUID().uuidString, block: () throws -> Void) throws { - let name = name.quote("'") - let savepoint = "SAVEPOINT \(name)" - - try transaction(savepoint, block, "RELEASE \(savepoint)", or: "ROLLBACK TO \(savepoint)") - } - - fileprivate func transaction(_ begin: String, _ block: () throws -> Void, _ commit: String, or rollback: String) throws { - return try sync { - try self.run(begin) - do { - try block() - try self.run(commit) - } catch { - try self.run(rollback) - throw error - } - } - } - - /// Interrupts any long-running queries. - public func interrupt() { - sqlite3_interrupt(handle) - } - - // MARK: - Handlers - - /// The number of seconds a connection will attempt to retry a statement - /// after encountering a busy signal (lock). - public var busyTimeout: Double = 0 { - didSet { - sqlite3_busy_timeout(handle, Int32(busyTimeout * 1_000)) - } - } - - /// Sets a handler to call after encountering a busy signal (lock). - /// - /// - Parameter callback: This block is executed during a lock in which a - /// busy error would otherwise be returned. It’s passed the number of - /// times it’s been called for this lock. If it returns `true`, it will - /// try again. If it returns `false`, no further attempts will be made. - public func busyHandler(_ callback: ((_ tries: Int) -> Bool)?) { - guard let callback = callback else { - sqlite3_busy_handler(handle, nil, nil) - busyHandler = nil - return - } - - let box: BusyHandler = { callback(Int($0)) ? 1 : 0 } - sqlite3_busy_handler(handle, { callback, tries in - unsafeBitCast(callback, to: BusyHandler.self)(tries) - }, unsafeBitCast(box, to: UnsafeMutableRawPointer.self)) - busyHandler = box - } - fileprivate typealias BusyHandler = @convention(block) (Int32) -> Int32 - fileprivate var busyHandler: BusyHandler? - - /// Sets a handler to call when a statement is executed with the compiled - /// SQL. - /// - /// - Parameter callback: This block is invoked when a statement is executed - /// with the compiled SQL as its argument. - /// - /// db.trace { SQL in print(SQL) } - public func trace(_ callback: ((String) -> Void)?) { - #if SQLITE_SWIFT_SQLCIPHER || os(Linux) - trace_v1(callback) - #else - if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) { - trace_v2(callback) - } else { - trace_v1(callback) - } - #endif - } - - fileprivate func trace_v1(_ callback: ((String) -> Void)?) { - guard let callback = callback else { - sqlite3_trace(handle, nil /* xCallback */, nil /* pCtx */) - trace = nil - return - } - let box: Trace = { (pointer: UnsafeRawPointer) in - callback(String(cString: pointer.assumingMemoryBound(to: UInt8.self))) - } - sqlite3_trace(handle, - { - (C: UnsafeMutableRawPointer?, SQL: UnsafePointer?) in - if let C = C, let SQL = SQL { - unsafeBitCast(C, to: Trace.self)(SQL) - } - }, - unsafeBitCast(box, to: UnsafeMutableRawPointer.self) - ) - trace = box - } - - - - - fileprivate typealias Trace = @convention(block) (UnsafeRawPointer) -> Void - fileprivate var trace: Trace? - - /// Registers a callback to be invoked whenever a row is inserted, updated, - /// or deleted in a rowid table. - /// - /// - Parameter callback: A callback invoked with the `Operation` (one of - /// `.Insert`, `.Update`, or `.Delete`), database name, table name, and - /// rowid. - public func updateHook(_ callback: ((_ operation: Operation, _ db: String, _ table: String, _ rowid: Int64) -> Void)?) { - guard let callback = callback else { - sqlite3_update_hook(handle, nil, nil) - updateHook = nil - return - } - - let box: UpdateHook = { - callback( - Operation(rawValue: $0), - String(cString: $1), - String(cString: $2), - $3 - ) - } - sqlite3_update_hook(handle, { callback, operation, db, table, rowid in - unsafeBitCast(callback, to: UpdateHook.self)(operation, db!, table!, rowid) - }, unsafeBitCast(box, to: UnsafeMutableRawPointer.self)) - updateHook = box - } - fileprivate typealias UpdateHook = @convention(block) (Int32, UnsafePointer, UnsafePointer, Int64) -> Void - fileprivate var updateHook: UpdateHook? - - /// Registers a callback to be invoked whenever a transaction is committed. - /// - /// - Parameter callback: A callback invoked whenever a transaction is - /// committed. If this callback throws, the transaction will be rolled - /// back. - public func commitHook(_ callback: (() throws -> Void)?) { - guard let callback = callback else { - sqlite3_commit_hook(handle, nil, nil) - commitHook = nil - return - } - - let box: CommitHook = { - do { - try callback() - } catch { - return 1 - } - return 0 - } - sqlite3_commit_hook(handle, { callback in - unsafeBitCast(callback, to: CommitHook.self)() - }, unsafeBitCast(box, to: UnsafeMutableRawPointer.self)) - commitHook = box - } - fileprivate typealias CommitHook = @convention(block) () -> Int32 - fileprivate var commitHook: CommitHook? - - /// Registers a callback to be invoked whenever a transaction rolls back. - /// - /// - Parameter callback: A callback invoked when a transaction is rolled - /// back. - public func rollbackHook(_ callback: (() -> Void)?) { - guard let callback = callback else { - sqlite3_rollback_hook(handle, nil, nil) - rollbackHook = nil - return - } - - let box: RollbackHook = { callback() } - sqlite3_rollback_hook(handle, { callback in - unsafeBitCast(callback, to: RollbackHook.self)() - }, unsafeBitCast(box, to: UnsafeMutableRawPointer.self)) - rollbackHook = box - } - fileprivate typealias RollbackHook = @convention(block) () -> Void - fileprivate var rollbackHook: RollbackHook? - - /// Creates or redefines a custom SQL function. - /// - /// - Parameters: - /// - /// - function: The name of the function to create or redefine. - /// - /// - argumentCount: The number of arguments that the function takes. If - /// `nil`, the function may take any number of arguments. - /// - /// Default: `nil` - /// - /// - deterministic: Whether or not the function is deterministic (_i.e._ - /// the function always returns the same result for a given input). - /// - /// Default: `false` - /// - /// - block: A block of code to run when the function is called. The block - /// is called with an array of raw SQL values mapped to the function’s - /// parameters and should return a raw SQL value (or nil). - public func createFunction(_ function: String, argumentCount: UInt? = nil, deterministic: Bool = false, _ block: @escaping (_ args: [Binding?]) -> Binding?) { - let argc = argumentCount.map { Int($0) } ?? -1 - let box: Function = { context, argc, argv in - let arguments: [Binding?] = (0..?) -> Void - fileprivate var functions = [String: [Int: Function]]() - - /// Defines a new collating sequence. - /// - /// - Parameters: - /// - /// - collation: The name of the collation added. - /// - /// - block: A collation function that takes two strings and returns the - /// comparison result. - public func createCollation(_ collation: String, _ block: @escaping (_ lhs: String, _ rhs: String) -> ComparisonResult) throws { - let box: Collation = { (lhs: UnsafeRawPointer, rhs: UnsafeRawPointer) in - let lstr = String(cString: lhs.assumingMemoryBound(to: UInt8.self)) - let rstr = String(cString: rhs.assumingMemoryBound(to: UInt8.self)) - return Int32(block(lstr, rstr).rawValue) - } - try check(sqlite3_create_collation_v2(handle, collation, SQLITE_UTF8, - unsafeBitCast(box, to: UnsafeMutableRawPointer.self), - { (callback: UnsafeMutableRawPointer?, _, lhs: UnsafeRawPointer?, _, rhs: UnsafeRawPointer?) in /* xCompare */ - if let lhs = lhs, let rhs = rhs { - return unsafeBitCast(callback, to: Collation.self)(lhs, rhs) - } else { - fatalError("sqlite3_create_collation_v2 callback called with NULL pointer") - } - }, nil /* xDestroy */)) - collations[collation] = box - } - fileprivate typealias Collation = @convention(block) (UnsafeRawPointer, UnsafeRawPointer) -> Int32 - fileprivate var collations = [String: Collation]() - - // MARK: - Error Handling - - func sync(_ block: () throws -> T) rethrows -> T { - if DispatchQueue.getSpecific(key: Connection.queueKey) == queueContext { - return try block() - } else { - return try queue.sync(execute: block) - } - } - - @discardableResult func check(_ resultCode: Int32, statement: Statement? = nil) throws -> Int32 { - guard let error = Result(errorCode: resultCode, connection: self, statement: statement) else { - return resultCode - } - - throw error - } - - fileprivate var queue = DispatchQueue(label: "SQLite.Database", attributes: []) - - fileprivate static let queueKey = DispatchSpecificKey() - - fileprivate lazy var queueContext: Int = unsafeBitCast(self, to: Int.self) - -} - -extension Connection : CustomStringConvertible { - - public var description: String { - return String(cString: sqlite3_db_filename(handle, nil)) - } - -} - -extension Connection.Location : CustomStringConvertible { - - public var description: String { - switch self { - case .inMemory: - return ":memory:" - case .temporary: - return "" - case .uri(let URI): - return URI - } - } - -} - -public enum Result : Error { - - fileprivate static let successCodes: Set = [SQLITE_OK, SQLITE_ROW, SQLITE_DONE] - - /// Represents a SQLite specific [error code](https://sqlite.org/rescode.html) - /// - /// - message: English-language text that describes the error - /// - /// - code: SQLite [error code](https://sqlite.org/rescode.html#primary_result_code_list) - /// - /// - statement: the statement which produced the error - case error(message: String, code: Int32, statement: Statement?) - - init?(errorCode: Int32, connection: Connection, statement: Statement? = nil) { - guard !Result.successCodes.contains(errorCode) else { return nil } - - let message = String(cString: sqlite3_errmsg(connection.handle)) - self = .error(message: message, code: errorCode, statement: statement) - } - -} - -extension Result : CustomStringConvertible { - - public var description: String { - switch self { - case let .error(message, errorCode, statement): - if let statement = statement { - return "\(message) (\(statement)) (code: \(errorCode))" - } else { - return "\(message) (code: \(errorCode))" - } - } - } -} - -#if !SQLITE_SWIFT_SQLCIPHER && !os(Linux) -@available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) -extension Connection { - fileprivate func trace_v2(_ callback: ((String) -> Void)?) { - guard let callback = callback else { - // If the X callback is NULL or if the M mask is zero, then tracing is disabled. - sqlite3_trace_v2(handle, 0 /* mask */, nil /* xCallback */, nil /* pCtx */) - trace = nil - return - } - - let box: Trace = { (pointer: UnsafeRawPointer) in - callback(String(cString: pointer.assumingMemoryBound(to: UInt8.self))) - } - sqlite3_trace_v2(handle, - UInt32(SQLITE_TRACE_STMT) /* mask */, - { - // A trace callback is invoked with four arguments: callback(T,C,P,X). - // The T argument is one of the SQLITE_TRACE constants to indicate why the - // callback was invoked. The C argument is a copy of the context pointer. - // The P and X arguments are pointers whose meanings depend on T. - (T: UInt32, C: UnsafeMutableRawPointer?, P: UnsafeMutableRawPointer?, X: UnsafeMutableRawPointer?) in - if let P = P, - let expandedSQL = sqlite3_expanded_sql(OpaquePointer(P)) { - unsafeBitCast(C, to: Trace.self)(expandedSQL) - sqlite3_free(expandedSQL) - } - return Int32(0) // currently ignored - }, - unsafeBitCast(box, to: UnsafeMutableRawPointer.self) /* pCtx */ - ) - trace = box - } -} -#endif diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Core/Errors.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Core/Errors.swift deleted file mode 100644 index 3cd7ae9f..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Core/Errors.swift +++ /dev/null @@ -1,21 +0,0 @@ -import Foundation - -public enum QueryError: Error, CustomStringConvertible { - case noSuchTable(name: String) - case noSuchColumn(name: String, columns: [String]) - case ambiguousColumn(name: String, similar: [String]) - case unexpectedNullValue(name: String) - - public var description: String { - switch self { - case .noSuchTable(let name): - return "No such table: \(name)" - case .noSuchColumn(let name, let columns): - return "No such column `\(name)` in columns \(columns)" - case .ambiguousColumn(let name, let similar): - return "Ambiguous column `\(name)` (please disambiguate: \(similar))" - case .unexpectedNullValue(let name): - return "Unexpected null value for column `\(name)`" - } - } -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Core/Statement.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Core/Statement.swift deleted file mode 100644 index dc91d3d8..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Core/Statement.swift +++ /dev/null @@ -1,317 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#if SQLITE_SWIFT_STANDALONE -import sqlite3 -#elseif SQLITE_SWIFT_SQLCIPHER -import SQLCipher -#elseif os(Linux) -import CSQLite -#else -import SQLite3 -#endif - -/// A single SQL statement. -public final class Statement { - - fileprivate var handle: OpaquePointer? = nil - - fileprivate let connection: Connection - - init(_ connection: Connection, _ SQL: String) throws { - self.connection = connection - try connection.check(sqlite3_prepare_v2(connection.handle, SQL, -1, &handle, nil)) - } - - deinit { - sqlite3_finalize(handle) - } - - public lazy var columnCount: Int = Int(sqlite3_column_count(self.handle)) - - public lazy var columnNames: [String] = (0.. Statement { - return bind(values) - } - - /// Binds a list of parameters to a statement. - /// - /// - Parameter values: A list of parameters to bind to the statement. - /// - /// - Returns: The statement object (useful for chaining). - public func bind(_ values: [Binding?]) -> Statement { - if values.isEmpty { return self } - reset() - guard values.count == Int(sqlite3_bind_parameter_count(handle)) else { - fatalError("\(sqlite3_bind_parameter_count(handle)) values expected, \(values.count) passed") - } - for idx in 1...values.count { bind(values[idx - 1], atIndex: idx) } - return self - } - - /// Binds a dictionary of named parameters to a statement. - /// - /// - Parameter values: A dictionary of named parameters to bind to the - /// statement. - /// - /// - Returns: The statement object (useful for chaining). - public func bind(_ values: [String: Binding?]) -> Statement { - reset() - for (name, value) in values { - let idx = sqlite3_bind_parameter_index(handle, name) - guard idx > 0 else { - fatalError("parameter not found: \(name)") - } - bind(value, atIndex: Int(idx)) - } - return self - } - - fileprivate func bind(_ value: Binding?, atIndex idx: Int) { - if value == nil { - sqlite3_bind_null(handle, Int32(idx)) - } else if let value = value as? Blob { - sqlite3_bind_blob(handle, Int32(idx), value.bytes, Int32(value.bytes.count), SQLITE_TRANSIENT) - } else if let value = value as? Double { - sqlite3_bind_double(handle, Int32(idx), value) - } else if let value = value as? Int64 { - sqlite3_bind_int64(handle, Int32(idx), value) - } else if let value = value as? String { - sqlite3_bind_text(handle, Int32(idx), value, -1, SQLITE_TRANSIENT) - } else if let value = value as? Int { - self.bind(value.datatypeValue, atIndex: idx) - } else if let value = value as? Bool { - self.bind(value.datatypeValue, atIndex: idx) - } else if let value = value { - fatalError("tried to bind unexpected value \(value)") - } - } - - /// - Parameter bindings: A list of parameters to bind to the statement. - /// - /// - Throws: `Result.Error` if query execution fails. - /// - /// - Returns: The statement object (useful for chaining). - @discardableResult public func run(_ bindings: Binding?...) throws -> Statement { - guard bindings.isEmpty else { - return try run(bindings) - } - - reset(clearBindings: false) - repeat {} while try step() - return self - } - - /// - Parameter bindings: A list of parameters to bind to the statement. - /// - /// - Throws: `Result.Error` if query execution fails. - /// - /// - Returns: The statement object (useful for chaining). - @discardableResult public func run(_ bindings: [Binding?]) throws -> Statement { - return try bind(bindings).run() - } - - /// - Parameter bindings: A dictionary of named parameters to bind to the - /// statement. - /// - /// - Throws: `Result.Error` if query execution fails. - /// - /// - Returns: The statement object (useful for chaining). - @discardableResult public func run(_ bindings: [String: Binding?]) throws -> Statement { - return try bind(bindings).run() - } - - /// - Parameter bindings: A list of parameters to bind to the statement. - /// - /// - Returns: The first value of the first row returned. - public func scalar(_ bindings: Binding?...) throws -> Binding? { - guard bindings.isEmpty else { - return try scalar(bindings) - } - - reset(clearBindings: false) - _ = try step() - return row[0] - } - - /// - Parameter bindings: A list of parameters to bind to the statement. - /// - /// - Returns: The first value of the first row returned. - public func scalar(_ bindings: [Binding?]) throws -> Binding? { - return try bind(bindings).scalar() - } - - - /// - Parameter bindings: A dictionary of named parameters to bind to the - /// statement. - /// - /// - Returns: The first value of the first row returned. - public func scalar(_ bindings: [String: Binding?]) throws -> Binding? { - return try bind(bindings).scalar() - } - - public func step() throws -> Bool { - return try connection.sync { try self.connection.check(sqlite3_step(self.handle)) == SQLITE_ROW } - } - - fileprivate func reset(clearBindings shouldClear: Bool = true) { - sqlite3_reset(handle) - if (shouldClear) { sqlite3_clear_bindings(handle) } - } - -} - -extension Statement : Sequence { - - public func makeIterator() -> Statement { - reset(clearBindings: false) - return self - } - -} - -public protocol FailableIterator : IteratorProtocol { - func failableNext() throws -> Self.Element? -} - -extension FailableIterator { - public func next() -> Element? { - return try! failableNext() - } -} - -extension Array { - public init(_ failableIterator: I) throws where I.Element == Element { - self.init() - while let row = try failableIterator.failableNext() { - append(row) - } - } -} - -extension Statement : FailableIterator { - public typealias Element = [Binding?] - public func failableNext() throws -> [Binding?]? { - return try step() ? Array(row) : nil - } -} - -extension Statement : CustomStringConvertible { - - public var description: String { - return String(cString: sqlite3_sql(handle)) - } - -} - -public struct Cursor { - - fileprivate let handle: OpaquePointer - - fileprivate let columnCount: Int - - fileprivate init(_ statement: Statement) { - handle = statement.handle! - columnCount = statement.columnCount - } - - public subscript(idx: Int) -> Double { - return sqlite3_column_double(handle, Int32(idx)) - } - - public subscript(idx: Int) -> Int64 { - return sqlite3_column_int64(handle, Int32(idx)) - } - - public subscript(idx: Int) -> String { - return String(cString: UnsafePointer(sqlite3_column_text(handle, Int32(idx)))) - } - - public subscript(idx: Int) -> Blob { - if let pointer = sqlite3_column_blob(handle, Int32(idx)) { - let length = Int(sqlite3_column_bytes(handle, Int32(idx))) - return Blob(bytes: pointer, length: length) - } else { - // The return value from sqlite3_column_blob() for a zero-length BLOB is a NULL pointer. - // https://www.sqlite.org/c3ref/column_blob.html - return Blob(bytes: []) - } - } - - // MARK: - - - public subscript(idx: Int) -> Bool { - return Bool.fromDatatypeValue(self[idx]) - } - - public subscript(idx: Int) -> Int { - return Int.fromDatatypeValue(self[idx]) - } - -} - -/// Cursors provide direct access to a statement’s current row. -extension Cursor : Sequence { - - public subscript(idx: Int) -> Binding? { - switch sqlite3_column_type(handle, Int32(idx)) { - case SQLITE_BLOB: - return self[idx] as Blob - case SQLITE_FLOAT: - return self[idx] as Double - case SQLITE_INTEGER: - return self[idx] as Int64 - case SQLITE_NULL: - return nil - case SQLITE_TEXT: - return self[idx] as String - case let type: - fatalError("unsupported column type: \(type)") - } - } - - public func makeIterator() -> AnyIterator { - var idx = 0 - return AnyIterator { - if idx >= self.columnCount { - return Optional.none - } else { - idx += 1 - return self[idx - 1] - } - } - } - -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Core/Value.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Core/Value.swift deleted file mode 100644 index 608f0ce6..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Core/Value.swift +++ /dev/null @@ -1,132 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -/// - Warning: `Binding` is a protocol that SQLite.swift uses internally to -/// directly map SQLite types to Swift types. -/// -/// Do not conform custom types to the Binding protocol. See the `Value` -/// protocol, instead. -public protocol Binding {} - -public protocol Number : Binding {} - -public protocol Value : Expressible { // extensions cannot have inheritance clauses - - associatedtype ValueType = Self - - associatedtype Datatype : Binding - - static var declaredDatatype: String { get } - - static func fromDatatypeValue(_ datatypeValue: Datatype) -> ValueType - - var datatypeValue: Datatype { get } - -} - -extension Double : Number, Value { - - public static let declaredDatatype = "REAL" - - public static func fromDatatypeValue(_ datatypeValue: Double) -> Double { - return datatypeValue - } - - public var datatypeValue: Double { - return self - } - -} - -extension Int64 : Number, Value { - - public static let declaredDatatype = "INTEGER" - - public static func fromDatatypeValue(_ datatypeValue: Int64) -> Int64 { - return datatypeValue - } - - public var datatypeValue: Int64 { - return self - } - -} - -extension String : Binding, Value { - - public static let declaredDatatype = "TEXT" - - public static func fromDatatypeValue(_ datatypeValue: String) -> String { - return datatypeValue - } - - public var datatypeValue: String { - return self - } - -} - -extension Blob : Binding, Value { - - public static let declaredDatatype = "BLOB" - - public static func fromDatatypeValue(_ datatypeValue: Blob) -> Blob { - return datatypeValue - } - - public var datatypeValue: Blob { - return self - } - -} - -// MARK: - - -extension Bool : Binding, Value { - - public static var declaredDatatype = Int64.declaredDatatype - - public static func fromDatatypeValue(_ datatypeValue: Int64) -> Bool { - return datatypeValue != 0 - } - - public var datatypeValue: Int64 { - return self ? 1 : 0 - } - -} - -extension Int : Number, Value { - - public static var declaredDatatype = Int64.declaredDatatype - - public static func fromDatatypeValue(_ datatypeValue: Int64) -> Int { - return Int(datatypeValue) - } - - public var datatypeValue: Int64 { - return Int64(self) - } - -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Extensions/FTS4.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Extensions/FTS4.swift deleted file mode 100644 index 5ef84dd7..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Extensions/FTS4.swift +++ /dev/null @@ -1,352 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#if SWIFT_PACKAGE -import SQLiteObjc -#endif - -extension Module { - - public static func FTS4(_ column: Expressible, _ more: Expressible...) -> Module { - return FTS4([column] + more) - } - - public static func FTS4(_ columns: [Expressible] = [], tokenize tokenizer: Tokenizer? = nil) -> Module { - return FTS4(FTS4Config().columns(columns).tokenizer(tokenizer)) - } - - public static func FTS4(_ config: FTS4Config) -> Module { - return Module(name: "fts4", arguments: config.arguments()) - } -} - -extension VirtualTable { - - /// Builds an expression appended with a `MATCH` query against the given - /// pattern. - /// - /// let emails = VirtualTable("emails") - /// - /// emails.filter(emails.match("Hello")) - /// // SELECT * FROM "emails" WHERE "emails" MATCH 'Hello' - /// - /// - Parameter pattern: A pattern to match. - /// - /// - Returns: An expression appended with a `MATCH` query against the given - /// pattern. - public func match(_ pattern: String) -> Expression { - return "MATCH".infix(tableName(), pattern) - } - - public func match(_ pattern: Expression) -> Expression { - return "MATCH".infix(tableName(), pattern) - } - - public func match(_ pattern: Expression) -> Expression { - return "MATCH".infix(tableName(), pattern) - } - - /// Builds a copy of the query with a `WHERE … MATCH` clause. - /// - /// let emails = VirtualTable("emails") - /// - /// emails.match("Hello") - /// // SELECT * FROM "emails" WHERE "emails" MATCH 'Hello' - /// - /// - Parameter pattern: A pattern to match. - /// - /// - Returns: A query with the given `WHERE … MATCH` clause applied. - public func match(_ pattern: String) -> QueryType { - return filter(match(pattern)) - } - - public func match(_ pattern: Expression) -> QueryType { - return filter(match(pattern)) - } - - public func match(_ pattern: Expression) -> QueryType { - return filter(match(pattern)) - } - -} - -public struct Tokenizer { - - public static let Simple = Tokenizer("simple") - - public static let Porter = Tokenizer("porter") - - public static func Unicode61(removeDiacritics: Bool? = nil, tokenchars: Set = [], separators: Set = []) -> Tokenizer { - var arguments = [String]() - - if let removeDiacritics = removeDiacritics { - arguments.append("removeDiacritics=\(removeDiacritics ? 1 : 0)".quote()) - } - - if !tokenchars.isEmpty { - let joined = tokenchars.map { String($0) }.joined(separator: "") - arguments.append("tokenchars=\(joined)".quote()) - } - - if !separators.isEmpty { - let joined = separators.map { String($0) }.joined(separator: "") - arguments.append("separators=\(joined)".quote()) - } - - return Tokenizer("unicode61", arguments) - } - - public static func Custom(_ name: String) -> Tokenizer { - return Tokenizer(Tokenizer.moduleName.quote(), [name.quote()]) - } - - public let name: String - - public let arguments: [String] - - fileprivate init(_ name: String, _ arguments: [String] = []) { - self.name = name - self.arguments = arguments - } - - fileprivate static let moduleName = "SQLite.swift" - -} - -extension Tokenizer : CustomStringConvertible { - - public var description: String { - return ([name] + arguments).joined(separator: " ") - } - -} - -extension Connection { - - public func registerTokenizer(_ submoduleName: String, next: @escaping (String) -> (String, Range)?) throws { - try check(_SQLiteRegisterTokenizer(handle, Tokenizer.moduleName, submoduleName) { ( - input: UnsafePointer, offset: UnsafeMutablePointer, length: UnsafeMutablePointer) in - let string = String(cString: input) - - guard let (token, range) = next(string) else { return nil } - - let view:String.UTF8View = string.utf8 - - if let from = range.lowerBound.samePosition(in: view), - let to = range.upperBound.samePosition(in: view) { - offset.pointee += Int32(string[string.startIndex.. Self { - self.columnDefinitions.append((column, options)) - return self - } - - @discardableResult open func columns(_ columns: [Expressible]) -> Self { - for column in columns { - self.column(column) - } - return self - } - - /// [Tokenizers](https://www.sqlite.org/fts3.html#tokenizer) - open func tokenizer(_ tokenizer: Tokenizer?) -> Self { - self.tokenizer = tokenizer - return self - } - - /// [The prefix= option](https://www.sqlite.org/fts3.html#section_6_6) - open func prefix(_ prefix: [Int]) -> Self { - self.prefixes += prefix - return self - } - - /// [The content= option](https://www.sqlite.org/fts3.html#section_6_2) - open func externalContent(_ schema: SchemaType) -> Self { - self.externalContentSchema = schema - return self - } - - /// [Contentless FTS4 Tables](https://www.sqlite.org/fts3.html#section_6_2_1) - open func contentless() -> Self { - self.isContentless = true - return self - } - - func formatColumnDefinitions() -> [Expressible] { - return columnDefinitions.map { $0.0 } - } - - func arguments() -> [Expressible] { - return options().arguments - } - - func options() -> Options { - var options = Options() - options.append(formatColumnDefinitions()) - if let tokenizer = tokenizer { - options.append("tokenize", value: Expression(literal: tokenizer.description)) - } - options.appendCommaSeparated("prefix", values:prefixes.sorted().map { String($0) }) - if isContentless { - options.append("content", value: "") - } else if let externalContentSchema = externalContentSchema { - options.append("content", value: externalContentSchema.tableName()) - } - return options - } - - struct Options { - var arguments = [Expressible]() - - @discardableResult mutating func append(_ columns: [Expressible]) -> Options { - arguments.append(contentsOf: columns) - return self - } - - @discardableResult mutating func appendCommaSeparated(_ key: String, values: [String]) -> Options { - if values.isEmpty { - return self - } else { - return append(key, value: values.joined(separator: ",")) - } - } - - @discardableResult mutating func append(_ key: String, value: CustomStringConvertible?) -> Options { - return append(key, value: value?.description) - } - - @discardableResult mutating func append(_ key: String, value: String?) -> Options { - return append(key, value: value.map { Expression($0) }) - } - - @discardableResult mutating func append(_ key: String, value: Expressible?) -> Options { - if let value = value { - arguments.append("=".join([Expression(literal: key), value])) - } - return self - } - } -} - -/// Configuration for the [FTS4](https://www.sqlite.org/fts3.html) extension. -open class FTS4Config : FTSConfig { - /// [The matchinfo= option](https://www.sqlite.org/fts3.html#section_6_4) - public enum MatchInfo : CustomStringConvertible { - case fts3 - public var description: String { - return "fts3" - } - } - - /// [FTS4 options](https://www.sqlite.org/fts3.html#fts4_options) - public enum Order : CustomStringConvertible { - /// Data structures are optimized for returning results in ascending order by docid (default) - case asc - /// FTS4 stores its data in such a way as to optimize returning results in descending order by docid. - case desc - - public var description: String { - switch self { - case .asc: return "asc" - case .desc: return "desc" - } - } - } - - var compressFunction: String? - var uncompressFunction: String? - var languageId: String? - var matchInfo: MatchInfo? - var order: Order? - - override public init() { - } - - /// [The compress= and uncompress= options](https://www.sqlite.org/fts3.html#section_6_1) - open func compress(_ functionName: String) -> Self { - self.compressFunction = functionName - return self - } - - /// [The compress= and uncompress= options](https://www.sqlite.org/fts3.html#section_6_1) - open func uncompress(_ functionName: String) -> Self { - self.uncompressFunction = functionName - return self - } - - /// [The languageid= option](https://www.sqlite.org/fts3.html#section_6_3) - open func languageId(_ columnName: String) -> Self { - self.languageId = columnName - return self - } - - /// [The matchinfo= option](https://www.sqlite.org/fts3.html#section_6_4) - open func matchInfo(_ matchInfo: MatchInfo) -> Self { - self.matchInfo = matchInfo - return self - } - - /// [FTS4 options](https://www.sqlite.org/fts3.html#fts4_options) - open func order(_ order: Order) -> Self { - self.order = order - return self - } - - override func options() -> Options { - var options = super.options() - for (column, _) in (columnDefinitions.filter { $0.options.contains(.unindexed) }) { - options.append("notindexed", value: column) - } - options.append("languageid", value: languageId) - options.append("compress", value: compressFunction) - options.append("uncompress", value: uncompressFunction) - options.append("matchinfo", value: matchInfo) - options.append("order", value: order) - return options - } -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Extensions/FTS5.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Extensions/FTS5.swift deleted file mode 100644 index 763927ff..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Extensions/FTS5.swift +++ /dev/null @@ -1,97 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -extension Module { - public static func FTS5(_ config: FTS5Config) -> Module { - return Module(name: "fts5", arguments: config.arguments()) - } -} - -/// Configuration for the [FTS5](https://www.sqlite.org/fts5.html) extension. -/// -/// **Note:** this is currently only applicable when using SQLite.swift together with a FTS5-enabled version -/// of SQLite. -open class FTS5Config : FTSConfig { - public enum Detail : CustomStringConvertible { - /// store rowid, column number, term offset - case full - /// store rowid, column number - case column - /// store rowid - case none - - public var description: String { - switch self { - case .full: return "full" - case .column: return "column" - case .none: return "none" - } - } - } - - var detail: Detail? - var contentRowId: Expressible? - var columnSize: Int? - - override public init() { - } - - /// [External Content Tables](https://www.sqlite.org/fts5.html#section_4_4_2) - open func contentRowId(_ column: Expressible) -> Self { - self.contentRowId = column - return self - } - - /// [The Columnsize Option](https://www.sqlite.org/fts5.html#section_4_5) - open func columnSize(_ size: Int) -> Self { - self.columnSize = size - return self - } - - /// [The Detail Option](https://www.sqlite.org/fts5.html#section_4_6) - open func detail(_ detail: Detail) -> Self { - self.detail = detail - return self - } - - override func options() -> Options { - var options = super.options() - options.append("content_rowid", value: contentRowId) - if let columnSize = columnSize { - options.append("columnsize", value: Expression(value: columnSize)) - } - options.append("detail", value: detail) - return options - } - - override func formatColumnDefinitions() -> [Expressible] { - return columnDefinitions.map { definition in - if definition.options.contains(.unindexed) { - return " ".join([definition.0, Expression(literal: "UNINDEXED")]) - } else { - return definition.0 - } - } - } -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Extensions/RTree.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Extensions/RTree.swift deleted file mode 100644 index 4fc1a235..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Extensions/RTree.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -extension Module { - - public static func RTree(_ primaryKey: Expression, _ pairs: (Expression, Expression)...) -> Module where T.Datatype == Int64, U.Datatype == Double { - var arguments: [Expressible] = [primaryKey] - - for pair in pairs { - arguments.append(contentsOf: [pair.0, pair.1] as [Expressible]) - } - - return Module(name: "rtree", arguments: arguments) - } - -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Foundation.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Foundation.swift deleted file mode 100644 index 5638bc5b..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Foundation.swift +++ /dev/null @@ -1,70 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -extension Data : Value { - - public static var declaredDatatype: String { - return Blob.declaredDatatype - } - - public static func fromDatatypeValue(_ dataValue: Blob) -> Data { - return Data(bytes: dataValue.bytes) - } - - public var datatypeValue: Blob { - return withUnsafeBytes { (pointer: UnsafePointer) -> Blob in - return Blob(bytes: pointer, length: count) - } - } - -} - -extension Date : Value { - - public static var declaredDatatype: String { - return String.declaredDatatype - } - - public static func fromDatatypeValue(_ stringValue: String) -> Date { - return dateFormatter.date(from: stringValue)! - } - - public var datatypeValue: String { - return dateFormatter.string(from: self) - } - -} - -/// A global date formatter used to serialize and deserialize `NSDate` objects. -/// If multiple date formats are used in an application’s database(s), use a -/// custom `Value` type per additional format. -public var dateFormatter: DateFormatter = { - let formatter = DateFormatter() - formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS" - formatter.locale = Locale(identifier: "en_US_POSIX") - formatter.timeZone = TimeZone(secondsFromGMT: 0) - return formatter -}() diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Helpers.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Helpers.swift deleted file mode 100644 index ac831667..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Helpers.swift +++ /dev/null @@ -1,132 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#if SQLITE_SWIFT_STANDALONE -import sqlite3 -#elseif SQLITE_SWIFT_SQLCIPHER -import SQLCipher -#elseif os(Linux) -import CSQLite -#else -import SQLite3 -#endif - -public typealias Star = (Expression?, Expression?) -> Expression - -public func *(_: Expression?, _: Expression?) -> Expression { - return Expression(literal: "*") -} - -public protocol _OptionalType { - - associatedtype WrappedType - -} - -extension Optional : _OptionalType { - - public typealias WrappedType = Wrapped - -} - -// let SQLITE_STATIC = unsafeBitCast(0, sqlite3_destructor_type.self) -let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self) - -extension String { - - func quote(_ mark: Character = "\"") -> String { - let escaped = reduce("") { string, character in - string + (character == mark ? "\(mark)\(mark)" : "\(character)") - } - return "\(mark)\(escaped)\(mark)" - } - - func join(_ expressions: [Expressible]) -> Expressible { - var (template, bindings) = ([String](), [Binding?]()) - for expressible in expressions { - let expression = expressible.expression - template.append(expression.template) - bindings.append(contentsOf: expression.bindings) - } - return Expression(template.joined(separator: self), bindings) - } - - func infix(_ lhs: Expressible, _ rhs: Expressible, wrap: Bool = true) -> Expression { - let expression = Expression(" \(self) ".join([lhs, rhs]).expression) - guard wrap else { - return expression - } - return "".wrap(expression) - } - - func prefix(_ expressions: Expressible) -> Expressible { - return "\(self) ".wrap(expressions) as Expression - } - - func prefix(_ expressions: [Expressible]) -> Expressible { - return "\(self) ".wrap(expressions) as Expression - } - - func wrap(_ expression: Expressible) -> Expression { - return Expression("\(self)(\(expression.expression.template))", expression.expression.bindings) - } - - func wrap(_ expressions: [Expressible]) -> Expression { - return wrap(", ".join(expressions)) - } - -} - -func infix(_ lhs: Expressible, _ rhs: Expressible, wrap: Bool = true, function: String = #function) -> Expression { - return function.infix(lhs, rhs, wrap: wrap) -} - -func wrap(_ expression: Expressible, function: String = #function) -> Expression { - return function.wrap(expression) -} - -func wrap(_ expressions: [Expressible], function: String = #function) -> Expression { - return function.wrap(", ".join(expressions)) -} - -func transcode(_ literal: Binding?) -> String { - guard let literal = literal else { return "NULL" } - - switch literal { - case let blob as Blob: - return blob.description - case let string as String: - return string.quote("'") - case let binding: - return "\(binding)" - } -} - -func value(_ v: Binding) -> A { - return A.fromDatatypeValue(v as! A.Datatype) as! A -} - -func value(_ v: Binding?) -> A { - return value(v!) -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/SQLite.h b/Example/Pods/SQLite.swift/Sources/SQLite/SQLite.h deleted file mode 100644 index 693ce323..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/SQLite.h +++ /dev/null @@ -1,6 +0,0 @@ -@import Foundation; - -FOUNDATION_EXPORT double SQLiteVersionNumber; -FOUNDATION_EXPORT const unsigned char SQLiteVersionString[]; - -#import diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/AggregateFunctions.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Typed/AggregateFunctions.swift deleted file mode 100644 index 249bbe60..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/AggregateFunctions.swift +++ /dev/null @@ -1,251 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -extension ExpressionType where UnderlyingType : Value { - - /// Builds a copy of the expression prefixed with the `DISTINCT` keyword. - /// - /// let name = Expression("name") - /// name.distinct - /// // DISTINCT "name" - /// - /// - Returns: A copy of the expression prefixed with the `DISTINCT` - /// keyword. - public var distinct: Expression { - return Expression("DISTINCT \(template)", bindings) - } - - /// Builds a copy of the expression wrapped with the `count` aggregate - /// function. - /// - /// let name = Expression("name") - /// name.count - /// // count("name") - /// name.distinct.count - /// // count(DISTINCT "name") - /// - /// - Returns: A copy of the expression wrapped with the `count` aggregate - /// function. - public var count: Expression { - return wrap(self) - } - -} - -extension ExpressionType where UnderlyingType : _OptionalType, UnderlyingType.WrappedType : Value { - - /// Builds a copy of the expression prefixed with the `DISTINCT` keyword. - /// - /// let name = Expression("name") - /// name.distinct - /// // DISTINCT "name" - /// - /// - Returns: A copy of the expression prefixed with the `DISTINCT` - /// keyword. - public var distinct: Expression { - return Expression("DISTINCT \(template)", bindings) - } - - /// Builds a copy of the expression wrapped with the `count` aggregate - /// function. - /// - /// let name = Expression("name") - /// name.count - /// // count("name") - /// name.distinct.count - /// // count(DISTINCT "name") - /// - /// - Returns: A copy of the expression wrapped with the `count` aggregate - /// function. - public var count: Expression { - return wrap(self) - } - -} - -extension ExpressionType where UnderlyingType : Value, UnderlyingType.Datatype : Comparable { - - /// Builds a copy of the expression wrapped with the `max` aggregate - /// function. - /// - /// let age = Expression("age") - /// age.max - /// // max("age") - /// - /// - Returns: A copy of the expression wrapped with the `max` aggregate - /// function. - public var max: Expression { - return wrap(self) - } - - /// Builds a copy of the expression wrapped with the `min` aggregate - /// function. - /// - /// let age = Expression("age") - /// age.min - /// // min("age") - /// - /// - Returns: A copy of the expression wrapped with the `min` aggregate - /// function. - public var min: Expression { - return wrap(self) - } - -} - -extension ExpressionType where UnderlyingType : _OptionalType, UnderlyingType.WrappedType : Value, UnderlyingType.WrappedType.Datatype : Comparable { - - /// Builds a copy of the expression wrapped with the `max` aggregate - /// function. - /// - /// let age = Expression("age") - /// age.max - /// // max("age") - /// - /// - Returns: A copy of the expression wrapped with the `max` aggregate - /// function. - public var max: Expression { - return wrap(self) - } - - /// Builds a copy of the expression wrapped with the `min` aggregate - /// function. - /// - /// let age = Expression("age") - /// age.min - /// // min("age") - /// - /// - Returns: A copy of the expression wrapped with the `min` aggregate - /// function. - public var min: Expression { - return wrap(self) - } - -} - -extension ExpressionType where UnderlyingType : Value, UnderlyingType.Datatype : Number { - - /// Builds a copy of the expression wrapped with the `avg` aggregate - /// function. - /// - /// let salary = Expression("salary") - /// salary.average - /// // avg("salary") - /// - /// - Returns: A copy of the expression wrapped with the `min` aggregate - /// function. - public var average: Expression { - return "avg".wrap(self) - } - - /// Builds a copy of the expression wrapped with the `sum` aggregate - /// function. - /// - /// let salary = Expression("salary") - /// salary.sum - /// // sum("salary") - /// - /// - Returns: A copy of the expression wrapped with the `min` aggregate - /// function. - public var sum: Expression { - return wrap(self) - } - - /// Builds a copy of the expression wrapped with the `total` aggregate - /// function. - /// - /// let salary = Expression("salary") - /// salary.total - /// // total("salary") - /// - /// - Returns: A copy of the expression wrapped with the `min` aggregate - /// function. - public var total: Expression { - return wrap(self) - } - -} - -extension ExpressionType where UnderlyingType : _OptionalType, UnderlyingType.WrappedType : Value, UnderlyingType.WrappedType.Datatype : Number { - - /// Builds a copy of the expression wrapped with the `avg` aggregate - /// function. - /// - /// let salary = Expression("salary") - /// salary.average - /// // avg("salary") - /// - /// - Returns: A copy of the expression wrapped with the `min` aggregate - /// function. - public var average: Expression { - return "avg".wrap(self) - } - - /// Builds a copy of the expression wrapped with the `sum` aggregate - /// function. - /// - /// let salary = Expression("salary") - /// salary.sum - /// // sum("salary") - /// - /// - Returns: A copy of the expression wrapped with the `min` aggregate - /// function. - public var sum: Expression { - return wrap(self) - } - - /// Builds a copy of the expression wrapped with the `total` aggregate - /// function. - /// - /// let salary = Expression("salary") - /// salary.total - /// // total("salary") - /// - /// - Returns: A copy of the expression wrapped with the `min` aggregate - /// function. - public var total: Expression { - return wrap(self) - } - -} - -extension ExpressionType where UnderlyingType == Int { - - static func count(_ star: Star) -> Expression { - return wrap(star(nil, nil)) - } - -} - -/// Builds an expression representing `count(*)` (when called with the `*` -/// function literal). -/// -/// count(*) -/// // count(*) -/// -/// - Returns: An expression returning `count(*)` (when called with the `*` -/// function literal). -public func count(_ star: Star) -> Expression { - return Expression.count(star) -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Coding.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Coding.swift deleted file mode 100644 index 7c70db33..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Coding.swift +++ /dev/null @@ -1,340 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -extension QueryType { - /// Creates an `INSERT` statement by encoding the given object - /// This method converts any custom nested types to JSON data and does not handle any sort - /// of object relationships. If you want to support relationships between objects you will - /// have to provide your own Encodable implementations that encode the correct ids. - /// - /// - Parameters: - /// - /// - encodable: An encodable object to insert - /// - /// - userInfo: User info to be passed to encoder - /// - /// - otherSetters: Any other setters to include in the insert - /// - /// - Returns: An `INSERT` statement fort the encodable object - public func insert(_ encodable: Encodable, userInfo: [CodingUserInfoKey:Any] = [:], otherSetters: [Setter] = []) throws -> Insert { - let encoder = SQLiteEncoder(userInfo: userInfo) - try encodable.encode(to: encoder) - return self.insert(encoder.setters + otherSetters) - } - - /// Creates an `UPDATE` statement by encoding the given object - /// This method converts any custom nested types to JSON data and does not handle any sort - /// of object relationships. If you want to support relationships between objects you will - /// have to provide your own Encodable implementations that encode the correct ids. - /// - /// - Parameters: - /// - /// - encodable: An encodable object to insert - /// - /// - userInfo: User info to be passed to encoder - /// - /// - otherSetters: Any other setters to include in the insert - /// - /// - Returns: An `UPDATE` statement fort the encodable object - public func update(_ encodable: Encodable, userInfo: [CodingUserInfoKey:Any] = [:], otherSetters: [Setter] = []) throws -> Update { - let encoder = SQLiteEncoder(userInfo: userInfo) - try encodable.encode(to: encoder) - return self.update(encoder.setters + otherSetters) - } -} - -extension Row { - /// Decode an object from this row - /// This method expects any custom nested types to be in the form of JSON data and does not handle - /// any sort of object relationships. If you want to support relationships between objects you will - /// have to provide your own Decodable implementations that decodes the correct columns. - /// - /// - Parameter: userInfo - /// - /// - Returns: a decoded object from this row - public func decode(userInfo: [CodingUserInfoKey: Any] = [:]) throws -> V { - return try V(from: self.decoder(userInfo: userInfo)) - } - - public func decoder(userInfo: [CodingUserInfoKey: Any] = [:]) -> Decoder { - return SQLiteDecoder(row: self, userInfo: userInfo) - } -} - -/// Generates a list of settings for an Encodable object -fileprivate class SQLiteEncoder: Encoder { - class SQLiteKeyedEncodingContainer: KeyedEncodingContainerProtocol { - typealias Key = MyKey - - let encoder: SQLiteEncoder - let codingPath: [CodingKey] = [] - - init(encoder: SQLiteEncoder) { - self.encoder = encoder - } - - func superEncoder() -> Swift.Encoder { - fatalError("SQLiteEncoding does not support super encoders") - } - - func superEncoder(forKey key: Key) -> Swift.Encoder { - fatalError("SQLiteEncoding does not support super encoders") - } - - func encodeNil(forKey key: SQLiteEncoder.SQLiteKeyedEncodingContainer.Key) throws { - self.encoder.setters.append(Expression(key.stringValue) <- nil) - } - - func encode(_ value: Int, forKey key: SQLiteEncoder.SQLiteKeyedEncodingContainer.Key) throws { - self.encoder.setters.append(Expression(key.stringValue) <- value) - } - - func encode(_ value: Bool, forKey key: Key) throws { - self.encoder.setters.append(Expression(key.stringValue) <- value) - } - - func encode(_ value: Float, forKey key: Key) throws { - self.encoder.setters.append(Expression(key.stringValue) <- Double(value)) - } - - func encode(_ value: Double, forKey key: Key) throws { - self.encoder.setters.append(Expression(key.stringValue) <- value) - } - - func encode(_ value: String, forKey key: Key) throws { - self.encoder.setters.append(Expression(key.stringValue) <- value) - } - - func encode(_ value: T, forKey key: Key) throws where T : Swift.Encodable { - if let data = value as? Data { - self.encoder.setters.append(Expression(key.stringValue) <- data) - } - else { - let encoded = try JSONEncoder().encode(value) - let string = String(data: encoded, encoding: .utf8) - self.encoder.setters.append(Expression(key.stringValue) <- string) - } - } - - func encode(_ value: Int8, forKey key: Key) throws { - throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an Int8 is not supported")) - } - - func encode(_ value: Int16, forKey key: Key) throws { - throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an Int16 is not supported")) - } - - func encode(_ value: Int32, forKey key: Key) throws { - throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an Int32 is not supported")) - } - - func encode(_ value: Int64, forKey key: Key) throws { - throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an Int64 is not supported")) - } - - func encode(_ value: UInt, forKey key: Key) throws { - throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an UInt is not supported")) - } - - func encode(_ value: UInt8, forKey key: Key) throws { - throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an UInt8 is not supported")) - } - - func encode(_ value: UInt16, forKey key: Key) throws { - throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an UInt16 is not supported")) - } - - func encode(_ value: UInt32, forKey key: Key) throws { - throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an UInt32 is not supported")) - } - - func encode(_ value: UInt64, forKey key: Key) throws { - throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an UInt64 is not supported")) - } - - func nestedContainer(keyedBy keyType: NestedKey.Type, forKey key: Key) -> KeyedEncodingContainer where NestedKey : CodingKey { - fatalError("encoding a nested container is not supported") - } - - func nestedUnkeyedContainer(forKey key: Key) -> UnkeyedEncodingContainer { - fatalError("encoding nested values is not supported") - } - } - - fileprivate var setters: [SQLite.Setter] = [] - let codingPath: [CodingKey] = [] - let userInfo: [CodingUserInfoKey: Any] - - init(userInfo: [CodingUserInfoKey: Any]) { - self.userInfo = userInfo - } - - func singleValueContainer() -> SingleValueEncodingContainer { - fatalError("not supported") - } - - func unkeyedContainer() -> UnkeyedEncodingContainer { - fatalError("not supported") - } - - func container(keyedBy type: Key.Type) -> KeyedEncodingContainer where Key : CodingKey { - return KeyedEncodingContainer(SQLiteKeyedEncodingContainer(encoder: self)) - } -} - -fileprivate class SQLiteDecoder : Decoder { - class SQLiteKeyedDecodingContainer : KeyedDecodingContainerProtocol { - typealias Key = MyKey - - let codingPath: [CodingKey] = [] - let row: Row - - init(row: Row) { - self.row = row - } - - var allKeys: [Key] { - return self.row.columnNames.keys.compactMap({Key(stringValue: $0)}) - } - - func contains(_ key: Key) -> Bool { - return self.row.hasValue(for: key.stringValue) - } - - func decodeNil(forKey key: Key) throws -> Bool { - return !self.contains(key) - } - - func decode(_ type: Bool.Type, forKey key: Key) throws -> Bool { - return try self.row.get(Expression(key.stringValue)) - } - - func decode(_ type: Int.Type, forKey key: Key) throws -> Int { - return try self.row.get(Expression(key.stringValue)) - } - - func decode(_ type: Int8.Type, forKey key: Key) throws -> Int8 { - throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an Int8 is not supported")) - } - - func decode(_ type: Int16.Type, forKey key: Key) throws -> Int16 { - throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an Int16 is not supported")) - } - - func decode(_ type: Int32.Type, forKey key: Key) throws -> Int32 { - throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an Int32 is not supported")) - } - - func decode(_ type: Int64.Type, forKey key: Key) throws -> Int64 { - throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt64 is not supported")) - } - - func decode(_ type: UInt.Type, forKey key: Key) throws -> UInt { - throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt is not supported")) - - } - - func decode(_ type: UInt8.Type, forKey key: Key) throws -> UInt8 { - throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt8 is not supported")) - } - - func decode(_ type: UInt16.Type, forKey key: Key) throws -> UInt16 { - throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt16 is not supported")) - } - - func decode(_ type: UInt32.Type, forKey key: Key) throws -> UInt32 { - throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt32 is not supported")) - } - - func decode(_ type: UInt64.Type, forKey key: Key) throws -> UInt64 { - throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt64 is not supported")) - } - - func decode(_ type: Float.Type, forKey key: Key) throws -> Float { - return Float(try self.row.get(Expression(key.stringValue))) - } - - func decode(_ type: Double.Type, forKey key: Key) throws -> Double { - return try self.row.get(Expression(key.stringValue)) - } - - func decode(_ type: String.Type, forKey key: Key) throws -> String { - return try self.row.get(Expression(key.stringValue)) - } - - func decode(_ type: T.Type, forKey key: Key) throws -> T where T: Swift.Decodable { - if type == Data.self { - let data = try self.row.get(Expression(key.stringValue)) - return data as! T - } - guard let JSONString = try self.row.get(Expression(key.stringValue)) else { - throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "an unsupported type was found")) - } - guard let data = JSONString.data(using: .utf8) else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "invalid utf8 data found")) - } - return try JSONDecoder().decode(type, from: data) - } - - func nestedContainer(keyedBy type: NestedKey.Type, forKey key: Key) throws -> KeyedDecodingContainer where NestedKey : CodingKey { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding nested containers is not supported")) - } - - func nestedUnkeyedContainer(forKey key: Key) throws -> UnkeyedDecodingContainer { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding unkeyed containers is not supported")) - } - - func superDecoder() throws -> Swift.Decoder { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding super encoders containers is not supported")) - } - - func superDecoder(forKey key: Key) throws -> Swift.Decoder { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding super decoders is not supported")) - } - } - - let row: Row - let codingPath: [CodingKey] = [] - let userInfo: [CodingUserInfoKey: Any] - - init(row: Row, userInfo: [CodingUserInfoKey: Any]) { - self.row = row - self.userInfo = userInfo - } - - func container(keyedBy type: Key.Type) throws -> KeyedDecodingContainer where Key : CodingKey { - return KeyedDecodingContainer(SQLiteKeyedDecodingContainer(row: self.row)) - } - - func unkeyedContainer() throws -> UnkeyedDecodingContainer { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an unkeyed container is not supported")) - } - - func singleValueContainer() throws -> SingleValueDecodingContainer { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding a single value container is not supported")) - } -} - diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Collation.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Collation.swift deleted file mode 100644 index e2ff9d10..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Collation.swift +++ /dev/null @@ -1,69 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -/// A collating function used to compare to strings. -/// -/// - SeeAlso: -public enum Collation { - - /// Compares string by raw data. - case binary - - /// Like binary, but folds uppercase ASCII letters into their lowercase - /// equivalents. - case nocase - - /// Like binary, but strips trailing space. - case rtrim - - /// A custom collating sequence identified by the given string, registered - /// using `Database.create(collation:…)` - case custom(String) - -} - -extension Collation : Expressible { - - public var expression: Expression { - return Expression(literal: description) - } - -} - -extension Collation : CustomStringConvertible { - - public var description : String { - switch self { - case .binary: - return "BINARY" - case .nocase: - return "NOCASE" - case .rtrim: - return "RTRIM" - case .custom(let collation): - return collation.quote() - } - } - -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/CoreFunctions.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Typed/CoreFunctions.swift deleted file mode 100644 index d7995b95..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/CoreFunctions.swift +++ /dev/null @@ -1,762 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - - -extension ExpressionType where UnderlyingType : Number { - - /// Builds a copy of the expression wrapped with the `abs` function. - /// - /// let x = Expression("x") - /// x.absoluteValue - /// // abs("x") - /// - /// - Returns: A copy of the expression wrapped with the `abs` function. - public var absoluteValue : Expression { - return "abs".wrap(self) - } - -} - -extension ExpressionType where UnderlyingType : _OptionalType, UnderlyingType.WrappedType : Number { - - /// Builds a copy of the expression wrapped with the `abs` function. - /// - /// let x = Expression("x") - /// x.absoluteValue - /// // abs("x") - /// - /// - Returns: A copy of the expression wrapped with the `abs` function. - public var absoluteValue : Expression { - return "abs".wrap(self) - } - -} - -extension ExpressionType where UnderlyingType == Double { - - /// Builds a copy of the expression wrapped with the `round` function. - /// - /// let salary = Expression("salary") - /// salary.round() - /// // round("salary") - /// salary.round(2) - /// // round("salary", 2) - /// - /// - Returns: A copy of the expression wrapped with the `round` function. - public func round(_ precision: Int? = nil) -> Expression { - guard let precision = precision else { - return wrap([self]) - } - return wrap([self, Int(precision)]) - } - -} - -extension ExpressionType where UnderlyingType == Double? { - - /// Builds a copy of the expression wrapped with the `round` function. - /// - /// let salary = Expression("salary") - /// salary.round() - /// // round("salary") - /// salary.round(2) - /// // round("salary", 2) - /// - /// - Returns: A copy of the expression wrapped with the `round` function. - public func round(_ precision: Int? = nil) -> Expression { - guard let precision = precision else { - return wrap(self) - } - return wrap([self, Int(precision)]) - } - -} - -extension ExpressionType where UnderlyingType : Value, UnderlyingType.Datatype == Int64 { - - /// Builds an expression representing the `random` function. - /// - /// Expression.random() - /// // random() - /// - /// - Returns: An expression calling the `random` function. - public static func random() -> Expression { - return "random".wrap([]) - } - -} - -extension ExpressionType where UnderlyingType == Data { - - /// Builds an expression representing the `randomblob` function. - /// - /// Expression.random(16) - /// // randomblob(16) - /// - /// - Parameter length: Length in bytes. - /// - /// - Returns: An expression calling the `randomblob` function. - public static func random(_ length: Int) -> Expression { - return "randomblob".wrap([]) - } - - /// Builds an expression representing the `zeroblob` function. - /// - /// Expression.allZeros(16) - /// // zeroblob(16) - /// - /// - Parameter length: Length in bytes. - /// - /// - Returns: An expression calling the `zeroblob` function. - public static func allZeros(_ length: Int) -> Expression { - return "zeroblob".wrap([]) - } - - /// Builds a copy of the expression wrapped with the `length` function. - /// - /// let data = Expression("data") - /// data.length - /// // length("data") - /// - /// - Returns: A copy of the expression wrapped with the `length` function. - public var length: Expression { - return wrap(self) - } - -} - -extension ExpressionType where UnderlyingType == Data? { - - /// Builds a copy of the expression wrapped with the `length` function. - /// - /// let data = Expression("data") - /// data.length - /// // length("data") - /// - /// - Returns: A copy of the expression wrapped with the `length` function. - public var length: Expression { - return wrap(self) - } - -} - -extension ExpressionType where UnderlyingType == String { - - /// Builds a copy of the expression wrapped with the `length` function. - /// - /// let name = Expression("name") - /// name.length - /// // length("name") - /// - /// - Returns: A copy of the expression wrapped with the `length` function. - public var length: Expression { - return wrap(self) - } - - /// Builds a copy of the expression wrapped with the `lower` function. - /// - /// let name = Expression("name") - /// name.lowercaseString - /// // lower("name") - /// - /// - Returns: A copy of the expression wrapped with the `lower` function. - public var lowercaseString: Expression { - return "lower".wrap(self) - } - - /// Builds a copy of the expression wrapped with the `upper` function. - /// - /// let name = Expression("name") - /// name.uppercaseString - /// // lower("name") - /// - /// - Returns: A copy of the expression wrapped with the `upper` function. - public var uppercaseString: Expression { - return "upper".wrap(self) - } - - /// Builds a copy of the expression appended with a `LIKE` query against the - /// given pattern. - /// - /// let email = Expression("email") - /// email.like("%@example.com") - /// // "email" LIKE '%@example.com' - /// email.like("99\\%@%", escape: "\\") - /// // "email" LIKE '99\%@%' ESCAPE '\' - /// - /// - Parameters: - /// - /// - pattern: A pattern to match. - /// - /// - escape: An (optional) character designated for escaping - /// pattern-matching characters (*i.e.*, the `%` and `_` characters). - /// - /// - Returns: A copy of the expression appended with a `LIKE` query against - /// the given pattern. - public func like(_ pattern: String, escape character: Character? = nil) -> Expression { - guard let character = character else { - return "LIKE".infix(self, pattern) - } - return Expression("(\(template) LIKE ? ESCAPE ?)", bindings + [pattern, String(character)]) - } - - /// Builds a copy of the expression appended with a `LIKE` query against the - /// given pattern. - /// - /// let email = Expression("email") - /// let pattern = Expression("pattern") - /// email.like(pattern) - /// // "email" LIKE "pattern" - /// - /// - Parameters: - /// - /// - pattern: A pattern to match. - /// - /// - escape: An (optional) character designated for escaping - /// pattern-matching characters (*i.e.*, the `%` and `_` characters). - /// - /// - Returns: A copy of the expression appended with a `LIKE` query against - /// the given pattern. - public func like(_ pattern: Expression, escape character: Character? = nil) -> Expression { - guard let character = character else { - return "LIKE".infix(self, pattern) - } - let like: Expression = "LIKE".infix(self, pattern, wrap: false) - return Expression("(\(like.template) ESCAPE ?)", like.bindings + [String(character)]) - } - - /// Builds a copy of the expression appended with a `GLOB` query against the - /// given pattern. - /// - /// let path = Expression("path") - /// path.glob("*.png") - /// // "path" GLOB '*.png' - /// - /// - Parameter pattern: A pattern to match. - /// - /// - Returns: A copy of the expression appended with a `GLOB` query against - /// the given pattern. - public func glob(_ pattern: String) -> Expression { - return "GLOB".infix(self, pattern) - } - - /// Builds a copy of the expression appended with a `MATCH` query against - /// the given pattern. - /// - /// let title = Expression("title") - /// title.match("swift AND programming") - /// // "title" MATCH 'swift AND programming' - /// - /// - Parameter pattern: A pattern to match. - /// - /// - Returns: A copy of the expression appended with a `MATCH` query - /// against the given pattern. - public func match(_ pattern: String) -> Expression { - return "MATCH".infix(self, pattern) - } - - /// Builds a copy of the expression appended with a `REGEXP` query against - /// the given pattern. - /// - /// - Parameter pattern: A pattern to match. - /// - /// - Returns: A copy of the expression appended with a `REGEXP` query - /// against the given pattern. - public func regexp(_ pattern: String) -> Expression { - return "REGEXP".infix(self, pattern) - } - - /// Builds a copy of the expression appended with a `COLLATE` clause with - /// the given sequence. - /// - /// let name = Expression("name") - /// name.collate(.Nocase) - /// // "name" COLLATE NOCASE - /// - /// - Parameter collation: A collating sequence. - /// - /// - Returns: A copy of the expression appended with a `COLLATE` clause - /// with the given sequence. - public func collate(_ collation: Collation) -> Expression { - return "COLLATE".infix(self, collation) - } - - /// Builds a copy of the expression wrapped with the `ltrim` function. - /// - /// let name = Expression("name") - /// name.ltrim() - /// // ltrim("name") - /// name.ltrim([" ", "\t"]) - /// // ltrim("name", ' \t') - /// - /// - Parameter characters: A set of characters to trim. - /// - /// - Returns: A copy of the expression wrapped with the `ltrim` function. - public func ltrim(_ characters: Set? = nil) -> Expression { - guard let characters = characters else { - return wrap(self) - } - return wrap([self, String(characters)]) - } - - /// Builds a copy of the expression wrapped with the `rtrim` function. - /// - /// let name = Expression("name") - /// name.rtrim() - /// // rtrim("name") - /// name.rtrim([" ", "\t"]) - /// // rtrim("name", ' \t') - /// - /// - Parameter characters: A set of characters to trim. - /// - /// - Returns: A copy of the expression wrapped with the `rtrim` function. - public func rtrim(_ characters: Set? = nil) -> Expression { - guard let characters = characters else { - return wrap(self) - } - return wrap([self, String(characters)]) - } - - /// Builds a copy of the expression wrapped with the `trim` function. - /// - /// let name = Expression("name") - /// name.trim() - /// // trim("name") - /// name.trim([" ", "\t"]) - /// // trim("name", ' \t') - /// - /// - Parameter characters: A set of characters to trim. - /// - /// - Returns: A copy of the expression wrapped with the `trim` function. - public func trim(_ characters: Set? = nil) -> Expression { - guard let characters = characters else { - return wrap([self]) - } - return wrap([self, String(characters)]) - } - - /// Builds a copy of the expression wrapped with the `replace` function. - /// - /// let email = Expression("email") - /// email.replace("@mac.com", with: "@icloud.com") - /// // replace("email", '@mac.com', '@icloud.com') - /// - /// - Parameters: - /// - /// - pattern: A pattern to match. - /// - /// - replacement: The replacement string. - /// - /// - Returns: A copy of the expression wrapped with the `replace` function. - public func replace(_ pattern: String, with replacement: String) -> Expression { - return "replace".wrap([self, pattern, replacement]) - } - - public func substring(_ location: Int, length: Int? = nil) -> Expression { - guard let length = length else { - return "substr".wrap([self, location]) - } - return "substr".wrap([self, location, length]) - } - - public subscript(range: Range) -> Expression { - return substring(range.lowerBound, length: range.upperBound - range.lowerBound) - } - -} - -extension ExpressionType where UnderlyingType == String? { - - /// Builds a copy of the expression wrapped with the `length` function. - /// - /// let name = Expression("name") - /// name.length - /// // length("name") - /// - /// - Returns: A copy of the expression wrapped with the `length` function. - public var length: Expression { - return wrap(self) - } - - /// Builds a copy of the expression wrapped with the `lower` function. - /// - /// let name = Expression("name") - /// name.lowercaseString - /// // lower("name") - /// - /// - Returns: A copy of the expression wrapped with the `lower` function. - public var lowercaseString: Expression { - return "lower".wrap(self) - } - - /// Builds a copy of the expression wrapped with the `upper` function. - /// - /// let name = Expression("name") - /// name.uppercaseString - /// // lower("name") - /// - /// - Returns: A copy of the expression wrapped with the `upper` function. - public var uppercaseString: Expression { - return "upper".wrap(self) - } - - /// Builds a copy of the expression appended with a `LIKE` query against the - /// given pattern. - /// - /// let email = Expression("email") - /// email.like("%@example.com") - /// // "email" LIKE '%@example.com' - /// email.like("99\\%@%", escape: "\\") - /// // "email" LIKE '99\%@%' ESCAPE '\' - /// - /// - Parameters: - /// - /// - pattern: A pattern to match. - /// - /// - escape: An (optional) character designated for escaping - /// pattern-matching characters (*i.e.*, the `%` and `_` characters). - /// - /// - Returns: A copy of the expression appended with a `LIKE` query against - /// the given pattern. - public func like(_ pattern: String, escape character: Character? = nil) -> Expression { - guard let character = character else { - return "LIKE".infix(self, pattern) - } - return Expression("(\(template) LIKE ? ESCAPE ?)", bindings + [pattern, String(character)]) - } - - /// Builds a copy of the expression appended with a `LIKE` query against the - /// given pattern. - /// - /// let email = Expression("email") - /// let pattern = Expression("pattern") - /// email.like(pattern) - /// // "email" LIKE "pattern" - /// - /// - Parameters: - /// - /// - pattern: A pattern to match. - /// - /// - escape: An (optional) character designated for escaping - /// pattern-matching characters (*i.e.*, the `%` and `_` characters). - /// - /// - Returns: A copy of the expression appended with a `LIKE` query against - /// the given pattern. - public func like(_ pattern: Expression, escape character: Character? = nil) -> Expression { - guard let character = character else { - return "LIKE".infix(self, pattern) - } - let like: Expression = "LIKE".infix(self, pattern, wrap: false) - return Expression("(\(like.template) ESCAPE ?)", like.bindings + [String(character)]) - } - - /// Builds a copy of the expression appended with a `GLOB` query against the - /// given pattern. - /// - /// let path = Expression("path") - /// path.glob("*.png") - /// // "path" GLOB '*.png' - /// - /// - Parameter pattern: A pattern to match. - /// - /// - Returns: A copy of the expression appended with a `GLOB` query against - /// the given pattern. - public func glob(_ pattern: String) -> Expression { - return "GLOB".infix(self, pattern) - } - - /// Builds a copy of the expression appended with a `MATCH` query against - /// the given pattern. - /// - /// let title = Expression("title") - /// title.match("swift AND programming") - /// // "title" MATCH 'swift AND programming' - /// - /// - Parameter pattern: A pattern to match. - /// - /// - Returns: A copy of the expression appended with a `MATCH` query - /// against the given pattern. - public func match(_ pattern: String) -> Expression { - return "MATCH".infix(self, pattern) - } - - /// Builds a copy of the expression appended with a `REGEXP` query against - /// the given pattern. - /// - /// - Parameter pattern: A pattern to match. - /// - /// - Returns: A copy of the expression appended with a `REGEXP` query - /// against the given pattern. - public func regexp(_ pattern: String) -> Expression { - return "REGEXP".infix(self, pattern) - } - - /// Builds a copy of the expression appended with a `COLLATE` clause with - /// the given sequence. - /// - /// let name = Expression("name") - /// name.collate(.Nocase) - /// // "name" COLLATE NOCASE - /// - /// - Parameter collation: A collating sequence. - /// - /// - Returns: A copy of the expression appended with a `COLLATE` clause - /// with the given sequence. - public func collate(_ collation: Collation) -> Expression { - return "COLLATE".infix(self, collation) - } - - /// Builds a copy of the expression wrapped with the `ltrim` function. - /// - /// let name = Expression("name") - /// name.ltrim() - /// // ltrim("name") - /// name.ltrim([" ", "\t"]) - /// // ltrim("name", ' \t') - /// - /// - Parameter characters: A set of characters to trim. - /// - /// - Returns: A copy of the expression wrapped with the `ltrim` function. - public func ltrim(_ characters: Set? = nil) -> Expression { - guard let characters = characters else { - return wrap(self) - } - return wrap([self, String(characters)]) - } - - /// Builds a copy of the expression wrapped with the `rtrim` function. - /// - /// let name = Expression("name") - /// name.rtrim() - /// // rtrim("name") - /// name.rtrim([" ", "\t"]) - /// // rtrim("name", ' \t') - /// - /// - Parameter characters: A set of characters to trim. - /// - /// - Returns: A copy of the expression wrapped with the `rtrim` function. - public func rtrim(_ characters: Set? = nil) -> Expression { - guard let characters = characters else { - return wrap(self) - } - return wrap([self, String(characters)]) - } - - /// Builds a copy of the expression wrapped with the `trim` function. - /// - /// let name = Expression("name") - /// name.trim() - /// // trim("name") - /// name.trim([" ", "\t"]) - /// // trim("name", ' \t') - /// - /// - Parameter characters: A set of characters to trim. - /// - /// - Returns: A copy of the expression wrapped with the `trim` function. - public func trim(_ characters: Set? = nil) -> Expression { - guard let characters = characters else { - return wrap(self) - } - return wrap([self, String(characters)]) - } - - /// Builds a copy of the expression wrapped with the `replace` function. - /// - /// let email = Expression("email") - /// email.replace("@mac.com", with: "@icloud.com") - /// // replace("email", '@mac.com', '@icloud.com') - /// - /// - Parameters: - /// - /// - pattern: A pattern to match. - /// - /// - replacement: The replacement string. - /// - /// - Returns: A copy of the expression wrapped with the `replace` function. - public func replace(_ pattern: String, with replacement: String) -> Expression { - return "replace".wrap([self, pattern, replacement]) - } - - /// Builds a copy of the expression wrapped with the `substr` function. - /// - /// let title = Expression("title") - /// title.substr(-100) - /// // substr("title", -100) - /// title.substr(0, length: 100) - /// // substr("title", 0, 100) - /// - /// - Parameters: - /// - /// - location: The substring’s start index. - /// - /// - length: An optional substring length. - /// - /// - Returns: A copy of the expression wrapped with the `substr` function. - public func substring(_ location: Int, length: Int? = nil) -> Expression { - guard let length = length else { - return "substr".wrap([self, location]) - } - return "substr".wrap([self, location, length]) - } - - /// Builds a copy of the expression wrapped with the `substr` function. - /// - /// let title = Expression("title") - /// title[0..<100] - /// // substr("title", 0, 100) - /// - /// - Parameter range: The character index range of the substring. - /// - /// - Returns: A copy of the expression wrapped with the `substr` function. - public subscript(range: Range) -> Expression { - return substring(range.lowerBound, length: range.upperBound - range.lowerBound) - } - -} - -extension Collection where Iterator.Element : Value { - - /// Builds a copy of the expression prepended with an `IN` check against the - /// collection. - /// - /// let name = Expression("name") - /// ["alice", "betty"].contains(name) - /// // "name" IN ('alice', 'betty') - /// - /// - Parameter pattern: A pattern to match. - /// - /// - Returns: A copy of the expression prepended with an `IN` check against - /// the collection. - public func contains(_ expression: Expression) -> Expression { - let templates = [String](repeating: "?", count: count).joined(separator: ", ") - return "IN".infix(expression, Expression("(\(templates))", map { $0.datatypeValue })) - } - - /// Builds a copy of the expression prepended with an `IN` check against the - /// collection. - /// - /// let name = Expression("name") - /// ["alice", "betty"].contains(name) - /// // "name" IN ('alice', 'betty') - /// - /// - Parameter pattern: A pattern to match. - /// - /// - Returns: A copy of the expression prepended with an `IN` check against - /// the collection. - public func contains(_ expression: Expression) -> Expression { - let templates = [String](repeating: "?", count: count).joined(separator: ", ") - return "IN".infix(expression, Expression("(\(templates))", map { $0.datatypeValue })) - } - -} - -extension String { - - /// Builds a copy of the expression appended with a `LIKE` query against the - /// given pattern. - /// - /// let email = "some@thing.com" - /// let pattern = Expression("pattern") - /// email.like(pattern) - /// // 'some@thing.com' LIKE "pattern" - /// - /// - Parameters: - /// - /// - pattern: A pattern to match. - /// - /// - escape: An (optional) character designated for escaping - /// pattern-matching characters (*i.e.*, the `%` and `_` characters). - /// - /// - Returns: A copy of the expression appended with a `LIKE` query against - /// the given pattern. - public func like(_ pattern: Expression, escape character: Character? = nil) -> Expression { - guard let character = character else { - return "LIKE".infix(self, pattern) - } - let like: Expression = "LIKE".infix(self, pattern, wrap: false) - return Expression("(\(like.template) ESCAPE ?)", like.bindings + [String(character)]) - } - -} - -/// Builds a copy of the given expressions wrapped with the `ifnull` function. -/// -/// let name = Expression("name") -/// name ?? "An Anonymous Coward" -/// // ifnull("name", 'An Anonymous Coward') -/// -/// - Parameters: -/// -/// - optional: An optional expression. -/// -/// - defaultValue: A fallback value for when the optional expression is -/// `nil`. -/// -/// - Returns: A copy of the given expressions wrapped with the `ifnull` -/// function. -public func ??(optional: Expression, defaultValue: V) -> Expression { - return "ifnull".wrap([optional, defaultValue]) -} - -/// Builds a copy of the given expressions wrapped with the `ifnull` function. -/// -/// let nick = Expression("nick") -/// let name = Expression("name") -/// nick ?? name -/// // ifnull("nick", "name") -/// -/// - Parameters: -/// -/// - optional: An optional expression. -/// -/// - defaultValue: A fallback expression for when the optional expression is -/// `nil`. -/// -/// - Returns: A copy of the given expressions wrapped with the `ifnull` -/// function. -public func ??(optional: Expression, defaultValue: Expression) -> Expression { - return "ifnull".wrap([optional, defaultValue]) -} - -/// Builds a copy of the given expressions wrapped with the `ifnull` function. -/// -/// let nick = Expression("nick") -/// let name = Expression("name") -/// nick ?? name -/// // ifnull("nick", "name") -/// -/// - Parameters: -/// -/// - optional: An optional expression. -/// -/// - defaultValue: A fallback expression for when the optional expression is -/// `nil`. -/// -/// - Returns: A copy of the given expressions wrapped with the `ifnull` -/// function. -public func ??(optional: Expression, defaultValue: Expression) -> Expression { - return "ifnull".wrap([optional, defaultValue]) -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/CustomFunctions.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Typed/CustomFunctions.swift deleted file mode 100644 index 2389901f..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/CustomFunctions.swift +++ /dev/null @@ -1,136 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -public extension Connection { - - /// Creates or redefines a custom SQL function. - /// - /// - Parameters: - /// - /// - function: The name of the function to create or redefine. - /// - /// - deterministic: Whether or not the function is deterministic (_i.e._ - /// the function always returns the same result for a given input). - /// - /// Default: `false` - /// - /// - block: A block of code to run when the function is called. - /// The assigned types must be explicit. - /// - /// - Returns: A closure returning an SQL expression to call the function. - public func createFunction(_ function: String, deterministic: Bool = false, _ block: @escaping () -> Z) throws -> (() -> Expression) { - let fn = try createFunction(function, 0, deterministic) { _ in block() } - return { fn([]) } - } - - public func createFunction(_ function: String, deterministic: Bool = false, _ block: @escaping () -> Z?) throws -> (() -> Expression) { - let fn = try createFunction(function, 0, deterministic) { _ in block() } - return { fn([]) } - } - - // MARK: - - - public func createFunction(_ function: String, deterministic: Bool = false, _ block: @escaping (A) -> Z) throws -> ((Expression) -> Expression) { - let fn = try createFunction(function, 1, deterministic) { args in block(value(args[0])) } - return { arg in fn([arg]) } - } - - public func createFunction(_ function: String, deterministic: Bool = false, _ block: @escaping (A?) -> Z) throws -> ((Expression) -> Expression) { - let fn = try createFunction(function, 1, deterministic) { args in block(args[0].map(value)) } - return { arg in fn([arg]) } - } - - public func createFunction(_ function: String, deterministic: Bool = false, _ block: @escaping (A) -> Z?) throws -> ((Expression) -> Expression) { - let fn = try createFunction(function, 1, deterministic) { args in block(value(args[0])) } - return { arg in fn([arg]) } - } - - public func createFunction(_ function: String, deterministic: Bool = false, _ block: @escaping (A?) -> Z?) throws -> ((Expression) -> Expression) { - let fn = try createFunction(function, 1, deterministic) { args in block(args[0].map(value)) } - return { arg in fn([arg]) } - } - - // MARK: - - - public func createFunction(_ function: String, deterministic: Bool = false, _ block: @escaping (A, B) -> Z) throws -> (Expression, Expression) -> Expression { - let fn = try createFunction(function, 2, deterministic) { args in block(value(args[0]), value(args[1])) } - return { a, b in fn([a, b]) } - } - - public func createFunction(_ function: String, deterministic: Bool = false, _ block: @escaping (A?, B) -> Z) throws -> (Expression, Expression) -> Expression { - let fn = try createFunction(function, 2, deterministic) { args in block(args[0].map(value), value(args[1])) } - return { a, b in fn([a, b]) } - } - - public func createFunction(_ function: String, deterministic: Bool = false, _ block: @escaping (A, B?) -> Z) throws -> (Expression, Expression) -> Expression { - let fn = try createFunction(function, 2, deterministic) { args in block(value(args[0]), args[1].map(value)) } - return { a, b in fn([a, b]) } - } - - public func createFunction(_ function: String, deterministic: Bool = false, _ block: @escaping (A, B) -> Z?) throws -> (Expression, Expression) -> Expression { - let fn = try createFunction(function, 2, deterministic) { args in block(value(args[0]), value(args[1])) } - return { a, b in fn([a, b]) } - } - - public func createFunction(_ function: String, deterministic: Bool = false, _ block: @escaping (A?, B?) -> Z) throws -> (Expression, Expression) -> Expression { - let fn = try createFunction(function, 2, deterministic) { args in block(args[0].map(value), args[1].map(value)) } - return { a, b in fn([a, b]) } - } - - public func createFunction(_ function: String, deterministic: Bool = false, _ block: @escaping (A?, B) -> Z?) throws -> (Expression, Expression) -> Expression { - let fn = try createFunction(function, 2, deterministic) { args in block(args[0].map(value), value(args[1])) } - return { a, b in fn([a, b]) } - } - - public func createFunction(_ function: String, deterministic: Bool = false, _ block: @escaping (A, B?) -> Z?) throws -> (Expression, Expression) -> Expression { - let fn = try createFunction(function, 2, deterministic) { args in block(value(args[0]), args[1].map(value)) } - return { a, b in fn([a, b]) } - } - - public func createFunction(_ function: String, deterministic: Bool = false, _ block: @escaping (A?, B?) -> Z?) throws -> (Expression, Expression) -> Expression { - let fn = try createFunction(function, 2, deterministic) { args in block(args[0].map(value), args[1].map(value)) } - return { a, b in fn([a, b]) } - } - - // MARK: - - - fileprivate func createFunction(_ function: String, _ argumentCount: UInt, _ deterministic: Bool, _ block: @escaping ([Binding?]) -> Z) throws -> (([Expressible]) -> Expression) { - createFunction(function, argumentCount: argumentCount, deterministic: deterministic) { arguments in - block(arguments).datatypeValue - } - return { arguments in - function.quote().wrap(", ".join(arguments)) - } - } - - fileprivate func createFunction(_ function: String, _ argumentCount: UInt, _ deterministic: Bool, _ block: @escaping ([Binding?]) -> Z?) throws -> (([Expressible]) -> Expression) { - createFunction(function, argumentCount: argumentCount, deterministic: deterministic) { arguments in - block(arguments)?.datatypeValue - } - return { arguments in - function.quote().wrap(", ".join(arguments)) - } - } - -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/DateAndTimeFunctions.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Typed/DateAndTimeFunctions.swift deleted file mode 100644 index 0b9a497f..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/DateAndTimeFunctions.swift +++ /dev/null @@ -1,106 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -/// All five date and time functions take a time string as an argument. -/// The time string is followed by zero or more modifiers. -/// The strftime() function also takes a format string as its first argument. -/// -/// https://www.sqlite.org/lang_datefunc.html -public class DateFunctions { - /// The date() function returns the date in this format: YYYY-MM-DD. - public static func date(_ timestring: String, _ modifiers: String...) -> Expression { - return timefunction("date", timestring: timestring, modifiers: modifiers) - } - - /// The time() function returns the time as HH:MM:SS. - public static func time(_ timestring: String, _ modifiers: String...) -> Expression { - return timefunction("time", timestring: timestring, modifiers: modifiers) - } - - /// The datetime() function returns "YYYY-MM-DD HH:MM:SS". - public static func datetime(_ timestring: String, _ modifiers: String...) -> Expression { - return timefunction("datetime", timestring: timestring, modifiers: modifiers) - } - - /// The julianday() function returns the Julian day - - /// the number of days since noon in Greenwich on November 24, 4714 B.C. - public static func julianday(_ timestring: String, _ modifiers: String...) -> Expression { - return timefunction("julianday", timestring: timestring, modifiers: modifiers) - } - - /// The strftime() routine returns the date formatted according to the format string specified as the first argument. - public static func strftime(_ format: String, _ timestring: String, _ modifiers: String...) -> Expression { - if !modifiers.isEmpty { - let templates = [String](repeating: "?", count: modifiers.count).joined(separator: ", ") - return Expression("strftime(?, ?, \(templates))", [format, timestring] + modifiers) - } - return Expression("strftime(?, ?)", [format, timestring]) - } - - private static func timefunction(_ name: String, timestring: String, modifiers: [String]) -> Expression { - if !modifiers.isEmpty { - let templates = [String](repeating: "?", count: modifiers.count).joined(separator: ", ") - return Expression("\(name)(?, \(templates))", [timestring] + modifiers) - } - return Expression("\(name)(?)", [timestring]) - } -} - -extension Date { - public var date: Expression { - return DateFunctions.date(dateFormatter.string(from: self)) - } - - public var time: Expression { - return DateFunctions.time(dateFormatter.string(from: self)) - } - - public var datetime: Expression { - return DateFunctions.datetime(dateFormatter.string(from: self)) - } - - public var julianday: Expression { - return DateFunctions.julianday(dateFormatter.string(from: self)) - } -} - -extension Expression where UnderlyingType == Date { - public var date: Expression { - return Expression("date(\(template))", bindings) - } - - public var time: Expression { - return Expression("time(\(template))", bindings) - } - - public var datetime: Expression { - return Expression("datetime(\(template))", bindings) - } - - public var julianday: Expression { - return Expression("julianday(\(template))", bindings) - } -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Expression.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Expression.swift deleted file mode 100644 index d89ee6cc..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Expression.swift +++ /dev/null @@ -1,147 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -public protocol ExpressionType : Expressible { // extensions cannot have inheritance clauses - - associatedtype UnderlyingType = Void - - var template: String { get } - var bindings: [Binding?] { get } - - init(_ template: String, _ bindings: [Binding?]) - -} - -extension ExpressionType { - - public init(literal: String) { - self.init(literal, []) - } - - public init(_ identifier: String) { - self.init(literal: identifier.quote()) - } - - public init(_ expression: U) { - self.init(expression.template, expression.bindings) - } - -} - -/// An `Expression` represents a raw SQL fragment and any associated bindings. -public struct Expression : ExpressionType { - - public typealias UnderlyingType = Datatype - - public var template: String - public var bindings: [Binding?] - - public init(_ template: String, _ bindings: [Binding?]) { - self.template = template - self.bindings = bindings - } - -} - -public protocol Expressible { - - var expression: Expression { get } - -} - -extension Expressible { - - // naïve compiler for statements that can’t be bound, e.g., CREATE TABLE - // FIXME: make internal (0.12.0) - public func asSQL() -> String { - let expressed = expression - var idx = 0 - return expressed.template.reduce("") { template, character in - let transcoded: String - - if character == "?" { - transcoded = transcode(expressed.bindings[idx]) - idx += 1 - } else { - transcoded = String(character) - } - return template + transcoded - } - } - -} - -extension ExpressionType { - - public var expression: Expression { - return Expression(template, bindings) - } - - public var asc: Expressible { - return " ".join([self, Expression(literal: "ASC")]) - } - - public var desc: Expressible { - return " ".join([self, Expression(literal: "DESC")]) - } - -} - -extension ExpressionType where UnderlyingType : Value { - - public init(value: UnderlyingType) { - self.init("?", [value.datatypeValue]) - } - -} - -extension ExpressionType where UnderlyingType : _OptionalType, UnderlyingType.WrappedType : Value { - - public static var null: Self { - return self.init(value: nil) - } - - public init(value: UnderlyingType.WrappedType?) { - self.init("?", [value?.datatypeValue]) - } - -} - -extension Value { - - public var expression: Expression { - return Expression(value: self).expression - } - -} - -public let rowid = Expression("ROWID") - -public func cast(_ expression: Expression) -> Expression { - return Expression("CAST (\(expression.template) AS \(U.declaredDatatype))", expression.bindings) -} - -public func cast(_ expression: Expression) -> Expression { - return Expression("CAST (\(expression.template) AS \(U.declaredDatatype))", expression.bindings) -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Operators.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Operators.swift deleted file mode 100644 index d97e52b9..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Operators.swift +++ /dev/null @@ -1,574 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -// TODO: use `@warn_unused_result` by the time operator functions support it - -public func +(lhs: Expression, rhs: Expression) -> Expression { - return "||".infix(lhs, rhs) -} - -public func +(lhs: Expression, rhs: Expression) -> Expression { - return "||".infix(lhs, rhs) -} -public func +(lhs: Expression, rhs: Expression) -> Expression { - return "||".infix(lhs, rhs) -} -public func +(lhs: Expression, rhs: Expression) -> Expression { - return "||".infix(lhs, rhs) -} -public func +(lhs: Expression, rhs: String) -> Expression { - return "||".infix(lhs, rhs) -} -public func +(lhs: Expression, rhs: String) -> Expression { - return "||".infix(lhs, rhs) -} -public func +(lhs: String, rhs: Expression) -> Expression { - return "||".infix(lhs, rhs) -} -public func +(lhs: String, rhs: Expression) -> Expression { - return "||".infix(lhs, rhs) -} - -// MARK: - - -public func +(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func +(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func +(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func +(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func +(lhs: Expression, rhs: V) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func +(lhs: Expression, rhs: V) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func +(lhs: V, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func +(lhs: V, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} - -public func -(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func -(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func -(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func -(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func -(lhs: Expression, rhs: V) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func -(lhs: Expression, rhs: V) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func -(lhs: V, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func -(lhs: V, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} - -public func *(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func *(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func *(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func *(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func *(lhs: Expression, rhs: V) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func *(lhs: Expression, rhs: V) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func *(lhs: V, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func *(lhs: V, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} - -public func /(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func /(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func /(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func /(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func /(lhs: Expression, rhs: V) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func /(lhs: Expression, rhs: V) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func /(lhs: V, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} -public func /(lhs: V, rhs: Expression) -> Expression where V.Datatype : Number { - return infix(lhs, rhs) -} - -public prefix func -(rhs: Expression) -> Expression where V.Datatype : Number { - return wrap(rhs) -} -public prefix func -(rhs: Expression) -> Expression where V.Datatype : Number { - return wrap(rhs) -} - -// MARK: - - -public func %(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func %(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func %(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func %(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func %(lhs: Expression, rhs: V) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func %(lhs: Expression, rhs: V) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func %(lhs: V, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func %(lhs: V, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} - -public func <<(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func <<(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func <<(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func <<(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func <<(lhs: Expression, rhs: V) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func <<(lhs: Expression, rhs: V) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func <<(lhs: V, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func <<(lhs: V, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} - -public func >>(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func >>(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func >>(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func >>(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func >>(lhs: Expression, rhs: V) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func >>(lhs: Expression, rhs: V) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func >>(lhs: V, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func >>(lhs: V, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} - -public func &(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func &(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func &(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func &(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func &(lhs: Expression, rhs: V) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func &(lhs: Expression, rhs: V) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func &(lhs: V, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func &(lhs: V, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} - -public func |(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func |(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func |(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func |(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func |(lhs: Expression, rhs: V) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func |(lhs: Expression, rhs: V) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func |(lhs: V, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} -public func |(lhs: V, rhs: Expression) -> Expression where V.Datatype == Int64 { - return infix(lhs, rhs) -} - -public func ^(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return (~(lhs & rhs)) & (lhs | rhs) -} -public func ^(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return (~(lhs & rhs)) & (lhs | rhs) -} -public func ^(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return (~(lhs & rhs)) & (lhs | rhs) -} -public func ^(lhs: Expression, rhs: Expression) -> Expression where V.Datatype == Int64 { - return (~(lhs & rhs)) & (lhs | rhs) -} -public func ^(lhs: Expression, rhs: V) -> Expression where V.Datatype == Int64 { - return (~(lhs & rhs)) & (lhs | rhs) -} -public func ^(lhs: Expression, rhs: V) -> Expression where V.Datatype == Int64 { - return (~(lhs & rhs)) & (lhs | rhs) -} -public func ^(lhs: V, rhs: Expression) -> Expression where V.Datatype == Int64 { - return (~(lhs & rhs)) & (lhs | rhs) -} -public func ^(lhs: V, rhs: Expression) -> Expression where V.Datatype == Int64 { - return (~(lhs & rhs)) & (lhs | rhs) -} - -public prefix func ~(rhs: Expression) -> Expression where V.Datatype == Int64 { - return wrap(rhs) -} -public prefix func ~(rhs: Expression) -> Expression where V.Datatype == Int64 { - return wrap(rhs) -} - -// MARK: - - -public func ==(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Equatable { - return "=".infix(lhs, rhs) -} -public func ==(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Equatable { - return "=".infix(lhs, rhs) -} -public func ==(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Equatable { - return "=".infix(lhs, rhs) -} -public func ==(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Equatable { - return "=".infix(lhs, rhs) -} -public func ==(lhs: Expression, rhs: V) -> Expression where V.Datatype : Equatable { - return "=".infix(lhs, rhs) -} -public func ==(lhs: Expression, rhs: V?) -> Expression where V.Datatype : Equatable { - guard let rhs = rhs else { return "IS".infix(lhs, Expression(value: nil)) } - return "=".infix(lhs, rhs) -} -public func ==(lhs: V, rhs: Expression) -> Expression where V.Datatype : Equatable { - return "=".infix(lhs, rhs) -} -public func ==(lhs: V?, rhs: Expression) -> Expression where V.Datatype : Equatable { - guard let lhs = lhs else { return "IS".infix(Expression(value: nil), rhs) } - return "=".infix(lhs, rhs) -} - -public func !=(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Equatable { - return infix(lhs, rhs) -} -public func !=(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Equatable { - return infix(lhs, rhs) -} -public func !=(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Equatable { - return infix(lhs, rhs) -} -public func !=(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Equatable { - return infix(lhs, rhs) -} -public func !=(lhs: Expression, rhs: V) -> Expression where V.Datatype : Equatable { - return infix(lhs, rhs) -} -public func !=(lhs: Expression, rhs: V?) -> Expression where V.Datatype : Equatable { - guard let rhs = rhs else { return "IS NOT".infix(lhs, Expression(value: nil)) } - return infix(lhs, rhs) -} -public func !=(lhs: V, rhs: Expression) -> Expression where V.Datatype : Equatable { - return infix(lhs, rhs) -} -public func !=(lhs: V?, rhs: Expression) -> Expression where V.Datatype : Equatable { - guard let lhs = lhs else { return "IS NOT".infix(Expression(value: nil), rhs) } - return infix(lhs, rhs) -} - -public func >(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func >(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func >(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func >(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func >(lhs: Expression, rhs: V) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func >(lhs: Expression, rhs: V) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func >(lhs: V, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func >(lhs: V, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} - -public func >=(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func >=(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func >=(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func >=(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func >=(lhs: Expression, rhs: V) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func >=(lhs: Expression, rhs: V) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func >=(lhs: V, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func >=(lhs: V, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} - -public func <(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func <(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func <(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func <(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func <(lhs: Expression, rhs: V) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func <(lhs: Expression, rhs: V) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func <(lhs: V, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func <(lhs: V, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} - -public func <=(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func <=(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func <=(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func <=(lhs: Expression, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func <=(lhs: Expression, rhs: V) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func <=(lhs: Expression, rhs: V) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func <=(lhs: V, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} -public func <=(lhs: V, rhs: Expression) -> Expression where V.Datatype : Comparable { - return infix(lhs, rhs) -} - -public func ~=(lhs: ClosedRange, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { - return Expression("\(rhs.template) BETWEEN ? AND ?", rhs.bindings + [lhs.lowerBound.datatypeValue, lhs.upperBound.datatypeValue]) -} - -public func ~=(lhs: ClosedRange, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { - return Expression("\(rhs.template) BETWEEN ? AND ?", rhs.bindings + [lhs.lowerBound.datatypeValue, lhs.upperBound.datatypeValue]) -} - -public func ~=(lhs: Range, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { - return Expression("\(rhs.template) >= ? AND \(rhs.template) < ?", rhs.bindings + [lhs.lowerBound.datatypeValue] + rhs.bindings + [lhs.upperBound.datatypeValue]) -} - -public func ~=(lhs: Range, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { - return Expression("\(rhs.template) >= ? AND \(rhs.template) < ?", rhs.bindings + [lhs.lowerBound.datatypeValue] + rhs.bindings + [lhs.upperBound.datatypeValue]) -} - -public func ~=(lhs: PartialRangeThrough, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { - return Expression("\(rhs.template) <= ?", rhs.bindings + [lhs.upperBound.datatypeValue]) -} - -public func ~=(lhs: PartialRangeThrough, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { - return Expression("\(rhs.template) <= ?", rhs.bindings + [lhs.upperBound.datatypeValue]) -} - -public func ~=(lhs: PartialRangeUpTo, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { - return Expression("\(rhs.template) < ?", rhs.bindings + [lhs.upperBound.datatypeValue]) -} - -public func ~=(lhs: PartialRangeUpTo, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { - return Expression("\(rhs.template) < ?", rhs.bindings + [lhs.upperBound.datatypeValue]) -} - -public func ~=(lhs: PartialRangeFrom, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { - return Expression("\(rhs.template) >= ?", rhs.bindings + [lhs.lowerBound.datatypeValue]) -} - -public func ~=(lhs: PartialRangeFrom, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { - return Expression("\(rhs.template) >= ?", rhs.bindings + [lhs.lowerBound.datatypeValue]) -} - -// MARK: - - -public func &&(lhs: Expression, rhs: Expression) -> Expression { - return "AND".infix(lhs, rhs) -} -public func &&(lhs: Expression, rhs: Expression) -> Expression { - return "AND".infix(lhs, rhs) -} -public func &&(lhs: Expression, rhs: Expression) -> Expression { - return "AND".infix(lhs, rhs) -} -public func &&(lhs: Expression, rhs: Expression) -> Expression { - return "AND".infix(lhs, rhs) -} -public func &&(lhs: Expression, rhs: Bool) -> Expression { - return "AND".infix(lhs, rhs) -} -public func &&(lhs: Expression, rhs: Bool) -> Expression { - return "AND".infix(lhs, rhs) -} -public func &&(lhs: Bool, rhs: Expression) -> Expression { - return "AND".infix(lhs, rhs) -} -public func &&(lhs: Bool, rhs: Expression) -> Expression { - return "AND".infix(lhs, rhs) -} - -public func ||(lhs: Expression, rhs: Expression) -> Expression { - return "OR".infix(lhs, rhs) -} -public func ||(lhs: Expression, rhs: Expression) -> Expression { - return "OR".infix(lhs, rhs) -} -public func ||(lhs: Expression, rhs: Expression) -> Expression { - return "OR".infix(lhs, rhs) -} -public func ||(lhs: Expression, rhs: Expression) -> Expression { - return "OR".infix(lhs, rhs) -} -public func ||(lhs: Expression, rhs: Bool) -> Expression { - return "OR".infix(lhs, rhs) -} -public func ||(lhs: Expression, rhs: Bool) -> Expression { - return "OR".infix(lhs, rhs) -} -public func ||(lhs: Bool, rhs: Expression) -> Expression { - return "OR".infix(lhs, rhs) -} -public func ||(lhs: Bool, rhs: Expression) -> Expression { - return "OR".infix(lhs, rhs) -} - -public prefix func !(rhs: Expression) -> Expression { - return "NOT ".wrap(rhs) -} -public prefix func !(rhs: Expression) -> Expression { - return "NOT ".wrap(rhs) -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Query.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Query.swift deleted file mode 100644 index f6ef6df8..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Query.swift +++ /dev/null @@ -1,1175 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -public protocol QueryType : Expressible { - - var clauses: QueryClauses { get set } - - init(_ name: String, database: String?) - -} - -public protocol SchemaType : QueryType { - - static var identifier: String { get } - -} - -extension SchemaType { - - /// Builds a copy of the query with the `SELECT` clause applied. - /// - /// let users = Table("users") - /// let id = Expression("id") - /// let email = Expression("email") - /// - /// users.select(id, email) - /// // SELECT "id", "email" FROM "users" - /// - /// - Parameter all: A list of expressions to select. - /// - /// - Returns: A query with the given `SELECT` clause applied. - public func select(_ column1: Expressible, _ more: Expressible...) -> Self { - return select(false, [column1] + more) - } - - /// Builds a copy of the query with the `SELECT DISTINCT` clause applied. - /// - /// let users = Table("users") - /// let email = Expression("email") - /// - /// users.select(distinct: email) - /// // SELECT DISTINCT "email" FROM "users" - /// - /// - Parameter columns: A list of expressions to select. - /// - /// - Returns: A query with the given `SELECT DISTINCT` clause applied. - public func select(distinct column1: Expressible, _ more: Expressible...) -> Self { - return select(true, [column1] + more) - } - - /// Builds a copy of the query with the `SELECT` clause applied. - /// - /// let users = Table("users") - /// let id = Expression("id") - /// let email = Expression("email") - /// - /// users.select([id, email]) - /// // SELECT "id", "email" FROM "users" - /// - /// - Parameter all: A list of expressions to select. - /// - /// - Returns: A query with the given `SELECT` clause applied. - public func select(_ all: [Expressible]) -> Self { - return select(false, all) - } - - /// Builds a copy of the query with the `SELECT DISTINCT` clause applied. - /// - /// let users = Table("users") - /// let email = Expression("email") - /// - /// users.select(distinct: [email]) - /// // SELECT DISTINCT "email" FROM "users" - /// - /// - Parameter columns: A list of expressions to select. - /// - /// - Returns: A query with the given `SELECT DISTINCT` clause applied. - public func select(distinct columns: [Expressible]) -> Self { - return select(true, columns) - } - - /// Builds a copy of the query with the `SELECT *` clause applied. - /// - /// let users = Table("users") - /// - /// users.select(*) - /// // SELECT * FROM "users" - /// - /// - Parameter star: A star literal. - /// - /// - Returns: A query with the given `SELECT *` clause applied. - public func select(_ star: Star) -> Self { - return select([star(nil, nil)]) - } - - /// Builds a copy of the query with the `SELECT DISTINCT *` clause applied. - /// - /// let users = Table("users") - /// - /// users.select(distinct: *) - /// // SELECT DISTINCT * FROM "users" - /// - /// - Parameter star: A star literal. - /// - /// - Returns: A query with the given `SELECT DISTINCT *` clause applied. - public func select(distinct star: Star) -> Self { - return select(distinct: [star(nil, nil)]) - } - - /// Builds a scalar copy of the query with the `SELECT` clause applied. - /// - /// let users = Table("users") - /// let id = Expression("id") - /// - /// users.select(id) - /// // SELECT "id" FROM "users" - /// - /// - Parameter all: A list of expressions to select. - /// - /// - Returns: A query with the given `SELECT` clause applied. - public func select(_ column: Expression) -> ScalarQuery { - return select(false, [column]) - } - public func select(_ column: Expression) -> ScalarQuery { - return select(false, [column]) - } - - /// Builds a scalar copy of the query with the `SELECT DISTINCT` clause - /// applied. - /// - /// let users = Table("users") - /// let email = Expression("email") - /// - /// users.select(distinct: email) - /// // SELECT DISTINCT "email" FROM "users" - /// - /// - Parameter column: A list of expressions to select. - /// - /// - Returns: A query with the given `SELECT DISTINCT` clause applied. - public func select(distinct column: Expression) -> ScalarQuery { - return select(true, [column]) - } - public func select(distinct column: Expression) -> ScalarQuery { - return select(true, [column]) - } - - public var count: ScalarQuery { - return select(Expression.count(*)) - } - -} - -extension QueryType { - - fileprivate func select(_ distinct: Bool, _ columns: [Expressible]) -> Q { - var query = Q.init(clauses.from.name, database: clauses.from.database) - query.clauses = clauses - query.clauses.select = (distinct, columns) - return query - } - - // MARK: UNION - - /// Adds a `UNION` clause to the query. - /// - /// let users = Table("users") - /// let email = Expression("email") - /// - /// users.filter(email == "alice@example.com").union(users.filter(email == "sally@example.com")) - /// // SELECT * FROM "users" WHERE email = 'alice@example.com' UNION SELECT * FROM "users" WHERE email = 'sally@example.com' - /// - /// - Parameters: - /// - /// - table: A query representing the other table. - /// - /// - Returns: A query with the given `UNION` clause applied. - public func union(_ table: QueryType) -> Self { - var query = self - query.clauses.union.append(table) - return query - } - - // MARK: JOIN - - /// Adds a `JOIN` clause to the query. - /// - /// let users = Table("users") - /// let id = Expression("id") - /// let posts = Table("posts") - /// let userId = Expression("user_id") - /// - /// users.join(posts, on: posts[userId] == users[id]) - /// // SELECT * FROM "users" INNER JOIN "posts" ON ("posts"."user_id" = "users"."id") - /// - /// - Parameters: - /// - /// - table: A query representing the other table. - /// - /// - condition: A boolean expression describing the join condition. - /// - /// - Returns: A query with the given `JOIN` clause applied. - public func join(_ table: QueryType, on condition: Expression) -> Self { - return join(table, on: Expression(condition)) - } - - /// Adds a `JOIN` clause to the query. - /// - /// let users = Table("users") - /// let id = Expression("id") - /// let posts = Table("posts") - /// let userId = Expression("user_id") - /// - /// users.join(posts, on: posts[userId] == users[id]) - /// // SELECT * FROM "users" INNER JOIN "posts" ON ("posts"."user_id" = "users"."id") - /// - /// - Parameters: - /// - /// - table: A query representing the other table. - /// - /// - condition: A boolean expression describing the join condition. - /// - /// - Returns: A query with the given `JOIN` clause applied. - public func join(_ table: QueryType, on condition: Expression) -> Self { - return join(.inner, table, on: condition) - } - - /// Adds a `JOIN` clause to the query. - /// - /// let users = Table("users") - /// let id = Expression("id") - /// let posts = Table("posts") - /// let userId = Expression("user_id") - /// - /// users.join(.LeftOuter, posts, on: posts[userId] == users[id]) - /// // SELECT * FROM "users" LEFT OUTER JOIN "posts" ON ("posts"."user_id" = "users"."id") - /// - /// - Parameters: - /// - /// - type: The `JOIN` operator. - /// - /// - table: A query representing the other table. - /// - /// - condition: A boolean expression describing the join condition. - /// - /// - Returns: A query with the given `JOIN` clause applied. - public func join(_ type: JoinType, _ table: QueryType, on condition: Expression) -> Self { - return join(type, table, on: Expression(condition)) - } - - /// Adds a `JOIN` clause to the query. - /// - /// let users = Table("users") - /// let id = Expression("id") - /// let posts = Table("posts") - /// let userId = Expression("user_id") - /// - /// users.join(.LeftOuter, posts, on: posts[userId] == users[id]) - /// // SELECT * FROM "users" LEFT OUTER JOIN "posts" ON ("posts"."user_id" = "users"."id") - /// - /// - Parameters: - /// - /// - type: The `JOIN` operator. - /// - /// - table: A query representing the other table. - /// - /// - condition: A boolean expression describing the join condition. - /// - /// - Returns: A query with the given `JOIN` clause applied. - public func join(_ type: JoinType, _ table: QueryType, on condition: Expression) -> Self { - var query = self - query.clauses.join.append((type: type, query: table, condition: table.clauses.filters.map { condition && $0 } ?? condition as Expressible)) - return query - } - - // MARK: WHERE - - /// Adds a condition to the query’s `WHERE` clause. - /// - /// let users = Table("users") - /// let id = Expression("id") - /// - /// users.filter(id == 1) - /// // SELECT * FROM "users" WHERE ("id" = 1) - /// - /// - Parameter condition: A boolean expression to filter on. - /// - /// - Returns: A query with the given `WHERE` clause applied. - public func filter(_ predicate: Expression) -> Self { - return filter(Expression(predicate)) - } - - /// Adds a condition to the query’s `WHERE` clause. - /// - /// let users = Table("users") - /// let age = Expression("age") - /// - /// users.filter(age >= 35) - /// // SELECT * FROM "users" WHERE ("age" >= 35) - /// - /// - Parameter condition: A boolean expression to filter on. - /// - /// - Returns: A query with the given `WHERE` clause applied. - public func filter(_ predicate: Expression) -> Self { - var query = self - query.clauses.filters = query.clauses.filters.map { $0 && predicate } ?? predicate - return query - } - - /// Adds a condition to the query’s `WHERE` clause. - /// This is an alias for `filter(predicate)` - public func `where`(_ predicate: Expression) -> Self { - return `where`(Expression(predicate)) - } - - /// Adds a condition to the query’s `WHERE` clause. - /// This is an alias for `filter(predicate)` - public func `where`(_ predicate: Expression) -> Self { - return filter(predicate) - } - - // MARK: GROUP BY - - /// Sets a `GROUP BY` clause on the query. - /// - /// - Parameter by: A list of columns to group by. - /// - /// - Returns: A query with the given `GROUP BY` clause applied. - public func group(_ by: Expressible...) -> Self { - return group(by) - } - - /// Sets a `GROUP BY` clause on the query. - /// - /// - Parameter by: A list of columns to group by. - /// - /// - Returns: A query with the given `GROUP BY` clause applied. - public func group(_ by: [Expressible]) -> Self { - return group(by, nil) - } - - /// Sets a `GROUP BY`-`HAVING` clause on the query. - /// - /// - Parameters: - /// - /// - by: A column to group by. - /// - /// - having: A condition determining which groups are returned. - /// - /// - Returns: A query with the given `GROUP BY`–`HAVING` clause applied. - public func group(_ by: Expressible, having: Expression) -> Self { - return group([by], having: having) - } - - /// Sets a `GROUP BY`-`HAVING` clause on the query. - /// - /// - Parameters: - /// - /// - by: A column to group by. - /// - /// - having: A condition determining which groups are returned. - /// - /// - Returns: A query with the given `GROUP BY`–`HAVING` clause applied. - public func group(_ by: Expressible, having: Expression) -> Self { - return group([by], having: having) - } - - /// Sets a `GROUP BY`-`HAVING` clause on the query. - /// - /// - Parameters: - /// - /// - by: A list of columns to group by. - /// - /// - having: A condition determining which groups are returned. - /// - /// - Returns: A query with the given `GROUP BY`–`HAVING` clause applied. - public func group(_ by: [Expressible], having: Expression) -> Self { - return group(by, Expression(having)) - } - - /// Sets a `GROUP BY`-`HAVING` clause on the query. - /// - /// - Parameters: - /// - /// - by: A list of columns to group by. - /// - /// - having: A condition determining which groups are returned. - /// - /// - Returns: A query with the given `GROUP BY`–`HAVING` clause applied. - public func group(_ by: [Expressible], having: Expression) -> Self { - return group(by, having) - } - - fileprivate func group(_ by: [Expressible], _ having: Expression?) -> Self { - var query = self - query.clauses.group = (by, having) - return query - } - - // MARK: ORDER BY - - /// Sets an `ORDER BY` clause on the query. - /// - /// let users = Table("users") - /// let email = Expression("email") - /// let name = Expression("name") - /// - /// users.order(email.desc, name.asc) - /// // SELECT * FROM "users" ORDER BY "email" DESC, "name" ASC - /// - /// - Parameter by: An ordered list of columns and directions to sort by. - /// - /// - Returns: A query with the given `ORDER BY` clause applied. - public func order(_ by: Expressible...) -> Self { - return order(by) - } - - /// Sets an `ORDER BY` clause on the query. - /// - /// let users = Table("users") - /// let email = Expression("email") - /// let name = Expression("name") - /// - /// users.order([email.desc, name.asc]) - /// // SELECT * FROM "users" ORDER BY "email" DESC, "name" ASC - /// - /// - Parameter by: An ordered list of columns and directions to sort by. - /// - /// - Returns: A query with the given `ORDER BY` clause applied. - public func order(_ by: [Expressible]) -> Self { - var query = self - query.clauses.order = by - return query - } - - // MARK: LIMIT/OFFSET - - /// Sets the LIMIT clause (and resets any OFFSET clause) on the query. - /// - /// let users = Table("users") - /// - /// users.limit(20) - /// // SELECT * FROM "users" LIMIT 20 - /// - /// - Parameter length: The maximum number of rows to return (or `nil` to - /// return unlimited rows). - /// - /// - Returns: A query with the given LIMIT clause applied. - public func limit(_ length: Int?) -> Self { - return limit(length, nil) - } - - /// Sets LIMIT and OFFSET clauses on the query. - /// - /// let users = Table("users") - /// - /// users.limit(20, offset: 20) - /// // SELECT * FROM "users" LIMIT 20 OFFSET 20 - /// - /// - Parameters: - /// - /// - length: The maximum number of rows to return. - /// - /// - offset: The number of rows to skip. - /// - /// - Returns: A query with the given LIMIT and OFFSET clauses applied. - public func limit(_ length: Int, offset: Int) -> Self { - return limit(length, offset) - } - - // prevents limit(nil, offset: 5) - fileprivate func limit(_ length: Int?, _ offset: Int?) -> Self { - var query = self - query.clauses.limit = length.map { ($0, offset) } - return query - } - - // MARK: - Clauses - // - // MARK: SELECT - - // MARK: - - - fileprivate var selectClause: Expressible { - return " ".join([ - Expression(literal: clauses.select.distinct ? "SELECT DISTINCT" : "SELECT"), - ", ".join(clauses.select.columns), - Expression(literal: "FROM"), - tableName(alias: true) - ]) - } - - fileprivate var joinClause: Expressible? { - guard !clauses.join.isEmpty else { - return nil - } - - return " ".join(clauses.join.map { arg in - let (type, query, condition) = arg - return " ".join([ - Expression(literal: "\(type.rawValue) JOIN"), - query.tableName(alias: true), - Expression(literal: "ON"), - condition - ]) - }) - } - - fileprivate var whereClause: Expressible? { - guard let filters = clauses.filters else { - return nil - } - - return " ".join([ - Expression(literal: "WHERE"), - filters - ]) - } - - fileprivate var groupByClause: Expressible? { - guard let group = clauses.group else { - return nil - } - - let groupByClause = " ".join([ - Expression(literal: "GROUP BY"), - ", ".join(group.by) - ]) - - guard let having = group.having else { - return groupByClause - } - - return " ".join([ - groupByClause, - " ".join([ - Expression(literal: "HAVING"), - having - ]) - ]) - } - - fileprivate var orderClause: Expressible? { - guard !clauses.order.isEmpty else { - return nil - } - - return " ".join([ - Expression(literal: "ORDER BY"), - ", ".join(clauses.order) - ]) - } - - fileprivate var limitOffsetClause: Expressible? { - guard let limit = clauses.limit else { - return nil - } - - let limitClause = Expression(literal: "LIMIT \(limit.length)") - - guard let offset = limit.offset else { - return limitClause - } - - return " ".join([ - limitClause, - Expression(literal: "OFFSET \(offset)") - ]) - } - - fileprivate var unionClause: Expressible? { - guard !clauses.union.isEmpty else { - return nil - } - - return " ".join(clauses.union.map { query in - " ".join([ - Expression(literal: "UNION"), - query - ]) - }) - } - - // MARK: - - - public func alias(_ aliasName: String) -> Self { - var query = self - query.clauses.from = (clauses.from.name, aliasName, clauses.from.database) - return query - } - - // MARK: - Operations - // - // MARK: INSERT - - public func insert(_ value: Setter, _ more: Setter...) -> Insert { - return insert([value] + more) - } - - public func insert(_ values: [Setter]) -> Insert { - return insert(nil, values) - } - - public func insert(or onConflict: OnConflict, _ values: Setter...) -> Insert { - return insert(or: onConflict, values) - } - - public func insert(or onConflict: OnConflict, _ values: [Setter]) -> Insert { - return insert(onConflict, values) - } - - fileprivate func insert(_ or: OnConflict?, _ values: [Setter]) -> Insert { - let insert = values.reduce((columns: [Expressible](), values: [Expressible]())) { insert, setter in - (insert.columns + [setter.column], insert.values + [setter.value]) - } - - let clauses: [Expressible?] = [ - Expression(literal: "INSERT"), - or.map { Expression(literal: "OR \($0.rawValue)") }, - Expression(literal: "INTO"), - tableName(), - "".wrap(insert.columns) as Expression, - Expression(literal: "VALUES"), - "".wrap(insert.values) as Expression, - whereClause - ] - - return Insert(" ".join(clauses.compactMap { $0 }).expression) - } - - /// Runs an `INSERT` statement against the query with `DEFAULT VALUES`. - public func insert() -> Insert { - return Insert(" ".join([ - Expression(literal: "INSERT INTO"), - tableName(), - Expression(literal: "DEFAULT VALUES") - ]).expression) - } - - /// Runs an `INSERT` statement against the query with the results of another - /// query. - /// - /// - Parameter query: A query to `SELECT` results from. - /// - /// - Returns: The number of updated rows and statement. - public func insert(_ query: QueryType) -> Update { - return Update(" ".join([ - Expression(literal: "INSERT INTO"), - tableName(), - query.expression - ]).expression) - } - - // MARK: UPDATE - - public func update(_ values: Setter...) -> Update { - return update(values) - } - - public func update(_ values: [Setter]) -> Update { - let clauses: [Expressible?] = [ - Expression(literal: "UPDATE"), - tableName(), - Expression(literal: "SET"), - ", ".join(values.map { " = ".join([$0.column, $0.value]) }), - whereClause, - orderClause, - limitOffsetClause - ] - - return Update(" ".join(clauses.compactMap { $0 }).expression) - } - - // MARK: DELETE - - public func delete() -> Delete { - let clauses: [Expressible?] = [ - Expression(literal: "DELETE FROM"), - tableName(), - whereClause, - orderClause, - limitOffsetClause - ] - - return Delete(" ".join(clauses.compactMap { $0 }).expression) - } - - // MARK: EXISTS - - public var exists: Select { - return Select(" ".join([ - Expression(literal: "SELECT EXISTS"), - "".wrap(expression) as Expression - ]).expression) - } - - // MARK: - - - /// Prefixes a column expression with the query’s table name or alias. - /// - /// - Parameter column: A column expression. - /// - /// - Returns: A column expression namespaced with the query’s table name or - /// alias. - public func namespace(_ column: Expression) -> Expression { - return Expression(".".join([tableName(), column]).expression) - } - - public subscript(column: Expression) -> Expression { - return namespace(column) - } - - public subscript(column: Expression) -> Expression { - return namespace(column) - } - - /// Prefixes a star with the query’s table name or alias. - /// - /// - Parameter star: A literal `*`. - /// - /// - Returns: A `*` expression namespaced with the query’s table name or - /// alias. - public subscript(star: Star) -> Expression { - return namespace(star(nil, nil)) - } - - // MARK: - - - // TODO: alias support - func tableName(alias aliased: Bool = false) -> Expressible { - guard let alias = clauses.from.alias , aliased else { - return database(namespace: clauses.from.alias ?? clauses.from.name) - } - - return " ".join([ - database(namespace: clauses.from.name), - Expression(literal: "AS"), - Expression(alias) - ]) - } - - func tableName(qualified: Bool) -> Expressible { - if qualified { - return tableName() - } - return Expression(clauses.from.alias ?? clauses.from.name) - } - - func database(namespace name: String) -> Expressible { - let name = Expression(name) - - guard let database = clauses.from.database else { - return name - } - - return ".".join([Expression(database), name]) - } - - public var expression: Expression { - let clauses: [Expressible?] = [ - selectClause, - joinClause, - whereClause, - groupByClause, - unionClause, - orderClause, - limitOffsetClause - ] - - return " ".join(clauses.compactMap { $0 }).expression - } - -} - -// TODO: decide: simplify the below with a boxed type instead - -/// Queries a collection of chainable helper functions and expressions to build -/// executable SQL statements. -public struct Table : SchemaType { - - public static let identifier = "TABLE" - - public var clauses: QueryClauses - - public init(_ name: String, database: String? = nil) { - clauses = QueryClauses(name, alias: nil, database: database) - } - -} - -public struct View : SchemaType { - - public static let identifier = "VIEW" - - public var clauses: QueryClauses - - public init(_ name: String, database: String? = nil) { - clauses = QueryClauses(name, alias: nil, database: database) - } - -} - -public struct VirtualTable : SchemaType { - - public static let identifier = "VIRTUAL TABLE" - - public var clauses: QueryClauses - - public init(_ name: String, database: String? = nil) { - clauses = QueryClauses(name, alias: nil, database: database) - } - -} - -// TODO: make `ScalarQuery` work in `QueryType.select()`, `.filter()`, etc. - -public struct ScalarQuery : QueryType { - - public var clauses: QueryClauses - - public init(_ name: String, database: String? = nil) { - clauses = QueryClauses(name, alias: nil, database: database) - } - -} - -// TODO: decide: simplify the below with a boxed type instead - -public struct Select : ExpressionType { - - public var template: String - public var bindings: [Binding?] - - public init(_ template: String, _ bindings: [Binding?]) { - self.template = template - self.bindings = bindings - } - -} - -public struct Insert : ExpressionType { - - public var template: String - public var bindings: [Binding?] - - public init(_ template: String, _ bindings: [Binding?]) { - self.template = template - self.bindings = bindings - } - -} - -public struct Update : ExpressionType { - - public var template: String - public var bindings: [Binding?] - - public init(_ template: String, _ bindings: [Binding?]) { - self.template = template - self.bindings = bindings - } - -} - -public struct Delete : ExpressionType { - - public var template: String - public var bindings: [Binding?] - - public init(_ template: String, _ bindings: [Binding?]) { - self.template = template - self.bindings = bindings - } - -} - - -public struct RowIterator: FailableIterator { - public typealias Element = Row - let statement: Statement - let columnNames: [String: Int] - - public func failableNext() throws -> Row? { - return try statement.failableNext().flatMap { Row(columnNames, $0) } - } - - public func map(_ transform: (Element) throws -> T) throws -> [T] { - var elements = [T]() - while let row = try failableNext() { - elements.append(try transform(row)) - } - return elements - } -} - -extension Connection { - - public func prepare(_ query: QueryType) throws -> AnySequence { - let expression = query.expression - let statement = try prepare(expression.template, expression.bindings) - - let columnNames = try columnNamesForQuery(query) - - return AnySequence { - AnyIterator { statement.next().map { Row(columnNames, $0) } } - } - } - - - public func prepareRowIterator(_ query: QueryType) throws -> RowIterator { - let expression = query.expression - let statement = try prepare(expression.template, expression.bindings) - return RowIterator(statement: statement, columnNames: try columnNamesForQuery(query)) - } - - private func columnNamesForQuery(_ query: QueryType) throws -> [String: Int] { - var (columnNames, idx) = ([String: Int](), 0) - column: for each in query.clauses.select.columns { - var names = each.expression.template.split { $0 == "." }.map(String.init) - let column = names.removeLast() - let namespace = names.joined(separator: ".") - - func expandGlob(_ namespace: Bool) -> ((QueryType) throws -> Void) { - return { (query: QueryType) throws -> (Void) in - var q = type(of: query).init(query.clauses.from.name, database: query.clauses.from.database) - q.clauses.select = query.clauses.select - let e = q.expression - var names = try self.prepare(e.template, e.bindings).columnNames.map { $0.quote() } - if namespace { names = names.map { "\(query.tableName().expression.template).\($0)" } } - for name in names { columnNames[name] = idx; idx += 1 } - } - } - - if column == "*" { - var select = query - select.clauses.select = (false, [Expression(literal: "*") as Expressible]) - let queries = [select] + query.clauses.join.map { $0.query } - if !namespace.isEmpty { - for q in queries { - if q.tableName().expression.template == namespace { - try expandGlob(true)(q) - continue column - } - throw QueryError.noSuchTable(name: namespace) - } - throw QueryError.noSuchTable(name: namespace) - } - for q in queries { - try expandGlob(query.clauses.join.count > 0)(q) - } - continue - } - - columnNames[each.expression.template] = idx - idx += 1 - } - return columnNames - } - - public func scalar(_ query: ScalarQuery) throws -> V { - let expression = query.expression - return value(try scalar(expression.template, expression.bindings)) - } - - public func scalar(_ query: ScalarQuery) throws -> V.ValueType? { - let expression = query.expression - guard let value = try scalar(expression.template, expression.bindings) as? V.Datatype else { return nil } - return V.fromDatatypeValue(value) - } - - public func scalar(_ query: Select) throws -> V { - let expression = query.expression - return value(try scalar(expression.template, expression.bindings)) - } - - public func scalar(_ query: Select) throws -> V.ValueType? { - let expression = query.expression - guard let value = try scalar(expression.template, expression.bindings) as? V.Datatype else { return nil } - return V.fromDatatypeValue(value) - } - - public func pluck(_ query: QueryType) throws -> Row? { - return try prepareRowIterator(query.limit(1, query.clauses.limit?.offset)).failableNext() - } - - /// Runs an `Insert` query. - /// - /// - SeeAlso: `QueryType.insert(value:_:)` - /// - SeeAlso: `QueryType.insert(values:)` - /// - SeeAlso: `QueryType.insert(or:_:)` - /// - SeeAlso: `QueryType.insert()` - /// - /// - Parameter query: An insert query. - /// - /// - Returns: The insert’s rowid. - @discardableResult public func run(_ query: Insert) throws -> Int64 { - let expression = query.expression - return try sync { - try self.run(expression.template, expression.bindings) - return self.lastInsertRowid - } - } - - /// Runs an `Update` query. - /// - /// - SeeAlso: `QueryType.insert(query:)` - /// - SeeAlso: `QueryType.update(values:)` - /// - /// - Parameter query: An update query. - /// - /// - Returns: The number of updated rows. - @discardableResult public func run(_ query: Update) throws -> Int { - let expression = query.expression - return try sync { - try self.run(expression.template, expression.bindings) - return self.changes - } - } - - /// Runs a `Delete` query. - /// - /// - SeeAlso: `QueryType.delete()` - /// - /// - Parameter query: A delete query. - /// - /// - Returns: The number of deleted rows. - @discardableResult public func run(_ query: Delete) throws -> Int { - let expression = query.expression - return try sync { - try self.run(expression.template, expression.bindings) - return self.changes - } - } - -} - -public struct Row { - - let columnNames: [String: Int] - - fileprivate let values: [Binding?] - - internal init(_ columnNames: [String: Int], _ values: [Binding?]) { - self.columnNames = columnNames - self.values = values - } - - func hasValue(for column: String) -> Bool { - guard let idx = columnNames[column.quote()] else { - return false - } - return values[idx] != nil - } - - /// Returns a row’s value for the given column. - /// - /// - Parameter column: An expression representing a column selected in a Query. - /// - /// - Returns: The value for the given column. - public func get(_ column: Expression) throws -> V { - if let value = try get(Expression(column)) { - return value - } else { - throw QueryError.unexpectedNullValue(name: column.template) - } - } - - public func get(_ column: Expression) throws -> V? { - func valueAtIndex(_ idx: Int) -> V? { - guard let value = values[idx] as? V.Datatype else { return nil } - return V.fromDatatypeValue(value) as? V - } - - guard let idx = columnNames[column.template] else { - let similar = Array(columnNames.keys).filter { $0.hasSuffix(".\(column.template)") } - - switch similar.count { - case 0: - throw QueryError.noSuchColumn(name: column.template, columns: columnNames.keys.sorted()) - case 1: - return valueAtIndex(columnNames[similar[0]]!) - default: - throw QueryError.ambiguousColumn(name: column.template, similar: similar) - } - } - - return valueAtIndex(idx) - } - - public subscript(column: Expression) -> T { - return try! get(column) - } - - public subscript(column: Expression) -> T? { - return try! get(column) - } -} - -/// Determines the join operator for a query’s `JOIN` clause. -public enum JoinType : String { - - /// A `CROSS` join. - case cross = "CROSS" - - /// An `INNER` join. - case inner = "INNER" - - /// A `LEFT OUTER` join. - case leftOuter = "LEFT OUTER" - -} - -/// ON CONFLICT resolutions. -public enum OnConflict: String { - - case replace = "REPLACE" - - case rollback = "ROLLBACK" - - case abort = "ABORT" - - case fail = "FAIL" - - case ignore = "IGNORE" - -} - -// MARK: - Private - -public struct QueryClauses { - - var select = (distinct: false, columns: [Expression(literal: "*") as Expressible]) - - var from: (name: String, alias: String?, database: String?) - - var join = [(type: JoinType, query: QueryType, condition: Expressible)]() - - var filters: Expression? - - var group: (by: [Expressible], having: Expression?)? - - var order = [Expressible]() - - var limit: (length: Int, offset: Int?)? - - var union = [QueryType]() - - fileprivate init(_ name: String, alias: String?, database: String?) { - self.from = (name, alias, database) - } - -} - diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Schema.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Schema.swift deleted file mode 100644 index 62c90702..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Schema.swift +++ /dev/null @@ -1,513 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -extension SchemaType { - - // MARK: - DROP TABLE / VIEW / VIRTUAL TABLE - - public func drop(ifExists: Bool = false) -> String { - return drop("TABLE", tableName(), ifExists) - } - -} - -extension Table { - - // MARK: - CREATE TABLE - - public func create(temporary: Bool = false, ifNotExists: Bool = false, withoutRowid: Bool = false, block: (TableBuilder) -> Void) -> String { - let builder = TableBuilder() - - block(builder) - - let clauses: [Expressible?] = [ - create(Table.identifier, tableName(), temporary ? .temporary : nil, ifNotExists), - "".wrap(builder.definitions) as Expression, - withoutRowid ? Expression(literal: "WITHOUT ROWID") : nil - ] - - return " ".join(clauses.compactMap { $0 }).asSQL() - } - - public func create(_ query: QueryType, temporary: Bool = false, ifNotExists: Bool = false) -> String { - let clauses: [Expressible?] = [ - create(Table.identifier, tableName(), temporary ? .temporary : nil, ifNotExists), - Expression(literal: "AS"), - query - ] - - return " ".join(clauses.compactMap { $0 }).asSQL() - } - - // MARK: - ALTER TABLE … ADD COLUMN - - public func addColumn(_ name: Expression, check: Expression? = nil, defaultValue: V) -> String { - return addColumn(definition(name, V.declaredDatatype, nil, false, false, check, defaultValue, nil, nil)) - } - - public func addColumn(_ name: Expression, check: Expression, defaultValue: V) -> String { - return addColumn(definition(name, V.declaredDatatype, nil, false, false, check, defaultValue, nil, nil)) - } - - public func addColumn(_ name: Expression, check: Expression? = nil, defaultValue: V? = nil) -> String { - return addColumn(definition(name, V.declaredDatatype, nil, true, false, check, defaultValue, nil, nil)) - } - - public func addColumn(_ name: Expression, check: Expression, defaultValue: V? = nil) -> String { - return addColumn(definition(name, V.declaredDatatype, nil, true, false, check, defaultValue, nil, nil)) - } - - public func addColumn(_ name: Expression, unique: Bool = false, check: Expression? = nil, references table: QueryType, _ other: Expression) -> String where V.Datatype == Int64 { - return addColumn(definition(name, V.declaredDatatype, nil, false, unique, check, nil, (table, other), nil)) - } - - public func addColumn(_ name: Expression, unique: Bool = false, check: Expression, references table: QueryType, _ other: Expression) -> String where V.Datatype == Int64 { - return addColumn(definition(name, V.declaredDatatype, nil, false, unique, check, nil, (table, other), nil)) - } - - public func addColumn(_ name: Expression, unique: Bool = false, check: Expression? = nil, references table: QueryType, _ other: Expression) -> String where V.Datatype == Int64 { - return addColumn(definition(name, V.declaredDatatype, nil, true, unique, check, nil, (table, other), nil)) - } - - public func addColumn(_ name: Expression, unique: Bool = false, check: Expression, references table: QueryType, _ other: Expression) -> String where V.Datatype == Int64 { - return addColumn(definition(name, V.declaredDatatype, nil, true, unique, check, nil, (table, other), nil)) - } - - public func addColumn(_ name: Expression, check: Expression? = nil, defaultValue: V, collate: Collation) -> String where V.Datatype == String { - return addColumn(definition(name, V.declaredDatatype, nil, false, false, check, defaultValue, nil, collate)) - } - - public func addColumn(_ name: Expression, check: Expression, defaultValue: V, collate: Collation) -> String where V.Datatype == String { - return addColumn(definition(name, V.declaredDatatype, nil, false, false, check, defaultValue, nil, collate)) - } - - public func addColumn(_ name: Expression, check: Expression? = nil, defaultValue: V? = nil, collate: Collation) -> String where V.Datatype == String { - return addColumn(definition(name, V.declaredDatatype, nil, true, false, check, defaultValue, nil, collate)) - } - - public func addColumn(_ name: Expression, check: Expression, defaultValue: V? = nil, collate: Collation) -> String where V.Datatype == String { - return addColumn(definition(name, V.declaredDatatype, nil, true, false, check, defaultValue, nil, collate)) - } - - fileprivate func addColumn(_ expression: Expressible) -> String { - return " ".join([ - Expression(literal: "ALTER TABLE"), - tableName(), - Expression(literal: "ADD COLUMN"), - expression - ]).asSQL() - } - - // MARK: - ALTER TABLE … RENAME TO - - public func rename(_ to: Table) -> String { - return rename(to: to) - } - - // MARK: - CREATE INDEX - - public func createIndex(_ columns: Expressible..., unique: Bool = false, ifNotExists: Bool = false) -> String { - let clauses: [Expressible?] = [ - create("INDEX", indexName(columns), unique ? .unique : nil, ifNotExists), - Expression(literal: "ON"), - tableName(qualified: false), - "".wrap(columns) as Expression - ] - - return " ".join(clauses.compactMap { $0 }).asSQL() - } - - // MARK: - DROP INDEX - - - public func dropIndex(_ columns: Expressible..., ifExists: Bool = false) -> String { - return drop("INDEX", indexName(columns), ifExists) - } - - fileprivate func indexName(_ columns: [Expressible]) -> Expressible { - let string = (["index", clauses.from.name, "on"] + columns.map { $0.expression.template }).joined(separator: " ").lowercased() - - let index = string.reduce("") { underscored, character in - guard character != "\"" else { - return underscored - } - guard "a"..."z" ~= character || "0"..."9" ~= character else { - return underscored + "_" - } - return underscored + String(character) - } - - return database(namespace: index) - } - -} - -extension View { - - // MARK: - CREATE VIEW - - public func create(_ query: QueryType, temporary: Bool = false, ifNotExists: Bool = false) -> String { - let clauses: [Expressible?] = [ - create(View.identifier, tableName(), temporary ? .temporary : nil, ifNotExists), - Expression(literal: "AS"), - query - ] - - return " ".join(clauses.compactMap { $0 }).asSQL() - } - - // MARK: - DROP VIEW - - public func drop(ifExists: Bool = false) -> String { - return drop("VIEW", tableName(), ifExists) - } - -} - -extension VirtualTable { - - // MARK: - CREATE VIRTUAL TABLE - - public func create(_ using: Module, ifNotExists: Bool = false) -> String { - let clauses: [Expressible?] = [ - create(VirtualTable.identifier, tableName(), nil, ifNotExists), - Expression(literal: "USING"), - using - ] - - return " ".join(clauses.compactMap { $0 }).asSQL() - } - - // MARK: - ALTER TABLE … RENAME TO - - public func rename(_ to: VirtualTable) -> String { - return rename(to: to) - } - -} - -public final class TableBuilder { - - fileprivate var definitions = [Expressible]() - - public func column(_ name: Expression, unique: Bool = false, check: Expression? = nil, defaultValue: Expression? = nil) { - column(name, V.declaredDatatype, nil, false, unique, check, defaultValue, nil, nil) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression? = nil, defaultValue: V) { - column(name, V.declaredDatatype, nil, false, unique, check, defaultValue, nil, nil) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression, defaultValue: Expression? = nil) { - column(name, V.declaredDatatype, nil, false, unique, check, defaultValue, nil, nil) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression, defaultValue: V) { - column(name, V.declaredDatatype, nil, false, unique, check, defaultValue, nil, nil) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression? = nil, defaultValue: Expression? = nil) { - column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, nil) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression? = nil, defaultValue: Expression) { - column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, nil) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression? = nil, defaultValue: V) { - column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, nil) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression, defaultValue: Expression? = nil) { - column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, nil) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression, defaultValue: Expression) { - column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, nil) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression, defaultValue: V) { - column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, nil) - } - - public func column(_ name: Expression, primaryKey: Bool, check: Expression? = nil, defaultValue: Expression? = nil) { - column(name, V.declaredDatatype, primaryKey ? .default : nil, false, false, check, defaultValue, nil, nil) - } - - public func column(_ name: Expression, primaryKey: Bool, check: Expression, defaultValue: Expression? = nil) { - column(name, V.declaredDatatype, primaryKey ? .default : nil, false, false, check, defaultValue, nil, nil) - } - - public func column(_ name: Expression, primaryKey: PrimaryKey, check: Expression? = nil) where V.Datatype == Int64 { - column(name, V.declaredDatatype, primaryKey, false, false, check, nil, nil, nil) - } - - public func column(_ name: Expression, primaryKey: PrimaryKey, check: Expression) where V.Datatype == Int64 { - column(name, V.declaredDatatype, primaryKey, false, false, check, nil, nil, nil) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression? = nil, references table: QueryType, _ other: Expression) where V.Datatype == Int64 { - column(name, V.declaredDatatype, nil, false, unique, check, nil, (table, other), nil) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression, references table: QueryType, _ other: Expression) where V.Datatype == Int64 { - column(name, V.declaredDatatype, nil, false, unique, check, nil, (table, other), nil) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression? = nil, references table: QueryType, _ other: Expression) where V.Datatype == Int64 { - column(name, V.declaredDatatype, nil, true, unique, check, nil, (table, other), nil) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression, references table: QueryType, _ other: Expression) where V.Datatype == Int64 { - column(name, V.declaredDatatype, nil, true, unique, check, nil, (table, other), nil) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression? = nil, defaultValue: Expression? = nil, collate: Collation) where V.Datatype == String { - column(name, V.declaredDatatype, nil, false, unique, check, defaultValue, nil, collate) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression? = nil, defaultValue: V, collate: Collation) where V.Datatype == String { - column(name, V.declaredDatatype, nil, false, unique, check, defaultValue, nil, collate) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression, defaultValue: Expression? = nil, collate: Collation) where V.Datatype == String { - column(name, V.declaredDatatype, nil, false, unique, check, defaultValue, nil, collate) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression, defaultValue: V, collate: Collation) where V.Datatype == String { - column(name, V.declaredDatatype, nil, false, unique, check, defaultValue, nil, collate) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression? = nil, defaultValue: Expression? = nil, collate: Collation) where V.Datatype == String { - column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, collate) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression? = nil, defaultValue: Expression, collate: Collation) where V.Datatype == String { - column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, collate) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression? = nil, defaultValue: V, collate: Collation) where V.Datatype == String { - column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, collate) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression, defaultValue: Expression? = nil, collate: Collation) where V.Datatype == String { - column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, collate) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression, defaultValue: Expression, collate: Collation) where V.Datatype == String { - column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, collate) - } - - public func column(_ name: Expression, unique: Bool = false, check: Expression, defaultValue: V, collate: Collation) where V.Datatype == String { - column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, collate) - } - - fileprivate func column(_ name: Expressible, _ datatype: String, _ primaryKey: PrimaryKey?, _ null: Bool, _ unique: Bool, _ check: Expressible?, _ defaultValue: Expressible?, _ references: (QueryType, Expressible)?, _ collate: Collation?) { - definitions.append(definition(name, datatype, primaryKey, null, unique, check, defaultValue, references, collate)) - } - - // MARK: - - - public func primaryKey(_ column: Expression) { - primaryKey([column]) - } - - public func primaryKey(_ compositeA: Expression, _ b: Expression) { - primaryKey([compositeA, b]) - } - - public func primaryKey(_ compositeA: Expression, _ b: Expression, _ c: Expression) { - primaryKey([compositeA, b, c]) - } - - fileprivate func primaryKey(_ composite: [Expressible]) { - definitions.append("PRIMARY KEY".prefix(composite)) - } - - public func unique(_ columns: Expressible...) { - unique(columns) - } - - public func unique(_ columns: [Expressible]) { - definitions.append("UNIQUE".prefix(columns)) - } - - public func check(_ condition: Expression) { - check(Expression(condition)) - } - - public func check(_ condition: Expression) { - definitions.append("CHECK".prefix(condition)) - } - - public enum Dependency: String { - - case noAction = "NO ACTION" - - case restrict = "RESTRICT" - - case setNull = "SET NULL" - - case setDefault = "SET DEFAULT" - - case cascade = "CASCADE" - - } - - public func foreignKey(_ column: Expression, references table: QueryType, _ other: Expression, update: Dependency? = nil, delete: Dependency? = nil) { - foreignKey(column, (table, other), update, delete) - } - - public func foreignKey(_ column: Expression, references table: QueryType, _ other: Expression, update: Dependency? = nil, delete: Dependency? = nil) { - foreignKey(column, (table, other), update, delete) - } - - public func foreignKey(_ composite: (Expression, Expression), references table: QueryType, _ other: (Expression, Expression), update: Dependency? = nil, delete: Dependency? = nil) { - let composite = ", ".join([composite.0, composite.1]) - let references = (table, ", ".join([other.0, other.1])) - - foreignKey(composite, references, update, delete) - } - - public func foreignKey(_ composite: (Expression, Expression, Expression), references table: QueryType, _ other: (Expression, Expression, Expression), update: Dependency? = nil, delete: Dependency? = nil) { - let composite = ", ".join([composite.0, composite.1, composite.2]) - let references = (table, ", ".join([other.0, other.1, other.2])) - - foreignKey(composite, references, update, delete) - } - - fileprivate func foreignKey(_ column: Expressible, _ references: (QueryType, Expressible), _ update: Dependency?, _ delete: Dependency?) { - let clauses: [Expressible?] = [ - "FOREIGN KEY".prefix(column), - reference(references), - update.map { Expression(literal: "ON UPDATE \($0.rawValue)") }, - delete.map { Expression(literal: "ON DELETE \($0.rawValue)") } - ] - - definitions.append(" ".join(clauses.compactMap { $0 })) - } - -} - -public enum PrimaryKey { - - case `default` - - case autoincrement - -} - -public struct Module { - - fileprivate let name: String - - fileprivate let arguments: [Expressible] - - public init(_ name: String, _ arguments: [Expressible]) { - self.init(name: name.quote(), arguments: arguments) - } - - init(name: String, arguments: [Expressible]) { - self.name = name - self.arguments = arguments - } - -} - -extension Module : Expressible { - - public var expression: Expression { - return name.wrap(arguments) - } - -} - -// MARK: - Private - -private extension QueryType { - - func create(_ identifier: String, _ name: Expressible, _ modifier: Modifier?, _ ifNotExists: Bool) -> Expressible { - let clauses: [Expressible?] = [ - Expression(literal: "CREATE"), - modifier.map { Expression(literal: $0.rawValue) }, - Expression(literal: identifier), - ifNotExists ? Expression(literal: "IF NOT EXISTS") : nil, - name - ] - - return " ".join(clauses.compactMap { $0 }) - } - - func rename(to: Self) -> String { - return " ".join([ - Expression(literal: "ALTER TABLE"), - tableName(), - Expression(literal: "RENAME TO"), - Expression(to.clauses.from.name) - ]).asSQL() - } - - func drop(_ identifier: String, _ name: Expressible, _ ifExists: Bool) -> String { - let clauses: [Expressible?] = [ - Expression(literal: "DROP \(identifier)"), - ifExists ? Expression(literal: "IF EXISTS") : nil, - name - ] - - return " ".join(clauses.compactMap { $0 }).asSQL() - } - -} - -private func definition(_ column: Expressible, _ datatype: String, _ primaryKey: PrimaryKey?, _ null: Bool, _ unique: Bool, _ check: Expressible?, _ defaultValue: Expressible?, _ references: (QueryType, Expressible)?, _ collate: Collation?) -> Expressible { - let clauses: [Expressible?] = [ - column, - Expression(literal: datatype), - primaryKey.map { Expression(literal: $0 == .autoincrement ? "PRIMARY KEY AUTOINCREMENT" : "PRIMARY KEY") }, - null ? nil : Expression(literal: "NOT NULL"), - unique ? Expression(literal: "UNIQUE") : nil, - check.map { " ".join([Expression(literal: "CHECK"), $0]) }, - defaultValue.map { "DEFAULT".prefix($0) }, - references.map(reference), - collate.map { " ".join([Expression(literal: "COLLATE"), $0]) } - ] - - return " ".join(clauses.compactMap { $0 }) -} - -private func reference(_ primary: (QueryType, Expressible)) -> Expressible { - return " ".join([ - Expression(literal: "REFERENCES"), - primary.0.tableName(qualified: false), - "".wrap(primary.1) as Expression - ]) -} - -private enum Modifier : String { - - case unique = "UNIQUE" - - case temporary = "TEMPORARY" - -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Setter.swift b/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Setter.swift deleted file mode 100644 index 86f16fca..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLite/Typed/Setter.swift +++ /dev/null @@ -1,277 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -precedencegroup ColumnAssignment { - associativity: left - assignment: true - lowerThan: AssignmentPrecedence -} - -infix operator <- : ColumnAssignment - -public struct Setter { - - let column: Expressible - let value: Expressible - - fileprivate init(column: Expression, value: Expression) { - self.column = column - self.value = value - } - - fileprivate init(column: Expression, value: V) { - self.column = column - self.value = value - } - - fileprivate init(column: Expression, value: Expression) { - self.column = column - self.value = value - } - - fileprivate init(column: Expression, value: Expression) { - self.column = column - self.value = value - } - - fileprivate init(column: Expression, value: V?) { - self.column = column - self.value = Expression(value: value) - } - -} - -extension Setter : Expressible { - - public var expression: Expression { - return "=".infix(column, value, wrap: false) - } - -} - -public func <-(column: Expression, value: Expression) -> Setter { - return Setter(column: column, value: value) -} -public func <-(column: Expression, value: V) -> Setter { - return Setter(column: column, value: value) -} -public func <-(column: Expression, value: Expression) -> Setter { - return Setter(column: column, value: value) -} -public func <-(column: Expression, value: Expression) -> Setter { - return Setter(column: column, value: value) -} -public func <-(column: Expression, value: V?) -> Setter { - return Setter(column: column, value: value) -} - -public func +=(column: Expression, value: Expression) -> Setter { - return column <- column + value -} -public func +=(column: Expression, value: String) -> Setter { - return column <- column + value -} -public func +=(column: Expression, value: Expression) -> Setter { - return column <- column + value -} -public func +=(column: Expression, value: Expression) -> Setter { - return column <- column + value -} -public func +=(column: Expression, value: String) -> Setter { - return column <- column + value -} - -public func +=(column: Expression, value: Expression) -> Setter where V.Datatype : Number { - return column <- column + value -} -public func +=(column: Expression, value: V) -> Setter where V.Datatype : Number { - return column <- column + value -} -public func +=(column: Expression, value: Expression) -> Setter where V.Datatype : Number { - return column <- column + value -} -public func +=(column: Expression, value: Expression) -> Setter where V.Datatype : Number { - return column <- column + value -} -public func +=(column: Expression, value: V) -> Setter where V.Datatype : Number { - return column <- column + value -} - -public func -=(column: Expression, value: Expression) -> Setter where V.Datatype : Number { - return column <- column - value -} -public func -=(column: Expression, value: V) -> Setter where V.Datatype : Number { - return column <- column - value -} -public func -=(column: Expression, value: Expression) -> Setter where V.Datatype : Number { - return column <- column - value -} -public func -=(column: Expression, value: Expression) -> Setter where V.Datatype : Number { - return column <- column - value -} -public func -=(column: Expression, value: V) -> Setter where V.Datatype : Number { - return column <- column - value -} - -public func *=(column: Expression, value: Expression) -> Setter where V.Datatype : Number { - return column <- column * value -} -public func *=(column: Expression, value: V) -> Setter where V.Datatype : Number { - return column <- column * value -} -public func *=(column: Expression, value: Expression) -> Setter where V.Datatype : Number { - return column <- column * value -} -public func *=(column: Expression, value: Expression) -> Setter where V.Datatype : Number { - return column <- column * value -} -public func *=(column: Expression, value: V) -> Setter where V.Datatype : Number { - return column <- column * value -} - -public func /=(column: Expression, value: Expression) -> Setter where V.Datatype : Number { - return column <- column / value -} -public func /=(column: Expression, value: V) -> Setter where V.Datatype : Number { - return column <- column / value -} -public func /=(column: Expression, value: Expression) -> Setter where V.Datatype : Number { - return column <- column / value -} -public func /=(column: Expression, value: Expression) -> Setter where V.Datatype : Number { - return column <- column / value -} -public func /=(column: Expression, value: V) -> Setter where V.Datatype : Number { - return column <- column / value -} - -public func %=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column % value -} -public func %=(column: Expression, value: V) -> Setter where V.Datatype == Int64 { - return column <- column % value -} -public func %=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column % value -} -public func %=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column % value -} -public func %=(column: Expression, value: V) -> Setter where V.Datatype == Int64 { - return column <- column % value -} - -public func <<=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column << value -} -public func <<=(column: Expression, value: V) -> Setter where V.Datatype == Int64 { - return column <- column << value -} -public func <<=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column << value -} -public func <<=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column << value -} -public func <<=(column: Expression, value: V) -> Setter where V.Datatype == Int64 { - return column <- column << value -} - -public func >>=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column >> value -} -public func >>=(column: Expression, value: V) -> Setter where V.Datatype == Int64 { - return column <- column >> value -} -public func >>=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column >> value -} -public func >>=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column >> value -} -public func >>=(column: Expression, value: V) -> Setter where V.Datatype == Int64 { - return column <- column >> value -} - -public func &=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column & value -} -public func &=(column: Expression, value: V) -> Setter where V.Datatype == Int64 { - return column <- column & value -} -public func &=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column & value -} -public func &=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column & value -} -public func &=(column: Expression, value: V) -> Setter where V.Datatype == Int64 { - return column <- column & value -} - -public func |=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column | value -} -public func |=(column: Expression, value: V) -> Setter where V.Datatype == Int64 { - return column <- column | value -} -public func |=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column | value -} -public func |=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column | value -} -public func |=(column: Expression, value: V) -> Setter where V.Datatype == Int64 { - return column <- column | value -} - -public func ^=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column ^ value -} -public func ^=(column: Expression, value: V) -> Setter where V.Datatype == Int64 { - return column <- column ^ value -} -public func ^=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column ^ value -} -public func ^=(column: Expression, value: Expression) -> Setter where V.Datatype == Int64 { - return column <- column ^ value -} -public func ^=(column: Expression, value: V) -> Setter where V.Datatype == Int64 { - return column <- column ^ value -} - -public postfix func ++(column: Expression) -> Setter where V.Datatype == Int64 { - return Expression(column) += 1 -} -public postfix func ++(column: Expression) -> Setter where V.Datatype == Int64 { - return Expression(column) += 1 -} - -public postfix func --(column: Expression) -> Setter where V.Datatype == Int64 { - return Expression(column) -= 1 -} -public postfix func --(column: Expression) -> Setter where V.Datatype == Int64 { - return Expression(column) -= 1 -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLiteObjc/SQLite-Bridging.m b/Example/Pods/SQLite.swift/Sources/SQLiteObjc/SQLite-Bridging.m deleted file mode 100644 index e00a7315..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLiteObjc/SQLite-Bridging.m +++ /dev/null @@ -1,138 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#import "SQLite-Bridging.h" -#import "fts3_tokenizer.h" - -#pragma mark - FTS - -typedef struct __SQLiteTokenizer { - sqlite3_tokenizer base; - __unsafe_unretained _SQLiteTokenizerNextCallback callback; -} __SQLiteTokenizer; - -typedef struct __SQLiteTokenizerCursor { - void * base; - const char * input; - int inputOffset; - int inputLength; - int idx; -} __SQLiteTokenizerCursor; - -static NSMutableDictionary * __SQLiteTokenizerMap; - -static int __SQLiteTokenizerCreate(int argc, const char * const * argv, sqlite3_tokenizer ** ppTokenizer) { - __SQLiteTokenizer * tokenizer = (__SQLiteTokenizer *)sqlite3_malloc(sizeof(__SQLiteTokenizer)); - if (!tokenizer) { - return SQLITE_NOMEM; - } - memset(tokenizer, 0, sizeof(* tokenizer)); - - NSString * key = [NSString stringWithUTF8String:argv[0]]; - tokenizer->callback = [__SQLiteTokenizerMap objectForKey:key]; - if (!tokenizer->callback) { - return SQLITE_ERROR; - } - - *ppTokenizer = &tokenizer->base; - return SQLITE_OK; -} - -static int __SQLiteTokenizerDestroy(sqlite3_tokenizer * pTokenizer) { - sqlite3_free(pTokenizer); - return SQLITE_OK; -} - -static int __SQLiteTokenizerOpen(sqlite3_tokenizer * pTokenizer, const char * pInput, int nBytes, sqlite3_tokenizer_cursor ** ppCursor) { - __SQLiteTokenizerCursor * cursor = (__SQLiteTokenizerCursor *)sqlite3_malloc(sizeof(__SQLiteTokenizerCursor)); - if (!cursor) { - return SQLITE_NOMEM; - } - - cursor->input = pInput; - cursor->inputOffset = 0; - cursor->inputLength = 0; - cursor->idx = 0; - - *ppCursor = (sqlite3_tokenizer_cursor *)cursor; - return SQLITE_OK; -} - -static int __SQLiteTokenizerClose(sqlite3_tokenizer_cursor * pCursor) { - sqlite3_free(pCursor); - return SQLITE_OK; -} - -static int __SQLiteTokenizerNext(sqlite3_tokenizer_cursor * pCursor, const char ** ppToken, int * pnBytes, int * piStartOffset, int * piEndOffset, int * piPosition) { - __SQLiteTokenizerCursor * cursor = (__SQLiteTokenizerCursor *)pCursor; - __SQLiteTokenizer * tokenizer = (__SQLiteTokenizer *)cursor->base; - - cursor->inputOffset += cursor->inputLength; - const char * input = cursor->input + cursor->inputOffset; - const char * token = [tokenizer->callback(input, &cursor->inputOffset, &cursor->inputLength) cStringUsingEncoding:NSUTF8StringEncoding]; - if (!token) { - return SQLITE_DONE; - } - - *ppToken = token; - *pnBytes = (int)strlen(token); - *piStartOffset = cursor->inputOffset; - *piEndOffset = cursor->inputOffset + cursor->inputLength; - *piPosition = cursor->idx++; - return SQLITE_OK; -} - -static const sqlite3_tokenizer_module __SQLiteTokenizerModule = { - 0, - __SQLiteTokenizerCreate, - __SQLiteTokenizerDestroy, - __SQLiteTokenizerOpen, - __SQLiteTokenizerClose, - __SQLiteTokenizerNext -}; - -int _SQLiteRegisterTokenizer(sqlite3 *db, const char * moduleName, const char * submoduleName, _SQLiteTokenizerNextCallback callback) { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - __SQLiteTokenizerMap = [NSMutableDictionary new]; - }); - - sqlite3_stmt * stmt; - int status = sqlite3_prepare_v2(db, "SELECT fts3_tokenizer(?, ?)", -1, &stmt, 0); - if (status != SQLITE_OK ){ - return status; - } - const sqlite3_tokenizer_module * pModule = &__SQLiteTokenizerModule; - sqlite3_bind_text(stmt, 1, moduleName, -1, SQLITE_STATIC); - sqlite3_bind_blob(stmt, 2, &pModule, sizeof(pModule), SQLITE_STATIC); - sqlite3_step(stmt); - status = sqlite3_finalize(stmt); - if (status != SQLITE_OK ){ - return status; - } - - [__SQLiteTokenizerMap setObject:[callback copy] forKey:[NSString stringWithUTF8String:submoduleName]]; - - return SQLITE_OK; -} diff --git a/Example/Pods/SQLite.swift/Sources/SQLiteObjc/fts3_tokenizer.h b/Example/Pods/SQLite.swift/Sources/SQLiteObjc/fts3_tokenizer.h deleted file mode 100644 index d8a1e44b..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLiteObjc/fts3_tokenizer.h +++ /dev/null @@ -1,161 +0,0 @@ -/* -** 2006 July 10 -** -** The author disclaims copyright to this source code. -** -************************************************************************* -** Defines the interface to tokenizers used by fulltext-search. There -** are three basic components: -** -** sqlite3_tokenizer_module is a singleton defining the tokenizer -** interface functions. This is essentially the class structure for -** tokenizers. -** -** sqlite3_tokenizer is used to define a particular tokenizer, perhaps -** including customization information defined at creation time. -** -** sqlite3_tokenizer_cursor is generated by a tokenizer to generate -** tokens from a particular input. -*/ -#ifndef _FTS3_TOKENIZER_H_ -#define _FTS3_TOKENIZER_H_ - -/* TODO(shess) Only used for SQLITE_OK and SQLITE_DONE at this time. -** If tokenizers are to be allowed to call sqlite3_*() functions, then -** we will need a way to register the API consistently. -*/ -#import "sqlite3.h" - -/* -** Structures used by the tokenizer interface. When a new tokenizer -** implementation is registered, the caller provides a pointer to -** an sqlite3_tokenizer_module containing pointers to the callback -** functions that make up an implementation. -** -** When an fts3 table is created, it passes any arguments passed to -** the tokenizer clause of the CREATE VIRTUAL TABLE statement to the -** sqlite3_tokenizer_module.xCreate() function of the requested tokenizer -** implementation. The xCreate() function in turn returns an -** sqlite3_tokenizer structure representing the specific tokenizer to -** be used for the fts3 table (customized by the tokenizer clause arguments). -** -** To tokenize an input buffer, the sqlite3_tokenizer_module.xOpen() -** method is called. It returns an sqlite3_tokenizer_cursor object -** that may be used to tokenize a specific input buffer based on -** the tokenization rules supplied by a specific sqlite3_tokenizer -** object. -*/ -typedef struct sqlite3_tokenizer_module sqlite3_tokenizer_module; -typedef struct sqlite3_tokenizer sqlite3_tokenizer; -typedef struct sqlite3_tokenizer_cursor sqlite3_tokenizer_cursor; - -struct sqlite3_tokenizer_module { - - /* - ** Structure version. Should always be set to 0 or 1. - */ - int iVersion; - - /* - ** Create a new tokenizer. The values in the argv[] array are the - ** arguments passed to the "tokenizer" clause of the CREATE VIRTUAL - ** TABLE statement that created the fts3 table. For example, if - ** the following SQL is executed: - ** - ** CREATE .. USING fts3( ... , tokenizer arg1 arg2) - ** - ** then argc is set to 2, and the argv[] array contains pointers - ** to the strings "arg1" and "arg2". - ** - ** This method should return either SQLITE_OK (0), or an SQLite error - ** code. If SQLITE_OK is returned, then *ppTokenizer should be set - ** to point at the newly created tokenizer structure. The generic - ** sqlite3_tokenizer.pModule variable should not be initialized by - ** this callback. The caller will do so. - */ - int (*xCreate)( - int argc, /* Size of argv array */ - const char *const*argv, /* Tokenizer argument strings */ - sqlite3_tokenizer **ppTokenizer /* OUT: Created tokenizer */ - ); - - /* - ** Destroy an existing tokenizer. The fts3 module calls this method - ** exactly once for each successful call to xCreate(). - */ - int (*xDestroy)(sqlite3_tokenizer *pTokenizer); - - /* - ** Create a tokenizer cursor to tokenize an input buffer. The caller - ** is responsible for ensuring that the input buffer remains valid - ** until the cursor is closed (using the xClose() method). - */ - int (*xOpen)( - sqlite3_tokenizer *pTokenizer, /* Tokenizer object */ - const char *pInput, int nBytes, /* Input buffer */ - sqlite3_tokenizer_cursor **ppCursor /* OUT: Created tokenizer cursor */ - ); - - /* - ** Destroy an existing tokenizer cursor. The fts3 module calls this - ** method exactly once for each successful call to xOpen(). - */ - int (*xClose)(sqlite3_tokenizer_cursor *pCursor); - - /* - ** Retrieve the next token from the tokenizer cursor pCursor. This - ** method should either return SQLITE_OK and set the values of the - ** "OUT" variables identified below, or SQLITE_DONE to indicate that - ** the end of the buffer has been reached, or an SQLite error code. - ** - ** *ppToken should be set to point at a buffer containing the - ** normalized version of the token (i.e. after any case-folding and/or - ** stemming has been performed). *pnBytes should be set to the length - ** of this buffer in bytes. The input text that generated the token is - ** identified by the byte offsets returned in *piStartOffset and - ** *piEndOffset. *piStartOffset should be set to the index of the first - ** byte of the token in the input buffer. *piEndOffset should be set - ** to the index of the first byte just past the end of the token in - ** the input buffer. - ** - ** The buffer *ppToken is set to point at is managed by the tokenizer - ** implementation. It is only required to be valid until the next call - ** to xNext() or xClose(). - */ - /* TODO(shess) current implementation requires pInput to be - ** nul-terminated. This should either be fixed, or pInput/nBytes - ** should be converted to zInput. - */ - int (*xNext)( - sqlite3_tokenizer_cursor *pCursor, /* Tokenizer cursor */ - const char **ppToken, int *pnBytes, /* OUT: Normalized text for token */ - int *piStartOffset, /* OUT: Byte offset of token in input buffer */ - int *piEndOffset, /* OUT: Byte offset of end of token in input buffer */ - int *piPosition /* OUT: Number of tokens returned before this one */ - ); - - /*********************************************************************** - ** Methods below this point are only available if iVersion>=1. - */ - - /* - ** Configure the language id of a tokenizer cursor. - */ - int (*xLanguageid)(sqlite3_tokenizer_cursor *pCsr, int iLangid); -}; - -struct sqlite3_tokenizer { - const sqlite3_tokenizer_module *pModule; /* The module for this tokenizer */ - /* Tokenizer implementations will typically add additional fields */ -}; - -struct sqlite3_tokenizer_cursor { - sqlite3_tokenizer *pTokenizer; /* Tokenizer for this cursor. */ - /* Tokenizer implementations will typically add additional fields */ -}; - -int fts3_global_term_cnt(int iTerm, int iCol); -int fts3_term_cnt(int iTerm, int iCol); - - -#endif /* _FTS3_TOKENIZER_H_ */ diff --git a/Example/Pods/SQLite.swift/Sources/SQLiteObjc/include/SQLite-Bridging.h b/Example/Pods/SQLite.swift/Sources/SQLiteObjc/include/SQLite-Bridging.h deleted file mode 100644 index 5b356593..00000000 --- a/Example/Pods/SQLite.swift/Sources/SQLiteObjc/include/SQLite-Bridging.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// SQLite.swift -// https://github.com/stephencelis/SQLite.swift -// Copyright © 2014-2015 Stephen Celis. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -@import Foundation; - -#import "sqlite3.h" - -NS_ASSUME_NONNULL_BEGIN -typedef NSString * _Nullable (^_SQLiteTokenizerNextCallback)(const char *input, int *inputOffset, int *inputLength); -int _SQLiteRegisterTokenizer(sqlite3 *db, const char *module, const char *tokenizer, _Nullable _SQLiteTokenizerNextCallback callback); -NS_ASSUME_NONNULL_END - diff --git a/Example/Pods/SlackTextViewController/LICENSE b/Example/Pods/SlackTextViewController/LICENSE deleted file mode 100644 index 5a9668b7..00000000 --- a/Example/Pods/SlackTextViewController/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) Slack Technologies, Inc. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/Example/Pods/SlackTextViewController/README.md b/Example/Pods/SlackTextViewController/README.md deleted file mode 100644 index e8a38f5b..00000000 --- a/Example/Pods/SlackTextViewController/README.md +++ /dev/null @@ -1,550 +0,0 @@ -# SlackTextViewController - -**IMPORTANT NOTICE: Please update to >= `1.9` to avoid any risk of app rejection. -More details in [#361](https://github.com/slackhq/SlackTextViewController/issues/361)** - -[![License](http://img.shields.io/badge/license-MIT-blue.svg)](http://opensource.org/licenses/MIT) -[![Pod Version](https://img.shields.io/cocoapods/v/SlackTextViewController.svg)](http://cocoadocs.org/docsets/SlackTextViewController/1.9/) -[![Carthage compatible](https://img.shields.io/badge/carthage-compatible-F5B369.svg)](https://github.com/Carthage/Carthage) -[![BuddyBuild](https://dashboard.buddybuild.com/api/statusImage?appID=59f2234423c5f600018bb24b&branch=master&build=latest)](https://dashboard.buddybuild.com/apps/59f2234423c5f600018bb24b/build/latest?branch=master) - -A drop-in UIViewController subclass with a growing text input view and other useful messaging features. Meant to be a replacement for UITableViewController & UICollectionViewController. - -![Demo Gif](Screenshots/slacktextviewcontroller_demo.gif) - -This library is used in Slack's iOS app. It was built to fit our needs, but is flexible enough to be reused by others wanting to build great messaging apps for iOS. - -## Feature List - -### Core -- Works out of the box with [UITableView or UICollectionView or UIScrollView](https://github.com/slackhq/SlackTextViewController#subclassing) -- [Growing Text View](https://github.com/slackhq/SlackTextViewController#growing-text-view), with line count limit support -- Flexible UI built with Auto Layout -- Customizable: provides left and right button, and toolbar outlets -- Tap Gesture for dismissing the keyboard -- [External keyboard](https://github.com/slackhq/SlackTextViewController#external-keyboard) commands support -- Undo/Redo (with keyboard commands and UIMenuController) -- Text Appending APIs - -### Additional -- [Autocomplete Mode](https://github.com/slackhq/SlackTextViewController#autocompletion) by registering any prefix key (`@`, `#`, `/`) -- [Edit Mode](https://github.com/slackhq/SlackTextViewController#edit-mode) -- [Markdown Formatting](https://github.com/slackhq/SlackTextViewController#markdown-formatting) -- [Typing Indicator](https://github.com/slackhq/SlackTextViewController#typing-indicator) display -- [Shake Gesture](https://github.com/slackhq/SlackTextViewController#shake-gesture) for clearing text view -- Multimedia Pasting (png, gif, mov, etc.) -- [Inverted Mode](https://github.com/slackhq/SlackTextViewController#inverted-mode) for displaying cells upside-down (using CATransform) -- a necessary hack for some messaging apps. `YES`/`true` by default, so beware, your entire cells might be flipped! -- Tap Gesture for dismissing the keyboard -- [Panning Gesture](https://github.com/slackhq/SlackTextViewController#panning-gesture) for sliding down/up the keyboard -- [Hideable TextInputbar](https://github.com/slackhq/SlackTextViewController#hideable-textinputbar) -- [Dynamic Type](https://github.com/slackhq/SlackTextViewController#dynamic-type) for adjusting automatically the text input bar height based on the font size. -- Bouncy Animations - -### Compatibility -- Carthage & CocoaPods -- Objective-C & Swift -- iOS 7, 8 & 9 -- iPhone & iPad -- [Storyboard](https://github.com/slackhq/SlackTextViewController#storyboard) -- UIPopOverController & UITabBarController -- Container View Controller -- Auto-Rotation -- iPad Multitasking (iOS 9 only) -- Localization - -## Installation - -###### With [CocoaPods](https://cocoapods.org/): -```ruby -pod "SlackTextViewController" -``` - -###### With [Carthage](https://github.com/Carthage/Carthage): -```swift -github "slackhq/SlackTextViewController" -``` - -###### Manually: -There are two ways to do this: -- Copy and drag the `Source/` folder to your project. -- or compile the project located in `Builder/SlackTextViewController.xcodeproj` to create a `SlackTextViewController.framework` package. You could also [link the library into your project](https://developer.apple.com/library/ios/recipes/xcode_help-project_editor/Articles/AddingaLibrarytoaTarget.html#//apple_ref/doc/uid/TP40010155-CH17-SW1). - - -## How to use - -### Subclassing -`SLKTextViewController` is meant to be subclassed, like you would normally do with UITableViewController or UICollectionViewController or UIScrollView. This pattern is a convenient way of extending UIViewController. SlackTextViewController manages a lot behind the scenes while still providing the ability to add custom behaviours. You may override methods, and decide to call super and perform additional logic, or not to call super and override default logic. - -Start by creating a new subclass of `SLKTextViewController`. - -In the init overriding method, if you wish to use the `UITableView` version, call: -##### Obj-C -```objc -[super initWithTableViewStyle:UITableViewStylePlain] -``` -##### Swift -```swift -super.init(tableViewStyle: .Plain) -``` - -or the `UICollectionView` version: -##### Obj-C -```objc -[super initWithCollectionViewLayout:[UICollectionViewFlowLayout new]] -``` -##### Swift -```swift -super.init(collectionViewLayout: UICollectionViewFlowLayout()) -``` - -or the `UIScrollView` version: -##### Obj-C -```objc -[super initWithScrollView:self.myStrongScrollView] -``` -##### Swift -```swift -super.init(scrollView: self.myStrongScrollView) -``` - -Protocols like `UITableViewDelegate` and `UITableViewDataSource` are already setup for you. You will be able to call whatever delegate and data source methods you need for customising your control. - -Calling `[super init]` will call `[super initWithTableViewStyle:UITableViewStylePlain]` by default. - -### Storyboard - -When using SlackTextViewController with storyboards, instead of overriding the traditional `initWithCoder:` you will need to override any of the two custom methods below. This approach helps preserving the exact same features from the programatic approach, but also limits the edition of the nib of your `SLKTextViewController` subclass since it doesn't layout subviews from the nib (subviews are still initialized and layed out programatically). - -if you wish to use the `UITableView` version, call: -##### Obj-C -```objc -+ (UITableViewStyle)tableViewStyleForCoder:(NSCoder *)decoder -{ - return UITableViewStylePlain; -} -``` -##### Swift -```swift -override class func tableViewStyleForCoder(decoder: NSCoder) -> UITableViewStyle { - return .Plain -} -``` - -or the `UICollectionView` version: -##### Obj-C -```objc -+ (UICollectionViewLayout *)collectionViewLayoutForCoder:(NSCoder *)decoder -{ - return [UICollectionViewFlowLayout new]; -} -``` -##### Swift -```swift -override class func collectionViewLayoutForCoder(decoder: NSCoder) -> UICollectionViewLayout { - return UICollectionViewFlowLayout() -} -``` - -### Sample Project - -Check out the sample project, everything is demo'd there. -There are 2 main examples (different targets) for testing the programatic and storyboard approaches, and a Swift example. Most of the features are implemented for you to quickly start using them. - -Feel free to contribute! - - -## Features - - -### Growing Text View - -![Growing](Screenshots/screenshot_auto-expanding.png) - -The text view expands automatically when a new line is required, until it reaches its `maxNumberOfLines`value. You may change this property's value in the textView. - -By default, the number of lines is set to best fit each device dimensions: -- iPhone 4 (<=480pts): 4 lines -- iPhone 5/6 (>=568pts): 6 lines -- iPad (>=768pts): 8 lines - -On iPhone devices, in landscape orientation, the maximum number of lines is changed to fit the available space. - - -### Inverted Mode - -Some layouts may require to show from bottom to top and new subviews are inserted from the bottom. To enable this, you must use the `inverted` flag property (default is `YES`/`true`). This will actually invert the entire ScrollView object. Make sure to apply the same transformation to every subview. In the case of UITableView, the best place for adjusting the transformation is in its data source methods like: -##### Obj-C -```objc -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:kCellIdentifier]; - cell.transform = self.tableView.transform; -} -``` -##### Swift -```swift -override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - - if let cell = tableView.dequeueReusableCellWithIdentifier(kCellIdentifier) { - cell.transform = self.tableView.transform - } -} -``` - - -### Autocompletion - -We use autocompletion for many things: names, channels, emoji, and more. - -![Autocompletion](Screenshots/screenshot_auto-completion.png) - -To set up autocompletion in your app, follow these simple steps: - -#### 1. Registration -You must first register all the prefixes you'd like to support for autocompletion detection: -##### Obj-C -```objc -[self registerPrefixesForAutoCompletion:@[@"#"]]; -``` -##### Swift -```swift -self.registerPrefixesForAutoCompletion(["@", "#"]) -``` - -#### 2. Processing -Every time a new character is inserted in the text view, the nearest word to the caret will be processed and verified if it contains any of the registered prefixes. - -Once the prefix has been detected, `didChangeAutoCompletionPrefix:andWord:` will be called. This is the perfect place to populate your data source and show/hide the autocompletion view. So you must override it in your subclass, to be able to perform additional tasks. Default returns NO. -##### Obj-C -```objc -- (void)didChangeAutoCompletionPrefix:(NSString *)prefix andWord:(NSString *)word -{ - NSArray *array = [NSArray arrayWithArray:self.channels]; - - if ([prefix isEqualToString:@"#"] && word.length > 0) { - self.searchResult = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self BEGINSWITH[c]", word]]; - } - - BOOL show = (self.searchResult.count > 0); - - [self showAutoCompletionView:show]; -} -``` -##### Swift -```swift -override func didChangeAutoCompletionPrefix(prefix: String, andWord word: String) { - - let array: NSArray = self.channels - - if prefix == "#" && word.characters.count > 0 { - self.searchResult = array.filteredArrayUsingPredicate(NSPredicate(format: "self BEGINSWITH[c] %@", word)) - } - - let show = (self.searchResult.count > 0) - - self.showAutoCompletionView(show) -} -``` - -The autocompletion view is a `UITableView` instance, so you will need to use `UITableViewDataSource` to populate its cells. You have complete freedom for customizing the cells. - -You don't need to call `reloadData` yourself, since it will be invoked automatically right after calling the `showAutoCompletionView` method. - -#### 3. Layout - -The maximum height of the autocompletion view is set to 140 pts by default. You can update this value anytime, so the view automatically adjusts based on the amount of displayed cells. -##### Obj-C -```objc -- (CGFloat)heightForAutoCompletionView -{ - CGFloat cellHeight = 34.0; - return cellHeight*self.searchResult.count; -} -``` -##### Swift -```swift -override func heightForAutoCompletionView() -> CGFloat { - let cellHeight:CGFloat = 34 - return cellHeight * CGFloat(self.searchResult.count) -} -``` - -#### 4. Confirmation - -If the user selects any autocompletion view cell on `tableView:didSelectRowAtIndexPath:`, you must call `acceptAutoCompletionWithString:` to commit autocompletion. That method expects a string matching the selected item, that you would like to be inserted in the text view. -##### Obj-C -```objc -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - if ([tableView isEqual:self.autoCompletionView]) { - - NSMutableString *item = [self.searchResult[indexPath.row] mutableCopy]; - [item appendString:@" "]; // Adding a space helps dismissing the auto-completion view - - [self acceptAutoCompletionWithString:item keepPrefix:YES]; - } -} -``` -##### Swift -```swift -override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { - - if tableView.isEqual(tableView) { - var item = self.searchResult[indexPath.row] - item += " " // Adding a space helps dismissing the auto-completion view - - self.acceptAutoCompletionWithString(item) - } -} -``` - -The autocompletion view will automatically be dismissed and the chosen string will be inserted in the text view, replacing the detected prefix and word. - -You can always call `cancelAutoCompletion` to exit the autocompletion mode and refresh the UI. - - -### Edit Mode - -![Edit Mode](Screenshots/screenshot_edit-mode.png) - -To enable edit mode, you simply need to call `editText:`, and the text input will switch to edit mode, removing both left and right buttons, extending the input bar a bit higher with "Accept" and "Cancel" buttons. Both of this buttons are accessible in the `SLKTextInputbar` instance for customisation. - -To capture the "Accept" or "Cancel" events, you must override the following methods. -##### Obj-C -```objc -- (void)didCommitTextEditing:(id)sender -{ - NSString *message = [self.textView.text copy]; - - [self.messages removeObjectAtIndex:0]; - [self.messages insertObject:message atIndex:0]; - [self.tableView reloadData]; - - [super didCommitTextEditing:sender]; -} - -- (void)didCancelTextEditing:(id)sender -{ - [super didCancelTextEditing:sender]; -} -``` -##### Swift -```swift -override func didCommitTextEditing(sender: AnyObject) { - - let message:String = self.textView.text - - self.messages.removeAtIndex(0) - self.messages.insert(message, atIndex: 0) - - self.tableView!.reloadData() - - super.didCommitTextEditing(sender) -} - -override func didCancelTextEditing(sender: AnyObject) { - - super.didCancelTextEditing(sender) -} -``` - -Notice that you must call `super` at some point, so the text input exits the edit mode, re-adjusting the layout and clearing the text view. -Use the `editing` property to know if the editing mode is on. - - -### Markdown Formatting - -![Markdown Formatting](Screenshots/screenshot_markdown-formatting.png) - -You can register markdown formatting symbols so they can easily be used to wrap a text selection, with the help of the native contextual menu, aka `UIMenuController`. This feature doesn't take care of the rendering of the markdown: it's sole purpose is to ease the formatting tools to the user. -Optionally, you can enable `autoCompleteFormatting` so any pending markdown closure symbol can be added automatically after double tapping on the keyboard spacebar, just like the native gesture to add a sentence period. The sentence period is still being added as a fallback. - -![Markdown Formatting Animated](Screenshots/screenshot_markdown-formatting.gif) - - -#### 1. Registration - -You must first register the formatting symbol and assign a title string to be used in the menu controller item. -##### Obj-C -```objc -[self.textView registerMarkdownFormattingSymbol:@"*" withTitle:@"Bold"]; -``` -##### Swift -```swift -self.textView.registerMarkdownFormattingSymbol("*", withTitle: "Bold") -``` - -#### 2. Customisation - -Futher more, you can customise some of the behavior for special formatting cases, using the `UITextViewDelegate` methods. -In the following example, we don't present the Quote formatting in the contextual menu when the text selection isn't a paragraph. -##### Obj-C -```objc -- (BOOL)textView:(SLKTextView *)textView shouldOfferFormattingForSymbol:(NSString *)symbol -{ - if ([symbol isEqualToString:@">"]) { - - NSRange selection = textView.selectedRange; - - // The Quote formatting only applies new paragraphs - if (selection.location == 0 && selection.length > 0) { - return YES; - } - - // or older paragraphs too - NSString *prevString = [textView.text substringWithRange:NSMakeRange(selection.location-1, 1)]; - - if ([[NSCharacterSet newlineCharacterSet] characterIsMember:[prevString characterAtIndex:0]]) { - return YES; - } - - return NO; - } - - return [super textView:textView shouldOfferFormattingForSymbol:symbol]; -} -``` - -In this other method implementation, we don't want to allow auto-completion for the Quote formatting since it doesn't require a closure. -##### Obj-C -```objc -- (BOOL)textView:(SLKTextView *)textView shouldInsertSuffixForFormattingWithSymbol:(NSString *)symbol prefixRange:(NSRange)prefixRange -{ - if ([symbol isEqualToString:@">"]) { - return NO; - } - - return [super textView:textView shouldInsertSuffixForFormattingWithSymbol:symbol prefixRange:prefixRange]; -} -``` - - -### Typing Indicator - -![Typing Indicator](Screenshots/screenshot_typing-indicator.png) - -Optionally, you can enable a simple typing indicator, which will be displayed right above the text input. It shows the name of the people that are typing, and if more than 2, it will display "Several are typing" message. - -To enable the typing indicator, just call: -##### Obj-C -```objc -[self.typingIndicatorView insertUsername:@"John"]; -``` -##### Swift -```swift -self.typingIndicatorView?.insertUsername("John") -``` - -and the view will automatically be animated on top of the text input. After a default interval of 6 seconds, if the same name hasn't been assigned once more, the view will be dismissed with animation. - -You can remove names from the list by calling: -##### Obj-C -```objc -[self.typingIndicatorView removeUsername:@"John"]; -``` -##### Swift -```swift -self.typingIndicatorView?.removeUsername("John") -``` - -You can also dismiss it by calling: -##### Obj-C -```objc -[self.typingIndicatorView dismissIndicator]; -``` -##### Swift -```swift -self.typingIndicatorView?.dismissIndicator() -``` - -### Panning Gesture - -Dismissing the keyboard with a panning gesture is enabled by default with the `keyboardPanningEnabled` property. You can always disable it if you'd like. You can extend the `verticalPanGesture` behaviors with the `UIGestureRecognizerDelegate` methods. - - -### Hideable TextInputbar - -Sometimes you may need to hide the text input bar. -Very similar to `UINavigationViewController`'s API, simply do: -##### Obj-C -```objc -[self setTextInputbarHidden:YES animated:YES]; -``` -##### Swift -```swift -self.setTextInputbarHidden(true, animated: true) -``` - - -### Shake Gesture - -![Shake Gesture](Screenshots/screenshot_shake-undo.png) - -A shake gesture to clear text is enabled by default with the `undoShakingEnabled` property. - -You can optionally override `willRequestUndo`, to implement your UI to ask the users if he would like to clean the text view's text. If there is not text entered, the method will not be called. - -If you don't override `willRequestUndo` and `undoShakingEnabled` is set to `YES`/`true`, a system alert will be shown. - - -### External Keyboard - -There a few basic key commands enabled by default: -- cmd + z -> undo -- shift + cmd + z -> redo -- return key -> calls `didPressRightButton:`, or `didCommitTextEditing:` if in edit mode -- shift/cmd + return key -> line break -- escape key -> exits edit mode, or auto-completion mode, or dismisses the keyboard -- up & down arrows -> vertical cursor movement - -To add additional key commands, simply override `keyCommands` and append `super`'s array. -##### Obj-C -```objc -- (NSArray *)keyCommands -{ - NSMutableArray *commands = [NSMutableArray arrayWithArray:[super keyCommands]]; - - // Edit last message - [commands addObject:[UIKeyCommand keyCommandWithInput:UIKeyInputUpArrow - modifierFlags:0 - action:@selector(editLastMessage:)]]; - - return commands; -} -``` -##### Swift -```swift -override var keyCommands: [UIKeyCommand]? { - - var commands = super.keyCommands - - // Edit last message - let command = UIKeyCommand(input: UIKeyInputUpArrow, modifierFlags: .Command, action: "editLastMessage:") - commands?.append(command) - - return commands -} -``` - -There are also a set of useful flags for keyboard special detections such as `isExternalKeyboardDetected`, `isKeyboardUndocked`, `typingSuggestionEnabled` and `isTrackpadEnabled` (iOS 9 only) - - -### Dynamic Type - -Dynamic Type is enabled by default with the `dynamicTypeEnabled` property. You can always disable it if you'd like, but the text input bar would still adjust to best fit the font size of the text view. - -![Dynamic-Type](Screenshots/screenshot_dynamic-type.png) - - -### Xcode Templates - -![Template](Screenshots/screenshot_template.png) - -We have prepared a set of useful Xcode templates so you can quickly start using SlackTextViewController. - -To install them, open up your terminal and type: -```bash -sh ./SlackTextViewController/File\ Templates/install.sh -``` - -These templates are also available in [Alcatraz](https://github.com/alcatraz/Alcatraz). diff --git a/Example/Pods/SlackTextViewController/Source/SLKInputAccessoryView.h b/Example/Pods/SlackTextViewController/Source/SLKInputAccessoryView.h deleted file mode 100644 index a7cb20e2..00000000 --- a/Example/Pods/SlackTextViewController/Source/SLKInputAccessoryView.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import - -@interface SLKInputAccessoryView : UIView - -/* The system keyboard view used as reference. */ -@property (nonatomic, weak, readonly) UIView *_Nullable keyboardViewProxy; - -@end \ No newline at end of file diff --git a/Example/Pods/SlackTextViewController/Source/SLKInputAccessoryView.m b/Example/Pods/SlackTextViewController/Source/SLKInputAccessoryView.m deleted file mode 100644 index 0e1727b9..00000000 --- a/Example/Pods/SlackTextViewController/Source/SLKInputAccessoryView.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import "SLKInputAccessoryView.h" - -#import "SLKUIConstants.h" - -@implementation SLKInputAccessoryView - -#pragma mark - Super Overrides - -- (void)willMoveToSuperview:(UIView *)newSuperview -{ - if (!SLK_IS_IOS9_AND_HIGHER) { - _keyboardViewProxy = newSuperview; - } -} - -@end \ No newline at end of file diff --git a/Example/Pods/SlackTextViewController/Source/SLKTextInput+Implementation.m b/Example/Pods/SlackTextViewController/Source/SLKTextInput+Implementation.m deleted file mode 100644 index f985af69..00000000 --- a/Example/Pods/SlackTextViewController/Source/SLKTextInput+Implementation.m +++ /dev/null @@ -1,153 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import "SLKTextInput.h" - -/** - Implementing SLKTextInput methods in a generic NSObject helps reusing the same logic for any SLKTextInput conformant class. - This is the closest and cleanest technique to extend protocol's default implementations, like you'd do in Swift. - */ -@interface NSObject (SLKTextInput) -@end - -@implementation NSObject (SLKTextInput) - -#pragma mark - Public Methods - -- (void)lookForPrefixes:(NSSet *)prefixes completion:(void (^)(NSString *prefix, NSString *word, NSRange wordRange))completion -{ - if (![self conformsToProtocol:@protocol(SLKTextInput)]) { - return; - } - - NSAssert([prefixes isKindOfClass:[NSSet class]], @"You must provide a set containing String prefixes."); - NSAssert(completion != nil, @"You must provide a non-nil completion block."); - - // Skip when there is no prefixes to look for. - if (prefixes.count == 0) { - return; - } - - NSRange wordRange; - NSString *word = [self wordAtCaretRange:&wordRange]; - - if (word.length > 0) { - for (NSString *prefix in prefixes) { - if ([word hasPrefix:prefix]) { - - if (completion) { - completion(prefix, word, wordRange); - } - - return; - } - } - } - - // Fallback to an empty callback - if (completion) { - completion(nil, nil, NSMakeRange(0,0)); - } -} - -- (NSString *)wordAtCaretRange:(NSRangePointer)range -{ - return [self wordAtRange:[self slk_caretRange] rangeInText:range]; -} - -- (NSString *)wordAtRange:(NSRange)range rangeInText:(NSRangePointer)rangePointer -{ - if (![self conformsToProtocol:@protocol(SLKTextInput)]) { - return nil; - } - - NSInteger location = range.location; - - if (location == NSNotFound) { - return nil; - } - - NSString *text = [self slk_text]; - - // Aborts in case minimum requieres are not fufilled - if (text.length == 0 || location < 0 || (range.location+range.length) > text.length) { - *rangePointer = NSMakeRange(0, 0); - return nil; - } - - NSString *leftPortion = [text substringToIndex:location]; - NSArray *leftComponents = [leftPortion componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - NSString *leftWordPart = [leftComponents lastObject]; - - NSString *rightPortion = [text substringFromIndex:location]; - NSArray *rightComponents = [rightPortion componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - NSString *rightPart = [rightComponents firstObject]; - - if (location > 0) { - NSString *characterBeforeCursor = [text substringWithRange:NSMakeRange(location-1, 1)]; - NSRange whitespaceRange = [characterBeforeCursor rangeOfCharacterFromSet:[NSCharacterSet whitespaceCharacterSet]]; - - if (whitespaceRange.length == 1) { - // At the start of a word, just use the word behind the cursor for the current word - *rangePointer = NSMakeRange(location, rightPart.length); - - return rightPart; - } - } - - // In the middle of a word, so combine the part of the word before the cursor, and after the cursor to get the current word - *rangePointer = NSMakeRange(location-leftWordPart.length, leftWordPart.length+rightPart.length); - - NSString *word = [leftWordPart stringByAppendingString:rightPart]; - NSString *linebreak = @"\n"; - - // If a break is detected, return the last component of the string - if ([word rangeOfString:linebreak].location != NSNotFound) { - *rangePointer = [text rangeOfString:word]; - word = [[word componentsSeparatedByString:linebreak] lastObject]; - } - - return word; -} - - -#pragma mark - Private Methods - -- (NSString *)slk_text -{ - if (![self conformsToProtocol:@protocol(SLKTextInput)]) { - return nil; - } - - idinput = (id)self; - - UITextRange *textRange = [input textRangeFromPosition:input.beginningOfDocument toPosition:input.endOfDocument]; - return [input textInRange:textRange]; -} - -- (NSRange)slk_caretRange -{ - if (![self conformsToProtocol:@protocol(SLKTextInput)]) { - return NSMakeRange(0,0); - } - - idinput = (id)self; - - UITextPosition *beginning = input.beginningOfDocument; - - UITextRange *selectedRange = input.selectedTextRange; - UITextPosition *selectionStart = selectedRange.start; - UITextPosition *selectionEnd = selectedRange.end; - - const NSInteger location = [input offsetFromPosition:beginning toPosition:selectionStart]; - const NSInteger length = [input offsetFromPosition:selectionStart toPosition:selectionEnd]; - - return NSMakeRange(location, length); -} - -@end diff --git a/Example/Pods/SlackTextViewController/Source/SLKTextInput.h b/Example/Pods/SlackTextViewController/Source/SLKTextInput.h deleted file mode 100644 index cc0c18de..00000000 --- a/Example/Pods/SlackTextViewController/Source/SLKTextInput.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import - -/** - Classes that adopt the SLKTextInput protocol interact with the text input system and thus acquire features such as text processing. - All these methods are already implemented in SLKTextInput+Implementation.m - */ -@protocol SLKTextInput -@optional - -/** - Searches for any matching string prefix at the text input's caret position. When nothing found, the completion block returns nil values. - This implementation is internally performed on a background thread and forwarded to the main thread once completed. - - @param prefixes A set of prefixes to search for. - @param completion A completion block called whenever the text processing finishes, successfuly or not. Required. - */ -- (void)lookForPrefixes:(NSSet *)prefixes - completion:(void (^)(NSString *prefix, NSString *word, NSRange wordRange))completion; - -/** - Finds the word close to the caret's position, if any. - - @param range Returns the range of the found word. - @returns The found word. - */ -- (NSString *)wordAtCaretRange:(NSRangePointer)range; - - -/** - Finds the word close to specific range. - - @param range The range to be used for searching the word. - @param rangePointer Returns the range of the found word. - @returns The found word. - */ -- (NSString *)wordAtRange:(NSRange)range rangeInText:(NSRangePointer)rangePointer; - -@end diff --git a/Example/Pods/SlackTextViewController/Source/SLKTextInputbar.h b/Example/Pods/SlackTextViewController/Source/SLKTextInputbar.h deleted file mode 100644 index 2ca5e0f6..00000000 --- a/Example/Pods/SlackTextViewController/Source/SLKTextInputbar.h +++ /dev/null @@ -1,152 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import - -@class SLKTextView; -@class SLKInputAccessoryView; - -typedef NS_ENUM(NSUInteger, SLKCounterStyle) { - SLKCounterStyleNone, - SLKCounterStyleSplit, - SLKCounterStyleCountdown, - SLKCounterStyleCountdownReversed -}; - -typedef NS_ENUM(NSUInteger, SLKCounterPosition) { - SLKCounterPositionTop, - SLKCounterPositionBottom -}; - -NS_ASSUME_NONNULL_BEGIN - -/** @name A custom tool bar encapsulating messaging controls. */ -@interface SLKTextInputbar : UIToolbar - -/** The centered text input view. - The maximum number of lines is configured by default, to best fit each devices dimensions. - For iPhone 4 (<=480pts): 4 lines - For iPhone 5 & 6 (>=568pts): 6 lines - For iPad (>=768pts): 8 lines - */ -@property (nonatomic, readonly, strong) SLKTextView *textView; - -/** Optional view to host outlets under the text view, adjusting its height based on its subviews. Non-visible by default. Subviews' layout should be configured using auto-layout as well. */ -@property (nonatomic, readonly, strong) UIView *contentView; - -/** The custom input accessory view, used as empty achor view to detect the keyboard frame. */ -@property (nonatomic, readonly, strong) SLKInputAccessoryView *inputAccessoryView; - -/** The left action button action. */ -@property (nonatomic, strong) UIButton *leftButton; - -/** The right action button action. */ -@property (nonatomic, strong) UIButton *rightButton; - -/** YES if the right button should be hidden animatedly in case the text view has no text in it. Default is YES. */ -@property (nonatomic, readwrite) BOOL autoHideRightButton; - -/** YES if animations should have bouncy effects. Default is YES. */ -@property (nonatomic, assign) BOOL bounces; - -/** The inner padding to use when laying out content in the view. Default is {5, 8, 5, 8}. */ -@property (nonatomic, assign) UIEdgeInsets contentInset; - -/** The minimum height based on the intrinsic content size's. */ -@property (nonatomic, readonly) CGFloat minimumInputbarHeight; - -/** The most appropriate height calculated based on the amount of lines of text and other factors. */ -@property (nonatomic, readonly) CGFloat appropriateHeight; - - -#pragma mark - Initialization -///------------------------------------------------ -/// @name Initialization -///------------------------------------------------ - -/** - Initializes a text input bar with a class to be used for the text view - - @param textViewClass The class to be used when creating the text view. May be nil. If provided, the class must be a subclass of SLKTextView - @return An initialized SLKTextInputbar object or nil if the object could not be created. - */ -- (instancetype)initWithTextViewClass:(Class)textViewClass; - - -#pragma mark - Text Editing -///------------------------------------------------ -/// @name Text Editing -///------------------------------------------------ - -/** The view displayed on top if the text input bar, containing the button outlets, when editing is enabled. */ -@property (nonatomic, strong) UIView *editorContentView; - -/** The title label displayed in the middle of the accessoryView. */ -@property (nonatomic, strong) UILabel *editorTitle; - -/** The 'cancel' button displayed left in the accessoryView. */ -@property (nonatomic, strong) UIButton *editorLeftButton; - -/** The 'accept' button displayed right in the accessoryView. */ -@property (nonatomic, strong) UIButton *editorRightButton; - -/** The accessory view's maximum height. Default is 38 pts. */ -@property (nonatomic, assign) CGFloat editorContentViewHeight; - -/** A Boolean value indicating whether the control is in edit mode. */ -@property (nonatomic, getter = isEditing) BOOL editing; - -/** - Verifies if the text can be edited. - - @param text The text to be edited. - @return YES if the text is editable. - */ -- (BOOL)canEditText:(NSString *)text; - -/** - Begins editing the text, by updating the 'editing' flag and the view constraints. - */ -- (void)beginTextEditing; - -/** - End editing the text, by updating the 'editing' flag and the view constraints. - */ -- (void)endTextEdition; - - -#pragma mark - Text Counting -///------------------------------------------------ -/// @name Text Counting -///------------------------------------------------ - -/** The label used to display the character counts. */ -@property (nonatomic, readonly) UILabel *charCountLabel; - -/** The maximum character count allowed. If larger than 0, a character count label will be displayed on top of the right button. Default is 0, which means limitless.*/ -@property (nonatomic, readwrite) NSUInteger maxCharCount; - -/** The character counter formatting. Ignored if maxCharCount is 0. Default is None. */ -@property (nonatomic, assign) SLKCounterStyle counterStyle; - -/** The character counter layout style. Ignored if maxCharCount is 0. Default is SLKCounterPositionTop. */ -@property (nonatomic, assign) SLKCounterPosition counterPosition; - -/** YES if the maxmimum character count has been exceeded. */ -@property (nonatomic, readonly) BOOL limitExceeded; - -/** The normal color used for character counter label. Default is lightGrayColor. */ -@property (nonatomic, strong, readwrite) UIColor *charCountLabelNormalColor; - -/** The color used for character counter label when it has exceeded the limit. Default is redColor. */ -@property (nonatomic, strong, readwrite) UIColor *charCountLabelWarningColor; - -@end - -NS_ASSUME_NONNULL_END - diff --git a/Example/Pods/SlackTextViewController/Source/SLKTextInputbar.m b/Example/Pods/SlackTextViewController/Source/SLKTextInputbar.m deleted file mode 100644 index ca970691..00000000 --- a/Example/Pods/SlackTextViewController/Source/SLKTextInputbar.m +++ /dev/null @@ -1,805 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import "SLKTextInputbar.h" -#import "SLKTextView.h" -#import "SLKInputAccessoryView.h" - -#import "SLKTextView+SLKAdditions.h" -#import "UIView+SLKAdditions.h" - -#import "SLKUIConstants.h" - -NSString * const SLKTextInputbarDidMoveNotification = @"SLKTextInputbarDidMoveNotification"; - -@interface SLKTextInputbar () - -@property (nonatomic, strong) NSLayoutConstraint *textViewBottomMarginC; -@property (nonatomic, strong) NSLayoutConstraint *contentViewHC; -@property (nonatomic, strong) NSLayoutConstraint *leftButtonWC; -@property (nonatomic, strong) NSLayoutConstraint *leftButtonHC; -@property (nonatomic, strong) NSLayoutConstraint *leftMarginWC; -@property (nonatomic, strong) NSLayoutConstraint *leftButtonBottomMarginC; -@property (nonatomic, strong) NSLayoutConstraint *rightButtonWC; -@property (nonatomic, strong) NSLayoutConstraint *rightMarginWC; -@property (nonatomic, strong) NSLayoutConstraint *rightButtonTopMarginC; -@property (nonatomic, strong) NSLayoutConstraint *rightButtonBottomMarginC; -@property (nonatomic, strong) NSLayoutConstraint *editorContentViewHC; -@property (nonatomic, strong) NSArray *charCountLabelVCs; - -@property (nonatomic, strong) UILabel *charCountLabel; - -@property (nonatomic) CGPoint previousOrigin; - -@property (nonatomic, strong) Class textViewClass; - -@property (nonatomic, getter=isHidden) BOOL hidden; // Required override - -@end - -@implementation SLKTextInputbar -@synthesize textView = _textView; -@synthesize contentView = _contentView; -@synthesize inputAccessoryView = _inputAccessoryView; -@synthesize hidden = _hidden; - -#pragma mark - Initialization - -- (instancetype)initWithTextViewClass:(Class)textViewClass -{ - if (self = [super init]) { - self.textViewClass = textViewClass; - [self slk_commonInit]; - } - return self; -} - -- (id)init -{ - if (self = [super init]) { - [self slk_commonInit]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)coder -{ - if (self = [super initWithCoder:coder]) { - [self slk_commonInit]; - } - return self; -} - -- (void)slk_commonInit -{ - self.charCountLabelNormalColor = [UIColor lightGrayColor]; - self.charCountLabelWarningColor = [UIColor redColor]; - - self.autoHideRightButton = YES; - self.editorContentViewHeight = 38.0; - self.contentInset = UIEdgeInsetsMake(5.0, 8.0, 5.0, 8.0); - - // Since iOS 11, it is required to call -layoutSubviews before adding custom subviews - // so private UIToolbar subviews don't interfere on the touch hierarchy - [self layoutSubviews]; - - [self addSubview:self.editorContentView]; - [self addSubview:self.leftButton]; - [self addSubview:self.rightButton]; - [self addSubview:self.textView]; - [self addSubview:self.charCountLabel]; - [self addSubview:self.contentView]; - - [self slk_setupViewConstraints]; - [self slk_updateConstraintConstants]; - - self.counterStyle = SLKCounterStyleNone; - self.counterPosition = SLKCounterPositionTop; - - [self slk_registerNotifications]; - - [self slk_registerTo:self.layer forSelector:@selector(position)]; - [self slk_registerTo:self.leftButton.imageView forSelector:@selector(image)]; - [self slk_registerTo:self.rightButton.titleLabel forSelector:@selector(font)]; -} - - -#pragma mark - UIView Overrides - -- (void)layoutIfNeeded -{ - if (self.constraints.count == 0 || !self.window) { - return; - } - - [self slk_updateConstraintConstants]; - [super layoutIfNeeded]; -} - -- (CGSize)intrinsicContentSize -{ - return CGSizeMake(UIViewNoIntrinsicMetric, [self minimumInputbarHeight]); -} - -+ (BOOL)requiresConstraintBasedLayout -{ - return YES; -} - - -#pragma mark - Getters - -- (SLKTextView *)textView -{ - if (!_textView) { - Class class = self.textViewClass ? : [SLKTextView class]; - - _textView = [[class alloc] init]; - _textView.translatesAutoresizingMaskIntoConstraints = NO; - _textView.font = [UIFont systemFontOfSize:15.0]; - _textView.maxNumberOfLines = [self slk_defaultNumberOfLines]; - - _textView.keyboardType = UIKeyboardTypeTwitter; - _textView.returnKeyType = UIReturnKeyDefault; - _textView.enablesReturnKeyAutomatically = YES; - _textView.scrollIndicatorInsets = UIEdgeInsetsMake(0.0, -1.0, 0.0, 1.0); - _textView.textContainerInset = UIEdgeInsetsMake(8.0, 4.0, 8.0, 0.0); - _textView.layer.cornerRadius = 5.0; - _textView.layer.borderWidth = 0.5; - _textView.layer.borderColor = [UIColor colorWithRed:200.0/255.0 green:200.0/255.0 blue:205.0/255.0 alpha:1.0].CGColor; - } - return _textView; -} - -- (UIView *)contentView -{ - if (!_contentView) { - _contentView = [UIView new]; - _contentView.translatesAutoresizingMaskIntoConstraints = NO; - _contentView.backgroundColor = [UIColor clearColor]; - _contentView.clipsToBounds = YES; - } - return _contentView; -} - -- (SLKInputAccessoryView *)inputAccessoryView -{ - if (!_inputAccessoryView) { - _inputAccessoryView = [[SLKInputAccessoryView alloc] initWithFrame:CGRectZero]; - _inputAccessoryView.backgroundColor = [UIColor clearColor]; - _inputAccessoryView.userInteractionEnabled = NO; - } - - return _inputAccessoryView; -} - -- (UIButton *)leftButton -{ - if (!_leftButton) { - _leftButton = [UIButton buttonWithType:UIButtonTypeSystem]; - _leftButton.translatesAutoresizingMaskIntoConstraints = NO; - _leftButton.titleLabel.font = [UIFont systemFontOfSize:15.0]; - } - return _leftButton; -} - -- (UIButton *)rightButton -{ - if (!_rightButton) { - _rightButton = [UIButton buttonWithType:UIButtonTypeSystem]; - _rightButton.translatesAutoresizingMaskIntoConstraints = NO; - _rightButton.titleLabel.font = [UIFont boldSystemFontOfSize:15.0]; - _rightButton.enabled = NO; - - NSString *title = NSLocalizedString(@"Send", nil); - - [_rightButton setTitle:title forState:UIControlStateNormal]; - } - return _rightButton; -} - -- (UIView *)editorContentView -{ - if (!_editorContentView) { - _editorContentView = [UIView new]; - _editorContentView.translatesAutoresizingMaskIntoConstraints = NO; - _editorContentView.backgroundColor = self.backgroundColor; - _editorContentView.clipsToBounds = YES; - _editorContentView.hidden = YES; - - [_editorContentView addSubview:self.editorTitle]; - [_editorContentView addSubview:self.editorLeftButton]; - [_editorContentView addSubview:self.editorRightButton]; - - NSDictionary *views = @{@"label": self.editorTitle, - @"leftButton": self.editorLeftButton, - @"rightButton": self.editorRightButton, - }; - - NSDictionary *metrics = @{@"left" : @(self.contentInset.left), - @"right" : @(self.contentInset.right) - }; - - [_editorContentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(left)-[leftButton(60)]-(left)-[label(>=0)]-(right)-[rightButton(60)]-(<=right)-|" options:0 metrics:metrics views:views]]; - [_editorContentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[leftButton]|" options:0 metrics:metrics views:views]]; - [_editorContentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[rightButton]|" options:0 metrics:metrics views:views]]; - [_editorContentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[label]|" options:0 metrics:metrics views:views]]; - } - return _editorContentView; -} - -- (UILabel *)editorTitle -{ - if (!_editorTitle) { - _editorTitle = [UILabel new]; - _editorTitle.translatesAutoresizingMaskIntoConstraints = NO; - _editorTitle.textAlignment = NSTextAlignmentCenter; - _editorTitle.backgroundColor = [UIColor clearColor]; - _editorTitle.font = [UIFont boldSystemFontOfSize:15.0]; - - NSString *title = NSLocalizedString(@"Editing Message", nil); - - _editorTitle.text = title; - } - return _editorTitle; -} - -- (UIButton *)editorLeftButton -{ - if (!_editorLeftButton) { - _editorLeftButton = [UIButton buttonWithType:UIButtonTypeSystem]; - _editorLeftButton.translatesAutoresizingMaskIntoConstraints = NO; - _editorLeftButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; - _editorLeftButton.titleLabel.font = [UIFont systemFontOfSize:15.0]; - - NSString *title = NSLocalizedString(@"Cancel", nil); - - [_editorLeftButton setTitle:title forState:UIControlStateNormal]; - } - return _editorLeftButton; -} - -- (UIButton *)editorRightButton -{ - if (!_editorRightButton) { - _editorRightButton = [UIButton buttonWithType:UIButtonTypeSystem]; - _editorRightButton.translatesAutoresizingMaskIntoConstraints = NO; - _editorRightButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight; - _editorRightButton.titleLabel.font = [UIFont boldSystemFontOfSize:15.0]; - _editorRightButton.enabled = NO; - - NSString *title = NSLocalizedString(@"Save", nil); - - [_editorRightButton setTitle:title forState:UIControlStateNormal]; - } - return _editorRightButton; -} - -- (UILabel *)charCountLabel -{ - if (!_charCountLabel) { - _charCountLabel = [UILabel new]; - _charCountLabel.translatesAutoresizingMaskIntoConstraints = NO; - _charCountLabel.backgroundColor = [UIColor clearColor]; - _charCountLabel.textAlignment = NSTextAlignmentRight; - _charCountLabel.font = [UIFont systemFontOfSize:11.0]; - - _charCountLabel.hidden = NO; - } - return _charCountLabel; -} - -- (BOOL)isHidden -{ - return _hidden; -} - -- (CGFloat)minimumInputbarHeight -{ - CGFloat minimumHeight = self.textView.intrinsicContentSize.height; - minimumHeight += self.contentInset.top; - minimumHeight += self.slk_bottomMargin; - - return minimumHeight; -} - -- (CGFloat)appropriateHeight -{ - CGFloat height = 0.0; - CGFloat minimumHeight = [self minimumInputbarHeight]; - - if (self.textView.numberOfLines == 1) { - height = minimumHeight; - } - else if (self.textView.numberOfLines < self.textView.maxNumberOfLines) { - height = [self slk_inputBarHeightForLines:self.textView.numberOfLines]; - } - else { - height = [self slk_inputBarHeightForLines:self.textView.maxNumberOfLines]; - } - - if (height < minimumHeight) { - height = minimumHeight; - } - - if (self.isEditing) { - height += self.editorContentViewHeight; - } - - return roundf(height); -} - -- (BOOL)limitExceeded -{ - NSString *text = [self.textView.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - - if (self.maxCharCount > 0 && text.length > self.maxCharCount) { - return YES; - } - return NO; -} - -- (CGFloat)slk_inputBarHeightForLines:(NSUInteger)numberOfLines -{ - CGFloat height = self.textView.intrinsicContentSize.height; - height -= self.textView.font.lineHeight; - height += roundf(self.textView.font.lineHeight*numberOfLines); - height += self.contentInset.top; - height += self.slk_bottomMargin; - - return height; -} - -- (CGFloat)slk_bottomMargin -{ - CGFloat margin = self.contentInset.bottom; - margin += self.slk_contentViewHeight; - - return margin; -} - -- (CGFloat)slk_contentViewHeight -{ - if (!self.editing) { - return CGRectGetHeight(self.contentView.frame); - } - - return 0.0; -} - -- (CGFloat)slk_appropriateRightButtonWidth -{ - if (self.autoHideRightButton) { - if (self.textView.text.length == 0) { - return 0.0; - } - } - - return [self.rightButton intrinsicContentSize].width; -} - -- (CGFloat)slk_appropriateRightButtonMargin -{ - if (self.autoHideRightButton) { - if (self.textView.text.length == 0) { - return 0.0; - } - } - - return self.contentInset.right; -} - -- (NSUInteger)slk_defaultNumberOfLines -{ - if (SLK_IS_IPAD) { - return 8; - } - else if (SLK_IS_IPHONE4) { - return 4; - } - else { - return 6; - } -} - - -#pragma mark - Setters - -- (void)setBackgroundColor:(UIColor *)color -{ - self.barTintColor = color; - - self.editorContentView.backgroundColor = color; -} - -- (void)setAutoHideRightButton:(BOOL)hide -{ - if (self.autoHideRightButton == hide) { - return; - } - - _autoHideRightButton = hide; - - self.rightButtonWC.constant = [self slk_appropriateRightButtonWidth]; - self.rightMarginWC.constant = [self slk_appropriateRightButtonMargin]; - - [self layoutIfNeeded]; -} - -- (void)setContentInset:(UIEdgeInsets)insets -{ - if (UIEdgeInsetsEqualToEdgeInsets(self.contentInset, insets)) { - return; - } - - if (UIEdgeInsetsEqualToEdgeInsets(self.contentInset, UIEdgeInsetsZero)) { - _contentInset = insets; - return; - } - - _contentInset = insets; - - // Add new constraints - [self removeConstraints:self.constraints]; - [self slk_setupViewConstraints]; - - // Add constant values and refresh layout - [self slk_updateConstraintConstants]; - - [super layoutIfNeeded]; -} - -- (void)setEditing:(BOOL)editing -{ - if (self.isEditing == editing) { - return; - } - - _editing = editing; - _editorContentView.hidden = !editing; - - self.contentViewHC.active = editing; - - [super setNeedsLayout]; - [super layoutIfNeeded]; -} - -- (void)setHidden:(BOOL)hidden -{ - // We don't call super here, since we want to avoid to visually hide the view. - // The hidden render state is handled by the view controller. - - _hidden = hidden; - - if (!self.isEditing) { - self.contentViewHC.active = hidden; - - [super setNeedsLayout]; - [super layoutIfNeeded]; - } -} - -- (void)setCounterPosition:(SLKCounterPosition)counterPosition -{ - if (self.counterPosition == counterPosition && self.charCountLabelVCs) { - return; - } - - // Clears the previous constraints - if (_charCountLabelVCs.count > 0) { - [self removeConstraints:_charCountLabelVCs]; - _charCountLabelVCs = nil; - } - - _counterPosition = counterPosition; - - NSDictionary *views = @{@"rightButton": self.rightButton, - @"charCountLabel": self.charCountLabel - }; - - NSDictionary *metrics = @{@"top" : @(self.contentInset.top), - @"bottom" : @(-self.slk_bottomMargin/2.0) - }; - - // Constraints are different depending of the counter's position type - if (counterPosition == SLKCounterPositionBottom) { - _charCountLabelVCs = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[charCountLabel]-(bottom)-[rightButton]" options:0 metrics:metrics views:views]; - } - else { - _charCountLabelVCs = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(top@750)-[charCountLabel]-(>=0)-|" options:0 metrics:metrics views:views]; - } - - [self addConstraints:self.charCountLabelVCs]; -} - - -#pragma mark - Text Editing - -- (BOOL)canEditText:(NSString *)text -{ - if ((self.isEditing && [self.textView.text isEqualToString:text]) || self.isHidden) { - return NO; - } - - return YES; -} - -- (void)beginTextEditing -{ - if (self.isEditing || self.isHidden) { - return; - } - - self.editing = YES; - - [self slk_updateConstraintConstants]; - - if (!self.isFirstResponder) { - [self layoutIfNeeded]; - } -} - -- (void)endTextEdition -{ - if (!self.isEditing || self.isHidden) { - return; - } - - self.editing = NO; - - [self slk_updateConstraintConstants]; -} - - -#pragma mark - Character Counter - -- (void)slk_updateCounter -{ - NSString *text = [self.textView.text stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]; - NSString *counter = nil; - - if (self.counterStyle == SLKCounterStyleNone) { - counter = [NSString stringWithFormat:@"%lu", (unsigned long)text.length]; - } - if (self.counterStyle == SLKCounterStyleSplit) { - counter = [NSString stringWithFormat:@"%lu/%lu", (unsigned long)text.length, (unsigned long)self.maxCharCount]; - } - if (self.counterStyle == SLKCounterStyleCountdown) { - counter = [NSString stringWithFormat:@"%ld", (long)(text.length - self.maxCharCount)]; - } - if (self.counterStyle == SLKCounterStyleCountdownReversed) - { - counter = [NSString stringWithFormat:@"%ld", (long)(self.maxCharCount - text.length)]; - } - - self.charCountLabel.text = counter; - self.charCountLabel.textColor = [self limitExceeded] ? self.charCountLabelWarningColor : self.charCountLabelNormalColor; -} - - -#pragma mark - Notification Events - -- (void)slk_didChangeTextViewText:(NSNotification *)notification -{ - SLKTextView *textView = (SLKTextView *)notification.object; - - // Skips this it's not the expected textView. - if (![textView isEqual:self.textView]) { - return; - } - - // Updates the char counter label - if (self.maxCharCount > 0) { - [self slk_updateCounter]; - } - - if (self.autoHideRightButton && !self.isEditing) - { - CGFloat rightButtonNewWidth = [self slk_appropriateRightButtonWidth]; - - // Only updates if the width did change - if (self.rightButtonWC.constant == rightButtonNewWidth) { - return; - } - - self.rightButtonWC.constant = rightButtonNewWidth; - self.rightMarginWC.constant = [self slk_appropriateRightButtonMargin]; - [self.rightButton layoutIfNeeded]; // Avoids the right button to stretch when animating the constraint changes - - BOOL bounces = self.bounces && [self.textView isFirstResponder]; - - if (self.window) { - [self slk_animateLayoutIfNeededWithBounce:bounces - options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionBeginFromCurrentState|UIViewAnimationOptionAllowUserInteraction - animations:NULL]; - } - else { - [self layoutIfNeeded]; - } - } -} - -- (void)slk_didChangeTextViewContentSize:(NSNotification *)notification -{ - if (self.maxCharCount > 0) { - BOOL shouldHide = (self.textView.numberOfLines == 1) || self.editing; - self.charCountLabel.hidden = shouldHide; - } -} - -- (void)slk_didChangeContentSizeCategory:(NSNotification *)notification -{ - if (!self.textView.isDynamicTypeEnabled) { - return; - } - - [self layoutIfNeeded]; -} - - -#pragma mark - View Auto-Layout - -- (void)slk_setupViewConstraints -{ - NSDictionary *views = @{@"textView": self.textView, - @"leftButton": self.leftButton, - @"rightButton": self.rightButton, - @"editorContentView": self.editorContentView, - @"charCountLabel": self.charCountLabel, - @"contentView": self.contentView, - }; - - NSDictionary *metrics = @{@"top" : @(self.contentInset.top), - @"left" : @(self.contentInset.left), - @"right" : @(self.contentInset.right), - }; - - [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(left)-[leftButton(0)]-(<=left)-[textView]-(right)-[rightButton(0)]-(right)-|" options:0 metrics:metrics views:views]]; - [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=0)-[leftButton(0)]-(0@750)-|" options:0 metrics:metrics views:views]]; - [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=0)-[rightButton]-(<=0)-|" options:0 metrics:metrics views:views]]; - [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(left@250)-[charCountLabel(<=50@1000)]-(right@750)-|" options:0 metrics:metrics views:views]]; - [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[editorContentView(0)]-(<=top)-[textView(0@999)]-(0)-|" options:0 metrics:metrics views:views]]; - [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[editorContentView]|" options:0 metrics:metrics views:views]]; - [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[contentView]|" options:0 metrics:metrics views:views]]; - [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[contentView(0)]|" options:0 metrics:metrics views:views]]; - - self.textViewBottomMarginC = [self slk_constraintForAttribute:NSLayoutAttributeBottom firstItem:self secondItem:self.textView]; - self.editorContentViewHC = [self slk_constraintForAttribute:NSLayoutAttributeHeight firstItem:self.editorContentView secondItem:nil]; - self.contentViewHC = [self slk_constraintForAttribute:NSLayoutAttributeHeight firstItem:self.contentView secondItem:nil];; - self.contentViewHC.active = NO; // Disabled by default, so the height is calculated with the height of its subviews - - self.leftButtonWC = [self slk_constraintForAttribute:NSLayoutAttributeWidth firstItem:self.leftButton secondItem:nil]; - self.leftButtonHC = [self slk_constraintForAttribute:NSLayoutAttributeHeight firstItem:self.leftButton secondItem:nil]; - self.leftButtonBottomMarginC = [self slk_constraintForAttribute:NSLayoutAttributeBottom firstItem:self secondItem:self.leftButton]; - - self.leftMarginWC = [[self slk_constraintsForAttribute:NSLayoutAttributeLeading] firstObject]; - - self.rightButtonWC = [self slk_constraintForAttribute:NSLayoutAttributeWidth firstItem:self.rightButton secondItem:nil]; - self.rightMarginWC = [[self slk_constraintsForAttribute:NSLayoutAttributeTrailing] firstObject]; - - self.rightButtonTopMarginC = [self slk_constraintForAttribute:NSLayoutAttributeTop firstItem:self.rightButton secondItem:self]; - self.rightButtonBottomMarginC = [self slk_constraintForAttribute:NSLayoutAttributeBottom firstItem:self secondItem:self.rightButton]; -} - -- (void)slk_updateConstraintConstants -{ - CGFloat zero = 0.0; - - self.textViewBottomMarginC.constant = self.slk_bottomMargin; - - if (self.isEditing) - { - self.editorContentViewHC.constant = self.editorContentViewHeight; - - self.leftButtonWC.constant = zero; - self.leftButtonHC.constant = zero; - self.leftMarginWC.constant = zero; - self.leftButtonBottomMarginC.constant = zero; - self.rightButtonWC.constant = zero; - self.rightMarginWC.constant = zero; - } - else { - self.editorContentViewHC.constant = zero; - - CGSize leftButtonSize = [self.leftButton imageForState:self.leftButton.state].size; - - if (leftButtonSize.width > 0) { - self.leftButtonHC.constant = roundf(leftButtonSize.height); - self.leftButtonBottomMarginC.constant = roundf((self.intrinsicContentSize.height - leftButtonSize.height) / 2.0) + self.slk_contentViewHeight / 2.0; - } - - self.leftButtonWC.constant = roundf(leftButtonSize.width); - self.leftMarginWC.constant = (leftButtonSize.width > 0) ? self.contentInset.left : zero; - - self.rightButtonWC.constant = [self slk_appropriateRightButtonWidth]; - self.rightMarginWC.constant = [self slk_appropriateRightButtonMargin]; - - CGFloat rightVerMargin = (self.intrinsicContentSize.height - self.slk_contentViewHeight - self.rightButton.intrinsicContentSize.height) / 2.0; - CGFloat rightVerBottomMargin = rightVerMargin + self.slk_contentViewHeight; - - self.rightButtonTopMarginC.constant = rightVerMargin; - self.rightButtonBottomMarginC.constant = rightVerBottomMargin; - } -} - - -#pragma mark - Observers - -- (void)slk_registerTo:(id)object forSelector:(SEL)selector -{ - if (object) { - [object addObserver:self forKeyPath:NSStringFromSelector(selector) options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL]; - } -} - -- (void)slk_unregisterFrom:(id)object forSelector:(SEL)selector -{ - if (object) { - [object removeObserver:self forKeyPath:NSStringFromSelector(selector)]; - } -} - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context -{ - if ([object isEqual:self.layer] && [keyPath isEqualToString:NSStringFromSelector(@selector(position))]) { - - if (!CGPointEqualToPoint(self.previousOrigin, self.frame.origin)) { - self.previousOrigin = self.frame.origin; - [[NSNotificationCenter defaultCenter] postNotificationName:SLKTextInputbarDidMoveNotification object:self userInfo:@{@"origin": [NSValue valueWithCGPoint:self.previousOrigin]}]; - } - } - else if ([object isEqual:self.leftButton.imageView] && [keyPath isEqualToString:NSStringFromSelector(@selector(image))]) { - - UIImage *newImage = change[NSKeyValueChangeNewKey]; - UIImage *oldImage = change[NSKeyValueChangeOldKey]; - - if (![newImage isEqual:oldImage]) { - [self slk_updateConstraintConstants]; - } - } - else if ([object isEqual:self.rightButton.titleLabel] && [keyPath isEqualToString:NSStringFromSelector(@selector(font))]) { - - [self slk_updateConstraintConstants]; - } - else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - - -#pragma mark - NSNotificationCenter registration - -- (void)slk_registerNotifications -{ - [self slk_unregisterNotifications]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(slk_didChangeTextViewText:) name:UITextViewTextDidChangeNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(slk_didChangeTextViewContentSize:) name:SLKTextViewContentSizeDidChangeNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(slk_didChangeContentSizeCategory:) name:UIContentSizeCategoryDidChangeNotification object:nil]; -} - -- (void)slk_unregisterNotifications -{ - [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextViewTextDidChangeNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:SLKTextViewContentSizeDidChangeNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIContentSizeCategoryDidChangeNotification object:nil]; -} - - -#pragma mark - Lifeterm - -- (void)dealloc -{ - [self slk_unregisterNotifications]; - - [self slk_unregisterFrom:self.layer forSelector:@selector(position)]; - [self slk_unregisterFrom:self.leftButton.imageView forSelector:@selector(image)]; - [self slk_unregisterFrom:self.rightButton.titleLabel forSelector:@selector(font)]; -} - -@end diff --git a/Example/Pods/SlackTextViewController/Source/SLKTextView+SLKAdditions.h b/Example/Pods/SlackTextViewController/Source/SLKTextView+SLKAdditions.h deleted file mode 100644 index 4cc05665..00000000 --- a/Example/Pods/SlackTextViewController/Source/SLKTextView+SLKAdditions.h +++ /dev/null @@ -1,131 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import "SLKTextView.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @name SLKTextView additional features used for SlackTextViewController. */ -@interface SLKTextView (SLKAdditions) - -/** - Clears the text. - - @param clearUndo YES if clearing the text should also clear the undo manager (if enabled). - */ -- (void)slk_clearText:(BOOL)clearUndo; - -/** - Scrolls to the very end of the content size, animated. - - @param animated YES if the scrolling should be animated. - */ -- (void)slk_scrollToBottomAnimated:(BOOL)animated; - -/** - Scrolls to the caret position, animated. - - @param animated YES if the scrolling should be animated. - */ -- (void)slk_scrollToCaretPositonAnimated:(BOOL)animated; - -/** - Inserts a line break at the caret's position. - */ -- (void)slk_insertNewLineBreak; - -/** - Inserts a string at the caret's position. - - @param text The string to be appended to the current text. - */ -- (void)slk_insertTextAtCaretRange:(NSString *)text; - -/** - Insert a string at the caret's position with stylization from the attributes. - - @param text The string to be appended to the current text. - @param attributes The attributes used to stylize the text. - */ -- (void)slk_insertTextAtCaretRange:(NSString *)text - withAttributes:(NSDictionary *)attributes; - -/** - Adds a string to a specific range. - - @param text The string to be appended to the current text. - @param range The range where to insert text. - - @return The range of the newly inserted text. - */ -- (NSRange)slk_insertText:(NSString *)text inRange:(NSRange)range; - -/** - Adds a string to a specific range, with stylization from the attributes. - - @param text The string to be appended to the current text. - @param attributes The attributes used to stylize the text. - @param range The range where to insert text. - @return The range of the newly inserted text. - */ -- (NSRange)slk_insertText:(NSString *)text - withAttributes:(NSDictionary *)attributes - inRange:(NSRange)range; - -/** - Sets the text attributes for the attributed string in the provided range. - - @param attributes The attributes used to style NSAttributedString class. - @param range The range of the text that needs to be stylized by the given attributes. - @return An attributed string. - */ -- (NSAttributedString *)slk_setAttributes:(NSDictionary *)attributes - inRange:(NSRange)range; - -/** - Inserts an attributed string at the caret's position. - - @param attributedText The attributed string to be appended. - */ -- (void)slk_insertAttributedTextAtCaretRange:(NSAttributedString *)attributedText; - -/** - Adds an attributed string to a specific range. - - @param text The string to be appended to the current text. - @param range The range where to insert text. - @return The range of the newly inserted text. - */ -- (NSRange)slk_insertAttributedText:(NSAttributedString *)attributedText inRange:(NSRange)range; - -/** - Removes all attributed string attributes from the text view, for the given range. - - @param range The range to remove the attributes. - */ -- (void)slk_clearAllAttributesInRange:(NSRange)range; - -/** - Returns a default attributed string, using the text view's font and text color. - - @param text The string to be used for creating a new attributed string. - @return An attributed string. - */ -- (NSAttributedString *)slk_defaultAttributedStringForText:(NSString *)text; - -/** - Registers the current text for future undo actions. - - @param description A simple description associated with the Undo or Redo command. - */ -- (void)slk_prepareForUndo:(NSString *)description; - -@end - -NS_ASSUME_NONNULL_END - diff --git a/Example/Pods/SlackTextViewController/Source/SLKTextView+SLKAdditions.m b/Example/Pods/SlackTextViewController/Source/SLKTextView+SLKAdditions.m deleted file mode 100644 index 35747864..00000000 --- a/Example/Pods/SlackTextViewController/Source/SLKTextView+SLKAdditions.m +++ /dev/null @@ -1,185 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import "SLKTextView+SLKAdditions.h" - -@implementation SLKTextView (SLKAdditions) - -- (void)slk_clearText:(BOOL)clearUndo -{ - // Important to call self implementation, as SLKTextView overrides setText: to add additional features. - - [self setAttributedText:nil]; - - if (self.undoManagerEnabled && clearUndo) { - [self.undoManager removeAllActions]; - } -} - -- (void)slk_scrollToCaretPositonAnimated:(BOOL)animated -{ - if (animated) { - [self scrollRangeToVisible:self.selectedRange]; - } - else { - [UIView performWithoutAnimation:^{ - [self scrollRangeToVisible:self.selectedRange]; - }]; - } -} - -- (void)slk_scrollToBottomAnimated:(BOOL)animated -{ - CGRect rect = [self caretRectForPosition:self.selectedTextRange.end]; - rect.size.height += self.textContainerInset.bottom; - - if (animated) { - [self scrollRectToVisible:rect animated:animated]; - } - else { - [UIView performWithoutAnimation:^{ - [self scrollRectToVisible:rect animated:NO]; - }]; - } -} - -- (void)slk_insertNewLineBreak -{ - [self slk_insertTextAtCaretRange:@"\n"]; - - // if the text view cannot expand anymore, scrolling to bottom are not animated to fix a UITextView issue scrolling twice. - BOOL animated = !self.isExpanding; - - //Detected break. Should scroll to bottom if needed. - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.0125 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self slk_scrollToBottomAnimated:animated]; - }); -} - -- (void)slk_insertTextAtCaretRange:(NSString *)text -{ - NSRange range = [self slk_insertText:text inRange:self.selectedRange]; - self.selectedRange = NSMakeRange(range.location, 0); -} - -- (void)slk_insertTextAtCaretRange:(NSString *)text withAttributes:(NSDictionary *)attributes -{ - NSRange range = [self slk_insertText:text withAttributes:attributes inRange:self.selectedRange]; - self.selectedRange = NSMakeRange(range.location, 0); -} - -- (NSRange)slk_insertText:(NSString *)text inRange:(NSRange)range -{ - NSAttributedString *attributedText = [self slk_defaultAttributedStringForText:text]; - - return [self slk_insertAttributedText:attributedText inRange:range]; -} - -- (NSRange)slk_insertText:(NSString *)text withAttributes:(NSDictionary *)attributes inRange:(NSRange)range -{ - NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:attributes]; - - return [self slk_insertAttributedText:attributedText inRange:range]; -} - -- (NSAttributedString *)slk_setAttributes:(NSDictionary *)attributes - inRange:(NSRange)range -{ - NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText]; - - [attributedText setAttributes:attributes range:range]; - [self setAttributedText:attributedText]; - - return self.attributedText; -} - -- (void)slk_insertAttributedTextAtCaretRange:(NSAttributedString *)attributedText -{ - NSRange range = [self slk_insertAttributedText:attributedText inRange:self.selectedRange]; - self.selectedRange = NSMakeRange(range.location, 0); -} - -- (NSRange)slk_insertAttributedText:(NSAttributedString *)attributedText inRange:(NSRange)range -{ - // Skip if the attributed text is empty - if (attributedText.length == 0) { - return NSMakeRange(0, 0); - } - - // Registers for undo management - [self slk_prepareForUndo:@"Attributed text appending"]; - - // Append the new string at the caret position - if (range.length == 0) - { - NSAttributedString *leftAttributedString = [self.attributedText attributedSubstringFromRange:NSMakeRange(0, range.location)]; - - NSAttributedString *rightAttributedString = [self.attributedText attributedSubstringFromRange:NSMakeRange(range.location, self.attributedText.length-range.location)]; - - NSMutableAttributedString *newAttributedText = [NSMutableAttributedString new]; - [newAttributedText appendAttributedString:leftAttributedString]; - [newAttributedText appendAttributedString:attributedText]; - [newAttributedText appendAttributedString:rightAttributedString]; - - [self setAttributedText:newAttributedText]; - range.location += attributedText.length; - - return range; - } - // Some text is selected, so we replace it with the new text - else if (range.location != NSNotFound && range.length > 0) - { - NSMutableAttributedString *mutableAttributeText = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText]; - - [mutableAttributeText replaceCharactersInRange:range withAttributedString:attributedText]; - - [self setAttributedText:mutableAttributeText]; - range.location += self.attributedText.length; - - return range; - } - - // No text has been inserted, but still return the caret range - return self.selectedRange; -} - -- (void)slk_clearAllAttributesInRange:(NSRange)range -{ - NSMutableAttributedString *mutableAttributedText = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText]; - - [mutableAttributedText setAttributes:nil range:range]; - [self setAttributedText:mutableAttributedText]; -} - -- (NSAttributedString *)slk_defaultAttributedStringForText:(NSString *)text -{ - NSMutableDictionary *attributes = [NSMutableDictionary dictionary]; - - if (self.textColor) { - attributes[NSForegroundColorAttributeName] = self.textColor; - } - - if (self.font) { - attributes[NSFontAttributeName] = self.font; - } - - return [[NSAttributedString alloc] initWithString:text attributes:attributes]; -} - -- (void)slk_prepareForUndo:(NSString *)description -{ - if (!self.undoManagerEnabled) { - return; - } - - SLKTextView *prepareInvocation = [self.undoManager prepareWithInvocationTarget:self]; - [prepareInvocation setText:self.text]; - [self.undoManager setActionName:description]; -} - -@end diff --git a/Example/Pods/SlackTextViewController/Source/SLKTextView.h b/Example/Pods/SlackTextViewController/Source/SLKTextView.h deleted file mode 100644 index 05850cb5..00000000 --- a/Example/Pods/SlackTextViewController/Source/SLKTextView.h +++ /dev/null @@ -1,170 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import -#import "SLKTextInput.h" - -typedef NS_OPTIONS(NSUInteger, SLKPastableMediaType) { - SLKPastableMediaTypeNone = 0, - SLKPastableMediaTypePNG = 1 << 0, - SLKPastableMediaTypeJPEG = 1 << 1, - SLKPastableMediaTypeTIFF = 1 << 2, - SLKPastableMediaTypeGIF = 1 << 3, - SLKPastableMediaTypeMOV = 1 << 4, - SLKPastableMediaTypePassbook = 1 << 5, - SLKPastableMediaTypeImages = SLKPastableMediaTypePNG|SLKPastableMediaTypeJPEG|SLKPastableMediaTypeTIFF|SLKPastableMediaTypeGIF, - SLKPastableMediaTypeVideos = SLKPastableMediaTypeMOV, - SLKPastableMediaTypeAll = SLKPastableMediaTypeImages|SLKPastableMediaTypeMOV -}; - -NS_ASSUME_NONNULL_BEGIN - -UIKIT_EXTERN NSString * const SLKTextViewTextWillChangeNotification; -UIKIT_EXTERN NSString * const SLKTextViewContentSizeDidChangeNotification; -UIKIT_EXTERN NSString * const SLKTextViewSelectedRangeDidChangeNotification; -UIKIT_EXTERN NSString * const SLKTextViewDidPasteItemNotification; -UIKIT_EXTERN NSString * const SLKTextViewDidShakeNotification; - -UIKIT_EXTERN NSString * const SLKTextViewPastedItemContentType; -UIKIT_EXTERN NSString * const SLKTextViewPastedItemMediaType; -UIKIT_EXTERN NSString * const SLKTextViewPastedItemData; - -@protocol SLKTextViewDelegate; - -/** @name A custom text input view. */ -@interface SLKTextView : UITextView - -@property (nonatomic, weak) iddelegate; - -/** The placeholder text string. Default is nil. */ -@property (nonatomic, copy) NSString *_Nullable placeholder; - -/** The placeholder color. Default is lightGrayColor. */ -@property (nonatomic, copy) UIColor *_Null_unspecified placeholderColor; - -/** The placeholder's number of lines. Default is 1. */ -@property (nonatomic, readwrite) NSInteger placeholderNumberOfLines; - -/** The placeholder's font. Default is the textView's font. */ -@property (nonatomic, copy, null_resettable) UIFont *placeholderFont; - -/** The maximum number of lines before enabling scrolling. Default is 0 wich means limitless. - If dynamic type is enabled, the maximum number of lines will be calculated proportionally to the user preferred font size. */ -@property (nonatomic, readwrite) NSUInteger maxNumberOfLines; - -/** The current displayed number of lines. */ -@property (nonatomic, readonly) NSUInteger numberOfLines; - -/** The supported media types allowed to be pasted in the text view, such as images or videos. Default is None. */ -@property (nonatomic) SLKPastableMediaType pastableMediaTypes; - -/** YES if the text view is and can still expand it self, depending if the maximum number of lines are reached. */ -@property (nonatomic, readonly) BOOL isExpanding; - -/** YES if quickly refreshed the textview without the intension to dismiss the keyboard. @view -disableQuicktypeBar: for more details. */ -@property (nonatomic, readwrite) BOOL didNotResignFirstResponder; - -/** YES if the magnifying glass is visible. - This feature is deprecated since there are no legit alternatives to detect the magnifying glass. - Open Radar: http://openradar.appspot.com/radar?id=5021485877952512 - */ -@property (nonatomic, getter=isLoupeVisible) BOOL loupeVisible DEPRECATED_ATTRIBUTE; - -/** YES if the keyboard track pad has been recognized. iOS 9 only. */ -@property (nonatomic, readonly, getter=isTrackpadEnabled) BOOL trackpadEnabled; - -/** YES if autocorrection and spell checking are enabled. On iOS8, this property also controls the predictive QuickType bar from being visible. Default is YES. */ -@property (nonatomic, getter=isTypingSuggestionEnabled) BOOL typingSuggestionEnabled; - -/** YES if the text view supports undoing, either using UIMenuController, or with ctrl+z when using an external keyboard. Default is YES. */ -@property (nonatomic, readwrite) BOOL undoManagerEnabled; - -/** YES if the font size should dynamically adapt based on the font sizing option preferred by the user. Default is YES. */ -@property (nonatomic, getter=isDynamicTypeEnabled) BOOL dynamicTypeEnabled; - -/** - Some text view properties don't update when it's already firstResponder (auto-correction, spelling-check, etc.) - To be able to update the text view while still being first responder, requieres to switch quickly from -resignFirstResponder to -becomeFirstResponder. - When doing so, the flag 'didNotResignFirstResponder' is momentarly set to YES before it goes back to -isFirstResponder, to be able to prevent some tasks to be excuted because of UIKeyboard notifications. - - You can also use this method to confirm an auto-correction programatically, before the text view resigns first responder. - */ -- (void)refreshFirstResponder; -- (void)refreshInputViews; - -/** - Notifies the text view that the user pressed any arrow key. This is used to move the cursor up and down while having multiple lines. - */ -- (void)didPressArrowKey:(UIKeyCommand *)keyCommand; - - -#pragma mark - Markdown Formatting - -/** YES if the a markdown closure symbol should be added automatically after double spacebar tap, just like the native gesture to add a sentence period. Default is YES. - This will always be NO if there isn't any registered formatting symbols. - */ -@property (nonatomic, readonly, getter=isFormattingEnabled) BOOL formattingEnabled; - -/** An array of the registered formatting symbols. */ -@property (nonatomic, readonly) NSArray *_Nullable registeredSymbols; - -/** - Registers any string markdown symbol for formatting tooltip, presented after selecting some text. - The symbol must be valid string (i.e: '*', '~', '_', and so on). This also checks if no repeated symbols are inserted, and respects the ordering for the tooltip. - - @param symbol A markdown symbol to be prefixed and sufixed to a text selection. - @param title The tooltip item title for this formatting. - */ -- (void)registerMarkdownFormattingSymbol:(NSString *)symbol - withTitle:(NSString *)title; - - -#pragma mark - External Keyboard Support - -/** - Registers and observes key commands' updates, when the text view is first responder. - Instead of typically overriding UIResponder's -keyCommands method, it is better to use this API for easier and safer implementation of key input detection. - - @param input The keys that must be pressed by the user. Required. - @param modifiers The bit mask of modifier keys that must be pressed. Use 0 if none. - @param title The title to display to the user. Optional. - @param completion A completion block called whenever the key combination is detected. Required. - */ -- (void)observeKeyInput:(NSString *)input - modifiers:(UIKeyModifierFlags)modifiers - title:(NSString *_Nullable)title - completion:(void (^)(UIKeyCommand *keyCommand))completion; - -@end - - -@protocol SLKTextViewDelegate -@optional - -/** - Asks the delegate whether the specified formatting symbol should be displayed in the tooltip. - This is useful to remove some tooltip options when they no longer apply in some context. - For example, Blockquotes formatting requires the symbol to be prefixed at the begining of a paragraph. - - @param textView The text view containing the changes. - @param symbol The formatting symbol to be verified. - @return YES if the formatting symbol should be displayed in the tooltip. Default is YES. - */ -- (BOOL)textView:(SLKTextView *)textView shouldOfferFormattingForSymbol:(NSString *)symbol; - -/** - Asks the delegate whether the specified formatting symbol should be suffixed, to close the formatting wrap. - - @para The prefix range - */ -- (BOOL)textView:(SLKTextView *)textView shouldInsertSuffixForFormattingWithSymbol:(NSString *)symbol prefixRange:(NSRange)prefixRange; - -@end - -NS_ASSUME_NONNULL_END - diff --git a/Example/Pods/SlackTextViewController/Source/SLKTextView.m b/Example/Pods/SlackTextViewController/Source/SLKTextView.m deleted file mode 100644 index 08a43081..00000000 --- a/Example/Pods/SlackTextViewController/Source/SLKTextView.m +++ /dev/null @@ -1,1146 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import "SLKTextView.h" -#import "SLKTextView+SLKAdditions.h" - -#import "SLKUIConstants.h" - -NSString * const SLKTextViewTextWillChangeNotification = @"SLKTextViewTextWillChangeNotification"; -NSString * const SLKTextViewContentSizeDidChangeNotification = @"SLKTextViewContentSizeDidChangeNotification"; -NSString * const SLKTextViewSelectedRangeDidChangeNotification = @"SLKTextViewSelectedRangeDidChangeNotification"; -NSString * const SLKTextViewDidPasteItemNotification = @"SLKTextViewDidPasteItemNotification"; -NSString * const SLKTextViewDidShakeNotification = @"SLKTextViewDidShakeNotification"; - -NSString * const SLKTextViewPastedItemContentType = @"SLKTextViewPastedItemContentType"; -NSString * const SLKTextViewPastedItemMediaType = @"SLKTextViewPastedItemMediaType"; -NSString * const SLKTextViewPastedItemData = @"SLKTextViewPastedItemData"; - -static NSString *const SLKTextViewGenericFormattingSelectorPrefix = @"slk_format_"; - -@interface SLKTextView () - -// The label used as placeholder -@property (nonatomic, strong) UILabel *placeholderLabel; - -// The initial font point size, used for dynamic type calculations -@property (nonatomic) CGFloat initialFontSize; - -// Used for moving the caret up/down -@property (nonatomic) UITextLayoutDirection verticalMoveDirection; -@property (nonatomic) CGRect verticalMoveStartCaretRect; -@property (nonatomic) CGRect verticalMoveLastCaretRect; - -// Used for detecting if the scroll indicator was previously flashed -@property (nonatomic) BOOL didFlashScrollIndicators; - -@property (nonatomic, strong) NSMutableArray *registeredFormattingTitles; -@property (nonatomic, strong) NSMutableArray *registeredFormattingSymbols; -@property (nonatomic, getter=isFormatting) BOOL formatting; - -// The keyboard commands available for external keyboards -@property (nonatomic, strong) NSMutableDictionary *registeredKeyCommands; -@property (nonatomic, strong) NSMutableDictionary *registeredKeyCallbacks; - -@end - -@implementation SLKTextView -@dynamic delegate; - -#pragma mark - Initialization - -- (instancetype)initWithFrame:(CGRect)frame textContainer:(NSTextContainer *)textContainer -{ - if (self = [super initWithFrame:frame textContainer:textContainer]) { - [self slk_commonInit]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)coder -{ - if (self = [super initWithCoder:coder]) { - [self slk_commonInit]; - } - return self; -} - -- (void)slk_commonInit -{ - _pastableMediaTypes = SLKPastableMediaTypeNone; - _dynamicTypeEnabled = YES; - - self.undoManagerEnabled = YES; - - self.editable = YES; - self.selectable = YES; - self.scrollEnabled = YES; - self.scrollsToTop = NO; - self.directionalLockEnabled = YES; - self.dataDetectorTypes = UIDataDetectorTypeNone; - - [self slk_registerNotifications]; - - [self addObserver:self forKeyPath:NSStringFromSelector(@selector(contentSize)) options:NSKeyValueObservingOptionNew context:NULL]; -} - - -#pragma mark - UIView Overrides - -- (CGSize)intrinsicContentSize -{ - CGFloat height = self.font.lineHeight; - height += self.textContainerInset.top + self.textContainerInset.bottom; - - return CGSizeMake(UIViewNoIntrinsicMetric, height); -} - -+ (BOOL)requiresConstraintBasedLayout -{ - return YES; -} - -- (void)layoutIfNeeded -{ - if (!self.window) { - return; - } - - [super layoutIfNeeded]; -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - - self.placeholderLabel.hidden = [self slk_shouldHidePlaceholder]; - - if (!self.placeholderLabel.hidden) { - - [UIView performWithoutAnimation:^{ - self.placeholderLabel.frame = [self slk_placeholderRectThatFits:self.bounds]; - [self sendSubviewToBack:self.placeholderLabel]; - }]; - } -} - - -#pragma mark - Getters - -- (UILabel *)placeholderLabel -{ - if (!_placeholderLabel) { - _placeholderLabel = [UILabel new]; - _placeholderLabel.clipsToBounds = NO; - _placeholderLabel.numberOfLines = 1; - _placeholderLabel.autoresizesSubviews = NO; - _placeholderLabel.font = self.font; - _placeholderLabel.backgroundColor = [UIColor clearColor]; - _placeholderLabel.textColor = [UIColor lightGrayColor]; - _placeholderLabel.hidden = YES; - _placeholderLabel.isAccessibilityElement = NO; - - [self addSubview:_placeholderLabel]; - } - return _placeholderLabel; -} - -- (NSString *)placeholder -{ - return self.placeholderLabel.text; -} - -- (UIColor *)placeholderColor -{ - return self.placeholderLabel.textColor; -} - -- (UIFont *)placeholderFont -{ - return self.placeholderLabel.font; -} - -- (NSUInteger)numberOfLines -{ - CGSize contentSize = self.contentSize; - - CGFloat contentHeight = contentSize.height; - contentHeight -= self.textContainerInset.top + self.textContainerInset.bottom; - - NSUInteger lines = fabs(contentHeight/self.font.lineHeight); - - // This helps preventing the content's height to be larger that the bounds' height - // Avoiding this way to have unnecessary scrolling in the text view when there is only 1 line of content - if (lines == 1 && contentSize.height > self.bounds.size.height) { - contentSize.height = self.bounds.size.height; - self.contentSize = contentSize; - } - - // Let's fallback to the minimum line count - if (lines == 0) { - lines = 1; - } - - return lines; -} - -- (NSUInteger)maxNumberOfLines -{ - NSUInteger numberOfLines = _maxNumberOfLines; - - if (SLK_IS_LANDSCAPE) { - if ((SLK_IS_IPHONE4 || SLK_IS_IPHONE5)) { - numberOfLines = 2.0; // 2 lines max on smaller iPhones - } - else if (SLK_IS_IPHONE) { - numberOfLines /= 2.0; // Half size on larger iPhone - } - } - - if (self.isDynamicTypeEnabled) { - NSString *contentSizeCategory = [[UIApplication sharedApplication] preferredContentSizeCategory]; - CGFloat pointSizeDifference = SLKPointSizeDifferenceForCategory(contentSizeCategory); - - CGFloat factor = pointSizeDifference/self.initialFontSize; - - if (fabs(factor) > 0.75) { - factor = 0.75; - } - - numberOfLines -= floorf(numberOfLines * factor); // Calculates a dynamic number of lines depending of the user preferred font size - } - - return numberOfLines; -} - -- (BOOL)isTypingSuggestionEnabled -{ - return (self.autocorrectionType == UITextAutocorrectionTypeNo) ? NO : YES; -} - -- (BOOL)isFormattingEnabled -{ - return (self.registeredFormattingSymbols.count > 0) ? YES : NO; -} - -// Returns only a supported pasted item -- (id)slk_pastedItem -{ - NSString *contentType = [self slk_pasteboardContentType]; - NSData *data = [[UIPasteboard generalPasteboard] dataForPasteboardType:contentType]; - - if (data && [data isKindOfClass:[NSData class]]) - { - SLKPastableMediaType mediaType = SLKPastableMediaTypeFromNSString(contentType); - - NSDictionary *userInfo = @{SLKTextViewPastedItemContentType: contentType, - SLKTextViewPastedItemMediaType: @(mediaType), - SLKTextViewPastedItemData: data}; - return userInfo; - } - if ([[UIPasteboard generalPasteboard] URL]) { - return [[[UIPasteboard generalPasteboard] URL] absoluteString]; - } - if ([[UIPasteboard generalPasteboard] string]) { - return [[UIPasteboard generalPasteboard] string]; - } - - return nil; -} - -// Checks if any supported media found in the general pasteboard -- (BOOL)slk_isPasteboardItemSupported -{ - if ([self slk_pasteboardContentType].length > 0) { - return YES; - } - return NO; -} - -- (NSString *)slk_pasteboardContentType -{ - NSArray *pasteboardTypes = [[UIPasteboard generalPasteboard] pasteboardTypes]; - NSMutableArray *subpredicates = [NSMutableArray new]; - - for (NSString *type in [self slk_supportedMediaTypes]) { - [subpredicates addObject:[NSPredicate predicateWithFormat:@"SELF == %@", type]]; - } - - return [[pasteboardTypes filteredArrayUsingPredicate:[NSCompoundPredicate orPredicateWithSubpredicates:subpredicates]] firstObject]; -} - -- (NSArray *)slk_supportedMediaTypes -{ - if (self.pastableMediaTypes == SLKPastableMediaTypeNone) { - return nil; - } - - NSMutableArray *types = [NSMutableArray new]; - - if (self.pastableMediaTypes & SLKPastableMediaTypePNG) { - [types addObject:NSStringFromSLKPastableMediaType(SLKPastableMediaTypePNG)]; - } - if (self.pastableMediaTypes & SLKPastableMediaTypeJPEG) { - [types addObject:NSStringFromSLKPastableMediaType(SLKPastableMediaTypeJPEG)]; - } - if (self.pastableMediaTypes & SLKPastableMediaTypeTIFF) { - [types addObject:NSStringFromSLKPastableMediaType(SLKPastableMediaTypeTIFF)]; - } - if (self.pastableMediaTypes & SLKPastableMediaTypeGIF) { - [types addObject:NSStringFromSLKPastableMediaType(SLKPastableMediaTypeGIF)]; - } - if (self.pastableMediaTypes & SLKPastableMediaTypeMOV) { - [types addObject:NSStringFromSLKPastableMediaType(SLKPastableMediaTypeMOV)]; - } - if (self.pastableMediaTypes & SLKPastableMediaTypePassbook) { - [types addObject:NSStringFromSLKPastableMediaType(SLKPastableMediaTypePassbook)]; - } - - if (self.pastableMediaTypes & SLKPastableMediaTypeImages) { - [types addObject:NSStringFromSLKPastableMediaType(SLKPastableMediaTypeImages)]; - } - - return types; -} - -NSString *NSStringFromSLKPastableMediaType(SLKPastableMediaType type) -{ - if (type == SLKPastableMediaTypePNG) { - return @"public.png"; - } - if (type == SLKPastableMediaTypeJPEG) { - return @"public.jpeg"; - } - if (type == SLKPastableMediaTypeTIFF) { - return @"public.tiff"; - } - if (type == SLKPastableMediaTypeGIF) { - return @"com.compuserve.gif"; - } - if (type == SLKPastableMediaTypeMOV) { - return @"com.apple.quicktime"; - } - if (type == SLKPastableMediaTypePassbook) { - return @"com.apple.pkpass"; - } - if (type == SLKPastableMediaTypeImages) { - return @"com.apple.uikit.image"; - } - - return nil; -} - -SLKPastableMediaType SLKPastableMediaTypeFromNSString(NSString *string) -{ - if ([string isEqualToString:NSStringFromSLKPastableMediaType(SLKPastableMediaTypePNG)]) { - return SLKPastableMediaTypePNG; - } - if ([string isEqualToString:NSStringFromSLKPastableMediaType(SLKPastableMediaTypeJPEG)]) { - return SLKPastableMediaTypeJPEG; - } - if ([string isEqualToString:NSStringFromSLKPastableMediaType(SLKPastableMediaTypeTIFF)]) { - return SLKPastableMediaTypeTIFF; - } - if ([string isEqualToString:NSStringFromSLKPastableMediaType(SLKPastableMediaTypeGIF)]) { - return SLKPastableMediaTypeGIF; - } - if ([string isEqualToString:NSStringFromSLKPastableMediaType(SLKPastableMediaTypeMOV)]) { - return SLKPastableMediaTypeMOV; - } - if ([string isEqualToString:NSStringFromSLKPastableMediaType(SLKPastableMediaTypePassbook)]) { - return SLKPastableMediaTypePassbook; - } - if ([string isEqualToString:NSStringFromSLKPastableMediaType(SLKPastableMediaTypeImages)]) { - return SLKPastableMediaTypeImages; - } - return SLKPastableMediaTypeNone; -} - -- (BOOL)isExpanding -{ - if (self.numberOfLines >= self.maxNumberOfLines) { - return YES; - } - return NO; -} - -- (BOOL)slk_shouldHidePlaceholder -{ - if (self.placeholder.length == 0 || self.text.length > 0) { - return YES; - } - return NO; -} - -- (CGRect)slk_placeholderRectThatFits:(CGRect)bounds -{ - CGFloat padding = self.textContainer.lineFragmentPadding; - - CGRect rect = CGRectZero; - rect.size.height = [self.placeholderLabel sizeThatFits:bounds.size].height; - rect.size.width = self.textContainer.size.width - padding*2.0; - rect.origin = UIEdgeInsetsInsetRect(bounds, self.textContainerInset).origin; - rect.origin.x += padding; - - return rect; -} - - -#pragma mark - Setters - -- (void)setPlaceholder:(NSString *)placeholder -{ - self.placeholderLabel.text = placeholder; - self.accessibilityLabel = placeholder; - - [self setNeedsLayout]; -} - -- (void)setPlaceholderColor:(UIColor *)color -{ - self.placeholderLabel.textColor = color; -} - -- (void)setPlaceholderNumberOfLines:(NSInteger)numberOfLines -{ - self.placeholderLabel.numberOfLines = numberOfLines; - - [self setNeedsLayout]; -} - -- (void)setPlaceholderFont:(UIFont *)placeholderFont -{ - if (!placeholderFont) { - self.placeholderLabel.font = self.font; - } - else { - self.placeholderLabel.font = placeholderFont; - } -} - -- (void)setUndoManagerEnabled:(BOOL)enabled -{ - if (self.undoManagerEnabled == enabled) { - return; - } - - self.undoManager.levelsOfUndo = 10; - [self.undoManager removeAllActions]; - [self.undoManager setActionIsDiscardable:YES]; - - _undoManagerEnabled = enabled; -} - -- (void)setTypingSuggestionEnabled:(BOOL)enabled -{ - if (self.isTypingSuggestionEnabled == enabled) { - return; - } - - self.autocorrectionType = enabled ? UITextAutocorrectionTypeDefault : UITextAutocorrectionTypeNo; - self.spellCheckingType = enabled ? UITextSpellCheckingTypeDefault : UITextSpellCheckingTypeNo; - - [self refreshFirstResponder]; -} - -- (void)setContentOffset:(CGPoint)contentOffset -{ - // At times during a layout pass, the content offset's x value may change. - // Since we only care about vertical offset, let's override its horizontal value to avoid other layout issues. - [super setContentOffset:CGPointMake(0.0, contentOffset.y)]; -} - - -#pragma mark - UITextView Overrides - -- (void)setSelectedRange:(NSRange)selectedRange -{ - [super setSelectedRange:selectedRange]; - - [[NSNotificationCenter defaultCenter] postNotificationName:SLKTextViewSelectedRangeDidChangeNotification object:self userInfo:nil]; -} - -- (void)setSelectedTextRange:(UITextRange *)selectedTextRange -{ - [super setSelectedTextRange:selectedTextRange]; - - [[NSNotificationCenter defaultCenter] postNotificationName:SLKTextViewSelectedRangeDidChangeNotification object:self userInfo:nil]; -} - -- (void)setText:(NSString *)text -{ - // Registers for undo management - [self slk_prepareForUndo:@"Text Set"]; - - if (text) { - [self setAttributedText:[self slk_defaultAttributedStringForText:text]]; - } - else { - [self setAttributedText:nil]; - } - - [[NSNotificationCenter defaultCenter] postNotificationName:UITextViewTextDidChangeNotification object:self]; -} - -- (NSString *)text -{ - return self.attributedText.string; -} - -- (void)setAttributedText:(NSAttributedString *)attributedText -{ - // Registers for undo management - [self slk_prepareForUndo:@"Attributed Text Set"]; - - [super setAttributedText:attributedText]; - - [[NSNotificationCenter defaultCenter] postNotificationName:UITextViewTextDidChangeNotification object:self]; -} - -- (void)setFont:(UIFont *)font -{ - NSString *contentSizeCategory = [[UIApplication sharedApplication] preferredContentSizeCategory]; - - [self setFontName:font.fontName pointSize:font.pointSize withContentSizeCategory:contentSizeCategory]; - - self.initialFontSize = font.pointSize; -} - -- (void)setFontName:(NSString *)fontName pointSize:(CGFloat)pointSize withContentSizeCategory:(NSString *)contentSizeCategory -{ - if (self.isDynamicTypeEnabled) { - pointSize += SLKPointSizeDifferenceForCategory(contentSizeCategory); - } - - UIFont *dynamicFont = [UIFont fontWithName:fontName size:pointSize]; - - [super setFont:dynamicFont]; - - // Updates the placeholder font too - self.placeholderLabel.font = dynamicFont; -} - -- (void)setDynamicTypeEnabled:(BOOL)dynamicTypeEnabled -{ - if (self.isDynamicTypeEnabled == dynamicTypeEnabled) { - return; - } - - _dynamicTypeEnabled = dynamicTypeEnabled; - - NSString *contentSizeCategory = [[UIApplication sharedApplication] preferredContentSizeCategory]; - - [self setFontName:self.font.fontName pointSize:self.initialFontSize withContentSizeCategory:contentSizeCategory]; -} - -- (void)setTextAlignment:(NSTextAlignment)textAlignment -{ - [super setTextAlignment:textAlignment]; - - // Updates the placeholder text alignment too - self.placeholderLabel.textAlignment = textAlignment; -} - - -#pragma mark - UITextInput Overrides - -#ifdef __IPHONE_9_0 -- (void)beginFloatingCursorAtPoint:(CGPoint)point -{ - [super beginFloatingCursorAtPoint:point]; - - _trackpadEnabled = YES; -} - -- (void)updateFloatingCursorAtPoint:(CGPoint)point -{ - [super updateFloatingCursorAtPoint:point]; -} - -- (void)endFloatingCursor -{ - [super endFloatingCursor]; - - _trackpadEnabled = NO; - - // We still need to notify a selection change in the textview after the trackpad is disabled - if (self.delegate && [self.delegate respondsToSelector:@selector(textViewDidChangeSelection:)]) { - [self.delegate textViewDidChangeSelection:self]; - } - - [[NSNotificationCenter defaultCenter] postNotificationName:SLKTextViewSelectedRangeDidChangeNotification object:self userInfo:nil]; -} -#endif - -#pragma mark - UIResponder Overrides - -- (BOOL)canBecomeFirstResponder -{ - [self slk_addCustomMenuControllerItems]; - - return [super canBecomeFirstResponder]; -} - -- (BOOL)becomeFirstResponder -{ - return [super becomeFirstResponder]; -} - -- (BOOL)canResignFirstResponder -{ - // Removes undo/redo items - if (self.undoManagerEnabled) { - [self.undoManager removeAllActions]; - } - - return [super canResignFirstResponder]; -} - -- (BOOL)resignFirstResponder -{ - return [super resignFirstResponder]; -} - -- (BOOL)canPerformAction:(SEL)action withSender:(id)sender -{ - if (self.isFormatting) { - NSString *title = [self slk_formattingTitleFromSelector:action]; - NSString *symbol = [self slk_formattingSymbolWithTitle:title]; - - if (symbol.length > 0) { - if (self.delegate && [self.delegate respondsToSelector:@selector(textView:shouldOfferFormattingForSymbol:)]) { - return [self.delegate textView:self shouldOfferFormattingForSymbol:symbol]; - } - else { - return YES; - } - } - - return NO; - } - - if (action == @selector(delete:)) { - return NO; - } - - if (action == @selector(slk_presentFormattingMenu:)) { - return self.selectedRange.length > 0 ? YES : NO; - } - - if (action == @selector(paste:) && [self slk_isPasteboardItemSupported]) { - return YES; - } - - if (self.undoManagerEnabled) { - if (action == @selector(slk_undo:)) { - if (self.undoManager.undoActionIsDiscardable) { - return NO; - } - return [self.undoManager canUndo]; - } - if (action == @selector(slk_redo:)) { - if (self.undoManager.redoActionIsDiscardable) { - return NO; - } - return [self.undoManager canRedo]; - } - } - - return [super canPerformAction:action withSender:sender]; -} - -- (void)paste:(id)sender -{ - id pastedItem = [self slk_pastedItem]; - - if ([pastedItem isKindOfClass:[NSDictionary class]]) { - [[NSNotificationCenter defaultCenter] postNotificationName:SLKTextViewDidPasteItemNotification object:nil userInfo:pastedItem]; - } - else if ([pastedItem isKindOfClass:[NSString class]]) { - // Respect the delegate yo! - if (self.delegate && [self.delegate respondsToSelector:@selector(textView:shouldChangeTextInRange:replacementText:)]) { - if (![self.delegate textView:self shouldChangeTextInRange:self.selectedRange replacementText:pastedItem]) { - return; - } - } - - // Inserting the text fixes a UITextView bug whitch automatically scrolls to the bottom - // and beyond scroll content size sometimes when the text is too long - [self slk_insertTextAtCaretRange:pastedItem]; - } -} - - -#pragma mark - NSObject Overrides - -- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel -{ - if ([super methodSignatureForSelector:sel]) { - return [super methodSignatureForSelector:sel]; - } - return [super methodSignatureForSelector:@selector(slk_format:)]; -} - -- (void)forwardInvocation:(NSInvocation *)invocation -{ - NSString *title = [self slk_formattingTitleFromSelector:[invocation selector]]; - - if (title.length > 0) { - [self slk_format:title]; - } - else { - [super forwardInvocation:invocation]; - } -} - - -#pragma mark - Custom Actions - -- (void)slk_flashScrollIndicatorsIfNeeded -{ - if (self.numberOfLines == self.maxNumberOfLines+1) { - if (!_didFlashScrollIndicators) { - _didFlashScrollIndicators = YES; - [super flashScrollIndicators]; - } - } - else if (_didFlashScrollIndicators) { - _didFlashScrollIndicators = NO; - } -} - -- (void)refreshFirstResponder -{ - if (!self.isFirstResponder) { - return; - } - - _didNotResignFirstResponder = YES; - [self resignFirstResponder]; - - _didNotResignFirstResponder = NO; - [self becomeFirstResponder]; -} - -- (void)refreshInputViews -{ - _didNotResignFirstResponder = YES; - - [super reloadInputViews]; - - _didNotResignFirstResponder = NO; -} - -- (void)slk_addCustomMenuControllerItems -{ - UIMenuItem *undo = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Undo", nil) action:@selector(slk_undo:)]; - UIMenuItem *redo = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Redo", nil) action:@selector(slk_redo:)]; - - NSMutableArray *items = [NSMutableArray arrayWithObjects:undo, redo, nil]; - - if (self.registeredFormattingTitles.count > 0) { - UIMenuItem *format = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Format", nil) action:@selector(slk_presentFormattingMenu:)]; - [items addObject:format]; - } - - [[UIMenuController sharedMenuController] setMenuItems:items]; -} - -- (void)slk_undo:(id)sender -{ - [self.undoManager undo]; -} - -- (void)slk_redo:(id)sender -{ - [self.undoManager redo]; -} - -- (void)slk_presentFormattingMenu:(id)sender -{ - NSMutableArray *items = [NSMutableArray arrayWithCapacity:self.registeredFormattingTitles.count]; - - for (NSString *name in self.registeredFormattingTitles) { - - NSString *sel = [NSString stringWithFormat:@"%@%@", SLKTextViewGenericFormattingSelectorPrefix, name]; - - UIMenuItem *item = [[UIMenuItem alloc] initWithTitle:name action:NSSelectorFromString(sel)]; - [items addObject:item]; - } - - self.formatting = YES; - - UIMenuController *menu = [UIMenuController sharedMenuController]; - [menu setMenuItems:items]; - - NSLayoutManager *manager = self.layoutManager; - CGRect targetRect = [manager boundingRectForGlyphRange:self.selectedRange inTextContainer:self.textContainer]; - - [menu setTargetRect:targetRect inView:self]; - - [menu setMenuVisible:YES animated:YES]; -} - -- (NSString *)slk_formattingTitleFromSelector:(SEL)selector -{ - NSString *selectorString = NSStringFromSelector(selector); - NSRange match = [selectorString rangeOfString:SLKTextViewGenericFormattingSelectorPrefix]; - - if (match.location != NSNotFound) { - return [selectorString substringFromIndex:SLKTextViewGenericFormattingSelectorPrefix.length]; - } - - return nil; -} - -- (NSString *)slk_formattingSymbolWithTitle:(NSString *)title -{ - NSUInteger idx = [self.registeredFormattingTitles indexOfObject:title]; - - if (idx <= self.registeredFormattingSymbols.count -1) { - return self.registeredFormattingSymbols[idx]; - } - - return nil; -} - -- (void)slk_format:(NSString *)titles -{ - NSString *symbol = [self slk_formattingSymbolWithTitle:titles]; - - if (symbol.length > 0) { - NSRange selection = self.selectedRange; - - NSRange range = [self slk_insertText:symbol inRange:NSMakeRange(selection.location, 0)]; - range.location += selection.length; - range.length = 0; - - // The default behavior is to add a closure - BOOL addClosure = YES; - - if (self.delegate && [self.delegate respondsToSelector:@selector(textView:shouldInsertSuffixForFormattingWithSymbol:prefixRange:)]) { - addClosure = [self.delegate textView:self shouldInsertSuffixForFormattingWithSymbol:symbol prefixRange:selection]; - } - - if (addClosure) { - self.selectedRange = [self slk_insertText:symbol inRange:range]; - } - } -} - - -#pragma mark - Markdown Formatting - -- (void)registerMarkdownFormattingSymbol:(NSString *)symbol withTitle:(NSString *)title -{ - if (!symbol || !title) { - return; - } - - if (!_registeredFormattingTitles) { - _registeredFormattingTitles = [NSMutableArray new]; - _registeredFormattingSymbols = [NSMutableArray new]; - } - - // Adds the symbol if not contained already - if (![self.registeredSymbols containsObject:symbol]) { - [self.registeredFormattingTitles addObject:title]; - [self.registeredFormattingSymbols addObject:symbol]; - } -} - -- (NSArray *)registeredSymbols -{ - return self.registeredFormattingSymbols; -} - - -#pragma mark - Notification Events - -- (void)slk_didBeginEditing:(NSNotification *)notification -{ - if (![notification.object isEqual:self]) { - return; - } - - // Do something -} - -- (void)slk_didChangeText:(NSNotification *)notification -{ - if (![notification.object isEqual:self]) { - return; - } - - if (self.placeholderLabel.hidden != [self slk_shouldHidePlaceholder]) { - [self setNeedsLayout]; - } - - [self slk_flashScrollIndicatorsIfNeeded]; -} - -- (void)slk_didEndEditing:(NSNotification *)notification -{ - if (![notification.object isEqual:self]) { - return; - } - - // Do something -} - -- (void)slk_didChangeTextInputMode:(NSNotification *)notification -{ - // Do something -} - -- (void)slk_didChangeContentSizeCategory:(NSNotification *)notification -{ - if (!self.isDynamicTypeEnabled) { - return; - } - - NSString *contentSizeCategory = notification.userInfo[UIContentSizeCategoryNewValueKey]; - - [self setFontName:self.font.fontName pointSize:self.initialFontSize withContentSizeCategory:contentSizeCategory]; - - NSString *text = [self.text copy]; - - // Reloads the content size of the text view - [self setText:@" "]; - [self setText:text]; -} - -- (void)slk_willShowMenuController:(NSNotification *)notification -{ - // Do something -} - -- (void)slk_didHideMenuController:(NSNotification *)notification -{ - self.formatting = NO; - - [self slk_addCustomMenuControllerItems]; -} - - -#pragma mark - KVO Listener - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context -{ - if ([object isEqual:self] && [keyPath isEqualToString:NSStringFromSelector(@selector(contentSize))]) { - [[NSNotificationCenter defaultCenter] postNotificationName:SLKTextViewContentSizeDidChangeNotification object:self userInfo:nil]; - } - else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - - -#pragma mark - Motion Events - -- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event -{ - if (event.type == UIEventTypeMotion && event.subtype == UIEventSubtypeMotionShake) { - [[NSNotificationCenter defaultCenter] postNotificationName:SLKTextViewDidShakeNotification object:self]; - } -} - - -#pragma mark - External Keyboard Support - -typedef void (^SLKKeyCommandHandler)(UIKeyCommand *keyCommand); - -- (void)observeKeyInput:(NSString *)input modifiers:(UIKeyModifierFlags)modifiers title:(NSString *_Nullable)title completion:(void (^)(UIKeyCommand *keyCommand))completion -{ - NSAssert([input isKindOfClass:[NSString class]], @"You must provide a string with one or more characters corresponding to the keys to observe."); - NSAssert(completion != nil, @"You must provide a non-nil completion block."); - - if (!input || !completion) { - return; - } - - UIKeyCommand *keyCommand = [UIKeyCommand keyCommandWithInput:input modifierFlags:modifiers action:@selector(didDetectKeyCommand:)]; - -#ifdef __IPHONE_9_0 - if ([UIKeyCommand respondsToSelector:@selector(keyCommandWithInput:modifierFlags:action:discoverabilityTitle:)] ) { - keyCommand.discoverabilityTitle = title; - } -#endif - - if (!_registeredKeyCommands) { - _registeredKeyCommands = [NSMutableDictionary new]; - _registeredKeyCallbacks = [NSMutableDictionary new]; - } - - NSString *key = [self keyForKeyCommand:keyCommand]; - - self.registeredKeyCommands[key] = keyCommand; - self.registeredKeyCallbacks[key] = completion; -} - -- (void)didDetectKeyCommand:(UIKeyCommand *)keyCommand -{ - NSString *key = [self keyForKeyCommand:keyCommand]; - - SLKKeyCommandHandler completion = self.registeredKeyCallbacks[key]; - - if (completion) { - completion(keyCommand); - } -} - -- (NSString *)keyForKeyCommand:(UIKeyCommand *)keyCommand -{ - return [NSString stringWithFormat:@"%@_%ld", keyCommand.input, (long)keyCommand.modifierFlags]; -} - -- (NSArray *)keyCommands -{ - if (self.registeredKeyCommands) { - return [self.registeredKeyCommands allValues]; - } - - return nil; -} - - -#pragma mark Up/Down Cursor Movement - -- (void)didPressArrowKey:(UIKeyCommand *)keyCommand -{ - if (![keyCommand isKindOfClass:[UIKeyCommand class]] || self.text.length == 0 || self.numberOfLines < 2) { - return; - } - - if ([keyCommand.input isEqualToString:UIKeyInputUpArrow]) { - [self slk_moveCursorTodirection:UITextLayoutDirectionUp]; - } - else if ([keyCommand.input isEqualToString:UIKeyInputDownArrow]) { - [self slk_moveCursorTodirection:UITextLayoutDirectionDown]; - } -} - -- (void)slk_moveCursorTodirection:(UITextLayoutDirection)direction -{ - UITextPosition *start = (direction == UITextLayoutDirectionUp) ? self.selectedTextRange.start : self.selectedTextRange.end; - - if ([self slk_isNewVerticalMovementForPosition:start inDirection:direction]) { - self.verticalMoveDirection = direction; - self.verticalMoveStartCaretRect = [self caretRectForPosition:start]; - } - - if (start) { - UITextPosition *end = [self slk_closestPositionToPosition:start inDirection:direction]; - - if (end) { - self.verticalMoveLastCaretRect = [self caretRectForPosition:end]; - self.selectedTextRange = [self textRangeFromPosition:end toPosition:end]; - - [self slk_scrollToCaretPositonAnimated:NO]; - } - } -} - -// Based on code from Ruben Cabaco -// https://gist.github.com/rcabaco/6765778 - -- (UITextPosition *)slk_closestPositionToPosition:(UITextPosition *)position inDirection:(UITextLayoutDirection)direction -{ - // Only up/down are implemented. No real need for left/right since that is native to UITextInput. - NSParameterAssert(direction == UITextLayoutDirectionUp || direction == UITextLayoutDirectionDown); - - // Translate the vertical direction to a horizontal direction. - UITextLayoutDirection lookupDirection = (direction == UITextLayoutDirectionUp) ? UITextLayoutDirectionLeft : UITextLayoutDirectionRight; - - // Walk one character at a time in `lookupDirection` until the next line is reached. - UITextPosition *checkPosition = position; - UITextPosition *closestPosition = position; - CGRect startingCaretRect = [self caretRectForPosition:position]; - CGRect nextLineCaretRect = CGRectZero; - BOOL isInNextLine = NO; - - while (YES) { - UITextPosition *nextPosition = [self positionFromPosition:checkPosition inDirection:lookupDirection offset:1]; - - // End of line. - if (!nextPosition || [self comparePosition:checkPosition toPosition:nextPosition] == NSOrderedSame) { - break; - } - - checkPosition = nextPosition; - CGRect checkRect = [self caretRectForPosition:checkPosition]; - if (CGRectGetMidY(startingCaretRect) != CGRectGetMidY(checkRect)) { - // While on the next line stop just above/below the starting position. - if (lookupDirection == UITextLayoutDirectionLeft && CGRectGetMidX(checkRect) <= CGRectGetMidX(self.verticalMoveStartCaretRect)) { - closestPosition = checkPosition; - break; - } - if (lookupDirection == UITextLayoutDirectionRight && CGRectGetMidX(checkRect) >= CGRectGetMidX(self.verticalMoveStartCaretRect)) { - closestPosition = checkPosition; - break; - } - // But don't skip lines. - if (isInNextLine && CGRectGetMidY(checkRect) != CGRectGetMidY(nextLineCaretRect)) { - break; - } - - isInNextLine = YES; - nextLineCaretRect = checkRect; - closestPosition = checkPosition; - } - } - return closestPosition; -} - -- (BOOL)slk_isNewVerticalMovementForPosition:(UITextPosition *)position inDirection:(UITextLayoutDirection)direction -{ - CGRect caretRect = [self caretRectForPosition:position]; - BOOL noPreviousStartPosition = CGRectEqualToRect(self.verticalMoveStartCaretRect, CGRectZero); - BOOL caretMovedSinceLastPosition = !CGRectEqualToRect(caretRect, self.verticalMoveLastCaretRect); - BOOL directionChanged = self.verticalMoveDirection != direction; - - BOOL newMovement = noPreviousStartPosition || caretMovedSinceLastPosition || directionChanged; - return newMovement; -} - - -#pragma mark - NSNotificationCenter registration - -- (void)slk_registerNotifications -{ - [self slk_unregisterNotifications]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(slk_didBeginEditing:) name:UITextViewTextDidBeginEditingNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(slk_didChangeText:) name:UITextViewTextDidChangeNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(slk_didEndEditing:) name:UITextViewTextDidEndEditingNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(slk_didChangeTextInputMode:) name:UITextInputCurrentInputModeDidChangeNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(slk_didChangeContentSizeCategory:) name:UIContentSizeCategoryDidChangeNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(slk_willShowMenuController:) name:UIMenuControllerWillShowMenuNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(slk_didHideMenuController:) name:UIMenuControllerDidHideMenuNotification object:nil]; -} - -- (void)slk_unregisterNotifications -{ - [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextViewTextDidBeginEditingNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextViewTextDidChangeNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextViewTextDidEndEditingNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextInputCurrentInputModeDidChangeNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIContentSizeCategoryDidChangeNotification object:nil]; -} - - -#pragma mark - Lifeterm - -- (void)dealloc -{ - [self slk_unregisterNotifications]; - - [self removeObserver:self forKeyPath:NSStringFromSelector(@selector(contentSize))]; -} - -@end diff --git a/Example/Pods/SlackTextViewController/Source/SLKTextViewController.h b/Example/Pods/SlackTextViewController/Source/SLKTextViewController.h deleted file mode 100644 index aa66d0af..00000000 --- a/Example/Pods/SlackTextViewController/Source/SLKTextViewController.h +++ /dev/null @@ -1,626 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import -#import - -#import "SLKTextInputbar.h" -#import "SLKTextView.h" -#import "SLKTypingIndicatorView.h" -#import "SLKTypingIndicatorProtocol.h" - -#import "SLKTextView+SLKAdditions.h" -#import "UIScrollView+SLKAdditions.h" -#import "UIView+SLKAdditions.h" - -#import "SLKUIConstants.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - UIKeyboard notification replacement, posting reliably only when showing/hiding the keyboard (not when resizing keyboard, or with inputAccessoryView reloads, etc). - Only triggered when using SLKTextViewController's text view. - */ -UIKIT_EXTERN NSString *const SLKKeyboardWillShowNotification; -UIKIT_EXTERN NSString *const SLKKeyboardDidShowNotification; -UIKIT_EXTERN NSString *const SLKKeyboardWillHideNotification; -UIKIT_EXTERN NSString *const SLKKeyboardDidHideNotification; - -/** - This feature doesn't work on iOS 9 due to no legit alternatives to detect the keyboard view. - Open Radar: http://openradar.appspot.com/radar?id=5021485877952512 - */ -UIKIT_EXTERN NSString *const SLKTextInputbarDidMoveNotification; - -typedef NS_ENUM(NSUInteger, SLKKeyboardStatus) { - SLKKeyboardStatusDidHide, - SLKKeyboardStatusWillShow, - SLKKeyboardStatusDidShow, - SLKKeyboardStatusWillHide -}; - -/** @name A drop-in UIViewController subclass with a growing text input view and other useful messaging features. */ -NS_CLASS_AVAILABLE_IOS(7_0) @interface SLKTextViewController : UIViewController - -/** The main table view managed by the controller object. Created by default initializing with -init or initWithNibName:bundle: */ -@property (nonatomic, readonly) UITableView *_Nullable tableView; - -/** The main collection view managed by the controller object. Not nil if the controller is initialised with -initWithCollectionViewLayout: */ -@property (nonatomic, readonly) UICollectionView *_Nullable collectionView; - -/** The main scroll view managed by the controller object. Not nil if the controller is initialised with -initWithScrollView: */ -@property (nonatomic, readonly) UIScrollView *_Nullable scrollView; - -/** The bottom toolbar containing a text view and buttons. */ -@property (nonatomic, readonly) SLKTextInputbar *textInputbar; - -/** The default typing indicator used to display user names horizontally. */ -@property (nonatomic, readonly) SLKTypingIndicatorView *_Nullable typingIndicatorView; - -/** - The custom typing indicator view. Default is kind of SLKTypingIndicatorView. - To customize the typing indicator view, you will need to call -registerClassForTypingIndicatorView: nside of any initialization method. - To interact with it directly, you will need to cast the return value of -typingIndicatorProxyView to the appropriate type. - */ -@property (nonatomic, readonly) UIView *typingIndicatorProxyView; - -/** A single tap gesture used to dismiss the keyboard. SLKTextViewController is its delegate. */ -@property (nonatomic, readonly) UIGestureRecognizer *singleTapGesture; - -/** A vertical pan gesture used for bringing the keyboard from the bottom. SLKTextViewController is its delegate. */ -@property (nonatomic, readonly) UIPanGestureRecognizer *verticalPanGesture; - -/** YES if animations should have bouncy effects. Default is YES. */ -@property (nonatomic, assign) BOOL bounces; - -/** YES if text view's content can be cleaned with a shake gesture. Default is NO. */ -@property (nonatomic, assign) BOOL shakeToClearEnabled; - -/** - YES if keyboard can be dismissed gradually with a vertical panning gesture. Default is YES. - - This feature doesn't work on iOS 9 due to no legit alternatives to detect the keyboard view. - Open Radar: http://openradar.appspot.com/radar?id=5021485877952512 - */ -@property (nonatomic, assign, getter = isKeyboardPanningEnabled) BOOL keyboardPanningEnabled; - -/** YES if an external keyboard has been detected (this value updates only when the text view becomes first responder). */ -@property (nonatomic, readonly, getter=isExternalKeyboardDetected) BOOL externalKeyboardDetected; - -/** YES if the keyboard has been detected as undocked or split (iPad Only). */ -@property (nonatomic, readonly, getter=isKeyboardUndocked) BOOL keyboardUndocked; - -/** YES if after right button press, the text view is cleared out. Default is YES. */ -@property (nonatomic, assign) BOOL shouldClearTextAtRightButtonPress; - -/** YES if the scrollView should scroll to bottom when the keyboard is shown. Default is NO.*/ -@property (nonatomic, assign) BOOL shouldScrollToBottomAfterKeyboardShows; - -/** - YES if the main table view is inverted. Default is YES. - This allows the table view to start from the bottom like any typical messaging interface. - If inverted, you must assign the same transform property to your cells to match the orientation (ie: cell.transform = tableView.transform;) - Inverting the table view will enable some great features such as content offset corrections automatically when resizing the text input and/or showing autocompletion. - */ -@property (nonatomic, assign, getter = isInverted) BOOL inverted; - -/** YES if the view controller is presented inside of a popover controller. If YES, the keyboard won't move the text input bar and tapping on the tableView/collectionView will not cause the keyboard to be dismissed. This property is compatible only with iPad. */ -@property (nonatomic, assign, getter = isPresentedInPopover) BOOL presentedInPopover; - -/** The current keyboard status (will/did hide, will/did show) */ -@property (nonatomic, readonly) SLKKeyboardStatus keyboardStatus; - -/** Convenience accessors (accessed through the text input bar) */ -@property (nonatomic, readonly) SLKTextView *textView; -@property (nonatomic, readonly) UIButton *leftButton; -@property (nonatomic, readonly) UIButton *rightButton; - - -#pragma mark - Initialization -///------------------------------------------------ -/// @name Initialization -///------------------------------------------------ - -/** - Initializes a text view controller to manage a table view of a given style. - If you use the standard -init method, a table view with plain style will be created. - - @param style A constant that specifies the style of main table view that the controller object is to manage (UITableViewStylePlain or UITableViewStyleGrouped). - @return An initialized SLKTextViewController object or nil if the object could not be created. - */ -- (instancetype __nullable)initWithTableViewStyle:(UITableViewStyle)style; - -/** - Initializes a collection view controller and configures the collection view with the provided layout. - If you use the standard -init method, a table view with plain style will be created. - - @param layout The layout object to associate with the collection view. The layout controls how the collection view presents its cells and supplementary views. - @return An initialized SLKTextViewController object or nil if the object could not be created. - */ -- (instancetype __nullable)initWithCollectionViewLayout:(UICollectionViewLayout *)layout; - -/** - Initializes a text view controller to manage an arbitraty scroll view. The caller is responsible for configuration of the scroll view, including wiring the delegate. - - @param a UISCrollView to be used as the main content area. - @return An initialized SLKTextViewController object or nil if the object could not be created. - */ -- (instancetype __nullable)initWithScrollView:(UIScrollView *)scrollView; - -/** - Initializes either a table or collection view controller. - You must override either +tableViewStyleForCoder: or +collectionViewLayoutForCoder: to define witch view to be layed out. - - @param decoder An unarchiver object. - @return An initialized SLKTextViewController object or nil if the object could not be created. - */ -- (instancetype __nullable)initWithCoder:(NSCoder *)decoder; - -/** - Returns the tableView style to be configured when using Interface Builder. Default is UITableViewStylePlain. - You must override this method if you want to configure a tableView. - - @param decoder An unarchiver object. - @return The tableView style to be used in the new instantiated tableView. - */ -+ (UITableViewStyle)tableViewStyleForCoder:(NSCoder *)decoder; - -/** - Returns the tableView style to be configured when using Interface Builder. Default is nil. - You must override this method if you want to configure a collectionView. - - @param decoder An unarchiver object. - @return The collectionView style to be used in the new instantiated collectionView. - */ -+ (UICollectionViewLayout *)collectionViewLayoutForCoder:(NSCoder *)decoder; - - -#pragma mark - Keyboard Handling -///------------------------------------------------ -/// @name Keyboard Handling -///------------------------------------------------ - -/** - Presents the keyboard, if not already, animated. - You can override this method to perform additional tasks associated with presenting the keyboard. - You SHOULD call super to inherit some conditionals. - - @param animated YES if the keyboard should show using an animation. - */ -- (void)presentKeyboard:(BOOL)animated; - -/** - Dimisses the keyboard, if not already, animated. - You can override this method to perform additional tasks associated with dismissing the keyboard. - You SHOULD call super to inherit some conditionals. - - @param animated YES if the keyboard should be dismissed using an animation. - */ -- (void)dismissKeyboard:(BOOL)animated; - -/** - Verifies if the text input bar should still move up/down even if it is NOT first responder. Default is NO. - You can override this method to perform additional tasks associated with presenting the view. - You don't need call super since this method doesn't do anything. - - @param responder The current first responder object. - @return YES so the text input bar still move up/down. - */ -- (BOOL)forceTextInputbarAdjustmentForResponder:(UIResponder *_Nullable)responder; - -/** - Verifies if the text input bar should still move up/down when the text view is first responder. - This is very useful when presenting the view controller in a custom modal presentation, when there keyboard events are being handled externally to reframe the presented view. - You SHOULD call super to inherit some conditionals. - - @return YES so the text input bar still move up/down. - */ -- (BOOL)ignoreTextInputbarAdjustment NS_REQUIRES_SUPER; - -/** - Notifies the view controller that the keyboard changed status. - You can override this method to perform additional tasks associated with presenting the view. - You don't need call super since this method doesn't do anything. - - @param status The new keyboard status. - */ -- (void)didChangeKeyboardStatus:(SLKKeyboardStatus)status; - - -#pragma mark - Interaction Notifications -///------------------------------------------------ -/// @name Interaction Notifications -///------------------------------------------------ - -/** - Notifies the view controller that the text will update. - You can override this method to perform additional tasks associated with text changes. - You MUST call super at some point in your implementation. - */ -- (void)textWillUpdate NS_REQUIRES_SUPER; - -/** - Notifies the view controller that the text did update. - You can override this method to perform additional tasks associated with text changes. - You MUST call super at some point in your implementation. - - @param If YES, the text input bar will be resized using an animation. - */ -- (void)textDidUpdate:(BOOL)animated NS_REQUIRES_SUPER; - -/** - Notifies the view controller that the text selection did change. - Use this method a replacement of UITextViewDelegate's -textViewDidChangeSelection: which is not reliable enough when using third-party keyboards (they don't forward events properly sometimes). - - You can override this method to perform additional tasks associated with text changes. - You MUST call super at some point in your implementation. - */ -- (void)textSelectionDidChange NS_REQUIRES_SUPER; - -/** - Notifies the view controller when the left button's action has been triggered, manually. - You can override this method to perform additional tasks associated with the left button. - You don't need call super since this method doesn't do anything. - - @param sender The object calling this method. - */ -- (void)didPressLeftButton:(id _Nullable)sender; - -/** - Notifies the view controller when the right button's action has been triggered, manually or by using the keyboard return key. - You can override this method to perform additional tasks associated with the right button. - You MUST call super at some point in your implementation. - - @param sender The object calling this method. - */ -- (void)didPressRightButton:(id _Nullable)sender NS_REQUIRES_SUPER; - -/** - Verifies if the right button can be pressed. If NO, the button is disabled. - You can override this method to perform additional tasks. You SHOULD call super to inherit some conditionals. - - @return YES if the right button can be pressed. - */ -- (BOOL)canPressRightButton; - -/** - Notifies the view controller when the user has pasted a supported media content (images and/or videos). - You can override this method to perform additional tasks associated with image/video pasting. You don't need to call super since this method doesn't do anything. - Only supported pastable medias configured in SLKTextView will be forwarded (take a look at SLKPastableMediaType). - - @para userInfo The payload containing the media data, content and media types. - */ -- (void)didPasteMediaContent:(NSDictionary *)userInfo; - -/** - Verifies that the typing indicator view should be shown. - You can override this method to perform additional tasks. - You SHOULD call super to inherit some conditionals. - - @return YES if the typing indicator view should be presented. - */ -- (BOOL)canShowTypingIndicator; - -/** - Notifies the view controller when the user has shaked the device for undoing text typing. - You can override this method to perform additional tasks associated with the shake gesture. - Calling super will prompt a system alert view with undo option. This will not be called if 'undoShakingEnabled' is set to NO and/or if the text view's content is empty. - */ -- (void)willRequestUndo; - -/** - Notifies the view controller when the user has pressed the Return key (↵) with an external keyboard. - You can override this method to perform additional tasks. - You MUST call super at some point in your implementation. - - @param keyCommand The UIKeyCommand object being recognized. - */ -- (void)didPressReturnKey:(UIKeyCommand * _Nullable)keyCommand NS_REQUIRES_SUPER; - -/** - Notifies the view controller when the user has pressed the Escape key (Esc) with an external keyboard. - You can override this method to perform additional tasks. - You MUST call super at some point in your implementation. - - @param keyCommand The UIKeyCommand object being recognized. - */ -- (void)didPressEscapeKey:(UIKeyCommand * _Nullable)keyCommand NS_REQUIRES_SUPER; - -/** - Notifies the view controller when the user has pressed the arrow key with an external keyboard. - You can override this method to perform additional tasks. - You MUST call super at some point in your implementation. - - @param keyCommand The UIKeyCommand object being recognized. - */ -- (void)didPressArrowKey:(UIKeyCommand * _Nullable)keyCommand NS_REQUIRES_SUPER; - - -#pragma mark - Text Input Bar Adjustment -///------------------------------------------------ -/// @name Text Input Bar Adjustment -///------------------------------------------------ - -/** YES if the text inputbar is hidden. Default is NO. */ -@property (nonatomic, getter=isTextInputbarHidden) BOOL textInputbarHidden; - -/** - Changes the visibility of the text input bar. - Calling this method with the animated parameter set to NO is equivalent to setting the value of the toolbarHidden property directly. - - @param hidden Specify YES to hide the toolbar or NO to show it. - @param animated Specify YES if you want the toolbar to be animated on or off the screen. - */ -- (void)setTextInputbarHidden:(BOOL)hidden animated:(BOOL)animated; - - -#pragma mark - Text Edition -///------------------------------------------------ -/// @name Text Edition -///------------------------------------------------ - -/** YES if the text editing mode is active. */ -@property (nonatomic, readonly, getter = isEditing) BOOL editing; - -/** - Re-uses the text layout for edition, displaying an accessory view on top of the text input bar with options (cancel & save). - You can override this method to perform additional tasks - You MUST call super at some point in your implementation. - - @param text The string text to edit. - */ -- (void)editText:(NSString *)text NS_REQUIRES_SUPER; - -/** - Re-uses the text layout for edition, displaying an accessory view on top of the text input bar with options (cancel & save). - You can override this method to perform additional tasks - You MUST call super at some point in your implementation. - - @param attributedText The attributed text to edit. - */ -- (void)editAttributedText:(NSAttributedString *)attributedText NS_REQUIRES_SUPER; - -/** - Notifies the view controller when the editing bar's right button's action has been triggered, manually or by using the external keyboard's Return key. - You can override this method to perform additional tasks associated with accepting changes. - You MUST call super at some point in your implementation. - - @param sender The object calling this method. - */ -- (void)didCommitTextEditing:(id)sender NS_REQUIRES_SUPER; - -/** - Notifies the view controller when the editing bar's right button's action has been triggered, manually or by using the external keyboard's Esc key. - You can override this method to perform additional tasks associated with accepting changes. - You MUST call super at some point in your implementation. - - @param sender The object calling this method. - */ -- (void)didCancelTextEditing:(id)sender NS_REQUIRES_SUPER; - - -#pragma mark - Text Auto-Completion -///------------------------------------------------ -/// @name Text Auto-Completion -///------------------------------------------------ - -/** The table view used to display autocompletion results. */ -@property (nonatomic, readonly) UITableView *autoCompletionView; - -/** YES if the autocompletion mode is active. */ -@property (nonatomic, readonly, getter = isAutoCompleting) BOOL autoCompleting; - -/** The recently found prefix symbol used as prefix for autocompletion mode. */ -@property (nonatomic, copy) NSString *_Nullable foundPrefix; - -/** The range of the found prefix in the text view content. */ -@property (nonatomic) NSRange foundPrefixRange; - -/** The recently found word at the text view's caret position. */ -@property (nonatomic, copy) NSString *_Nullable foundWord; - -/** An array containing all the registered prefix strings for autocompletion. */ -@property (nonatomic, readonly, copy) NSSet *_Nullable registeredPrefixes; - -/** - Registers any string prefix for autocompletion detection, like for user mentions or hashtags autocompletion. - The prefix must be valid string (i.e: '@', '#', '\', and so on). - Prefixes can be of any length. - - @param prefixes An array of prefix strings. - */ -- (void)registerPrefixesForAutoCompletion:(NSArray *_Nullable)prefixes; - -/** - Verifies that controller is allowed to process the textView's text for auto-completion. - You can override this method to disable momentarily the auto-completion feature, or to let it visible for longer time. - You SHOULD call super to inherit some conditionals. - - @return YES if the controller is allowed to process the text for auto-completion. - */ -- (BOOL)shouldProcessTextForAutoCompletion; - -/** - During text autocompletion, by default, auto-correction and spell checking are disabled. - Doing so, refreshes the text input to get rid of the Quick Type bar. - You can override this method to avoid disabling in some cases. - - @return YES if the controller should not hide the quick type bar. - */ -- (BOOL)shouldDisableTypingSuggestionForAutoCompletion; - -/** - Notifies the view controller either the autocompletion prefix or word have changed. - Use this method to modify your data source or fetch data asynchronously from an HTTP resource. - Once your data source is ready, make sure to call -showAutoCompletionView: to display the view accordingly. - You don't need call super since this method doesn't do anything. - You SHOULD call super to inherit some conditionals. - - @param prefix The detected prefix. - @param word The derected word. - */ -- (void)didChangeAutoCompletionPrefix:(NSString *)prefix andWord:(NSString *)word; - -/** - Use this method to programatically show/hide the autocompletion view. - Right before the view is shown, -reloadData is called. So avoid calling it manually. - - @param show YES if the autocompletion view should be shown. - */ -- (void)showAutoCompletionView:(BOOL)show; - -/** - Use this method to programatically show the autocompletion view, with provided prefix and word to search. - Right before the view is shown, -reloadData is called. So avoid calling it manually. - - @param prefix A prefix that is used to trigger autocompletion - @param word A word to search for autocompletion - @param prefixRange The range in which prefix spans. -*/ -- (void)showAutoCompletionViewWithPrefix:(NSString *)prefix andWord:(NSString *)word prefixRange:(NSRange)prefixRange; - -/** - Returns a custom height for the autocompletion view. Default is 0.0. - You can override this method to return a custom height. - - @return The autocompletion view's height. - */ -- (CGFloat)heightForAutoCompletionView; - -/** - Returns the maximum height for the autocompletion view. Default is 140 pts. - You can override this method to return a custom max height. - - @return The autocompletion view's max height. - */ -- (CGFloat)maximumHeightForAutoCompletionView; - -/** - Cancels and hides the autocompletion view, animated. - */ -- (void)cancelAutoCompletion; - -/** - Accepts the autocompletion, replacing the detected word with a new string, keeping the prefix. - This method is a convinience of -acceptAutoCompletionWithString:keepPrefix: - - @param string The string to be used for replacing autocompletion placeholders. - */ -- (void)acceptAutoCompletionWithString:(NSString *_Nullable)string; - -/** - Accepts the autocompletion, replacing the detected word with a new string, and optionally replacing the prefix too. - - @param string The string to be used for replacing autocompletion placeholders. - @param keepPrefix YES if the prefix shouldn't be overidden. - */ -- (void)acceptAutoCompletionWithString:(NSString *_Nullable)string keepPrefix:(BOOL)keepPrefix; - - -#pragma mark - Text Caching -///------------------------------------------------ -/// @name Text Caching -///------------------------------------------------ - -/** - Returns the key to be associated with a given text to be cached. Default is nil. - To enable text caching, you must override this method to return valid key. - The text view will be populated automatically when the view controller is configured. - You don't need to call super since this method doesn't do anything. - - @return The string key for which to enable text caching. - */ -- (nullable NSString *)keyForTextCaching; - -/** - Removes the current view controller's cached text. - To enable this, you must return a valid key string in -keyForTextCaching. - */ -- (void)clearCachedText; - -/** - Removes all the cached text from disk. - */ -+ (void)clearAllCachedText; - -/** - Caches text to disk. - */ -- (void)cacheTextView; - - -#pragma mark - Customization -///------------------------------------------------ -/// @name Customization -///------------------------------------------------ - -/** - Registers a class for customizing the behavior and appearance of the text view. - You need to call this method inside of any initialization method. - - @param aClass A SLKTextView subclass. - */ -- (void)registerClassForTextView:(Class _Nullable)aClass; - -/** - Registers a class for customizing the behavior and appearance of the typing indicator view. - You need to call this method inside of any initialization method. - Make sure to conform to SLKTypingIndicatorProtocol and implement the required methods. - - @param aClass A UIView subclass conforming to the SLKTypingIndicatorProtocol. - */ -- (void)registerClassForTypingIndicatorView:(Class _Nullable)aClass; - - -#pragma mark - Delegate Methods Requiring Super -///------------------------------------------------ -/// @name Delegate Methods Requiring Super -///------------------------------------------------ - -/** UITextViewDelegate */ -- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text NS_REQUIRES_SUPER; - -/** SLKTextViewDelegate */ -- (BOOL)textView:(SLKTextView *)textView shouldInsertSuffixForFormattingWithSymbol:(NSString *)symbol prefixRange:(NSRange)prefixRange NS_REQUIRES_SUPER; - -/** UIScrollViewDelegate */ -- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView NS_REQUIRES_SUPER; -- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate NS_REQUIRES_SUPER; -- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView NS_REQUIRES_SUPER; -- (void)scrollViewDidScroll:(UIScrollView *)scrollView NS_REQUIRES_SUPER; - -/** UIGestureRecognizerDelegate */ -- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer NS_REQUIRES_SUPER; - -/** UIAlertViewDelegate */ -#ifndef __IPHONE_8_0 -- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex NS_REQUIRES_SUPER; -#endif - -#pragma mark - Life Cycle Methods Requiring Super -///------------------------------------------------ -/// @name Life Cycle Methods Requiring Super -///------------------------------------------------ - -/** - Configures view hierarchy and layout constraints. If you override these methods, make sure to call super. - */ -- (void)loadView NS_REQUIRES_SUPER; -- (void)viewDidLoad NS_REQUIRES_SUPER; -- (void)viewWillAppear:(BOOL)animated NS_REQUIRES_SUPER; -- (void)viewDidAppear:(BOOL)animated NS_REQUIRES_SUPER; -- (void)viewWillDisappear:(BOOL)animated NS_REQUIRES_SUPER; -- (void)viewDidDisappear:(BOOL)animated NS_REQUIRES_SUPER; -- (void)viewWillLayoutSubviews NS_REQUIRES_SUPER; -- (void)viewDidLayoutSubviews NS_REQUIRES_SUPER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Example/Pods/SlackTextViewController/Source/SLKTextViewController.m b/Example/Pods/SlackTextViewController/Source/SLKTextViewController.m deleted file mode 100644 index 60a3fc18..00000000 --- a/Example/Pods/SlackTextViewController/Source/SLKTextViewController.m +++ /dev/null @@ -1,2448 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import "SLKTextViewController.h" -#import "SLKInputAccessoryView.h" - -#import "UIResponder+SLKAdditions.h" -#import "SLKUIConstants.h" - -/** Feature flagged while waiting to implement a more reliable technique. */ -#define SLKBottomPanningEnabled 0 - -#define kSLKAlertViewClearTextTag [NSStringFromClass([SLKTextViewController class]) hash] - -NSString * const SLKKeyboardWillShowNotification = @"SLKKeyboardWillShowNotification"; -NSString * const SLKKeyboardDidShowNotification = @"SLKKeyboardDidShowNotification"; -NSString * const SLKKeyboardWillHideNotification = @"SLKKeyboardWillHideNotification"; -NSString * const SLKKeyboardDidHideNotification = @"SLKKeyboardDidHideNotification"; - -CGFloat const SLKAutoCompletionViewDefaultHeight = 140.0; - -@interface SLKTextViewController () -{ - CGPoint _scrollViewOffsetBeforeDragging; - CGFloat _keyboardHeightBeforeDragging; -} - -// The shared scrollView pointer, either a tableView or collectionView -@property (nonatomic, weak) UIScrollView *scrollViewProxy; - -// A hairline displayed on top of the auto-completion view, to better separate the content from the control. -@property (nonatomic, strong) UIView *autoCompletionHairline; - -// Auto-Layout height constraints used for updating their constants -@property (nonatomic, strong) NSLayoutConstraint *scrollViewHC; -@property (nonatomic, strong) NSLayoutConstraint *textInputbarHC; -@property (nonatomic, strong) NSLayoutConstraint *typingIndicatorViewHC; -@property (nonatomic, strong) NSLayoutConstraint *autoCompletionViewHC; -@property (nonatomic, strong) NSLayoutConstraint *keyboardHC; - -// YES if the user is moving the keyboard with a gesture -@property (nonatomic, assign, getter = isMovingKeyboard) BOOL movingKeyboard; - -// YES if the view controller did appear and everything is finished configurating. This allows blocking some layout animations among other things. -@property (nonatomic, getter=isViewVisible) BOOL viewVisible; - -// YES if the view controller's view's size is changing by its parent (i.e. when its window rotates or is resized) -@property (nonatomic, getter = isTransitioning) BOOL transitioning; - -// Optional classes to be used instead of the default ones. -@property (nonatomic, strong) Class textViewClass; -@property (nonatomic, strong) Class typingIndicatorViewClass; - -@end - -@implementation SLKTextViewController -@synthesize tableView = _tableView; -@synthesize collectionView = _collectionView; -@synthesize scrollView = _scrollView; -@synthesize typingIndicatorProxyView = _typingIndicatorProxyView; -@synthesize textInputbar = _textInputbar; -@synthesize autoCompletionView = _autoCompletionView; -@synthesize autoCompleting = _autoCompleting; -@synthesize scrollViewProxy = _scrollViewProxy; -@synthesize presentedInPopover = _presentedInPopover; - -#pragma mark - Initializer - -- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - return [self initWithTableViewStyle:UITableViewStylePlain]; -} - -- (instancetype)init -{ - return [self initWithTableViewStyle:UITableViewStylePlain]; -} - -- (instancetype)initWithTableViewStyle:(UITableViewStyle)style -{ - NSAssert([self class] != [SLKTextViewController class], @"Oops! You must subclass SLKTextViewController."); - NSAssert(style == UITableViewStylePlain || style == UITableViewStyleGrouped, @"Oops! You must pass a valid UITableViewStyle."); - - if (self = [super initWithNibName:nil bundle:nil]) - { - self.scrollViewProxy = [self tableViewWithStyle:style]; - [self slk_commonInit]; - } - return self; -} - -- (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout -{ - NSAssert([self class] != [SLKTextViewController class], @"Oops! You must subclass SLKTextViewController."); - NSAssert([layout isKindOfClass:[UICollectionViewLayout class]], @"Oops! You must pass a valid UICollectionViewLayout object."); - - if (self = [super initWithNibName:nil bundle:nil]) - { - self.scrollViewProxy = [self collectionViewWithLayout:layout]; - [self slk_commonInit]; - } - return self; -} - -- (instancetype)initWithScrollView:(UIScrollView *)scrollView -{ - NSAssert([self class] != [SLKTextViewController class], @"Oops! You must subclass SLKTextViewController."); - NSAssert([scrollView isKindOfClass:[UIScrollView class]], @"Oops! You must pass a valid UIScrollView object."); - - if (self = [super initWithNibName:nil bundle:nil]) - { - _scrollView = scrollView; - _scrollView.translatesAutoresizingMaskIntoConstraints = NO; // Makes sure the scrollView plays nice with auto-layout - - self.scrollViewProxy = _scrollView; - [self slk_commonInit]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)decoder -{ - NSAssert([self class] != [SLKTextViewController class], @"Oops! You must subclass SLKTextViewController."); - NSAssert([decoder isKindOfClass:[NSCoder class]], @"Oops! You must pass a valid decoder object."); - - if (self = [super initWithCoder:decoder]) - { - UITableViewStyle tableViewStyle = [[self class] tableViewStyleForCoder:decoder]; - UICollectionViewLayout *collectionViewLayout = [[self class] collectionViewLayoutForCoder:decoder]; - - if ([collectionViewLayout isKindOfClass:[UICollectionViewLayout class]]) { - self.scrollViewProxy = [self collectionViewWithLayout:collectionViewLayout]; - } - else { - self.scrollViewProxy = [self tableViewWithStyle:tableViewStyle]; - } - - [self slk_commonInit]; - } - return self; -} - -- (void)slk_commonInit -{ - [self slk_registerNotifications]; - - self.bounces = YES; - self.inverted = YES; - self.shakeToClearEnabled = NO; - self.keyboardPanningEnabled = YES; - self.shouldClearTextAtRightButtonPress = YES; - self.shouldScrollToBottomAfterKeyboardShows = NO; - - self.automaticallyAdjustsScrollViewInsets = YES; - self.extendedLayoutIncludesOpaqueBars = YES; -} - - -#pragma mark - View lifecycle - -- (void)loadView -{ - [super loadView]; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - [self.view addSubview:self.scrollViewProxy]; - [self.view addSubview:self.autoCompletionView]; - [self.view addSubview:self.typingIndicatorProxyView]; - [self.view addSubview:self.textInputbar]; - - [self slk_setupViewConstraints]; - - [self slk_registerKeyCommands]; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - - // Invalidates this flag when the view appears - self.textView.didNotResignFirstResponder = NO; - - // Forces laying out the recently added subviews and update their constraints - [self.view layoutIfNeeded]; - - [UIView performWithoutAnimation:^{ - // Reloads any cached text - [self slk_reloadTextView]; - }]; -} - -- (void)viewDidAppear:(BOOL)animated -{ - [super viewDidAppear:animated]; - - [self.scrollViewProxy flashScrollIndicators]; - - self.viewVisible = YES; -} - -- (void)viewWillDisappear:(BOOL)animated -{ - [super viewWillDisappear:animated]; - - // Stops the keyboard from being dismissed during the navigation controller's "swipe-to-pop" - self.textView.didNotResignFirstResponder = self.isMovingFromParentViewController; - - self.viewVisible = NO; -} - -- (void)viewDidDisappear:(BOOL)animated -{ - [super viewDidDisappear:animated]; - - // Caches the text before it's too late! - [self cacheTextView]; -} - -- (void)viewWillLayoutSubviews -{ - [super viewWillLayoutSubviews]; - - [self slk_adjustContentConfigurationIfNeeded]; -} - -- (void)viewDidLayoutSubviews -{ - [super viewDidLayoutSubviews]; -} - -- (void)viewSafeAreaInsetsDidChange -{ - [super viewSafeAreaInsetsDidChange]; - - [self slk_updateViewConstraints]; -} - - -#pragma mark - Getters - -+ (UITableViewStyle)tableViewStyleForCoder:(NSCoder *)decoder -{ - return UITableViewStylePlain; -} - -+ (UICollectionViewLayout *)collectionViewLayoutForCoder:(NSCoder *)decoder -{ - return nil; -} - -- (UITableView *)tableViewWithStyle:(UITableViewStyle)style -{ - if (!_tableView) { - _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:style]; - _tableView.translatesAutoresizingMaskIntoConstraints = NO; - _tableView.scrollsToTop = YES; - _tableView.dataSource = self; - _tableView.delegate = self; - _tableView.clipsToBounds = NO; - - [self slk_updateInsetAdjustmentBehavior]; - } - return _tableView; -} - -- (UICollectionView *)collectionViewWithLayout:(UICollectionViewLayout *)layout -{ - if (!_collectionView) { - _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; - _collectionView.backgroundColor = [UIColor whiteColor]; - _collectionView.translatesAutoresizingMaskIntoConstraints = NO; - _collectionView.scrollsToTop = YES; - _collectionView.dataSource = self; - _collectionView.delegate = self; - } - return _collectionView; -} - -- (UITableView *)autoCompletionView -{ - if (!_autoCompletionView) { - _autoCompletionView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; - _autoCompletionView.translatesAutoresizingMaskIntoConstraints = NO; - _autoCompletionView.backgroundColor = [UIColor colorWithWhite:0.97 alpha:1.0]; - _autoCompletionView.scrollsToTop = NO; - _autoCompletionView.dataSource = self; - _autoCompletionView.delegate = self; - -#ifdef __IPHONE_9_0 - if ([_autoCompletionView respondsToSelector:@selector(cellLayoutMarginsFollowReadableWidth)]) { - _autoCompletionView.cellLayoutMarginsFollowReadableWidth = NO; - } -#endif - - CGRect rect = CGRectZero; - rect.size = CGSizeMake(CGRectGetWidth(self.view.frame), 0.5); - - _autoCompletionHairline = [[UIView alloc] initWithFrame:rect]; - _autoCompletionHairline.autoresizingMask = UIViewAutoresizingFlexibleWidth; - _autoCompletionHairline.backgroundColor = _autoCompletionView.separatorColor; - [_autoCompletionView addSubview:_autoCompletionHairline]; - } - return _autoCompletionView; -} - -- (SLKTextInputbar *)textInputbar -{ - if (!_textInputbar) { - _textInputbar = [[SLKTextInputbar alloc] initWithTextViewClass:self.textViewClass]; - _textInputbar.translatesAutoresizingMaskIntoConstraints = NO; - - [_textInputbar.leftButton addTarget:self action:@selector(didPressLeftButton:) forControlEvents:UIControlEventTouchUpInside]; - [_textInputbar.rightButton addTarget:self action:@selector(didPressRightButton:) forControlEvents:UIControlEventTouchUpInside]; - [_textInputbar.editorLeftButton addTarget:self action:@selector(didCancelTextEditing:) forControlEvents:UIControlEventTouchUpInside]; - [_textInputbar.editorRightButton addTarget:self action:@selector(didCommitTextEditing:) forControlEvents:UIControlEventTouchUpInside]; - - _textInputbar.textView.delegate = self; - - _verticalPanGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(slk_didPanTextInputBar:)]; - _verticalPanGesture.delegate = self; - - [_textInputbar addGestureRecognizer:self.verticalPanGesture]; - } - return _textInputbar; -} - -- (UIView *)typingIndicatorProxyView -{ - if (!_typingIndicatorProxyView) { - Class class = self.typingIndicatorViewClass ? : [SLKTypingIndicatorView class]; - - _typingIndicatorProxyView = [[class alloc] init]; - _typingIndicatorProxyView.translatesAutoresizingMaskIntoConstraints = NO; - _typingIndicatorProxyView.hidden = YES; - - [_typingIndicatorProxyView addObserver:self forKeyPath:@"visible" options:NSKeyValueObservingOptionNew context:nil]; - } - return _typingIndicatorProxyView; -} - -- (SLKTypingIndicatorView *)typingIndicatorView -{ - if ([_typingIndicatorProxyView isKindOfClass:[SLKTypingIndicatorView class]]) { - return (SLKTypingIndicatorView *)self.typingIndicatorProxyView; - } - return nil; -} - -- (BOOL)isPresentedInPopover -{ - return _presentedInPopover && SLK_IS_IPAD; -} - -- (BOOL)isTextInputbarHidden -{ - return _textInputbar.hidden; -} - -- (SLKTextView *)textView -{ - return _textInputbar.textView; -} - -- (UIButton *)leftButton -{ - return _textInputbar.leftButton; -} - -- (UIButton *)rightButton -{ - return _textInputbar.rightButton; -} - -- (UIModalPresentationStyle)modalPresentationStyle -{ - if (self.navigationController) { - return self.navigationController.modalPresentationStyle; - } - return [super modalPresentationStyle]; -} - -- (CGFloat)slk_appropriateKeyboardHeightFromNotification:(NSNotification *)notification -{ - // Let's first detect keyboard special states such as external keyboard, undocked or split layouts. - [self slk_detectKeyboardStatesInNotification:notification]; - - if ([self ignoreTextInputbarAdjustment]) { - return [self slk_appropriateBottomMargin]; - } - - CGRect keyboardRect = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; - - return [self slk_appropriateKeyboardHeightFromRect:keyboardRect]; -} - -- (CGFloat)slk_appropriateKeyboardHeightFromRect:(CGRect)rect -{ - CGRect keyboardRect = [self.view convertRect:rect fromView:nil]; - - CGFloat viewHeight = CGRectGetHeight(self.view.bounds); - CGFloat keyboardMinY = CGRectGetMinY(keyboardRect); - - CGFloat keyboardHeight = MAX(0.0, viewHeight - keyboardMinY); - CGFloat bottomMargin = [self slk_appropriateBottomMargin]; - - // When the keyboard height is zero, we can assume there is no keyboard visible - // In that case, let's see if there are any other views outside of the view hiearchy - // requiring to adjust the text input bottom margin - if (keyboardHeight < bottomMargin) { - keyboardHeight = bottomMargin; - } - - return keyboardHeight; -} - -- (CGFloat)slk_appropriateBottomMargin -{ - // A bottom margin is required if the view is extended out of it bounds - if ((self.edgesForExtendedLayout & UIRectEdgeBottom) > 0) { - - UITabBar *tabBar = self.tabBarController.tabBar; - - // Considers the bottom tab bar, unless it will be hidden - if (tabBar && !tabBar.hidden && !self.hidesBottomBarWhenPushed) { - return CGRectGetHeight(tabBar.frame); - } - } - - // A bottom margin is required for iPhone X - if (@available(iOS 11.0, *)) { - if (!self.textInputbar.isHidden) { - return self.view.safeAreaInsets.bottom; - } - } - - return 0.0; -} - -- (CGFloat)slk_appropriateScrollViewHeight -{ - CGFloat scrollViewHeight = CGRectGetHeight(self.view.bounds); - - scrollViewHeight -= self.keyboardHC.constant; - scrollViewHeight -= self.textInputbarHC.constant; - scrollViewHeight -= self.autoCompletionViewHC.constant; - scrollViewHeight -= self.typingIndicatorViewHC.constant; - - if (scrollViewHeight < 0) return 0; - else return scrollViewHeight; -} - -- (CGFloat)slk_topBarsHeight -{ - // No need to adjust if the edge isn't available - if ((self.edgesForExtendedLayout & UIRectEdgeTop) == 0) { - return 0.0; - } - - CGFloat topBarsHeight = CGRectGetHeight(self.navigationController.navigationBar.frame); - - if ((SLK_IS_IPHONE && SLK_IS_LANDSCAPE && SLK_IS_IOS8_AND_HIGHER) || - (SLK_IS_IPAD && self.modalPresentationStyle == UIModalPresentationFormSheet) || - self.isPresentedInPopover) { - return topBarsHeight; - } - - topBarsHeight += CGRectGetHeight([UIApplication sharedApplication].statusBarFrame); - - return topBarsHeight; -} - -- (NSString *)slk_appropriateKeyboardNotificationName:(NSNotification *)notification -{ - NSString *name = notification.name; - - if ([name isEqualToString:UIKeyboardWillShowNotification]) { - return SLKKeyboardWillShowNotification; - } - if ([name isEqualToString:UIKeyboardWillHideNotification]) { - return SLKKeyboardWillHideNotification; - } - if ([name isEqualToString:UIKeyboardDidShowNotification]) { - return SLKKeyboardDidShowNotification; - } - if ([name isEqualToString:UIKeyboardDidHideNotification]) { - return SLKKeyboardDidHideNotification; - } - return nil; -} - -- (SLKKeyboardStatus)slk_keyboardStatusForNotification:(NSNotification *)notification -{ - NSString *name = notification.name; - - if ([name isEqualToString:UIKeyboardWillShowNotification]) { - return SLKKeyboardStatusWillShow; - } - if ([name isEqualToString:UIKeyboardDidShowNotification]) { - return SLKKeyboardStatusDidShow; - } - if ([name isEqualToString:UIKeyboardWillHideNotification]) { - return SLKKeyboardStatusWillHide; - } - if ([name isEqualToString:UIKeyboardDidHideNotification]) { - return SLKKeyboardStatusDidHide; - } - return -1; -} - -- (BOOL)slk_isIllogicalKeyboardStatus:(SLKKeyboardStatus)newStatus -{ - if ((self.keyboardStatus == SLKKeyboardStatusDidHide && newStatus == SLKKeyboardStatusWillShow) || - (self.keyboardStatus == SLKKeyboardStatusWillShow && newStatus == SLKKeyboardStatusDidShow) || - (self.keyboardStatus == SLKKeyboardStatusDidShow && newStatus == SLKKeyboardStatusWillHide) || - (self.keyboardStatus == SLKKeyboardStatusWillHide && newStatus == SLKKeyboardStatusDidHide)) { - return NO; - } - return YES; -} - - -#pragma mark - Setters - -- (void)setEdgesForExtendedLayout:(UIRectEdge)rectEdge -{ - if (self.edgesForExtendedLayout == rectEdge) { - return; - } - - [super setEdgesForExtendedLayout:rectEdge]; - - [self slk_updateViewConstraints]; -} - -- (void)setScrollViewProxy:(UIScrollView *)scrollView -{ - if ([_scrollViewProxy isEqual:scrollView]) { - return; - } - - _singleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(slk_didTapScrollView:)]; - _singleTapGesture.delegate = self; - [_singleTapGesture requireGestureRecognizerToFail:scrollView.panGestureRecognizer]; - - [scrollView addGestureRecognizer:self.singleTapGesture]; - - [scrollView.panGestureRecognizer addTarget:self action:@selector(slk_didPanTextInputBar:)]; - - _scrollViewProxy = scrollView; -} - -- (void)setAutoCompleting:(BOOL)autoCompleting -{ - if (_autoCompleting == autoCompleting) { - return; - } - - _autoCompleting = autoCompleting; - - self.scrollViewProxy.scrollEnabled = !autoCompleting; -} - -- (void)setInverted:(BOOL)inverted -{ - if (_inverted == inverted) { - return; - } - - _inverted = inverted; - [self slk_updateInsetAdjustmentBehavior]; - - self.scrollViewProxy.transform = inverted ? CGAffineTransformMake(1, 0, 0, -1, 0, 0) : CGAffineTransformIdentity; -} - -- (void)setBounces:(BOOL)bounces -{ - _bounces = bounces; - _textInputbar.bounces = bounces; -} - -- (void)slk_updateInsetAdjustmentBehavior - { - // Deactivate automatic scrollView adjustment for inverted table view - if (@available(iOS 11.0, *)) { - if (self.isInverted) { - _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; - } else { - _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic; - } - } - } - -- (BOOL)slk_updateKeyboardStatus:(SLKKeyboardStatus)status -{ - // Skips if trying to update the same status - if (_keyboardStatus == status) { - return NO; - } - - // Skips illogical conditions - // Forces the keyboard status when didHide to avoid any inconsistency. - if (status != SLKKeyboardStatusDidHide && [self slk_isIllogicalKeyboardStatus:status]) { - return NO; - } - - _keyboardStatus = status; - - [self didChangeKeyboardStatus:status]; - - return YES; -} - - -#pragma mark - Public & Subclassable Methods - -- (void)presentKeyboard:(BOOL)animated -{ - // Skips if already first responder - if ([self.textView isFirstResponder]) { - return; - } - - if (!animated) { - [UIView performWithoutAnimation:^{ - [self.textView becomeFirstResponder]; - }]; - } - else { - [self.textView becomeFirstResponder]; - } -} - -- (void)dismissKeyboard:(BOOL)animated -{ - // Dismisses the keyboard from any first responder in the window. - if (![self.textView isFirstResponder] && self.keyboardHC.constant > 0) { - [self.view.window endEditing:NO]; - } - - if (!animated) { - [UIView performWithoutAnimation:^{ - [self.textView resignFirstResponder]; - }]; - } - else { - [self.textView resignFirstResponder]; - } -} - -- (BOOL)forceTextInputbarAdjustmentForResponder:(UIResponder *)responder -{ - return NO; -} - -- (BOOL)ignoreTextInputbarAdjustment -{ - if (self.isExternalKeyboardDetected || self.isKeyboardUndocked) { - return YES; - } - - return NO; -} - -- (void)didChangeKeyboardStatus:(SLKKeyboardStatus)status -{ - // No implementation here. Meant to be overriden in subclass. -} - -- (void)textWillUpdate -{ - // No implementation here. Meant to be overriden in subclass. -} - -- (void)textDidUpdate:(BOOL)animated -{ - if (self.isTextInputbarHidden) { - return; - } - - CGFloat inputbarHeight = _textInputbar.appropriateHeight; - - _textInputbar.rightButton.enabled = [self canPressRightButton]; - _textInputbar.editorRightButton.enabled = [self canPressRightButton]; - - if (inputbarHeight != self.textInputbarHC.constant) - { - CGFloat inputBarHeightDelta = inputbarHeight - self.textInputbarHC.constant; - CGPoint newOffset = CGPointMake(0, self.scrollViewProxy.contentOffset.y + inputBarHeightDelta); - self.textInputbarHC.constant = inputbarHeight; - self.scrollViewHC.constant = [self slk_appropriateScrollViewHeight]; - - if (animated) { - - BOOL bounces = self.bounces && [self.textView isFirstResponder]; - - __weak typeof(self) weakSelf = self; - - [self.view slk_animateLayoutIfNeededWithBounce:bounces - options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionLayoutSubviews|UIViewAnimationOptionBeginFromCurrentState - animations:^{ - if (!self.isInverted) { - self.scrollViewProxy.contentOffset = newOffset; - } - if (weakSelf.textInputbar.isEditing) { - [weakSelf.textView slk_scrollToCaretPositonAnimated:NO]; - } - }]; - } - else { - [self.view layoutIfNeeded]; - } - } - - // Toggles auto-correction if requiered - [self slk_enableTypingSuggestionIfNeeded]; -} - -- (void)textSelectionDidChange -{ - // The text view must be first responder - if (![self.textView isFirstResponder] || self.keyboardStatus != SLKKeyboardStatusDidShow) { - return; - } - - // Skips there is a real text selection - if (self.textView.isTrackpadEnabled) { - return; - } - - if (self.textView.selectedRange.length > 0) { - if (self.isAutoCompleting && [self shouldProcessTextForAutoCompletion]) { - [self cancelAutoCompletion]; - } - return; - } - - // Process the text at every caret movement - [self slk_processTextForAutoCompletion]; -} - -- (BOOL)canPressRightButton -{ - NSString *text = [self.textView.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - - if (text.length > 0 && ![_textInputbar limitExceeded]) { - return YES; - } - - return NO; -} - -- (void)didPressLeftButton:(id)sender -{ - // No implementation here. Meant to be overriden in subclass. -} - -- (void)didPressRightButton:(id)sender -{ - if (self.shouldClearTextAtRightButtonPress) { - // Clears the text and the undo manager - [self.textView slk_clearText:YES]; - } - - // Clears cache - [self clearCachedText]; -} - -- (void)editText:(NSString *)text -{ - NSAttributedString *attributedText = [self.textView slk_defaultAttributedStringForText:text]; - [self editAttributedText:attributedText]; -} - -- (void)editAttributedText:(NSAttributedString *)attributedText -{ - if (![_textInputbar canEditText:attributedText.string]) { - return; - } - - // Caches the current text, in case the user cancels the edition - [self slk_cacheAttributedTextToDisk:self.textView.attributedText]; - - [_textInputbar beginTextEditing]; - - // Setting the text after calling -beginTextEditing is safer - [self.textView setAttributedText:attributedText]; - - [self.textView slk_scrollToCaretPositonAnimated:YES]; - - // Brings up the keyboard if needed - [self presentKeyboard:YES]; -} - -- (void)didCommitTextEditing:(id)sender -{ - if (!_textInputbar.isEditing) { - return; - } - - [_textInputbar endTextEdition]; - - // Clears the text and but not the undo manager - [self.textView slk_clearText:NO]; -} - -- (void)didCancelTextEditing:(id)sender -{ - if (!_textInputbar.isEditing) { - return; - } - - [_textInputbar endTextEdition]; - - // Clears the text and but not the undo manager - [self.textView slk_clearText:NO]; - - // Restores any previous cached text before entering in editing mode - [self slk_reloadTextView]; -} - -- (BOOL)canShowTypingIndicator -{ - // Don't show if the text is being edited or auto-completed. - if (_textInputbar.isEditing || self.isAutoCompleting) { - return NO; - } - - return YES; -} - -- (CGFloat)heightForAutoCompletionView -{ - return 0.0; -} - -- (CGFloat)maximumHeightForAutoCompletionView -{ - CGFloat maxiumumHeight = SLKAutoCompletionViewDefaultHeight; - - if (self.isAutoCompleting) { - CGFloat scrollViewHeight = self.scrollViewHC.constant; - scrollViewHeight -= [self slk_topBarsHeight]; - - if (scrollViewHeight < maxiumumHeight) { - maxiumumHeight = scrollViewHeight; - } - } - - return maxiumumHeight; -} - -- (void)didPasteMediaContent:(NSDictionary *)userInfo -{ - // No implementation here. Meant to be overriden in subclass. -} - -- (void)willRequestUndo -{ - NSString *title = NSLocalizedString(@"Undo Typing", nil); - NSString *acceptTitle = NSLocalizedString(@"Undo", nil); - NSString *cancelTitle = NSLocalizedString(@"Cancel", nil); - -#ifdef __IPHONE_8_0 - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:nil preferredStyle:UIAlertControllerStyleAlert]; - - [alertController addAction:[UIAlertAction actionWithTitle:acceptTitle style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { - // Clears the text but doesn't clear the undo manager - if (self.shakeToClearEnabled) { - [self.textView slk_clearText:NO]; - } - }]]; - - [alertController addAction:[UIAlertAction actionWithTitle:cancelTitle style:UIAlertActionStyleCancel handler:NULL]]; - - [self presentViewController:alertController animated:YES completion:nil]; -#else - UIAlertView *alert = [UIAlertView new]; - [alert setTitle:title]; - [alert addButtonWithTitle:acceptTitle]; - [alert addButtonWithTitle:cancelTitle]; - [alert setCancelButtonIndex:1]; - [alert setTag:kSLKAlertViewClearTextTag]; - [alert setDelegate:self]; - [alert show]; -#endif -} - -- (void)setTextInputbarHidden:(BOOL)hidden -{ - [self setTextInputbarHidden:hidden animated:NO]; -} - -- (void)setTextInputbarHidden:(BOOL)hidden animated:(BOOL)animated -{ - if (self.isTextInputbarHidden == hidden) { - return; - } - - _textInputbar.hidden = hidden; - - if (@available(iOS 11.0, *)) { - [self viewSafeAreaInsetsDidChange]; - } - - __weak typeof(self) weakSelf = self; - - void (^animations)(void) = ^void(){ - - weakSelf.textInputbarHC.constant = hidden ? 0.0 : weakSelf.textInputbar.appropriateHeight; - - [weakSelf.view layoutIfNeeded]; - }; - - void (^completion)(BOOL finished) = ^void(BOOL finished){ - if (hidden) { - [self dismissKeyboard:YES]; - } - }; - - if (animated) { - [UIView animateWithDuration:0.25 animations:animations completion:completion]; - } - else { - animations(); - completion(NO); - } -} - - -#pragma mark - Private Methods - -- (void)slk_didPanTextInputBar:(UIPanGestureRecognizer *)gesture -{ - // Textinput dragging isn't supported when - if (!self.view.window || !self.keyboardPanningEnabled || - [self ignoreTextInputbarAdjustment] || self.isPresentedInPopover) { - return; - } - - dispatch_async(dispatch_get_main_queue(), ^{ - [self slk_handlePanGestureRecognizer:gesture]; - }); -} - -- (void)slk_handlePanGestureRecognizer:(UIPanGestureRecognizer *)gesture -{ - // Local variables - static CGPoint startPoint; - static CGRect originalFrame; - static BOOL dragging = NO; - static BOOL presenting = NO; - - __block UIView *keyboardView = [_textInputbar.inputAccessoryView keyboardViewProxy]; - - // When no keyboard view has been detecting, let's skip any handling. - if (!keyboardView) { - return; - } - - // Dynamic variables - CGPoint gestureLocation = [gesture locationInView:self.view]; - CGPoint gestureVelocity = [gesture velocityInView:self.view]; - - CGFloat keyboardMaxY = CGRectGetHeight(SLKKeyWindowBounds()); - CGFloat keyboardMinY = keyboardMaxY - CGRectGetHeight(keyboardView.frame); - - - // Skips this if it's not the expected textView. - // Checking the keyboard height constant helps to disable the view constraints update on iPad when the keyboard is undocked. - // Checking the keyboard status allows to keep the inputAccessoryView valid when still reacing the bottom of the screen. - CGFloat bottomMargin = [self slk_appropriateBottomMargin]; - - if (![self.textView isFirstResponder] || (self.keyboardHC.constant == bottomMargin && self.keyboardStatus == SLKKeyboardStatusDidHide)) { -#if SLKBottomPanningEnabled - if ([gesture.view isEqual:self.scrollViewProxy]) { - if (gestureVelocity.y > 0) { - return; - } - else if ((self.isInverted && ![self.scrollViewProxy slk_isAtTop]) || (!self.isInverted && ![self.scrollViewProxy slk_isAtBottom])) { - return; - } - } - - presenting = YES; -#else - if ([gesture.view isEqual:_textInputbar] && gestureVelocity.y < 0) { - [self presentKeyboard:YES]; - } - return; -#endif - } - - switch (gesture.state) { - case UIGestureRecognizerStateBegan: { - - startPoint = CGPointZero; - dragging = NO; - - if (presenting) { - // Let's first present the keyboard without animation - [self presentKeyboard:NO]; - - // So we can capture the keyboard's view - keyboardView = [_textInputbar.inputAccessoryView keyboardViewProxy]; - - originalFrame = keyboardView.frame; - originalFrame.origin.y = CGRectGetMaxY(self.view.frame); - - // And move the keyboard to the bottom edge - // TODO: Fix an occasional layout glitch when the keyboard appears for the first time. - keyboardView.frame = originalFrame; - } - - break; - } - case UIGestureRecognizerStateChanged: { - - if (CGRectContainsPoint(_textInputbar.frame, gestureLocation) || dragging || presenting){ - - if (CGPointEqualToPoint(startPoint, CGPointZero)) { - startPoint = gestureLocation; - dragging = YES; - - if (!presenting) { - originalFrame = keyboardView.frame; - } - } - - self.movingKeyboard = YES; - - CGPoint transition = CGPointMake(gestureLocation.x - startPoint.x, gestureLocation.y - startPoint.y); - - CGRect keyboardFrame = originalFrame; - - if (presenting) { - keyboardFrame.origin.y += transition.y; - } - else { - keyboardFrame.origin.y += MAX(transition.y, 0.0); - } - - // Makes sure they keyboard is always anchored to the bottom - if (CGRectGetMinY(keyboardFrame) < keyboardMinY) { - keyboardFrame.origin.y = keyboardMinY; - } - - keyboardView.frame = keyboardFrame; - - - self.keyboardHC.constant = [self slk_appropriateKeyboardHeightFromRect:keyboardFrame]; - self.scrollViewHC.constant = [self slk_appropriateScrollViewHeight]; - - // layoutIfNeeded must be called before any further scrollView internal adjustments (content offset and size) - [self.view layoutIfNeeded]; - - // Overrides the scrollView's contentOffset to allow following the same position when dragging the keyboard - CGPoint offset = _scrollViewOffsetBeforeDragging; - - if (self.isInverted) { - if (!self.scrollViewProxy.isDecelerating && self.scrollViewProxy.isTracking) { - self.scrollViewProxy.contentOffset = _scrollViewOffsetBeforeDragging; - } - } - else { - CGFloat keyboardHeightDelta = _keyboardHeightBeforeDragging-self.keyboardHC.constant; - offset.y -= keyboardHeightDelta; - - self.scrollViewProxy.contentOffset = offset; - } - } - - break; - } - case UIGestureRecognizerStatePossible: - case UIGestureRecognizerStateCancelled: - case UIGestureRecognizerStateEnded: - case UIGestureRecognizerStateFailed: { - - if (!dragging) { - break; - } - - CGPoint transition = CGPointMake(0.0, fabs(gestureLocation.y - startPoint.y)); - - CGRect keyboardFrame = originalFrame; - - if (presenting) { - keyboardFrame.origin.y = keyboardMinY; - } - - // The velocity can be changed to hide or show the keyboard based on the gesture - CGFloat minVelocity = 20.0; - CGFloat minDistance = CGRectGetHeight(keyboardFrame)/2.0; - - BOOL hide = (gestureVelocity.y > minVelocity) || (presenting && transition.y < minDistance) || (!presenting && transition.y > minDistance); - - if (hide) keyboardFrame.origin.y = keyboardMaxY; - - self.keyboardHC.constant = [self slk_appropriateKeyboardHeightFromRect:keyboardFrame]; - self.scrollViewHC.constant = [self slk_appropriateScrollViewHeight]; - - [UIView animateWithDuration:0.25 - delay:0.0 - options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionBeginFromCurrentState - animations:^{ - [self.view layoutIfNeeded]; - keyboardView.frame = keyboardFrame; - } - completion:^(BOOL finished) { - if (hide) { - [self dismissKeyboard:NO]; - } - - // Tear down - startPoint = CGPointZero; - originalFrame = CGRectZero; - dragging = NO; - presenting = NO; - - self.movingKeyboard = NO; - }]; - - break; - } - - default: - break; - } -} - -- (void)slk_didTapScrollView:(UIGestureRecognizer *)gesture -{ - if (!self.isPresentedInPopover && ![self ignoreTextInputbarAdjustment]) { - [self dismissKeyboard:YES]; - } -} - -- (void)slk_didPanTextView:(UIGestureRecognizer *)gesture -{ - [self presentKeyboard:YES]; -} - -- (void)slk_performRightAction -{ - NSArray *actions = [self.rightButton actionsForTarget:self forControlEvent:UIControlEventTouchUpInside]; - - if (actions.count > 0 && [self canPressRightButton]) { - [self.rightButton sendActionsForControlEvents:UIControlEventTouchUpInside]; - } -} - -- (void)slk_postKeyboarStatusNotification:(NSNotification *)notification -{ - if ([self ignoreTextInputbarAdjustment] || self.isTransitioning) { - return; - } - - NSMutableDictionary *userInfo = [notification.userInfo mutableCopy]; - - CGRect beginFrame = [notification.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue]; - CGRect endFrame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; - - // Fixes iOS7 oddness with inverted values on landscape orientation - if (!SLK_IS_IOS8_AND_HIGHER && SLK_IS_LANDSCAPE) { - beginFrame = SLKRectInvert(beginFrame); - endFrame = SLKRectInvert(endFrame); - } - - CGFloat keyboardHeight = CGRectGetHeight(endFrame); - - beginFrame.size.height = keyboardHeight; - endFrame.size.height = keyboardHeight; - - [userInfo setObject:[NSValue valueWithCGRect:beginFrame] forKey:UIKeyboardFrameBeginUserInfoKey]; - [userInfo setObject:[NSValue valueWithCGRect:endFrame] forKey:UIKeyboardFrameEndUserInfoKey]; - - NSString *name = [self slk_appropriateKeyboardNotificationName:notification]; - [[NSNotificationCenter defaultCenter] postNotificationName:name object:self.textView userInfo:userInfo]; -} - -- (void)slk_enableTypingSuggestionIfNeeded -{ - if (![self.textView isFirstResponder]) { - return; - } - - BOOL enable = !self.isAutoCompleting; - - NSString *inputPrimaryLanguage = self.textView.textInputMode.primaryLanguage; - - // Toggling autocorrect on Japanese keyboards breaks autocompletion by replacing the autocompletion prefix by an empty string. - // So for now, let's not disable autocorrection for Japanese. - if ([inputPrimaryLanguage isEqualToString:@"ja-JP"]) { - return; - } - - // Let's avoid refreshing the text view while dictation mode is enabled. - // This solves a crash some users were experiencing when auto-completing with the dictation input mode. - if ([inputPrimaryLanguage isEqualToString:@"dictation"]) { - return; - } - - if (enable == NO && ![self shouldDisableTypingSuggestionForAutoCompletion]) { - return; - } - - [self.textView setTypingSuggestionEnabled:enable]; -} - -- (void)slk_dismissTextInputbarIfNeeded -{ - CGFloat bottomMargin = [self slk_appropriateBottomMargin]; - - if (self.keyboardHC.constant == bottomMargin) { - return; - } - - self.keyboardHC.constant = bottomMargin; - self.scrollViewHC.constant = [self slk_appropriateScrollViewHeight]; - - [self slk_hideAutoCompletionViewIfNeeded]; - - [self.view layoutIfNeeded]; -} - -- (void)slk_detectKeyboardStatesInNotification:(NSNotification *)notification -{ - // Tear down - _externalKeyboardDetected = NO; - _keyboardUndocked = NO; - - if (self.isMovingKeyboard) { - return; - } - - // Based on http://stackoverflow.com/a/5760910/287403 - // We can determine if the external keyboard is showing by adding the origin.y of the target finish rect (end when showing, begin when hiding) to the inputAccessoryHeight. - // If it's greater(or equal) the window height, it's an external keyboard. - CGRect beginRect = [notification.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue]; - CGRect endRect = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; - - // Grab the base view for conversions as we don't want window coordinates in < iOS 8 - // iOS 8 fixes the whole coordinate system issue for us, but iOS 7 doesn't rotate the app window coordinate space. - UIView *baseView = self.view.window.rootViewController.view; - - CGRect screenBounds = [UIScreen mainScreen].bounds; - - // Convert the main screen bounds into the correct coordinate space but ignore the origin. - CGRect viewBounds = [self.view convertRect:SLKKeyWindowBounds() fromView:nil]; - viewBounds = CGRectMake(0, 0, viewBounds.size.width, viewBounds.size.height); - - // We want these rects in the correct coordinate space as well. - CGRect convertBegin = [baseView convertRect:beginRect fromView:nil]; - CGRect convertEnd = [baseView convertRect:endRect fromView:nil]; - - if ([notification.name isEqualToString:UIKeyboardWillShowNotification]) { - if (convertEnd.origin.y >= viewBounds.size.height) { - _externalKeyboardDetected = YES; - } - } - else if ([notification.name isEqualToString:UIKeyboardWillHideNotification]) { - // The additional logic check here (== to width) accounts for a glitch (iOS 8 only?) where the window has rotated it's coordinates - // but the beginRect doesn't yet reflect that. It should never cause a false positive. - if (convertBegin.origin.y >= viewBounds.size.height || - convertBegin.origin.y == viewBounds.size.width) { - _externalKeyboardDetected = YES; - } - } - - if (SLK_IS_IPAD && CGRectGetMaxY(convertEnd) < CGRectGetMaxY(screenBounds)) { - - // The keyboard is undocked or split (iPad Only) - _keyboardUndocked = YES; - - // An external keyboard cannot be detected anymore - _externalKeyboardDetected = NO; - } -} - -- (void)slk_adjustContentConfigurationIfNeeded -{ - UIEdgeInsets contentInset = self.scrollViewProxy.contentInset; - - // When inverted, we need to substract the top bars height (generally status bar + navigation bar's) to align the top of the - // scrollView correctly to its top edge. - if (self.inverted) { - contentInset.bottom = [self slk_topBarsHeight]; - contentInset.top = contentInset.bottom > 0.0 ? 0.0 : contentInset.top; - } - else { - contentInset.bottom = 0.0; - } - - self.scrollViewProxy.contentInset = contentInset; - self.scrollViewProxy.scrollIndicatorInsets = contentInset; -} - -- (void)slk_prepareForInterfaceTransitionWithDuration:(NSTimeInterval)duration -{ - self.transitioning = YES; - - [self.view layoutIfNeeded]; - - if ([self.textView isFirstResponder]) { - [self.textView slk_scrollToCaretPositonAnimated:NO]; - } - else { - [self.textView slk_scrollToBottomAnimated:NO]; - } - - // Disables the flag after the rotation animation is finished - // Hacky but works. - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - self.transitioning = NO; - }); -} - - -#pragma mark - Keyboard Events - -- (void)didPressReturnKey:(UIKeyCommand *)keyCommand -{ - if (_textInputbar.isEditing) { - [self didCommitTextEditing:keyCommand]; - } - else { - [self slk_performRightAction]; - } -} - -- (void)didPressEscapeKey:(UIKeyCommand *)keyCommand -{ - if (self.isAutoCompleting) { - [self cancelAutoCompletion]; - } - else if (_textInputbar.isEditing) { - [self didCancelTextEditing:keyCommand]; - } - - CGFloat bottomMargin = [self slk_appropriateBottomMargin]; - - if ([self ignoreTextInputbarAdjustment] || ([self.textView isFirstResponder] && self.keyboardHC.constant == bottomMargin)) { - return; - } - - [self dismissKeyboard:YES]; -} - -- (void)didPressArrowKey:(UIKeyCommand *)keyCommand -{ - [self.textView didPressArrowKey:keyCommand]; -} - - -#pragma mark - Notification Events - -- (void)slk_willShowOrHideKeyboard:(NSNotification *)notification -{ - SLKKeyboardStatus status = [self slk_keyboardStatusForNotification:notification]; - - // Skips if the view isn't visible. - if (!self.isViewVisible) { - return; - } - - // Skips if it is presented inside of a popover. - if (self.isPresentedInPopover) { - return; - } - - // Skips if textview did refresh only. - if (self.textView.didNotResignFirstResponder) { - return; - } - - UIResponder *currentResponder = [UIResponder slk_currentFirstResponder]; - - // Skips if it's not the expected textView and shouldn't force adjustment of the text input bar. - // This will also dismiss the text input bar if it's visible, and exit auto-completion mode if enabled. - if (currentResponder && ![currentResponder isEqual:self.textView] && ![self forceTextInputbarAdjustmentForResponder:currentResponder]) { - [self slk_dismissTextInputbarIfNeeded]; - return; - } - - // Skips if it's the current status - if (self.keyboardStatus == status) { - return; - } - - // Programatically stops scrolling before updating the view constraints (to avoid scrolling glitch). - if (status == SLKKeyboardStatusWillShow) { - [self.scrollViewProxy slk_stopScrolling]; - } - - // Stores the previous keyboard height - CGFloat previousKeyboardHeight = self.keyboardHC.constant; - - // Updates the height constraints' constants - self.keyboardHC.constant = [self slk_appropriateKeyboardHeightFromNotification:notification]; - self.scrollViewHC.constant = [self slk_appropriateScrollViewHeight]; - - // Updates and notifies about the keyboard status update - if ([self slk_updateKeyboardStatus:status]) { - // Posts custom keyboard notification, if logical conditions apply - [self slk_postKeyboarStatusNotification:notification]; - } - - // Hides the auto-completion view if the keyboard is being dismissed. - if (![self.textView isFirstResponder] || status == SLKKeyboardStatusWillHide) { - [self slk_hideAutoCompletionViewIfNeeded]; - } - - UIScrollView *scrollView = self.scrollViewProxy; - - NSInteger curve = [notification.userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]; - NSTimeInterval duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; - - CGRect beginFrame = [notification.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue]; - CGRect endFrame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; - - void (^animations)(void) = ^void() { - // Scrolls to bottom only if the keyboard is about to show. - if (self.shouldScrollToBottomAfterKeyboardShows && self.keyboardStatus == SLKKeyboardStatusWillShow) { - if (self.isInverted) { - [scrollView slk_scrollToTopAnimated:YES]; - } - else { - [scrollView slk_scrollToBottomAnimated:YES]; - } - } - }; - - // Begin and end frames are the same when the keyboard is shown during navigation controller's push animation. - // The animation happens in window coordinates (slides from right to left) but doesn't in the view controller's view coordinates. - // Second condition: check if the height of the keyboard changed. - if (!CGRectEqualToRect(beginFrame, endFrame) || fabs(previousKeyboardHeight - self.keyboardHC.constant) > 0.0) - { - // Content Offset correction if not inverted and not auto-completing. - if (!self.isInverted && !self.isAutoCompleting) { - - CGFloat scrollViewHeight = self.scrollViewHC.constant; - CGFloat keyboardHeight = self.keyboardHC.constant; - CGSize contentSize = scrollView.contentSize; - CGPoint contentOffset = scrollView.contentOffset; - - CGFloat newOffset = MIN(contentSize.height - scrollViewHeight, - contentOffset.y + keyboardHeight - previousKeyboardHeight); - - scrollView.contentOffset = CGPointMake(contentOffset.x, newOffset); - } - - // Only for this animation, we set bo to bounce since we want to give the impression that the text input is glued to the keyboard. - [self.view slk_animateLayoutIfNeededWithDuration:duration - bounce:NO - options:(curve<<16)|UIViewAnimationOptionLayoutSubviews|UIViewAnimationOptionBeginFromCurrentState - animations:animations - completion:NULL]; - } - else { - animations(); - } -} - -- (void)slk_didShowOrHideKeyboard:(NSNotification *)notification -{ - SLKKeyboardStatus status = [self slk_keyboardStatusForNotification:notification]; - - // Skips if the view isn't visible - if (!self.isViewVisible) { - if (status == SLKKeyboardStatusDidHide && self.keyboardStatus == SLKKeyboardStatusWillHide) { - // Even if the view isn't visible anymore, let's still continue to update all states. - } - else { - return; - } - } - - // Skips if it is presented inside of a popover - if (self.isPresentedInPopover) { - return; - } - - // Skips if textview did refresh only - if (self.textView.didNotResignFirstResponder) { - return; - } - - // Skips if it's the current status - if (self.keyboardStatus == status) { - return; - } - - // Updates and notifies about the keyboard status update - if ([self slk_updateKeyboardStatus:status]) { - // Posts custom keyboard notification, if logical conditions apply - [self slk_postKeyboarStatusNotification:notification]; - } - - // After showing keyboard, check if the current cursor position could diplay autocompletion - if ([self.textView isFirstResponder] && status == SLKKeyboardStatusDidShow && !self.isAutoCompleting) { - - // Wait till the end of the current run loop - dispatch_async(dispatch_get_main_queue(), ^{ - [self slk_processTextForAutoCompletion]; - }); - } - - // Very important to invalidate this flag after the keyboard is dismissed or presented, to start with a clean state next time. - self.movingKeyboard = NO; -} - -- (void)slk_didPostSLKKeyboardNotification:(NSNotification *)notification -{ - if (![notification.object isEqual:self.textView]) { - return; - } - - // Used for debug only - NSLog(@"%@ %s: %@", NSStringFromClass([self class]), __FUNCTION__, notification); -} - -- (void)slk_willChangeTextViewText:(NSNotification *)notification -{ - // Skips this it's not the expected textView. - if (![notification.object isEqual:self.textView]) { - return; - } - - [self textWillUpdate]; -} - -- (void)slk_didChangeTextViewText:(NSNotification *)notification -{ - // Skips this it's not the expected textView. - if (![notification.object isEqual:self.textView]) { - return; - } - - // Animated only if the view already appeared. - [self textDidUpdate:self.isViewVisible]; - - // Process the text at every change, when the view is visible - if (self.isViewVisible) { - [self slk_processTextForAutoCompletion]; - } -} - -- (void)slk_didChangeTextViewContentSize:(NSNotification *)notification -{ - // Skips this it's not the expected textView. - if (![notification.object isEqual:self.textView]) { - return; - } - - // Animated only if the view already appeared. - [self textDidUpdate:self.isViewVisible]; -} - -- (void)slk_didChangeTextViewSelectedRange:(NSNotification *)notification -{ - // Skips this it's not the expected textView. - if (![notification.object isEqual:self.textView]) { - return; - } - - [self textSelectionDidChange]; -} - -- (void)slk_didChangeTextViewPasteboard:(NSNotification *)notification -{ - // Skips this if it's not the expected textView. - if (![self.textView isFirstResponder]) { - return; - } - - // Notifies only if the pasted item is nested in a dictionary. - if (notification.userInfo) { - [self didPasteMediaContent:notification.userInfo]; - } -} - -- (void)slk_didShakeTextView:(NSNotification *)notification -{ - // Skips this if it's not the expected textView. - if (![self.textView isFirstResponder]) { - return; - } - - // Notifies of the shake gesture if undo mode is on and the text view is not empty - if (self.shakeToClearEnabled && self.textView.text.length > 0) { - [self willRequestUndo]; - } -} - -- (void)slk_willShowOrHideTypeIndicatorView:(UIView *)view -{ - // Skips if the typing indicator should not show. Ignores the checking if it's trying to hide. - if (![self canShowTypingIndicator] && view.isVisible) { - return; - } - - CGFloat systemLayoutSizeHeight = [view systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height; - CGFloat height = view.isVisible ? systemLayoutSizeHeight : 0.0; - - self.typingIndicatorViewHC.constant = height; - self.scrollViewHC.constant -= height; - - if (view.isVisible) { - view.hidden = NO; - } - - [self.view slk_animateLayoutIfNeededWithBounce:self.bounces - options:UIViewAnimationOptionCurveEaseInOut - animations:NULL - completion:^(BOOL finished) { - if (!view.isVisible) { - view.hidden = YES; - } - }]; -} - - -#pragma mark - KVO Events - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context -{ - if ([object conformsToProtocol:@protocol(SLKTypingIndicatorProtocol)] && [keyPath isEqualToString:@"visible"]) { - [self slk_willShowOrHideTypeIndicatorView:object]; - } - else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - - -#pragma mark - Auto-Completion Text Processing - -- (void)registerPrefixesForAutoCompletion:(NSArray *)prefixes -{ - if (prefixes.count == 0) { - return; - } - - NSMutableSet *set = [NSMutableSet setWithSet:self.registeredPrefixes]; - [set addObjectsFromArray:[prefixes copy]]; - - _registeredPrefixes = [NSSet setWithSet:set]; -} - -- (BOOL)shouldProcessTextForAutoCompletion -{ - if (!_registeredPrefixes || _registeredPrefixes.count == 0) { - return NO; - } - - return YES; -} - -- (BOOL)shouldDisableTypingSuggestionForAutoCompletion -{ - if (!_registeredPrefixes || _registeredPrefixes.count == 0) { - return NO; - } - - return YES; -} - -- (void)didChangeAutoCompletionPrefix:(NSString *)prefix andWord:(NSString *)word -{ - // No implementation here. Meant to be overriden in subclass. -} - -- (void)showAutoCompletionView:(BOOL)show -{ - // Reloads the tableview before showing/hiding - if (show) { - [_autoCompletionView reloadData]; - } - - self.autoCompleting = show; - - // Toggles auto-correction if requiered - [self slk_enableTypingSuggestionIfNeeded]; - - CGFloat viewHeight = show ? [self heightForAutoCompletionView] : 0.0; - - if (self.autoCompletionViewHC.constant == viewHeight) { - return; - } - - // If the auto-completion view height is bigger than the maximum height allows, it is reduce to that size. Default 140 pts. - CGFloat maximumHeight = [self maximumHeightForAutoCompletionView]; - - if (viewHeight > maximumHeight) { - viewHeight = maximumHeight; - } - - CGFloat contentViewHeight = self.scrollViewHC.constant + self.autoCompletionViewHC.constant; - - // On iPhone, the auto-completion view can't extend beyond the content view height - if (SLK_IS_IPHONE && viewHeight > contentViewHeight) { - viewHeight = contentViewHeight; - } - - self.autoCompletionViewHC.constant = viewHeight; - - [self.view slk_animateLayoutIfNeededWithBounce:self.bounces - options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionLayoutSubviews|UIViewAnimationOptionBeginFromCurrentState|UIViewAnimationOptionAllowUserInteraction - animations:NULL]; -} - -- (void)showAutoCompletionViewWithPrefix:(NSString *)prefix andWord:(NSString *)word prefixRange:(NSRange)prefixRange -{ - if ([self.registeredPrefixes containsObject:prefix]) { - _foundPrefix = prefix; - _foundWord = word; - _foundPrefixRange = prefixRange; - [self didChangeAutoCompletionPrefix:self.foundPrefix andWord:self.foundWord]; - [self showAutoCompletionView:YES]; - } -} - -- (void)acceptAutoCompletionWithString:(NSString *)string -{ - [self acceptAutoCompletionWithString:string keepPrefix:YES]; -} - -- (void)acceptAutoCompletionWithString:(NSString *)string keepPrefix:(BOOL)keepPrefix -{ - if (string.length == 0) { - return; - } - - NSUInteger location = self.foundPrefixRange.location; - if (keepPrefix) { - location += self.foundPrefixRange.length; - } - - NSUInteger length = self.foundWord.length; - if (!keepPrefix) { - length += self.foundPrefixRange.length; - } - - NSRange range = NSMakeRange(location, length); - NSRange insertionRange = [self.textView slk_insertText:string inRange:range]; - - self.textView.selectedRange = NSMakeRange(insertionRange.location, 0); - - [self.textView slk_scrollToCaretPositonAnimated:NO]; - - [self cancelAutoCompletion]; -} - -- (void)cancelAutoCompletion -{ - [self slk_invalidateAutoCompletion]; - [self slk_hideAutoCompletionViewIfNeeded]; -} - -- (void)slk_processTextForAutoCompletion -{ - NSString *text = self.textView.text; - - if ((!self.isAutoCompleting && text.length == 0) || self.isTransitioning || ![self shouldProcessTextForAutoCompletion]) { - return; - } - - [self.textView lookForPrefixes:self.registeredPrefixes - completion:^(NSString *prefix, NSString *word, NSRange wordRange) { - - if (prefix.length > 0 && word.length > 0) { - - // Captures the detected symbol prefix - _foundPrefix = prefix; - - // Removes the found prefix, or not. - _foundWord = [word substringFromIndex:prefix.length]; - - // Used later for replacing the detected range with a new string alias returned in -acceptAutoCompletionWithString: - _foundPrefixRange = NSMakeRange(wordRange.location, prefix.length); - - [self slk_handleProcessedWord:word wordRange:wordRange]; - } - else { - [self cancelAutoCompletion]; - } - }]; -} - -- (void)slk_handleProcessedWord:(NSString *)word wordRange:(NSRange)wordRange -{ - // Cancel auto-completion if the cursor is placed before the prefix - if (self.textView.selectedRange.location <= self.foundPrefixRange.location) { - return [self cancelAutoCompletion]; - } - - if (self.foundPrefix.length > 0) { - if (wordRange.length == 0 || wordRange.length != word.length) { - return [self cancelAutoCompletion]; - } - - if (word.length > 0) { - // If the prefix is still contained in the word, cancels - if ([self.foundWord rangeOfString:self.foundPrefix].location != NSNotFound) { - return [self cancelAutoCompletion]; - } - } - else { - return [self cancelAutoCompletion]; - } - } - else { - return [self cancelAutoCompletion]; - } - - [self didChangeAutoCompletionPrefix:self.foundPrefix andWord:self.foundWord]; -} - -- (void)slk_invalidateAutoCompletion -{ - _foundPrefix = nil; - _foundWord = nil; - _foundPrefixRange = NSMakeRange(0,0); - - [_autoCompletionView setContentOffset:CGPointZero]; -} - -- (void)slk_hideAutoCompletionViewIfNeeded -{ - if (self.isAutoCompleting) { - [self showAutoCompletionView:NO]; - } -} - - -#pragma mark - Text Caching - -- (NSString *)keyForTextCaching -{ - // No implementation here. Meant to be overriden in subclass. - return nil; -} - -- (NSString *)slk_keyForPersistency -{ - NSString *key = [self keyForTextCaching]; - if (key == nil) { - return nil; - } - return [NSString stringWithFormat:@"%@.%@", SLKTextViewControllerDomain, key]; -} - -- (void)slk_reloadTextView -{ - NSString *key = [self slk_keyForPersistency]; - if (key == nil) { - return; - } - NSAttributedString *cachedAttributedText = [[NSAttributedString alloc] initWithString:@""]; - - id obj = [[NSUserDefaults standardUserDefaults] objectForKey:key]; - if (obj) { - if ([obj isKindOfClass:[NSString class]]) { - cachedAttributedText = [[NSAttributedString alloc] initWithString:obj]; - } - else if ([obj isKindOfClass:[NSData class]]) { - cachedAttributedText = [NSKeyedUnarchiver unarchiveObjectWithData:obj]; - } - } - - if (self.textView.attributedText.length == 0 || cachedAttributedText.length > 0) { - self.textView.attributedText = cachedAttributedText; - } -} - -- (void)cacheTextView -{ - [self slk_cacheAttributedTextToDisk:self.textView.attributedText]; -} - -- (void)clearCachedText -{ - [self slk_cacheAttributedTextToDisk:nil]; -} - -- (void)slk_cacheAttributedTextToDisk:(NSAttributedString *)attributedText -{ - NSString *key = [self slk_keyForPersistency]; - - if (!key || key.length == 0) { - return; - } - - NSAttributedString *cachedAttributedText = [[NSAttributedString alloc] initWithString:@""]; - id obj = [[NSUserDefaults standardUserDefaults] objectForKey:key]; - if (obj) { - if ([obj isKindOfClass:[NSString class]]) { - cachedAttributedText = [[NSAttributedString alloc] initWithString:obj]; - } - else if ([obj isKindOfClass:[NSData class]]) { - cachedAttributedText = [NSKeyedUnarchiver unarchiveObjectWithData:obj]; - } - } - - // Caches text only if its a valid string and not already cached - if (attributedText.length > 0 && ![attributedText isEqualToAttributedString:cachedAttributedText]) { - NSData *data = [NSKeyedArchiver archivedDataWithRootObject:attributedText]; - [[NSUserDefaults standardUserDefaults] setObject:data forKey:key]; - } - // Clears cache only if it exists - else if (attributedText.length == 0 && cachedAttributedText.length > 0) { - [[NSUserDefaults standardUserDefaults] removeObjectForKey:key]; - } - else { - // Skips so it doesn't hit 'synchronize' unnecessarily - return; - } - - [[NSUserDefaults standardUserDefaults] synchronize]; -} - -- (void)slk_cacheTextToDisk:(NSString *)text -{ - NSString *key = [self slk_keyForPersistency]; - - if (!key || key.length == 0) { - return; - } - - NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text]; - [self slk_cacheAttributedTextToDisk:attributedText]; -} - -+ (void)clearAllCachedText -{ - NSMutableArray *cachedKeys = [NSMutableArray new]; - - for (NSString *key in [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]) { - if ([key rangeOfString:SLKTextViewControllerDomain].location != NSNotFound) { - [cachedKeys addObject:key]; - } - } - - if (cachedKeys.count == 0) { - return; - } - - for (NSString *cachedKey in cachedKeys) { - [[NSUserDefaults standardUserDefaults] removeObjectForKey:cachedKey]; - } - - [[NSUserDefaults standardUserDefaults] synchronize]; -} - - -#pragma mark - Customization - -- (void)registerClassForTextView:(Class)aClass -{ - if (aClass == nil) { - return; - } - - NSAssert([aClass isSubclassOfClass:[SLKTextView class]], @"The registered class is invalid, it must be a subclass of SLKTextView."); - self.textViewClass = aClass; -} - -- (void)registerClassForTypingIndicatorView:(Class)aClass -{ - if (aClass == nil) { - return; - } - - NSAssert([aClass isSubclassOfClass:[UIView class]], @"The registered class is invalid, it must be a subclass of UIView."); - self.typingIndicatorViewClass = aClass; -} - - -#pragma mark - UITextViewDelegate Methods - -- (BOOL)textView:(SLKTextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text -{ - if (![textView isKindOfClass:[SLKTextView class]]) { - return YES; - } - - BOOL newWordInserted = ([text rangeOfCharacterFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].location != NSNotFound); - - // Records text for undo for every new word - if (newWordInserted) { - [textView slk_prepareForUndo:@"Word Change"]; - } - - // Detects double spacebar tapping, to replace the default "." insert with a formatting symbol, if needed. - if (textView.isFormattingEnabled && range.location > 0 && text.length > 0 && - [[NSCharacterSet whitespaceCharacterSet] characterIsMember:[text characterAtIndex:0]] && - [[NSCharacterSet whitespaceCharacterSet] characterIsMember:[textView.text characterAtIndex:range.location - 1]]) { - - BOOL shouldChange = YES; - - // Since we are moving 2 characters to the left, we need for to make sure that the string's lenght, - // before the caret position, is higher than 2. - if ([textView.text substringToIndex:textView.selectedRange.location].length < 2) { - return YES; - } - - NSRange wordRange = range; - wordRange.location -= 2; // minus the white space added with the double space bar tapping - - if (wordRange.location == NSNotFound) { - return YES; - } - - NSArray *symbols = textView.registeredSymbols; - - NSMutableCharacterSet *invalidCharacters = [NSMutableCharacterSet new]; - [invalidCharacters formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - [invalidCharacters formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]]; - [invalidCharacters removeCharactersInString:[symbols componentsJoinedByString:@""]]; - - for (NSString *symbol in symbols) { - - // Detects the closest registered symbol to the caret, from right to left - NSRange searchRange = NSMakeRange(0, wordRange.location); - NSRange prefixRange = [textView.text rangeOfString:symbol options:NSBackwardsSearch range:searchRange]; - - if (prefixRange.location == NSNotFound) { - continue; - } - - NSRange nextCharRange = NSMakeRange(prefixRange.location+1, 1); - NSString *charAfterSymbol = [textView.text substringWithRange:nextCharRange]; - - if (prefixRange.location != NSNotFound && ![invalidCharacters characterIsMember:[charAfterSymbol characterAtIndex:0]]) { - - if ([self textView:textView shouldInsertSuffixForFormattingWithSymbol:symbol prefixRange:prefixRange]) { - - NSRange suffixRange; - [textView wordAtRange:wordRange rangeInText:&suffixRange]; - - // Skip if the detected word already has a suffix - if ([[textView.text substringWithRange:suffixRange] hasSuffix:symbol]) { - continue; - } - - suffixRange.location += suffixRange.length; - suffixRange.length = 0; - - NSString *lastCharacter = [textView.text substringWithRange:NSMakeRange(suffixRange.location, 1)]; - - // Checks if the last character was a line break, so we append the symbol in the next line too - if ([[NSCharacterSet newlineCharacterSet] characterIsMember:[lastCharacter characterAtIndex:0]]) { - suffixRange.location += 1; - } - - [textView slk_insertText:symbol inRange:suffixRange]; - shouldChange = NO; - - // Reset the original cursor location +1 for the new character - NSRange adjustedCursorPosition = NSMakeRange(range.location + 1, 0); - textView.selectedRange = adjustedCursorPosition; - - break; // exit - } - } - } - - return shouldChange; - } - else if ([text isEqualToString:@"\n"]) { - //Detected break. Should insert new line break programatically instead. - [textView slk_insertNewLineBreak]; - - return NO; - } - else { - NSDictionary *userInfo = @{@"text": text, @"range": [NSValue valueWithRange:range]}; - [[NSNotificationCenter defaultCenter] postNotificationName:SLKTextViewTextWillChangeNotification object:self.textView userInfo:userInfo]; - - return YES; - } -} - -- (void)textViewDidChange:(SLKTextView *)textView -{ - // Keep to avoid unnecessary crashes. Was meant to be overriden in subclass while calling super. -} - -- (void)textViewDidChangeSelection:(SLKTextView *)textView -{ - // Keep to avoid unnecessary crashes. Was meant to be overriden in subclass while calling super. -} - -- (BOOL)textViewShouldBeginEditing:(SLKTextView *)textView -{ - return YES; -} - -- (BOOL)textViewShouldEndEditing:(SLKTextView *)textView -{ - return YES; -} - -- (void)textViewDidBeginEditing:(SLKTextView *)textView -{ - // No implementation here. Meant to be overriden in subclass. -} - -- (void)textViewDidEndEditing:(SLKTextView *)textView -{ - // No implementation here. Meant to be overriden in subclass. -} - - -#pragma mark - SLKTextViewDelegate Methods - -- (BOOL)textView:(SLKTextView *)textView shouldOfferFormattingForSymbol:(NSString *)symbol -{ - return YES; -} - -- (BOOL)textView:(SLKTextView *)textView shouldInsertSuffixForFormattingWithSymbol:(NSString *)symbol prefixRange:(NSRange)prefixRange -{ - if (prefixRange.location > 0) { - NSRange previousCharRange = NSMakeRange(prefixRange.location-1, 1); - NSString *previousCharacter = [self.textView.text substringWithRange:previousCharRange]; - - // Only insert a suffix if the character before the prefix was a whitespace or a line break - if ([previousCharacter rangeOfCharacterFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].location != NSNotFound) { - return YES; - } - else { - return NO; - } - } - - return YES; -} - - -#pragma mark - UITableViewDataSource Methods - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return 0; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return nil; -} - - -#pragma mark - UICollectionViewDataSource Methods - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section; -{ - return 0; -} - -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath -{ - return nil; -} - - -#pragma mark - UIScrollViewDelegate Methods - -- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView -{ - if (!self.scrollViewProxy.scrollsToTop || self.keyboardStatus == SLKKeyboardStatusWillShow) { - return NO; - } - - if (self.isInverted) { - [self.scrollViewProxy slk_scrollToBottomAnimated:YES]; - return NO; - } - else { - return YES; - } -} - -- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate -{ - self.movingKeyboard = NO; -} - -- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView -{ - self.movingKeyboard = NO; -} - -- (void)scrollViewDidScroll:(UIScrollView *)scrollView -{ - if ([scrollView isEqual:_autoCompletionView]) { - CGRect frame = self.autoCompletionHairline.frame; - frame.origin.y = scrollView.contentOffset.y; - self.autoCompletionHairline.frame = frame; - } - else { - if (!self.isMovingKeyboard) { - _scrollViewOffsetBeforeDragging = scrollView.contentOffset; - _keyboardHeightBeforeDragging = self.keyboardHC.constant; - } - } -} - - -#pragma mark - UIGestureRecognizerDelegate Methods - -- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gesture -{ - if ([gesture isEqual:self.singleTapGesture]) { - return [self.textView isFirstResponder] && ![self ignoreTextInputbarAdjustment]; - } - else if ([gesture isEqual:self.verticalPanGesture]) { - return self.keyboardPanningEnabled && ![self ignoreTextInputbarAdjustment]; - } - - return NO; -} - - -#pragma mark - UIAlertViewDelegate Methods - -#ifndef __IPHONE_8_0 -- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex -{ - if (alertView.tag != kSLKAlertViewClearTextTag || buttonIndex == [alertView cancelButtonIndex] ) { - return; - } - - // Clears the text but doesn't clear the undo manager - if (self.shakeToClearEnabled) { - [self.textView slk_clearText:NO]; - } -} -#endif - - -#pragma mark - View Auto-Layout - -- (void)slk_setupViewConstraints -{ - NSDictionary *views = @{@"scrollView": self.scrollViewProxy, - @"autoCompletionView": self.autoCompletionView, - @"typingIndicatorView": self.typingIndicatorProxyView, - @"textInputbar": self.textInputbar - }; - - [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView(0@750)][typingIndicatorView(0)]-0@999-[textInputbar(0)]|" options:0 metrics:nil views:views]]; - [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=0)-[autoCompletionView(0@750)][typingIndicatorView]" options:0 metrics:nil views:views]]; - [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics:nil views:views]]; - [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[autoCompletionView]|" options:0 metrics:nil views:views]]; - [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[typingIndicatorView]|" options:0 metrics:nil views:views]]; - [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[textInputbar]|" options:0 metrics:nil views:views]]; - - self.scrollViewHC = [self.view slk_constraintForAttribute:NSLayoutAttributeHeight firstItem:self.scrollViewProxy secondItem:nil]; - self.autoCompletionViewHC = [self.view slk_constraintForAttribute:NSLayoutAttributeHeight firstItem:self.autoCompletionView secondItem:nil]; - self.typingIndicatorViewHC = [self.view slk_constraintForAttribute:NSLayoutAttributeHeight firstItem:self.typingIndicatorProxyView secondItem:nil]; - self.textInputbarHC = [self.view slk_constraintForAttribute:NSLayoutAttributeHeight firstItem:self.textInputbar secondItem:nil]; - self.keyboardHC = [self.view slk_constraintForAttribute:NSLayoutAttributeBottom firstItem:self.view secondItem:self.textInputbar]; - - [self slk_updateViewConstraints]; -} - -- (void)slk_updateViewConstraints -{ - self.textInputbarHC.constant = self.textInputbar.minimumInputbarHeight; - self.scrollViewHC.constant = [self slk_appropriateScrollViewHeight]; - self.keyboardHC.constant = [self slk_appropriateKeyboardHeightFromRect:CGRectNull]; - - if (_textInputbar.isEditing) { - self.textInputbarHC.constant += self.textInputbar.editorContentViewHeight; - } - - [super updateViewConstraints]; -} - - -#pragma mark - Keyboard Command registration - -- (void)slk_registerKeyCommands -{ - __weak typeof(self) weakSelf = self; - - // Enter Key - [self.textView observeKeyInput:@"\r" modifiers:0 title:NSLocalizedString(@"Send/Accept", nil) completion:^(UIKeyCommand *keyCommand) { - [weakSelf didPressReturnKey:keyCommand]; - }]; - - // Esc Key - [self.textView observeKeyInput:UIKeyInputEscape modifiers:0 title:NSLocalizedString(@"Dismiss", nil) completion:^(UIKeyCommand *keyCommand) { - [weakSelf didPressEscapeKey:keyCommand]; - }]; - - // Up Arrow - [self.textView observeKeyInput:UIKeyInputUpArrow modifiers:0 title:nil completion:^(UIKeyCommand *keyCommand) { - [weakSelf didPressArrowKey:keyCommand]; - }]; - - // Down Arrow - [self.textView observeKeyInput:UIKeyInputDownArrow modifiers:0 title:nil completion:^(UIKeyCommand *keyCommand) { - [weakSelf didPressArrowKey:keyCommand]; - }]; -} - -- (NSArray *)keyCommands -{ - // Important to keep this in, for backwards compatibility. - return @[]; -} - - -#pragma mark - NSNotificationCenter registration - -- (void)slk_registerNotifications -{ - [self slk_unregisterNotifications]; - - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - - // Keyboard notifications - [notificationCenter addObserver:self selector:@selector(slk_willShowOrHideKeyboard:) name:UIKeyboardWillShowNotification object:nil]; - [notificationCenter addObserver:self selector:@selector(slk_willShowOrHideKeyboard:) name:UIKeyboardWillHideNotification object:nil]; - [notificationCenter addObserver:self selector:@selector(slk_didShowOrHideKeyboard:) name:UIKeyboardDidShowNotification object:nil]; - [notificationCenter addObserver:self selector:@selector(slk_didShowOrHideKeyboard:) name:UIKeyboardDidHideNotification object:nil]; - -#if SLK_KEYBOARD_NOTIFICATION_DEBUG - [notificationCenter addObserver:self selector:@selector(slk_didPostSLKKeyboardNotification:) name:SLKKeyboardWillShowNotification object:nil]; - [notificationCenter addObserver:self selector:@selector(slk_didPostSLKKeyboardNotification:) name:SLKKeyboardDidShowNotification object:nil]; - [notificationCenter addObserver:self selector:@selector(slk_didPostSLKKeyboardNotification:) name:SLKKeyboardWillHideNotification object:nil]; - [notificationCenter addObserver:self selector:@selector(slk_didPostSLKKeyboardNotification:) name:SLKKeyboardDidHideNotification object:nil]; -#endif - - // TextView notifications - [notificationCenter addObserver:self selector:@selector(slk_willChangeTextViewText:) name:SLKTextViewTextWillChangeNotification object:nil]; - [notificationCenter addObserver:self selector:@selector(slk_didChangeTextViewText:) name:UITextViewTextDidChangeNotification object:nil]; - [notificationCenter addObserver:self selector:@selector(slk_didChangeTextViewContentSize:) name:SLKTextViewContentSizeDidChangeNotification object:nil]; - [notificationCenter addObserver:self selector:@selector(slk_didChangeTextViewSelectedRange:) name:SLKTextViewSelectedRangeDidChangeNotification object:nil]; - [notificationCenter addObserver:self selector:@selector(slk_didChangeTextViewPasteboard:) name:SLKTextViewDidPasteItemNotification object:nil]; - [notificationCenter addObserver:self selector:@selector(slk_didShakeTextView:) name:SLKTextViewDidShakeNotification object:nil]; - - // Application notifications - [notificationCenter addObserver:self selector:@selector(cacheTextView) name:UIApplicationWillTerminateNotification object:nil]; - [notificationCenter addObserver:self selector:@selector(cacheTextView) name:UIApplicationDidEnterBackgroundNotification object:nil]; - [notificationCenter addObserver:self selector:@selector(cacheTextView) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; -} - -- (void)slk_unregisterNotifications -{ - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - - // Keyboard notifications - [notificationCenter removeObserver:self name:UIKeyboardWillShowNotification object:nil]; - [notificationCenter removeObserver:self name:UIKeyboardWillHideNotification object:nil]; - [notificationCenter removeObserver:self name:UIKeyboardDidShowNotification object:nil]; - [notificationCenter removeObserver:self name:UIKeyboardDidHideNotification object:nil]; - -#if SLK_KEYBOARD_NOTIFICATION_DEBUG - [notificationCenter removeObserver:self name:SLKKeyboardWillShowNotification object:nil]; - [notificationCenter removeObserver:self name:SLKKeyboardDidShowNotification object:nil]; - [notificationCenter removeObserver:self name:SLKKeyboardWillHideNotification object:nil]; - [notificationCenter removeObserver:self name:SLKKeyboardDidHideNotification object:nil]; -#endif - - // TextView notifications - [notificationCenter removeObserver:self name:UITextViewTextDidBeginEditingNotification object:nil]; - [notificationCenter removeObserver:self name:UITextViewTextDidEndEditingNotification object:nil]; - [notificationCenter removeObserver:self name:SLKTextViewTextWillChangeNotification object:nil]; - [notificationCenter removeObserver:self name:UITextViewTextDidChangeNotification object:nil]; - [notificationCenter removeObserver:self name:SLKTextViewContentSizeDidChangeNotification object:nil]; - [notificationCenter removeObserver:self name:SLKTextViewSelectedRangeDidChangeNotification object:nil]; - [notificationCenter removeObserver:self name:SLKTextViewDidPasteItemNotification object:nil]; - [notificationCenter removeObserver:self name:SLKTextViewDidShakeNotification object:nil]; - - // Application notifications - [notificationCenter removeObserver:self name:UIApplicationWillTerminateNotification object:nil]; - [notificationCenter removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil]; - [notificationCenter removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; -} - - -#pragma mark - View Auto-Rotation - -#ifdef __IPHONE_8_0 -- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id )coordinator -{ - [super willTransitionToTraitCollection:newCollection withTransitionCoordinator:coordinator]; -} - -- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator -{ - [self slk_prepareForInterfaceTransitionWithDuration:coordinator.transitionDuration]; - - [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; -} -#else -- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration -{ - if ([self respondsToSelector:@selector(viewWillTransitionToSize:withTransitionCoordinator:)]) { - return; - } - - [self slk_prepareForInterfaceTransitionWithDuration:duration]; -} -#endif - -#ifdef __IPHONE_9_0 -- (UIInterfaceOrientationMask)supportedInterfaceOrientations -#else -- (NSUInteger)supportedInterfaceOrientations -#endif -{ - return UIInterfaceOrientationMaskAll; -} - -- (BOOL)shouldAutorotate -{ - return YES; -} - - -#pragma mark - View lifeterm - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; -} - -- (void)dealloc -{ - [self slk_unregisterNotifications]; - - [_typingIndicatorProxyView removeObserver:self forKeyPath:@"visible"]; -} - -@end diff --git a/Example/Pods/SlackTextViewController/Source/SLKTypingIndicatorProtocol.h b/Example/Pods/SlackTextViewController/Source/SLKTypingIndicatorProtocol.h deleted file mode 100644 index 04287cc3..00000000 --- a/Example/Pods/SlackTextViewController/Source/SLKTypingIndicatorProtocol.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** Generic protocol needed when customizing your own typing indicator view. */ -@protocol SLKTypingIndicatorProtocol -@required - -/** - Returns YES if the indicator is visible. - SLKTextViewController depends on this property internally, by observing its value changes to update the typing indicator view's constraints automatically. - You can simply @synthesize this property to make it KVO compliant, or override its setter method and wrap its implementation with -willChangeValueForKey: and -didChangeValueForKey: methods, for more complex KVO compliance. - */ -@property (nonatomic, getter = isVisible) BOOL visible; - -@optional - -/** - Dismisses the indicator view. - */ -- (void)dismissIndicator; - -@end - -NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/Example/Pods/SlackTextViewController/Source/SLKTypingIndicatorView.h b/Example/Pods/SlackTextViewController/Source/SLKTypingIndicatorView.h deleted file mode 100644 index 77fe80e3..00000000 --- a/Example/Pods/SlackTextViewController/Source/SLKTypingIndicatorView.h +++ /dev/null @@ -1,64 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import -#import "SLKTypingIndicatorProtocol.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @name A custom view to display an indicator of users typing. */ -@interface SLKTypingIndicatorView : UIView - -/** The amount of time a name should keep visible. If is zero, the indicator will not remove nor disappear automatically. Default is 6.0 seconds*/ -@property (nonatomic, readwrite) NSTimeInterval interval; - -/** If YES, the user can dismiss the indicator by tapping on it. Default is NO. */ -@property (nonatomic, readwrite) BOOL canResignByTouch; - -/** The color of the text. Default is grayColor. */ -@property (nonatomic, strong) UIColor *textColor; - -/** The color of the highlighted text. Default is grayColor. */ -@property (nonatomic, strong) UIColor *highlightTextColor; - -/** The font of the text. Default is system font, 12 pts. */ -@property (nonatomic, strong) UIFont *textFont; - -/** The font to be used when matching a username string. Default is system bold font, 12 pts. */ -@property (nonatomic, strong) UIFont *highlightFont; - -/** The inner padding to use when laying out content in the view. Default is {10, 40, 10, 10}. */ -@property (nonatomic, assign) UIEdgeInsets contentInset; - -/** - Inserts a user name, only if that user name is not yet on the list. - Each inserted name has an attached timer, which will automatically remove the name from the list once the interval is reached (default 6 seconds). - - The control follows a set of display rules, to accomodate the screen size: - - - When only 1 user name is set, it will display ":name is typing" - - - When only 2 user names are set, it will display ":name & :name are typing" - - - When more than 2 user names are set, it will display "several people are typing" - - @param username The user name string. - */ -- (void)insertUsername:(NSString *_Nullable)username; - -/** - Removes a user name, if existent on the list. - Once there are no more items on the list, the indicator will automatically try to hide (by setting it self to visible = NO). - - @param username The user name string. - */ -- (void)removeUsername:(NSString *_Nullable)username; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Example/Pods/SlackTextViewController/Source/SLKTypingIndicatorView.m b/Example/Pods/SlackTextViewController/Source/SLKTypingIndicatorView.m deleted file mode 100644 index 51dddf3d..00000000 --- a/Example/Pods/SlackTextViewController/Source/SLKTypingIndicatorView.m +++ /dev/null @@ -1,346 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import "SLKTypingIndicatorView.h" -#import "UIView+SLKAdditions.h" -#import "SLKUIConstants.h" - -#define SLKTypingIndicatorViewIdentifier [NSString stringWithFormat:@"%@.%@", SLKTextViewControllerDomain, NSStringFromClass([self class])] - -@interface SLKTypingIndicatorView () - -// The text label used to display the typing indicator content. -@property (nonatomic, strong) UILabel *textLabel; - -@property (nonatomic, strong) NSMutableArray *usernames; -@property (nonatomic, strong) NSMutableArray *timers; - -// Auto-Layout margin constraints used for updating their constants -@property (nonatomic, strong) NSLayoutConstraint *leftContraint; -@property (nonatomic, strong) NSLayoutConstraint *rightContraint; - -@end - -@implementation SLKTypingIndicatorView -@synthesize visible = _visible; - -#pragma mark - Initializer - -- (id)init -{ - if (self = [super init]) { - [self slk_commonInit]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)coder -{ - if (self = [super initWithCoder:coder]) { - [self slk_commonInit]; - } - return self; -} - -- (void)slk_commonInit -{ - self.backgroundColor = [UIColor whiteColor]; - - self.interval = 6.0; - self.canResignByTouch = NO; - self.usernames = [NSMutableArray new]; - self.timers = [NSMutableArray new]; - - self.textColor = [UIColor grayColor]; - self.highlightTextColor = [UIColor grayColor]; - self.textFont = [UIFont systemFontOfSize:12.0]; - self.highlightFont = [UIFont boldSystemFontOfSize:12.0]; - self.contentInset = UIEdgeInsetsMake(10.0, 40.0, 10.0, 10.0); - - [self addSubview:self.textLabel]; - - [self slk_setupConstraints]; -} - - -#pragma mark - SLKTypingIndicatorProtocol - -- (void)setVisible:(BOOL)visible -{ - // Skip when updating the same value, specially to avoid inovking KVO unnecessary - if (self.isVisible == visible) { - return; - } - - // Required implementation for key-value observer compliance - [self willChangeValueForKey:NSStringFromSelector(@selector(isVisible))]; - - _visible = visible; - - if (!visible) { - [self slk_invalidateTimers]; - } - - // Required implementation for key-value observer compliance - [self didChangeValueForKey:NSStringFromSelector(@selector(isVisible))]; -} - -- (void)dismissIndicator -{ - if (self.isVisible) { - self.visible = NO; - } -} - - -#pragma mark - Getters - -- (UILabel *)textLabel -{ - if (!_textLabel) { - _textLabel = [UILabel new]; - _textLabel.translatesAutoresizingMaskIntoConstraints = NO; - _textLabel.backgroundColor = [UIColor clearColor]; - _textLabel.contentMode = UIViewContentModeTopLeft; - _textLabel.userInteractionEnabled = NO; - } - return _textLabel; -} - -- (NSAttributedString *)attributedString -{ - if (self.usernames.count == 0) { - return nil; - } - - NSString *text = @""; - NSString *firstObject = [self.usernames firstObject]; - NSString *lastObject = [self.usernames lastObject]; - - if (self.usernames.count == 1) { - text = [NSString stringWithFormat:NSLocalizedString(@"%@ is typing", nil), firstObject]; - } - else if (self.usernames.count == 2) { - text = [NSString stringWithFormat:NSLocalizedString(@"%@ & %@ are typing", nil), firstObject, lastObject]; - } - else if (self.usernames.count > 2) { - text = NSLocalizedString(@"Several people are typing", nil); - } - - NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init]; - style.alignment = NSTextAlignmentLeft; - style.lineBreakMode = NSLineBreakByTruncatingTail; - style.minimumLineHeight = 10.0; - - NSDictionary *attributes = @{NSFontAttributeName: self.textFont, - NSForegroundColorAttributeName: self.textColor, - NSParagraphStyleAttributeName: style, - }; - - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:text attributes:attributes]; - - if (self.usernames.count <= 2) { - [attributedString addAttribute:NSFontAttributeName value:self.highlightFont range:[text rangeOfString:firstObject]]; - [attributedString addAttribute:NSFontAttributeName value:self.highlightFont range:[text rangeOfString:lastObject]]; - [attributedString addAttribute:NSForegroundColorAttributeName value:self.highlightTextColor range:[text rangeOfString:firstObject]]; - [attributedString addAttribute:NSForegroundColorAttributeName value:self.highlightTextColor range:[text rangeOfString:lastObject]]; - } - - return attributedString; -} - -- (CGSize)intrinsicContentSize -{ - return CGSizeMake(UIViewNoIntrinsicMetric, [self height]); -} - -- (CGFloat)height -{ - CGFloat height = self.textFont.lineHeight; - height += self.contentInset.top; - height += self.contentInset.bottom; - return height; -} - - -#pragma mark - Setters - -- (void)setContentInset:(UIEdgeInsets)insets -{ - if (UIEdgeInsetsEqualToEdgeInsets(self.contentInset, insets)) { - return; - } - - if (UIEdgeInsetsEqualToEdgeInsets(self.contentInset, UIEdgeInsetsZero)) { - _contentInset = insets; - return; - } - - _contentInset = insets; - - [self slk_updateConstraintConstants]; -} - -- (void)setHidden:(BOOL)hidden -{ - if (self.isHidden == hidden) { - return; - } - - if (hidden) { - [self slk_prepareForReuse]; - } - - [super setHidden:hidden]; -} - - -#pragma mark - Public Methods - -- (void)insertUsername:(NSString *)username; -{ - if (!username) { - return; - } - - BOOL isShowing = [self.usernames containsObject:username]; - - if (_interval > 0.0) { - - if (isShowing) { - NSTimer *timer = [self slk_timerWithIdentifier:username]; - [self slk_invalidateTimer:timer]; - } - - NSTimer *timer = [NSTimer timerWithTimeInterval:_interval target:self selector:@selector(slk_shouldRemoveUsername:) userInfo:@{SLKTypingIndicatorViewIdentifier: username} repeats:NO]; - [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode]; - [self.timers addObject:timer]; - } - - if (isShowing) { - return; - } - - [self.usernames addObject:username]; - - NSAttributedString *attributedString = [self attributedString]; - - self.textLabel.attributedText = attributedString; - - self.visible = YES; -} - -- (void)removeUsername:(NSString *)username -{ - if (!username || ![self.usernames containsObject:username]) { - return; - } - - [self.usernames removeObject:username]; - - if (self.usernames.count > 0) { - self.textLabel.attributedText = [self attributedString]; - } - else { - self.visible = NO; - } -} - - -#pragma mark - Private Methods - -- (void)slk_shouldRemoveUsername:(NSTimer *)timer -{ - NSString *identifier = [timer.userInfo objectForKey:SLKTypingIndicatorViewIdentifier]; - - [self removeUsername:identifier]; - [self slk_invalidateTimer:timer]; -} - -- (NSTimer *)slk_timerWithIdentifier:(NSString *)identifier -{ - for (NSTimer *timer in self.timers) { - if ([identifier isEqualToString:[timer.userInfo objectForKey:SLKTypingIndicatorViewIdentifier]]) { - return timer; - } - } - return nil; -} - -- (void)slk_invalidateTimer:(NSTimer *)timer -{ - if (timer) { - [timer invalidate]; - [self.timers removeObject:timer]; - timer = nil; - } -} - -- (void)slk_invalidateTimers -{ - for (NSTimer *timer in self.timers) { - [timer invalidate]; - } - - [self.timers removeAllObjects]; -} - -- (void)slk_prepareForReuse -{ - [self slk_invalidateTimers]; - - self.textLabel.text = nil; - - [self.usernames removeAllObjects]; -} - -- (void)slk_setupConstraints -{ - NSDictionary *views = @{@"textLabel": self.textLabel}; - - [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[textLabel]|" options:0 metrics:nil views:views]]; - [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(0)-[textLabel]-(0@750)-|" options:0 metrics:nil views:views]]; - - self.leftContraint = [[self slk_constraintsForAttribute:NSLayoutAttributeLeading] firstObject]; - self.rightContraint = [[self slk_constraintsForAttribute:NSLayoutAttributeTrailing] firstObject]; - - [self slk_updateConstraintConstants]; -} - -- (void)slk_updateConstraintConstants -{ - self.leftContraint.constant = self.contentInset.left; - self.rightContraint.constant = self.contentInset.right; -} - - -#pragma mark - Hit Testing - -- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event -{ - [super touchesBegan:touches withEvent:event]; -} - -- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event -{ - [super touchesEnded:touches withEvent:event]; - - if (self.canResignByTouch) { - [self dismissIndicator]; - } -} - - -#pragma mark - Lifeterm - -- (void)dealloc -{ - [self slk_invalidateTimers]; -} - -@end diff --git a/Example/Pods/SlackTextViewController/Source/SLKUIConstants.h b/Example/Pods/SlackTextViewController/Source/SLKUIConstants.h deleted file mode 100644 index 9323b12a..00000000 --- a/Example/Pods/SlackTextViewController/Source/SLKUIConstants.h +++ /dev/null @@ -1,61 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#define SLK_IS_LANDSCAPE ([[UIApplication sharedApplication] statusBarOrientation] == UIDeviceOrientationLandscapeLeft || [[UIApplication sharedApplication] statusBarOrientation] == UIDeviceOrientationLandscapeRight) -#define SLK_IS_IPAD ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) -#define SLK_IS_IPHONE ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) -#define SLK_IS_IPHONE4 (SLK_IS_IPHONE && SLKKeyWindowBounds().size.height < 568.0) -#define SLK_IS_IPHONE5 (SLK_IS_IPHONE && SLKKeyWindowBounds().size.height == 568.0) -#define SLK_IS_IPHONE6 (SLK_IS_IPHONE && SLKKeyWindowBounds().size.height == 667.0) -#define SLK_IS_IPHONE6PLUS (SLK_IS_IPHONE && SLKKeyWindowBounds().size.height == 736.0 || SLKKeyWindowBounds().size.width == 736.0) // Both orientations -#define SLK_IS_IOS8_AND_HIGHER ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) -#define SLK_IS_IOS9_AND_HIGHER ([[UIDevice currentDevice].systemVersion floatValue] >= 9.0) - -#define SLK_KEYBOARD_NOTIFICATION_DEBUG DEBUG && 0 // Logs every keyboard notification being sent - -static NSString *SLKTextViewControllerDomain = @"com.slack.TextViewController"; - -/** - Returns a constant font size difference reflecting the current accessibility settings. - - @param category A content size category constant string. - @returns A float constant font size difference. - */ -__unused static CGFloat SLKPointSizeDifferenceForCategory(NSString *category) -{ - if ([category isEqualToString:UIContentSizeCategoryExtraSmall]) return -3.0; - if ([category isEqualToString:UIContentSizeCategorySmall]) return -2.0; - if ([category isEqualToString:UIContentSizeCategoryMedium]) return -1.0; - if ([category isEqualToString:UIContentSizeCategoryLarge]) return 0.0; - if ([category isEqualToString:UIContentSizeCategoryExtraLarge]) return 2.0; - if ([category isEqualToString:UIContentSizeCategoryExtraExtraLarge]) return 4.0; - if ([category isEqualToString:UIContentSizeCategoryExtraExtraExtraLarge]) return 6.0; - if ([category isEqualToString:UIContentSizeCategoryAccessibilityMedium]) return 8.0; - if ([category isEqualToString:UIContentSizeCategoryAccessibilityLarge]) return 10.0; - if ([category isEqualToString:UIContentSizeCategoryAccessibilityExtraLarge]) return 11.0; - if ([category isEqualToString:UIContentSizeCategoryAccessibilityExtraExtraLarge]) return 12.0; - if ([category isEqualToString:UIContentSizeCategoryAccessibilityExtraExtraExtraLarge]) return 13.0; - return 0; -} - -__unused static CGRect SLKKeyWindowBounds() -{ - return [[UIApplication sharedApplication] keyWindow].bounds; -} - -__unused static CGRect SLKRectInvert(CGRect rect) -{ - CGRect invert = CGRectZero; - - invert.origin.x = rect.origin.y; - invert.origin.y = rect.origin.x; - invert.size.width = rect.size.height; - invert.size.height = rect.size.width; - - return invert; -} diff --git a/Example/Pods/SlackTextViewController/Source/UIResponder+SLKAdditions.h b/Example/Pods/SlackTextViewController/Source/UIResponder+SLKAdditions.h deleted file mode 100644 index f36373bf..00000000 --- a/Example/Pods/SlackTextViewController/Source/UIResponder+SLKAdditions.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import - -/** @name UIResponder additional features used for SlackTextViewController. */ -@interface UIResponder (SLKAdditions) - -/** - Returns the current first responder object. - - @return A UIResponder instance. - */ -+ (nullable instancetype)slk_currentFirstResponder; - -@end \ No newline at end of file diff --git a/Example/Pods/SlackTextViewController/Source/UIResponder+SLKAdditions.m b/Example/Pods/SlackTextViewController/Source/UIResponder+SLKAdditions.m deleted file mode 100644 index ff6ed6f8..00000000 --- a/Example/Pods/SlackTextViewController/Source/UIResponder+SLKAdditions.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import "UIResponder+SLKAdditions.h" - -static __weak id ___currentFirstResponder; - -@implementation UIResponder (SLKAdditions) - -/** - Based on Jakob Egger's answer in http://stackoverflow.com/a/14135456/590010 - */ -+ (instancetype)slk_currentFirstResponder -{ - ___currentFirstResponder = nil; - [[UIApplication sharedApplication] sendAction:@selector(slk_findFirstResponder:) to:nil from:nil forEvent:nil]; - - return ___currentFirstResponder; -} - -- (void)slk_findFirstResponder:(id)sender -{ - ___currentFirstResponder = self; -} - -@end diff --git a/Example/Pods/SlackTextViewController/Source/UIScrollView+SLKAdditions.h b/Example/Pods/SlackTextViewController/Source/UIScrollView+SLKAdditions.h deleted file mode 100644 index 893f73d4..00000000 --- a/Example/Pods/SlackTextViewController/Source/UIScrollView+SLKAdditions.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import - -/** @name UIScrollView additional features used for SlackTextViewController. */ -@interface UIScrollView (SLKAdditions) - -/** YES if the scrollView's offset is at the very top. */ -@property (nonatomic, readonly) BOOL slk_isAtTop; -/** YES if the scrollView's offset is at the very bottom. */ -@property (nonatomic, readonly) BOOL slk_isAtBottom; -/** The visible area of the content size. */ -@property (nonatomic, readonly) CGRect slk_visibleRect; - -/** - Sets the content offset to the top. - - @param animated YES to animate the transition at a constant velocity to the new offset, NO to make the transition immediate. - */ -- (void)slk_scrollToTopAnimated:(BOOL)animated; - -/** - Sets the content offset to the bottom. - - @param animated YES to animate the transition at a constant velocity to the new offset, NO to make the transition immediate. - */ -- (void)slk_scrollToBottomAnimated:(BOOL)animated; - -/** - Stops scrolling, if it was scrolling. - */ -- (void)slk_stopScrolling; - -@end \ No newline at end of file diff --git a/Example/Pods/SlackTextViewController/Source/UIScrollView+SLKAdditions.m b/Example/Pods/SlackTextViewController/Source/UIScrollView+SLKAdditions.m deleted file mode 100644 index 872e47aa..00000000 --- a/Example/Pods/SlackTextViewController/Source/UIScrollView+SLKAdditions.m +++ /dev/null @@ -1,72 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import "UIScrollView+SLKAdditions.h" - -@implementation UIScrollView (SLKAdditions) - -- (void)slk_scrollToTopAnimated:(BOOL)animated -{ - if ([self slk_canScroll]) { - [self setContentOffset:CGPointZero animated:animated]; - } -} - -- (void)slk_scrollToBottomAnimated:(BOOL)animated -{ - if ([self slk_canScroll]) { - [self setContentOffset:[self slk_bottomRect].origin animated:animated]; - } -} - -- (BOOL)slk_canScroll -{ - if (self.contentSize.height > CGRectGetHeight(self.frame)) { - return YES; - } - return NO; -} - -- (BOOL)slk_isAtTop -{ - return CGRectGetMinY([self slk_visibleRect]) <= CGRectGetMinY(self.bounds); -} - -- (BOOL)slk_isAtBottom -{ - return CGRectGetMaxY([self slk_visibleRect]) >= CGRectGetMaxY([self slk_bottomRect]); -} - -- (CGRect)slk_visibleRect -{ - CGRect visibleRect; - visibleRect.origin = self.contentOffset; - visibleRect.size = self.frame.size; - return visibleRect; -} - -- (CGRect)slk_bottomRect -{ - return CGRectMake(0.0, self.contentSize.height - CGRectGetHeight(self.bounds), CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds)); -} - -- (void)slk_stopScrolling -{ - if (!self.isDragging) { - return; - } - - CGPoint offset = self.contentOffset; - offset.y -= 1.0; - [self setContentOffset:offset]; - - offset.y += 1.0; - [self setContentOffset:offset]; -} - -@end diff --git a/Example/Pods/SlackTextViewController/Source/UIView+SLKAdditions.h b/Example/Pods/SlackTextViewController/Source/UIView+SLKAdditions.h deleted file mode 100644 index 5c0c9c5d..00000000 --- a/Example/Pods/SlackTextViewController/Source/UIView+SLKAdditions.h +++ /dev/null @@ -1,57 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** @name UIView additional features used for SlackTextViewController. */ -@interface UIView (SLKAdditions) - -/** - Animates the view's constraints by calling layoutIfNeeded. - - @param bounce YES if the animation should use spring damping and velocity to give a bouncy effect to animations. - @param options A mask of options indicating how you want to perform the animations. - @param animations An additional block for custom animations. - */ -- (void)slk_animateLayoutIfNeededWithBounce:(BOOL)bounce options:(UIViewAnimationOptions)options animations:(void (^ __nullable)(void))animations; - -- (void)slk_animateLayoutIfNeededWithBounce:(BOOL)bounce options:(UIViewAnimationOptions)options animations:(void (^ __nullable)(void))animations completion:(void (^ __nullable)(BOOL finished))completion; - -/** - Animates the view's constraints by calling layoutIfNeeded. - - @param duration The total duration of the animations, measured in seconds. - @param bounce YES if the animation should use spring damping and velocity to give a bouncy effect to animations. - @param options A mask of options indicating how you want to perform the animations. - @param animations An additional block for custom animations. - */ -- (void)slk_animateLayoutIfNeededWithDuration:(NSTimeInterval)duration bounce:(BOOL)bounce options:(UIViewAnimationOptions)options animations:(void (^ __nullable)(void))animations completion:(void (^ __nullable)(BOOL finished))completion; - -/** - Returns the view constraints matching a specific layout attribute (top, bottom, left, right, leading, trailing, etc.) - - @param attribute The layout attribute to use for searching. - @return An array of matching constraints. - */ -- (nullable NSArray *)slk_constraintsForAttribute:(NSLayoutAttribute)attribute; - -/** - Returns a layout constraint matching a specific layout attribute and relationship between 2 items, first and second items. - - @param attribute The layout attribute to use for searching. - @param first The first item in the relationship. - @param second The second item in the relationship. - @return A layout constraint. - */ -- (nullable NSLayoutConstraint *)slk_constraintForAttribute:(NSLayoutAttribute)attribute firstItem:(id __nullable)first secondItem:(id __nullable)second; - -@end - -NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/Example/Pods/SlackTextViewController/Source/UIView+SLKAdditions.m b/Example/Pods/SlackTextViewController/Source/UIView+SLKAdditions.m deleted file mode 100644 index d070a959..00000000 --- a/Example/Pods/SlackTextViewController/Source/UIView+SLKAdditions.m +++ /dev/null @@ -1,70 +0,0 @@ -// -// SlackTextViewController -// https://github.com/slackhq/SlackTextViewController -// -// Copyright 2014-2016 Slack Technologies, Inc. -// Licence: MIT-Licence -// - -#import "UIView+SLKAdditions.h" - -#import "SLKUIConstants.h" - -@implementation UIView (SLKAdditions) - -- (void)slk_animateLayoutIfNeededWithBounce:(BOOL)bounce options:(UIViewAnimationOptions)options animations:(void (^)(void))animations -{ - [self slk_animateLayoutIfNeededWithBounce:bounce options:options animations:animations completion:NULL]; -} - -- (void)slk_animateLayoutIfNeededWithBounce:(BOOL)bounce options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion -{ - NSTimeInterval duration = bounce ? 0.65 : 0.2; - [self slk_animateLayoutIfNeededWithDuration:duration bounce:bounce options:options animations:animations completion:completion]; -} - -- (void)slk_animateLayoutIfNeededWithDuration:(NSTimeInterval)duration bounce:(BOOL)bounce options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion -{ - if (bounce) { - [UIView animateWithDuration:duration - delay:0.0 - usingSpringWithDamping:0.7 - initialSpringVelocity:0.7 - options:options - animations:^{ - [self layoutIfNeeded]; - - if (animations) { - animations(); - } - } - completion:completion]; - } - else { - [UIView animateWithDuration:duration - delay:0.0 - options:options - animations:^{ - [self layoutIfNeeded]; - - if (animations) { - animations(); - } - } - completion:completion]; - } -} - -- (NSArray *)slk_constraintsForAttribute:(NSLayoutAttribute)attribute -{ - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstAttribute = %d", attribute]; - return [self.constraints filteredArrayUsingPredicate:predicate]; -} - -- (NSLayoutConstraint *)slk_constraintForAttribute:(NSLayoutAttribute)attribute firstItem:(id)first secondItem:(id)second -{ - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstAttribute = %d AND firstItem = %@ AND secondItem = %@", attribute, first, second]; - return [[self.constraints filteredArrayUsingPredicate:predicate] firstObject]; -} - -@end diff --git a/Example/Pods/SnapKit/LICENSE b/Example/Pods/SnapKit/LICENSE deleted file mode 100644 index a18ccfbd..00000000 --- a/Example/Pods/SnapKit/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/Example/Pods/SnapKit/README.md b/Example/Pods/SnapKit/README.md deleted file mode 100644 index fed21330..00000000 --- a/Example/Pods/SnapKit/README.md +++ /dev/null @@ -1,129 +0,0 @@ - - -SnapKit is a DSL to make Auto Layout easy on both iOS and OS X. - -[![Build Status](https://travis-ci.org/SnapKit/SnapKit.svg)](https://travis-ci.org/SnapKit/SnapKit) -[![Platform](https://img.shields.io/cocoapods/p/SnapKit.svg?style=flat)](https://github.com/SnapKit/SnapKit) -[![Cocoapods Compatible](https://img.shields.io/cocoapods/v/SnapKit.svg)](https://cocoapods.org/pods/SnapKit) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) - -#### ⚠️ **To use with Swift 3.x please ensure you are using >= 3.0.0** ⚠️ -#### ⚠️ **To use with Swift 4.x please ensure you are using >= 4.0.0** ⚠️ - -## Contents - -- [Requirements](#requirements) -- [Migration Guides](#migration-guides) -- [Communication](#communication) -- [Installation](#installation) -- [Usage](#usage) -- [Credits](#credits) -- [License](#license) - -## Requirements - -- iOS 8.0+ / Mac OS X 10.11+ / tvOS 9.0+ -- Xcode 9.0+ -- Swift 3.0+ - -## Communication - -- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit). (Tag 'snapkit') -- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit). -- If you **found a bug**, open an issue. -- If you **have a feature request**, open an issue. -- If you **want to contribute**, submit a pull request. - - -## Installation - -### CocoaPods - -[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command: - -```bash -$ gem install cocoapods -``` - -> CocoaPods 1.1.0+ is required to build SnapKit 4.0.0+. - -To integrate SnapKit into your Xcode project using CocoaPods, specify it in your `Podfile`: - -```ruby -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '10.0' -use_frameworks! - -target '' do - pod 'SnapKit', '~> 4.0.0' -end -``` - -Then, run the following command: - -```bash -$ pod install -``` - -### Carthage - -[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. - -You can install Carthage with [Homebrew](http://brew.sh/) using the following command: - -```bash -$ brew update -$ brew install carthage -``` - -To integrate SnapKit into your Xcode project using Carthage, specify it in your `Cartfile`: - -```ogdl -github "SnapKit/SnapKit" ~> 4.0.0 -``` - -Run `carthage update` to build the framework and drag the built `SnapKit.framework` into your Xcode project. - -### Manually - -If you prefer not to use either of the aforementioned dependency managers, you can integrate SnapKit into your project manually. - ---- - -## Usage - -### Quick Start - -```swift -import SnapKit - -class MyViewController: UIViewController { - - lazy var box = UIView() - - override func viewDidLoad() { - super.viewDidLoad() - - self.view.addSubview(box) - box.snp.makeConstraints { (make) -> Void in - make.width.height.equalTo(50) - make.center.equalTo(self.view) - } - } - -} -``` - -### Resources - -- [Documentation](http://snapkit.io/docs/) -- [F.A.Q.](http://snapkit.io/faq/) - -## Credits - -- Robert Payne ([@robertjpayne](https://twitter.com/robertjpayne)) -- Many other contributors - -## License - -SnapKit is released under the MIT license. See LICENSE for details. diff --git a/Example/Pods/SnapKit/Source/Constraint.swift b/Example/Pods/SnapKit/Source/Constraint.swift deleted file mode 100644 index 2720745b..00000000 --- a/Example/Pods/SnapKit/Source/Constraint.swift +++ /dev/null @@ -1,289 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - -public final class Constraint { - - internal let sourceLocation: (String, UInt) - internal let label: String? - - private let from: ConstraintItem - private let to: ConstraintItem - private let relation: ConstraintRelation - private let multiplier: ConstraintMultiplierTarget - private var constant: ConstraintConstantTarget { - didSet { - self.updateConstantAndPriorityIfNeeded() - } - } - private var priority: ConstraintPriorityTarget { - didSet { - self.updateConstantAndPriorityIfNeeded() - } - } - public var layoutConstraints: [LayoutConstraint] - - public var isActive: Bool { - for layoutConstraint in self.layoutConstraints { - if layoutConstraint.isActive { - return true - } - } - return false - } - - // MARK: Initialization - - internal init(from: ConstraintItem, - to: ConstraintItem, - relation: ConstraintRelation, - sourceLocation: (String, UInt), - label: String?, - multiplier: ConstraintMultiplierTarget, - constant: ConstraintConstantTarget, - priority: ConstraintPriorityTarget) { - self.from = from - self.to = to - self.relation = relation - self.sourceLocation = sourceLocation - self.label = label - self.multiplier = multiplier - self.constant = constant - self.priority = priority - self.layoutConstraints = [] - - // get attributes - let layoutFromAttributes = self.from.attributes.layoutAttributes - let layoutToAttributes = self.to.attributes.layoutAttributes - - // get layout from - let layoutFrom = self.from.layoutConstraintItem! - - // get relation - let layoutRelation = self.relation.layoutRelation - - for layoutFromAttribute in layoutFromAttributes { - // get layout to attribute - let layoutToAttribute: LayoutAttribute - #if os(iOS) || os(tvOS) - if layoutToAttributes.count > 0 { - if self.from.attributes == .edges && self.to.attributes == .margins { - switch layoutFromAttribute { - case .left: - layoutToAttribute = .leftMargin - case .right: - layoutToAttribute = .rightMargin - case .top: - layoutToAttribute = .topMargin - case .bottom: - layoutToAttribute = .bottomMargin - default: - fatalError() - } - } else if self.from.attributes == .margins && self.to.attributes == .edges { - switch layoutFromAttribute { - case .leftMargin: - layoutToAttribute = .left - case .rightMargin: - layoutToAttribute = .right - case .topMargin: - layoutToAttribute = .top - case .bottomMargin: - layoutToAttribute = .bottom - default: - fatalError() - } - } else if self.from.attributes == self.to.attributes { - layoutToAttribute = layoutFromAttribute - } else { - layoutToAttribute = layoutToAttributes[0] - } - } else { - if self.to.target == nil && (layoutFromAttribute == .centerX || layoutFromAttribute == .centerY) { - layoutToAttribute = layoutFromAttribute == .centerX ? .left : .top - } else { - layoutToAttribute = layoutFromAttribute - } - } - #else - if self.from.attributes == self.to.attributes { - layoutToAttribute = layoutFromAttribute - } else if layoutToAttributes.count > 0 { - layoutToAttribute = layoutToAttributes[0] - } else { - layoutToAttribute = layoutFromAttribute - } - #endif - - // get layout constant - let layoutConstant: CGFloat = self.constant.constraintConstantTargetValueFor(layoutAttribute: layoutToAttribute) - - // get layout to - var layoutTo: AnyObject? = self.to.target - - // use superview if possible - if layoutTo == nil && layoutToAttribute != .width && layoutToAttribute != .height { - layoutTo = layoutFrom.superview - } - - // create layout constraint - let layoutConstraint = LayoutConstraint( - item: layoutFrom, - attribute: layoutFromAttribute, - relatedBy: layoutRelation, - toItem: layoutTo, - attribute: layoutToAttribute, - multiplier: self.multiplier.constraintMultiplierTargetValue, - constant: layoutConstant - ) - - // set label - layoutConstraint.label = self.label - - // set priority - layoutConstraint.priority = LayoutPriority(rawValue: self.priority.constraintPriorityTargetValue) - - // set constraint - layoutConstraint.constraint = self - - // append - self.layoutConstraints.append(layoutConstraint) - } - } - - // MARK: Public - - @available(*, deprecated:3.0, message:"Use activate().") - public func install() { - self.activate() - } - - @available(*, deprecated:3.0, message:"Use deactivate().") - public func uninstall() { - self.deactivate() - } - - public func activate() { - self.activateIfNeeded() - } - - public func deactivate() { - self.deactivateIfNeeded() - } - - @discardableResult - public func update(offset: ConstraintOffsetTarget) -> Constraint { - self.constant = offset.constraintOffsetTargetValue - return self - } - - @discardableResult - public func update(inset: ConstraintInsetTarget) -> Constraint { - self.constant = inset.constraintInsetTargetValue - return self - } - - @discardableResult - public func update(priority: ConstraintPriorityTarget) -> Constraint { - self.priority = priority.constraintPriorityTargetValue - return self - } - - @available(*, deprecated:3.0, message:"Use update(offset: ConstraintOffsetTarget) instead.") - public func updateOffset(amount: ConstraintOffsetTarget) -> Void { self.update(offset: amount) } - - @available(*, deprecated:3.0, message:"Use update(inset: ConstraintInsetTarget) instead.") - public func updateInsets(amount: ConstraintInsetTarget) -> Void { self.update(inset: amount) } - - @available(*, deprecated:3.0, message:"Use update(priority: ConstraintPriorityTarget) instead.") - public func updatePriority(amount: ConstraintPriorityTarget) -> Void { self.update(priority: amount) } - - @available(*, obsoleted:3.0, message:"Use update(priority: ConstraintPriorityTarget) instead.") - public func updatePriorityRequired() -> Void {} - - @available(*, obsoleted:3.0, message:"Use update(priority: ConstraintPriorityTarget) instead.") - public func updatePriorityHigh() -> Void { fatalError("Must be implemented by Concrete subclass.") } - - @available(*, obsoleted:3.0, message:"Use update(priority: ConstraintPriorityTarget) instead.") - public func updatePriorityMedium() -> Void { fatalError("Must be implemented by Concrete subclass.") } - - @available(*, obsoleted:3.0, message:"Use update(priority: ConstraintPriorityTarget) instead.") - public func updatePriorityLow() -> Void { fatalError("Must be implemented by Concrete subclass.") } - - // MARK: Internal - - internal func updateConstantAndPriorityIfNeeded() { - for layoutConstraint in self.layoutConstraints { - let attribute = (layoutConstraint.secondAttribute == .notAnAttribute) ? layoutConstraint.firstAttribute : layoutConstraint.secondAttribute - layoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: attribute) - - let requiredPriority = ConstraintPriority.required.value - if (layoutConstraint.priority.rawValue < requiredPriority), (self.priority.constraintPriorityTargetValue != requiredPriority) { - layoutConstraint.priority = LayoutPriority(rawValue: self.priority.constraintPriorityTargetValue) - } - } - } - - internal func activateIfNeeded(updatingExisting: Bool = false) { - guard let item = self.from.layoutConstraintItem else { - print("WARNING: SnapKit failed to get from item from constraint. Activate will be a no-op.") - return - } - let layoutConstraints = self.layoutConstraints - - if updatingExisting { - var existingLayoutConstraints: [LayoutConstraint] = [] - for constraint in item.constraints { - existingLayoutConstraints += constraint.layoutConstraints - } - - for layoutConstraint in layoutConstraints { - let existingLayoutConstraint = existingLayoutConstraints.first { $0 == layoutConstraint } - guard let updateLayoutConstraint = existingLayoutConstraint else { - fatalError("Updated constraint could not find existing matching constraint to update: \(layoutConstraint)") - } - - let updateLayoutAttribute = (updateLayoutConstraint.secondAttribute == .notAnAttribute) ? updateLayoutConstraint.firstAttribute : updateLayoutConstraint.secondAttribute - updateLayoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: updateLayoutAttribute) - } - } else { - NSLayoutConstraint.activate(layoutConstraints) - item.add(constraints: [self]) - } - } - - internal func deactivateIfNeeded() { - guard let item = self.from.layoutConstraintItem else { - print("WARNING: SnapKit failed to get from item from constraint. Deactivate will be a no-op.") - return - } - let layoutConstraints = self.layoutConstraints - NSLayoutConstraint.deactivate(layoutConstraints) - item.remove(constraints: [self]) - } -} diff --git a/Example/Pods/SnapKit/Source/ConstraintAttributes.swift b/Example/Pods/SnapKit/Source/ConstraintAttributes.swift deleted file mode 100644 index 10bddb17..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintAttributes.swift +++ /dev/null @@ -1,190 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -internal struct ConstraintAttributes : OptionSet { - - internal init(rawValue: UInt) { - self.rawValue = rawValue - } - internal init(_ rawValue: UInt) { - self.init(rawValue: rawValue) - } - internal init(nilLiteral: ()) { - self.rawValue = 0 - } - - internal private(set) var rawValue: UInt - internal static var allZeros: ConstraintAttributes { return self.init(0) } - internal static func convertFromNilLiteral() -> ConstraintAttributes { return self.init(0) } - internal var boolValue: Bool { return self.rawValue != 0 } - - internal func toRaw() -> UInt { return self.rawValue } - internal static func fromRaw(_ raw: UInt) -> ConstraintAttributes? { return self.init(raw) } - internal static func fromMask(_ raw: UInt) -> ConstraintAttributes { return self.init(raw) } - - // normal - - internal static var none: ConstraintAttributes { return self.init(0) } - internal static var left: ConstraintAttributes { return self.init(1) } - internal static var top: ConstraintAttributes { return self.init(2) } - internal static var right: ConstraintAttributes { return self.init(4) } - internal static var bottom: ConstraintAttributes { return self.init(8) } - internal static var leading: ConstraintAttributes { return self.init(16) } - internal static var trailing: ConstraintAttributes { return self.init(32) } - internal static var width: ConstraintAttributes { return self.init(64) } - internal static var height: ConstraintAttributes { return self.init(128) } - internal static var centerX: ConstraintAttributes { return self.init(256) } - internal static var centerY: ConstraintAttributes { return self.init(512) } - internal static var lastBaseline: ConstraintAttributes { return self.init(1024) } - - @available(iOS 8.0, OSX 10.11, *) - internal static var firstBaseline: ConstraintAttributes { return self.init(2048) } - - @available(iOS 8.0, *) - internal static var leftMargin: ConstraintAttributes { return self.init(4096) } - - @available(iOS 8.0, *) - internal static var rightMargin: ConstraintAttributes { return self.init(8192) } - - @available(iOS 8.0, *) - internal static var topMargin: ConstraintAttributes { return self.init(16384) } - - @available(iOS 8.0, *) - internal static var bottomMargin: ConstraintAttributes { return self.init(32768) } - - @available(iOS 8.0, *) - internal static var leadingMargin: ConstraintAttributes { return self.init(65536) } - - @available(iOS 8.0, *) - internal static var trailingMargin: ConstraintAttributes { return self.init(131072) } - - @available(iOS 8.0, *) - internal static var centerXWithinMargins: ConstraintAttributes { return self.init(262144) } - - @available(iOS 8.0, *) - internal static var centerYWithinMargins: ConstraintAttributes { return self.init(524288) } - - // aggregates - - internal static var edges: ConstraintAttributes { return self.init(15) } - internal static var size: ConstraintAttributes { return self.init(192) } - internal static var center: ConstraintAttributes { return self.init(768) } - - @available(iOS 8.0, *) - internal static var margins: ConstraintAttributes { return self.init(61440) } - - @available(iOS 8.0, *) - internal static var centerWithinMargins: ConstraintAttributes { return self.init(786432) } - - internal var layoutAttributes:[LayoutAttribute] { - var attrs = [LayoutAttribute]() - if (self.contains(ConstraintAttributes.left)) { - attrs.append(.left) - } - if (self.contains(ConstraintAttributes.top)) { - attrs.append(.top) - } - if (self.contains(ConstraintAttributes.right)) { - attrs.append(.right) - } - if (self.contains(ConstraintAttributes.bottom)) { - attrs.append(.bottom) - } - if (self.contains(ConstraintAttributes.leading)) { - attrs.append(.leading) - } - if (self.contains(ConstraintAttributes.trailing)) { - attrs.append(.trailing) - } - if (self.contains(ConstraintAttributes.width)) { - attrs.append(.width) - } - if (self.contains(ConstraintAttributes.height)) { - attrs.append(.height) - } - if (self.contains(ConstraintAttributes.centerX)) { - attrs.append(.centerX) - } - if (self.contains(ConstraintAttributes.centerY)) { - attrs.append(.centerY) - } - if (self.contains(ConstraintAttributes.lastBaseline)) { - attrs.append(.lastBaseline) - } - - #if os(iOS) || os(tvOS) - if (self.contains(ConstraintAttributes.firstBaseline)) { - attrs.append(.firstBaseline) - } - if (self.contains(ConstraintAttributes.leftMargin)) { - attrs.append(.leftMargin) - } - if (self.contains(ConstraintAttributes.rightMargin)) { - attrs.append(.rightMargin) - } - if (self.contains(ConstraintAttributes.topMargin)) { - attrs.append(.topMargin) - } - if (self.contains(ConstraintAttributes.bottomMargin)) { - attrs.append(.bottomMargin) - } - if (self.contains(ConstraintAttributes.leadingMargin)) { - attrs.append(.leadingMargin) - } - if (self.contains(ConstraintAttributes.trailingMargin)) { - attrs.append(.trailingMargin) - } - if (self.contains(ConstraintAttributes.centerXWithinMargins)) { - attrs.append(.centerXWithinMargins) - } - if (self.contains(ConstraintAttributes.centerYWithinMargins)) { - attrs.append(.centerYWithinMargins) - } - #endif - - return attrs - } -} - -internal func + (left: ConstraintAttributes, right: ConstraintAttributes) -> ConstraintAttributes { - return left.union(right) -} - -internal func +=(left: inout ConstraintAttributes, right: ConstraintAttributes) { - left.formUnion(right) -} - -internal func -=(left: inout ConstraintAttributes, right: ConstraintAttributes) { - left.subtract(right) -} - -internal func ==(left: ConstraintAttributes, right: ConstraintAttributes) -> Bool { - return left.rawValue == right.rawValue -} diff --git a/Example/Pods/SnapKit/Source/ConstraintConfig.swift b/Example/Pods/SnapKit/Source/ConstraintConfig.swift deleted file mode 100644 index 2746b7d2..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintConfig.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit - public typealias ConstraintInterfaceLayoutDirection = UIUserInterfaceLayoutDirection -#else - import AppKit - public typealias ConstraintInterfaceLayoutDirection = NSUserInterfaceLayoutDirection -#endif - - -public struct ConstraintConfig { - - public static var interfaceLayoutDirection: ConstraintInterfaceLayoutDirection = .leftToRight - -} diff --git a/Example/Pods/SnapKit/Source/ConstraintConstantTarget.swift b/Example/Pods/SnapKit/Source/ConstraintConstantTarget.swift deleted file mode 100644 index bc6d596c..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintConstantTarget.swift +++ /dev/null @@ -1,147 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintConstantTarget { -} - -extension CGPoint: ConstraintConstantTarget { -} - -extension CGSize: ConstraintConstantTarget { -} - -extension ConstraintInsets: ConstraintConstantTarget { -} - -extension ConstraintConstantTarget { - - internal func constraintConstantTargetValueFor(layoutAttribute: LayoutAttribute) -> CGFloat { - if let value = self as? CGFloat { - return value - } - - if let value = self as? Float { - return CGFloat(value) - } - - if let value = self as? Double { - return CGFloat(value) - } - - if let value = self as? Int { - return CGFloat(value) - } - - if let value = self as? UInt { - return CGFloat(value) - } - - if let value = self as? CGSize { - if layoutAttribute == .width { - return value.width - } else if layoutAttribute == .height { - return value.height - } else { - return 0.0 - } - } - - if let value = self as? CGPoint { - #if os(iOS) || os(tvOS) - switch layoutAttribute { - case .left, .right, .leading, .trailing, .centerX, .leftMargin, .rightMargin, .leadingMargin, .trailingMargin, .centerXWithinMargins: - return value.x - case .top, .bottom, .centerY, .topMargin, .bottomMargin, .centerYWithinMargins, .lastBaseline, .firstBaseline: - return value.y - case .width, .height, .notAnAttribute: - return 0.0 - } - #else - switch layoutAttribute { - case .left, .right, .leading, .trailing, .centerX: - return value.x - case .top, .bottom, .centerY, .lastBaseline, .firstBaseline: - return value.y - case .width, .height, .notAnAttribute: - return 0.0 - } - #endif - } - - if let value = self as? ConstraintInsets { - #if os(iOS) || os(tvOS) - switch layoutAttribute { - case .left, .leftMargin, .centerX, .centerXWithinMargins: - return value.left - case .top, .topMargin, .centerY, .centerYWithinMargins, .lastBaseline, .firstBaseline: - return value.top - case .right, .rightMargin: - return -value.right - case .bottom, .bottomMargin: - return -value.bottom - case .leading, .leadingMargin: - return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right - case .trailing, .trailingMargin: - return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left - case .width: - return -(value.left + value.right) - case .height: - return -(value.top + value.bottom) - case .notAnAttribute: - return 0.0 - } - #else - switch layoutAttribute { - case .left, .centerX: - return value.left - case .top, .centerY, .lastBaseline, .firstBaseline: - return value.top - case .right: - return -value.right - case .bottom: - return -value.bottom - case .leading: - return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right - case .trailing: - return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left - case .width: - return -(value.left + value.right) - case .height: - return -(value.top + value.bottom) - case .notAnAttribute: - return 0.0 - } - #endif - } - - return 0.0 - } - -} diff --git a/Example/Pods/SnapKit/Source/ConstraintDSL.swift b/Example/Pods/SnapKit/Source/ConstraintDSL.swift deleted file mode 100644 index a7e1798b..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintDSL.swift +++ /dev/null @@ -1,185 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintDSL { - - var target: AnyObject? { get } - - func setLabel(_ value: String?) - func label() -> String? - -} -extension ConstraintDSL { - - public func setLabel(_ value: String?) { - objc_setAssociatedObject(self.target as Any, &labelKey, value, .OBJC_ASSOCIATION_COPY_NONATOMIC) - } - public func label() -> String? { - return objc_getAssociatedObject(self.target as Any, &labelKey) as? String - } - -} -private var labelKey: UInt8 = 0 - - -public protocol ConstraintBasicAttributesDSL : ConstraintDSL { -} -extension ConstraintBasicAttributesDSL { - - // MARK: Basics - - public var left: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.left) - } - - public var top: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top) - } - - public var right: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.right) - } - - public var bottom: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom) - } - - public var leading: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leading) - } - - public var trailing: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.trailing) - } - - public var width: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.width) - } - - public var height: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height) - } - - public var centerX: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerX) - } - - public var centerY: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerY) - } - - public var edges: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.edges) - } - - public var size: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.size) - } - - public var center: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.center) - } - -} - -public protocol ConstraintAttributesDSL : ConstraintBasicAttributesDSL { -} -extension ConstraintAttributesDSL { - - // MARK: Baselines - - @available(*, deprecated:3.0, message:"Use .lastBaseline instead") - public var baseline: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.lastBaseline) - } - - @available(iOS 8.0, OSX 10.11, *) - public var lastBaseline: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.lastBaseline) - } - - @available(iOS 8.0, OSX 10.11, *) - public var firstBaseline: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.firstBaseline) - } - - // MARK: Margins - - @available(iOS 8.0, *) - public var leftMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leftMargin) - } - - @available(iOS 8.0, *) - public var topMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.topMargin) - } - - @available(iOS 8.0, *) - public var rightMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.rightMargin) - } - - @available(iOS 8.0, *) - public var bottomMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottomMargin) - } - - @available(iOS 8.0, *) - public var leadingMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leadingMargin) - } - - @available(iOS 8.0, *) - public var trailingMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.trailingMargin) - } - - @available(iOS 8.0, *) - public var centerXWithinMargins: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerXWithinMargins) - } - - @available(iOS 8.0, *) - public var centerYWithinMargins: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerYWithinMargins) - } - - @available(iOS 8.0, *) - public var margins: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.margins) - } - - @available(iOS 8.0, *) - public var centerWithinMargins: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerWithinMargins) - } - -} diff --git a/Example/Pods/SnapKit/Source/ConstraintDescription.swift b/Example/Pods/SnapKit/Source/ConstraintDescription.swift deleted file mode 100644 index 3521f9f9..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintDescription.swift +++ /dev/null @@ -1,69 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public class ConstraintDescription { - - internal let item: LayoutConstraintItem - internal var attributes: ConstraintAttributes - internal var relation: ConstraintRelation? = nil - internal var sourceLocation: (String, UInt)? = nil - internal var label: String? = nil - internal var related: ConstraintItem? = nil - internal var multiplier: ConstraintMultiplierTarget = 1.0 - internal var constant: ConstraintConstantTarget = 0.0 - internal var priority: ConstraintPriorityTarget = 1000.0 - internal lazy var constraint: Constraint? = { - guard let relation = self.relation, - let related = self.related, - let sourceLocation = self.sourceLocation else { - return nil - } - let from = ConstraintItem(target: self.item, attributes: self.attributes) - - return Constraint( - from: from, - to: related, - relation: relation, - sourceLocation: sourceLocation, - label: self.label, - multiplier: self.multiplier, - constant: self.constant, - priority: self.priority - ) - }() - - // MARK: Initialization - - internal init(item: LayoutConstraintItem, attributes: ConstraintAttributes) { - self.item = item - self.attributes = attributes - } - -} diff --git a/Example/Pods/SnapKit/Source/ConstraintInsetTarget.swift b/Example/Pods/SnapKit/Source/ConstraintInsetTarget.swift deleted file mode 100644 index ba8a0f3e..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintInsetTarget.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintInsetTarget: ConstraintConstantTarget { -} - -extension Int: ConstraintInsetTarget { -} - -extension UInt: ConstraintInsetTarget { -} - -extension Float: ConstraintInsetTarget { -} - -extension Double: ConstraintInsetTarget { -} - -extension CGFloat: ConstraintInsetTarget { -} - -extension ConstraintInsets: ConstraintInsetTarget { -} - -extension ConstraintInsetTarget { - - internal var constraintInsetTargetValue: ConstraintInsets { - if let amount = self as? ConstraintInsets { - return amount - } else if let amount = self as? Float { - return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) - } else if let amount = self as? Double { - return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) - } else if let amount = self as? CGFloat { - return ConstraintInsets(top: amount, left: amount, bottom: amount, right: amount) - } else if let amount = self as? Int { - return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) - } else if let amount = self as? UInt { - return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) - } else { - return ConstraintInsets(top: 0, left: 0, bottom: 0, right: 0) - } - } - -} diff --git a/Example/Pods/SnapKit/Source/ConstraintInsets.swift b/Example/Pods/SnapKit/Source/ConstraintInsets.swift deleted file mode 100644 index 738ca055..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintInsets.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -#if os(iOS) || os(tvOS) - public typealias ConstraintInsets = UIEdgeInsets -#else - public typealias ConstraintInsets = NSEdgeInsets -#endif diff --git a/Example/Pods/SnapKit/Source/ConstraintItem.swift b/Example/Pods/SnapKit/Source/ConstraintItem.swift deleted file mode 100644 index a342c1d9..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintItem.swift +++ /dev/null @@ -1,61 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public final class ConstraintItem { - - internal weak var target: AnyObject? - internal let attributes: ConstraintAttributes - - internal init(target: AnyObject?, attributes: ConstraintAttributes) { - self.target = target - self.attributes = attributes - } - - internal var layoutConstraintItem: LayoutConstraintItem? { - return self.target as? LayoutConstraintItem - } - -} - -public func ==(lhs: ConstraintItem, rhs: ConstraintItem) -> Bool { - // pointer equality - guard lhs !== rhs else { - return true - } - - // must both have valid targets and identical attributes - guard let target1 = lhs.target, - let target2 = rhs.target, - target1 === target2 && lhs.attributes == rhs.attributes else { - return false - } - - return true -} diff --git a/Example/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift b/Example/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift deleted file mode 100644 index c2d9e9de..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#endif - - -@available(iOS 9.0, OSX 10.11, *) -public extension ConstraintLayoutGuide { - - public var snp: ConstraintLayoutGuideDSL { - return ConstraintLayoutGuideDSL(guide: self) - } - -} diff --git a/Example/Pods/SnapKit/Source/ConstraintLayoutGuide.swift b/Example/Pods/SnapKit/Source/ConstraintLayoutGuide.swift deleted file mode 100644 index e3e50c89..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintLayoutGuide.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -#if os(iOS) || os(tvOS) - @available(iOS 9.0, *) - public typealias ConstraintLayoutGuide = UILayoutGuide -#else - @available(OSX 10.11, *) - public typealias ConstraintLayoutGuide = NSLayoutGuide -#endif diff --git a/Example/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift b/Example/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift deleted file mode 100644 index 0007819c..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -@available(iOS 9.0, OSX 10.11, *) -public struct ConstraintLayoutGuideDSL: ConstraintAttributesDSL { - - @discardableResult - public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { - return ConstraintMaker.prepareConstraints(item: self.guide, closure: closure) - } - - public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.makeConstraints(item: self.guide, closure: closure) - } - - public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.remakeConstraints(item: self.guide, closure: closure) - } - - public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.updateConstraints(item: self.guide, closure: closure) - } - - public func removeConstraints() { - ConstraintMaker.removeConstraints(item: self.guide) - } - - public var target: AnyObject? { - return self.guide - } - - internal let guide: ConstraintLayoutGuide - - internal init(guide: ConstraintLayoutGuide) { - self.guide = guide - - } - -} diff --git a/Example/Pods/SnapKit/Source/ConstraintLayoutSupport.swift b/Example/Pods/SnapKit/Source/ConstraintLayoutSupport.swift deleted file mode 100644 index e92e9fbc..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintLayoutSupport.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -#if os(iOS) || os(tvOS) - @available(iOS 8.0, *) - public typealias ConstraintLayoutSupport = UILayoutSupport -#else - public class ConstraintLayoutSupport {} -#endif diff --git a/Example/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift b/Example/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift deleted file mode 100644 index 5d6ae899..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -@available(iOS 8.0, *) -public struct ConstraintLayoutSupportDSL: ConstraintDSL { - - public var target: AnyObject? { - return self.support - } - - internal let support: ConstraintLayoutSupport - - internal init(support: ConstraintLayoutSupport) { - self.support = support - - } - - public var top: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top) - } - - public var bottom: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom) - } - - public var height: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height) - } -} diff --git a/Example/Pods/SnapKit/Source/ConstraintMaker.swift b/Example/Pods/SnapKit/Source/ConstraintMaker.swift deleted file mode 100644 index b20cdb5d..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintMaker.swift +++ /dev/null @@ -1,220 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - -public class ConstraintMaker { - - public var left: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.left) - } - - public var top: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.top) - } - - public var bottom: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.bottom) - } - - public var right: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.right) - } - - public var leading: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.leading) - } - - public var trailing: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.trailing) - } - - public var width: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.width) - } - - public var height: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.height) - } - - public var centerX: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.centerX) - } - - public var centerY: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.centerY) - } - - @available(*, deprecated:3.0, message:"Use lastBaseline instead") - public var baseline: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.lastBaseline) - } - - public var lastBaseline: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.lastBaseline) - } - - @available(iOS 8.0, OSX 10.11, *) - public var firstBaseline: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.firstBaseline) - } - - @available(iOS 8.0, *) - public var leftMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.leftMargin) - } - - @available(iOS 8.0, *) - public var rightMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.rightMargin) - } - - @available(iOS 8.0, *) - public var topMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.topMargin) - } - - @available(iOS 8.0, *) - public var bottomMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.bottomMargin) - } - - @available(iOS 8.0, *) - public var leadingMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.leadingMargin) - } - - @available(iOS 8.0, *) - public var trailingMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.trailingMargin) - } - - @available(iOS 8.0, *) - public var centerXWithinMargins: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.centerXWithinMargins) - } - - @available(iOS 8.0, *) - public var centerYWithinMargins: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.centerYWithinMargins) - } - - public var edges: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.edges) - } - public var size: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.size) - } - public var center: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.center) - } - - @available(iOS 8.0, *) - public var margins: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.margins) - } - - @available(iOS 8.0, *) - public var centerWithinMargins: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.centerWithinMargins) - } - - private let item: LayoutConstraintItem - private var descriptions = [ConstraintDescription]() - - internal init(item: LayoutConstraintItem) { - self.item = item - self.item.prepare() - } - - internal func makeExtendableWithAttributes(_ attributes: ConstraintAttributes) -> ConstraintMakerExtendable { - let description = ConstraintDescription(item: self.item, attributes: attributes) - self.descriptions.append(description) - return ConstraintMakerExtendable(description) - } - - internal static func prepareConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { - let maker = ConstraintMaker(item: item) - closure(maker) - var constraints: [Constraint] = [] - for description in maker.descriptions { - guard let constraint = description.constraint else { - continue - } - constraints.append(constraint) - } - return constraints - } - - internal static func makeConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) { - let maker = ConstraintMaker(item: item) - closure(maker) - var constraints: [Constraint] = [] - for description in maker.descriptions { - guard let constraint = description.constraint else { - continue - } - constraints.append(constraint) - } - for constraint in constraints { - constraint.activateIfNeeded(updatingExisting: false) - } - } - - internal static func remakeConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) { - self.removeConstraints(item: item) - self.makeConstraints(item: item, closure: closure) - } - - internal static func updateConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) { - guard item.constraints.count > 0 else { - self.makeConstraints(item: item, closure: closure) - return - } - - let maker = ConstraintMaker(item: item) - closure(maker) - var constraints: [Constraint] = [] - for description in maker.descriptions { - guard let constraint = description.constraint else { - continue - } - constraints.append(constraint) - } - for constraint in constraints { - constraint.activateIfNeeded(updatingExisting: true) - } - } - - internal static func removeConstraints(item: LayoutConstraintItem) { - let constraints = item.constraints - for constraint in constraints { - constraint.deactivateIfNeeded() - } - } - -} diff --git a/Example/Pods/SnapKit/Source/ConstraintMakerEditable.swift b/Example/Pods/SnapKit/Source/ConstraintMakerEditable.swift deleted file mode 100644 index fb88c416..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintMakerEditable.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public class ConstraintMakerEditable: ConstraintMakerPriortizable { - - @discardableResult - public func multipliedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable { - self.description.multiplier = amount - return self - } - - @discardableResult - public func dividedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable { - return self.multipliedBy(1.0 / amount.constraintMultiplierTargetValue) - } - - @discardableResult - public func offset(_ amount: ConstraintOffsetTarget) -> ConstraintMakerEditable { - self.description.constant = amount.constraintOffsetTargetValue - return self - } - - @discardableResult - public func inset(_ amount: ConstraintInsetTarget) -> ConstraintMakerEditable { - self.description.constant = amount.constraintInsetTargetValue - return self - } - -} diff --git a/Example/Pods/SnapKit/Source/ConstraintMakerExtendable.swift b/Example/Pods/SnapKit/Source/ConstraintMakerExtendable.swift deleted file mode 100644 index 6a755b59..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintMakerExtendable.swift +++ /dev/null @@ -1,169 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public class ConstraintMakerExtendable: ConstraintMakerRelatable { - - public var left: ConstraintMakerExtendable { - self.description.attributes += .left - return self - } - - public var top: ConstraintMakerExtendable { - self.description.attributes += .top - return self - } - - public var bottom: ConstraintMakerExtendable { - self.description.attributes += .bottom - return self - } - - public var right: ConstraintMakerExtendable { - self.description.attributes += .right - return self - } - - public var leading: ConstraintMakerExtendable { - self.description.attributes += .leading - return self - } - - public var trailing: ConstraintMakerExtendable { - self.description.attributes += .trailing - return self - } - - public var width: ConstraintMakerExtendable { - self.description.attributes += .width - return self - } - - public var height: ConstraintMakerExtendable { - self.description.attributes += .height - return self - } - - public var centerX: ConstraintMakerExtendable { - self.description.attributes += .centerX - return self - } - - public var centerY: ConstraintMakerExtendable { - self.description.attributes += .centerY - return self - } - - @available(*, deprecated:3.0, message:"Use lastBaseline instead") - public var baseline: ConstraintMakerExtendable { - self.description.attributes += .lastBaseline - return self - } - - public var lastBaseline: ConstraintMakerExtendable { - self.description.attributes += .lastBaseline - return self - } - - @available(iOS 8.0, OSX 10.11, *) - public var firstBaseline: ConstraintMakerExtendable { - self.description.attributes += .firstBaseline - return self - } - - @available(iOS 8.0, *) - public var leftMargin: ConstraintMakerExtendable { - self.description.attributes += .leftMargin - return self - } - - @available(iOS 8.0, *) - public var rightMargin: ConstraintMakerExtendable { - self.description.attributes += .rightMargin - return self - } - - @available(iOS 8.0, *) - public var topMargin: ConstraintMakerExtendable { - self.description.attributes += .topMargin - return self - } - - @available(iOS 8.0, *) - public var bottomMargin: ConstraintMakerExtendable { - self.description.attributes += .bottomMargin - return self - } - - @available(iOS 8.0, *) - public var leadingMargin: ConstraintMakerExtendable { - self.description.attributes += .leadingMargin - return self - } - - @available(iOS 8.0, *) - public var trailingMargin: ConstraintMakerExtendable { - self.description.attributes += .trailingMargin - return self - } - - @available(iOS 8.0, *) - public var centerXWithinMargins: ConstraintMakerExtendable { - self.description.attributes += .centerXWithinMargins - return self - } - - @available(iOS 8.0, *) - public var centerYWithinMargins: ConstraintMakerExtendable { - self.description.attributes += .centerYWithinMargins - return self - } - - public var edges: ConstraintMakerExtendable { - self.description.attributes += .edges - return self - } - public var size: ConstraintMakerExtendable { - self.description.attributes += .size - return self - } - - @available(iOS 8.0, *) - public var margins: ConstraintMakerExtendable { - self.description.attributes += .margins - return self - } - - @available(iOS 8.0, *) - public var centerWithinMargins: ConstraintMakerExtendable { - self.description.attributes += .centerWithinMargins - return self - } - -} diff --git a/Example/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift b/Example/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift deleted file mode 100644 index 4e1379e2..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public class ConstraintMakerFinalizable { - - internal let description: ConstraintDescription - - internal init(_ description: ConstraintDescription) { - self.description = description - } - - @discardableResult - public func labeled(_ label: String) -> ConstraintMakerFinalizable { - self.description.label = label - return self - } - - public var constraint: Constraint { - return self.description.constraint! - } - -} diff --git a/Example/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift b/Example/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift deleted file mode 100644 index ef794481..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift +++ /dev/null @@ -1,68 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public class ConstraintMakerPriortizable: ConstraintMakerFinalizable { - - @discardableResult - public func priority(_ amount: ConstraintPriority) -> ConstraintMakerFinalizable { - self.description.priority = amount.value - return self - } - - @discardableResult - public func priority(_ amount: ConstraintPriorityTarget) -> ConstraintMakerFinalizable { - self.description.priority = amount - return self - } - - @available(*, deprecated:3.0, message:"Use priority(.required) instead.") - @discardableResult - public func priorityRequired() -> ConstraintMakerFinalizable { - return self.priority(.required) - } - - @available(*, deprecated:3.0, message:"Use priority(.high) instead.") - @discardableResult - public func priorityHigh() -> ConstraintMakerFinalizable { - return self.priority(.high) - } - - @available(*, deprecated:3.0, message:"Use priority(.medium) instead.") - @discardableResult - public func priorityMedium() -> ConstraintMakerFinalizable { - return self.priority(.medium) - } - - @available(*, deprecated:3.0, message:"Use priority(.low) instead.") - @discardableResult - public func priorityLow() -> ConstraintMakerFinalizable { - return self.priority(.low) - } -} diff --git a/Example/Pods/SnapKit/Source/ConstraintMakerRelatable.swift b/Example/Pods/SnapKit/Source/ConstraintMakerRelatable.swift deleted file mode 100644 index 98c7158c..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintMakerRelatable.swift +++ /dev/null @@ -1,113 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public class ConstraintMakerRelatable { - - internal let description: ConstraintDescription - - internal init(_ description: ConstraintDescription) { - self.description = description - } - - internal func relatedTo(_ other: ConstraintRelatableTarget, relation: ConstraintRelation, file: String, line: UInt) -> ConstraintMakerEditable { - let related: ConstraintItem - let constant: ConstraintConstantTarget - - if let other = other as? ConstraintItem { - guard other.attributes == ConstraintAttributes.none || - other.attributes.layoutAttributes.count <= 1 || - other.attributes.layoutAttributes == self.description.attributes.layoutAttributes || - other.attributes == .edges && self.description.attributes == .margins || - other.attributes == .margins && self.description.attributes == .edges else { - fatalError("Cannot constraint to multiple non identical attributes. (\(file), \(line))"); - } - - related = other - constant = 0.0 - } else if let other = other as? ConstraintView { - related = ConstraintItem(target: other, attributes: ConstraintAttributes.none) - constant = 0.0 - } else if let other = other as? ConstraintConstantTarget { - related = ConstraintItem(target: nil, attributes: ConstraintAttributes.none) - constant = other - } else if #available(iOS 9.0, OSX 10.11, *), let other = other as? ConstraintLayoutGuide { - related = ConstraintItem(target: other, attributes: ConstraintAttributes.none) - constant = 0.0 - } else { - fatalError("Invalid constraint. (\(file), \(line))") - } - - let editable = ConstraintMakerEditable(self.description) - editable.description.sourceLocation = (file, line) - editable.description.relation = relation - editable.description.related = related - editable.description.constant = constant - return editable - } - - @discardableResult - public func equalTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { - return self.relatedTo(other, relation: .equal, file: file, line: line) - } - - @discardableResult - public func equalToSuperview(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { - guard let other = self.description.item.superview else { - fatalError("Expected superview but found nil when attempting make constraint `equalToSuperview`.") - } - return self.relatedTo(other, relation: .equal, file: file, line: line) - } - - @discardableResult - public func lessThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { - return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line) - } - - @discardableResult - public func lessThanOrEqualToSuperview(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { - guard let other = self.description.item.superview else { - fatalError("Expected superview but found nil when attempting make constraint `lessThanOrEqualToSuperview`.") - } - return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line) - } - - @discardableResult - public func greaterThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { - return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line) - } - - @discardableResult - public func greaterThanOrEqualToSuperview(_ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { - guard let other = self.description.item.superview else { - fatalError("Expected superview but found nil when attempting make constraint `greaterThanOrEqualToSuperview`.") - } - return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line) - } -} diff --git a/Example/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift b/Example/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift deleted file mode 100644 index 6fecd33e..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift +++ /dev/null @@ -1,75 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintMultiplierTarget { - - var constraintMultiplierTargetValue: CGFloat { get } - -} - -extension Int: ConstraintMultiplierTarget { - - public var constraintMultiplierTargetValue: CGFloat { - return CGFloat(self) - } - -} - -extension UInt: ConstraintMultiplierTarget { - - public var constraintMultiplierTargetValue: CGFloat { - return CGFloat(self) - } - -} - -extension Float: ConstraintMultiplierTarget { - - public var constraintMultiplierTargetValue: CGFloat { - return CGFloat(self) - } - -} - -extension Double: ConstraintMultiplierTarget { - - public var constraintMultiplierTargetValue: CGFloat { - return CGFloat(self) - } - -} - -extension CGFloat: ConstraintMultiplierTarget { - - public var constraintMultiplierTargetValue: CGFloat { - return self - } - -} diff --git a/Example/Pods/SnapKit/Source/ConstraintOffsetTarget.swift b/Example/Pods/SnapKit/Source/ConstraintOffsetTarget.swift deleted file mode 100644 index bd9e0a1e..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintOffsetTarget.swift +++ /dev/null @@ -1,69 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintOffsetTarget: ConstraintConstantTarget { -} - -extension Int: ConstraintOffsetTarget { -} - -extension UInt: ConstraintOffsetTarget { -} - -extension Float: ConstraintOffsetTarget { -} - -extension Double: ConstraintOffsetTarget { -} - -extension CGFloat: ConstraintOffsetTarget { -} - -extension ConstraintOffsetTarget { - - internal var constraintOffsetTargetValue: CGFloat { - let offset: CGFloat - if let amount = self as? Float { - offset = CGFloat(amount) - } else if let amount = self as? Double { - offset = CGFloat(amount) - } else if let amount = self as? CGFloat { - offset = CGFloat(amount) - } else if let amount = self as? Int { - offset = CGFloat(amount) - } else if let amount = self as? UInt { - offset = CGFloat(amount) - } else { - offset = 0.0 - } - return offset - } - -} diff --git a/Example/Pods/SnapKit/Source/ConstraintPriority.swift b/Example/Pods/SnapKit/Source/ConstraintPriority.swift deleted file mode 100644 index f9dab162..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintPriority.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - -public struct ConstraintPriority : ExpressibleByFloatLiteral, Equatable, Strideable { - public typealias FloatLiteralType = Float - - public let value: Float - - public init(floatLiteral value: Float) { - self.value = value - } - - public init(_ value: Float) { - self.value = value - } - - public static var required: ConstraintPriority { - return 1000.0 - } - - public static var high: ConstraintPriority { - return 750.0 - } - - public static var medium: ConstraintPriority { - #if os(OSX) - return 501.0 - #else - return 500.0 - #endif - - } - - public static var low: ConstraintPriority { - return 250.0 - } - - public static func ==(lhs: ConstraintPriority, rhs: ConstraintPriority) -> Bool { - return lhs.value == rhs.value - } - - // MARK: Strideable - - public func advanced(by n: FloatLiteralType) -> ConstraintPriority { - return ConstraintPriority(floatLiteral: value + n) - } - - public func distance(to other: ConstraintPriority) -> FloatLiteralType { - return other.value - value - } -} diff --git a/Example/Pods/SnapKit/Source/ConstraintPriorityTarget.swift b/Example/Pods/SnapKit/Source/ConstraintPriorityTarget.swift deleted file mode 100644 index eb32f799..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintPriorityTarget.swift +++ /dev/null @@ -1,75 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintPriorityTarget { - - var constraintPriorityTargetValue: Float { get } - -} - -extension Int: ConstraintPriorityTarget { - - public var constraintPriorityTargetValue: Float { - return Float(self) - } - -} - -extension UInt: ConstraintPriorityTarget { - - public var constraintPriorityTargetValue: Float { - return Float(self) - } - -} - -extension Float: ConstraintPriorityTarget { - - public var constraintPriorityTargetValue: Float { - return self - } - -} - -extension Double: ConstraintPriorityTarget { - - public var constraintPriorityTargetValue: Float { - return Float(self) - } - -} - -extension CGFloat: ConstraintPriorityTarget { - - public var constraintPriorityTargetValue: Float { - return Float(self) - } - -} diff --git a/Example/Pods/SnapKit/Source/ConstraintRelatableTarget.swift b/Example/Pods/SnapKit/Source/ConstraintRelatableTarget.swift deleted file mode 100644 index 69763679..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintRelatableTarget.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintRelatableTarget { -} - -extension Int: ConstraintRelatableTarget { -} - -extension UInt: ConstraintRelatableTarget { -} - -extension Float: ConstraintRelatableTarget { -} - -extension Double: ConstraintRelatableTarget { -} - -extension CGFloat: ConstraintRelatableTarget { -} - -extension CGSize: ConstraintRelatableTarget { -} - -extension CGPoint: ConstraintRelatableTarget { -} - -extension ConstraintInsets: ConstraintRelatableTarget { -} - -extension ConstraintItem: ConstraintRelatableTarget { -} - -extension ConstraintView: ConstraintRelatableTarget { -} - -@available(iOS 9.0, OSX 10.11, *) -extension ConstraintLayoutGuide: ConstraintRelatableTarget { -} diff --git a/Example/Pods/SnapKit/Source/ConstraintRelation.swift b/Example/Pods/SnapKit/Source/ConstraintRelation.swift deleted file mode 100644 index 446aaf76..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintRelation.swift +++ /dev/null @@ -1,48 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -internal enum ConstraintRelation : Int { - case equal = 1 - case lessThanOrEqual - case greaterThanOrEqual - - internal var layoutRelation: LayoutRelation { - get { - switch(self) { - case .equal: - return .equal - case .lessThanOrEqual: - return .lessThanOrEqual - case .greaterThanOrEqual: - return .greaterThanOrEqual - } - } - } -} diff --git a/Example/Pods/SnapKit/Source/ConstraintView+Extensions.swift b/Example/Pods/SnapKit/Source/ConstraintView+Extensions.swift deleted file mode 100644 index 77afad90..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintView+Extensions.swift +++ /dev/null @@ -1,152 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public extension ConstraintView { - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public var snp_left: ConstraintItem { return self.snp.left } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public var snp_top: ConstraintItem { return self.snp.top } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public var snp_right: ConstraintItem { return self.snp.right } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public var snp_bottom: ConstraintItem { return self.snp.bottom } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public var snp_leading: ConstraintItem { return self.snp.leading } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public var snp_trailing: ConstraintItem { return self.snp.trailing } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public var snp_width: ConstraintItem { return self.snp.width } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public var snp_height: ConstraintItem { return self.snp.height } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public var snp_centerX: ConstraintItem { return self.snp.centerX } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public var snp_centerY: ConstraintItem { return self.snp.centerY } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public var snp_baseline: ConstraintItem { return self.snp.baseline } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - @available(iOS 8.0, OSX 10.11, *) - public var snp_lastBaseline: ConstraintItem { return self.snp.lastBaseline } - - @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") - @available(iOS 8.0, OSX 10.11, *) - public var snp_firstBaseline: ConstraintItem { return self.snp.firstBaseline } - - @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - public var snp_leftMargin: ConstraintItem { return self.snp.leftMargin } - - @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - public var snp_topMargin: ConstraintItem { return self.snp.topMargin } - - @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - public var snp_rightMargin: ConstraintItem { return self.snp.rightMargin } - - @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - public var snp_bottomMargin: ConstraintItem { return self.snp.bottomMargin } - - @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - public var snp_leadingMargin: ConstraintItem { return self.snp.leadingMargin } - - @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - public var snp_trailingMargin: ConstraintItem { return self.snp.trailingMargin } - - @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - public var snp_centerXWithinMargins: ConstraintItem { return self.snp.centerXWithinMargins } - - @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - public var snp_centerYWithinMargins: ConstraintItem { return self.snp.centerYWithinMargins } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public var snp_edges: ConstraintItem { return self.snp.edges } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public var snp_size: ConstraintItem { return self.snp.size } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public var snp_center: ConstraintItem { return self.snp.center } - - @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - public var snp_margins: ConstraintItem { return self.snp.margins } - - @available(iOS, deprecated:3.0, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - public var snp_centerWithinMargins: ConstraintItem { return self.snp.centerWithinMargins } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public func snp_prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { - return self.snp.prepareConstraints(closure) - } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public func snp_makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - self.snp.makeConstraints(closure) - } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public func snp_remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - self.snp.remakeConstraints(closure) - } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public func snp_updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - self.snp.updateConstraints(closure) - } - - @available(*, deprecated:3.0, message:"Use newer snp.* syntax.") - public func snp_removeConstraints() { - self.snp.removeConstraints() - } - - public var snp: ConstraintViewDSL { - return ConstraintViewDSL(view: self) - } - -} diff --git a/Example/Pods/SnapKit/Source/ConstraintView.swift b/Example/Pods/SnapKit/Source/ConstraintView.swift deleted file mode 100644 index 6ff8a76e..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintView.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -#if os(iOS) || os(tvOS) - public typealias ConstraintView = UIView -#else - public typealias ConstraintView = NSView -#endif diff --git a/Example/Pods/SnapKit/Source/ConstraintViewDSL.swift b/Example/Pods/SnapKit/Source/ConstraintViewDSL.swift deleted file mode 100644 index 298bdb18..00000000 --- a/Example/Pods/SnapKit/Source/ConstraintViewDSL.swift +++ /dev/null @@ -1,101 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public struct ConstraintViewDSL: ConstraintAttributesDSL { - - @discardableResult - public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { - return ConstraintMaker.prepareConstraints(item: self.view, closure: closure) - } - - public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.makeConstraints(item: self.view, closure: closure) - } - - public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.remakeConstraints(item: self.view, closure: closure) - } - - public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.updateConstraints(item: self.view, closure: closure) - } - - public func removeConstraints() { - ConstraintMaker.removeConstraints(item: self.view) - } - - public var contentHuggingHorizontalPriority: Float { - get { - return self.view.contentHuggingPriority(for: .horizontal).rawValue - } - set { - self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .horizontal) - } - } - - public var contentHuggingVerticalPriority: Float { - get { - return self.view.contentHuggingPriority(for: .vertical).rawValue - } - set { - self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .vertical) - } - } - - public var contentCompressionResistanceHorizontalPriority: Float { - get { - return self.view.contentCompressionResistancePriority(for: .horizontal).rawValue - } - set { - self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .horizontal) - } - } - - public var contentCompressionResistanceVerticalPriority: Float { - get { - return self.view.contentCompressionResistancePriority(for: .vertical).rawValue - } - set { - self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .vertical) - } - } - - public var target: AnyObject? { - return self.view - } - - internal let view: ConstraintView - - internal init(view: ConstraintView) { - self.view = view - - } - -} diff --git a/Example/Pods/SnapKit/Source/Debugging.swift b/Example/Pods/SnapKit/Source/Debugging.swift deleted file mode 100644 index 55f5b87f..00000000 --- a/Example/Pods/SnapKit/Source/Debugging.swift +++ /dev/null @@ -1,160 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - -public extension LayoutConstraint { - - override public var description: String { - var description = "<" - - description += descriptionForObject(self) - - if let firstItem = conditionalOptional(from: self.firstItem) { - description += " \(descriptionForObject(firstItem))" - } - - if self.firstAttribute != .notAnAttribute { - description += ".\(descriptionForAttribute(self.firstAttribute))" - } - - description += " \(descriptionForRelation(self.relation))" - - if let secondItem = self.secondItem { - description += " \(descriptionForObject(secondItem))" - } - - if self.secondAttribute != .notAnAttribute { - description += ".\(descriptionForAttribute(self.secondAttribute))" - } - - if self.multiplier != 1.0 { - description += " * \(self.multiplier)" - } - - if self.secondAttribute == .notAnAttribute { - description += " \(self.constant)" - } else { - if self.constant > 0.0 { - description += " + \(self.constant)" - } else if self.constant < 0.0 { - description += " - \(abs(self.constant))" - } - } - - if self.priority.rawValue != 1000.0 { - description += " ^\(self.priority)" - } - - description += ">" - - return description - } - -} - -private func descriptionForRelation(_ relation: LayoutRelation) -> String { - switch relation { - case .equal: return "==" - case .greaterThanOrEqual: return ">=" - case .lessThanOrEqual: return "<=" - } -} - -private func descriptionForAttribute(_ attribute: LayoutAttribute) -> String { - #if os(iOS) || os(tvOS) - switch attribute { - case .notAnAttribute: return "notAnAttribute" - case .top: return "top" - case .left: return "left" - case .bottom: return "bottom" - case .right: return "right" - case .leading: return "leading" - case .trailing: return "trailing" - case .width: return "width" - case .height: return "height" - case .centerX: return "centerX" - case .centerY: return "centerY" - case .lastBaseline: return "lastBaseline" - case .firstBaseline: return "firstBaseline" - case .topMargin: return "topMargin" - case .leftMargin: return "leftMargin" - case .bottomMargin: return "bottomMargin" - case .rightMargin: return "rightMargin" - case .leadingMargin: return "leadingMargin" - case .trailingMargin: return "trailingMargin" - case .centerXWithinMargins: return "centerXWithinMargins" - case .centerYWithinMargins: return "centerYWithinMargins" - } - #else - switch attribute { - case .notAnAttribute: return "notAnAttribute" - case .top: return "top" - case .left: return "left" - case .bottom: return "bottom" - case .right: return "right" - case .leading: return "leading" - case .trailing: return "trailing" - case .width: return "width" - case .height: return "height" - case .centerX: return "centerX" - case .centerY: return "centerY" - case .lastBaseline: return "lastBaseline" - case .firstBaseline: return "firstBaseline" - } - #endif -} - -private func conditionalOptional(from object: Optional) -> Optional { - return object -} - -private func conditionalOptional(from object: T) -> Optional { - return Optional.some(object) -} - -private func descriptionForObject(_ object: AnyObject) -> String { - let pointerDescription = String(format: "%p", UInt(bitPattern: ObjectIdentifier(object))) - var desc = "" - - desc += type(of: object).description() - - if let object = object as? ConstraintView { - desc += ":\(object.snp.label() ?? pointerDescription)" - } else if let object = object as? LayoutConstraint { - desc += ":\(object.label ?? pointerDescription)" - } else { - desc += ":\(pointerDescription)" - } - - if let object = object as? LayoutConstraint, let file = object.constraint?.sourceLocation.0, let line = object.constraint?.sourceLocation.1 { - desc += "@\((file as NSString).lastPathComponent)#\(line)" - } - - desc += "" - return desc -} diff --git a/Example/Pods/SnapKit/Source/LayoutConstraint.swift b/Example/Pods/SnapKit/Source/LayoutConstraint.swift deleted file mode 100644 index 8bb5ed2c..00000000 --- a/Example/Pods/SnapKit/Source/LayoutConstraint.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public class LayoutConstraint : NSLayoutConstraint { - - public var label: String? { - get { - return self.identifier - } - set { - self.identifier = newValue - } - } - - internal weak var constraint: Constraint? = nil - -} - -internal func ==(lhs: LayoutConstraint, rhs: LayoutConstraint) -> Bool { - guard lhs.firstItem === rhs.firstItem && - lhs.secondItem === rhs.secondItem && - lhs.firstAttribute == rhs.firstAttribute && - lhs.secondAttribute == rhs.secondAttribute && - lhs.relation == rhs.relation && - lhs.priority == rhs.priority && - lhs.multiplier == rhs.multiplier else { - return false - } - return true -} diff --git a/Example/Pods/SnapKit/Source/LayoutConstraintItem.swift b/Example/Pods/SnapKit/Source/LayoutConstraintItem.swift deleted file mode 100644 index a59de6bf..00000000 --- a/Example/Pods/SnapKit/Source/LayoutConstraintItem.swift +++ /dev/null @@ -1,93 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public protocol LayoutConstraintItem: class { -} - -@available(iOS 9.0, OSX 10.11, *) -extension ConstraintLayoutGuide : LayoutConstraintItem { -} - -extension ConstraintView : LayoutConstraintItem { -} - - -extension LayoutConstraintItem { - - internal func prepare() { - if let view = self as? ConstraintView { - view.translatesAutoresizingMaskIntoConstraints = false - } - } - - internal var superview: ConstraintView? { - if let view = self as? ConstraintView { - return view.superview - } - - if #available(iOS 9.0, OSX 10.11, *), let guide = self as? ConstraintLayoutGuide { - return guide.owningView - } - - return nil - } - internal var constraints: [Constraint] { - return self.constraintsSet.allObjects as! [Constraint] - } - - internal func add(constraints: [Constraint]) { - let constraintsSet = self.constraintsSet - for constraint in constraints { - constraintsSet.add(constraint) - } - } - - internal func remove(constraints: [Constraint]) { - let constraintsSet = self.constraintsSet - for constraint in constraints { - constraintsSet.remove(constraint) - } - } - - private var constraintsSet: NSMutableSet { - let constraintsSet: NSMutableSet - - if let existing = objc_getAssociatedObject(self, &constraintsKey) as? NSMutableSet { - constraintsSet = existing - } else { - constraintsSet = NSMutableSet() - objc_setAssociatedObject(self, &constraintsKey, constraintsSet, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - return constraintsSet - - } - -} -private var constraintsKey: UInt8 = 0 diff --git a/Example/Pods/SnapKit/Source/Typealiases.swift b/Example/Pods/SnapKit/Source/Typealiases.swift deleted file mode 100644 index 8a441515..00000000 --- a/Example/Pods/SnapKit/Source/Typealiases.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -import Foundation - -#if os(iOS) || os(tvOS) - import UIKit - typealias LayoutRelation = NSLayoutRelation - typealias LayoutAttribute = NSLayoutAttribute - typealias LayoutPriority = UILayoutPriority -#else - import AppKit - typealias LayoutRelation = NSLayoutConstraint.Relation - typealias LayoutAttribute = NSLayoutConstraint.Attribute - typealias LayoutPriority = NSLayoutConstraint.Priority -#endif - diff --git a/Example/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift b/Example/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift deleted file mode 100644 index cfbce2e7..00000000 --- a/Example/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#endif - - -@available(iOS 8.0, *) -public extension ConstraintLayoutSupport { - - public var snp: ConstraintLayoutSupportDSL { - return ConstraintLayoutSupportDSL(support: self) - } - -} diff --git a/Example/Pods/Target Support Files/Cosmos/Cosmos-dummy.m b/Example/Pods/Target Support Files/Cosmos/Cosmos-dummy.m deleted file mode 100644 index 9994434a..00000000 --- a/Example/Pods/Target Support Files/Cosmos/Cosmos-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Cosmos : NSObject -@end -@implementation PodsDummy_Cosmos -@end diff --git a/Example/Pods/Target Support Files/Cosmos/Cosmos-prefix.pch b/Example/Pods/Target Support Files/Cosmos/Cosmos-prefix.pch deleted file mode 100644 index beb2a244..00000000 --- a/Example/Pods/Target Support Files/Cosmos/Cosmos-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Example/Pods/Target Support Files/Cosmos/Cosmos-umbrella.h b/Example/Pods/Target Support Files/Cosmos/Cosmos-umbrella.h deleted file mode 100644 index 5eb01bbc..00000000 --- a/Example/Pods/Target Support Files/Cosmos/Cosmos-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double CosmosVersionNumber; -FOUNDATION_EXPORT const unsigned char CosmosVersionString[]; - diff --git a/Example/Pods/Target Support Files/Cosmos/Cosmos.modulemap b/Example/Pods/Target Support Files/Cosmos/Cosmos.modulemap deleted file mode 100644 index b636c840..00000000 --- a/Example/Pods/Target Support Files/Cosmos/Cosmos.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Cosmos { - umbrella header "Cosmos-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/Cosmos/Cosmos.xcconfig b/Example/Pods/Target Support Files/Cosmos/Cosmos.xcconfig deleted file mode 100644 index f7523abb..00000000 --- a/Example/Pods/Target Support Files/Cosmos/Cosmos.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Cosmos -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Cosmos -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Example/Pods/Target Support Files/Cosmos/Info.plist b/Example/Pods/Target Support Files/Cosmos/Info.plist deleted file mode 100644 index 296dfc00..00000000 --- a/Example/Pods/Target Support Files/Cosmos/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 16.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Info.plist b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Info.plist deleted file mode 100644 index 0798af2c..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.22.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-acknowledgements.markdown deleted file mode 100644 index cf4b9f02..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-acknowledgements.markdown +++ /dev/null @@ -1,153 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: - -## Cosmos - -The MIT License - -Copyright (c) 2015 Evgenii Neumerzhitckii - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -## Crashlytics - -Fabric: Copyright 2018 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2018 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt - -## Fabric - -Fabric: Copyright 2018 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. OSS: http://get.fabric.io/terms/opensource.txt - -## PopupDialog - -Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -Author - Martin Wildfeuer (http://www.mwfire.de) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -## SQLite.swift - -(The MIT License) - -Copyright (c) 2014-2015 Stephen Celis () - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -## SlackTextViewController - -Copyright (c) Slack Technologies, Inc. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -## SnapKit - -Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -## WebimClientLibrary - -Copyright (c) 2017-2018 Webim - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -Generated by CocoaPods - https://cocoapods.org diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-acknowledgements.plist deleted file mode 100644 index 14426d54..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-acknowledgements.plist +++ /dev/null @@ -1,227 +0,0 @@ - - - - - PreferenceSpecifiers - - - FooterText - This application makes use of the following third party libraries: - Title - Acknowledgements - Type - PSGroupSpecifier - - - FooterText - The MIT License - -Copyright (c) 2015 Evgenii Neumerzhitckii - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - License - MIT - Title - Cosmos - Type - PSGroupSpecifier - - - FooterText - Fabric: Copyright 2018 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2018 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt - License - Commercial - Title - Crashlytics - Type - PSGroupSpecifier - - - FooterText - Fabric: Copyright 2018 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. OSS: http://get.fabric.io/terms/opensource.txt - License - Commercial - Title - Fabric - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2016 Orderella Ltd. (http://orderella.co.uk) -Author - Martin Wildfeuer (http://www.mwfire.de) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - License - MIT - Title - PopupDialog - Type - PSGroupSpecifier - - - FooterText - (The MIT License) - -Copyright (c) 2014-2015 Stephen Celis (<stephen@stephencelis.com>) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - License - MIT - Title - SQLite.swift - Type - PSGroupSpecifier - - - FooterText - Copyright (c) Slack Technologies, Inc. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - License - MIT - Title - SlackTextViewController - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - License - MIT - Title - SnapKit - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2017-2018 Webim <n.lazarev-zubov@webim.ru> - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - License - MIT - Title - WebimClientLibrary - Type - PSGroupSpecifier - - - FooterText - Generated by CocoaPods - https://cocoapods.org - Title - - Type - PSGroupSpecifier - - - StringsTable - Acknowledgements - Title - Acknowledgements - - diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-dummy.m b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-dummy.m deleted file mode 100644 index 8f101dab..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_WebimClientLibrary_Example : NSObject -@end -@implementation PodsDummy_Pods_WebimClientLibrary_Example -@end diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-frameworks.sh b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-frameworks.sh deleted file mode 100755 index 15419182..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-frameworks.sh +++ /dev/null @@ -1,163 +0,0 @@ -#!/bin/sh -set -e -set -u -set -o pipefail - -if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then - # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy - # frameworks to, so exit 0 (signalling the script phase was successful). - exit 0 -fi - -echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" -mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - -COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" -SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" - -# Used as a return value for each invocation of `strip_invalid_archs` function. -STRIP_BINARY_RETVAL=0 - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -# Copies and strips a vendored framework -install_framework() -{ - if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then - local source="${BUILT_PRODUCTS_DIR}/$1" - elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then - local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" - elif [ -r "$1" ]; then - local source="$1" - fi - - local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - - if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink "${source}")" - fi - - # Use filter instead of exclude so missing patterns don't throw errors. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" - - local basename - basename="$(basename -s .framework "$1")" - binary="${destination}/${basename}.framework/${basename}" - if ! [ -r "$binary" ]; then - binary="${destination}/${basename}" - fi - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then - strip_invalid_archs "$binary" - fi - - # Resign the code if required by the build settings to avoid unstable apps - code_sign_if_enabled "${destination}/$(basename "$1")" - - # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. - if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then - local swift_runtime_libs - swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) - for lib in $swift_runtime_libs; do - echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" - rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" - code_sign_if_enabled "${destination}/${lib}" - done - fi -} - -# Copies and strips a vendored dSYM -install_dsym() { - local source="$1" - if [ -r "$source" ]; then - # Copy the dSYM into a the targets temp dir. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" - - local basename - basename="$(basename -s .framework.dSYM "$source")" - binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then - strip_invalid_archs "$binary" - fi - - if [[ $STRIP_BINARY_RETVAL == 1 ]]; then - # Move the stripped file into its final destination. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" - else - # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. - touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" - fi - fi -} - -# Signs a framework with the provided identity -code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identitiy - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" - - if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - code_sign_cmd="$code_sign_cmd &" - fi - echo "$code_sign_cmd" - eval "$code_sign_cmd" - fi -} - -# Strip invalid architectures -strip_invalid_archs() { - binary="$1" - # Get architectures for current target binary - binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" - # Intersect them with the architectures we are building for - intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" - # If there are no archs supported by this binary then warn the user - if [[ -z "$intersected_archs" ]]; then - echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." - STRIP_BINARY_RETVAL=0 - return - fi - stripped="" - for arch in $binary_archs; do - if ! [[ "${ARCHS}" == *"$arch"* ]]; then - # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" || exit 1 - stripped="$stripped $arch" - fi - done - if [[ "$stripped" ]]; then - echo "Stripped $binary of architectures:$stripped" - fi - STRIP_BINARY_RETVAL=1 -} - - -if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Cosmos/Cosmos.framework" - install_framework "${BUILT_PRODUCTS_DIR}/PopupDialog/PopupDialog.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SQLite.swift/SQLite.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SlackTextViewController/SlackTextViewController.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" - install_framework "${BUILT_PRODUCTS_DIR}/WebimClientLibrary/WebimClientLibrary.framework" -fi -if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Cosmos/Cosmos.framework" - install_framework "${BUILT_PRODUCTS_DIR}/PopupDialog/PopupDialog.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SQLite.swift/SQLite.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SlackTextViewController/SlackTextViewController.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" - install_framework "${BUILT_PRODUCTS_DIR}/WebimClientLibrary/WebimClientLibrary.framework" -fi -if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - wait -fi diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-resources.sh b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-resources.sh deleted file mode 100755 index 345301f2..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-resources.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/sh -set -e -set -u -set -o pipefail - -if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then - # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy - # resources to, so exit 0 (signalling the script phase was successful). - exit 0 -fi - -mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - -RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt -> "$RESOURCES_TO_COPY" - -XCASSET_FILES=() - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -case "${TARGETED_DEVICE_FAMILY:-}" in - 1,2) - TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" - ;; - 1) - TARGET_DEVICE_ARGS="--target-device iphone" - ;; - 2) - TARGET_DEVICE_ARGS="--target-device ipad" - ;; - 3) - TARGET_DEVICE_ARGS="--target-device tv" - ;; - 4) - TARGET_DEVICE_ARGS="--target-device watch" - ;; - *) - TARGET_DEVICE_ARGS="--target-device mac" - ;; -esac - -install_resource() -{ - if [[ "$1" = /* ]] ; then - RESOURCE_PATH="$1" - else - RESOURCE_PATH="${PODS_ROOT}/$1" - fi - if [[ ! -e "$RESOURCE_PATH" ]] ; then - cat << EOM -error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. -EOM - exit 1 - fi - case $RESOURCE_PATH in - *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true - ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} - ;; - *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true - ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} - ;; - *.framework) - echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true - mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - ;; - *.xcdatamodel) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true - xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" - ;; - *.xcdatamodeld) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true - xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" - ;; - *.xcmappingmodel) - echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true - xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" - ;; - *.xcassets) - ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" - XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") - ;; - *) - echo "$RESOURCE_PATH" || true - echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" - ;; - esac -} - -mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then - mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi -rm -f "$RESOURCES_TO_COPY" - -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] -then - # Find all other xcassets (this unfortunately includes those of path pods and other targets). - OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) - while read line; do - if [[ $line != "${PODS_ROOT}*" ]]; then - XCASSET_FILES+=("$line") - fi - done <<<"$OTHER_XCASSETS" - - if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - else - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" - fi -fi diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-umbrella.h b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-umbrella.h deleted file mode 100644 index 23d3bbde..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double Pods_WebimClientLibrary_ExampleVersionNumber; -FOUNDATION_EXPORT const unsigned char Pods_WebimClientLibrary_ExampleVersionString[]; - diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example.debug.xcconfig b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example.debug.xcconfig deleted file mode 100644 index 3a72ac60..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example.debug.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Cosmos" "${PODS_CONFIGURATION_BUILD_DIR}/PopupDialog" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_CONFIGURATION_BUILD_DIR}/SlackTextViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/WebimClientLibrary" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Cosmos/Cosmos.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/PopupDialog/PopupDialog.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SlackTextViewController/SlackTextViewController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/WebimClientLibrary/WebimClientLibrary.framework/Headers" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "Crashlytics" -framework "Fabric" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -OTHER_LDFLAGS[arch=arm64] = $(inherited) -filelist "$(OBJROOT)/Pods.build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)-$(TARGET_NAME)-arm64.objects.filelist" -OTHER_LDFLAGS[arch=armv7] = $(inherited) -filelist "$(OBJROOT)/Pods.build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)-$(TARGET_NAME)-armv7.objects.filelist" -OTHER_LDFLAGS[arch=armv7s] = $(inherited) -filelist "$(OBJROOT)/Pods.build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)-$(TARGET_NAME)-armv7s.objects.filelist" -OTHER_LDFLAGS[arch=i386] = $(inherited) -filelist "$(OBJROOT)/Pods.build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)-$(TARGET_NAME)-i386.objects.filelist" -OTHER_LDFLAGS[arch=x86_64] = $(inherited) -filelist "$(OBJROOT)/Pods.build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)-$(TARGET_NAME)-x86_64.objects.filelist" -OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example.modulemap b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example.modulemap deleted file mode 100644 index 8f870b35..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pods_WebimClientLibrary_Example { - umbrella header "Pods-WebimClientLibrary_Example-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example.release.xcconfig b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example.release.xcconfig deleted file mode 100644 index 3a72ac60..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example.release.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Cosmos" "${PODS_CONFIGURATION_BUILD_DIR}/PopupDialog" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_CONFIGURATION_BUILD_DIR}/SlackTextViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/WebimClientLibrary" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Cosmos/Cosmos.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/PopupDialog/PopupDialog.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SlackTextViewController/SlackTextViewController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/WebimClientLibrary/WebimClientLibrary.framework/Headers" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "Crashlytics" -framework "Fabric" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -OTHER_LDFLAGS[arch=arm64] = $(inherited) -filelist "$(OBJROOT)/Pods.build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)-$(TARGET_NAME)-arm64.objects.filelist" -OTHER_LDFLAGS[arch=armv7] = $(inherited) -filelist "$(OBJROOT)/Pods.build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)-$(TARGET_NAME)-armv7.objects.filelist" -OTHER_LDFLAGS[arch=armv7s] = $(inherited) -filelist "$(OBJROOT)/Pods.build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)-$(TARGET_NAME)-armv7s.objects.filelist" -OTHER_LDFLAGS[arch=i386] = $(inherited) -filelist "$(OBJROOT)/Pods.build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)-$(TARGET_NAME)-i386.objects.filelist" -OTHER_LDFLAGS[arch=x86_64] = $(inherited) -filelist "$(OBJROOT)/Pods.build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)-$(TARGET_NAME)-x86_64.objects.filelist" -OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Info.plist b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Info.plist deleted file mode 100644 index 0798af2c..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.22.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-acknowledgements.markdown deleted file mode 100644 index 102af753..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-acknowledgements.markdown +++ /dev/null @@ -1,3 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: -Generated by CocoaPods - https://cocoapods.org diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-acknowledgements.plist deleted file mode 100644 index 7acbad1e..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-acknowledgements.plist +++ /dev/null @@ -1,29 +0,0 @@ - - - - - PreferenceSpecifiers - - - FooterText - This application makes use of the following third party libraries: - Title - Acknowledgements - Type - PSGroupSpecifier - - - FooterText - Generated by CocoaPods - https://cocoapods.org - Title - - Type - PSGroupSpecifier - - - StringsTable - Acknowledgements - Title - Acknowledgements - - diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-dummy.m b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-dummy.m deleted file mode 100644 index a7ceb9f7..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_WebimClientLibrary_Tests : NSObject -@end -@implementation PodsDummy_Pods_WebimClientLibrary_Tests -@end diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-frameworks.sh b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-frameworks.sh deleted file mode 100755 index 08e3eaac..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-frameworks.sh +++ /dev/null @@ -1,146 +0,0 @@ -#!/bin/sh -set -e -set -u -set -o pipefail - -if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then - # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy - # frameworks to, so exit 0 (signalling the script phase was successful). - exit 0 -fi - -echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" -mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - -COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" -SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" - -# Used as a return value for each invocation of `strip_invalid_archs` function. -STRIP_BINARY_RETVAL=0 - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -# Copies and strips a vendored framework -install_framework() -{ - if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then - local source="${BUILT_PRODUCTS_DIR}/$1" - elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then - local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" - elif [ -r "$1" ]; then - local source="$1" - fi - - local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - - if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink "${source}")" - fi - - # Use filter instead of exclude so missing patterns don't throw errors. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" - - local basename - basename="$(basename -s .framework "$1")" - binary="${destination}/${basename}.framework/${basename}" - if ! [ -r "$binary" ]; then - binary="${destination}/${basename}" - fi - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then - strip_invalid_archs "$binary" - fi - - # Resign the code if required by the build settings to avoid unstable apps - code_sign_if_enabled "${destination}/$(basename "$1")" - - # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. - if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then - local swift_runtime_libs - swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) - for lib in $swift_runtime_libs; do - echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" - rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" - code_sign_if_enabled "${destination}/${lib}" - done - fi -} - -# Copies and strips a vendored dSYM -install_dsym() { - local source="$1" - if [ -r "$source" ]; then - # Copy the dSYM into a the targets temp dir. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" - - local basename - basename="$(basename -s .framework.dSYM "$source")" - binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then - strip_invalid_archs "$binary" - fi - - if [[ $STRIP_BINARY_RETVAL == 1 ]]; then - # Move the stripped file into its final destination. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" - else - # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. - touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" - fi - fi -} - -# Signs a framework with the provided identity -code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identitiy - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" - - if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - code_sign_cmd="$code_sign_cmd &" - fi - echo "$code_sign_cmd" - eval "$code_sign_cmd" - fi -} - -# Strip invalid architectures -strip_invalid_archs() { - binary="$1" - # Get architectures for current target binary - binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" - # Intersect them with the architectures we are building for - intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" - # If there are no archs supported by this binary then warn the user - if [[ -z "$intersected_archs" ]]; then - echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." - STRIP_BINARY_RETVAL=0 - return - fi - stripped="" - for arch in $binary_archs; do - if ! [[ "${ARCHS}" == *"$arch"* ]]; then - # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" || exit 1 - stripped="$stripped $arch" - fi - done - if [[ "$stripped" ]]; then - echo "Stripped $binary of architectures:$stripped" - fi - STRIP_BINARY_RETVAL=1 -} - -if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - wait -fi diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-resources.sh b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-resources.sh deleted file mode 100755 index 345301f2..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-resources.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/sh -set -e -set -u -set -o pipefail - -if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then - # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy - # resources to, so exit 0 (signalling the script phase was successful). - exit 0 -fi - -mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - -RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt -> "$RESOURCES_TO_COPY" - -XCASSET_FILES=() - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -case "${TARGETED_DEVICE_FAMILY:-}" in - 1,2) - TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" - ;; - 1) - TARGET_DEVICE_ARGS="--target-device iphone" - ;; - 2) - TARGET_DEVICE_ARGS="--target-device ipad" - ;; - 3) - TARGET_DEVICE_ARGS="--target-device tv" - ;; - 4) - TARGET_DEVICE_ARGS="--target-device watch" - ;; - *) - TARGET_DEVICE_ARGS="--target-device mac" - ;; -esac - -install_resource() -{ - if [[ "$1" = /* ]] ; then - RESOURCE_PATH="$1" - else - RESOURCE_PATH="${PODS_ROOT}/$1" - fi - if [[ ! -e "$RESOURCE_PATH" ]] ; then - cat << EOM -error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. -EOM - exit 1 - fi - case $RESOURCE_PATH in - *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true - ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} - ;; - *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true - ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} - ;; - *.framework) - echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true - mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - ;; - *.xcdatamodel) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true - xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" - ;; - *.xcdatamodeld) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true - xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" - ;; - *.xcmappingmodel) - echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true - xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" - ;; - *.xcassets) - ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" - XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") - ;; - *) - echo "$RESOURCE_PATH" || true - echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" - ;; - esac -} - -mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then - mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi -rm -f "$RESOURCES_TO_COPY" - -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] -then - # Find all other xcassets (this unfortunately includes those of path pods and other targets). - OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) - while read line; do - if [[ $line != "${PODS_ROOT}*" ]]; then - XCASSET_FILES+=("$line") - fi - done <<<"$OTHER_XCASSETS" - - if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - else - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" - fi -fi diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-umbrella.h b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-umbrella.h deleted file mode 100644 index c051bc05..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double Pods_WebimClientLibrary_TestsVersionNumber; -FOUNDATION_EXPORT const unsigned char Pods_WebimClientLibrary_TestsVersionString[]; - diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests.debug.xcconfig b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests.debug.xcconfig deleted file mode 100644 index ba0c3f8f..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests.debug.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Cosmos" "${PODS_CONFIGURATION_BUILD_DIR}/PopupDialog" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_CONFIGURATION_BUILD_DIR}/SlackTextViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/WebimClientLibrary" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Cosmos/Cosmos.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/PopupDialog/PopupDialog.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SlackTextViewController/SlackTextViewController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/WebimClientLibrary/WebimClientLibrary.framework/Headers" -OTHER_LDFLAGS = $(inherited) -l"c++" -l"z" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests.modulemap b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests.modulemap deleted file mode 100644 index 0dff6cb6..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pods_WebimClientLibrary_Tests { - umbrella header "Pods-WebimClientLibrary_Tests-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests.release.xcconfig b/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests.release.xcconfig deleted file mode 100644 index ba0c3f8f..00000000 --- a/Example/Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests.release.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Cosmos" "${PODS_CONFIGURATION_BUILD_DIR}/PopupDialog" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_CONFIGURATION_BUILD_DIR}/SlackTextViewController" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/WebimClientLibrary" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Cosmos/Cosmos.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/PopupDialog/PopupDialog.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SlackTextViewController/SlackTextViewController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/WebimClientLibrary/WebimClientLibrary.framework/Headers" -OTHER_LDFLAGS = $(inherited) -l"c++" -l"z" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods diff --git a/Example/Pods/Target Support Files/PopupDialog/Info.plist b/Example/Pods/Target Support Files/PopupDialog/Info.plist deleted file mode 100644 index 5c31b756..00000000 --- a/Example/Pods/Target Support Files/PopupDialog/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.6.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/PopupDialog/PopupDialog-dummy.m b/Example/Pods/Target Support Files/PopupDialog/PopupDialog-dummy.m deleted file mode 100644 index 47365c26..00000000 --- a/Example/Pods/Target Support Files/PopupDialog/PopupDialog-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_PopupDialog : NSObject -@end -@implementation PodsDummy_PopupDialog -@end diff --git a/Example/Pods/Target Support Files/PopupDialog/PopupDialog-prefix.pch b/Example/Pods/Target Support Files/PopupDialog/PopupDialog-prefix.pch deleted file mode 100644 index beb2a244..00000000 --- a/Example/Pods/Target Support Files/PopupDialog/PopupDialog-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Example/Pods/Target Support Files/PopupDialog/PopupDialog-umbrella.h b/Example/Pods/Target Support Files/PopupDialog/PopupDialog-umbrella.h deleted file mode 100644 index 2c719e7b..00000000 --- a/Example/Pods/Target Support Files/PopupDialog/PopupDialog-umbrella.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "FXBlurView.h" - -FOUNDATION_EXPORT double PopupDialogVersionNumber; -FOUNDATION_EXPORT const unsigned char PopupDialogVersionString[]; - diff --git a/Example/Pods/Target Support Files/PopupDialog/PopupDialog.modulemap b/Example/Pods/Target Support Files/PopupDialog/PopupDialog.modulemap deleted file mode 100644 index 07041a2e..00000000 --- a/Example/Pods/Target Support Files/PopupDialog/PopupDialog.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module PopupDialog { - umbrella header "PopupDialog-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/PopupDialog/PopupDialog.xcconfig b/Example/Pods/Target Support Files/PopupDialog/PopupDialog.xcconfig deleted file mode 100644 index c250533e..00000000 --- a/Example/Pods/Target Support Files/PopupDialog/PopupDialog.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/PopupDialog -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/PopupDialog -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Example/Pods/Target Support Files/SQLite.swift/Info.plist b/Example/Pods/Target Support Files/SQLite.swift/Info.plist deleted file mode 100644 index 3a8c9bc4..00000000 --- a/Example/Pods/Target Support Files/SQLite.swift/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.11.5 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/SQLite.swift/SQLite.swift-dummy.m b/Example/Pods/Target Support Files/SQLite.swift/SQLite.swift-dummy.m deleted file mode 100644 index bc09ade8..00000000 --- a/Example/Pods/Target Support Files/SQLite.swift/SQLite.swift-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_SQLite_swift : NSObject -@end -@implementation PodsDummy_SQLite_swift -@end diff --git a/Example/Pods/Target Support Files/SQLite.swift/SQLite.swift-prefix.pch b/Example/Pods/Target Support Files/SQLite.swift/SQLite.swift-prefix.pch deleted file mode 100644 index beb2a244..00000000 --- a/Example/Pods/Target Support Files/SQLite.swift/SQLite.swift-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Example/Pods/Target Support Files/SQLite.swift/SQLite.swift-umbrella.h b/Example/Pods/Target Support Files/SQLite.swift/SQLite.swift-umbrella.h deleted file mode 100644 index 3052d2cf..00000000 --- a/Example/Pods/Target Support Files/SQLite.swift/SQLite.swift-umbrella.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "SQLite.h" -#import "SQLite-Bridging.h" - -FOUNDATION_EXPORT double SQLiteVersionNumber; -FOUNDATION_EXPORT const unsigned char SQLiteVersionString[]; - diff --git a/Example/Pods/Target Support Files/SQLite.swift/SQLite.swift.modulemap b/Example/Pods/Target Support Files/SQLite.swift/SQLite.swift.modulemap deleted file mode 100644 index e835c30d..00000000 --- a/Example/Pods/Target Support Files/SQLite.swift/SQLite.swift.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module SQLite { - umbrella header "SQLite.swift-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/SQLite.swift/SQLite.swift.xcconfig b/Example/Pods/Target Support Files/SQLite.swift/SQLite.swift.xcconfig deleted file mode 100644 index dffa70cf..00000000 --- a/Example/Pods/Target Support Files/SQLite.swift/SQLite.swift.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -l"sqlite3" -OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SQLite.swift -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -SWIFT_VERSION = 4.1 diff --git a/Example/Pods/Target Support Files/SlackTextViewController/Info.plist b/Example/Pods/Target Support Files/SlackTextViewController/Info.plist deleted file mode 100644 index 98beab1c..00000000 --- a/Example/Pods/Target Support Files/SlackTextViewController/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.9.6 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/SlackTextViewController/SlackTextViewController-dummy.m b/Example/Pods/Target Support Files/SlackTextViewController/SlackTextViewController-dummy.m deleted file mode 100644 index 0870b7ac..00000000 --- a/Example/Pods/Target Support Files/SlackTextViewController/SlackTextViewController-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_SlackTextViewController : NSObject -@end -@implementation PodsDummy_SlackTextViewController -@end diff --git a/Example/Pods/Target Support Files/SlackTextViewController/SlackTextViewController-prefix.pch b/Example/Pods/Target Support Files/SlackTextViewController/SlackTextViewController-prefix.pch deleted file mode 100644 index beb2a244..00000000 --- a/Example/Pods/Target Support Files/SlackTextViewController/SlackTextViewController-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Example/Pods/Target Support Files/SlackTextViewController/SlackTextViewController-umbrella.h b/Example/Pods/Target Support Files/SlackTextViewController/SlackTextViewController-umbrella.h deleted file mode 100644 index 74f65243..00000000 --- a/Example/Pods/Target Support Files/SlackTextViewController/SlackTextViewController-umbrella.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "SLKInputAccessoryView.h" -#import "SLKTextInput.h" -#import "SLKTextInputbar.h" -#import "SLKTextView+SLKAdditions.h" -#import "SLKTextView.h" -#import "SLKTextViewController.h" -#import "SLKTypingIndicatorProtocol.h" -#import "SLKTypingIndicatorView.h" -#import "SLKUIConstants.h" -#import "UIResponder+SLKAdditions.h" -#import "UIScrollView+SLKAdditions.h" -#import "UIView+SLKAdditions.h" - -FOUNDATION_EXPORT double SlackTextViewControllerVersionNumber; -FOUNDATION_EXPORT const unsigned char SlackTextViewControllerVersionString[]; - diff --git a/Example/Pods/Target Support Files/SlackTextViewController/SlackTextViewController.modulemap b/Example/Pods/Target Support Files/SlackTextViewController/SlackTextViewController.modulemap deleted file mode 100644 index 490433c8..00000000 --- a/Example/Pods/Target Support Files/SlackTextViewController/SlackTextViewController.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module SlackTextViewController { - umbrella header "SlackTextViewController-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/SlackTextViewController/SlackTextViewController.xcconfig b/Example/Pods/Target Support Files/SlackTextViewController/SlackTextViewController.xcconfig deleted file mode 100644 index 63ce76b5..00000000 --- a/Example/Pods/Target Support Files/SlackTextViewController/SlackTextViewController.xcconfig +++ /dev/null @@ -1,8 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SlackTextViewController -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SlackTextViewController -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Example/Pods/Target Support Files/SnapKit/Info.plist b/Example/Pods/Target Support Files/SnapKit/Info.plist deleted file mode 100644 index 3424ca66..00000000 --- a/Example/Pods/Target Support Files/SnapKit/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 4.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/SnapKit/SnapKit-dummy.m b/Example/Pods/Target Support Files/SnapKit/SnapKit-dummy.m deleted file mode 100644 index b44e8e58..00000000 --- a/Example/Pods/Target Support Files/SnapKit/SnapKit-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_SnapKit : NSObject -@end -@implementation PodsDummy_SnapKit -@end diff --git a/Example/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch b/Example/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch deleted file mode 100644 index beb2a244..00000000 --- a/Example/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Example/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h b/Example/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h deleted file mode 100644 index 1b1be641..00000000 --- a/Example/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double SnapKitVersionNumber; -FOUNDATION_EXPORT const unsigned char SnapKitVersionString[]; - diff --git a/Example/Pods/Target Support Files/SnapKit/SnapKit.modulemap b/Example/Pods/Target Support Files/SnapKit/SnapKit.modulemap deleted file mode 100644 index 4b3e47b2..00000000 --- a/Example/Pods/Target Support Files/SnapKit/SnapKit.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module SnapKit { - umbrella header "SnapKit-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/SnapKit/SnapKit.xcconfig b/Example/Pods/Target Support Files/SnapKit/SnapKit.xcconfig deleted file mode 100644 index 24e068f5..00000000 --- a/Example/Pods/Target Support Files/SnapKit/SnapKit.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Example/Pods/Target Support Files/WebimClientLibrary/Info.plist b/Example/Pods/Target Support Files/WebimClientLibrary/Info.plist deleted file mode 100644 index 0798af2c..00000000 --- a/Example/Pods/Target Support Files/WebimClientLibrary/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.22.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/WebimClientLibrary/WebimClientLibrary-dummy.m b/Example/Pods/Target Support Files/WebimClientLibrary/WebimClientLibrary-dummy.m deleted file mode 100644 index 0ad60afe..00000000 --- a/Example/Pods/Target Support Files/WebimClientLibrary/WebimClientLibrary-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_WebimClientLibrary : NSObject -@end -@implementation PodsDummy_WebimClientLibrary -@end diff --git a/Example/Pods/Target Support Files/WebimClientLibrary/WebimClientLibrary-prefix.pch b/Example/Pods/Target Support Files/WebimClientLibrary/WebimClientLibrary-prefix.pch deleted file mode 100644 index beb2a244..00000000 --- a/Example/Pods/Target Support Files/WebimClientLibrary/WebimClientLibrary-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Example/Pods/Target Support Files/WebimClientLibrary/WebimClientLibrary-umbrella.h b/Example/Pods/Target Support Files/WebimClientLibrary/WebimClientLibrary-umbrella.h deleted file mode 100644 index 03bed24a..00000000 --- a/Example/Pods/Target Support Files/WebimClientLibrary/WebimClientLibrary-umbrella.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "WebimClientLibrary.h" - -FOUNDATION_EXPORT double WebimClientLibraryVersionNumber; -FOUNDATION_EXPORT const unsigned char WebimClientLibraryVersionString[]; - diff --git a/Example/Pods/Target Support Files/WebimClientLibrary/WebimClientLibrary.modulemap b/Example/Pods/Target Support Files/WebimClientLibrary/WebimClientLibrary.modulemap deleted file mode 100644 index 73008861..00000000 --- a/Example/Pods/Target Support Files/WebimClientLibrary/WebimClientLibrary.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module WebimClientLibrary { - umbrella header "WebimClientLibrary-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/WebimClientLibrary/WebimClientLibrary.xcconfig b/Example/Pods/Target Support Files/WebimClientLibrary/WebimClientLibrary.xcconfig deleted file mode 100644 index eacc22b8..00000000 --- a/Example/Pods/Target Support Files/WebimClientLibrary/WebimClientLibrary.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/WebimClientLibrary -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "Foundation" -OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Example/WebimClientLibrary.xcodeproj/project.pbxproj b/Example/WebimClientLibrary.xcodeproj/project.pbxproj index bc78e626..42008b8b 100644 --- a/Example/WebimClientLibrary.xcodeproj/project.pbxproj +++ b/Example/WebimClientLibrary.xcodeproj/project.pbxproj @@ -13,8 +13,6 @@ 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 607FACEC1AFB9204008FA782 /* MessageHolderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* MessageHolderTests.swift */; }; - 7AC8771ADBD56B8F2687508D /* Pods_WebimClientLibrary_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1DEDBB9CEE032504FE2C625 /* Pods_WebimClientLibrary_Tests.framework */; }; - 7EFD66A46B75AB0CACF8C5E8 /* Pods_WebimClientLibrary_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB383A7D1DCA2BCF5D9CC021 /* Pods_WebimClientLibrary_Example.framework */; }; CE07E9952049794C00E0A0D3 /* SessionBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE07E993204972C600E0A0D3 /* SessionBuilderTests.swift */; }; CE0CD75A202338FD00719DBE /* HistoryIDTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE0CD758202338EE00719DBE /* HistoryIDTests.swift */; }; CE0CD75D20234BD800719DBE /* SessionDestroyerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE0CD75B20234BD500719DBE /* SessionDestroyerTests.swift */; }; @@ -97,8 +95,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 1C9EE3CC357A2601B6B46B48 /* Pods-WebimClientLibrary_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WebimClientLibrary_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests.release.xcconfig"; sourceTree = ""; }; - 4B9885678925C815E999C850 /* Pods-WebimClientLibrary_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WebimClientLibrary_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example.release.xcconfig"; sourceTree = ""; }; 607FACD01AFB9204008FA782 /* WebimClientLibrary_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WebimClientLibrary_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -109,11 +105,7 @@ 607FACE51AFB9204008FA782 /* WebimClientLibrary_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WebimClientLibrary_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 607FACEB1AFB9204008FA782 /* MessageHolderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageHolderTests.swift; sourceTree = ""; }; - 64CA62797768201B3FC88CB2 /* Pods-WebimClientLibrary_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WebimClientLibrary_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-WebimClientLibrary_Tests/Pods-WebimClientLibrary_Tests.debug.xcconfig"; sourceTree = ""; }; - 9CC9BEBFE5B17489F997BAD5 /* Pods-WebimClientLibrary_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WebimClientLibrary_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-WebimClientLibrary_Example/Pods-WebimClientLibrary_Example.debug.xcconfig"; sourceTree = ""; }; AB52E1C1E0F009A386DC1C6C /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; - B1DEDBB9CEE032504FE2C625 /* Pods_WebimClientLibrary_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_WebimClientLibrary_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BB383A7D1DCA2BCF5D9CC021 /* Pods_WebimClientLibrary_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_WebimClientLibrary_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C4CD65CA48F80B5A4AD826B3 /* WebimClientLibrary.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = WebimClientLibrary.podspec; path = ../WebimClientLibrary.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; CE07E993204972C600E0A0D3 /* SessionBuilderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionBuilderTests.swift; sourceTree = ""; }; CE0AD26F1F96477500EA9148 /* WebimClientLibrary_Example.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = WebimClientLibrary_Example.entitlements; sourceTree = ""; }; @@ -208,7 +200,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7EFD66A46B75AB0CACF8C5E8 /* Pods_WebimClientLibrary_Example.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -216,7 +207,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AC8771ADBD56B8F2687508D /* Pods_WebimClientLibrary_Tests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -232,8 +222,6 @@ 607FACD21AFB9204008FA782 /* Example for WebimClientLibrary */, 607FACE81AFB9204008FA782 /* Tests */, 607FACD11AFB9204008FA782 /* Products */, - 8748DD32AC71DEE9A28E52A0 /* Pods */, - 8DD470AC5F8E155D207105C6 /* Frameworks */, ); sourceTree = ""; }; @@ -351,26 +339,6 @@ name = "Podspec Metadata"; sourceTree = ""; }; - 8748DD32AC71DEE9A28E52A0 /* Pods */ = { - isa = PBXGroup; - children = ( - 9CC9BEBFE5B17489F997BAD5 /* Pods-WebimClientLibrary_Example.debug.xcconfig */, - 4B9885678925C815E999C850 /* Pods-WebimClientLibrary_Example.release.xcconfig */, - 64CA62797768201B3FC88CB2 /* Pods-WebimClientLibrary_Tests.debug.xcconfig */, - 1C9EE3CC357A2601B6B46B48 /* Pods-WebimClientLibrary_Tests.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; - 8DD470AC5F8E155D207105C6 /* Frameworks */ = { - isa = PBXGroup; - children = ( - BB383A7D1DCA2BCF5D9CC021 /* Pods_WebimClientLibrary_Example.framework */, - B1DEDBB9CEE032504FE2C625 /* Pods_WebimClientLibrary_Tests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; CE24A015203ADC2D009EE7E7 /* Images */ = { isa = PBXGroup; children = ( @@ -475,7 +443,6 @@ isa = PBXNativeTarget; buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "WebimClientLibrary_Example" */; buildPhases = ( - BB203665164CEE6B1814FD79 /* [CP] Check Pods Manifest.lock */, 8CC584B88D331C1B48D729CB /* [Amimono] Create filelist per architecture */, 607FACCC1AFB9204008FA782 /* Sources */, 607FACCD1AFB9204008FA782 /* Frameworks */, @@ -495,7 +462,6 @@ isa = PBXNativeTarget; buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "WebimClientLibrary_Tests" */; buildPhases = ( - 0E5075168E03BB89E6DD1E86 /* [CP] Check Pods Manifest.lock */, 607FACE11AFB9204008FA782 /* Sources */, 607FACE21AFB9204008FA782 /* Frameworks */, 607FACE31AFB9204008FA782 /* Resources */, @@ -581,24 +547,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0E5075168E03BB89E6DD1E86 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-WebimClientLibrary_Tests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 8CC584B88D331C1B48D729CB /* [Amimono] Create filelist per architecture */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -613,24 +561,6 @@ shellPath = /bin/bash; shellScript = "declare -a DEPENDENCIES=('Cosmos' 'PopupDialog' 'SQLite.swift' 'SlackTextViewController' 'SnapKit' 'WebimClientLibrary');\nIFS=\" \" read -r -a SPLIT <<< \"$ARCHS\"\nfor ARCH in \"${SPLIT[@]}\"; do\n cd \"$OBJROOT/Pods.build\"\n filelist=\"\"\n for dependency in \"${DEPENDENCIES[@]}\"; do\n path=\"${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}/${dependency}.build/Objects-normal/${ARCH}\"\n if [ -d \"$path\" ]; then\n search_path=\"$path/*.o\"\n for obj_file in $search_path; do\n filelist+=\"${OBJROOT}/Pods.build/${obj_file}\"\n filelist+=$'\\n'\n done\n fi\n done\n filelist=${filelist%$'\\n'}\n echo \"$filelist\" > \"${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}-${TARGET_NAME}-${ARCH}.objects.filelist\"\ndone\n"; }; - BB203665164CEE6B1814FD79 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-WebimClientLibrary_Example-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; CE86FAB4203C3E6700CB9C2D /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -885,7 +815,6 @@ }; 607FACF01AFB9204008FA782 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9CC9BEBFE5B17489F997BAD5 /* Pods-WebimClientLibrary_Example.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = WebimClientLibrary_Example.entitlements; @@ -909,7 +838,6 @@ }; 607FACF11AFB9204008FA782 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4B9885678925C815E999C850 /* Pods-WebimClientLibrary_Example.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = WebimClientLibrary_Example.entitlements; @@ -932,7 +860,6 @@ }; 607FACF31AFB9204008FA782 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 64CA62797768201B3FC88CB2 /* Pods-WebimClientLibrary_Tests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -954,7 +881,6 @@ }; 607FACF41AFB9204008FA782 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1C9EE3CC357A2601B6B46B48 /* Pods-WebimClientLibrary_Tests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; DEVELOPMENT_TEAM = ""; diff --git a/Info.plist b/Info.plist index 972dea02..248b2a5c 100644 --- a/Info.plist +++ b/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.22.1 + 3.22.2 CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass diff --git a/README.md b/README.md index 7642672d..453eb49f 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ This library provides [_Webim SDK_ for _iOS_](https://webim.ru/integration/mobil Add following line for your target in your **Podfile**: ``` -pod 'WebimClientLibrary', :git => 'https://github.com/webim/webim-client-sdk-ios.git', :branch => 'master', :tag => '3.22.1' +pod 'WebimClientLibrary', :git => 'https://github.com/webim/webim-client-sdk-ios.git', :branch => 'master', :tag => '3.22.2' ``` `use_frameworks!` must be specified. @@ -24,7 +24,7 @@ pod 'WebimClientLibrary', :git => 'https://github.com/webim/webim-client-sdk-ios Add following line to your **Cartfile**: ``` -github "webim/webim-client-sdk-ios" ~> 3.22.1 +github "webim/webim-client-sdk-ios" ~> 3.22.2 ``` ### Additional notes @@ -38,7 +38,7 @@ Trying to integrate _WebimClientLibrary_ into your _Objective-C_ code? Try out o Previous _Objective-C_ version (version numbers 2.x.x) can be reached from **version2** branch. ## Release notes -* Session initialization fixed. +* Project build with Carthage fixed. ## Example diff --git a/WebimClientLibrary.podspec b/WebimClientLibrary.podspec index c1c675ba..57b92889 100644 --- a/WebimClientLibrary.podspec +++ b/WebimClientLibrary.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = 'WebimClientLibrary' - s.version = '3.22.1' + s.version = '3.22.2' s.author = { 'Webim.ru Ltd.' => 'n.lazarev-zubov@webim.ru' } s.homepage = 'https://webim.ru/integration/mobile-sdk/ios-sdk-howto/'