@@ -0,0 +1,11 @@ | |||
# Uncomment the next line to define a global platform for your project | |||
# platform :ios, '9.0' | |||
target 'wyy' do | |||
# Comment the next line if you don't want to use dynamic frameworks | |||
use_frameworks! | |||
# Pods for wyy | |||
pod 'SnapKit' | |||
end |
@@ -0,0 +1,16 @@ | |||
PODS: | |||
- SnapKit (5.0.1) | |||
DEPENDENCIES: | |||
- SnapKit | |||
SPEC REPOS: | |||
trunk: | |||
- SnapKit | |||
SPEC CHECKSUMS: | |||
SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb | |||
PODFILE CHECKSUM: af218112a6b3daa0109d978d4b15b6dd4aaf745d | |||
COCOAPODS: 1.10.0 |
@@ -0,0 +1,16 @@ | |||
PODS: | |||
- SnapKit (5.0.1) | |||
DEPENDENCIES: | |||
- SnapKit | |||
SPEC REPOS: | |||
trunk: | |||
- SnapKit | |||
SPEC CHECKSUMS: | |||
SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb | |||
PODFILE CHECKSUM: af218112a6b3daa0109d978d4b15b6dd4aaf745d | |||
COCOAPODS: 1.10.0 |
@@ -0,0 +1,19 @@ | |||
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. |
@@ -0,0 +1,136 @@ | |||
<img src="http://snapkit.io/images/banner.jpg" alt="" /> | |||
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 4.x please ensure you are using >= 4.0.0** ⚠️ | |||
#### ⚠️ **To use with Swift 5.x please ensure you are using >= 5.0.0** ⚠️ | |||
## Contents | |||
- [Requirements](#requirements) | |||
- [Migration Guides](#migration-guides) | |||
- [Communication](#communication) | |||
- [Installation](#installation) | |||
- [Usage](#usage) | |||
- [Credits](#credits) | |||
- [License](#license) | |||
## Requirements | |||
- iOS 10.0+ / Mac OS X 10.12+ / tvOS 10.0+ | |||
- Xcode 10.0+ | |||
- Swift 4.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 '<Your Target Name>' do | |||
pod 'SnapKit', '~> 5.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" ~> 5.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) | |||
} | |||
} | |||
} | |||
``` | |||
### Playground | |||
You can try SnapKit in Playground. | |||
**Note:** | |||
> To try SnapKit in playground, open `SnapKit.xcworkspace` and build SnapKit.framework for any simulator first. | |||
### 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. |
@@ -0,0 +1,341 @@ | |||
// | |||
// 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 { | |||
set { | |||
if newValue { | |||
activate() | |||
} | |||
else { | |||
deactivate() | |||
} | |||
} | |||
get { | |||
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 == .directionalEdges && self.to.attributes == .directionalMargins { | |||
switch layoutFromAttribute { | |||
case .leading: | |||
layoutToAttribute = .leadingMargin | |||
case .trailing: | |||
layoutToAttribute = .trailingMargin | |||
case .top: | |||
layoutToAttribute = .topMargin | |||
case .bottom: | |||
layoutToAttribute = .bottomMargin | |||
default: | |||
fatalError() | |||
} | |||
} else if self.from.attributes == .directionalMargins && self.to.attributes == .directionalEdges { | |||
switch layoutFromAttribute { | |||
case .leadingMargin: | |||
layoutToAttribute = .leading | |||
case .trailingMargin: | |||
layoutToAttribute = .trailing | |||
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, message:"Use activate().") | |||
public func install() { | |||
self.activate() | |||
} | |||
@available(*, deprecated, 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 | |||
} | |||
#if os(iOS) || os(tvOS) | |||
@discardableResult | |||
@available(iOS 11.0, tvOS 11.0, *) | |||
public func update(inset: ConstraintDirectionalInsetTarget) -> Constraint { | |||
self.constant = inset.constraintDirectionalInsetTargetValue | |||
return self | |||
} | |||
#endif | |||
@discardableResult | |||
public func update(priority: ConstraintPriorityTarget) -> Constraint { | |||
self.priority = priority.constraintPriorityTargetValue | |||
return self | |||
} | |||
@discardableResult | |||
public func update(priority: ConstraintPriority) -> Constraint { | |||
self.priority = priority.value | |||
return self | |||
} | |||
@available(*, deprecated, message:"Use update(offset: ConstraintOffsetTarget) instead.") | |||
public func updateOffset(amount: ConstraintOffsetTarget) -> Void { self.update(offset: amount) } | |||
@available(*, deprecated, message:"Use update(inset: ConstraintInsetTarget) instead.") | |||
public func updateInsets(amount: ConstraintInsetTarget) -> Void { self.update(inset: amount) } | |||
@available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") | |||
public func updatePriority(amount: ConstraintPriorityTarget) -> Void { self.update(priority: amount) } | |||
@available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") | |||
public func updatePriorityRequired() -> Void {} | |||
@available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") | |||
public func updatePriorityHigh() -> Void { fatalError("Must be implemented by Concrete subclass.") } | |||
@available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") | |||
public func updatePriorityMedium() -> Void { fatalError("Must be implemented by Concrete subclass.") } | |||
@available(*, deprecated, 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]) | |||
} | |||
} |
@@ -0,0 +1,199 @@ | |||
// | |||
// 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, ExpressibleByIntegerLiteral { | |||
typealias IntegerLiteralType = UInt | |||
internal init(rawValue: UInt) { | |||
self.rawValue = rawValue | |||
} | |||
internal init(_ rawValue: UInt) { | |||
self.init(rawValue: rawValue) | |||
} | |||
internal init(nilLiteral: ()) { | |||
self.rawValue = 0 | |||
} | |||
internal init(integerLiteral rawValue: IntegerLiteralType) { | |||
self.init(rawValue: rawValue) | |||
} | |||
internal private(set) var rawValue: UInt | |||
internal static var allZeros: ConstraintAttributes { return 0 } | |||
internal static func convertFromNilLiteral() -> ConstraintAttributes { return 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 0 } | |||
internal static var left: ConstraintAttributes { return 1 } | |||
internal static var top: ConstraintAttributes { return 2 } | |||
internal static var right: ConstraintAttributes { return 4 } | |||
internal static var bottom: ConstraintAttributes { return 8 } | |||
internal static var leading: ConstraintAttributes { return 16 } | |||
internal static var trailing: ConstraintAttributes { return 32 } | |||
internal static var width: ConstraintAttributes { return 64 } | |||
internal static var height: ConstraintAttributes { return 128 } | |||
internal static var centerX: ConstraintAttributes { return 256 } | |||
internal static var centerY: ConstraintAttributes { return 512 } | |||
internal static var lastBaseline: ConstraintAttributes { return 1024 } | |||
@available(iOS 8.0, OSX 10.11, *) | |||
internal static var firstBaseline: ConstraintAttributes { return 2048 } | |||
@available(iOS 8.0, *) | |||
internal static var leftMargin: ConstraintAttributes { return 4096 } | |||
@available(iOS 8.0, *) | |||
internal static var rightMargin: ConstraintAttributes { return 8192 } | |||
@available(iOS 8.0, *) | |||
internal static var topMargin: ConstraintAttributes { return 16384 } | |||
@available(iOS 8.0, *) | |||
internal static var bottomMargin: ConstraintAttributes { return 32768 } | |||
@available(iOS 8.0, *) | |||
internal static var leadingMargin: ConstraintAttributes { return 65536 } | |||
@available(iOS 8.0, *) | |||
internal static var trailingMargin: ConstraintAttributes { return 131072 } | |||
@available(iOS 8.0, *) | |||
internal static var centerXWithinMargins: ConstraintAttributes { return 262144 } | |||
@available(iOS 8.0, *) | |||
internal static var centerYWithinMargins: ConstraintAttributes { return 524288 } | |||
// aggregates | |||
internal static var edges: ConstraintAttributes { return 15 } | |||
internal static var directionalEdges: ConstraintAttributes { return 58 } | |||
internal static var size: ConstraintAttributes { return 192 } | |||
internal static var center: ConstraintAttributes { return 768 } | |||
@available(iOS 8.0, *) | |||
internal static var margins: ConstraintAttributes { return 61440 } | |||
@available(iOS 8.0, *) | |||
internal static var directionalMargins: ConstraintAttributes { return 245760 } | |||
@available(iOS 8.0, *) | |||
internal static var centerWithinMargins: ConstraintAttributes { return 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 | |||
} |
@@ -0,0 +1,37 @@ | |||
// | |||
// 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 | |||
} |
@@ -0,0 +1,213 @@ | |||
// | |||
// 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 { | |||
} | |||
#if os(iOS) || os(tvOS) | |||
@available(iOS 11.0, tvOS 11.0, *) | |||
extension ConstraintDirectionalInsets: ConstraintConstantTarget { | |||
} | |||
#endif | |||
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 | |||
#if swift(>=5.0) | |||
@unknown default: | |||
return 0.0 | |||
#endif | |||
} | |||
#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 | |||
#if swift(>=5.0) | |||
@unknown default: | |||
return 0.0 | |||
#endif | |||
} | |||
#endif | |||
} | |||
if let value = self as? ConstraintInsets { | |||
#if os(iOS) || os(tvOS) | |||
switch layoutAttribute { | |||
case .left, .leftMargin: | |||
return value.left | |||
case .top, .topMargin, .firstBaseline: | |||
return value.top | |||
case .right, .rightMargin: | |||
return -value.right | |||
case .bottom, .bottomMargin, .lastBaseline: | |||
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 .centerX, .centerXWithinMargins: | |||
return (value.left - value.right) / 2 | |||
case .centerY, .centerYWithinMargins: | |||
return (value.top - value.bottom) / 2 | |||
case .width: | |||
return -(value.left + value.right) | |||
case .height: | |||
return -(value.top + value.bottom) | |||
case .notAnAttribute: | |||
return 0.0 | |||
#if swift(>=5.0) | |||
@unknown default: | |||
return 0.0 | |||
#endif | |||
} | |||
#else | |||
switch layoutAttribute { | |||
case .left: | |||
return value.left | |||
case .top, .firstBaseline: | |||
return value.top | |||
case .right: | |||
return -value.right | |||
case .bottom, .lastBaseline: | |||
return -value.bottom | |||
case .leading: | |||
return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right | |||
case .trailing: | |||
return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left | |||
case .centerX: | |||
return (value.left - value.right) / 2 | |||
case .centerY: | |||
return (value.top - value.bottom) / 2 | |||
case .width: | |||
return -(value.left + value.right) | |||
case .height: | |||
return -(value.top + value.bottom) | |||
case .notAnAttribute: | |||
return 0.0 | |||
#if swift(>=5.0) | |||
@unknown default: | |||
return 0.0 | |||
#endif | |||
} | |||
#endif | |||
} | |||
#if os(iOS) || os(tvOS) | |||
if #available(iOS 11.0, tvOS 11.0, *), let value = self as? ConstraintDirectionalInsets { | |||
switch layoutAttribute { | |||
case .left, .leftMargin: | |||
return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.leading : value.trailing | |||
case .top, .topMargin, .firstBaseline: | |||
return value.top | |||
case .right, .rightMargin: | |||
return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.trailing : -value.leading | |||
case .bottom, .bottomMargin, .lastBaseline: | |||
return -value.bottom | |||
case .leading, .leadingMargin: | |||
return value.leading | |||
case .trailing, .trailingMargin: | |||
return -value.trailing | |||
case .centerX, .centerXWithinMargins: | |||
return (value.leading - value.trailing) / 2 | |||
case .centerY, .centerYWithinMargins: | |||
return (value.top - value.bottom) / 2 | |||
case .width: | |||
return -(value.leading + value.trailing) | |||
case .height: | |||
return -(value.top + value.bottom) | |||
case .notAnAttribute: | |||
return 0.0 | |||
#if swift(>=5.0) | |||
@unknown default: | |||
return 0.0 | |||
#else | |||
default: | |||
return 0.0 | |||
#endif | |||
} | |||
} | |||
#endif | |||
return 0.0 | |||
} | |||
} |
@@ -0,0 +1,194 @@ | |||
// | |||
// 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 directionalEdges: ConstraintItem { | |||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalEdges) | |||
} | |||
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, 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 directionalMargins: ConstraintItem { | |||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalMargins) | |||
} | |||
@available(iOS 8.0, *) | |||
public var centerWithinMargins: ConstraintItem { | |||
return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerWithinMargins) | |||
} | |||
} |
@@ -0,0 +1,69 @@ | |||
// | |||
// 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 | |||
} | |||
} |
@@ -0,0 +1,49 @@ | |||
// | |||
// 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 protocol ConstraintDirectionalInsetTarget: ConstraintConstantTarget { | |||
} | |||
@available(iOS 11.0, tvOS 11.0, *) | |||
extension ConstraintDirectionalInsets: ConstraintDirectionalInsetTarget { | |||
} | |||
extension ConstraintDirectionalInsetTarget { | |||
@available(iOS 11.0, tvOS 11.0, *) | |||
internal var constraintDirectionalInsetTargetValue: ConstraintDirectionalInsets { | |||
if let amount = self as? ConstraintDirectionalInsets { | |||
return amount | |||
} else { | |||
return ConstraintDirectionalInsets(top: 0, leading: 0, bottom: 0, trailing: 0) | |||
} | |||
} | |||
} | |||
#endif |
@@ -0,0 +1,34 @@ | |||
// | |||
// 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 11.0, tvOS 11.0, *) | |||
public typealias ConstraintDirectionalInsets = NSDirectionalEdgeInsets | |||
#endif |
@@ -0,0 +1,72 @@ | |||
// | |||
// 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) | |||
} | |||
} | |||
} |
@@ -0,0 +1,35 @@ | |||
// | |||
// 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 |
@@ -0,0 +1,61 @@ | |||
// | |||
// 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 | |||
} |
@@ -0,0 +1,36 @@ | |||
// | |||
// 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 { | |||
var snp: ConstraintLayoutGuideDSL { | |||
return ConstraintLayoutGuideDSL(guide: self) | |||
} | |||
} |
@@ -0,0 +1,37 @@ | |||
// | |||
// 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 |
@@ -0,0 +1,66 @@ | |||
// | |||
// 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 | |||
} | |||
} |
@@ -0,0 +1,36 @@ | |||
// | |||
// 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 |
@@ -0,0 +1,56 @@ | |||
// | |||
// 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) | |||
} | |||
} |
@@ -0,0 +1,212 @@ | |||
// | |||
// 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, 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 directionalEdges: ConstraintMakerExtendable { | |||
return self.makeExtendableWithAttributes(.directionalEdges) | |||
} | |||
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 directionalMargins: ConstraintMakerExtendable { | |||
return self.makeExtendableWithAttributes(.directionalMargins) | |||
} | |||
@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 constraints = prepareConstraints(item: item, closure: closure) | |||
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 constraints = prepareConstraints(item: item, closure: closure) | |||
for constraint in constraints { | |||
constraint.activateIfNeeded(updatingExisting: true) | |||
} | |||
} | |||
internal static func removeConstraints(item: LayoutConstraintItem) { | |||
let constraints = item.constraints | |||
for constraint in constraints { | |||
constraint.deactivateIfNeeded() | |||
} | |||
} | |||
} |
@@ -0,0 +1,64 @@ | |||
// | |||
// 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 | |||
} | |||
#if os(iOS) || os(tvOS) | |||
@discardableResult | |||
@available(iOS 11.0, tvOS 11.0, *) | |||
public func inset(_ amount: ConstraintDirectionalInsetTarget) -> ConstraintMakerEditable { | |||
self.description.constant = amount.constraintDirectionalInsetTargetValue | |||
return self | |||
} | |||
#endif | |||
} |
@@ -0,0 +1,179 @@ | |||
// | |||
// 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, 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 directionalEdges: ConstraintMakerExtendable { | |||
self.description.attributes += .directionalEdges | |||
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 directionalMargins: ConstraintMakerExtendable { | |||
self.description.attributes += .directionalMargins | |||
return self | |||
} | |||
@available(iOS 8.0, *) | |||
public var centerWithinMargins: ConstraintMakerExtendable { | |||
self.description.attributes += .centerWithinMargins | |||
return self | |||
} | |||
} |
@@ -0,0 +1,49 @@ | |||
// | |||
// 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! | |||
} | |||
} |
@@ -0,0 +1,68 @@ | |||
// | |||
// 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, message:"Use priority(.required) instead.") | |||
@discardableResult | |||
public func priorityRequired() -> ConstraintMakerFinalizable { | |||
return self.priority(.required) | |||
} | |||
@available(*, deprecated, message:"Use priority(.high) instead.") | |||
@discardableResult | |||
public func priorityHigh() -> ConstraintMakerFinalizable { | |||
return self.priority(.high) | |||
} | |||
@available(*, deprecated, message:"Use priority(.medium) instead.") | |||
@discardableResult | |||
public func priorityMedium() -> ConstraintMakerFinalizable { | |||
return self.priority(.medium) | |||
} | |||
@available(*, deprecated, message:"Use priority(.low) instead.") | |||
@discardableResult | |||
public func priorityLow() -> ConstraintMakerFinalizable { | |||
return self.priority(.low) | |||
} | |||
} |
@@ -0,0 +1,115 @@ | |||
// | |||
// 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 || | |||
other.attributes == .directionalEdges && self.description.attributes == .directionalMargins || | |||
other.attributes == .directionalMargins && self.description.attributes == .directionalEdges 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) | |||
} | |||
} |
@@ -0,0 +1,75 @@ | |||
// | |||
// 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 | |||
} | |||
} |
@@ -0,0 +1,69 @@ | |||
// | |||
// 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 | |||
} | |||
} |
@@ -0,0 +1,77 @@ | |||
// | |||
// 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 | |||
} | |||
} |
@@ -0,0 +1,85 @@ | |||
// | |||
// 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) | |||
} | |||
} | |||
#if os(iOS) || os(tvOS) | |||
extension UILayoutPriority: ConstraintPriorityTarget { | |||
public var constraintPriorityTargetValue: Float { | |||
return self.rawValue | |||
} | |||
} | |||
#endif |
@@ -0,0 +1,72 @@ | |||
// | |||
// 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 { | |||
} | |||
#if os(iOS) || os(tvOS) | |||
@available(iOS 11.0, tvOS 11.0, *) | |||
extension ConstraintDirectionalInsets: ConstraintRelatableTarget { | |||
} | |||
#endif | |||
extension ConstraintItem: ConstraintRelatableTarget { | |||
} | |||
extension ConstraintView: ConstraintRelatableTarget { | |||
} | |||
@available(iOS 9.0, OSX 10.11, *) | |||
extension ConstraintLayoutGuide: ConstraintRelatableTarget { | |||
} |
@@ -0,0 +1,48 @@ | |||
// | |||
// 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 | |||
} | |||
} | |||
} | |||
} |
@@ -0,0 +1,152 @@ | |||
// | |||
// 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, message:"Use newer snp.* syntax.") | |||
var snp_left: ConstraintItem { return self.snp.left } | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
var snp_top: ConstraintItem { return self.snp.top } | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
var snp_right: ConstraintItem { return self.snp.right } | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
var snp_bottom: ConstraintItem { return self.snp.bottom } | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
var snp_leading: ConstraintItem { return self.snp.leading } | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
var snp_trailing: ConstraintItem { return self.snp.trailing } | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
var snp_width: ConstraintItem { return self.snp.width } | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
var snp_height: ConstraintItem { return self.snp.height } | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
var snp_centerX: ConstraintItem { return self.snp.centerX } | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
var snp_centerY: ConstraintItem { return self.snp.centerY } | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
var snp_baseline: ConstraintItem { return self.snp.baseline } | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
@available(iOS 8.0, OSX 10.11, *) | |||
var snp_lastBaseline: ConstraintItem { return self.snp.lastBaseline } | |||
@available(iOS, deprecated, message:"Use newer snp.* syntax.") | |||
@available(iOS 8.0, OSX 10.11, *) | |||
var snp_firstBaseline: ConstraintItem { return self.snp.firstBaseline } | |||
@available(iOS, deprecated, message:"Use newer snp.* syntax.") | |||
@available(iOS 8.0, *) | |||
var snp_leftMargin: ConstraintItem { return self.snp.leftMargin } | |||
@available(iOS, deprecated, message:"Use newer snp.* syntax.") | |||
@available(iOS 8.0, *) | |||
var snp_topMargin: ConstraintItem { return self.snp.topMargin } | |||
@available(iOS, deprecated, message:"Use newer snp.* syntax.") | |||
@available(iOS 8.0, *) | |||
var snp_rightMargin: ConstraintItem { return self.snp.rightMargin } | |||
@available(iOS, deprecated, message:"Use newer snp.* syntax.") | |||
@available(iOS 8.0, *) | |||
var snp_bottomMargin: ConstraintItem { return self.snp.bottomMargin } | |||
@available(iOS, deprecated, message:"Use newer snp.* syntax.") | |||
@available(iOS 8.0, *) | |||
var snp_leadingMargin: ConstraintItem { return self.snp.leadingMargin } | |||
@available(iOS, deprecated, message:"Use newer snp.* syntax.") | |||
@available(iOS 8.0, *) | |||
var snp_trailingMargin: ConstraintItem { return self.snp.trailingMargin } | |||
@available(iOS, deprecated, message:"Use newer snp.* syntax.") | |||
@available(iOS 8.0, *) | |||
var snp_centerXWithinMargins: ConstraintItem { return self.snp.centerXWithinMargins } | |||
@available(iOS, deprecated, message:"Use newer snp.* syntax.") | |||
@available(iOS 8.0, *) | |||
var snp_centerYWithinMargins: ConstraintItem { return self.snp.centerYWithinMargins } | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
var snp_edges: ConstraintItem { return self.snp.edges } | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
var snp_size: ConstraintItem { return self.snp.size } | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
var snp_center: ConstraintItem { return self.snp.center } | |||
@available(iOS, deprecated, message:"Use newer snp.* syntax.") | |||
@available(iOS 8.0, *) | |||
var snp_margins: ConstraintItem { return self.snp.margins } | |||
@available(iOS, deprecated, message:"Use newer snp.* syntax.") | |||
@available(iOS 8.0, *) | |||
var snp_centerWithinMargins: ConstraintItem { return self.snp.centerWithinMargins } | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
func snp_prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { | |||
return self.snp.prepareConstraints(closure) | |||
} | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
func snp_makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { | |||
self.snp.makeConstraints(closure) | |||
} | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
func snp_remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { | |||
self.snp.remakeConstraints(closure) | |||
} | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
func snp_updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { | |||
self.snp.updateConstraints(closure) | |||
} | |||
@available(*, deprecated, message:"Use newer snp.* syntax.") | |||
func snp_removeConstraints() { | |||
self.snp.removeConstraints() | |||
} | |||
var snp: ConstraintViewDSL { | |||
return ConstraintViewDSL(view: self) | |||
} | |||
} |
@@ -0,0 +1,35 @@ | |||
// | |||
// 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 |
@@ -0,0 +1,101 @@ | |||
// | |||
// 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 | |||
} | |||
nonmutating set { | |||
self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .horizontal) | |||
} | |||
} | |||
public var contentHuggingVerticalPriority: Float { | |||
get { | |||
return self.view.contentHuggingPriority(for: .vertical).rawValue | |||
} | |||
nonmutating set { | |||
self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .vertical) | |||
} | |||
} | |||
public var contentCompressionResistanceHorizontalPriority: Float { | |||
get { | |||
return self.view.contentCompressionResistancePriority(for: .horizontal).rawValue | |||
} | |||
nonmutating set { | |||
self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .horizontal) | |||
} | |||
} | |||
public var contentCompressionResistanceVerticalPriority: Float { | |||
get { | |||
return self.view.contentCompressionResistancePriority(for: .vertical).rawValue | |||
} | |||
nonmutating 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 | |||
} | |||
} |
@@ -0,0 +1,169 @@ | |||
// | |||
// 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 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 "<=" | |||
#if swift(>=5.0) | |||
@unknown default: return "unknown" | |||
#endif | |||
} | |||
} | |||
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" | |||
#if swift(>=5.0) | |||
@unknown default: return "unknown" | |||
#endif | |||
} | |||
#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" | |||
#if swift(>=5.0) | |||
@unknown default: return "unknown" | |||
#endif | |||
} | |||
#endif | |||
} | |||
private func conditionalOptional<T>(from object: Optional<T>) -> Optional<T> { | |||
return object | |||
} | |||
private func conditionalOptional<T>(from object: T) -> Optional<T> { | |||
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 | |||
} |
@@ -0,0 +1,61 @@ | |||
// | |||
// 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 { | |||
// If firstItem or secondItem on either constraint has a dangling pointer | |||
// this comparison can cause a crash. The solution for this is to ensure | |||
// your layout code hold strong references to things like Views, LayoutGuides | |||
// and LayoutAnchors as SnapKit will not keep strong references to any of these. | |||
guard lhs.firstAttribute == rhs.firstAttribute && | |||
lhs.secondAttribute == rhs.secondAttribute && | |||
lhs.relation == rhs.relation && | |||
lhs.priority == rhs.priority && | |||
lhs.multiplier == rhs.multiplier && | |||
lhs.secondItem === rhs.secondItem && | |||
lhs.firstItem === rhs.firstItem else { | |||
return false | |||
} | |||
return true | |||
} |
@@ -0,0 +1,93 @@ | |||
// | |||
// 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 |
@@ -0,0 +1,42 @@ | |||
// | |||
// 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 | |||
#if swift(>=4.2) | |||
typealias LayoutRelation = NSLayoutConstraint.Relation | |||
typealias LayoutAttribute = NSLayoutConstraint.Attribute | |||
#else | |||
typealias LayoutRelation = NSLayoutRelation | |||
typealias LayoutAttribute = NSLayoutAttribute | |||
#endif | |||
typealias LayoutPriority = UILayoutPriority | |||
#else | |||
import AppKit | |||
typealias LayoutRelation = NSLayoutConstraint.Relation | |||
typealias LayoutAttribute = NSLayoutConstraint.Attribute | |||
typealias LayoutPriority = NSLayoutConstraint.Priority | |||
#endif | |||
@@ -0,0 +1,36 @@ | |||
// | |||
// 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 { | |||
var snp: ConstraintLayoutSupportDSL { | |||
return ConstraintLayoutSupportDSL(support: self) | |||
} | |||
} |
@@ -0,0 +1,26 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>CFBundleDevelopmentRegion</key> | |||
<string>en</string> | |||
<key>CFBundleExecutable</key> | |||
<string>${EXECUTABLE_NAME}</string> | |||
<key>CFBundleIdentifier</key> | |||
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string> | |||
<key>CFBundleInfoDictionaryVersion</key> | |||
<string>6.0</string> | |||
<key>CFBundleName</key> | |||
<string>${PRODUCT_NAME}</string> | |||
<key>CFBundlePackageType</key> | |||
<string>FMWK</string> | |||
<key>CFBundleShortVersionString</key> | |||
<string>1.0.0</string> | |||
<key>CFBundleSignature</key> | |||
<string>????</string> | |||
<key>CFBundleVersion</key> | |||
<string>${CURRENT_PROJECT_VERSION}</string> | |||
<key>NSPrincipalClass</key> | |||
<string></string> | |||
</dict> | |||
</plist> |
@@ -0,0 +1,26 @@ | |||
# Acknowledgements | |||
This application makes use of the following third party libraries: | |||
## 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. | |||
Generated by CocoaPods - https://cocoapods.org |
@@ -0,0 +1,58 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>PreferenceSpecifiers</key> | |||
<array> | |||
<dict> | |||
<key>FooterText</key> | |||
<string>This application makes use of the following third party libraries:</string> | |||
<key>Title</key> | |||
<string>Acknowledgements</string> | |||
<key>Type</key> | |||
<string>PSGroupSpecifier</string> | |||
</dict> | |||
<dict> | |||
<key>FooterText</key> | |||
<string>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. | |||
</string> | |||
<key>License</key> | |||
<string>MIT</string> | |||
<key>Title</key> | |||
<string>SnapKit</string> | |||
<key>Type</key> | |||
<string>PSGroupSpecifier</string> | |||
</dict> | |||
<dict> | |||
<key>FooterText</key> | |||
<string>Generated by CocoaPods - https://cocoapods.org</string> | |||
<key>Title</key> | |||
<string></string> | |||
<key>Type</key> | |||
<string>PSGroupSpecifier</string> | |||
</dict> | |||
</array> | |||
<key>StringsTable</key> | |||
<string>Acknowledgements</string> | |||
<key>Title</key> | |||
<string>Acknowledgements</string> | |||
</dict> | |||
</plist> |
@@ -0,0 +1,5 @@ | |||
#import <Foundation/Foundation.h> | |||
@interface PodsDummy_Pods_wyy_wyyUITests : NSObject | |||
@end | |||
@implementation PodsDummy_Pods_wyy_wyyUITests | |||
@end |
@@ -0,0 +1,2 @@ | |||
${PODS_ROOT}/Target Support Files/Pods-wyy-wyyUITests/Pods-wyy-wyyUITests-frameworks.sh | |||
${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework |
@@ -0,0 +1 @@ | |||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework |
@@ -0,0 +1,2 @@ | |||
${PODS_ROOT}/Target Support Files/Pods-wyy-wyyUITests/Pods-wyy-wyyUITests-frameworks.sh | |||
${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework |
@@ -0,0 +1 @@ | |||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework |
@@ -0,0 +1,185 @@ | |||
#!/bin/sh | |||
set -e | |||
set -u | |||
set -o pipefail | |||
function on_error { | |||
echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" | |||
} | |||
trap 'on_error $LINENO' ERR | |||
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}" | |||
BCSYMBOLMAP_DIR="BCSymbolMaps" | |||
# 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 | |||
if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then | |||
# Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied | |||
find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do | |||
echo "Installing $f" | |||
install_bcsymbolmap "$f" "$destination" | |||
rm "$f" | |||
done | |||
rmdir "${source}/${BCSYMBOLMAP_DIR}" | |||
fi | |||
# Use filter instead of exclude so missing patterns don't throw errors. | |||
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" | |||
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --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}" | |||
elif [ -L "${binary}" ]; then | |||
echo "Destination binary is symlinked..." | |||
dirname="$(dirname "${binary}")" | |||
binary="${dirname}/$(readlink "${binary}")" | |||
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) | |||
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" | |||
warn_missing_arch=${2:-true} | |||
if [ -r "$source" ]; then | |||
# Copy the dSYM into 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 .dSYM "$source")" | |||
binary_name="$(ls "$source/Contents/Resources/DWARF")" | |||
binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" | |||
# Strip invalid architectures from the dSYM. | |||
if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then | |||
strip_invalid_archs "$binary" "$warn_missing_arch" | |||
fi | |||
if [[ $STRIP_BINARY_RETVAL == 0 ]]; then | |||
# Move the stripped file into its final destination. | |||
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" | |||
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" | |||
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}.dSYM" | |||
fi | |||
fi | |||
} | |||
# Used as a return value for each invocation of `strip_invalid_archs` function. | |||
STRIP_BINARY_RETVAL=0 | |||
# Strip invalid architectures | |||
strip_invalid_archs() { | |||
binary="$1" | |||
warn_missing_arch=${2:-true} | |||
# 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 | |||
if [[ "$warn_missing_arch" == "true" ]]; then | |||
echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." | |||
fi | |||
STRIP_BINARY_RETVAL=1 | |||
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" | |||
stripped="$stripped $arch" | |||
fi | |||
done | |||
if [[ "$stripped" ]]; then | |||
echo "Stripped $binary of architectures:$stripped" | |||
fi | |||
STRIP_BINARY_RETVAL=0 | |||
} | |||
# Copies the bcsymbolmap files of a vendored framework | |||
install_bcsymbolmap() { | |||
local bcsymbolmap_path="$1" | |||
local destination="${BUILT_PRODUCTS_DIR}" | |||
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" | |||
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" | |||
} | |||
# 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_identity | |||
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 | |||
} | |||
if [[ "$CONFIGURATION" == "Debug" ]]; then | |||
install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" | |||
fi | |||
if [[ "$CONFIGURATION" == "Release" ]]; then | |||
install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" | |||
fi | |||
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then | |||
wait | |||
fi |
@@ -0,0 +1,16 @@ | |||
#ifdef __OBJC__ | |||
#import <UIKit/UIKit.h> | |||
#else | |||
#ifndef FOUNDATION_EXPORT | |||
#if defined(__cplusplus) | |||
#define FOUNDATION_EXPORT extern "C" | |||
#else | |||
#define FOUNDATION_EXPORT extern | |||
#endif | |||
#endif | |||
#endif | |||
FOUNDATION_EXPORT double Pods_wyy_wyyUITestsVersionNumber; | |||
FOUNDATION_EXPORT const unsigned char Pods_wyy_wyyUITestsVersionString[]; | |||
@@ -0,0 +1,14 @@ | |||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES | |||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO | |||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" | |||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 | |||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" | |||
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' | |||
OTHER_LDFLAGS = $(inherited) -framework "SnapKit" | |||
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 | |||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates | |||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES |
@@ -0,0 +1,6 @@ | |||
framework module Pods_wyy_wyyUITests { | |||
umbrella header "Pods-wyy-wyyUITests-umbrella.h" | |||
export * | |||
module * { export * } | |||
} |
@@ -0,0 +1,14 @@ | |||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES | |||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO | |||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" | |||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 | |||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" | |||
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' | |||
OTHER_LDFLAGS = $(inherited) -framework "SnapKit" | |||
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 | |||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates | |||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES |
@@ -0,0 +1,26 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>CFBundleDevelopmentRegion</key> | |||
<string>en</string> | |||
<key>CFBundleExecutable</key> | |||
<string>${EXECUTABLE_NAME}</string> | |||
<key>CFBundleIdentifier</key> | |||
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string> | |||
<key>CFBundleInfoDictionaryVersion</key> | |||
<string>6.0</string> | |||
<key>CFBundleName</key> | |||
<string>${PRODUCT_NAME}</string> | |||
<key>CFBundlePackageType</key> | |||
<string>FMWK</string> | |||
<key>CFBundleShortVersionString</key> | |||
<string>1.0.0</string> | |||
<key>CFBundleSignature</key> | |||
<string>????</string> | |||
<key>CFBundleVersion</key> | |||
<string>${CURRENT_PROJECT_VERSION}</string> | |||
<key>NSPrincipalClass</key> | |||
<string></string> | |||
</dict> | |||
</plist> |
@@ -0,0 +1,26 @@ | |||
# Acknowledgements | |||
This application makes use of the following third party libraries: | |||
## 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. | |||
Generated by CocoaPods - https://cocoapods.org |
@@ -0,0 +1,58 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>PreferenceSpecifiers</key> | |||
<array> | |||
<dict> | |||
<key>FooterText</key> | |||
<string>This application makes use of the following third party libraries:</string> | |||
<key>Title</key> | |||
<string>Acknowledgements</string> | |||
<key>Type</key> | |||
<string>PSGroupSpecifier</string> | |||
</dict> | |||
<dict> | |||
<key>FooterText</key> | |||
<string>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. | |||
</string> | |||
<key>License</key> | |||
<string>MIT</string> | |||
<key>Title</key> | |||
<string>SnapKit</string> | |||
<key>Type</key> | |||
<string>PSGroupSpecifier</string> | |||
</dict> | |||
<dict> | |||
<key>FooterText</key> | |||
<string>Generated by CocoaPods - https://cocoapods.org</string> | |||
<key>Title</key> | |||
<string></string> | |||
<key>Type</key> | |||
<string>PSGroupSpecifier</string> | |||
</dict> | |||
</array> | |||
<key>StringsTable</key> | |||
<string>Acknowledgements</string> | |||
<key>Title</key> | |||
<string>Acknowledgements</string> | |||
</dict> | |||
</plist> |
@@ -0,0 +1,5 @@ | |||
#import <Foundation/Foundation.h> | |||
@interface PodsDummy_Pods_wyy : NSObject | |||
@end | |||
@implementation PodsDummy_Pods_wyy | |||
@end |
@@ -0,0 +1,2 @@ | |||
${PODS_ROOT}/Target Support Files/Pods-wyy/Pods-wyy-frameworks.sh | |||
${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework |
@@ -0,0 +1 @@ | |||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework |
@@ -0,0 +1,2 @@ | |||
${PODS_ROOT}/Target Support Files/Pods-wyy/Pods-wyy-frameworks.sh | |||
${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework |
@@ -0,0 +1 @@ | |||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework |
@@ -0,0 +1,185 @@ | |||
#!/bin/sh | |||
set -e | |||
set -u | |||
set -o pipefail | |||
function on_error { | |||
echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" | |||
} | |||
trap 'on_error $LINENO' ERR | |||
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}" | |||
BCSYMBOLMAP_DIR="BCSymbolMaps" | |||
# 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 | |||
if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then | |||
# Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied | |||
find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do | |||
echo "Installing $f" | |||
install_bcsymbolmap "$f" "$destination" | |||
rm "$f" | |||
done | |||
rmdir "${source}/${BCSYMBOLMAP_DIR}" | |||
fi | |||
# Use filter instead of exclude so missing patterns don't throw errors. | |||
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" | |||
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --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}" | |||
elif [ -L "${binary}" ]; then | |||
echo "Destination binary is symlinked..." | |||
dirname="$(dirname "${binary}")" | |||
binary="${dirname}/$(readlink "${binary}")" | |||
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) | |||
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" | |||
warn_missing_arch=${2:-true} | |||
if [ -r "$source" ]; then | |||
# Copy the dSYM into 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 .dSYM "$source")" | |||
binary_name="$(ls "$source/Contents/Resources/DWARF")" | |||
binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" | |||
# Strip invalid architectures from the dSYM. | |||
if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then | |||
strip_invalid_archs "$binary" "$warn_missing_arch" | |||
fi | |||
if [[ $STRIP_BINARY_RETVAL == 0 ]]; then | |||
# Move the stripped file into its final destination. | |||
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" | |||
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" | |||
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}.dSYM" | |||
fi | |||
fi | |||
} | |||
# Used as a return value for each invocation of `strip_invalid_archs` function. | |||
STRIP_BINARY_RETVAL=0 | |||
# Strip invalid architectures | |||
strip_invalid_archs() { | |||
binary="$1" | |||
warn_missing_arch=${2:-true} | |||
# 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 | |||
if [[ "$warn_missing_arch" == "true" ]]; then | |||
echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." | |||
fi | |||
STRIP_BINARY_RETVAL=1 | |||
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" | |||
stripped="$stripped $arch" | |||
fi | |||
done | |||
if [[ "$stripped" ]]; then | |||
echo "Stripped $binary of architectures:$stripped" | |||
fi | |||
STRIP_BINARY_RETVAL=0 | |||
} | |||
# Copies the bcsymbolmap files of a vendored framework | |||
install_bcsymbolmap() { | |||
local bcsymbolmap_path="$1" | |||
local destination="${BUILT_PRODUCTS_DIR}" | |||
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" | |||
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" | |||
} | |||
# 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_identity | |||
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 | |||
} | |||
if [[ "$CONFIGURATION" == "Debug" ]]; then | |||
install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" | |||
fi | |||
if [[ "$CONFIGURATION" == "Release" ]]; then | |||
install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" | |||
fi | |||
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then | |||
wait | |||
fi |
@@ -0,0 +1,16 @@ | |||
#ifdef __OBJC__ | |||
#import <UIKit/UIKit.h> | |||
#else | |||
#ifndef FOUNDATION_EXPORT | |||
#if defined(__cplusplus) | |||
#define FOUNDATION_EXPORT extern "C" | |||
#else | |||
#define FOUNDATION_EXPORT extern | |||
#endif | |||
#endif | |||
#endif | |||
FOUNDATION_EXPORT double Pods_wyyVersionNumber; | |||
FOUNDATION_EXPORT const unsigned char Pods_wyyVersionString[]; | |||
@@ -0,0 +1,14 @@ | |||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES | |||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO | |||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" | |||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 | |||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" | |||
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' | |||
OTHER_LDFLAGS = $(inherited) -framework "SnapKit" | |||
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 | |||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates | |||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES |
@@ -0,0 +1,6 @@ | |||
framework module Pods_wyy { | |||
umbrella header "Pods-wyy-umbrella.h" | |||
export * | |||
module * { export * } | |||
} |
@@ -0,0 +1,14 @@ | |||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES | |||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO | |||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" | |||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 | |||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" | |||
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' | |||
OTHER_LDFLAGS = $(inherited) -framework "SnapKit" | |||
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 | |||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates | |||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES |
@@ -0,0 +1,26 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>CFBundleDevelopmentRegion</key> | |||
<string>en</string> | |||
<key>CFBundleExecutable</key> | |||
<string>${EXECUTABLE_NAME}</string> | |||
<key>CFBundleIdentifier</key> | |||
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string> | |||
<key>CFBundleInfoDictionaryVersion</key> | |||
<string>6.0</string> | |||
<key>CFBundleName</key> | |||
<string>${PRODUCT_NAME}</string> | |||
<key>CFBundlePackageType</key> | |||
<string>FMWK</string> | |||
<key>CFBundleShortVersionString</key> | |||
<string>1.0.0</string> | |||
<key>CFBundleSignature</key> | |||
<string>????</string> | |||
<key>CFBundleVersion</key> | |||
<string>${CURRENT_PROJECT_VERSION}</string> | |||
<key>NSPrincipalClass</key> | |||
<string></string> | |||
</dict> | |||
</plist> |
@@ -0,0 +1,3 @@ | |||
# Acknowledgements | |||
This application makes use of the following third party libraries: | |||
Generated by CocoaPods - https://cocoapods.org |
@@ -0,0 +1,29 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>PreferenceSpecifiers</key> | |||
<array> | |||
<dict> | |||
<key>FooterText</key> | |||
<string>This application makes use of the following third party libraries:</string> | |||
<key>Title</key> | |||
<string>Acknowledgements</string> | |||
<key>Type</key> | |||
<string>PSGroupSpecifier</string> | |||
</dict> | |||
<dict> | |||
<key>FooterText</key> | |||
<string>Generated by CocoaPods - https://cocoapods.org</string> | |||
<key>Title</key> | |||
<string></string> | |||
<key>Type</key> | |||
<string>PSGroupSpecifier</string> | |||
</dict> | |||
</array> | |||
<key>StringsTable</key> | |||
<string>Acknowledgements</string> | |||
<key>Title</key> | |||
<string>Acknowledgements</string> | |||
</dict> | |||
</plist> |
@@ -0,0 +1,5 @@ | |||
#import <Foundation/Foundation.h> | |||
@interface PodsDummy_Pods_wyyTests : NSObject | |||
@end | |||
@implementation PodsDummy_Pods_wyyTests | |||
@end |
@@ -0,0 +1,16 @@ | |||
#ifdef __OBJC__ | |||
#import <UIKit/UIKit.h> | |||
#else | |||
#ifndef FOUNDATION_EXPORT | |||
#if defined(__cplusplus) | |||
#define FOUNDATION_EXPORT extern "C" | |||
#else | |||
#define FOUNDATION_EXPORT extern | |||
#endif | |||
#endif | |||
#endif | |||
FOUNDATION_EXPORT double Pods_wyyTestsVersionNumber; | |||
FOUNDATION_EXPORT const unsigned char Pods_wyyTestsVersionString[]; | |||
@@ -0,0 +1,11 @@ | |||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO | |||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" | |||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 | |||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" | |||
OTHER_LDFLAGS = $(inherited) -framework "SnapKit" | |||
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 | |||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates | |||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES |
@@ -0,0 +1,6 @@ | |||
framework module Pods_wyyTests { | |||
umbrella header "Pods-wyyTests-umbrella.h" | |||
export * | |||
module * { export * } | |||
} |
@@ -0,0 +1,11 @@ | |||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO | |||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" | |||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 | |||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" | |||
OTHER_LDFLAGS = $(inherited) -framework "SnapKit" | |||
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 | |||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates | |||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES |
@@ -0,0 +1,26 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>CFBundleDevelopmentRegion</key> | |||
<string>en</string> | |||
<key>CFBundleExecutable</key> | |||
<string>${EXECUTABLE_NAME}</string> | |||
<key>CFBundleIdentifier</key> | |||
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string> | |||
<key>CFBundleInfoDictionaryVersion</key> | |||
<string>6.0</string> | |||
<key>CFBundleName</key> | |||
<string>${PRODUCT_NAME}</string> | |||
<key>CFBundlePackageType</key> | |||
<string>FMWK</string> | |||
<key>CFBundleShortVersionString</key> | |||
<string>5.0.1</string> | |||
<key>CFBundleSignature</key> | |||
<string>????</string> | |||
<key>CFBundleVersion</key> | |||
<string>${CURRENT_PROJECT_VERSION}</string> | |||
<key>NSPrincipalClass</key> | |||
<string></string> | |||
</dict> | |||
</plist> |
@@ -0,0 +1,5 @@ | |||
#import <Foundation/Foundation.h> | |||
@interface PodsDummy_SnapKit : NSObject | |||
@end | |||
@implementation PodsDummy_SnapKit | |||
@end |
@@ -0,0 +1,12 @@ | |||
#ifdef __OBJC__ | |||
#import <UIKit/UIKit.h> | |||
#else | |||
#ifndef FOUNDATION_EXPORT | |||
#if defined(__cplusplus) | |||
#define FOUNDATION_EXPORT extern "C" | |||
#else | |||
#define FOUNDATION_EXPORT extern | |||
#endif | |||
#endif | |||
#endif | |||
@@ -0,0 +1,16 @@ | |||
#ifdef __OBJC__ | |||
#import <UIKit/UIKit.h> | |||
#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[]; | |||
@@ -0,0 +1,12 @@ | |||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO | |||
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit | |||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 | |||
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}/SnapKit | |||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates | |||
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} | |||
SKIP_INSTALL = YES | |||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES |
@@ -0,0 +1,6 @@ | |||
framework module SnapKit { | |||
umbrella header "SnapKit-umbrella.h" | |||
export * | |||
module * { export * } | |||
} |
@@ -0,0 +1,12 @@ | |||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO | |||
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit | |||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 | |||
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}/SnapKit | |||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates | |||
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} | |||
SKIP_INSTALL = YES | |||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES |
@@ -0,0 +1,806 @@ | |||
// !$*UTF8*$! | |||
{ | |||
archiveVersion = 1; | |||
classes = { | |||
}; | |||
objectVersion = 51; | |||
objects = { | |||
/* Begin PBXBuildFile section */ | |||
68A821371C8FC1757FD341FB /* Pods_wyy.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DEEBFF1FC7905035F6F90DC /* Pods_wyy.framework */; }; | |||
728791D8FA66377DE011D6BB /* Pods_wyy_wyyUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20B967B165BEFF46FE9CFD58 /* Pods_wyy_wyyUITests.framework */; }; | |||
8A66479825F33C520090F664 /* SideBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A66479725F33C520090F664 /* SideBarView.swift */; }; | |||
8A6647A025F33D340090F664 /* SideBarCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A66479F25F33D340090F664 /* SideBarCell.swift */; }; | |||
8A7C9AE525F1E35500F916F7 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A7C9AE425F1E35500F916F7 /* AppDelegate.swift */; }; | |||
8A7C9AE725F1E35500F916F7 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A7C9AE625F1E35500F916F7 /* SceneDelegate.swift */; }; | |||
8A7C9AEE25F1E35600F916F7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8A7C9AED25F1E35600F916F7 /* Assets.xcassets */; }; | |||
8A7C9AF125F1E35600F916F7 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8A7C9AEF25F1E35600F916F7 /* LaunchScreen.storyboard */; }; | |||
8A7C9AFC25F1E35600F916F7 /* wyyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A7C9AFB25F1E35600F916F7 /* wyyTests.swift */; }; | |||
8A7C9B0725F1E35600F916F7 /* wyyUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A7C9B0625F1E35600F916F7 /* wyyUITests.swift */; }; | |||
8A7C9B3625F1E4E000F916F7 /* DiscoverViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A7C9B3525F1E4E000F916F7 /* DiscoverViewController.swift */; }; | |||
8A7C9B3B25F1E50400F916F7 /* PodCastViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A7C9B3A25F1E50400F916F7 /* PodCastViewController.swift */; }; | |||
8A7C9B4025F1E50D00F916F7 /* MineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A7C9B3F25F1E50D00F916F7 /* MineViewController.swift */; }; | |||
8A7C9B4525F1E52C00F916F7 /* KaraokeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A7C9B4425F1E52C00F916F7 /* KaraokeViewController.swift */; }; | |||
8A7C9B4A25F1E53D00F916F7 /* CommunityViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A7C9B4925F1E53D00F916F7 /* CommunityViewController.swift */; }; | |||
8A7D68AC25F2058B00344E91 /* DiscoverNewsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A7D68AB25F2058B00344E91 /* DiscoverNewsView.swift */; }; | |||
8A85AF9525F221FE00C48B9C /* DiscoverButtonsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A85AF9425F221FE00C48B9C /* DiscoverButtonsView.swift */; }; | |||
8A85AF9A25F224D800C48B9C /* AlbumButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A85AF9925F224D800C48B9C /* AlbumButton.swift */; }; | |||
8A85AF9F25F235B500C48B9C /* DiscoverRecommendView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A85AF9E25F235B500C48B9C /* DiscoverRecommendView.swift */; }; | |||
8A85AFA425F238DA00C48B9C /* UIButtonScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A85AFA325F238DA00C48B9C /* UIButtonScrollView.swift */; }; | |||
8A85AFA925F2499A00C48B9C /* DiscoverPopularSongsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A85AFA825F2499A00C48B9C /* DiscoverPopularSongsView.swift */; }; | |||
8A85AFAE25F24AF500C48B9C /* PopularSongCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A85AFAD25F24AF500C48B9C /* PopularSongCell.swift */; }; | |||
8AF68EE325F1E995003AD49B /* MyTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AF68EE225F1E995003AD49B /* MyTabBarController.swift */; }; | |||
FC82524E744880542CF9CDBE /* Pods_wyyTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 429D063FCBDFE5D0294077C2 /* Pods_wyyTests.framework */; }; | |||
/* End PBXBuildFile section */ | |||
/* Begin PBXContainerItemProxy section */ | |||
8A7C9AF825F1E35600F916F7 /* PBXContainerItemProxy */ = { | |||
isa = PBXContainerItemProxy; | |||
containerPortal = 8A7C9AD925F1E35500F916F7 /* Project object */; | |||
proxyType = 1; | |||
remoteGlobalIDString = 8A7C9AE025F1E35500F916F7; | |||
remoteInfo = wyy; | |||
}; | |||
8A7C9B0325F1E35600F916F7 /* PBXContainerItemProxy */ = { | |||
isa = PBXContainerItemProxy; | |||
containerPortal = 8A7C9AD925F1E35500F916F7 /* Project object */; | |||
proxyType = 1; | |||
remoteGlobalIDString = 8A7C9AE025F1E35500F916F7; | |||
remoteInfo = wyy; | |||
}; | |||
/* End PBXContainerItemProxy section */ | |||
/* Begin PBXFileReference section */ | |||
20B967B165BEFF46FE9CFD58 /* Pods_wyy_wyyUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_wyy_wyyUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
429D063FCBDFE5D0294077C2 /* Pods_wyyTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_wyyTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
6327CE85464E7CB2BBB936DE /* Pods-wyy.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-wyy.release.xcconfig"; path = "Target Support Files/Pods-wyy/Pods-wyy.release.xcconfig"; sourceTree = "<group>"; }; | |||
7DEEBFF1FC7905035F6F90DC /* Pods_wyy.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_wyy.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
8A66479725F33C520090F664 /* SideBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SideBarView.swift; sourceTree = "<group>"; }; | |||
8A66479F25F33D340090F664 /* SideBarCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SideBarCell.swift; sourceTree = "<group>"; }; | |||
8A7C9AE125F1E35500F916F7 /* wyy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = wyy.app; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
8A7C9AE425F1E35500F916F7 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; | |||
8A7C9AE625F1E35500F916F7 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; }; | |||
8A7C9AED25F1E35600F916F7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; | |||
8A7C9AF025F1E35600F916F7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; | |||
8A7C9AF225F1E35600F916F7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; | |||
8A7C9AF725F1E35600F916F7 /* wyyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = wyyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
8A7C9AFB25F1E35600F916F7 /* wyyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = wyyTests.swift; sourceTree = "<group>"; }; | |||
8A7C9AFD25F1E35600F916F7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; | |||
8A7C9B0225F1E35600F916F7 /* wyyUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = wyyUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
8A7C9B0625F1E35600F916F7 /* wyyUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = wyyUITests.swift; sourceTree = "<group>"; }; | |||
8A7C9B0825F1E35600F916F7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; | |||
8A7C9B3525F1E4E000F916F7 /* DiscoverViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoverViewController.swift; sourceTree = "<group>"; }; | |||
8A7C9B3A25F1E50400F916F7 /* PodCastViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodCastViewController.swift; sourceTree = "<group>"; }; | |||
8A7C9B3F25F1E50D00F916F7 /* MineViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MineViewController.swift; sourceTree = "<group>"; }; | |||
8A7C9B4425F1E52C00F916F7 /* KaraokeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KaraokeViewController.swift; sourceTree = "<group>"; }; | |||
8A7C9B4925F1E53D00F916F7 /* CommunityViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommunityViewController.swift; sourceTree = "<group>"; }; | |||
8A7D68AB25F2058B00344E91 /* DiscoverNewsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoverNewsView.swift; sourceTree = "<group>"; }; | |||
8A85AF9425F221FE00C48B9C /* DiscoverButtonsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoverButtonsView.swift; sourceTree = "<group>"; }; | |||
8A85AF9925F224D800C48B9C /* AlbumButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumButton.swift; sourceTree = "<group>"; }; | |||
8A85AF9E25F235B500C48B9C /* DiscoverRecommendView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoverRecommendView.swift; sourceTree = "<group>"; }; | |||
8A85AFA325F238DA00C48B9C /* UIButtonScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIButtonScrollView.swift; sourceTree = "<group>"; }; | |||
8A85AFA825F2499A00C48B9C /* DiscoverPopularSongsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoverPopularSongsView.swift; sourceTree = "<group>"; }; | |||
8A85AFAD25F24AF500C48B9C /* PopularSongCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopularSongCell.swift; sourceTree = "<group>"; }; | |||
8AF68EE225F1E995003AD49B /* MyTabBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyTabBarController.swift; sourceTree = "<group>"; }; | |||
8B1428959C46630A42647E63 /* Pods-wyy-wyyUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-wyy-wyyUITests.debug.xcconfig"; path = "Target Support Files/Pods-wyy-wyyUITests/Pods-wyy-wyyUITests.debug.xcconfig"; sourceTree = "<group>"; }; | |||
9B5F805FE0B8DB118AF07212 /* Pods-wyyTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-wyyTests.debug.xcconfig"; path = "Target Support Files/Pods-wyyTests/Pods-wyyTests.debug.xcconfig"; sourceTree = "<group>"; }; | |||
BCB6202909AB5CD13A2CE3C1 /* Pods-wyy-wyyUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-wyy-wyyUITests.release.xcconfig"; path = "Target Support Files/Pods-wyy-wyyUITests/Pods-wyy-wyyUITests.release.xcconfig"; sourceTree = "<group>"; }; | |||
E2289766D34B64902CFABFAC /* Pods-wyyTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-wyyTests.release.xcconfig"; path = "Target Support Files/Pods-wyyTests/Pods-wyyTests.release.xcconfig"; sourceTree = "<group>"; }; | |||
EBAC972EEE6E7797CFA70DEF /* Pods-wyy.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-wyy.debug.xcconfig"; path = "Target Support Files/Pods-wyy/Pods-wyy.debug.xcconfig"; sourceTree = "<group>"; }; | |||
/* End PBXFileReference section */ | |||
/* Begin PBXFrameworksBuildPhase section */ | |||
8A7C9ADE25F1E35500F916F7 /* Frameworks */ = { | |||
isa = PBXFrameworksBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
68A821371C8FC1757FD341FB /* Pods_wyy.framework in Frameworks */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
8A7C9AF425F1E35600F916F7 /* Frameworks */ = { | |||
isa = PBXFrameworksBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
FC82524E744880542CF9CDBE /* Pods_wyyTests.framework in Frameworks */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
8A7C9AFF25F1E35600F916F7 /* Frameworks */ = { | |||
isa = PBXFrameworksBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
728791D8FA66377DE011D6BB /* Pods_wyy_wyyUITests.framework in Frameworks */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
/* End PBXFrameworksBuildPhase section */ | |||
/* Begin PBXGroup section */ | |||
08ADCDA4D670581C04DC3FA4 /* Frameworks */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
7DEEBFF1FC7905035F6F90DC /* Pods_wyy.framework */, | |||
20B967B165BEFF46FE9CFD58 /* Pods_wyy_wyyUITests.framework */, | |||
429D063FCBDFE5D0294077C2 /* Pods_wyyTests.framework */, | |||
); | |||
name = Frameworks; | |||
sourceTree = "<group>"; | |||
}; | |||
8A66479625F33C3D0090F664 /* SideBar */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
8A66479725F33C520090F664 /* SideBarView.swift */, | |||
8A66479F25F33D340090F664 /* SideBarCell.swift */, | |||
); | |||
path = SideBar; | |||
sourceTree = "<group>"; | |||
}; | |||
8A7C9AD825F1E35500F916F7 = { | |||
isa = PBXGroup; | |||
children = ( | |||
8A7C9AE325F1E35500F916F7 /* wyy */, | |||
8A7C9AFA25F1E35600F916F7 /* wyyTests */, | |||
8A7C9B0525F1E35600F916F7 /* wyyUITests */, | |||
8A7C9AE225F1E35500F916F7 /* Products */, | |||
E7D7A25152F2BDAD052A582F /* Pods */, | |||
08ADCDA4D670581C04DC3FA4 /* Frameworks */, | |||
); | |||
sourceTree = "<group>"; | |||
}; | |||
8A7C9AE225F1E35500F916F7 /* Products */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
8A7C9AE125F1E35500F916F7 /* wyy.app */, | |||
8A7C9AF725F1E35600F916F7 /* wyyTests.xctest */, | |||
8A7C9B0225F1E35600F916F7 /* wyyUITests.xctest */, | |||
); | |||
name = Products; | |||
sourceTree = "<group>"; | |||
}; | |||
8A7C9AE325F1E35500F916F7 /* wyy */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
8A66479625F33C3D0090F664 /* SideBar */, | |||
8A7C9B3A25F1E50400F916F7 /* PodCastViewController.swift */, | |||
8A7C9B3F25F1E50D00F916F7 /* MineViewController.swift */, | |||
8A7C9B4425F1E52C00F916F7 /* KaraokeViewController.swift */, | |||
8A7C9B4925F1E53D00F916F7 /* CommunityViewController.swift */, | |||
8A7D68B025F2073E00344E91 /* DiscoverView */, | |||
8A7C9AE425F1E35500F916F7 /* AppDelegate.swift */, | |||
8A7C9AE625F1E35500F916F7 /* SceneDelegate.swift */, | |||
8A7C9AED25F1E35600F916F7 /* Assets.xcassets */, | |||
8A7C9AEF25F1E35600F916F7 /* LaunchScreen.storyboard */, | |||
8A7C9AF225F1E35600F916F7 /* Info.plist */, | |||
8AF68EE225F1E995003AD49B /* MyTabBarController.swift */, | |||
8A85AFA325F238DA00C48B9C /* UIButtonScrollView.swift */, | |||
); | |||
path = wyy; | |||
sourceTree = "<group>"; | |||
}; | |||
8A7C9AFA25F1E35600F916F7 /* wyyTests */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
8A7C9AFB25F1E35600F916F7 /* wyyTests.swift */, | |||
8A7C9AFD25F1E35600F916F7 /* Info.plist */, | |||
); | |||
path = wyyTests; | |||
sourceTree = "<group>"; | |||
}; | |||
8A7C9B0525F1E35600F916F7 /* wyyUITests */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
8A7C9B0625F1E35600F916F7 /* wyyUITests.swift */, | |||
8A7C9B0825F1E35600F916F7 /* Info.plist */, | |||
); | |||
path = wyyUITests; | |||
sourceTree = "<group>"; | |||
}; | |||
8A7D68B025F2073E00344E91 /* DiscoverView */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
8A7C9B3525F1E4E000F916F7 /* DiscoverViewController.swift */, | |||
8A7D68AB25F2058B00344E91 /* DiscoverNewsView.swift */, | |||
8A85AF9425F221FE00C48B9C /* DiscoverButtonsView.swift */, | |||
8A85AF9925F224D800C48B9C /* AlbumButton.swift */, | |||
8A85AF9E25F235B500C48B9C /* DiscoverRecommendView.swift */, | |||
8A85AFA825F2499A00C48B9C /* DiscoverPopularSongsView.swift */, | |||
8A85AFAD25F24AF500C48B9C /* PopularSongCell.swift */, | |||
); | |||
path = DiscoverView; | |||
sourceTree = "<group>"; | |||
}; | |||
E7D7A25152F2BDAD052A582F /* Pods */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
EBAC972EEE6E7797CFA70DEF /* Pods-wyy.debug.xcconfig */, | |||
6327CE85464E7CB2BBB936DE /* Pods-wyy.release.xcconfig */, | |||
8B1428959C46630A42647E63 /* Pods-wyy-wyyUITests.debug.xcconfig */, | |||
BCB6202909AB5CD13A2CE3C1 /* Pods-wyy-wyyUITests.release.xcconfig */, | |||
9B5F805FE0B8DB118AF07212 /* Pods-wyyTests.debug.xcconfig */, | |||
E2289766D34B64902CFABFAC /* Pods-wyyTests.release.xcconfig */, | |||
); | |||
path = Pods; | |||
sourceTree = "<group>"; | |||
}; | |||
/* End PBXGroup section */ | |||
/* Begin PBXNativeTarget section */ | |||
8A7C9AE025F1E35500F916F7 /* wyy */ = { | |||
isa = PBXNativeTarget; | |||
buildConfigurationList = 8A7C9B0B25F1E35600F916F7 /* Build configuration list for PBXNativeTarget "wyy" */; | |||
buildPhases = ( | |||
577B8451DAE839E274EDE762 /* [CP] Check Pods Manifest.lock */, | |||
8A7C9ADD25F1E35500F916F7 /* Sources */, | |||
8A7C9ADE25F1E35500F916F7 /* Frameworks */, | |||
8A7C9ADF25F1E35500F916F7 /* Resources */, | |||
A4A7D2C265A6A01FD93D919F /* [CP] Embed Pods Frameworks */, | |||
); | |||
buildRules = ( | |||
); | |||
dependencies = ( | |||
); | |||
name = wyy; | |||
productName = wyy; | |||
productReference = 8A7C9AE125F1E35500F916F7 /* wyy.app */; | |||
productType = "com.apple.product-type.application"; | |||
}; | |||
8A7C9AF625F1E35600F916F7 /* wyyTests */ = { | |||
isa = PBXNativeTarget; | |||
buildConfigurationList = 8A7C9B0E25F1E35600F916F7 /* Build configuration list for PBXNativeTarget "wyyTests" */; | |||
buildPhases = ( | |||
C28C313C50E8BE1FE61D80CB /* [CP] Check Pods Manifest.lock */, | |||
8A7C9AF325F1E35600F916F7 /* Sources */, | |||
8A7C9AF425F1E35600F916F7 /* Frameworks */, | |||
8A7C9AF525F1E35600F916F7 /* Resources */, | |||
); | |||
buildRules = ( | |||
); | |||
dependencies = ( | |||
8A7C9AF925F1E35600F916F7 /* PBXTargetDependency */, | |||
); | |||
name = wyyTests; | |||
productName = wyyTests; | |||
productReference = 8A7C9AF725F1E35600F916F7 /* wyyTests.xctest */; | |||
productType = "com.apple.product-type.bundle.unit-test"; | |||
}; | |||
8A7C9B0125F1E35600F916F7 /* wyyUITests */ = { | |||
isa = PBXNativeTarget; | |||
buildConfigurationList = 8A7C9B1125F1E35600F916F7 /* Build configuration list for PBXNativeTarget "wyyUITests" */; | |||
buildPhases = ( | |||
4F5620301DCE5067EC74F8F2 /* [CP] Check Pods Manifest.lock */, | |||
8A7C9AFE25F1E35600F916F7 /* Sources */, | |||
8A7C9AFF25F1E35600F916F7 /* Frameworks */, | |||
8A7C9B0025F1E35600F916F7 /* Resources */, | |||
888E632E72C949174356B123 /* [CP] Embed Pods Frameworks */, | |||
); | |||
buildRules = ( | |||
); | |||
dependencies = ( | |||
8A7C9B0425F1E35600F916F7 /* PBXTargetDependency */, | |||
); | |||
name = wyyUITests; | |||
productName = wyyUITests; | |||
productReference = 8A7C9B0225F1E35600F916F7 /* wyyUITests.xctest */; | |||
productType = "com.apple.product-type.bundle.ui-testing"; | |||
}; | |||
/* End PBXNativeTarget section */ | |||
/* Begin PBXProject section */ | |||
8A7C9AD925F1E35500F916F7 /* Project object */ = { | |||
isa = PBXProject; | |||
attributes = { | |||
LastSwiftUpdateCheck = 1240; | |||
LastUpgradeCheck = 1240; | |||
TargetAttributes = { | |||
8A7C9AE025F1E35500F916F7 = { | |||
CreatedOnToolsVersion = 12.4; | |||
}; | |||
8A7C9AF625F1E35600F916F7 = { | |||
CreatedOnToolsVersion = 12.4; | |||
TestTargetID = 8A7C9AE025F1E35500F916F7; | |||
}; | |||
8A7C9B0125F1E35600F916F7 = { | |||
CreatedOnToolsVersion = 12.4; | |||
TestTargetID = 8A7C9AE025F1E35500F916F7; | |||
}; | |||
}; | |||
}; | |||
buildConfigurationList = 8A7C9ADC25F1E35500F916F7 /* Build configuration list for PBXProject "wyy" */; | |||
compatibilityVersion = "Xcode 9.3"; | |||
developmentRegion = en; | |||
hasScannedForEncodings = 0; | |||
knownRegions = ( | |||
en, | |||
Base, | |||
); | |||
mainGroup = 8A7C9AD825F1E35500F916F7; | |||
productRefGroup = 8A7C9AE225F1E35500F916F7 /* Products */; | |||
projectDirPath = ""; | |||
projectRoot = ""; | |||
targets = ( | |||
8A7C9AE025F1E35500F916F7 /* wyy */, | |||
8A7C9AF625F1E35600F916F7 /* wyyTests */, | |||
8A7C9B0125F1E35600F916F7 /* wyyUITests */, | |||
); | |||
}; | |||
/* End PBXProject section */ | |||
/* Begin PBXResourcesBuildPhase section */ | |||
8A7C9ADF25F1E35500F916F7 /* Resources */ = { | |||
isa = PBXResourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
8A7C9AF125F1E35600F916F7 /* LaunchScreen.storyboard in Resources */, | |||
8A7C9AEE25F1E35600F916F7 /* Assets.xcassets in Resources */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
8A7C9AF525F1E35600F916F7 /* Resources */ = { | |||
isa = PBXResourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
8A7C9B0025F1E35600F916F7 /* Resources */ = { | |||
isa = PBXResourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
/* End PBXResourcesBuildPhase section */ | |||
/* Begin PBXShellScriptBuildPhase section */ | |||
4F5620301DCE5067EC74F8F2 /* [CP] Check Pods Manifest.lock */ = { | |||
isa = PBXShellScriptBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
inputFileListPaths = ( | |||
); | |||
inputPaths = ( | |||
"${PODS_PODFILE_DIR_PATH}/Podfile.lock", | |||
"${PODS_ROOT}/Manifest.lock", | |||
); | |||
name = "[CP] Check Pods Manifest.lock"; | |||
outputFileListPaths = ( | |||
); | |||
outputPaths = ( | |||
"$(DERIVED_FILE_DIR)/Pods-wyy-wyyUITests-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; | |||
}; | |||
577B8451DAE839E274EDE762 /* [CP] Check Pods Manifest.lock */ = { | |||
isa = PBXShellScriptBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
inputFileListPaths = ( | |||
); | |||
inputPaths = ( | |||
"${PODS_PODFILE_DIR_PATH}/Podfile.lock", | |||
"${PODS_ROOT}/Manifest.lock", | |||
); | |||
name = "[CP] Check Pods Manifest.lock"; | |||
outputFileListPaths = ( | |||
); | |||
outputPaths = ( | |||
"$(DERIVED_FILE_DIR)/Pods-wyy-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; | |||
}; | |||
888E632E72C949174356B123 /* [CP] Embed Pods Frameworks */ = { | |||
isa = PBXShellScriptBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
inputFileListPaths = ( | |||
"${PODS_ROOT}/Target Support Files/Pods-wyy-wyyUITests/Pods-wyy-wyyUITests-frameworks-${CONFIGURATION}-input-files.xcfilelist", | |||
); | |||
name = "[CP] Embed Pods Frameworks"; | |||
outputFileListPaths = ( | |||
"${PODS_ROOT}/Target Support Files/Pods-wyy-wyyUITests/Pods-wyy-wyyUITests-frameworks-${CONFIGURATION}-output-files.xcfilelist", | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
shellPath = /bin/sh; | |||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-wyy-wyyUITests/Pods-wyy-wyyUITests-frameworks.sh\"\n"; | |||
showEnvVarsInLog = 0; | |||
}; | |||
A4A7D2C265A6A01FD93D919F /* [CP] Embed Pods Frameworks */ = { | |||
isa = PBXShellScriptBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
inputFileListPaths = ( | |||
"${PODS_ROOT}/Target Support Files/Pods-wyy/Pods-wyy-frameworks-${CONFIGURATION}-input-files.xcfilelist", | |||
); | |||
name = "[CP] Embed Pods Frameworks"; | |||
outputFileListPaths = ( | |||
"${PODS_ROOT}/Target Support Files/Pods-wyy/Pods-wyy-frameworks-${CONFIGURATION}-output-files.xcfilelist", | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
shellPath = /bin/sh; | |||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-wyy/Pods-wyy-frameworks.sh\"\n"; | |||
showEnvVarsInLog = 0; | |||
}; | |||
C28C313C50E8BE1FE61D80CB /* [CP] Check Pods Manifest.lock */ = { | |||
isa = PBXShellScriptBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
); | |||
inputFileListPaths = ( | |||
); | |||
inputPaths = ( | |||
"${PODS_PODFILE_DIR_PATH}/Podfile.lock", | |||
"${PODS_ROOT}/Manifest.lock", | |||
); | |||
name = "[CP] Check Pods Manifest.lock"; | |||
outputFileListPaths = ( | |||
); | |||
outputPaths = ( | |||
"$(DERIVED_FILE_DIR)/Pods-wyyTests-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; | |||
}; | |||
/* End PBXShellScriptBuildPhase section */ | |||
/* Begin PBXSourcesBuildPhase section */ | |||
8A7C9ADD25F1E35500F916F7 /* Sources */ = { | |||
isa = PBXSourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
8A85AFA425F238DA00C48B9C /* UIButtonScrollView.swift in Sources */, | |||
8A66479825F33C520090F664 /* SideBarView.swift in Sources */, | |||
8A85AFAE25F24AF500C48B9C /* PopularSongCell.swift in Sources */, | |||
8A85AFA925F2499A00C48B9C /* DiscoverPopularSongsView.swift in Sources */, | |||
8A85AF9A25F224D800C48B9C /* AlbumButton.swift in Sources */, | |||
8A6647A025F33D340090F664 /* SideBarCell.swift in Sources */, | |||
8A7D68AC25F2058B00344E91 /* DiscoverNewsView.swift in Sources */, | |||
8A85AF9F25F235B500C48B9C /* DiscoverRecommendView.swift in Sources */, | |||
8A7C9B3625F1E4E000F916F7 /* DiscoverViewController.swift in Sources */, | |||
8AF68EE325F1E995003AD49B /* MyTabBarController.swift in Sources */, | |||
8A7C9B4525F1E52C00F916F7 /* KaraokeViewController.swift in Sources */, | |||
8A7C9B3B25F1E50400F916F7 /* PodCastViewController.swift in Sources */, | |||
8A85AF9525F221FE00C48B9C /* DiscoverButtonsView.swift in Sources */, | |||
8A7C9B4A25F1E53D00F916F7 /* CommunityViewController.swift in Sources */, | |||
8A7C9AE525F1E35500F916F7 /* AppDelegate.swift in Sources */, | |||
8A7C9AE725F1E35500F916F7 /* SceneDelegate.swift in Sources */, | |||
8A7C9B4025F1E50D00F916F7 /* MineViewController.swift in Sources */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
8A7C9AF325F1E35600F916F7 /* Sources */ = { | |||
isa = PBXSourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
8A7C9AFC25F1E35600F916F7 /* wyyTests.swift in Sources */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
8A7C9AFE25F1E35600F916F7 /* Sources */ = { | |||
isa = PBXSourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
8A7C9B0725F1E35600F916F7 /* wyyUITests.swift in Sources */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
/* End PBXSourcesBuildPhase section */ | |||
/* Begin PBXTargetDependency section */ | |||
8A7C9AF925F1E35600F916F7 /* PBXTargetDependency */ = { | |||
isa = PBXTargetDependency; | |||
target = 8A7C9AE025F1E35500F916F7 /* wyy */; | |||
targetProxy = 8A7C9AF825F1E35600F916F7 /* PBXContainerItemProxy */; | |||
}; | |||
8A7C9B0425F1E35600F916F7 /* PBXTargetDependency */ = { | |||
isa = PBXTargetDependency; | |||
target = 8A7C9AE025F1E35500F916F7 /* wyy */; | |||
targetProxy = 8A7C9B0325F1E35600F916F7 /* PBXContainerItemProxy */; | |||
}; | |||
/* End PBXTargetDependency section */ | |||
/* Begin PBXVariantGroup section */ | |||
8A7C9AEF25F1E35600F916F7 /* LaunchScreen.storyboard */ = { | |||
isa = PBXVariantGroup; | |||
children = ( | |||
8A7C9AF025F1E35600F916F7 /* Base */, | |||
); | |||
name = LaunchScreen.storyboard; | |||
sourceTree = "<group>"; | |||
}; | |||
/* End PBXVariantGroup section */ | |||
/* Begin XCBuildConfiguration section */ | |||
8A7C9B0925F1E35600F916F7 /* 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | |||
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; | |||
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 = ( | |||
"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 = 14.4; | |||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; | |||
MTL_FAST_MATH = YES; | |||
ONLY_ACTIVE_ARCH = YES; | |||
SDKROOT = iphoneos; | |||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; | |||
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | |||
}; | |||
name = Debug; | |||
}; | |||
8A7C9B0A25F1E35600F916F7 /* 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | |||
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; | |||
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_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 = 14.4; | |||
MTL_ENABLE_DEBUG_INFO = NO; | |||
MTL_FAST_MATH = YES; | |||
SDKROOT = iphoneos; | |||
SWIFT_COMPILATION_MODE = wholemodule; | |||
SWIFT_OPTIMIZATION_LEVEL = "-O"; | |||
VALIDATE_PRODUCT = YES; | |||
}; | |||
name = Release; | |||
}; | |||
8A7C9B0C25F1E35600F916F7 /* Debug */ = { | |||
isa = XCBuildConfiguration; | |||
baseConfigurationReference = EBAC972EEE6E7797CFA70DEF /* Pods-wyy.debug.xcconfig */; | |||
buildSettings = { | |||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | |||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; | |||
CODE_SIGN_STYLE = Automatic; | |||
INFOPLIST_FILE = wyy/Info.plist; | |||
LD_RUNPATH_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
"@executable_path/Frameworks", | |||
); | |||
PRODUCT_BUNDLE_IDENTIFIER = sss.wyy; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
SWIFT_VERSION = 5.0; | |||
TARGETED_DEVICE_FAMILY = "1,2"; | |||
}; | |||
name = Debug; | |||
}; | |||
8A7C9B0D25F1E35600F916F7 /* Release */ = { | |||
isa = XCBuildConfiguration; | |||
baseConfigurationReference = 6327CE85464E7CB2BBB936DE /* Pods-wyy.release.xcconfig */; | |||
buildSettings = { | |||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | |||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; | |||
CODE_SIGN_STYLE = Automatic; | |||
INFOPLIST_FILE = wyy/Info.plist; | |||
LD_RUNPATH_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
"@executable_path/Frameworks", | |||
); | |||
PRODUCT_BUNDLE_IDENTIFIER = sss.wyy; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
SWIFT_VERSION = 5.0; | |||
TARGETED_DEVICE_FAMILY = "1,2"; | |||
}; | |||
name = Release; | |||
}; | |||
8A7C9B0F25F1E35600F916F7 /* Debug */ = { | |||
isa = XCBuildConfiguration; | |||
baseConfigurationReference = 9B5F805FE0B8DB118AF07212 /* Pods-wyyTests.debug.xcconfig */; | |||
buildSettings = { | |||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; | |||
BUNDLE_LOADER = "$(TEST_HOST)"; | |||
CODE_SIGN_STYLE = Automatic; | |||
INFOPLIST_FILE = wyyTests/Info.plist; | |||
IPHONEOS_DEPLOYMENT_TARGET = 14.4; | |||
LD_RUNPATH_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
"@executable_path/Frameworks", | |||
"@loader_path/Frameworks", | |||
); | |||
PRODUCT_BUNDLE_IDENTIFIER = sss.wyyTests; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
SWIFT_VERSION = 5.0; | |||
TARGETED_DEVICE_FAMILY = "1,2"; | |||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/wyy.app/wyy"; | |||
}; | |||
name = Debug; | |||
}; | |||
8A7C9B1025F1E35600F916F7 /* Release */ = { | |||
isa = XCBuildConfiguration; | |||
baseConfigurationReference = E2289766D34B64902CFABFAC /* Pods-wyyTests.release.xcconfig */; | |||
buildSettings = { | |||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; | |||
BUNDLE_LOADER = "$(TEST_HOST)"; | |||
CODE_SIGN_STYLE = Automatic; | |||
INFOPLIST_FILE = wyyTests/Info.plist; | |||
IPHONEOS_DEPLOYMENT_TARGET = 14.4; | |||
LD_RUNPATH_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
"@executable_path/Frameworks", | |||
"@loader_path/Frameworks", | |||
); | |||
PRODUCT_BUNDLE_IDENTIFIER = sss.wyyTests; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
SWIFT_VERSION = 5.0; | |||
TARGETED_DEVICE_FAMILY = "1,2"; | |||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/wyy.app/wyy"; | |||
}; | |||
name = Release; | |||
}; | |||
8A7C9B1225F1E35600F916F7 /* Debug */ = { | |||
isa = XCBuildConfiguration; | |||
baseConfigurationReference = 8B1428959C46630A42647E63 /* Pods-wyy-wyyUITests.debug.xcconfig */; | |||
buildSettings = { | |||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; | |||
CODE_SIGN_STYLE = Automatic; | |||
INFOPLIST_FILE = wyyUITests/Info.plist; | |||
LD_RUNPATH_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
"@executable_path/Frameworks", | |||
"@loader_path/Frameworks", | |||
); | |||
PRODUCT_BUNDLE_IDENTIFIER = sss.wyyUITests; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
SWIFT_VERSION = 5.0; | |||
TARGETED_DEVICE_FAMILY = "1,2"; | |||
TEST_TARGET_NAME = wyy; | |||
}; | |||
name = Debug; | |||
}; | |||
8A7C9B1325F1E35600F916F7 /* Release */ = { | |||
isa = XCBuildConfiguration; | |||
baseConfigurationReference = BCB6202909AB5CD13A2CE3C1 /* Pods-wyy-wyyUITests.release.xcconfig */; | |||
buildSettings = { | |||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; | |||
CODE_SIGN_STYLE = Automatic; | |||
INFOPLIST_FILE = wyyUITests/Info.plist; | |||
LD_RUNPATH_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
"@executable_path/Frameworks", | |||
"@loader_path/Frameworks", | |||
); | |||
PRODUCT_BUNDLE_IDENTIFIER = sss.wyyUITests; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
SWIFT_VERSION = 5.0; | |||
TARGETED_DEVICE_FAMILY = "1,2"; | |||
TEST_TARGET_NAME = wyy; | |||
}; | |||
name = Release; | |||
}; | |||
/* End XCBuildConfiguration section */ | |||
/* Begin XCConfigurationList section */ | |||
8A7C9ADC25F1E35500F916F7 /* Build configuration list for PBXProject "wyy" */ = { | |||
isa = XCConfigurationList; | |||
buildConfigurations = ( | |||
8A7C9B0925F1E35600F916F7 /* Debug */, | |||
8A7C9B0A25F1E35600F916F7 /* Release */, | |||
); | |||
defaultConfigurationIsVisible = 0; | |||
defaultConfigurationName = Release; | |||
}; | |||
8A7C9B0B25F1E35600F916F7 /* Build configuration list for PBXNativeTarget "wyy" */ = { | |||
isa = XCConfigurationList; | |||
buildConfigurations = ( | |||
8A7C9B0C25F1E35600F916F7 /* Debug */, | |||
8A7C9B0D25F1E35600F916F7 /* Release */, | |||
); | |||
defaultConfigurationIsVisible = 0; | |||
defaultConfigurationName = Release; | |||
}; | |||
8A7C9B0E25F1E35600F916F7 /* Build configuration list for PBXNativeTarget "wyyTests" */ = { | |||
isa = XCConfigurationList; | |||
buildConfigurations = ( | |||
8A7C9B0F25F1E35600F916F7 /* Debug */, | |||
8A7C9B1025F1E35600F916F7 /* Release */, | |||
); | |||
defaultConfigurationIsVisible = 0; | |||
defaultConfigurationName = Release; | |||
}; | |||
8A7C9B1125F1E35600F916F7 /* Build configuration list for PBXNativeTarget "wyyUITests" */ = { | |||
isa = XCConfigurationList; | |||
buildConfigurations = ( | |||
8A7C9B1225F1E35600F916F7 /* Debug */, | |||
8A7C9B1325F1E35600F916F7 /* Release */, | |||
); | |||
defaultConfigurationIsVisible = 0; | |||
defaultConfigurationName = Release; | |||
}; | |||
/* End XCConfigurationList section */ | |||
}; | |||
rootObject = 8A7C9AD925F1E35500F916F7 /* Project object */; | |||
} |
@@ -0,0 +1,7 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<Workspace | |||
version = "1.0"> | |||
<FileRef | |||
location = "self:"> | |||
</FileRef> | |||
</Workspace> |
@@ -0,0 +1,8 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>IDEDidComputeMac32BitWarning</key> | |||
<true/> | |||
</dict> | |||
</plist> |
@@ -0,0 +1,10 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<Workspace | |||
version = "1.0"> | |||
<FileRef | |||
location = "group:wyy.xcodeproj"> | |||
</FileRef> | |||
<FileRef | |||
location = "group:Pods/Pods.xcodeproj"> | |||
</FileRef> | |||
</Workspace> |
@@ -0,0 +1,8 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
<plist version="1.0"> | |||
<dict> | |||
<key>IDEDidComputeMac32BitWarning</key> | |||
<true/> | |||
</dict> | |||
</plist> |
@@ -0,0 +1,36 @@ | |||
// | |||
// AppDelegate.swift | |||
// wyy | |||
// | |||
// Created by 施书顺 on 2021/3/5. | |||
// | |||
import UIKit | |||
@main | |||
class AppDelegate: UIResponder, UIApplicationDelegate { | |||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { | |||
// Override point for customization after application launch. | |||
return true | |||
} | |||
// MARK: UISceneSession Lifecycle | |||
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { | |||
// Called when a new scene session is being created. | |||
// Use this method to select a configuration to create the new scene with. | |||
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) | |||
} | |||
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) { | |||
// Called when the user discards a scene session. | |||
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. | |||
// Use this method to release any resources that were specific to the discarded scenes, as they will not return. | |||
} | |||
} | |||
@@ -0,0 +1,11 @@ | |||
{ | |||
"colors" : [ | |||
{ | |||
"idiom" : "universal" | |||
} | |||
], | |||
"info" : { | |||
"author" : "xcode", | |||
"version" : 1 | |||
} | |||
} |
@@ -0,0 +1,98 @@ | |||
{ | |||
"images" : [ | |||
{ | |||
"idiom" : "iphone", | |||
"scale" : "2x", | |||
"size" : "20x20" | |||
}, | |||
{ | |||
"idiom" : "iphone", | |||
"scale" : "3x", | |||
"size" : "20x20" | |||
}, | |||
{ | |||
"idiom" : "iphone", | |||
"scale" : "2x", | |||
"size" : "29x29" | |||
}, | |||
{ | |||
"idiom" : "iphone", | |||
"scale" : "3x", | |||
"size" : "29x29" | |||
}, | |||
{ | |||
"idiom" : "iphone", | |||
"scale" : "2x", | |||
"size" : "40x40" | |||
}, | |||
{ | |||
"idiom" : "iphone", | |||
"scale" : "3x", | |||
"size" : "40x40" | |||
}, | |||
{ | |||
"idiom" : "iphone", | |||
"scale" : "2x", | |||
"size" : "60x60" | |||
}, | |||
{ | |||
"idiom" : "iphone", | |||
"scale" : "3x", | |||
"size" : "60x60" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"scale" : "1x", | |||
"size" : "20x20" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"scale" : "2x", | |||
"size" : "20x20" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"scale" : "1x", | |||
"size" : "29x29" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"scale" : "2x", | |||
"size" : "29x29" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"scale" : "1x", | |||
"size" : "40x40" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"scale" : "2x", | |||
"size" : "40x40" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"scale" : "1x", | |||
"size" : "76x76" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"scale" : "2x", | |||
"size" : "76x76" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"scale" : "2x", | |||
"size" : "83.5x83.5" | |||
}, | |||
{ | |||
"idiom" : "ios-marketing", | |||
"scale" : "1x", | |||
"size" : "1024x1024" | |||
} | |||
], | |||
"info" : { | |||
"author" : "xcode", | |||
"version" : 1 | |||
} | |||
} |
@@ -0,0 +1,6 @@ | |||
{ | |||
"info" : { | |||
"author" : "xcode", | |||
"version" : 1 | |||
} | |||
} |
@@ -0,0 +1,21 @@ | |||
{ | |||
"images" : [ | |||
{ | |||
"filename" : "album.png", | |||
"idiom" : "universal", | |||
"scale" : "1x" | |||
}, | |||
{ | |||
"idiom" : "universal", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"idiom" : "universal", | |||
"scale" : "3x" | |||
} | |||
], | |||
"info" : { | |||
"author" : "xcode", | |||
"version" : 1 | |||
} | |||
} |
@@ -0,0 +1,21 @@ | |||
{ | |||
"images" : [ | |||
{ | |||
"filename" : "album1.JPG", | |||
"idiom" : "universal", | |||
"scale" : "1x" | |||
}, | |||
{ | |||
"idiom" : "universal", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"idiom" : "universal", | |||
"scale" : "3x" | |||
} | |||
], | |||
"info" : { | |||
"author" : "xcode", | |||
"version" : 1 | |||
} | |||
} |
@@ -0,0 +1,21 @@ | |||
{ | |||
"images" : [ | |||
{ | |||
"filename" : "album2.JPG", | |||
"idiom" : "universal", | |||
"scale" : "1x" | |||
}, | |||
{ | |||
"idiom" : "universal", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"idiom" : "universal", | |||
"scale" : "3x" | |||
} | |||
], | |||
"info" : { | |||
"author" : "xcode", | |||
"version" : 1 | |||
} | |||
} |
@@ -0,0 +1,21 @@ | |||
{ | |||
"images" : [ | |||
{ | |||
"filename" : "album3.JPG", | |||
"idiom" : "universal", | |||
"scale" : "1x" | |||
}, | |||
{ | |||
"idiom" : "universal", | |||
"scale" : "2x" | |||
}, | |||
{ | |||
"idiom" : "universal", | |||
"scale" : "3x" | |||
} | |||
], | |||
"info" : { | |||
"author" : "xcode", | |||
"version" : 1 | |||
} | |||
} |