diff --git a/DZNEmptyDataSet.podspec b/DZNEmptyDataSet.podspec index 1eeb867b..791206e8 100644 --- a/DZNEmptyDataSet.podspec +++ b/DZNEmptyDataSet.podspec @@ -1,17 +1,28 @@ -@version = "1.8.1" +@version = '2.0' Pod::Spec.new do |s| - s.name = "DZNEmptyDataSet" - s.version = @version - s.summary = "A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display." - s.description = "It will work automatically, by just conforming to DZNEmptyDataSetSource, and returning the data you want to show. The -reloadData call will be observed so the empty dataset will be configured whenever needed." - s.homepage = "https://github.com/dzenbot/DZNEmptyDataSet" - s.license = { :type => 'MIT', :file => 'LICENSE' } - s.author = { "dzenbot" => "iromero@dzen.cl" } - s.ios.deployment_target = '6.0' - s.tvos.deployment_target = '9.0' - s.source = { :git => "https://github.com/dzenbot/DZNEmptyDataSet.git", :tag => "v#{s.version}" } - s.source_files = 'Classes', 'Source/**/*.{h,m}' - s.requires_arc = true - s.framework = "UIKit" + s.name = 'DZNEmptyDataSet' + s.version = @version + s.summary = 'A drop-in UITableView/UICollectionView superclass extension for displaying placeholders for whenever the view has no content to display.' + s.homepage = 'https://github.com/dzenbot/DZNEmptyDataSet' + s.license = { :type => 'MIT', :file => 'LICENSE' } + s.author = { 'Ignacio Romero Zurbuchen' => 'ignacio.romeroz@gmail.com' } + + s.source = { + :git => 'https://github.com/dzenbot/DZNEmptyDataSet.git', + :tag => 'v#{s.version}', + :branch => 'master' + } + + s.source_files = 'Source/*.{swift}' + s.preserve_paths = 'Source/*' + s.requires_arc = true + s.swift_versions = ['4.0', '5.0', '5.1'] + + s.ios.deployment_target = '11.0' + s.tvos.deployment_target = '11.0' + + s.ios.frameworks = 'UIKit' + s.tvos.frameworks = 'UIKit' + end diff --git a/DZNEmptyDataSet/Applications/AppDelegate.m b/DZNEmptyDataSet/Applications/AppDelegate.m index e61849d3..e1600fee 100644 --- a/DZNEmptyDataSet/Applications/AppDelegate.m +++ b/DZNEmptyDataSet/Applications/AppDelegate.m @@ -8,6 +8,7 @@ #import "AppDelegate.h" #import "MainViewController.h" +#import "Applications-Swift.h" @implementation AppDelegate diff --git a/DZNEmptyDataSet/Applications/Application.h b/DZNEmptyDataSet/Applications/Application.h index 358fe179..73bde9a7 100644 --- a/DZNEmptyDataSet/Applications/Application.h +++ b/DZNEmptyDataSet/Applications/Application.h @@ -8,6 +8,8 @@ #import +NS_ASSUME_NONNULL_BEGIN + typedef NS_ENUM(NSUInteger, ApplicationType) { ApplicationTypeUndefined = 0, @@ -46,8 +48,15 @@ typedef NS_ENUM(NSUInteger, ApplicationType) { @interface Application : NSObject @property (nonatomic, strong) NSString *displayName; @property (nonatomic, strong) NSString *developerName; -@property (nonatomic, strong) NSString *identifier; @property (nonatomic, strong) NSString *iconName; +@property (nonatomic, strong) NSString *barColor; +@property (nonatomic, strong) NSString *tintColor; +@property (nonatomic, strong) NSString *identifier; +@property (nonatomic, strong) NSString * _Nullable title; +@property (nonatomic, strong) NSString * _Nullable subtitle; +@property (nonatomic, strong) NSString * _Nullable button; +@property (nonatomic, strong) NSString * _Nullable backgroundColor; + @property (nonatomic) ApplicationType type; - (instancetype)initWithDictionary:(NSDictionary *)dict; @@ -56,3 +65,5 @@ typedef NS_ENUM(NSUInteger, ApplicationType) { + (NSArray *)applicationsFromJSON:(id)JSON; @end + +NS_ASSUME_NONNULL_END diff --git a/DZNEmptyDataSet/Applications/Application.m b/DZNEmptyDataSet/Applications/Application.m index 4513b1f0..67df486b 100644 --- a/DZNEmptyDataSet/Applications/Application.m +++ b/DZNEmptyDataSet/Applications/Application.m @@ -16,7 +16,13 @@ - (instancetype)initWithDictionary:(NSDictionary *)dict if (self) { self.displayName = dict[@"display_name"]; self.developerName = dict[@"developer_name"]; + self.barColor = dict[@"bar_color"]; + self.tintColor = dict[@"tint_color"]; self.identifier = dict[@"identifier"]; + self.title = dict[@"title"]; + self.subtitle = dict[@"subtitle"]; + self.button = dict[@"button"]; + self.backgroundColor = dict[@"background_color"]; } return self; } diff --git a/DZNEmptyDataSet/Applications/ApplicationViewController.swift b/DZNEmptyDataSet/Applications/ApplicationViewController.swift new file mode 100644 index 00000000..487ea18f --- /dev/null +++ b/DZNEmptyDataSet/Applications/ApplicationViewController.swift @@ -0,0 +1,366 @@ +// +// ApplicationViewController.swift +// Applications +// +// Created by Ignacio Romero Zurbuchen on 2020-01-02. +// Copyright © 2020 DZN. All rights reserved. +// + +import UIKit +import EmptyDataSet + +class ApplicationViewController: UIViewController { + + var app: Application? + + lazy var tableView: MyTableView = { + let view = MyTableView(frame: self.view.bounds, style: .plain) + view.autoresizingMask = [.flexibleWidth, .flexibleHeight] + view.dataSource = self + view.emptyDataSetSource = self + view.emptyDataSetDelegate = self + return view + }() + + @objc + convenience init(application: Application) { + self.init(nibName: nil, bundle: nil) + app = application + } + + override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { + super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() { + super.viewDidLoad() + + view.backgroundColor = .white + + view.addSubview(tableView) + + configureHeaderAndFooter() + configureNavigationBar() + + print("ApplicationViewController: \(self)") + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + super.setNeedsStatusBarAppearanceUpdate() + } + + func configureHeaderAndFooter() { + guard let app = app else { return } + + var imageName: String? + + if app.type == .typePinterest { + imageName = "header_pinterest" + } else if app.type == .typePodcasts { + imageName = "header_podcasts" + } + + if let imageName = imageName, let image = UIImage(named: imageName) { + let imageView = UIImageView(image: image) + + let frame = CGRect(origin: .zero, size: CGSize(width: view.bounds.width, height: image.size.height)) + let headerView = UIView(frame: frame) + imageView.center = headerView.center + headerView.addSubview(imageView) + + tableView.tableHeaderView = headerView + } + + tableView.tableFooterView = UIView() + } + + func configureNavigationBar() { + guard let app = app else { return } + + if let logoImage = UIImage(named: "logo_\(app.displayName.lowercased())") { + navigationItem.titleView = UIImageView(image: logoImage) + } else { + navigationItem.titleView = nil + navigationItem.title = app.displayName + } + + let barColor = UIColor(hex: app.barColor) + let tintColor = UIColor(hex: app.tintColor) + + navigationController?.navigationBar.titleTextAttributes = nil + navigationController?.navigationBar.barTintColor = barColor + navigationController?.navigationBar.tintColor = tintColor + } + + override var preferredStatusBarStyle: UIStatusBarStyle { + guard let app = app else { return .default } + + switch (app.type) { + case .type500px, + .typeCamera, + .typeFacebook, + .typeFancy, + .typeFoursquare, + .typeInstagram, + .typePath, + .typeSkype, + .typeTumblr, + .typeTwitter, + .typeVesper, + .typeVine: + return .lightContent + default: + return .default + } + } + + deinit { + print("ApplicationViewController -deinit") + } +} + +extension ApplicationViewController: UITableViewDataSource { + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return 0 + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + return UITableViewCell() + } +} + +extension ApplicationViewController: EmptyDataSetSource { + + func title(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? { + guard let app = app, let title = app.title else { return nil } + + var attributes = [NSAttributedString.Key: Any]() + + switch app.type { + case .type500px: + attributes[NSAttributedString.Key.font] = UIFont.systemFont(ofSize: 17, weight: .bold) + attributes[NSAttributedString.Key.foregroundColor] = UIColor(hex: "545454") + case .typeAirbnb: + attributes[NSAttributedString.Key.font] = UIFont(name: "HelveticaNeue-Light", size: 22) + attributes[NSAttributedString.Key.foregroundColor] = UIColor(hex: "c9c9c9") + default: + break + } + + return NSAttributedString(string: title, attributes: attributes) + } + + func description(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? { + guard let app = app, let subtitle = app.subtitle else { return nil } + + var attributes = [NSAttributedString.Key: Any]() + + switch app.type { + case .type500px: + attributes[NSAttributedString.Key.font] = UIFont.systemFont(ofSize: 15, weight: .bold) + attributes[NSAttributedString.Key.foregroundColor] = UIColor(hex: "545454") + case .typeAirbnb: + attributes[NSAttributedString.Key.font] = UIFont.systemFont(ofSize: 13, weight: .regular) + attributes[NSAttributedString.Key.foregroundColor] = UIColor(hex: "cfcfcf") + default: + break + } + + return NSAttributedString(string: subtitle, attributes: attributes) + } + + func image(forEmptyDataSet scrollView: UIScrollView) -> UIImage? { + guard let app = app else { return nil } + + let imageName = "placeholder_\(app.displayName.lowercased())".replacingOccurrences(of: " ", with: "_") + return UIImage(named: imageName) + } + + func backgroundColor(forEmptyDataSet scrollView: UIScrollView) -> UIColor? { + guard let app = app else { return nil } + return UIColor(hex: app.backgroundColor) + } +} + +extension ApplicationViewController: EmptyDataSetDelegate { + +} + + +//- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView +//{ +// NSString *text = nil; +// UIFont *font = nil; +// UIColor *textColor = nil; +// +// NSMutableDictionary *attributes = [NSMutableDictionary new]; +// +// switch (self.application.type) { + +// case ApplicationTypeCamera: +// { +// text = @"Please Allow Photo Access"; +// font = [UIFont boldSystemFontOfSize:18.0]; +// textColor = [UIColor colorWithHex:@"5f6978"]; +// break; +// } +// case ApplicationTypeDropbox: +// { +// text = @"Star Your Favorite Files"; +// font = [UIFont boldSystemFontOfSize:17.0]; +// textColor = [UIColor colorWithHex:@"25282b"]; +// break; +// } +// case ApplicationTypeFacebook: +// { +// text = @"No friends to show."; +// font = [UIFont boldSystemFontOfSize:22.0]; +// textColor = [UIColor colorWithHex:@"acafbd"]; +// +// NSShadow *shadow = [NSShadow new]; +// shadow.shadowColor = [UIColor whiteColor]; +// shadow.shadowOffset = CGSizeMake(0.0, 1.0); +// [attributes setObject:shadow forKey:NSShadowAttributeName]; +// break; +// } +// case ApplicationTypeFancy: +// { +// text = @"No Owns yet"; +// font = [UIFont boldSystemFontOfSize:14.0]; +// textColor = [UIColor colorWithHex:@"494c53"]; +// break; +// } +// case ApplicationTypeiCloud: +// { +// text = @"iCloud Photo Sharing"; +// break; +// } +// case ApplicationTypeInstagram: +// { +// text = @"Instagram Direct"; +// font = [UIFont fontWithName:@"HelveticaNeue-Light" size:26.0]; +// textColor = [UIColor colorWithHex:@"444444"]; +// break; +// } +// case ApplicationTypeiTunesConnect: +// { +// text = @"No Favorites"; +// font = [UIFont systemFontOfSize:22.0]; +// break; +// } +// case ApplicationTypeKickstarter: +// { +// text = @"Activity empty"; +// font = [UIFont boldSystemFontOfSize:16.0]; +// textColor = [UIColor colorWithHex:@"828587"]; +// [attributes setObject:@(-0.10) forKey:NSKernAttributeName]; +// break; +// } +// case ApplicationTypePath: +// { +// text = @"Message Your Friends"; +// font = [UIFont boldSystemFontOfSize:14.0]; +// textColor = [UIColor whiteColor]; +// break; +// } +// case ApplicationTypePinterest: +// { +// text = @"No boards to display"; +// font = [UIFont boldSystemFontOfSize:18.0]; +// textColor = [UIColor colorWithHex:@"666666"]; +// break; +// } +// case ApplicationTypePhotos: +// { +// text = @"No Photos or Videos"; +// break; +// } +// case ApplicationTypePodcasts: +// { +// text = @"No Podcasts"; +// break; +// } +// case ApplicationTypeRemote: +// { +// text = @"Cannot Connect to a Local Network"; +// font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:18.0]; +// textColor = [UIColor colorWithHex:@"555555"]; +// break; +// } +// case ApplicationTypeTumblr: +// { +// text = @"This is your Dashboard."; +// font = [UIFont boldSystemFontOfSize:18.0]; +// textColor = [UIColor colorWithHex:@"aab6c4"]; +// break; +// } +// case ApplicationTypeTwitter: +// { +// text = @"No lists"; +// font = [UIFont boldSystemFontOfSize:14.0]; +// textColor = [UIColor colorWithHex:@"292f33"]; +// break; +// } +// case ApplicationTypeVesper: +// { +// text = @"No Notes"; +// font = [UIFont fontWithName:@"IdealSans-Book-Pro" size:16.0]; +// textColor = [UIColor colorWithHex:@"d9dce1"]; +// break; +// } +// case ApplicationTypeVideos: +// { +// text = @"AirPlay"; +// font = [UIFont systemFontOfSize:17.0]; +// textColor = [UIColor colorWithHex:@"414141"]; +// break; +// } +// case ApplicationTypeVine: +// { +// text = @"Welcome to VMs"; +// font = [UIFont boldSystemFontOfSize:22.0]; +// textColor = [UIColor colorWithHex:@"595959"]; +// [attributes setObject:@(0.45) forKey:NSKernAttributeName]; +// break; +// } +// case ApplicationTypeWhatsapp: +// { +// text = @"No Media"; +// font = [UIFont systemFontOfSize:20.0]; +// textColor = [UIColor colorWithHex:@"808080"]; +// break; +// } +// case ApplicationTypeWWDC: +// { +// text = @"No Favorites"; +// font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:16.0]; +// textColor = [UIColor colorWithHex:@"b9b9b9"]; +// break; +// } +// default: +// return nil; +// } +// +// if (!text) { +// return nil; +// } +// +// if (font) [attributes setObject:font forKey:NSFontAttributeName]; +// if (textColor) [attributes setObject:textColor forKey:NSForegroundColorAttributeName]; +// +// return [[NSAttributedString alloc] initWithString:text attributes:attributes]; +//} + +class MyTableView: UITableView { + deinit { + print("deinit MyTableView") + emptyDataSetSource = nil + emptyDataSetDelegate = nil + } +} diff --git a/DZNEmptyDataSet/Applications/Applications-Bridging-Header.h b/DZNEmptyDataSet/Applications/Applications-Bridging-Header.h new file mode 100644 index 00000000..80ce0f5b --- /dev/null +++ b/DZNEmptyDataSet/Applications/Applications-Bridging-Header.h @@ -0,0 +1,6 @@ +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// + +#import "Application.h" +#import "UIColor+Hexadecimal.h" diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/Contents.json b/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/Contents.json index 72cba767..8f0d12f2 100644 --- a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -65,83 +65,9 @@ "scale" : "3x" }, { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "icon-29~ipad.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "icon-29@2x~ipad.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "icon-40~ipad.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "icon-40@2x~ipad.png", - "scale" : "2x" - }, - { - "size" : "50x50", - "idiom" : "ipad", - "filename" : "icon-50~ipad.png", - "scale" : "1x" - }, - { - "size" : "50x50", - "idiom" : "ipad", - "filename" : "icon-50@2x~ipad.png", - "scale" : "2x" - }, - { - "size" : "72x72", - "idiom" : "ipad", - "filename" : "icon-72~ipad.png", - "scale" : "1x" - }, - { - "size" : "72x72", - "idiom" : "ipad", - "filename" : "icon-72@2x~ipad.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "icon-76~ipad.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "icon-76@2x~ipad.png", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "83.5x83.5", - "scale" : "2x" - }, - { - "idiom" : "ios-marketing", "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "icon-1024.png", "scale" : "1x" } ], diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-1024.png new file mode 100644 index 00000000..a61f4698 Binary files /dev/null and b/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-1024.png differ diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-29@2x~ipad.png b/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-29@2x~ipad.png deleted file mode 100644 index 2a6a9fc3..00000000 Binary files a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-29@2x~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-29~ipad.png b/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-29~ipad.png deleted file mode 100644 index be8f8880..00000000 Binary files a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-29~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-40@2x~ipad.png b/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-40@2x~ipad.png deleted file mode 100644 index 46e92b4c..00000000 Binary files a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-40@2x~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-40~ipad.png b/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-40~ipad.png deleted file mode 100644 index c95b6fac..00000000 Binary files a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-40~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-50@2x~ipad.png b/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-50@2x~ipad.png deleted file mode 100644 index 98ba9bd2..00000000 Binary files a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-50@2x~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-50~ipad.png b/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-50~ipad.png deleted file mode 100644 index cc7f03c8..00000000 Binary files a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-50~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-72@2x~ipad.png b/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-72@2x~ipad.png deleted file mode 100644 index b8bfeee0..00000000 Binary files a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-72@2x~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-72~ipad.png b/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-72~ipad.png deleted file mode 100644 index 373b7cdc..00000000 Binary files a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-72~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-76@2x~ipad.png b/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-76@2x~ipad.png deleted file mode 100644 index 6efeacbf..00000000 Binary files a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-76@2x~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-76~ipad.png b/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-76~ipad.png deleted file mode 100644 index a68be4d3..00000000 Binary files a/DZNEmptyDataSet/Applications/Assets.xcassets/AppIcon.appiconset/icon-76~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage-2.launchimage/Contents.json b/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage-2.launchimage/Contents.json deleted file mode 100644 index a0ad363c..00000000 --- a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage-2.launchimage/Contents.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage-3.launchimage/Contents.json b/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage-3.launchimage/Contents.json deleted file mode 100644 index a0ad363c..00000000 --- a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage-3.launchimage/Contents.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Contents.json b/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index 0b4f0e13..00000000 --- a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "images" : [ - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "736h", - "filename" : "Default-hd-plus@2x.png", - "minimum-system-version" : "8.0", - "orientation" : "portrait", - "scale" : "3x" - }, - { - "orientation" : "landscape", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "8.0", - "subtype" : "736h", - "scale" : "3x" - }, - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "667h", - "filename" : "Default-hd@2x.png", - "minimum-system-version" : "8.0", - "orientation" : "portrait", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "Default@2x.png", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "retina4", - "filename" : "Default-568h@2x.png", - "minimum-system-version" : "7.0", - "orientation" : "portrait", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "Default.png", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "Default@2x-1.png", - "extent" : "full-screen", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "Default-568h@2x-1.png", - "extent" : "full-screen", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x-1.png b/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x-1.png deleted file mode 100644 index 5cb6dd23..00000000 Binary files a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x-1.png and /dev/null differ diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png b/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png deleted file mode 100644 index 5cb6dd23..00000000 Binary files a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png and /dev/null differ diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default-hd-plus@2x.png b/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default-hd-plus@2x.png deleted file mode 100644 index 93c8e1f1..00000000 Binary files a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default-hd-plus@2x.png and /dev/null differ diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default-hd@2x.png b/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default-hd@2x.png deleted file mode 100644 index 90df4f41..00000000 Binary files a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default-hd@2x.png and /dev/null differ diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default.png b/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default.png deleted file mode 100644 index 71a23a9e..00000000 Binary files a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default.png and /dev/null differ diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default@2x-1.png b/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default@2x-1.png deleted file mode 100644 index 8fff31fe..00000000 Binary files a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default@2x-1.png and /dev/null differ diff --git a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default@2x.png b/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default@2x.png deleted file mode 100644 index 8fff31fe..00000000 Binary files a/DZNEmptyDataSet/Applications/Assets.xcassets/LaunchImage.launchimage/Default@2x.png and /dev/null differ diff --git a/DZNEmptyDataSet/Applications/DetailViewController.m b/DZNEmptyDataSet/Applications/DetailViewController.m index 89687d86..fb68a2c3 100644 --- a/DZNEmptyDataSet/Applications/DetailViewController.m +++ b/DZNEmptyDataSet/Applications/DetailViewController.m @@ -9,11 +9,10 @@ #import "DetailViewController.h" #import "UIColor+Hexadecimal.h" -#import +@import DZNEmptyDataSet; @interface DetailViewController () @property (nonatomic, strong) Application *application; -@property (nonatomic, getter=isLoading) BOOL loading; @end @implementation DetailViewController @@ -56,132 +55,6 @@ - (void)viewWillAppear:(BOOL)animated - (void)configureNavigationBar { - UIColor *barColor = nil; - UIColor *tintColor = nil; - - self.navigationController.navigationBar.titleTextAttributes = nil; - - switch (self.application.type) { - case ApplicationType500px: - { - barColor = [UIColor colorWithHex:@"242424"]; - tintColor = [UIColor colorWithHex:@"d7d7d7"]; - break; - } - case ApplicationTypeAirbnb: - { - barColor = [UIColor colorWithHex:@"f8f8f8"]; - tintColor = [UIColor colorWithHex:@"08aeff"]; - break; - } - case ApplicationTypeCamera: - { - barColor = [UIColor colorWithHex:@"595959"]; - tintColor = [UIColor whiteColor]; - self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: tintColor}; - break; - } - case ApplicationTypeDropbox: - { - barColor = [UIColor whiteColor]; - tintColor = [UIColor colorWithHex:@"007ee5"]; - break; - } - case ApplicationTypeFacebook: - { - barColor = [UIColor colorWithHex:@"506da8"]; - tintColor = [UIColor whiteColor]; - break; - } - case ApplicationTypeFancy: - { - barColor = [UIColor colorWithHex:@"353b49"]; - tintColor = [UIColor colorWithHex:@"c4c7cb"]; - break; - } - case ApplicationTypeFoursquare: - { - barColor = [UIColor colorWithHex:@"00aeef"]; - tintColor = [UIColor whiteColor]; - break; - } - case ApplicationTypeInstagram: - { - barColor = [UIColor colorWithHex:@"2e5e86"]; - tintColor = [UIColor whiteColor]; - break; - } - case ApplicationTypeKickstarter: - { - barColor = [UIColor colorWithHex:@"f7f8f8"]; - tintColor = [UIColor colorWithHex:@"2bde73"]; - break; - } - case ApplicationTypePath: - { - barColor = [UIColor colorWithHex:@"544f49"]; - tintColor = [UIColor colorWithHex:@"fffff2"]; - break; - } - case ApplicationTypePinterest: - { - barColor = [UIColor colorWithHex:@"f4f4f4"]; - tintColor = [UIColor colorWithHex:@"cb2027"]; - break; - } - case ApplicationTypeSlack: - { - barColor = [UIColor colorWithHex:@"f4f5f6"]; - tintColor = [UIColor colorWithHex:@"3eba92"]; - break; - } - case ApplicationTypeSkype: - { - barColor = [UIColor colorWithHex:@"00aff0"]; - tintColor = [UIColor whiteColor]; - break; - } - case ApplicationTypeTumblr: - { - barColor = [UIColor colorWithHex:@"2e3e53"]; - tintColor = [UIColor whiteColor]; - break; - } - case ApplicationTypeTwitter: - { - barColor = [UIColor colorWithHex:@"58aef0"]; - tintColor = [UIColor whiteColor]; - break; - } - case ApplicationTypeVesper: - { - barColor = [UIColor colorWithHex:@"5e7d9a"]; - tintColor = [UIColor colorWithHex:@"f8f8f8"]; - break; - } - case ApplicationTypeVideos: - { - barColor = [UIColor colorWithHex:@"4a4b4d"]; - tintColor = [UIColor blackColor]; - break; - } - case ApplicationTypeVine: - { - barColor = [UIColor colorWithHex:@"00bf8f"]; - tintColor = [UIColor whiteColor]; - break; - } - case ApplicationTypeWWDC: - { - tintColor = [UIColor colorWithHex:@"fc6246"]; - break; - } - default: - barColor = [UIColor colorWithHex:@"f8f8f8"]; - tintColor = [UIApplication sharedApplication].keyWindow.tintColor; - break; - } - UIImage *logo = [UIImage imageNamed:[NSString stringWithFormat:@"logo_%@", [self.application.displayName lowercaseString]]]; if (logo) { @@ -191,7 +64,11 @@ - (void)configureNavigationBar self.navigationItem.titleView = nil; self.navigationItem.title = self.application.displayName; } - + + UIColor *barColor = [UIColor colorWithHex:self.application.barColor]; + UIColor *tintColor = [UIColor colorWithHex:self.application.tintColor]; + + self.navigationController.navigationBar.titleTextAttributes = nil; self.navigationController.navigationBar.barTintColor = barColor; self.navigationController.navigationBar.tintColor = tintColor; } @@ -296,17 +173,6 @@ - (Application *)randomApplication return [[self.applications filteredArrayUsingPredicate:query] firstObject]; } -- (void)setLoading:(BOOL)loading -{ - if (self.isLoading == loading) { - return; - } - - _loading = loading; - - [self.tableView reloadEmptyDataSet]; -} - #pragma mark - UITableViewDataSource Methods @@ -717,17 +583,10 @@ - (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView - (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView { - if (self.isLoading) { - return [UIImage imageNamed:@"loading_imgBlue_78x78" inBundle:[NSBundle bundleForClass:[self class]] compatibleWithTraitCollection:nil]; - } - else { - NSString *imageName = [[[NSString stringWithFormat:@"placeholder_%@", self.application.displayName] lowercaseString] - stringByReplacingOccurrencesOfString:@" " withString:@"_"]; - - UIImage *image = [UIImage imageNamed:imageName inBundle:[NSBundle bundleForClass:[self class]] compatibleWithTraitCollection:nil]; - - return image; - } + NSString *imageName = [[[NSString stringWithFormat:@"placeholder_%@", self.application.displayName] lowercaseString] + stringByReplacingOccurrencesOfString:@" " withString:@"_"]; + + return [UIImage imageNamed:imageName inBundle:[NSBundle bundleForClass:[self class]] compatibleWithTraitCollection:nil]; } - (CAAnimation *)imageAnimationForEmptyDataSet:(UIScrollView *)scrollView @@ -738,7 +597,6 @@ - (CAAnimation *)imageAnimationForEmptyDataSet:(UIScrollView *)scrollView animation.duration = 0.25; animation.cumulative = YES; animation.repeatCount = MAXFLOAT; - return animation; } @@ -922,27 +780,14 @@ - (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView return YES; } -- (BOOL)emptyDataSetShouldAnimateImageView:(UIScrollView *)scrollView -{ - return self.isLoading; -} - - (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view { - self.loading = YES; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - self.loading = NO; - }); + } - (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button { - self.loading = YES; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - self.loading = NO; - }); + } @end diff --git a/DZNEmptyDataSet/Applications/MainViewController.m b/DZNEmptyDataSet/Applications/MainViewController.m index d2438500..8889099e 100644 --- a/DZNEmptyDataSet/Applications/MainViewController.m +++ b/DZNEmptyDataSet/Applications/MainViewController.m @@ -8,12 +8,12 @@ #import "MainViewController.h" #import "UIColor+Hexadecimal.h" +#import "Applications-Swift.h" -#import +static BOOL isVersion2 = YES; -@interface MainViewController () +@interface MainViewController () @property (nonatomic, strong) NSArray *applications; -@property (nonatomic, strong) UISearchController *searchController; @end @implementation MainViewController @@ -34,13 +34,7 @@ - (void)viewDidLoad self.title = @"Applications"; self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:NULL]; - self.tableView.tableFooterView = [UIView new]; - - self.searchDisplayController.searchResultsTableView.emptyDataSetSource = self; - self.searchDisplayController.searchResultsTableView.emptyDataSetDelegate = self; - self.searchDisplayController.searchResultsTableView.tableFooterView = [UIView new]; - [self.searchDisplayController setValue:@"" forKey:@"noResultsMessage"]; } - (void)viewWillAppear:(BOOL)animated @@ -54,100 +48,6 @@ - (void)viewWillAppear:(BOOL)animated self.navigationController.navigationBar.barStyle = UIBarStyleDefault; } - -#pragma mark - Getters - -- (NSArray *)filteredApps -{ - UISearchBar *searchBar = self.searchDisplayController.searchBar; - - if ([searchBar isFirstResponder] && searchBar.text.length > 0) - { - NSPredicate *precidate = [NSPredicate predicateWithFormat:@"displayName CONTAINS[cd] %@", searchBar.text]; - return [self.applications filteredArrayUsingPredicate:precidate]; - } - return self.applications; -} - - -#pragma mark - DZNEmptyDataSetSource Methods - -- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView -{ - NSString *text = @"No Application Found"; - return [[NSAttributedString alloc] initWithString:text attributes:nil]; -} - -- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView -{ - UISearchBar *searchBar = self.searchDisplayController.searchBar; - - NSString *text = [NSString stringWithFormat:@"There are no empty dataset examples for \"%@\".", searchBar.text]; - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:text attributes:nil]; - - [attributedString addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:17.0] range:[attributedString.string rangeOfString:searchBar.text]]; - - return attributedString; -} - -- (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state -{ - NSString *text = @"Search on the App Store"; - UIFont *font = [UIFont systemFontOfSize:16.0]; - UIColor *textColor = [UIColor colorWithHex:(state == UIControlStateNormal) ? @"007aff" : @"c6def9"]; - - NSMutableDictionary *attributes = [NSMutableDictionary new]; - [attributes setObject:font forKey:NSFontAttributeName]; - [attributes setObject:textColor forKey:NSForegroundColorAttributeName]; - - return [[NSAttributedString alloc] initWithString:text attributes:attributes]; -} - -- (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView -{ - return [UIColor whiteColor]; -} - -- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView -{ - return -64.0; -} - -#pragma mark - DZNEmptyDataSetDelegate Methods - -- (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView -{ - return YES; -} - -- (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView -{ - return YES; -} - -- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView -{ - return YES; -} - -- (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view -{ - NSLog(@"%s",__FUNCTION__); -} - -- (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button -{ - - UISearchBar *searchBar = self.searchDisplayController.searchBar; - - NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.com/apps/%@", searchBar.text]]; - - if ([[UIApplication sharedApplication] canOpenURL:URL]) { - [[UIApplication sharedApplication] openURL:URL]; - } -} - - #pragma mark - UITableViewDataSource Methods - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView @@ -157,9 +57,7 @@ - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - NSInteger rowCount = [self filteredApps].count; - - return rowCount; + return self.applications.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath @@ -171,7 +69,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; } - Application *app = [[self filteredApps] objectAtIndex:indexPath.row]; + Application *app = self.applications[indexPath.row]; cell.textLabel.text = app.displayName; cell.detailTextLabel.text = app.developerName; @@ -195,100 +93,28 @@ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPa return 70.0; } - #pragma mark - UITableViewDelegate Methods - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - Application *app = [[self filteredApps] objectAtIndex:indexPath.row]; - DetailViewController *controller = [[DetailViewController alloc] initWithApplication:app]; - controller.applications = self.applications; - controller.allowShuffling = YES; - - if ([controller preferredStatusBarStyle] == UIStatusBarStyleLightContent) { - self.navigationController.navigationBar.barStyle = UIBarStyleBlack; - } - - [self.navigationController pushViewController:controller animated:YES]; -} - - -#pragma mark - UISearchBarDelegate Methods - -- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar -{ - return YES; -} - -- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar -{ - return YES; -} + Application *app = self.applications[indexPath.row]; -- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar -{ - // Do something -} + if (isVersion2) { + ApplicationViewController *controller = [[ApplicationViewController alloc] initWithApplication:app]; + [self.navigationController pushViewController:controller animated:YES]; + } else { + DetailViewController *controller = [[DetailViewController alloc] initWithApplication:app]; + controller.applications = self.applications; + controller.allowShuffling = YES; -- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar -{ - // Do something -} + if ([controller preferredStatusBarStyle] == UIStatusBarStyleLightContent) { + self.navigationController.navigationBar.barStyle = UIBarStyleBlack; + } -- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar -{ - // Do something -} - -- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar -{ - // Do something -} - -- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText -{ - // Do something -} - - -#pragma mark - UISearchDisplayDelegate Methods - -- (void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller -{ - // Do something -} - -- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller -{ - // Do something -} - -- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView -{ - // Do something -} - -- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView -{ - // Do something -} - - -#pragma mark - View Auto-Rotation - -- (UIStatusBarStyle)preferredStatusBarStyle -{ - return UIStatusBarStyleDefault; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskAll; -} + [self.navigationController pushViewController:controller animated:YES]; + } -- (BOOL)shouldAutorotate -{ - return YES; + NSLog(@"viewControllers.count = %lu", (unsigned long)self.navigationController.viewControllers.count); } @end diff --git a/DZNEmptyDataSet/Applications/Supporting Files/Info.plist b/DZNEmptyDataSet/Applications/Supporting Files/Info.plist index 7b0138cd..647a546a 100644 --- a/DZNEmptyDataSet/Applications/Supporting Files/Info.plist +++ b/DZNEmptyDataSet/Applications/Supporting Files/Info.plist @@ -36,8 +36,6 @@ UISupportedInterfaceOrientations UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight UIViewControllerBasedStatusBarAppearance diff --git a/DZNEmptyDataSet/Applications/Supporting Files/Storyboard.storyboard b/DZNEmptyDataSet/Applications/Supporting Files/Storyboard.storyboard index e1d0c79f..b8e517aa 100644 --- a/DZNEmptyDataSet/Applications/Supporting Files/Storyboard.storyboard +++ b/DZNEmptyDataSet/Applications/Supporting Files/Storyboard.storyboard @@ -1,11 +1,9 @@ - - - - + + - + @@ -17,32 +15,23 @@ - - - - - - - - - - + - + - - - - - diff --git a/DZNEmptyDataSet/Applications/UIColor+Hexadecimal.m b/DZNEmptyDataSet/Applications/UIColor+Hexadecimal.m index c2036edd..d5cbf21c 100644 --- a/DZNEmptyDataSet/Applications/UIColor+Hexadecimal.m +++ b/DZNEmptyDataSet/Applications/UIColor+Hexadecimal.m @@ -12,6 +12,8 @@ @implementation UIColor (Hexadecimal) + (UIColor *)colorWithHex:(NSString *)string { + if (string.length == 0) { return nil; } + NSString *cleanString = [string stringByReplacingOccurrencesOfString:@"#" withString:@""]; if([cleanString length] == 3) { cleanString = [NSString stringWithFormat:@"%@%@%@%@%@%@", diff --git a/DZNEmptyDataSet/Applications/applications.json b/DZNEmptyDataSet/Applications/applications.json index 82e8787d..81533ce0 100644 --- a/DZNEmptyDataSet/Applications/applications.json +++ b/DZNEmptyDataSet/Applications/applications.json @@ -2,136 +2,199 @@ { "display_name": "500px", "developer_name": "500px", - "identifier": "471965292" + "bar_color": "242424", + "tint_color": "d7d7d7", + "identifier": "471965292", + "title": "No Photos", + "subtitle": "Get started by uploading a photo.", + "button": "", + "background_color": "000000" }, { "display_name": "Airbnb", "developer_name": "Airbnb, Inc.", - "identifier": "401626263" + "bar_color": "f8f8f8", + "tint_color": "08aeff", + "identifier": "401626263", + "title": "No Messages", + "subtitle": "When you have messages, you’ll see them here.", + "button": "", + "background_color": "ffffff" + }, { "display_name": "AppStore", "developer_name": "Apple, Inc.", + "bar_color": "f8f8f8", + "tint_color": "", "identifier": "" }, { "display_name": "Camera", "developer_name": "Apple, Inc.", + "bar_color": "595959", + "tint_color": "ffffff", "identifier": "" }, { "display_name": "Dropbox", "developer_name": "Dropbox, Inc.", + "bar_color": "ffffff", + "tint_color": "007ee5", "identifier": "327630330" }, { "display_name": "Facebook", "developer_name": "Facebook, Inc.", + "bar_color": "506da8", + "tint_color": "ffffff", "identifier": "284882215" }, { "display_name": "Fancy", "developer_name": "Thing Daemon, Inc.", + "bar_color": "353b49", + "tint_color": "c4c7cb", "identifier": "407324335" }, { "display_name": "Foursquare", "developer_name": "Foursquare Labs", + "bar_color": "00aeef", + "tint_color": "ffffff", "identifier": "306934924" }, { "display_name": "iCloud", "developer_name": "Apple, Inc.", + "bar_color": "f8f8f8", + "tint_color": "", "identifier": "" }, { "display_name": "Instagram", "developer_name": "Instagram, Inc.", + "bar_color": "2e5e86", + "tint_color": "ffffff", "identifier": "389801252" }, { "display_name": "iTunes Connect", "developer_name": "Apple, Inc.", + "bar_color": "f8f8f8", + "tint_color": "", "identifier": "376771144" }, { "display_name": "Kickstarter", "developer_name": "Kickstarter, Inc.", + "bar_color": "f7f8f8", + "tint_color": "2bde73", "identifier": "596961532" }, { "display_name": "Path", "developer_name": "Path, Inc.", + "bar_color": "544f49", + "tint_color": "fffff2", "identifier": "403639508" }, { "display_name": "Pinterest", "developer_name": "Pinterest, Inc.", + "bar_color": "f4f4f4", + "tint_color": "cb2027", "identifier": "429047995" }, { "display_name": "Photos", "developer_name": "Apple, Inc.", + "bar_color": "f8f8f8", + "tint_color": "", "identifier": "" }, { "display_name": "Podcasts", "developer_name": "Apple, Inc.", + "bar_color": "f8f8f8", + "tint_color": "", "identifier": "525463029" }, { "display_name": "Remote", "developer_name": "Apple, Inc.", + "bar_color": "f8f8f8", + "tint_color": "", "identifier": "284417350" }, { "display_name": "Safari", "developer_name": "Apple, Inc.", + "bar_color": "f8f8f8", + "tint_color": "", "identifier": "" }, { "display_name": "Skype", "developer_name": "Skype Communications S.a.r.l", + "bar_color": "00aff0", + "tint_color": "ffffff", "identifier": "304878510" }, { "display_name": "Slack", "developer_name": "Tiny Speck, Inc.", + "bar_color": "f4f5f6", + "tint_color": "3eba92", "identifier": "618783545" }, { "display_name": "Tumblr", "developer_name": "Tumblr, Inc.", + "bar_color": "f8f8f8", + "tint_color": "", "identifier": "305343404" }, { "display_name": "Twitter", "developer_name": "Twitter, Inc.", + "bar_color": "2e3e53", + "tint_color": "ffffff", "identifier": "333903271" }, { "display_name": "Vesper", "developer_name": "Q Branch", + "bar_color": "5e7d9a", + "tint_color": "f8f8f8", "identifier": "655895325" }, { "display_name": "Videos", "developer_name": "Apple, Inc.", + "bar_color": "4a4b4d", + "tint_color": "000000", "identifier": "" }, { "display_name": "Vine", "developer_name": "Vine Labs, Inc.", + "bar_color": "00bf8f", + "tint_color": "ffffff", "identifier": "592447445" }, { "display_name": "WhatsApp", "developer_name": "WhatsApp, Inc.", + "bar_color": "f8f8f8", + "tint_color": "", "identifier": "310633997" }, { "display_name": "WWDC", "developer_name": "Apple, Inc.", + "bar_color": "fc6246", + "tint_color": "", "identifier": "640199958" }, -] \ No newline at end of file +] diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/Contents.json b/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/Contents.json index d043ceef..8f0d12f2 100644 --- a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -65,84 +65,9 @@ "scale" : "3x" }, { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "icon-29~ipad.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "icon-29@2x~ipad.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "icon-40~ipad.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "icon-40@2x~ipad.png", - "scale" : "2x" - }, - { - "size" : "50x50", - "idiom" : "ipad", - "filename" : "icon-50~ipad.png", - "scale" : "1x" - }, - { - "size" : "50x50", - "idiom" : "ipad", - "filename" : "icon-50@2x~ipad.png", - "scale" : "2x" - }, - { - "size" : "72x72", - "idiom" : "ipad", - "filename" : "icon-72~ipad.png", - "scale" : "1x" - }, - { - "size" : "72x72", - "idiom" : "ipad", - "filename" : "icon-72@2x~ipad.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "icon-76~ipad.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "icon-76@2x~ipad.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "icon-120~car.png", - "scale" : "2x" - }, - { - "idiom" : "ios-marketing", "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "icon-1024.png", "scale" : "1x" } ], diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-1024.png new file mode 100644 index 00000000..bc62f2a8 Binary files /dev/null and b/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-1024.png differ diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-120~car.png b/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-120~car.png deleted file mode 100644 index a88f27bf..00000000 Binary files a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-120~car.png and /dev/null differ diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-29@2x~ipad.png b/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-29@2x~ipad.png deleted file mode 100644 index 512acd5a..00000000 Binary files a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-29@2x~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-29~ipad.png b/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-29~ipad.png deleted file mode 100644 index 2b9da15c..00000000 Binary files a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-29~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-40@2x~ipad.png b/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-40@2x~ipad.png deleted file mode 100644 index f4f015c5..00000000 Binary files a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-40@2x~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-40~ipad.png b/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-40~ipad.png deleted file mode 100644 index c70364b1..00000000 Binary files a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-40~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-50@2x~ipad.png b/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-50@2x~ipad.png deleted file mode 100644 index ed3c8710..00000000 Binary files a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-50@2x~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-50~ipad.png b/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-50~ipad.png deleted file mode 100644 index 2f9c5bbe..00000000 Binary files a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-50~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-72@2x~ipad.png b/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-72@2x~ipad.png deleted file mode 100644 index 041a6788..00000000 Binary files a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-72@2x~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-72~ipad.png b/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-72~ipad.png deleted file mode 100644 index cc742f3c..00000000 Binary files a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-72~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-76@2x~ipad.png b/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-76@2x~ipad.png deleted file mode 100644 index a46f09b6..00000000 Binary files a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-76@2x~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-76~ipad.png b/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-76~ipad.png deleted file mode 100644 index 53490c78..00000000 Binary files a/DZNEmptyDataSet/Colors/Assets.xcassets/AppIcon.appiconset/icon-76~ipad.png and /dev/null differ diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/Contents.json b/DZNEmptyDataSet/Colors/Assets.xcassets/Contents.json new file mode 100644 index 00000000..da4a164c --- /dev/null +++ b/DZNEmptyDataSet/Colors/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/LaunchImage.launchimage/Contents.json b/DZNEmptyDataSet/Colors/Assets.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index acf54f94..00000000 --- a/DZNEmptyDataSet/Colors/Assets.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "images" : [ - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "736h", - "filename" : "Default-hd-plus@2x.png", - "minimum-system-version" : "8.0", - "orientation" : "portrait", - "scale" : "3x" - }, - { - "orientation" : "landscape", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "8.0", - "subtype" : "736h", - "scale" : "3x" - }, - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "667h", - "filename" : "Default-hd@2x.png", - "minimum-system-version" : "8.0", - "orientation" : "portrait", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "filename" : "Default@2x.png", - "scale" : "2x" - }, - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "retina4", - "filename" : "Default-568h@2x.png", - "minimum-system-version" : "7.0", - "orientation" : "portrait", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png b/DZNEmptyDataSet/Colors/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png deleted file mode 100644 index 449199ff..00000000 Binary files a/DZNEmptyDataSet/Colors/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png and /dev/null differ diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/LaunchImage.launchimage/Default-hd-plus@2x.png b/DZNEmptyDataSet/Colors/Assets.xcassets/LaunchImage.launchimage/Default-hd-plus@2x.png deleted file mode 100644 index a99cdf33..00000000 Binary files a/DZNEmptyDataSet/Colors/Assets.xcassets/LaunchImage.launchimage/Default-hd-plus@2x.png and /dev/null differ diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/LaunchImage.launchimage/Default-hd@2x.png b/DZNEmptyDataSet/Colors/Assets.xcassets/LaunchImage.launchimage/Default-hd@2x.png deleted file mode 100644 index b7c97e49..00000000 Binary files a/DZNEmptyDataSet/Colors/Assets.xcassets/LaunchImage.launchimage/Default-hd@2x.png and /dev/null differ diff --git a/DZNEmptyDataSet/Colors/Assets.xcassets/LaunchImage.launchimage/Default@2x.png b/DZNEmptyDataSet/Colors/Assets.xcassets/LaunchImage.launchimage/Default@2x.png deleted file mode 100644 index 6ce251c9..00000000 Binary files a/DZNEmptyDataSet/Colors/Assets.xcassets/LaunchImage.launchimage/Default@2x.png and /dev/null differ diff --git a/DZNEmptyDataSet/Colors/CollectionViewController.m b/DZNEmptyDataSet/Colors/CollectionViewController.m index fc362a41..2971dda3 100644 --- a/DZNEmptyDataSet/Colors/CollectionViewController.m +++ b/DZNEmptyDataSet/Colors/CollectionViewController.m @@ -7,11 +7,11 @@ // #import "CollectionViewController.h" -#import "SearchViewController.h" +#import "DetailViewController.h" #import "Palette.h" #import "Color.h" -#import +@import DZNEmptyDataSet; #define kColumnCountMax 7 #define kColumnCountMin 5 @@ -117,7 +117,7 @@ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"collection_push_detail"]) { - SearchViewController *controller = [segue destinationViewController]; + DetailViewController *controller = [segue destinationViewController]; controller.selectedColor = sender; } } @@ -271,29 +271,4 @@ - (void)collectionView:(UICollectionView *)collectionView performAction:(SEL)act }); } - -#pragma mark - View Auto-Rotation - -- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration -{ - if (![UIInputViewController class]) { - [self.collectionView reloadData]; - } -} - -- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id)coordinator -{ - [self.collectionView reloadData]; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskAll; -} - -- (BOOL)shouldAutorotate -{ - return YES; -} - @end diff --git a/DZNEmptyDataSet/Colors/SearchViewController.h b/DZNEmptyDataSet/Colors/DetailViewController.h similarity index 86% rename from DZNEmptyDataSet/Colors/SearchViewController.h rename to DZNEmptyDataSet/Colors/DetailViewController.h index f49e11a5..1c11aba9 100644 --- a/DZNEmptyDataSet/Colors/SearchViewController.h +++ b/DZNEmptyDataSet/Colors/DetailViewController.h @@ -1,5 +1,5 @@ // -// SearchViewController.h +// DetailViewController.h // Colors // // Created by Ignacio Romero Z. on 7/4/14. @@ -10,7 +10,7 @@ @class Color; -@interface SearchViewController : UIViewController +@interface DetailViewController : UIViewController @property (nonatomic, strong) Color *selectedColor; diff --git a/DZNEmptyDataSet/Colors/DetailViewController.m b/DZNEmptyDataSet/Colors/DetailViewController.m new file mode 100644 index 00000000..b1746733 --- /dev/null +++ b/DZNEmptyDataSet/Colors/DetailViewController.m @@ -0,0 +1,89 @@ +// +// DetailViewController.m +// Colors +// +// Created by Ignacio Romero Z. on 7/4/14. +// Copyright (c) 2014 DZN Labs. All rights reserved. +// + +#import "DetailViewController.h" +#import "Palette.h" +#import "Color.h" + +@interface DetailViewController () +@end + +@implementation DetailViewController + +#pragma mark - View lifecycle + +- (void)awakeFromNib +{ + [super awakeFromNib]; +} + +- (void)loadView +{ + [super loadView]; + + self.title = @"Detail"; + + for (UIView *subview in self.view.subviews) { + subview.autoresizingMask = UIViewAutoresizingNone; + } +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + [self updateLayoutAnimatedWithDuration:0.0]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + + [self updateContent]; +} + + +#pragma mark - Actions + +- (void)updateLayoutAnimatedWithDuration:(NSTimeInterval)duration +{ + [UIView beginAnimations:@"" context:nil]; + [UIView setAnimationDuration:duration]; + [UIView setAnimationBeginsFromCurrentState:YES]; + + self.colorView.frame = CGRectMake(60.0, 130.0, 200.0, 200.0); + self.nameLabel.frame = CGRectMake(20.0, 350.0, 280.0, 35.0); + self.hexLabel.frame = CGRectMake(120.0, 420.0, 140.0, 20.0); + self.rgbLabel.frame = CGRectMake(120.0, 450.0, 140.0, 20.0); + self.hexLegend.frame = CGRectMake(60.0, 420.0, 60.0, 20.0); + self.rgbLegend.frame = CGRectMake(60.0, 450.0, 60.0, 20.0); + + self.nameLabel.textAlignment = NSTextAlignmentCenter; + + [UIView commitAnimations]; +} + +- (void)updateContent +{ + BOOL hide = self.selectedColor ? NO : YES; + + self.colorView.hidden = hide; + self.nameLabel.hidden = hide; + self.hexLabel.hidden = hide; + self.rgbLabel.hidden = hide; + self.hexLegend.hidden = hide; + self.rgbLegend.hidden = hide; + + self.colorView.image = [Color roundImageForSize:self.colorView.frame.size withColor:self.selectedColor.color]; + + self.nameLabel.text = self.selectedColor.name; + self.hexLabel.text = [NSString stringWithFormat:@"#%@", self.selectedColor.hex]; + self.rgbLabel.text = self.selectedColor.rgb; +} + +@end diff --git a/DZNEmptyDataSet/Colors/Info.plist b/DZNEmptyDataSet/Colors/Info.plist index 95aa2a6a..6c2bd692 100644 --- a/DZNEmptyDataSet/Colors/Info.plist +++ b/DZNEmptyDataSet/Colors/Info.plist @@ -31,8 +31,6 @@ UISupportedInterfaceOrientations UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight diff --git a/DZNEmptyDataSet/Colors/SearchViewController.m b/DZNEmptyDataSet/Colors/SearchViewController.m deleted file mode 100644 index 00daa570..00000000 --- a/DZNEmptyDataSet/Colors/SearchViewController.m +++ /dev/null @@ -1,349 +0,0 @@ -// -// SearchViewController.m -// Colors -// -// Created by Ignacio Romero Z. on 7/4/14. -// Copyright (c) 2014 DZN Labs. All rights reserved. -// - -#import "SearchViewController.h" -#import "Palette.h" -#import "Color.h" - -#import - -@interface SearchViewController () -@property (nonatomic, strong) NSArray *searchResult; -@property (nonatomic, getter = isShowingLandscape) BOOL showingLandscape; -@end - -@implementation SearchViewController - -#pragma mark - View lifecycle - -- (void)awakeFromNib -{ - [super awakeFromNib]; - - self.title = @"Search"; - self.tabBarItem = [[UITabBarItem alloc] initWithTitle:self.title image:[UIImage imageNamed:@"tab_search"] tag:self.title.hash]; -} - -- (void)loadView -{ - [super loadView]; - - if ([self.navigationController.viewControllers count] == 1) { - self.searchDisplayController.displaysSearchBarInNavigationBar = YES; - } - else { - self.title = @"Detail"; - } - - self.searchDisplayController.searchResultsTableView.emptyDataSetSource = self; - self.searchDisplayController.searchResultsTableView.emptyDataSetDelegate = self; - - self.searchDisplayController.searchBar.placeholder = @"Search color"; - self.searchDisplayController.searchResultsTableView.tableFooterView = [UIView new]; - [self.searchDisplayController setValue:@"" forKey:@"_noResultsMessage"]; - - for (UIView *subview in self.view.subviews) { - subview.autoresizingMask = UIViewAutoresizingNone; - } -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.showingLandscape = UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation); - [self updateLayoutAnimatedWithDuration:0.0]; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - - [self updateContent]; -} - - -#pragma mark - Getters - -- (NSArray *)searchResult -{ - if (_searchResult) { - return _searchResult; - } - - NSString *searchString = self.searchDisplayController.searchBar.text; - - if (searchString.length == 0) { - return nil; - } - - NSArray *colors = [[Palette sharedPalette] colors]; - NSPredicate *precidate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@ || hex CONTAINS[cd] %@", searchString, searchString]; - - _searchResult = [colors filteredArrayUsingPredicate:precidate]; - - return _searchResult; -} - - -#pragma mark - Actions - -- (void)updateLayoutAnimatedWithDuration:(NSTimeInterval)duration -{ - [UIView beginAnimations:@"" context:nil]; - [UIView setAnimationDuration:duration]; - [UIView setAnimationBeginsFromCurrentState:YES]; - - if (self.showingLandscape) { - self.colorView.frame = CGRectMake(45.0, 88.0, 160.0, 160.0); - self.nameLabel.frame = CGRectMake(240.0, 114.0, 280.0, 35.0); - self.hexLabel.frame = CGRectMake(300.0, 170.0, 140.0, 20.0); - self.rgbLabel.frame = CGRectMake(300.0, 200.0, 140.0, 20.0); - self.hexLegend.frame = CGRectMake(240.0, 170.0, 60.0, 20.0); - self.rgbLegend.frame = CGRectMake(240.0, 200.0, 60.0, 20.0); - - self.nameLabel.textAlignment = NSTextAlignmentLeft; - } - else { - self.colorView.frame = CGRectMake(60.0, 130.0, 200.0, 200.0); - self.nameLabel.frame = CGRectMake(20.0, 350.0, 280.0, 35.0); - self.hexLabel.frame = CGRectMake(120.0, 420.0, 140.0, 20.0); - self.rgbLabel.frame = CGRectMake(120.0, 450.0, 140.0, 20.0); - self.hexLegend.frame = CGRectMake(60.0, 420.0, 60.0, 20.0); - self.rgbLegend.frame = CGRectMake(60.0, 450.0, 60.0, 20.0); - - self.nameLabel.textAlignment = NSTextAlignmentCenter; - } - - [UIView commitAnimations]; -} - -- (void)updateContent -{ - BOOL hide = self.selectedColor ? NO : YES; - - self.colorView.hidden = hide; - self.nameLabel.hidden = hide; - self.hexLabel.hidden = hide; - self.rgbLabel.hidden = hide; - self.hexLegend.hidden = hide; - self.rgbLegend.hidden = hide; - - self.colorView.image = [Color roundImageForSize:self.colorView.frame.size withColor:self.selectedColor.color]; - - self.nameLabel.text = self.selectedColor.name; - self.hexLabel.text = [NSString stringWithFormat:@"#%@", self.selectedColor.hex]; - self.rgbLabel.text = self.selectedColor.rgb; -} - -- (void)adjustToDeviceOrientation -{ - self.showingLandscape = UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation); - [self updateLayoutAnimatedWithDuration:0.25]; - - [self.searchDisplayController.searchResultsTableView reloadEmptyDataSet]; -} - - -#pragma mark - DZNEmptyDataSetSource Methods - -- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView -{ - NSString *text = @"No colors Found"; - - NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; - paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; - paragraphStyle.alignment = NSTextAlignmentCenter; - - NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:17.0], - NSForegroundColorAttributeName: [UIColor colorWithRed:170/255.0 green:171/255.0 blue:179/255.0 alpha:1.0], - NSParagraphStyleAttributeName: paragraphStyle}; - - return [[NSMutableAttributedString alloc] initWithString:text attributes:attributes]; -} - -- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView -{ - NSString *text = @"Make sure that all words are\nspelled correctly."; - - NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; - paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; - paragraphStyle.alignment = NSTextAlignmentCenter; - - NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:15.0], - NSForegroundColorAttributeName: [UIColor colorWithRed:170/255.0 green:171/255.0 blue:179/255.0 alpha:1.0], - NSParagraphStyleAttributeName: paragraphStyle}; - - return [[NSMutableAttributedString alloc] initWithString:text attributes:attributes]; -} - -- (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state -{ - NSString *text = @"Add a New Color"; - UIColor *color = nil; - - if (state == UIControlStateNormal) color = [UIColor colorWithRed:44/255.0 green:137/255.0 blue:202/255.0 alpha:1.0]; - if (state == UIControlStateHighlighted) color = [UIColor colorWithRed:106/255.0 green:187/255.0 blue:227/255.0 alpha:1.0]; - - NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; - paragraphStyle.alignment = NSTextAlignmentCenter; - - NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:14.0], - NSForegroundColorAttributeName: color, - NSParagraphStyleAttributeName: paragraphStyle}; - - return [[NSMutableAttributedString alloc] initWithString:text attributes:attributes]; -} - -- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView -{ - if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) { - return nil; - } - return [UIImage imageNamed:@"search_icon"]; -} - -- (UIColor *)imageTintColorForEmptyDataSet:(UIScrollView *)scrollView -{ - return [UIColor grayColor]; -} - -- (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView -{ - return [UIColor whiteColor]; -} - -- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView -{ - return nil; -} - - -#pragma mark - DZNEmptyDataSetSource Methods - -- (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView -{ - return YES; -} - -- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView -{ - return NO; -} - -- (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view -{ - - [self.searchDisplayController setActive:NO animated:YES]; -} - -- (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button -{ - NSLog(@"%s",__FUNCTION__); -} - - -#pragma mark - UITableViewDataSource Methods - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return self.searchResult.count; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *CellIdentifier = @"Cell"; - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - - if (!cell) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; - cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; - cell.selectionStyle = UITableViewCellSelectionStyleDefault; - cell.selectedBackgroundView = [UIView new]; - cell.selectedBackgroundView.backgroundColor = [UIColor colorWithWhite:0.95 alpha:1.0]; - cell.textLabel.textColor = [UIColor colorWithWhite:0.125 alpha:1.0]; - cell.detailTextLabel.textColor = [UIColor colorWithWhite:0.5 alpha:1.0]; - } - - Color *color = self.searchResult[indexPath.row]; - - cell.textLabel.text = color.name; - cell.detailTextLabel.text = [NSString stringWithFormat:@"#%@", color.hex]; - - cell.imageView.image = [Color roundThumbWithColor:color.color]; - - return cell; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return 56.0; -} - - -#pragma mark - UITableViewDelegate Methods - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - self.selectedColor = self.searchResult[indexPath.row]; - [self updateContent]; - - [self.searchDisplayController setActive:NO animated:YES]; -} - - -#pragma mark - UISearchDisplayControllerDelegate Methods - -- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString -{ - _searchResult = nil; - - return YES; -} - -- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView -{ - // Do something -} - -- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView -{ - // Do something -} - - -#pragma mark - View Auto-Rotation - -- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration -{ - if (![self respondsToSelector:@selector(willTransitionToTraitCollection:withTransitionCoordinator:)]) { - [self adjustToDeviceOrientation]; - } -} - -- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id)coordinator -{ - [self adjustToDeviceOrientation]; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskAll; -} - -- (BOOL)shouldAutorotate -{ - return YES; -} - -@end diff --git a/DZNEmptyDataSet/Colors/Storyboard.storyboard b/DZNEmptyDataSet/Colors/Storyboard.storyboard index 377da234..7811b329 100755 --- a/DZNEmptyDataSet/Colors/Storyboard.storyboard +++ b/DZNEmptyDataSet/Colors/Storyboard.storyboard @@ -1,11 +1,9 @@ - - - - + + - + @@ -22,12 +20,11 @@ - - + @@ -67,7 +64,7 @@ - + @@ -102,49 +99,53 @@ - + - + - + + + + + - + - - - - - - - - - - - - - - - - - - - + @@ -193,7 +176,7 @@ - + @@ -203,7 +186,7 @@ - + @@ -212,7 +195,7 @@ - + @@ -222,33 +205,9 @@ - - - - - - - - - - - - - - - - - - - - + - - - - - diff --git a/DZNEmptyDataSet/Colors/TableViewController.m b/DZNEmptyDataSet/Colors/TableViewController.m index 781f3722..e7bbdf26 100644 --- a/DZNEmptyDataSet/Colors/TableViewController.m +++ b/DZNEmptyDataSet/Colors/TableViewController.m @@ -7,11 +7,11 @@ // #import "TableViewController.h" -#import "SearchViewController.h" +#import "DetailViewController.h" #import "Palette.h" #import "Color.h" -#import +@import DZNEmptyDataSet; @interface TableViewController () @end @@ -62,7 +62,7 @@ - (IBAction)removeColors:(id)sender - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"table_push_detail"]) { - SearchViewController *controller = [segue destinationViewController]; + DetailViewController *controller = [segue destinationViewController]; controller.selectedColor = sender; } } diff --git a/DZNEmptyDataSet/DZNEmptyDataSet.xcodeproj/project.pbxproj b/DZNEmptyDataSet/DZNEmptyDataSet.xcodeproj/project.pbxproj index c7e201b9..7ca93664 100644 --- a/DZNEmptyDataSet/DZNEmptyDataSet.xcodeproj/project.pbxproj +++ b/DZNEmptyDataSet/DZNEmptyDataSet.xcodeproj/project.pbxproj @@ -7,13 +7,39 @@ objects = { /* Begin PBXBuildFile section */ + 166785C29B6C017532F9BA5B /* Pods_Applications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1B820B46A35C2CCC62125F08 /* Pods_Applications.framework */; }; 3AC13C2C04A330F6731CD271 /* Pods_DZNEmptyDataSetTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C5DC4B343BE997FFAA0048 /* Pods_DZNEmptyDataSetTests.framework */; }; + 3B12888038B2AA7F321565FC /* Pods_Bento.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A616CBACE16863851A421398 /* Pods_Bento.framework */; }; + 3FF250E1FED243B2337A1DF9 /* Pods_EmptyDataSet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB8442C77998FDE8BE3D6A37 /* Pods_EmptyDataSet.framework */; }; + 4F9DB7A823D433FE00570483 /* EmptyDataSet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4FA1AAFF23BC296B007CF389 /* EmptyDataSet.framework */; }; + 4FA1AAE923BC28F2007CF389 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1AAE823BC28F2007CF389 /* AppDelegate.swift */; }; + 4FA1AAEB23BC28F2007CF389 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1AAEA23BC28F2007CF389 /* SceneDelegate.swift */; }; + 4FA1AAED23BC28F2007CF389 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1AAEC23BC28F2007CF389 /* ViewController.swift */; }; + 4FA1AAF023BC28F2007CF389 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4FA1AAEE23BC28F2007CF389 /* Main.storyboard */; }; + 4FA1AAF223BC28F3007CF389 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4FA1AAF123BC28F3007CF389 /* Assets.xcassets */; }; + 4FA1AAF523BC28F3007CF389 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4FA1AAF323BC28F3007CF389 /* LaunchScreen.storyboard */; }; + 4FA1AB0323BC296B007CF389 /* DZNEmptyDataSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FA1AB0123BC296B007CF389 /* DZNEmptyDataSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4FA1AB0C23BC2991007CF389 /* EmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F59DA4E23BC1F060059733C /* EmptyDataSet.swift */; }; + 4FA1AB0D23BC29D2007CF389 /* EmptyDataSet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4FA1AAFF23BC296B007CF389 /* EmptyDataSet.framework */; }; + 4FA1AB0F23BC2BC9007CF389 /* EmptyDataSetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1AB0E23BC2BC9007CF389 /* EmptyDataSetView.swift */; }; + 4FA1AB1123BC2C20007CF389 /* EmptyDataSetImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1AB1023BC2C20007CF389 /* EmptyDataSetImpl.swift */; }; + 4FA1AB1423BD3645007CF389 /* EmptyDataSetSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1AB1323BD3645007CF389 /* EmptyDataSetSource.swift */; }; + 4FA1AB1623BD3679007CF389 /* EmptyDataSetDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1AB1523BD3679007CF389 /* EmptyDataSetDelegate.swift */; }; + 4FA1AB1823BD67B3007CF389 /* DisplayEmptyDataSetTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1AB1723BD67B3007CF389 /* DisplayEmptyDataSetTests.swift */; }; + 4FA1AB1B23BDF332007CF389 /* DetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1AB1923BDF331007CF389 /* DetailViewController.m */; }; + 4FA1AB1C23BE74F0007CF389 /* EmptyDataSet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4FA1AAFF23BC296B007CF389 /* EmptyDataSet.framework */; }; + 4FA1AB1F23BE76A2007CF389 /* UIScrollView+EmptyDataSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FA1AB1D23BE76A2007CF389 /* UIScrollView+EmptyDataSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4FA1AB2023BE76A2007CF389 /* UIScrollView+EmptyDataSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1AB1E23BE76A2007CF389 /* UIScrollView+EmptyDataSet.m */; }; + 4FA1AB2423BE771F007CF389 /* DZNEmptyDataSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FA1AB2223BE771F007CF389 /* DZNEmptyDataSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4FA1AB2523BE7A10007CF389 /* EmptyDataSet.swift in Headers */ = {isa = PBXBuildFile; fileRef = 4F59DA4E23BC1F060059733C /* EmptyDataSet.swift */; settings = {ATTRIBUTES = (Public, ); }; }; + 4FA1AB2623BE7A10007CF389 /* EmptyDataSetSource.swift in Headers */ = {isa = PBXBuildFile; fileRef = 4FA1AB1323BD3645007CF389 /* EmptyDataSetSource.swift */; settings = {ATTRIBUTES = (Public, ); }; }; + 4FA1AB2723BE7A10007CF389 /* EmptyDataSetDelegate.swift in Headers */ = {isa = PBXBuildFile; fileRef = 4FA1AB1523BD3679007CF389 /* EmptyDataSetDelegate.swift */; settings = {ATTRIBUTES = (Public, ); }; }; + 4FA1AB2823BE7A10007CF389 /* EmptyDataSetView.swift in Headers */ = {isa = PBXBuildFile; fileRef = 4FA1AB0E23BC2BC9007CF389 /* EmptyDataSetView.swift */; }; + 4FA1AB2923BE7A10007CF389 /* EmptyDataSetImpl.swift in Headers */ = {isa = PBXBuildFile; fileRef = 4FA1AB1023BC2C20007CF389 /* EmptyDataSetImpl.swift */; }; + 4FA1AB2C23BEC6D9007CF389 /* ApplicationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1AB2B23BEC6D9007CF389 /* ApplicationViewController.swift */; }; F56CEC4B1E67430000E2FACA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F58A3E7F1E66B62F0086E0EF /* Assets.xcassets */; }; F58A3E3C1E66AEE90086E0EF /* DZNEmptyDataSet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F58A3E321E66AEE90086E0EF /* DZNEmptyDataSet.framework */; }; F58A3E411E66AEE90086E0EF /* ApplicationsSnapshotTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F58A3E401E66AEE90086E0EF /* ApplicationsSnapshotTests.m */; }; - F58A3E431E66AEE90086E0EF /* DZNEmptyDataSet.h in Headers */ = {isa = PBXBuildFile; fileRef = F58A3E351E66AEE90086E0EF /* DZNEmptyDataSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F58A3E4E1E66AF400086E0EF /* UIScrollView+EmptyDataSet.h in Headers */ = {isa = PBXBuildFile; fileRef = F58A3E4C1E66AF400086E0EF /* UIScrollView+EmptyDataSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F58A3E4F1E66AF400086E0EF /* UIScrollView+EmptyDataSet.m in Sources */ = {isa = PBXBuildFile; fileRef = F58A3E4D1E66AF400086E0EF /* UIScrollView+EmptyDataSet.m */; }; F58A3E931E66B62F0086E0EF /* Application.m in Sources */ = {isa = PBXBuildFile; fileRef = F58A3E7B1E66B62F0086E0EF /* Application.m */; }; F58A3E951E66B62F0086E0EF /* applications.json in Resources */ = {isa = PBXBuildFile; fileRef = F58A3E7E1E66B62F0086E0EF /* applications.json */; }; F58A3E961E66B62F0086E0EF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F58A3E7F1E66B62F0086E0EF /* Assets.xcassets */; }; @@ -24,7 +50,6 @@ F58A3E9C1E66B62F0086E0EF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F58A3E8B1E66B62F0086E0EF /* LaunchScreen.storyboard */; }; F58A3E9F1E66B62F0086E0EF /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F58A3E901E66B62F0086E0EF /* main.m */; }; F58A3EA01E66B62F0086E0EF /* UIColor+Hexadecimal.m in Sources */ = {isa = PBXBuildFile; fileRef = F58A3E921E66B62F0086E0EF /* UIColor+Hexadecimal.m */; }; - F58A3EA31E66B6C70086E0EF /* Applications-Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = F58A3EA21E66B6C70086E0EF /* Applications-Prefix.pch */; }; F58A3EA51E66B6D70086E0EF /* Storyboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F58A3EA41E66B6D70086E0EF /* Storyboard.storyboard */; }; F58A3EA81E66B6F10086E0EF /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F58A3EA71E66B6F10086E0EF /* AppDelegate.m */; }; F58A3EA91E66B7940086E0EF /* DZNEmptyDataSet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F58A3E321E66AEE90086E0EF /* DZNEmptyDataSet.framework */; }; @@ -41,7 +66,6 @@ F5BE154C1E713E9300F6FBEA /* colors.json in Resources */ = {isa = PBXBuildFile; fileRef = F5BE15411E713E9300F6FBEA /* colors.json */; }; F5BE154D1E713E9300F6FBEA /* Palette.m in Sources */ = {isa = PBXBuildFile; fileRef = F5BE15431E713E9300F6FBEA /* Palette.m */; }; F5BE154E1E713E9300F6FBEA /* UIColor+Hex.m in Sources */ = {isa = PBXBuildFile; fileRef = F5BE15451E713E9300F6FBEA /* UIColor+Hex.m */; }; - F5BE154F1E713E9300F6FBEA /* SearchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F5BE15471E713E9300F6FBEA /* SearchViewController.m */; }; F5BE15501E713E9300F6FBEA /* TableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F5BE15491E713E9300F6FBEA /* TableViewController.m */; }; F5BE15521E713E9B00F6FBEA /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F5BE15511E713E9B00F6FBEA /* Images.xcassets */; }; F5BE15561E713EC800F6FBEA /* Storyboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F5BE15551E713EC800F6FBEA /* Storyboard.storyboard */; }; @@ -66,20 +90,48 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 1C26D4C95382E14DAC506EE2 /* Pods-EmptyDataSetTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-EmptyDataSetTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests.debug.xcconfig"; sourceTree = ""; }; + 08CB8787A6FE35C35EF64E97 /* Pods-Applications.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Applications.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Applications/Pods-Applications.debug.xcconfig"; sourceTree = ""; }; + 0964B6B448E0388404127D2C /* Pods-Bento.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Bento.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Bento/Pods-Bento.debug.xcconfig"; sourceTree = ""; }; + 1B820B46A35C2CCC62125F08 /* Pods_Applications.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Applications.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 23BB766D928F8635A201F389 /* Pods_EmptyDataSetTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_EmptyDataSetTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 35391D2768B732E0C798EDE8 /* Pods-EmptyDataSet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-EmptyDataSet.debug.xcconfig"; path = "Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet.debug.xcconfig"; sourceTree = ""; }; 3B3456B9A6D72D48F19A7F61 /* Pods-DZNEmptyDataSetTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DZNEmptyDataSetTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests.debug.xcconfig"; sourceTree = ""; }; + 4F59DA4E23BC1F060059733C /* EmptyDataSet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyDataSet.swift; sourceTree = ""; }; + 4FA1AAE623BC28F2007CF389 /* Bento.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Bento.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 4FA1AAE823BC28F2007CF389 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 4FA1AAEA23BC28F2007CF389 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 4FA1AAEC23BC28F2007CF389 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 4FA1AAEF23BC28F2007CF389 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 4FA1AAF123BC28F3007CF389 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 4FA1AAF423BC28F3007CF389 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 4FA1AAF623BC28F3007CF389 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 4FA1AAFF23BC296B007CF389 /* EmptyDataSet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EmptyDataSet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4FA1AB0123BC296B007CF389 /* DZNEmptyDataSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DZNEmptyDataSet.h; sourceTree = ""; }; + 4FA1AB0223BC296B007CF389 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 4FA1AB0E23BC2BC9007CF389 /* EmptyDataSetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyDataSetView.swift; sourceTree = ""; }; + 4FA1AB1023BC2C20007CF389 /* EmptyDataSetImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyDataSetImpl.swift; sourceTree = ""; }; + 4FA1AB1323BD3645007CF389 /* EmptyDataSetSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyDataSetSource.swift; sourceTree = ""; }; + 4FA1AB1523BD3679007CF389 /* EmptyDataSetDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyDataSetDelegate.swift; sourceTree = ""; }; + 4FA1AB1723BD67B3007CF389 /* DisplayEmptyDataSetTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayEmptyDataSetTests.swift; sourceTree = ""; }; + 4FA1AB1923BDF331007CF389 /* DetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DetailViewController.m; sourceTree = ""; }; + 4FA1AB1A23BDF332007CF389 /* DetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DetailViewController.h; sourceTree = ""; }; + 4FA1AB1D23BE76A2007CF389 /* UIScrollView+EmptyDataSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+EmptyDataSet.h"; sourceTree = ""; }; + 4FA1AB1E23BE76A2007CF389 /* UIScrollView+EmptyDataSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+EmptyDataSet.m"; sourceTree = ""; }; + 4FA1AB2123BE771F007CF389 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 4FA1AB2223BE771F007CF389 /* DZNEmptyDataSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DZNEmptyDataSet.h; sourceTree = ""; }; + 4FA1AB2A23BEC6D9007CF389 /* Applications-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Applications-Bridging-Header.h"; sourceTree = ""; }; + 4FA1AB2B23BEC6D9007CF389 /* ApplicationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationViewController.swift; sourceTree = ""; }; 78C5DC4B343BE997FFAA0048 /* Pods_DZNEmptyDataSetTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DZNEmptyDataSetTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 80429DE569A05F9D34CC30C7 /* Pods-Bento.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Bento.release.xcconfig"; path = "Pods/Target Support Files/Pods-Bento/Pods-Bento.release.xcconfig"; sourceTree = ""; }; 84189CEC4210484C1F24D3A8 /* Pods-DZNEmptyDataSetTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DZNEmptyDataSetTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests.release.xcconfig"; sourceTree = ""; }; - DC2B63699C936D9C9CDB1740 /* Pods-EmptyDataSetTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-EmptyDataSetTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests.release.xcconfig"; sourceTree = ""; }; + 8A3065E7E54480E6A729ACA3 /* Pods-EmptyDataSet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-EmptyDataSet.release.xcconfig"; path = "Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet.release.xcconfig"; sourceTree = ""; }; + A616CBACE16863851A421398 /* Pods_Bento.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Bento.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BB8442C77998FDE8BE3D6A37 /* Pods_EmptyDataSet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_EmptyDataSet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EA4364DC724FC0552FA06E59 /* Pods-Applications.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Applications.release.xcconfig"; path = "Pods/Target Support Files/Pods-Applications/Pods-Applications.release.xcconfig"; sourceTree = ""; }; F58A3E321E66AEE90086E0EF /* DZNEmptyDataSet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DZNEmptyDataSet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F58A3E351E66AEE90086E0EF /* DZNEmptyDataSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DZNEmptyDataSet.h; sourceTree = ""; }; - F58A3E361E66AEE90086E0EF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; F58A3E3B1E66AEE90086E0EF /* DZNEmptyDataSetTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DZNEmptyDataSetTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; F58A3E401E66AEE90086E0EF /* ApplicationsSnapshotTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ApplicationsSnapshotTests.m; sourceTree = ""; }; F58A3E421E66AEE90086E0EF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F58A3E4C1E66AF400086E0EF /* UIScrollView+EmptyDataSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+EmptyDataSet.h"; path = "../../Source/UIScrollView+EmptyDataSet.h"; sourceTree = ""; }; - F58A3E4D1E66AF400086E0EF /* UIScrollView+EmptyDataSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+EmptyDataSet.m"; path = "../../Source/UIScrollView+EmptyDataSet.m"; sourceTree = ""; }; F58A3E631E66B5410086E0EF /* Applications.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Applications.app; sourceTree = BUILT_PRODUCTS_DIR; }; F58A3E7A1E66B62F0086E0EF /* Application.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Application.h; sourceTree = ""; }; F58A3E7B1E66B62F0086E0EF /* Application.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Application.m; sourceTree = ""; }; @@ -117,8 +169,6 @@ F5BE15431E713E9300F6FBEA /* Palette.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Palette.m; sourceTree = ""; }; F5BE15441E713E9300F6FBEA /* UIColor+Hex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+Hex.h"; sourceTree = ""; }; F5BE15451E713E9300F6FBEA /* UIColor+Hex.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+Hex.m"; sourceTree = ""; }; - F5BE15461E713E9300F6FBEA /* SearchViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SearchViewController.h; sourceTree = ""; }; - F5BE15471E713E9300F6FBEA /* SearchViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SearchViewController.m; sourceTree = ""; }; F5BE15481E713E9300F6FBEA /* TableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TableViewController.h; sourceTree = ""; }; F5BE15491E713E9300F6FBEA /* TableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TableViewController.m; sourceTree = ""; }; F5BE15511E713E9B00F6FBEA /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; @@ -126,6 +176,23 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 4FA1AAE323BC28F2007CF389 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4FA1AB0D23BC29D2007CF389 /* EmptyDataSet.framework in Frameworks */, + 3B12888038B2AA7F321565FC /* Pods_Bento.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4FA1AAFC23BC296B007CF389 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3FF250E1FED243B2337A1DF9 /* Pods_EmptyDataSet.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; F58A3E2E1E66AEE90086E0EF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -137,6 +204,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4FA1AB1C23BE74F0007CF389 /* EmptyDataSet.framework in Frameworks */, F58A3E3C1E66AEE90086E0EF /* DZNEmptyDataSet.framework in Frameworks */, 3AC13C2C04A330F6731CD271 /* Pods_DZNEmptyDataSetTests.framework in Frameworks */, ); @@ -146,7 +214,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4F9DB7A823D433FE00570483 /* EmptyDataSet.framework in Frameworks */, F58A3EA91E66B7940086E0EF /* DZNEmptyDataSet.framework in Frameworks */, + 166785C29B6C017532F9BA5B /* Pods_Applications.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -164,19 +234,55 @@ 242E9BB031D3264D62C731D6 /* Pods */ = { isa = PBXGroup; children = ( - 1C26D4C95382E14DAC506EE2 /* Pods-EmptyDataSetTests.debug.xcconfig */, - DC2B63699C936D9C9CDB1740 /* Pods-EmptyDataSetTests.release.xcconfig */, 3B3456B9A6D72D48F19A7F61 /* Pods-DZNEmptyDataSetTests.debug.xcconfig */, 84189CEC4210484C1F24D3A8 /* Pods-DZNEmptyDataSetTests.release.xcconfig */, + 0964B6B448E0388404127D2C /* Pods-Bento.debug.xcconfig */, + 80429DE569A05F9D34CC30C7 /* Pods-Bento.release.xcconfig */, + 35391D2768B732E0C798EDE8 /* Pods-EmptyDataSet.debug.xcconfig */, + 8A3065E7E54480E6A729ACA3 /* Pods-EmptyDataSet.release.xcconfig */, + 08CB8787A6FE35C35EF64E97 /* Pods-Applications.debug.xcconfig */, + EA4364DC724FC0552FA06E59 /* Pods-Applications.release.xcconfig */, ); name = Pods; sourceTree = ""; }; + 4FA1AAE723BC28F2007CF389 /* Sample - Bento */ = { + isa = PBXGroup; + children = ( + 4FA1AAE823BC28F2007CF389 /* AppDelegate.swift */, + 4FA1AAEA23BC28F2007CF389 /* SceneDelegate.swift */, + 4FA1AAEC23BC28F2007CF389 /* ViewController.swift */, + 4FA1AAEE23BC28F2007CF389 /* Main.storyboard */, + 4FA1AAF123BC28F3007CF389 /* Assets.xcassets */, + 4FA1AAF323BC28F3007CF389 /* LaunchScreen.storyboard */, + 4FA1AAF623BC28F3007CF389 /* Info.plist */, + ); + path = "Sample - Bento"; + sourceTree = ""; + }; + 4FA1AB0023BC296B007CF389 /* EmptyDataSet */ = { + isa = PBXGroup; + children = ( + 4FA1AB0123BC296B007CF389 /* DZNEmptyDataSet.h */, + 4F59DA4E23BC1F060059733C /* EmptyDataSet.swift */, + 4FA1AB1323BD3645007CF389 /* EmptyDataSetSource.swift */, + 4FA1AB1523BD3679007CF389 /* EmptyDataSetDelegate.swift */, + 4FA1AB0E23BC2BC9007CF389 /* EmptyDataSetView.swift */, + 4FA1AB1023BC2C20007CF389 /* EmptyDataSetImpl.swift */, + 4FA1AB0223BC296B007CF389 /* Info.plist */, + ); + name = EmptyDataSet; + path = ../Source/Swift; + sourceTree = ""; + }; A7CC5E0B0809CA256BDA9067 /* Frameworks */ = { isa = PBXGroup; children = ( 23BB766D928F8635A201F389 /* Pods_EmptyDataSetTests.framework */, 78C5DC4B343BE997FFAA0048 /* Pods_DZNEmptyDataSetTests.framework */, + A616CBACE16863851A421398 /* Pods_Bento.framework */, + BB8442C77998FDE8BE3D6A37 /* Pods_EmptyDataSet.framework */, + 1B820B46A35C2CCC62125F08 /* Pods_Applications.framework */, ); name = Frameworks; sourceTree = ""; @@ -184,10 +290,12 @@ F58A3E281E66AEE90086E0EF = { isa = PBXGroup; children = ( - F58A3E341E66AEE90086E0EF /* DZNEmptyDataSet */, F58A3E3F1E66AEE90086E0EF /* DZNEmptyDataSetTests */, + 4FA1AAE723BC28F2007CF389 /* Sample - Bento */, F58A3E641E66B5410086E0EF /* Sample - Applications */, F5BE15261E713E2100F6FBEA /* Sample - Colors */, + F58A3E341E66AEE90086E0EF /* DZNEmptyDataSet */, + 4FA1AB0023BC296B007CF389 /* EmptyDataSet */, F58A3E331E66AEE90086E0EF /* Products */, 242E9BB031D3264D62C731D6 /* Pods */, A7CC5E0B0809CA256BDA9067 /* Frameworks */, @@ -201,6 +309,8 @@ F58A3E3B1E66AEE90086E0EF /* DZNEmptyDataSetTests.xctest */, F58A3E631E66B5410086E0EF /* Applications.app */, F5BE15251E713E2100F6FBEA /* Colors.app */, + 4FA1AAE623BC28F2007CF389 /* Bento.app */, + 4FA1AAFF23BC296B007CF389 /* EmptyDataSet.framework */, ); name = Products; sourceTree = ""; @@ -208,18 +318,20 @@ F58A3E341E66AEE90086E0EF /* DZNEmptyDataSet */ = { isa = PBXGroup; children = ( - F58A3E351E66AEE90086E0EF /* DZNEmptyDataSet.h */, - F58A3E4C1E66AF400086E0EF /* UIScrollView+EmptyDataSet.h */, - F58A3E4D1E66AF400086E0EF /* UIScrollView+EmptyDataSet.m */, - F58A3E361E66AEE90086E0EF /* Info.plist */, + 4FA1AB2223BE771F007CF389 /* DZNEmptyDataSet.h */, + 4FA1AB1D23BE76A2007CF389 /* UIScrollView+EmptyDataSet.h */, + 4FA1AB1E23BE76A2007CF389 /* UIScrollView+EmptyDataSet.m */, + 4FA1AB2123BE771F007CF389 /* Info.plist */, ); - path = DZNEmptyDataSet; + name = DZNEmptyDataSet; + path = ../Source/Objc; sourceTree = ""; }; F58A3E3F1E66AEE90086E0EF /* DZNEmptyDataSetTests */ = { isa = PBXGroup; children = ( F58A3E401E66AEE90086E0EF /* ApplicationsSnapshotTests.m */, + 4FA1AB1723BD67B3007CF389 /* DisplayEmptyDataSetTests.swift */, F58A3E421E66AEE90086E0EF /* Info.plist */, ); path = DZNEmptyDataSetTests; @@ -234,12 +346,14 @@ F58A3E881E66B62F0086E0EF /* MainViewController.m */, F58A3E801E66B62F0086E0EF /* DetailViewController.h */, F58A3E811E66B62F0086E0EF /* DetailViewController.m */, + 4FA1AB2B23BEC6D9007CF389 /* ApplicationViewController.swift */, F58A3E7A1E66B62F0086E0EF /* Application.h */, F58A3E7B1E66B62F0086E0EF /* Application.m */, F58A3E911E66B62F0086E0EF /* UIColor+Hexadecimal.h */, F58A3E921E66B62F0086E0EF /* UIColor+Hexadecimal.m */, F58A3EA11E66B6970086E0EF /* Resources */, F58A3E8A1E66B62F0086E0EF /* Supporting Files */, + 4FA1AB2A23BEC6D9007CF389 /* Applications-Bridging-Header.h */, ); name = "Sample - Applications"; path = Applications; @@ -300,10 +414,10 @@ F5BE152B1E713E2100F6FBEA /* AppDelegate.m */, F5BE153C1E713E9300F6FBEA /* CollectionViewController.h */, F5BE153D1E713E9300F6FBEA /* CollectionViewController.m */, - F5BE15461E713E9300F6FBEA /* SearchViewController.h */, - F5BE15471E713E9300F6FBEA /* SearchViewController.m */, F5BE15481E713E9300F6FBEA /* TableViewController.h */, F5BE15491E713E9300F6FBEA /* TableViewController.m */, + 4FA1AB1A23BDF332007CF389 /* DetailViewController.h */, + 4FA1AB1923BDF331007CF389 /* DetailViewController.m */, F5BE153E1E713E9300F6FBEA /* DataSource */, F5BE15551E713EC800F6FBEA /* Storyboard.storyboard */, F5BE15511E713E9B00F6FBEA /* Images.xcassets */, @@ -341,19 +455,69 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ + 4FA1AAFA23BC296B007CF389 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4FA1AB0323BC296B007CF389 /* DZNEmptyDataSet.h in Headers */, + 4FA1AB2523BE7A10007CF389 /* EmptyDataSet.swift in Headers */, + 4FA1AB2623BE7A10007CF389 /* EmptyDataSetSource.swift in Headers */, + 4FA1AB2723BE7A10007CF389 /* EmptyDataSetDelegate.swift in Headers */, + 4FA1AB2823BE7A10007CF389 /* EmptyDataSetView.swift in Headers */, + 4FA1AB2923BE7A10007CF389 /* EmptyDataSetImpl.swift in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; F58A3E2F1E66AEE90086E0EF /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - F58A3EA31E66B6C70086E0EF /* Applications-Prefix.pch in Headers */, - F58A3E431E66AEE90086E0EF /* DZNEmptyDataSet.h in Headers */, - F58A3E4E1E66AF400086E0EF /* UIScrollView+EmptyDataSet.h in Headers */, + 4FA1AB1F23BE76A2007CF389 /* UIScrollView+EmptyDataSet.h in Headers */, + 4FA1AB2423BE771F007CF389 /* DZNEmptyDataSet.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 4FA1AAE523BC28F2007CF389 /* Bento */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4FA1AAF723BC28F3007CF389 /* Build configuration list for PBXNativeTarget "Bento" */; + buildPhases = ( + 5C0F88490C790BF71E5724B6 /* [CP] Check Pods Manifest.lock */, + 4FA1AAE223BC28F2007CF389 /* Sources */, + 4FA1AAE323BC28F2007CF389 /* Frameworks */, + 4FA1AAE423BC28F2007CF389 /* Resources */, + 048F0CBC9CE92A3F2651D3C2 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Bento; + productName = Bento; + productReference = 4FA1AAE623BC28F2007CF389 /* Bento.app */; + productType = "com.apple.product-type.application"; + }; + 4FA1AAFE23BC296B007CF389 /* EmptyDataSet */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4FA1AB0823BC296B007CF389 /* Build configuration list for PBXNativeTarget "EmptyDataSet" */; + buildPhases = ( + 6444A841F00E85DDECD9DB6C /* [CP] Check Pods Manifest.lock */, + 4FA1AAFA23BC296B007CF389 /* Headers */, + 4FA1AAFB23BC296B007CF389 /* Sources */, + 4FA1AAFC23BC296B007CF389 /* Frameworks */, + 4FA1AAFD23BC296B007CF389 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = EmptyDataSet; + productName = EmptyDataSet; + productReference = 4FA1AAFF23BC296B007CF389 /* EmptyDataSet.framework */; + productType = "com.apple.product-type.framework"; + }; F58A3E311E66AEE90086E0EF /* DZNEmptyDataSet */ = { isa = PBXNativeTarget; buildConfigurationList = F58A3E461E66AEE90086E0EF /* Build configuration list for PBXNativeTarget "DZNEmptyDataSet" */; @@ -397,9 +561,11 @@ isa = PBXNativeTarget; buildConfigurationList = F58A3E791E66B5410086E0EF /* Build configuration list for PBXNativeTarget "Applications" */; buildPhases = ( + 2F3341A4DF9A1B96AAFD80A9 /* [CP] Check Pods Manifest.lock */, F58A3E5F1E66B5410086E0EF /* Sources */, F58A3E601E66B5410086E0EF /* Frameworks */, F58A3E611E66B5410086E0EF /* Resources */, + FFB179DA559B93229CB438FE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -437,8 +603,17 @@ LastUpgradeCheck = 1130; ORGANIZATIONNAME = DZN; TargetAttributes = { + 4FA1AAE523BC28F2007CF389 = { + CreatedOnToolsVersion = 11.3; + ProvisioningStyle = Automatic; + }; + 4FA1AAFE23BC296B007CF389 = { + CreatedOnToolsVersion = 11.3; + ProvisioningStyle = Automatic; + }; F58A3E311E66AEE90086E0EF = { CreatedOnToolsVersion = 8.2.1; + LastSwiftMigration = 1130; ProvisioningStyle = Manual; }; F58A3E3A1E66AEE90086E0EF = { @@ -448,6 +623,7 @@ }; F58A3E621E66B5410086E0EF = { CreatedOnToolsVersion = 8.2.1; + LastSwiftMigration = 1130; ProvisioningStyle = Manual; }; F5BE15241E713E2100F6FBEA = { @@ -469,15 +645,34 @@ projectDirPath = ""; projectRoot = ""; targets = ( + 4FA1AAFE23BC296B007CF389 /* EmptyDataSet */, F58A3E311E66AEE90086E0EF /* DZNEmptyDataSet */, F58A3E3A1E66AEE90086E0EF /* DZNEmptyDataSetTests */, F58A3E621E66B5410086E0EF /* Applications */, F5BE15241E713E2100F6FBEA /* Colors */, + 4FA1AAE523BC28F2007CF389 /* Bento */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 4FA1AAE423BC28F2007CF389 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4FA1AAF523BC28F3007CF389 /* LaunchScreen.storyboard in Resources */, + 4FA1AAF223BC28F3007CF389 /* Assets.xcassets in Resources */, + 4FA1AAF023BC28F2007CF389 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4FA1AAFD23BC296B007CF389 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; F58A3E301E66AEE90086E0EF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -522,6 +717,90 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 048F0CBC9CE92A3F2651D3C2 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Bento/Pods-Bento-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Bento/Pods-Bento-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 2F3341A4DF9A1B96AAFD80A9 /* [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-Applications-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; + }; + 5C0F88490C790BF71E5724B6 /* [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-Bento-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; + }; + 6444A841F00E85DDECD9DB6C /* [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-EmptyDataSet-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; + }; DDD9C9F5302171B78206FE07 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -529,10 +808,12 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework", "${BUILT_PRODUCTS_DIR}/iOSSnapshotTestCase/FBSnapshotTestCase.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBSnapshotTestCase.framework", ); runOnlyForDeploymentPostprocessing = 0; @@ -562,14 +843,54 @@ 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; }; + FFB179DA559B93229CB438FE /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Applications/Pods-Applications-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Applications/Pods-Applications-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 4FA1AAE223BC28F2007CF389 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4FA1AAED23BC28F2007CF389 /* ViewController.swift in Sources */, + 4FA1AAE923BC28F2007CF389 /* AppDelegate.swift in Sources */, + 4FA1AAEB23BC28F2007CF389 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4FA1AAFB23BC296B007CF389 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4FA1AB1623BD3679007CF389 /* EmptyDataSetDelegate.swift in Sources */, + 4FA1AB1123BC2C20007CF389 /* EmptyDataSetImpl.swift in Sources */, + 4FA1AB1423BD3645007CF389 /* EmptyDataSetSource.swift in Sources */, + 4FA1AB0C23BC2991007CF389 /* EmptyDataSet.swift in Sources */, + 4FA1AB0F23BC2BC9007CF389 /* EmptyDataSetView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; F58A3E2D1E66AEE90086E0EF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F58A3E4F1E66AF400086E0EF /* UIScrollView+EmptyDataSet.m in Sources */, + 4FA1AB2023BE76A2007CF389 /* UIScrollView+EmptyDataSet.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -581,6 +902,7 @@ F58A3EAD1E66BF270086E0EF /* UIColor+Hexadecimal.m in Sources */, F58A3E411E66AEE90086E0EF /* ApplicationsSnapshotTests.m in Sources */, F58A3EAC1E66BD620086E0EF /* DetailViewController.m in Sources */, + 4FA1AB1823BD67B3007CF389 /* DisplayEmptyDataSetTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -594,6 +916,7 @@ F58A3EA01E66B62F0086E0EF /* UIColor+Hexadecimal.m in Sources */, F58A3E9F1E66B62F0086E0EF /* main.m in Sources */, F58A3E971E66B62F0086E0EF /* DetailViewController.m in Sources */, + 4FA1AB2C23BEC6D9007CF389 /* ApplicationViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -607,7 +930,7 @@ F5BE15501E713E9300F6FBEA /* TableViewController.m in Sources */, F5BE154E1E713E9300F6FBEA /* UIColor+Hex.m in Sources */, F5BE152C1E713E2100F6FBEA /* AppDelegate.m in Sources */, - F5BE154F1E713E9300F6FBEA /* SearchViewController.m in Sources */, + 4FA1AB1B23BDF332007CF389 /* DetailViewController.m in Sources */, F5BE15291E713E2100F6FBEA /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -628,6 +951,22 @@ /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ + 4FA1AAEE23BC28F2007CF389 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 4FA1AAEF23BC28F2007CF389 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 4FA1AAF323BC28F3007CF389 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 4FA1AAF423BC28F3007CF389 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; F58A3E8B1E66B62F0086E0EF /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( @@ -655,6 +994,118 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 4FA1AAF823BC28F3007CF389 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0964B6B448E0388404127D2C /* Pods-Bento.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = "Sample - Bento/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.dzn.Bento; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + 4FA1AAF923BC28F3007CF389 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 80429DE569A05F9D34CC30C7 /* Pods-Bento.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = "Sample - Bento/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.dzn.Bento; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Release; + }; + 4FA1AB0923BC296B007CF389 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 35391D2768B732E0C798EDE8 /* Pods-EmptyDataSet.debug.xcconfig */; + buildSettings = { + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = "$(SRCROOT)/../Source/Objc/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.dzn.EmptyDataSet; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TVOS_DEPLOYMENT_TARGET = 11.0; + }; + name = Debug; + }; + 4FA1AB0A23BC296B007CF389 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8A3065E7E54480E6A729ACA3 /* Pods-EmptyDataSet.release.xcconfig */; + buildSettings = { + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = "$(SRCROOT)/../Source/Objc/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.dzn.EmptyDataSet; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TVOS_DEPLOYMENT_TARGET = 11.0; + }; + name = Release; + }; F58A3E441E66AEE90086E0EF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -762,6 +1213,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -772,6 +1224,7 @@ F58A3E471E66AEE90086E0EF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; @@ -780,16 +1233,20 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = DZNEmptyDataSet/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.dzn.DZNEmptyDataSet; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; }; name = Debug; }; F58A3E481E66AEE90086E0EF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; @@ -798,10 +1255,12 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = DZNEmptyDataSet/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.dzn.DZNEmptyDataSet; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; }; name = Release; }; @@ -813,12 +1272,14 @@ CLANG_ENABLE_MODULES = YES; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = DZNEmptyDataSetTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.dzn.DZNEmptyDataSetTests; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "DZNEmptyDataSetTests/DZNEmptyDataSetTests-Bridging-Header.h"; + SWIFT_OBJC_BRIDGING_HEADER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; + TVOS_DEPLOYMENT_TARGET = 11.0; }; name = Debug; }; @@ -830,39 +1291,54 @@ CLANG_ENABLE_MODULES = YES; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = DZNEmptyDataSetTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.dzn.DZNEmptyDataSetTests; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "DZNEmptyDataSetTests/DZNEmptyDataSetTests-Bridging-Header.h"; + SWIFT_OBJC_BRIDGING_HEADER = ""; SWIFT_VERSION = 5.0; + TVOS_DEPLOYMENT_TARGET = 11.0; }; name = Release; }; F58A3E771E66B5410086E0EF /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 08CB8787A6FE35C35EF64E97 /* Pods-Applications.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "LaunchImage-3"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = ""; + CLANG_ENABLE_MODULES = YES; + DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "$(SRCROOT)/Applications/Supporting Files/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.dzn.Applications; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Applications/Applications-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; }; name = Debug; }; F58A3E781E66B5410086E0EF /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = EA4364DC724FC0552FA06E59 /* Pods-Applications.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "LaunchImage-3"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = ""; + CLANG_ENABLE_MODULES = YES; + DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "$(SRCROOT)/Applications/Supporting Files/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.dzn.Applications; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Applications/Applications-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; }; name = Release; }; @@ -871,10 +1347,11 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = Colors/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.dzn.Colors; PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = 1; }; name = Debug; }; @@ -883,16 +1360,35 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = Colors/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.dzn.Colors; PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = 1; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 4FA1AAF723BC28F3007CF389 /* Build configuration list for PBXNativeTarget "Bento" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4FA1AAF823BC28F3007CF389 /* Debug */, + 4FA1AAF923BC28F3007CF389 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4FA1AB0823BC296B007CF389 /* Build configuration list for PBXNativeTarget "EmptyDataSet" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4FA1AB0923BC296B007CF389 /* Debug */, + 4FA1AB0A23BC296B007CF389 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; F58A3E2C1E66AEE90086E0EF /* Build configuration list for PBXProject "DZNEmptyDataSet" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/DZNEmptyDataSet/DZNEmptyDataSet.xcodeproj/xcshareddata/xcschemes/Applications.xcscheme b/DZNEmptyDataSet/DZNEmptyDataSet.xcodeproj/xcshareddata/xcschemes/Applications.xcscheme new file mode 100644 index 00000000..cefaf5c0 --- /dev/null +++ b/DZNEmptyDataSet/DZNEmptyDataSet.xcodeproj/xcshareddata/xcschemes/Applications.xcscheme @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DZNEmptyDataSet/DZNEmptyDataSet.xcodeproj/xcshareddata/xcschemes/Bento.xcscheme b/DZNEmptyDataSet/DZNEmptyDataSet.xcodeproj/xcshareddata/xcschemes/Bento.xcscheme new file mode 100644 index 00000000..7b9e5737 --- /dev/null +++ b/DZNEmptyDataSet/DZNEmptyDataSet.xcodeproj/xcshareddata/xcschemes/Bento.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DZNEmptyDataSet/DZNEmptyDataSet.xcodeproj/xcshareddata/xcschemes/Colors.xcscheme b/DZNEmptyDataSet/DZNEmptyDataSet.xcodeproj/xcshareddata/xcschemes/Colors.xcscheme new file mode 100644 index 00000000..2fb79974 --- /dev/null +++ b/DZNEmptyDataSet/DZNEmptyDataSet.xcodeproj/xcshareddata/xcschemes/Colors.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DZNEmptyDataSet/DZNEmptyDataSet.xcodeproj/xcshareddata/xcschemes/EmptyDataSet.xcscheme b/DZNEmptyDataSet/DZNEmptyDataSet.xcodeproj/xcshareddata/xcschemes/EmptyDataSet.xcscheme new file mode 100644 index 00000000..620af8a1 --- /dev/null +++ b/DZNEmptyDataSet/DZNEmptyDataSet.xcodeproj/xcshareddata/xcschemes/EmptyDataSet.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DZNEmptyDataSet/DZNEmptyDataSet.xcworkspace/contents.xcworkspacedata b/DZNEmptyDataSet/DZNEmptyDataSet.xcworkspace/contents.xcworkspacedata index 96f27417..2e514036 100644 --- a/DZNEmptyDataSet/DZNEmptyDataSet.xcworkspace/contents.xcworkspacedata +++ b/DZNEmptyDataSet/DZNEmptyDataSet.xcworkspace/contents.xcworkspacedata @@ -10,6 +10,9 @@ + + diff --git a/DZNEmptyDataSet/DZNEmptyDataSet.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/DZNEmptyDataSet/DZNEmptyDataSet.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/DZNEmptyDataSet/DZNEmptyDataSet.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/DZNEmptyDataSet/DZNEmptyDataSetTests/ApplicationsSnapshotTests.m b/DZNEmptyDataSet/DZNEmptyDataSetTests/ApplicationsSnapshotTests.m index 5ffa26ad..1586110e 100644 --- a/DZNEmptyDataSet/DZNEmptyDataSetTests/ApplicationsSnapshotTests.m +++ b/DZNEmptyDataSet/DZNEmptyDataSetTests/ApplicationsSnapshotTests.m @@ -6,9 +6,9 @@ // Copyright © 2017 DZN. All rights reserved. // -#import -#import -#import +@import UIKit; +@import DZNEmptyDataSet; +@import FBSnapshotTestCase; #import "Application.h" #import "DetailViewController.h" @@ -28,12 +28,8 @@ - (void)setUp { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ UIDevice *device = [UIDevice currentDevice]; - UIScreen *screen = [UIScreen mainScreen]; - - // Using XCTAssert instead of NSAssert since these do not cause the tests to fail. - XCTAssert([device.name containsString:@"iPhone 8"], @"Please run snapshot tests on an iPhone 8 simulator."); - XCTAssert([device.systemVersion doubleValue] > 11.0, @"Please run snapshot tests on a simulator with iOS 11.0 or above."); - XCTAssert(screen.scale == 2.0, @"Please run snapshot tests on a @2x density simulator."); + XCTAssert([device.name containsString:@"iPhone 8"], @"Please run snapshot tests on an iPhone 8 simulator with iOS 13.3"); + XCTAssert([device.systemVersion doubleValue] == 13.3, @"Please run snapshot tests on an iPhone 8 simulator with iOS 13.3"); }); } @@ -68,7 +64,7 @@ - (NSString *)getReferenceImageDirectoryWithDefault:(NSString *)dir - (void)verifyView:(UIView *)view withIdentifier:(NSString *)identifier { - FBSnapshotVerifyViewWithOptions(view, identifier, FBSnapshotTestCaseDefaultSuffixes(), 0); + FBSnapshotVerifyViewWithOptions(view, identifier, FBSnapshotTestCaseDefaultSuffixes(), 1); } @end diff --git a/DZNEmptyDataSet/DZNEmptyDataSetTests/DisplayEmptyDataSetTests.swift b/DZNEmptyDataSet/DZNEmptyDataSetTests/DisplayEmptyDataSetTests.swift new file mode 100644 index 00000000..a733ec7e --- /dev/null +++ b/DZNEmptyDataSet/DZNEmptyDataSetTests/DisplayEmptyDataSetTests.swift @@ -0,0 +1,134 @@ +// +// DisplayEmptyDataSetTests.swift +// DZNEmptyDataSetTests +// +// Created by Ignacio Romero Zurbuchen on 2020-01-01. +// Copyright © 2020 DZN. All rights reserved. +// + +import XCTest +import EmptyDataSet + +class DisplayEmptyDataSetTests: XCTestCase { + + override func setUp() { } + + override func tearDown() { } + + // MARK: Tests + + func testTableViewWithEmptyDataSetHasPlaceholderVisible() + { + // Given + let tableView = TableViewWithEmptyDataSet() + tableView.deleteAll() + + // When + tableView.reloadEmptyDataSet() + + // Then + XCTAssert(tableView.isEmptyDataSetVisible, "With an empty table the EmptyDataSetView should be visible") + } + + func testTableViewWithDataSetHasNoPlaceholderVisible() + { + // Given + let tableView = TableViewWithEmptyDataSet() + + // When + tableView.beginUpdates() + tableView.refresh() + tableView.endUpdates() + + // Then + XCTAssert(tableView.isEmptyDataSetVisible, "With data in the table the EmptyDataSetView should not be visible") + } + + func testCollectionViewWithEmptyDataSetHasPlaceholderVisible() + { + // Given + let layout = UICollectionViewFlowLayout() + let frame = CGRect.zero + let collectionView = CollectionViewWithEmptyDataSet(frame: frame, collectionViewLayout: layout) + collectionView.deleteAll() + + // When + collectionView.reloadEmptyDataSet() + + // Then + XCTAssert(collectionView.isEmptyDataSetVisible, "With an empty table the EmptyDataSetView should be visible") + } +} + +class TableViewWithEmptyDataSet: UITableView, UITableViewDataSource, EmptyDataSetSource +{ + var items = [String]() + + override init(frame: CGRect, style: UITableView.Style) { + super.init(frame: frame, style: style) + dataSource = self + emptyDataSetSource = self + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return items.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + return UITableViewCell() + } + + func titleForEmptyDataSet(scrollView: UIScrollView) -> NSAttributedString? { + let attributes = [NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 27), NSAttributedString.Key.foregroundColor: UIColor.lightGray] + return NSAttributedString.init(string: "No items found", attributes: attributes) + } + + func refresh() { + items.append("Hello") + } + + func deleteAll() { + items = [] + } + +} + +class CollectionViewWithEmptyDataSet: UICollectionView, UICollectionViewDataSource, EmptyDataSetSource +{ + var items = [String]() + + override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) { + super.init(frame: frame, collectionViewLayout: layout) + dataSource = self + emptyDataSetSource = self + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return items.count + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + return UICollectionViewCell() + } + + func titleForEmptyDataSet(scrollView: UIScrollView) -> NSAttributedString? { + let attributes = [NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 27), NSAttributedString.Key.foregroundColor: UIColor.lightGray] + return NSAttributedString.init(string: "No items found", attributes: attributes) + } + + func refresh() { + items.append("Hello") + } + + func deleteAll() { + items = [] + } +} diff --git a/DZNEmptyDataSet/Podfile b/DZNEmptyDataSet/Podfile index 090283d7..58a7d4b8 100644 --- a/DZNEmptyDataSet/Podfile +++ b/DZNEmptyDataSet/Podfile @@ -5,6 +5,11 @@ inhibit_all_warnings! workspace 'DZNEmptyDataSet.xcworkspace' +target 'Applications' do + pod 'SnapKit' +end + target 'DZNEmptyDataSetTests' do pod 'iOSSnapshotTestCase' + pod 'SnapKit' end diff --git a/DZNEmptyDataSet/Podfile.lock b/DZNEmptyDataSet/Podfile.lock index aec7be8d..3811d411 100644 --- a/DZNEmptyDataSet/Podfile.lock +++ b/DZNEmptyDataSet/Podfile.lock @@ -4,17 +4,21 @@ PODS: - iOSSnapshotTestCase/Core (6.2.0) - iOSSnapshotTestCase/SwiftSupport (6.2.0): - iOSSnapshotTestCase/Core + - SnapKit (5.0.1) DEPENDENCIES: - iOSSnapshotTestCase + - SnapKit SPEC REPOS: trunk: - iOSSnapshotTestCase + - SnapKit SPEC CHECKSUMS: iOSSnapshotTestCase: 9ab44cb5aa62b84d31847f40680112e15ec579a6 + SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb -PODFILE CHECKSUM: e0473814f267076f6b72e4045e276a3be55d403b +PODFILE CHECKSUM: 37424b22f1f24c4492a68c9afca2453badf25f5a COCOAPODS: 1.8.4 diff --git a/DZNEmptyDataSet/Pods/Manifest.lock b/DZNEmptyDataSet/Pods/Manifest.lock index aec7be8d..3811d411 100644 --- a/DZNEmptyDataSet/Pods/Manifest.lock +++ b/DZNEmptyDataSet/Pods/Manifest.lock @@ -4,17 +4,21 @@ PODS: - iOSSnapshotTestCase/Core (6.2.0) - iOSSnapshotTestCase/SwiftSupport (6.2.0): - iOSSnapshotTestCase/Core + - SnapKit (5.0.1) DEPENDENCIES: - iOSSnapshotTestCase + - SnapKit SPEC REPOS: trunk: - iOSSnapshotTestCase + - SnapKit SPEC CHECKSUMS: iOSSnapshotTestCase: 9ab44cb5aa62b84d31847f40680112e15ec579a6 + SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb -PODFILE CHECKSUM: e0473814f267076f6b72e4045e276a3be55d403b +PODFILE CHECKSUM: 37424b22f1f24c4492a68c9afca2453badf25f5a COCOAPODS: 1.8.4 diff --git a/DZNEmptyDataSet/Pods/Pods.xcodeproj/project.pbxproj b/DZNEmptyDataSet/Pods/Pods.xcodeproj/project.pbxproj index 09254cae..cd18af17 100644 --- a/DZNEmptyDataSet/Pods/Pods.xcodeproj/project.pbxproj +++ b/DZNEmptyDataSet/Pods/Pods.xcodeproj/project.pbxproj @@ -7,112 +7,264 @@ objects = { /* Begin PBXBuildFile section */ - 09F3021D3323D0B64812EE10886827AB /* UIImage+Diff.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EE0D8468132004B33C282270003A158 /* UIImage+Diff.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 01C550A53C9E2047C83F8E85BBB558E6 /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14688B21017F1CE9E5DED52C0502F7C4 /* ConstraintLayoutSupportDSL.swift */; }; + 039EAFE7935113805F3FC21BF1B7C9D5 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB3E566465976FD7618A282BD43D799 /* LayoutConstraint.swift */; }; + 04543980C4A7CE442330B0F1BC4A9A54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7BD4ED544B638D07C7D755AF1C27116A /* Foundation.framework */; }; + 09F3021D3323D0B64812EE10886827AB /* UIImage+Diff.h in Headers */ = {isa = PBXBuildFile; fileRef = 781106B5E3E775340896FC5DD09BCF14 /* UIImage+Diff.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 0B8B6AE8660F732E4DED59573FE1355B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7BD4ED544B638D07C7D755AF1C27116A /* Foundation.framework */; }; 115B9F2A343D1880D138F41B9491C125 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7BD4ED544B638D07C7D755AF1C27116A /* Foundation.framework */; }; - 144F29212101A4D03109E989BE0A4F92 /* FBSnapshotTestController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F2628B40D6A150C1ADD3875C92B9792 /* FBSnapshotTestController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 20D8C7C8698B7ED12643ECC31666C8C1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7BD4ED544B638D07C7D755AF1C27116A /* Foundation.framework */; }; - 2416486B5F64697AC5FCDFD6FD6E019E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7BD4ED544B638D07C7D755AF1C27116A /* Foundation.framework */; }; - 2643963F8600F16366AF89ABF6D91F82 /* UIImage+Compare.h in Headers */ = {isa = PBXBuildFile; fileRef = F98662B97F340866723F7EA90CF3D26C /* UIImage+Compare.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2CA412DDC41031745F66213AD86238FE /* SwiftSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 432D328D5B1788520371534F0EC9AA67 /* SwiftSupport.swift */; }; - 338DD760BB611C08829BEC825B2BB816 /* UIImage+Snapshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 85F5D23833B7C650DB2B9B5EA95B43F7 /* UIImage+Snapshot.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3B1E085DF7CFF7E649546346F4A0BC13 /* Pods-EmptyDataSetTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E91C64E07DBA5087F6C91BDCA0B09C1F /* Pods-EmptyDataSetTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B540469AF7772C156A3AD0CC6184734 /* FBSnapshotTestCase.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BF0D8E3529AAF9DD2F8B3378FD89216 /* FBSnapshotTestCase.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3CE95FD1D722818A524677118DF557BA /* UIImage+Snapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = EBD54FBC707C522306409616608E03F7 /* UIImage+Snapshot.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4A00FE44F3F789ABEB88E16D122FD321 /* Pods-DZNEmptyDataSetTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 641D5F8E6F0E23700685EE1559119B27 /* Pods-DZNEmptyDataSetTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6543CE32DD97E4F24919522FE4E79A94 /* FBSnapshotTestCasePlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = DC37D45B91EAA34C1B307819F4FBFA48 /* FBSnapshotTestCasePlatform.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 796D4CB4F4AB8ECBBD931B099A74E833 /* FBSnapshotTestController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BFB7DE40547F6148458C28227213A42 /* FBSnapshotTestController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 144F29212101A4D03109E989BE0A4F92 /* FBSnapshotTestController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B1021A4B99AAA338492CF276326B811 /* FBSnapshotTestController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1956E392D500F3CD899D39A5F805736D /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = F56957F4DF79C109B4B7DD07C7BB8CD7 /* Typealiases.swift */; }; + 1AFB1E9136716C0B61D6C700FF1E60FD /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDFA66846C593CAA66836976FE3BB11F /* ConstraintLayoutGuide+Extensions.swift */; }; + 21AB1101BBE4D28D74ED4EDF0D59025A /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16800BBFE31BC78E783108D7FECEDE8 /* ConstraintInsets.swift */; }; + 232B2F922E972D9F43D2EE15ACECE734 /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 602AE493333C02D22A808DB2E814C8CD /* ConstraintPriority.swift */; }; + 2643963F8600F16366AF89ABF6D91F82 /* UIImage+Compare.h in Headers */ = {isa = PBXBuildFile; fileRef = A8D6632E06227B6D340FA539C42E71BA /* UIImage+Compare.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2A1BBBC87AC2367BD14610A9D10D285E /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E9A01E7D0ACDA53F277D17D1A07B37A /* ConstraintAttributes.swift */; }; + 2C06F2E972444D359754D21AC46BFFE2 /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA331ADDAC2EBE5AE0BE4B5B2057A54 /* ConstraintInsetTarget.swift */; }; + 2CA412DDC41031745F66213AD86238FE /* SwiftSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76DF6A3B9EA5B47BA407F65C5E54A45E /* SwiftSupport.swift */; }; + 2CBF7DEEF65392897EFBC35D9A09FABB /* Pods-EmptyDataSet-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E8CEFE69249B54E15C56B2EB567BD273 /* Pods-EmptyDataSet-dummy.m */; }; + 338DD760BB611C08829BEC825B2BB816 /* UIImage+Snapshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 90E20B0C95C9A88DD1367C03A2C604F1 /* UIImage+Snapshot.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 370B6599BB08FAFD53343DB64AB4E825 /* Pods-DZNEmptyDataSetTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 574C8B427481F411FBA0FB89B266DBFC /* Pods-DZNEmptyDataSetTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B540469AF7772C156A3AD0CC6184734 /* FBSnapshotTestCase.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BACCF31CA7AFD967E2591A4EFD8552C /* FBSnapshotTestCase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3BFC243AB9BD579969F0D5756560BCAA /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68349ABEA22D52E59F27120988E541CC /* Constraint.swift */; }; + 3CE95FD1D722818A524677118DF557BA /* UIImage+Snapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEFAFB515CDC63285C990A18B7F186C /* UIImage+Snapshot.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 3E5285F4F36EAD77ECABBFB7F36BB1BB /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F10334A1FB928B745EC8563AE78F951 /* ConstraintView+Extensions.swift */; }; + 45CBB011A9386ADE27BACDD789287991 /* Pods-Bento-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF2F891DA5908C685945618C88524C5 /* Pods-Bento-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4C7A676DAE95EEAC3787A75349F0862D /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = ABFDB1D4B81322EDEF8D1E7B4FF40033 /* SnapKit-dummy.m */; }; + 51CD5887014967E77E58F5A163996454 /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5060CFFF2F977027179ABCF73CAB078B /* ConstraintMaker.swift */; }; + 57B1876F2BE4168E5BFDB63D8CC849A0 /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B0B97DAC9F94F24298BA65639265472 /* ConstraintLayoutSupport.swift */; }; + 5854DF509E8A016B6235793D04083035 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E0244F1A949723234F3F77A0622F707 /* ConstraintConstantTarget.swift */; }; + 58BFE9BD55E677A63567E4474311181B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7BD4ED544B638D07C7D755AF1C27116A /* Foundation.framework */; }; + 6543CE32DD97E4F24919522FE4E79A94 /* FBSnapshotTestCasePlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A279845955DAE11D5CA5DDDA607BC5B /* FBSnapshotTestCasePlatform.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 68AA003430C5A7C92AF7FE1B27576C2D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7BD4ED544B638D07C7D755AF1C27116A /* Foundation.framework */; }; + 69CCBEEDFCA6D743D80026568D961919 /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24E447DDE7E1FF49CC5ED9D962EEEE56 /* ConstraintMakerExtendable.swift */; }; + 69E3A06BBDFDC7D06A9D4BDC4E895E73 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 069ED88DABE9F9FCE0E3BCBFD719E1F7 /* ConstraintRelatableTarget.swift */; }; + 6E0EB9E7FAAEDBB7A73ECF3095F69C4A /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8AA92BACDC3928DF8341019D74CCE92 /* UILayoutSupport+Extensions.swift */; }; + 71DE9DC2FA583526AB4D1FD7F00C099C /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB449F1D76F58450F0CC2BE2EE78F972 /* ConstraintDirectionalInsetTarget.swift */; }; + 75E146C12D1287228A0B493E87CDE31F /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D8154E810B3407E6BB3B714F36BD6A4 /* ConstraintMakerRelatable.swift */; }; + 77C9889055A3B32EA13A9616824DB0ED /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09CCE11A4A7A4D2029ACC06D57EFE95D /* ConstraintLayoutGuideDSL.swift */; }; + 796D4CB4F4AB8ECBBD931B099A74E833 /* FBSnapshotTestController.h in Headers */ = {isa = PBXBuildFile; fileRef = ACB0E874B67DCE7034C37BD02A9C502C /* FBSnapshotTestController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7C1702076F3A31D8D2D45A4A9F09B266 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB713400296A38156A49768353706F94 /* ConstraintMakerEditable.swift */; }; + 8277256ADEC3C4DCF79957D1CA681A9A /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = F949A0CCE79FE9678D1E57C53198F545 /* ConstraintDSL.swift */; }; 82CE8E0DC98452F08E1A03D3CA91B763 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CAA89EEF1039078430D7A886477E365 /* UIKit.framework */; }; - 82EFF24AA6839F02578915C72F7582AC /* Pods-EmptyDataSetTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 61C3D8F63D7253014B7E075D445E3444 /* Pods-EmptyDataSetTests-dummy.m */; }; 86BC25FD2CC085B17A374500C747062D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 716A9972B9D9103B54DB950893FAF104 /* QuartzCore.framework */; }; + 8705BBF0D428BF0AE1B554A377ECC540 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 509924EFA033A91CF4C37C30EEA81E36 /* ConstraintOffsetTarget.swift */; }; 968B5318A745263F0D3A72023217CD12 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E601BD54DA9BF4071437E60125281FA /* XCTest.framework */; }; - 97F75B96103369BE6F6040DFD8BC2910 /* iOSSnapshotTestCase-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 796F28118D863DD7DDE14D1F6AC3DC9C /* iOSSnapshotTestCase-dummy.m */; }; - A2DF2053A890C10FE0B6ADA21A5A0FED /* UIImage+Compare.m in Sources */ = {isa = PBXBuildFile; fileRef = EB07CC184E97597B5EF96293FD8D6775 /* UIImage+Compare.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AA2A80FACDE8BCA52EFF8948A50C070B /* UIImage+Diff.m in Sources */ = {isa = PBXBuildFile; fileRef = 078903AE75C1D7D5C61C8DE620D53A5A /* UIImage+Diff.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AF16498E0663C46FD75357313DBE3D39 /* Pods-DZNEmptyDataSetTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B75DE7FCA97B3F0088F9BF1D274F226 /* Pods-DZNEmptyDataSetTests-dummy.m */; }; - C930BCB1B395E19ABBE9D4D491867353 /* iOSSnapshotTestCase-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 58F4181C8833BE6DB86CDA8C805A00A9 /* iOSSnapshotTestCase-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C9E1F1A48507326B8AF0EFDBE3C0EC75 /* FBSnapshotTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 523B65C5434BF857787C7B495D48070A /* FBSnapshotTestCase.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EAC1544AADA392F95DEF08C5C89DAA93 /* FBSnapshotTestCasePlatform.m in Sources */ = {isa = PBXBuildFile; fileRef = BD3E11CFF525A7BE0F5090E39A8A725C /* FBSnapshotTestCasePlatform.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 97F75B96103369BE6F6040DFD8BC2910 /* iOSSnapshotTestCase-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B7F24A97E3D6B910F581DFCEC81E0759 /* iOSSnapshotTestCase-dummy.m */; }; + 99B5296A5EDECE0557B9DA53D9E19CA1 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F81E8ABEBEDD4B5F02F6D6D2DCC5885 /* ConstraintItem.swift */; }; + 9B09968922C73D50040C6EEF57890D6E /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B4BEFED37132D0C0BF675021C271678 /* ConstraintConfig.swift */; }; + 9DD2A9E2BDE8AE7560EBE71EBD5C674D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7BD4ED544B638D07C7D755AF1C27116A /* Foundation.framework */; }; + A270CD9EC3C541FE86E65AEDCEF500CF /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A66A601713D0924ACB8459F6E4671A3 /* ConstraintLayoutGuide.swift */; }; + A2DF2053A890C10FE0B6ADA21A5A0FED /* UIImage+Compare.m in Sources */ = {isa = PBXBuildFile; fileRef = 33E328700A080B8821651041F993D4FC /* UIImage+Compare.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A66ED57B365A35434C5BAF4B990819B7 /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CF053B8FB329B13E00D6639E0080A4EB /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A992D78BE9F7A42CE40BD4D2CB53B3AA /* Pods-Applications-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AFC6F17BC2F95003B3D5756927909079 /* Pods-Applications-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AA2A80FACDE8BCA52EFF8948A50C070B /* UIImage+Diff.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C0466A9E3673A0DC8FBF1380B6E9279 /* UIImage+Diff.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AC35C9341C4BB156BB26FDD237EE3721 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAE40D775153994A861969D2F68AE7B8 /* ConstraintDirectionalInsets.swift */; }; + B599696DFEF6B2A5ECF528F4E5BB1846 /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85D9695985053C52E2910ADA84A0F086 /* ConstraintDescription.swift */; }; + B780B272106411CBE258BB60FFC45410 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CC07AD74E665C41837429712EEFEFD1 /* Debugging.swift */; }; + B7E3632F21E7C8240AFB2EB6D4576ED6 /* Pods-Bento-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EDA68062E2904441886198B2341CC8A /* Pods-Bento-dummy.m */; }; + BECA67DFB5E0984DFAEFCB775C31972E /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 712DEB6C69372749547C312D131A027F /* ConstraintView.swift */; }; + C073210591E414357D5A5C9009ABDF8E /* Pods-Applications-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B672910CCABDEE18AA93B68F3584648D /* Pods-Applications-dummy.m */; }; + C412F27D75AFC0DF0F0289DBB270931C /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7EC860D5BCEBB8D7FFD18CE720EB4F1 /* ConstraintMakerFinalizable.swift */; }; + C930BCB1B395E19ABBE9D4D491867353 /* iOSSnapshotTestCase-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B501B2B5BEAA88F651B3EFA5EE300E0A /* iOSSnapshotTestCase-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C9E1F1A48507326B8AF0EFDBE3C0EC75 /* FBSnapshotTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 401FE53A7D5EECDFB5537EB036FB47C2 /* FBSnapshotTestCase.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CE62FEABA57B2B53EABF8C7DCCC6B2C4 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293189008ECD2EAD6E7944A4BE05A869 /* ConstraintRelation.swift */; }; + D25DBA6AF7D11C6F74CBA829AB90D8B0 /* Pods-EmptyDataSet-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 284EAFD9EB58AD1C2A4A3BCE51633117 /* Pods-EmptyDataSet-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D4697DC40F3B059E4A0867838CA1814E /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C48510661F05605D903277A49626521 /* ConstraintMultiplierTarget.swift */; }; + DECBD9272C97FB4427DE3C8B2050B6C8 /* Pods-DZNEmptyDataSetTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AFC1E99AE8E26CCEC3398310BBCAD35 /* Pods-DZNEmptyDataSetTests-dummy.m */; }; + E8F2429683B3015CBD39CE883770BCA7 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 802D3F63C22D9332292AF0105A25F2C8 /* ConstraintPriorityTarget.swift */; }; + E9A970BC24EA15832F248EA020072746 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1620B3097118721476A4B4E815C15371 /* LayoutConstraintItem.swift */; }; + EAC1544AADA392F95DEF08C5C89DAA93 /* FBSnapshotTestCasePlatform.m in Sources */ = {isa = PBXBuildFile; fileRef = D8EB440657B1A826CBA05B6DB0A1D3BE /* FBSnapshotTestCasePlatform.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EB1726F5E0D0EEBA20E4528B1E37A8FA /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = C59FE233233D259792F99E2E932DEAC3 /* ConstraintViewDSL.swift */; }; + EE909C7C786140109051BC9562EEC7C8 /* ConstraintMakerPriortizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C0D7860F0C4CD5300B4BFE4C815E878 /* ConstraintMakerPriortizable.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 1970170B56D3F0BE38BD9DD9C582A769 /* PBXContainerItemProxy */ = { + 1DC2E5B6622424C75A95D2DA5571247B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = C393038B0BEF088C1B93E6528005862D; remoteInfo = iOSSnapshotTestCase; }; - 974C9C9D02D9F34F3F4008C7FE80EE21 /* PBXContainerItemProxy */ = { + 32E128361F15B1FF30A123342AEAD359 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = C393038B0BEF088C1B93E6528005862D; - remoteInfo = iOSSnapshotTestCase; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; + }; + 9D659BFF86E06BB95E4F84DC00F86DC2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; + }; + BF85A9AB9C55B6C03D5437F3CD473B8F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; + }; + EAB7C7E47ED215787C4F0FA4D31C39D8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 027896DEC86092765C2A760ED6F9480C /* Pods-EmptyDataSetTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-EmptyDataSetTests-acknowledgements.plist"; sourceTree = ""; }; - 078903AE75C1D7D5C61C8DE620D53A5A /* UIImage+Diff.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Diff.m"; path = "FBSnapshotTestCase/Categories/UIImage+Diff.m"; sourceTree = ""; }; - 0BFB7DE40547F6148458C28227213A42 /* FBSnapshotTestController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestController.h; path = FBSnapshotTestCase/FBSnapshotTestController.h; sourceTree = ""; }; - 0F2628B40D6A150C1ADD3875C92B9792 /* FBSnapshotTestController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestController.m; path = FBSnapshotTestCase/FBSnapshotTestController.m; sourceTree = ""; }; - 1729263C6AF4C3457DF5FAF67D6CFE5D /* Pods_EmptyDataSetTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_EmptyDataSetTests.framework; path = "Pods-EmptyDataSetTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 1B75DE7FCA97B3F0088F9BF1D274F226 /* Pods-DZNEmptyDataSetTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-DZNEmptyDataSetTests-dummy.m"; sourceTree = ""; }; - 219C55A87100C3F768EA58AB6A011319 /* Pods-DZNEmptyDataSetTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DZNEmptyDataSetTests.release.xcconfig"; sourceTree = ""; }; - 290FE9C065FB341E697628A988F8EEBD /* Pods-DZNEmptyDataSetTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-DZNEmptyDataSetTests-frameworks.sh"; sourceTree = ""; }; - 2EE0D8468132004B33C282270003A158 /* UIImage+Diff.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Diff.h"; path = "FBSnapshotTestCase/Categories/UIImage+Diff.h"; sourceTree = ""; }; - 332524405EDFD5162E55CBC3D200E051 /* Pods-EmptyDataSetTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-EmptyDataSetTests.debug.xcconfig"; sourceTree = ""; }; - 3BF0D8E3529AAF9DD2F8B3378FD89216 /* FBSnapshotTestCase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestCase.h; path = FBSnapshotTestCase/FBSnapshotTestCase.h; sourceTree = ""; }; - 432D328D5B1788520371534F0EC9AA67 /* SwiftSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftSupport.swift; path = FBSnapshotTestCase/SwiftSupport.swift; sourceTree = ""; }; - 5069A3FAA385B1F702DF6F5C83461EF2 /* iOSSnapshotTestCase-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "iOSSnapshotTestCase-prefix.pch"; sourceTree = ""; }; - 523B65C5434BF857787C7B495D48070A /* FBSnapshotTestCase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestCase.m; path = FBSnapshotTestCase/FBSnapshotTestCase.m; sourceTree = ""; }; - 58F4181C8833BE6DB86CDA8C805A00A9 /* iOSSnapshotTestCase-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "iOSSnapshotTestCase-umbrella.h"; sourceTree = ""; }; + 02F3013369C9861B2458E9A38A07C11C /* Pods-EmptyDataSet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-EmptyDataSet.release.xcconfig"; sourceTree = ""; }; + 051EFBB91C9A91E1100D3147DD0EA22F /* Pods-DZNEmptyDataSetTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DZNEmptyDataSetTests.debug.xcconfig"; sourceTree = ""; }; + 069ED88DABE9F9FCE0E3BCBFD719E1F7 /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Source/ConstraintRelatableTarget.swift; sourceTree = ""; }; + 06D1790119FAA8A273A94FFE931C1C0D /* Pods-Applications-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Applications-acknowledgements.markdown"; sourceTree = ""; }; + 09CCE11A4A7A4D2029ACC06D57EFE95D /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Source/ConstraintLayoutGuideDSL.swift; sourceTree = ""; }; + 14688B21017F1CE9E5DED52C0502F7C4 /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Source/ConstraintLayoutSupportDSL.swift; sourceTree = ""; }; + 149B86D06734DD732C7FF9828296F125 /* Pods-Bento-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Bento-acknowledgements.markdown"; sourceTree = ""; }; + 1620B3097118721476A4B4E815C15371 /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Source/LayoutConstraintItem.swift; sourceTree = ""; }; + 1A3E9715CDFA719D2E9DEAF1A894CCE2 /* Pods-EmptyDataSet-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-EmptyDataSet-acknowledgements.plist"; sourceTree = ""; }; + 204DD29D73DE0EEB8C7C0D5D719E57A0 /* iOSSnapshotTestCase-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "iOSSnapshotTestCase-Info.plist"; sourceTree = ""; }; + 24E447DDE7E1FF49CC5ED9D962EEEE56 /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Source/ConstraintMakerExtendable.swift; sourceTree = ""; }; + 261532DCB77853A47A27D92BD15A739D /* Pods-DZNEmptyDataSetTests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-DZNEmptyDataSetTests-Info.plist"; sourceTree = ""; }; + 284EAFD9EB58AD1C2A4A3BCE51633117 /* Pods-EmptyDataSet-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-EmptyDataSet-umbrella.h"; sourceTree = ""; }; + 293189008ECD2EAD6E7944A4BE05A869 /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Source/ConstraintRelation.swift; sourceTree = ""; }; + 2AFC1E99AE8E26CCEC3398310BBCAD35 /* Pods-DZNEmptyDataSetTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-DZNEmptyDataSetTests-dummy.m"; sourceTree = ""; }; + 2B0B97DAC9F94F24298BA65639265472 /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Source/ConstraintLayoutSupport.swift; sourceTree = ""; }; + 2C0D7860F0C4CD5300B4BFE4C815E878 /* ConstraintMakerPriortizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPriortizable.swift; path = Source/ConstraintMakerPriortizable.swift; sourceTree = ""; }; + 2CDA8ACCB61525BA49CFB574B6D8E673 /* Pods-Bento-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Bento-Info.plist"; sourceTree = ""; }; + 2E0244F1A949723234F3F77A0622F707 /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Source/ConstraintConstantTarget.swift; sourceTree = ""; }; + 2F81E8ABEBEDD4B5F02F6D6D2DCC5885 /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Source/ConstraintItem.swift; sourceTree = ""; }; + 306AE84C3F26C644C845131437A7917A /* Pods-Applications.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Applications.release.xcconfig"; sourceTree = ""; }; + 33E328700A080B8821651041F993D4FC /* UIImage+Compare.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Compare.m"; path = "FBSnapshotTestCase/Categories/UIImage+Compare.m"; sourceTree = ""; }; + 39309FF58F4F8458ED74F252C8562AB2 /* SnapKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.xcconfig; sourceTree = ""; }; + 3A66A601713D0924ACB8459F6E4671A3 /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Source/ConstraintLayoutGuide.swift; sourceTree = ""; }; + 3D8154E810B3407E6BB3B714F36BD6A4 /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Source/ConstraintMakerRelatable.swift; sourceTree = ""; }; + 401FE53A7D5EECDFB5537EB036FB47C2 /* FBSnapshotTestCase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestCase.m; path = FBSnapshotTestCase/FBSnapshotTestCase.m; sourceTree = ""; }; + 4A279845955DAE11D5CA5DDDA607BC5B /* FBSnapshotTestCasePlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestCasePlatform.h; path = FBSnapshotTestCase/FBSnapshotTestCasePlatform.h; sourceTree = ""; }; + 4E9A01E7D0ACDA53F277D17D1A07B37A /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Source/ConstraintAttributes.swift; sourceTree = ""; }; + 4F10334A1FB928B745EC8563AE78F951 /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Source/ConstraintView+Extensions.swift"; sourceTree = ""; }; + 5060CFFF2F977027179ABCF73CAB078B /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Source/ConstraintMaker.swift; sourceTree = ""; }; + 509924EFA033A91CF4C37C30EEA81E36 /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Source/ConstraintOffsetTarget.swift; sourceTree = ""; }; + 574C8B427481F411FBA0FB89B266DBFC /* Pods-DZNEmptyDataSetTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-DZNEmptyDataSetTests-umbrella.h"; sourceTree = ""; }; + 5BA331ADDAC2EBE5AE0BE4B5B2057A54 /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Source/ConstraintInsetTarget.swift; sourceTree = ""; }; + 5C87E3CBFA70D9884A46EB21F5769C01 /* Pods-DZNEmptyDataSetTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-DZNEmptyDataSetTests-acknowledgements.markdown"; sourceTree = ""; }; 5E601BD54DA9BF4071437E60125281FA /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - 61C3D8F63D7253014B7E075D445E3444 /* Pods-EmptyDataSetTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-EmptyDataSetTests-dummy.m"; sourceTree = ""; }; - 641D5F8E6F0E23700685EE1559119B27 /* Pods-DZNEmptyDataSetTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-DZNEmptyDataSetTests-umbrella.h"; sourceTree = ""; }; - 64860ED4D1469506201CA2ECB2F54AF9 /* iOSSnapshotTestCase-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "iOSSnapshotTestCase-Info.plist"; sourceTree = ""; }; - 6E410EBBDD4A8BFC1EAA1CC501B302E8 /* Pods-EmptyDataSetTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-EmptyDataSetTests.modulemap"; sourceTree = ""; }; + 5FE9BE358F4BB5B86C550EF6CEDEC1BB /* Pods-DZNEmptyDataSetTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-DZNEmptyDataSetTests-acknowledgements.plist"; sourceTree = ""; }; + 602AE493333C02D22A808DB2E814C8CD /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Source/ConstraintPriority.swift; sourceTree = ""; }; + 63F11F486BE2BC8632D596046D4FA7F8 /* Pods-DZNEmptyDataSetTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DZNEmptyDataSetTests.release.xcconfig"; sourceTree = ""; }; + 64A732CAD1B5652659390A19B6C0C8DF /* iOSSnapshotTestCase.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = iOSSnapshotTestCase.xcconfig; sourceTree = ""; }; + 6773BAF92621D499DB8E1C48879D0440 /* Pods-Applications-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Applications-acknowledgements.plist"; sourceTree = ""; }; + 67BA8C743B739E29ADA042502044CB6B /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = ""; }; + 68349ABEA22D52E59F27120988E541CC /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Source/Constraint.swift; sourceTree = ""; }; + 6B4BEFED37132D0C0BF675021C271678 /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Source/ConstraintConfig.swift; sourceTree = ""; }; + 6BACCF31CA7AFD967E2591A4EFD8552C /* FBSnapshotTestCase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestCase.h; path = FBSnapshotTestCase/FBSnapshotTestCase.h; sourceTree = ""; }; + 712DEB6C69372749547C312D131A027F /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Source/ConstraintView.swift; sourceTree = ""; }; 716A9972B9D9103B54DB950893FAF104 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 796F28118D863DD7DDE14D1F6AC3DC9C /* iOSSnapshotTestCase-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "iOSSnapshotTestCase-dummy.m"; sourceTree = ""; }; + 71D4A2F54D713986524E5AD5E92805A6 /* iOSSnapshotTestCase.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = iOSSnapshotTestCase.modulemap; sourceTree = ""; }; + 76DF6A3B9EA5B47BA407F65C5E54A45E /* SwiftSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftSupport.swift; path = FBSnapshotTestCase/SwiftSupport.swift; sourceTree = ""; }; + 781106B5E3E775340896FC5DD09BCF14 /* UIImage+Diff.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Diff.h"; path = "FBSnapshotTestCase/Categories/UIImage+Diff.h"; sourceTree = ""; }; 7BD4ED544B638D07C7D755AF1C27116A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 83AE7D1AEFB339AD0959403003751CA7 /* Pods-EmptyDataSetTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-EmptyDataSetTests-acknowledgements.markdown"; sourceTree = ""; }; - 85F5D23833B7C650DB2B9B5EA95B43F7 /* UIImage+Snapshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Snapshot.m"; path = "FBSnapshotTestCase/Categories/UIImage+Snapshot.m"; sourceTree = ""; }; + 802D3F63C22D9332292AF0105A25F2C8 /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Source/ConstraintPriorityTarget.swift; sourceTree = ""; }; + 82B8B8BCE2F17F69A14F5EA6E8157091 /* Pods-Bento.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Bento.modulemap"; sourceTree = ""; }; + 85D9695985053C52E2910ADA84A0F086 /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Source/ConstraintDescription.swift; sourceTree = ""; }; + 8B1021A4B99AAA338492CF276326B811 /* FBSnapshotTestController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestController.m; path = FBSnapshotTestCase/FBSnapshotTestController.m; sourceTree = ""; }; + 8C48510661F05605D903277A49626521 /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Source/ConstraintMultiplierTarget.swift; sourceTree = ""; }; 8CAA89EEF1039078430D7A886477E365 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 900C95C1DE73EA90A623D23D95C912B0 /* iOSSnapshotTestCase.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = iOSSnapshotTestCase.modulemap; sourceTree = ""; }; - 90865ABAFFD6A5A298617AB51BBCAF91 /* Pods-DZNEmptyDataSetTests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-DZNEmptyDataSetTests-Info.plist"; sourceTree = ""; }; + 8CC07AD74E665C41837429712EEFEFD1 /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Source/Debugging.swift; sourceTree = ""; }; + 8EDA68062E2904441886198B2341CC8A /* Pods-Bento-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Bento-dummy.m"; sourceTree = ""; }; + 90E20B0C95C9A88DD1367C03A2C604F1 /* UIImage+Snapshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Snapshot.m"; path = "FBSnapshotTestCase/Categories/UIImage+Snapshot.m"; sourceTree = ""; }; + 930E354543B5D38844D443BC8AF35616 /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = ""; }; + 95F0C0C69B75B760D7505C6832CDEAD2 /* Pods-EmptyDataSet.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-EmptyDataSet.modulemap"; sourceTree = ""; }; + 979486118B3E90C08386079D57962701 /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapKit.framework; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9C0466A9E3673A0DC8FBF1380B6E9279 /* UIImage+Diff.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Diff.m"; path = "FBSnapshotTestCase/Categories/UIImage+Diff.m"; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9E40F32945DC9CF56B2E7A875BDF9DBE /* Pods-DZNEmptyDataSetTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DZNEmptyDataSetTests.debug.xcconfig"; sourceTree = ""; }; + 9EF2F891DA5908C685945618C88524C5 /* Pods-Bento-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Bento-umbrella.h"; sourceTree = ""; }; + A8AA92BACDC3928DF8341019D74CCE92 /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Source/UILayoutSupport+Extensions.swift"; sourceTree = ""; }; + A8D6632E06227B6D340FA539C42E71BA /* UIImage+Compare.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Compare.h"; path = "FBSnapshotTestCase/Categories/UIImage+Compare.h"; sourceTree = ""; }; A93D16E4190310C154EA0253BFD291D9 /* Pods_DZNEmptyDataSetTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_DZNEmptyDataSetTests.framework; path = "Pods-DZNEmptyDataSetTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - B75A47899E602A5CA9E833F7D136622D /* iOSSnapshotTestCase.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = iOSSnapshotTestCase.xcconfig; sourceTree = ""; }; + AAEFAFB515CDC63285C990A18B7F186C /* UIImage+Snapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Snapshot.h"; path = "FBSnapshotTestCase/Categories/UIImage+Snapshot.h"; sourceTree = ""; }; + AB713400296A38156A49768353706F94 /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Source/ConstraintMakerEditable.swift; sourceTree = ""; }; + ABFDB1D4B81322EDEF8D1E7B4FF40033 /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = ""; }; + ACB0E874B67DCE7034C37BD02A9C502C /* FBSnapshotTestController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestController.h; path = FBSnapshotTestCase/FBSnapshotTestController.h; sourceTree = ""; }; + ADC6D3AB85B6EE3B5915BA7AF8A54A8C /* Pods_Bento.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Bento.framework; path = "Pods-Bento.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + AED2E02F3FCAD023A93FB2BBBDDAA233 /* Pods_EmptyDataSet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_EmptyDataSet.framework; path = "Pods-EmptyDataSet.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + AFC6F17BC2F95003B3D5756927909079 /* Pods-Applications-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Applications-umbrella.h"; sourceTree = ""; }; + B10BF1D34104F50F34C7216285F47078 /* Pods-Applications.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Applications.debug.xcconfig"; sourceTree = ""; }; + B501B2B5BEAA88F651B3EFA5EE300E0A /* iOSSnapshotTestCase-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "iOSSnapshotTestCase-umbrella.h"; sourceTree = ""; }; + B672910CCABDEE18AA93B68F3584648D /* Pods-Applications-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Applications-dummy.m"; sourceTree = ""; }; + B7EC860D5BCEBB8D7FFD18CE720EB4F1 /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Source/ConstraintMakerFinalizable.swift; sourceTree = ""; }; + B7F24A97E3D6B910F581DFCEC81E0759 /* iOSSnapshotTestCase-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "iOSSnapshotTestCase-dummy.m"; sourceTree = ""; }; + B861E30FEDC04CA6A8639F38D250AC3D /* Pods-DZNEmptyDataSetTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-DZNEmptyDataSetTests-frameworks.sh"; sourceTree = ""; }; B91B00F8BE943329D633234BD67AE0AC /* FBSnapshotTestCase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FBSnapshotTestCase.framework; path = iOSSnapshotTestCase.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BBCACE771CD60C1357EF2772ACFA9A5A /* Pods-EmptyDataSetTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-EmptyDataSetTests.release.xcconfig"; sourceTree = ""; }; - BD356F3D59B3BBE571310DBB3B97F84E /* Pods-EmptyDataSetTests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-EmptyDataSetTests-Info.plist"; sourceTree = ""; }; - BD3E11CFF525A7BE0F5090E39A8A725C /* FBSnapshotTestCasePlatform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestCasePlatform.m; path = FBSnapshotTestCase/FBSnapshotTestCasePlatform.m; sourceTree = ""; }; - DC37D45B91EAA34C1B307819F4FBFA48 /* FBSnapshotTestCasePlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestCasePlatform.h; path = FBSnapshotTestCase/FBSnapshotTestCasePlatform.h; sourceTree = ""; }; - DC6B74AAA9CE469BC6631EACB90FC966 /* Pods-DZNEmptyDataSetTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-DZNEmptyDataSetTests.modulemap"; sourceTree = ""; }; - DFE3F6CF133FD4C8FBF9601D099051B3 /* Pods-DZNEmptyDataSetTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-DZNEmptyDataSetTests-acknowledgements.markdown"; sourceTree = ""; }; - E57FBF63C1E571D185BC40FC4FD0124B /* Pods-EmptyDataSetTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-EmptyDataSetTests-frameworks.sh"; sourceTree = ""; }; - E91C64E07DBA5087F6C91BDCA0B09C1F /* Pods-EmptyDataSetTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-EmptyDataSetTests-umbrella.h"; sourceTree = ""; }; - EB07CC184E97597B5EF96293FD8D6775 /* UIImage+Compare.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Compare.m"; path = "FBSnapshotTestCase/Categories/UIImage+Compare.m"; sourceTree = ""; }; - EB9D7FBC181BDEA4FFA12454B4DDA6E7 /* Pods-DZNEmptyDataSetTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-DZNEmptyDataSetTests-acknowledgements.plist"; sourceTree = ""; }; - EBD54FBC707C522306409616608E03F7 /* UIImage+Snapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Snapshot.h"; path = "FBSnapshotTestCase/Categories/UIImage+Snapshot.h"; sourceTree = ""; }; - F98662B97F340866723F7EA90CF3D26C /* UIImage+Compare.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Compare.h"; path = "FBSnapshotTestCase/Categories/UIImage+Compare.h"; sourceTree = ""; }; + BD4BEFEE937B1D9351571B29A139C1C5 /* Pods-Applications-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Applications-Info.plist"; sourceTree = ""; }; + BDB2FBBB7F7F2C0E3BDBFC213CB361E2 /* Pods-EmptyDataSet-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-EmptyDataSet-Info.plist"; sourceTree = ""; }; + BF456646606C9AE0393004FC7B83886E /* Pods-Applications-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Applications-frameworks.sh"; sourceTree = ""; }; + C59FE233233D259792F99E2E932DEAC3 /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Source/ConstraintViewDSL.swift; sourceTree = ""; }; + CAE40D775153994A861969D2F68AE7B8 /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Source/ConstraintDirectionalInsets.swift; sourceTree = ""; }; + CDFA66846C593CAA66836976FE3BB11F /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Source/ConstraintLayoutGuide+Extensions.swift"; sourceTree = ""; }; + CF053B8FB329B13E00D6639E0080A4EB /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = ""; }; + D16800BBFE31BC78E783108D7FECEDE8 /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Source/ConstraintInsets.swift; sourceTree = ""; }; + D401FBF4C517EE9EA053F7C32F110299 /* Pods-EmptyDataSet-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-EmptyDataSet-acknowledgements.markdown"; sourceTree = ""; }; + D8EB440657B1A826CBA05B6DB0A1D3BE /* FBSnapshotTestCasePlatform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestCasePlatform.m; path = FBSnapshotTestCase/FBSnapshotTestCasePlatform.m; sourceTree = ""; }; + DB41BF1F17277416FBF8C0F8412ADB79 /* Pods_Applications.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Applications.framework; path = "Pods-Applications.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + DB449F1D76F58450F0CC2BE2EE78F972 /* ConstraintDirectionalInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsetTarget.swift; path = Source/ConstraintDirectionalInsetTarget.swift; sourceTree = ""; }; + DBB3E566465976FD7618A282BD43D799 /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Source/LayoutConstraint.swift; sourceTree = ""; }; + DCB62C3C3503D234557704B6FD1C3105 /* Pods-DZNEmptyDataSetTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-DZNEmptyDataSetTests.modulemap"; sourceTree = ""; }; + DEC218B769C46E7B4EE81626512077FA /* Pods-Bento.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Bento.release.xcconfig"; sourceTree = ""; }; + E0F296AEF0CB8AB64CE53A92A08A6A1A /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = ""; }; + E8CEFE69249B54E15C56B2EB567BD273 /* Pods-EmptyDataSet-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-EmptyDataSet-dummy.m"; sourceTree = ""; }; + E90DEF0616B4CBFD4E71F978EB1EEF53 /* Pods-Bento.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Bento.debug.xcconfig"; sourceTree = ""; }; + E99A1D3D32986312CCD4345CEE9068C8 /* Pods-Bento-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Bento-acknowledgements.plist"; sourceTree = ""; }; + EB66BF06F7911DF85E2557DEB7BD8B6D /* Pods-EmptyDataSet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-EmptyDataSet.debug.xcconfig"; sourceTree = ""; }; + EBB920E68A7DA92F06A7B49CE2B9B329 /* iOSSnapshotTestCase-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "iOSSnapshotTestCase-prefix.pch"; sourceTree = ""; }; + EE2D4F6B903FA80861AF314EB8F4F728 /* Pods-Applications.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Applications.modulemap"; sourceTree = ""; }; + F56957F4DF79C109B4B7DD07C7BB8CD7 /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Source/Typealiases.swift; sourceTree = ""; }; + F8DEF315C2B2C95511A498EEC613F021 /* Pods-Bento-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Bento-frameworks.sh"; sourceTree = ""; }; + F949A0CCE79FE9678D1E57C53198F545 /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Source/ConstraintDSL.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7A35EDA086C304554C2338DC74768756 /* Frameworks */ = { + 0F95666F024CD6F3262628E242FDB729 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9DD2A9E2BDE8AE7560EBE71EBD5C674D /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3C8B1704CC97EF12D3409771318C6433 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 04543980C4A7CE442330B0F1BC4A9A54 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8F858070156EA0B62274A9486755B906 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0B8B6AE8660F732E4DED59573FE1355B /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9C3B34FFDC69FA04EA29F3457562B138 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2416486B5F64697AC5FCDFD6FD6E019E /* Foundation.framework in Frameworks */, + 68AA003430C5A7C92AF7FE1B27576C2D /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8ADC0E40B07D5BA0567CF010759D43B6 /* Frameworks */ = { + E7880A1A4107DBC059E53D9F8B86E9A6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 20D8C7C8698B7ED12643ECC31666C8C1 /* Foundation.framework in Frameworks */, + 58BFE9BD55E677A63567E4474311181B /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -130,50 +282,107 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 17758483808FFC630062D87E87BA22CD /* Products */ = { + 099CA0F3DDF1539E0097575F45E597A7 /* Pods-EmptyDataSet */ = { isa = PBXGroup; children = ( - B91B00F8BE943329D633234BD67AE0AC /* FBSnapshotTestCase.framework */, - A93D16E4190310C154EA0253BFD291D9 /* Pods_DZNEmptyDataSetTests.framework */, - 1729263C6AF4C3457DF5FAF67D6CFE5D /* Pods_EmptyDataSetTests.framework */, + 95F0C0C69B75B760D7505C6832CDEAD2 /* Pods-EmptyDataSet.modulemap */, + D401FBF4C517EE9EA053F7C32F110299 /* Pods-EmptyDataSet-acknowledgements.markdown */, + 1A3E9715CDFA719D2E9DEAF1A894CCE2 /* Pods-EmptyDataSet-acknowledgements.plist */, + E8CEFE69249B54E15C56B2EB567BD273 /* Pods-EmptyDataSet-dummy.m */, + BDB2FBBB7F7F2C0E3BDBFC213CB361E2 /* Pods-EmptyDataSet-Info.plist */, + 284EAFD9EB58AD1C2A4A3BCE51633117 /* Pods-EmptyDataSet-umbrella.h */, + EB66BF06F7911DF85E2557DEB7BD8B6D /* Pods-EmptyDataSet.debug.xcconfig */, + 02F3013369C9861B2458E9A38A07C11C /* Pods-EmptyDataSet.release.xcconfig */, ); - name = Products; + name = "Pods-EmptyDataSet"; + path = "Target Support Files/Pods-EmptyDataSet"; sourceTree = ""; }; - 22F3ECA726DE45D34B3ADFE5F42DC86C /* Core */ = { + 10377082182EFE0D7E0E6D60D58DFA90 /* Support Files */ = { isa = PBXGroup; children = ( - 3BF0D8E3529AAF9DD2F8B3378FD89216 /* FBSnapshotTestCase.h */, - 523B65C5434BF857787C7B495D48070A /* FBSnapshotTestCase.m */, - DC37D45B91EAA34C1B307819F4FBFA48 /* FBSnapshotTestCasePlatform.h */, - BD3E11CFF525A7BE0F5090E39A8A725C /* FBSnapshotTestCasePlatform.m */, - 0BFB7DE40547F6148458C28227213A42 /* FBSnapshotTestController.h */, - 0F2628B40D6A150C1ADD3875C92B9792 /* FBSnapshotTestController.m */, - F98662B97F340866723F7EA90CF3D26C /* UIImage+Compare.h */, - EB07CC184E97597B5EF96293FD8D6775 /* UIImage+Compare.m */, - 2EE0D8468132004B33C282270003A158 /* UIImage+Diff.h */, - 078903AE75C1D7D5C61C8DE620D53A5A /* UIImage+Diff.m */, - EBD54FBC707C522306409616608E03F7 /* UIImage+Snapshot.h */, - 85F5D23833B7C650DB2B9B5EA95B43F7 /* UIImage+Snapshot.m */, + 71D4A2F54D713986524E5AD5E92805A6 /* iOSSnapshotTestCase.modulemap */, + 64A732CAD1B5652659390A19B6C0C8DF /* iOSSnapshotTestCase.xcconfig */, + B7F24A97E3D6B910F581DFCEC81E0759 /* iOSSnapshotTestCase-dummy.m */, + 204DD29D73DE0EEB8C7C0D5D719E57A0 /* iOSSnapshotTestCase-Info.plist */, + EBB920E68A7DA92F06A7B49CE2B9B329 /* iOSSnapshotTestCase-prefix.pch */, + B501B2B5BEAA88F651B3EFA5EE300E0A /* iOSSnapshotTestCase-umbrella.h */, ); - name = Core; + name = "Support Files"; + path = "../Target Support Files/iOSSnapshotTestCase"; sourceTree = ""; }; - 33C026A8A479CAC5A2B0ADF596B17FFC /* Targets Support Files */ = { + 1180FAA6352C2B7B9CD197C3BE846482 /* Targets Support Files */ = { isa = PBXGroup; children = ( - C64175448BD262912DD6E8DA8A7A1045 /* Pods-DZNEmptyDataSetTests */, - 8A3E0554708D94F3E07DFBB2E998F53B /* Pods-EmptyDataSetTests */, + F3F44704727EF96B729A60DF09EB1EC9 /* Pods-Applications */, + 7DBC7E32EB581B2FC648C3018989D270 /* Pods-Bento */, + DECB121B56316CD08BF986DAC0702702 /* Pods-DZNEmptyDataSetTests */, + 099CA0F3DDF1539E0097575F45E597A7 /* Pods-EmptyDataSet */, ); name = "Targets Support Files"; sourceTree = ""; }; - 435489B56C63D57B6F480411D2ECC160 /* Pods */ = { + 5069F9E0D99C6E5925D43959B16AEA18 /* SnapKit */ = { isa = PBXGroup; children = ( - EFF1EAE44DF5397EE93427776ECDDC88 /* iOSSnapshotTestCase */, + 68349ABEA22D52E59F27120988E541CC /* Constraint.swift */, + 4E9A01E7D0ACDA53F277D17D1A07B37A /* ConstraintAttributes.swift */, + 6B4BEFED37132D0C0BF675021C271678 /* ConstraintConfig.swift */, + 2E0244F1A949723234F3F77A0622F707 /* ConstraintConstantTarget.swift */, + 85D9695985053C52E2910ADA84A0F086 /* ConstraintDescription.swift */, + CAE40D775153994A861969D2F68AE7B8 /* ConstraintDirectionalInsets.swift */, + DB449F1D76F58450F0CC2BE2EE78F972 /* ConstraintDirectionalInsetTarget.swift */, + F949A0CCE79FE9678D1E57C53198F545 /* ConstraintDSL.swift */, + D16800BBFE31BC78E783108D7FECEDE8 /* ConstraintInsets.swift */, + 5BA331ADDAC2EBE5AE0BE4B5B2057A54 /* ConstraintInsetTarget.swift */, + 2F81E8ABEBEDD4B5F02F6D6D2DCC5885 /* ConstraintItem.swift */, + 3A66A601713D0924ACB8459F6E4671A3 /* ConstraintLayoutGuide.swift */, + CDFA66846C593CAA66836976FE3BB11F /* ConstraintLayoutGuide+Extensions.swift */, + 09CCE11A4A7A4D2029ACC06D57EFE95D /* ConstraintLayoutGuideDSL.swift */, + 2B0B97DAC9F94F24298BA65639265472 /* ConstraintLayoutSupport.swift */, + 14688B21017F1CE9E5DED52C0502F7C4 /* ConstraintLayoutSupportDSL.swift */, + 5060CFFF2F977027179ABCF73CAB078B /* ConstraintMaker.swift */, + AB713400296A38156A49768353706F94 /* ConstraintMakerEditable.swift */, + 24E447DDE7E1FF49CC5ED9D962EEEE56 /* ConstraintMakerExtendable.swift */, + B7EC860D5BCEBB8D7FFD18CE720EB4F1 /* ConstraintMakerFinalizable.swift */, + 2C0D7860F0C4CD5300B4BFE4C815E878 /* ConstraintMakerPriortizable.swift */, + 3D8154E810B3407E6BB3B714F36BD6A4 /* ConstraintMakerRelatable.swift */, + 8C48510661F05605D903277A49626521 /* ConstraintMultiplierTarget.swift */, + 509924EFA033A91CF4C37C30EEA81E36 /* ConstraintOffsetTarget.swift */, + 602AE493333C02D22A808DB2E814C8CD /* ConstraintPriority.swift */, + 802D3F63C22D9332292AF0105A25F2C8 /* ConstraintPriorityTarget.swift */, + 069ED88DABE9F9FCE0E3BCBFD719E1F7 /* ConstraintRelatableTarget.swift */, + 293189008ECD2EAD6E7944A4BE05A869 /* ConstraintRelation.swift */, + 712DEB6C69372749547C312D131A027F /* ConstraintView.swift */, + 4F10334A1FB928B745EC8563AE78F951 /* ConstraintView+Extensions.swift */, + C59FE233233D259792F99E2E932DEAC3 /* ConstraintViewDSL.swift */, + 8CC07AD74E665C41837429712EEFEFD1 /* Debugging.swift */, + DBB3E566465976FD7618A282BD43D799 /* LayoutConstraint.swift */, + 1620B3097118721476A4B4E815C15371 /* LayoutConstraintItem.swift */, + F56957F4DF79C109B4B7DD07C7BB8CD7 /* Typealiases.swift */, + A8AA92BACDC3928DF8341019D74CCE92 /* UILayoutSupport+Extensions.swift */, + A4FB6E03AEBB90E8953BA41F9C1E2249 /* Support Files */, ); - name = Pods; + name = SnapKit; + path = SnapKit; + sourceTree = ""; + }; + 7DBC7E32EB581B2FC648C3018989D270 /* Pods-Bento */ = { + isa = PBXGroup; + children = ( + 82B8B8BCE2F17F69A14F5EA6E8157091 /* Pods-Bento.modulemap */, + 149B86D06734DD732C7FF9828296F125 /* Pods-Bento-acknowledgements.markdown */, + E99A1D3D32986312CCD4345CEE9068C8 /* Pods-Bento-acknowledgements.plist */, + 8EDA68062E2904441886198B2341CC8A /* Pods-Bento-dummy.m */, + F8DEF315C2B2C95511A498EEC613F021 /* Pods-Bento-frameworks.sh */, + 2CDA8ACCB61525BA49CFB574B6D8E673 /* Pods-Bento-Info.plist */, + 9EF2F891DA5908C685945618C88524C5 /* Pods-Bento-umbrella.h */, + E90DEF0616B4CBFD4E71F978EB1EEF53 /* Pods-Bento.debug.xcconfig */, + DEC218B769C46E7B4EE81626512077FA /* Pods-Bento.release.xcconfig */, + ); + name = "Pods-Bento"; + path = "Target Support Files/Pods-Bento"; sourceTree = ""; }; 7DE5752EED0A4C4A430975244947611A /* iOS */ = { @@ -187,54 +396,67 @@ name = iOS; sourceTree = ""; }; - 8A3E0554708D94F3E07DFBB2E998F53B /* Pods-EmptyDataSetTests */ = { + 9300DC269E7A7CF1292D2FE731BE01E4 /* Pods */ = { isa = PBXGroup; children = ( - 6E410EBBDD4A8BFC1EAA1CC501B302E8 /* Pods-EmptyDataSetTests.modulemap */, - 83AE7D1AEFB339AD0959403003751CA7 /* Pods-EmptyDataSetTests-acknowledgements.markdown */, - 027896DEC86092765C2A760ED6F9480C /* Pods-EmptyDataSetTests-acknowledgements.plist */, - 61C3D8F63D7253014B7E075D445E3444 /* Pods-EmptyDataSetTests-dummy.m */, - E57FBF63C1E571D185BC40FC4FD0124B /* Pods-EmptyDataSetTests-frameworks.sh */, - BD356F3D59B3BBE571310DBB3B97F84E /* Pods-EmptyDataSetTests-Info.plist */, - E91C64E07DBA5087F6C91BDCA0B09C1F /* Pods-EmptyDataSetTests-umbrella.h */, - 332524405EDFD5162E55CBC3D200E051 /* Pods-EmptyDataSetTests.debug.xcconfig */, - BBCACE771CD60C1357EF2772ACFA9A5A /* Pods-EmptyDataSetTests.release.xcconfig */, - ); - name = "Pods-EmptyDataSetTests"; - path = "Target Support Files/Pods-EmptyDataSetTests"; + CFD0F97DD932B905E661F7A9C8302A7D /* iOSSnapshotTestCase */, + 5069F9E0D99C6E5925D43959B16AEA18 /* SnapKit */, + ); + name = Pods; sourceTree = ""; }; - A222A9C1427FEE47EF8DE5C03195EBC3 /* SwiftSupport */ = { + A21DE819CCEFB039F235EC568DD5FBEE /* Core */ = { isa = PBXGroup; children = ( - 432D328D5B1788520371534F0EC9AA67 /* SwiftSupport.swift */, + 6BACCF31CA7AFD967E2591A4EFD8552C /* FBSnapshotTestCase.h */, + 401FE53A7D5EECDFB5537EB036FB47C2 /* FBSnapshotTestCase.m */, + 4A279845955DAE11D5CA5DDDA607BC5B /* FBSnapshotTestCasePlatform.h */, + D8EB440657B1A826CBA05B6DB0A1D3BE /* FBSnapshotTestCasePlatform.m */, + ACB0E874B67DCE7034C37BD02A9C502C /* FBSnapshotTestController.h */, + 8B1021A4B99AAA338492CF276326B811 /* FBSnapshotTestController.m */, + A8D6632E06227B6D340FA539C42E71BA /* UIImage+Compare.h */, + 33E328700A080B8821651041F993D4FC /* UIImage+Compare.m */, + 781106B5E3E775340896FC5DD09BCF14 /* UIImage+Diff.h */, + 9C0466A9E3673A0DC8FBF1380B6E9279 /* UIImage+Diff.m */, + AAEFAFB515CDC63285C990A18B7F186C /* UIImage+Snapshot.h */, + 90E20B0C95C9A88DD1367C03A2C604F1 /* UIImage+Snapshot.m */, ); - name = SwiftSupport; + name = Core; sourceTree = ""; }; - BA4F31F07263C99FC76E66D632A59F09 /* Frameworks */ = { + A37D289EB403FF33F28BF9000E9BA420 /* Products */ = { isa = PBXGroup; children = ( - 7DE5752EED0A4C4A430975244947611A /* iOS */, + B91B00F8BE943329D633234BD67AE0AC /* FBSnapshotTestCase.framework */, + DB41BF1F17277416FBF8C0F8412ADB79 /* Pods_Applications.framework */, + ADC6D3AB85B6EE3B5915BA7AF8A54A8C /* Pods_Bento.framework */, + A93D16E4190310C154EA0253BFD291D9 /* Pods_DZNEmptyDataSetTests.framework */, + AED2E02F3FCAD023A93FB2BBBDDAA233 /* Pods_EmptyDataSet.framework */, + 979486118B3E90C08386079D57962701 /* SnapKit.framework */, ); - name = Frameworks; + name = Products; sourceTree = ""; }; - C64175448BD262912DD6E8DA8A7A1045 /* Pods-DZNEmptyDataSetTests */ = { + A4FB6E03AEBB90E8953BA41F9C1E2249 /* Support Files */ = { isa = PBXGroup; children = ( - DC6B74AAA9CE469BC6631EACB90FC966 /* Pods-DZNEmptyDataSetTests.modulemap */, - DFE3F6CF133FD4C8FBF9601D099051B3 /* Pods-DZNEmptyDataSetTests-acknowledgements.markdown */, - EB9D7FBC181BDEA4FFA12454B4DDA6E7 /* Pods-DZNEmptyDataSetTests-acknowledgements.plist */, - 1B75DE7FCA97B3F0088F9BF1D274F226 /* Pods-DZNEmptyDataSetTests-dummy.m */, - 290FE9C065FB341E697628A988F8EEBD /* Pods-DZNEmptyDataSetTests-frameworks.sh */, - 90865ABAFFD6A5A298617AB51BBCAF91 /* Pods-DZNEmptyDataSetTests-Info.plist */, - 641D5F8E6F0E23700685EE1559119B27 /* Pods-DZNEmptyDataSetTests-umbrella.h */, - 9E40F32945DC9CF56B2E7A875BDF9DBE /* Pods-DZNEmptyDataSetTests.debug.xcconfig */, - 219C55A87100C3F768EA58AB6A011319 /* Pods-DZNEmptyDataSetTests.release.xcconfig */, + 67BA8C743B739E29ADA042502044CB6B /* SnapKit.modulemap */, + 39309FF58F4F8458ED74F252C8562AB2 /* SnapKit.xcconfig */, + ABFDB1D4B81322EDEF8D1E7B4FF40033 /* SnapKit-dummy.m */, + E0F296AEF0CB8AB64CE53A92A08A6A1A /* SnapKit-Info.plist */, + 930E354543B5D38844D443BC8AF35616 /* SnapKit-prefix.pch */, + CF053B8FB329B13E00D6639E0080A4EB /* SnapKit-umbrella.h */, ); - name = "Pods-DZNEmptyDataSetTests"; - path = "Target Support Files/Pods-DZNEmptyDataSetTests"; + name = "Support Files"; + path = "../Target Support Files/SnapKit"; + sourceTree = ""; + }; + BA4F31F07263C99FC76E66D632A59F09 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7DE5752EED0A4C4A430975244947611A /* iOS */, + ); + name = Frameworks; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { @@ -242,45 +464,89 @@ children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, BA4F31F07263C99FC76E66D632A59F09 /* Frameworks */, - 435489B56C63D57B6F480411D2ECC160 /* Pods */, - 17758483808FFC630062D87E87BA22CD /* Products */, - 33C026A8A479CAC5A2B0ADF596B17FFC /* Targets Support Files */, + 9300DC269E7A7CF1292D2FE731BE01E4 /* Pods */, + A37D289EB403FF33F28BF9000E9BA420 /* Products */, + 1180FAA6352C2B7B9CD197C3BE846482 /* Targets Support Files */, ); sourceTree = ""; }; - E8F185C38F4D0FECED758E1073BF7128 /* Support Files */ = { + CFD0F97DD932B905E661F7A9C8302A7D /* iOSSnapshotTestCase */ = { isa = PBXGroup; children = ( - 900C95C1DE73EA90A623D23D95C912B0 /* iOSSnapshotTestCase.modulemap */, - B75A47899E602A5CA9E833F7D136622D /* iOSSnapshotTestCase.xcconfig */, - 796F28118D863DD7DDE14D1F6AC3DC9C /* iOSSnapshotTestCase-dummy.m */, - 64860ED4D1469506201CA2ECB2F54AF9 /* iOSSnapshotTestCase-Info.plist */, - 5069A3FAA385B1F702DF6F5C83461EF2 /* iOSSnapshotTestCase-prefix.pch */, - 58F4181C8833BE6DB86CDA8C805A00A9 /* iOSSnapshotTestCase-umbrella.h */, + A21DE819CCEFB039F235EC568DD5FBEE /* Core */, + 10377082182EFE0D7E0E6D60D58DFA90 /* Support Files */, + EF51F2FFBDF0376D72F24EF40E31779E /* SwiftSupport */, ); - name = "Support Files"; - path = "../Target Support Files/iOSSnapshotTestCase"; + name = iOSSnapshotTestCase; + path = iOSSnapshotTestCase; sourceTree = ""; }; - EFF1EAE44DF5397EE93427776ECDDC88 /* iOSSnapshotTestCase */ = { + DECB121B56316CD08BF986DAC0702702 /* Pods-DZNEmptyDataSetTests */ = { isa = PBXGroup; children = ( - 22F3ECA726DE45D34B3ADFE5F42DC86C /* Core */, - E8F185C38F4D0FECED758E1073BF7128 /* Support Files */, - A222A9C1427FEE47EF8DE5C03195EBC3 /* SwiftSupport */, + DCB62C3C3503D234557704B6FD1C3105 /* Pods-DZNEmptyDataSetTests.modulemap */, + 5C87E3CBFA70D9884A46EB21F5769C01 /* Pods-DZNEmptyDataSetTests-acknowledgements.markdown */, + 5FE9BE358F4BB5B86C550EF6CEDEC1BB /* Pods-DZNEmptyDataSetTests-acknowledgements.plist */, + 2AFC1E99AE8E26CCEC3398310BBCAD35 /* Pods-DZNEmptyDataSetTests-dummy.m */, + B861E30FEDC04CA6A8639F38D250AC3D /* Pods-DZNEmptyDataSetTests-frameworks.sh */, + 261532DCB77853A47A27D92BD15A739D /* Pods-DZNEmptyDataSetTests-Info.plist */, + 574C8B427481F411FBA0FB89B266DBFC /* Pods-DZNEmptyDataSetTests-umbrella.h */, + 051EFBB91C9A91E1100D3147DD0EA22F /* Pods-DZNEmptyDataSetTests.debug.xcconfig */, + 63F11F486BE2BC8632D596046D4FA7F8 /* Pods-DZNEmptyDataSetTests.release.xcconfig */, ); - name = iOSSnapshotTestCase; - path = iOSSnapshotTestCase; + name = "Pods-DZNEmptyDataSetTests"; + path = "Target Support Files/Pods-DZNEmptyDataSetTests"; + sourceTree = ""; + }; + EF51F2FFBDF0376D72F24EF40E31779E /* SwiftSupport */ = { + isa = PBXGroup; + children = ( + 76DF6A3B9EA5B47BA407F65C5E54A45E /* SwiftSupport.swift */, + ); + name = SwiftSupport; + sourceTree = ""; + }; + F3F44704727EF96B729A60DF09EB1EC9 /* Pods-Applications */ = { + isa = PBXGroup; + children = ( + EE2D4F6B903FA80861AF314EB8F4F728 /* Pods-Applications.modulemap */, + 06D1790119FAA8A273A94FFE931C1C0D /* Pods-Applications-acknowledgements.markdown */, + 6773BAF92621D499DB8E1C48879D0440 /* Pods-Applications-acknowledgements.plist */, + B672910CCABDEE18AA93B68F3584648D /* Pods-Applications-dummy.m */, + BF456646606C9AE0393004FC7B83886E /* Pods-Applications-frameworks.sh */, + BD4BEFEE937B1D9351571B29A139C1C5 /* Pods-Applications-Info.plist */, + AFC6F17BC2F95003B3D5756927909079 /* Pods-Applications-umbrella.h */, + B10BF1D34104F50F34C7216285F47078 /* Pods-Applications.debug.xcconfig */, + 306AE84C3F26C644C845131437A7917A /* Pods-Applications.release.xcconfig */, + ); + name = "Pods-Applications"; + path = "Target Support Files/Pods-Applications"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 12F90A431FB27F32CAD4D4DFFEE32FF7 /* Headers */ = { + 05EB618349350915F622C0F0F2B06D0C /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + A992D78BE9F7A42CE40BD4D2CB53B3AA /* Pods-Applications-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 07F2DC871D4F9282C729AD5C1939F3D9 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 370B6599BB08FAFD53343DB64AB4E825 /* Pods-DZNEmptyDataSetTests-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7DFCF5F12AEEED0500986DBC9BF76170 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 3B1E085DF7CFF7E649546346F4A0BC13 /* Pods-EmptyDataSetTests-umbrella.h in Headers */, + A66ED57B365A35434C5BAF4B990819B7 /* SnapKit-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -298,30 +564,114 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - D6B54FF9A1E85667A0622B61E0BD8B72 /* Headers */ = { + B7B8E9DC330BBFF9529BFD9B78831993 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4A00FE44F3F789ABEB88E16D122FD321 /* Pods-DZNEmptyDataSetTests-umbrella.h in Headers */, + 45CBB011A9386ADE27BACDD789287991 /* Pods-Bento-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E46368FF99C4B98A2DD2BED51ED065A9 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D25DBA6AF7D11C6F74CBA829AB90D8B0 /* Pods-EmptyDataSet-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7F8CE4DC18DBEA01587212F09727DB3D /* Build configuration list for PBXNativeTarget "SnapKit" */; + buildPhases = ( + 7DFCF5F12AEEED0500986DBC9BF76170 /* Headers */, + 89222AF845A30312C284F407BA48B98F /* Sources */, + 3C8B1704CC97EF12D3409771318C6433 /* Frameworks */, + 9C691CAA90D9565F2EFF5EF823D8A80C /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SnapKit; + productName = SnapKit; + productReference = 979486118B3E90C08386079D57962701 /* SnapKit.framework */; + productType = "com.apple.product-type.framework"; + }; + 305146273C67BB0A619445F7D9E691FA /* Pods-Applications */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5F728644B9B26206FF90AF6EBE61277D /* Build configuration list for PBXNativeTarget "Pods-Applications" */; + buildPhases = ( + 05EB618349350915F622C0F0F2B06D0C /* Headers */, + BDE458F9B898D68606B110358A6329FB /* Sources */, + 8F858070156EA0B62274A9486755B906 /* Frameworks */, + 5DF1CFEEF1FA62441A18BAE855AC18FB /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ACD19C6FDAE766315D193DA4D5535CED /* PBXTargetDependency */, + ); + name = "Pods-Applications"; + productName = "Pods-Applications"; + productReference = DB41BF1F17277416FBF8C0F8412ADB79 /* Pods_Applications.framework */; + productType = "com.apple.product-type.framework"; + }; + 6B93C698BAA4A0901F8AAF752C8EDC0D /* Pods-EmptyDataSet */ = { + isa = PBXNativeTarget; + buildConfigurationList = 45925B9A74393B787D0B8552FB10993E /* Build configuration list for PBXNativeTarget "Pods-EmptyDataSet" */; + buildPhases = ( + E46368FF99C4B98A2DD2BED51ED065A9 /* Headers */, + D28AC23142EE73DE1F500ABBF473C740 /* Sources */, + E7880A1A4107DBC059E53D9F8B86E9A6 /* Frameworks */, + 71AA6C67A63201125DEEE4DD04A13EFD /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 9993F0ED659D225497D7E7BDEA5AB4AA /* PBXTargetDependency */, + ); + name = "Pods-EmptyDataSet"; + productName = "Pods-EmptyDataSet"; + productReference = AED2E02F3FCAD023A93FB2BBBDDAA233 /* Pods_EmptyDataSet.framework */; + productType = "com.apple.product-type.framework"; + }; + AE5F0EC5A805C8E001F8086092590AA1 /* Pods-Bento */ = { + isa = PBXNativeTarget; + buildConfigurationList = F4E0AAF2DAADF2FE3673362A448B0CCE /* Build configuration list for PBXNativeTarget "Pods-Bento" */; + buildPhases = ( + B7B8E9DC330BBFF9529BFD9B78831993 /* Headers */, + 2944AED65A904C7DCCEFDAE8DAE4AFDD /* Sources */, + 0F95666F024CD6F3262628E242FDB729 /* Frameworks */, + 7AD772FAA32CBF996E2DFF8AB29B136F /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + E41C264B2775596F41F461AB0F7877F6 /* PBXTargetDependency */, + ); + name = "Pods-Bento"; + productName = "Pods-Bento"; + productReference = ADC6D3AB85B6EE3B5915BA7AF8A54A8C /* Pods_Bento.framework */; + productType = "com.apple.product-type.framework"; + }; B1EE7C977B6484DAE578FFC4A25371F7 /* Pods-DZNEmptyDataSetTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 010084C73E57B1D0D7124269DE2FB5B8 /* Build configuration list for PBXNativeTarget "Pods-DZNEmptyDataSetTests" */; + buildConfigurationList = 6D7B4E7EB204B4F78272A96C2ADA5BD6 /* Build configuration list for PBXNativeTarget "Pods-DZNEmptyDataSetTests" */; buildPhases = ( - D6B54FF9A1E85667A0622B61E0BD8B72 /* Headers */, - 0BD8C839914C19929CCB23D680CA392D /* Sources */, - 8ADC0E40B07D5BA0567CF010759D43B6 /* Frameworks */, - 5DE2A9DA7B2817224FE72F17AB02A9FB /* Resources */, + 07F2DC871D4F9282C729AD5C1939F3D9 /* Headers */, + 0BF2E4708CFA449D716ED104D130679F /* Sources */, + 9C3B34FFDC69FA04EA29F3457562B138 /* Frameworks */, + D0C3D150CCDFDD3F61E37D80B07FA141 /* Resources */, ); buildRules = ( ); dependencies = ( - 3C5DED3F5269999C13BBB8A7637252DE /* PBXTargetDependency */, + 6037A84B5FC92FCC5C1EC00E8E5FD553 /* PBXTargetDependency */, + BE54E54E91236233B9C43EF834C93579 /* PBXTargetDependency */, ); name = "Pods-DZNEmptyDataSetTests"; productName = "Pods-DZNEmptyDataSetTests"; @@ -346,25 +696,6 @@ productReference = B91B00F8BE943329D633234BD67AE0AC /* FBSnapshotTestCase.framework */; productType = "com.apple.product-type.framework"; }; - F22E9EB6070A0734E7A865931D24105B /* Pods-EmptyDataSetTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = D4D79C952AF7010F341E080CC0AE2F38 /* Build configuration list for PBXNativeTarget "Pods-EmptyDataSetTests" */; - buildPhases = ( - 12F90A431FB27F32CAD4D4DFFEE32FF7 /* Headers */, - 6E84AE3570D939BABEDFC6C999094782 /* Sources */, - 7A35EDA086C304554C2338DC74768756 /* Frameworks */, - C6D0DA03E5855DD9518529DE26678B3D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 4C2E33AF65BD368F9FA201F3F24CE3CF /* PBXTargetDependency */, - ); - name = "Pods-EmptyDataSetTests"; - productName = "Pods-EmptyDataSetTests"; - productReference = 1729263C6AF4C3457DF5FAF67D6CFE5D /* Pods_EmptyDataSetTests.framework */; - productType = "com.apple.product-type.framework"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -383,19 +714,43 @@ Base, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 17758483808FFC630062D87E87BA22CD /* Products */; + productRefGroup = A37D289EB403FF33F28BF9000E9BA420 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( C393038B0BEF088C1B93E6528005862D /* iOSSnapshotTestCase */, + 305146273C67BB0A619445F7D9E691FA /* Pods-Applications */, + AE5F0EC5A805C8E001F8086092590AA1 /* Pods-Bento */, B1EE7C977B6484DAE578FFC4A25371F7 /* Pods-DZNEmptyDataSetTests */, - F22E9EB6070A0734E7A865931D24105B /* Pods-EmptyDataSetTests */, + 6B93C698BAA4A0901F8AAF752C8EDC0D /* Pods-EmptyDataSet */, + 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 5DE2A9DA7B2817224FE72F17AB02A9FB /* Resources */ = { + 5DF1CFEEF1FA62441A18BAE855AC18FB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 71AA6C67A63201125DEEE4DD04A13EFD /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7AD772FAA32CBF996E2DFF8AB29B136F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9C691CAA90D9565F2EFF5EF823D8A80C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -409,7 +764,7 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - C6D0DA03E5855DD9518529DE26678B3D /* Resources */ = { + D0C3D150CCDFDD3F61E37D80B07FA141 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -419,19 +774,19 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 0BD8C839914C19929CCB23D680CA392D /* Sources */ = { + 0BF2E4708CFA449D716ED104D130679F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - AF16498E0663C46FD75357313DBE3D39 /* Pods-DZNEmptyDataSetTests-dummy.m in Sources */, + DECBD9272C97FB4427DE3C8B2050B6C8 /* Pods-DZNEmptyDataSetTests-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6E84AE3570D939BABEDFC6C999094782 /* Sources */ = { + 2944AED65A904C7DCCEFDAE8DAE4AFDD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 82EFF24AA6839F02578915C72F7582AC /* Pods-EmptyDataSetTests-dummy.m in Sources */, + B7E3632F21E7C8240AFB2EB6D4576ED6 /* Pods-Bento-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -450,24 +805,135 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 89222AF845A30312C284F407BA48B98F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3BFC243AB9BD579969F0D5756560BCAA /* Constraint.swift in Sources */, + 2A1BBBC87AC2367BD14610A9D10D285E /* ConstraintAttributes.swift in Sources */, + 9B09968922C73D50040C6EEF57890D6E /* ConstraintConfig.swift in Sources */, + 5854DF509E8A016B6235793D04083035 /* ConstraintConstantTarget.swift in Sources */, + B599696DFEF6B2A5ECF528F4E5BB1846 /* ConstraintDescription.swift in Sources */, + AC35C9341C4BB156BB26FDD237EE3721 /* ConstraintDirectionalInsets.swift in Sources */, + 71DE9DC2FA583526AB4D1FD7F00C099C /* ConstraintDirectionalInsetTarget.swift in Sources */, + 8277256ADEC3C4DCF79957D1CA681A9A /* ConstraintDSL.swift in Sources */, + 21AB1101BBE4D28D74ED4EDF0D59025A /* ConstraintInsets.swift in Sources */, + 2C06F2E972444D359754D21AC46BFFE2 /* ConstraintInsetTarget.swift in Sources */, + 99B5296A5EDECE0557B9DA53D9E19CA1 /* ConstraintItem.swift in Sources */, + 1AFB1E9136716C0B61D6C700FF1E60FD /* ConstraintLayoutGuide+Extensions.swift in Sources */, + A270CD9EC3C541FE86E65AEDCEF500CF /* ConstraintLayoutGuide.swift in Sources */, + 77C9889055A3B32EA13A9616824DB0ED /* ConstraintLayoutGuideDSL.swift in Sources */, + 57B1876F2BE4168E5BFDB63D8CC849A0 /* ConstraintLayoutSupport.swift in Sources */, + 01C550A53C9E2047C83F8E85BBB558E6 /* ConstraintLayoutSupportDSL.swift in Sources */, + 51CD5887014967E77E58F5A163996454 /* ConstraintMaker.swift in Sources */, + 7C1702076F3A31D8D2D45A4A9F09B266 /* ConstraintMakerEditable.swift in Sources */, + 69CCBEEDFCA6D743D80026568D961919 /* ConstraintMakerExtendable.swift in Sources */, + C412F27D75AFC0DF0F0289DBB270931C /* ConstraintMakerFinalizable.swift in Sources */, + EE909C7C786140109051BC9562EEC7C8 /* ConstraintMakerPriortizable.swift in Sources */, + 75E146C12D1287228A0B493E87CDE31F /* ConstraintMakerRelatable.swift in Sources */, + D4697DC40F3B059E4A0867838CA1814E /* ConstraintMultiplierTarget.swift in Sources */, + 8705BBF0D428BF0AE1B554A377ECC540 /* ConstraintOffsetTarget.swift in Sources */, + 232B2F922E972D9F43D2EE15ACECE734 /* ConstraintPriority.swift in Sources */, + E8F2429683B3015CBD39CE883770BCA7 /* ConstraintPriorityTarget.swift in Sources */, + 69E3A06BBDFDC7D06A9D4BDC4E895E73 /* ConstraintRelatableTarget.swift in Sources */, + CE62FEABA57B2B53EABF8C7DCCC6B2C4 /* ConstraintRelation.swift in Sources */, + 3E5285F4F36EAD77ECABBFB7F36BB1BB /* ConstraintView+Extensions.swift in Sources */, + BECA67DFB5E0984DFAEFCB775C31972E /* ConstraintView.swift in Sources */, + EB1726F5E0D0EEBA20E4528B1E37A8FA /* ConstraintViewDSL.swift in Sources */, + B780B272106411CBE258BB60FFC45410 /* Debugging.swift in Sources */, + 039EAFE7935113805F3FC21BF1B7C9D5 /* LayoutConstraint.swift in Sources */, + E9A970BC24EA15832F248EA020072746 /* LayoutConstraintItem.swift in Sources */, + 4C7A676DAE95EEAC3787A75349F0862D /* SnapKit-dummy.m in Sources */, + 1956E392D500F3CD899D39A5F805736D /* Typealiases.swift in Sources */, + 6E0EB9E7FAAEDBB7A73ECF3095F69C4A /* UILayoutSupport+Extensions.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BDE458F9B898D68606B110358A6329FB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C073210591E414357D5A5C9009ABDF8E /* Pods-Applications-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D28AC23142EE73DE1F500ABBF473C740 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2CBF7DEEF65392897EFBC35D9A09FABB /* Pods-EmptyDataSet-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 3C5DED3F5269999C13BBB8A7637252DE /* PBXTargetDependency */ = { + 6037A84B5FC92FCC5C1EC00E8E5FD553 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = iOSSnapshotTestCase; - target = C393038B0BEF088C1B93E6528005862D /* iOSSnapshotTestCase */; - targetProxy = 1970170B56D3F0BE38BD9DD9C582A769 /* PBXContainerItemProxy */; + name = SnapKit; + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; + targetProxy = 9D659BFF86E06BB95E4F84DC00F86DC2 /* PBXContainerItemProxy */; }; - 4C2E33AF65BD368F9FA201F3F24CE3CF /* PBXTargetDependency */ = { + 9993F0ED659D225497D7E7BDEA5AB4AA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SnapKit; + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; + targetProxy = 32E128361F15B1FF30A123342AEAD359 /* PBXContainerItemProxy */; + }; + ACD19C6FDAE766315D193DA4D5535CED /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SnapKit; + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; + targetProxy = BF85A9AB9C55B6C03D5437F3CD473B8F /* PBXContainerItemProxy */; + }; + BE54E54E91236233B9C43EF834C93579 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = iOSSnapshotTestCase; target = C393038B0BEF088C1B93E6528005862D /* iOSSnapshotTestCase */; - targetProxy = 974C9C9D02D9F34F3F4008C7FE80EE21 /* PBXContainerItemProxy */; + targetProxy = 1DC2E5B6622424C75A95D2DA5571247B /* PBXContainerItemProxy */; + }; + E41C264B2775596F41F461AB0F7877F6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SnapKit; + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; + targetProxy = EAB7C7E47ED215787C4F0FA4D31C39D8 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ + 020BEC27E3AD6D7C84D288C148A58E74 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 39309FF58F4F8458ED74F252C8562AB2 /* SnapKit.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; + PRODUCT_MODULE_NAME = SnapKit; + PRODUCT_NAME = SnapKit; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 196DFA3E4A09A28224918543529A1885 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -532,9 +998,41 @@ }; name = Debug; }; - 4B756B0C319E4C27F01C0781C4A33A48 /* Release */ = { + 2E3C8A300772E0028147E4BAF0D5078A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 39309FF58F4F8458ED74F252C8562AB2 /* SnapKit.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; + PRODUCT_MODULE_NAME = SnapKit; + PRODUCT_NAME = SnapKit; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 79CC4E7753F54CB9BD7B6C253109C5EF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 219C55A87100C3F768EA58AB6A011319 /* Pods-DZNEmptyDataSetTests.release.xcconfig */; + baseConfigurationReference = DEC218B769C46E7B4EE81626512077FA /* Pods-Bento.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; @@ -547,12 +1045,12 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Bento/Pods-Bento-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-Bento/Pods-Bento.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -567,9 +1065,9 @@ }; name = Release; }; - 589AAD4B6B784B8CBCCCF62BA0C7C7D4 /* Release */ = { + 8273F671372DCC5D8DECAE112429A1F7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BBCACE771CD60C1357EF2772ACFA9A5A /* Pods-EmptyDataSetTests.release.xcconfig */; + baseConfigurationReference = EB66BF06F7911DF85E2557DEB7BD8B6D /* Pods-EmptyDataSet.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; @@ -582,12 +1080,46 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 8ABA56DA4587184BD9DF2DF0109D360B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 306AE84C3F26C644C845131437A7917A /* Pods-Applications.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-Applications/Pods-Applications-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Applications/Pods-Applications.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -602,9 +1134,78 @@ }; name = Release; }; - 6393F6295629B82BB95C294654C46850 /* Debug */ = { + 970AA8B847EAD3073063B855C97B231A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 63F11F486BE2BC8632D596046D4FA7F8 /* Pods-DZNEmptyDataSetTests.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 9B7CD3ED739DDFB5CD2C15F27B5DCBB1 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 051EFBB91C9A91E1100D3147DD0EA22F /* Pods-DZNEmptyDataSetTests.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + AD0F6071E0AB0ACB7933EFB7C4BB72F4 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 332524405EDFD5162E55CBC3D200E051 /* Pods-EmptyDataSetTests.debug.xcconfig */; + baseConfigurationReference = E90DEF0616B4CBFD4E71F978EB1EEF53 /* Pods-Bento.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; @@ -617,12 +1218,12 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Bento/Pods-Bento-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-Bento/Pods-Bento.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -696,10 +1297,11 @@ }; name = Release; }; - E30677E30722EED4EFAAF96B70FB53E0 /* Debug */ = { + BFEF5DFC657A5A17557BF850CA58ED54 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B75A47899E602A5CA9E833F7D136622D /* iOSSnapshotTestCase.xcconfig */; + baseConfigurationReference = 02F3013369C9861B2458E9A38A07C11C /* Pods-EmptyDataSet.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -710,27 +1312,63 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/iOSSnapshotTestCase/iOSSnapshotTestCase-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/iOSSnapshotTestCase/iOSSnapshotTestCase-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/iOSSnapshotTestCase/iOSSnapshotTestCase.modulemap"; - PRODUCT_MODULE_NAME = FBSnapshotTestCase; - PRODUCT_NAME = FBSnapshotTestCase; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + CD3A91965F811FB1358B0839B1FD8AFE /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B10BF1D34104F50F34C7216285F47078 /* Pods-Applications.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-Applications/Pods-Applications-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Applications/Pods-Applications.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - EC06F4BCD0F4CC10B27E32823A6F0935 /* Release */ = { + E30677E30722EED4EFAAF96B70FB53E0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B75A47899E602A5CA9E833F7D136622D /* iOSSnapshotTestCase.xcconfig */; + baseConfigurationReference = 64A732CAD1B5652659390A19B6C0C8DF /* iOSSnapshotTestCase.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; @@ -755,17 +1393,15 @@ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - F8191286B6058D8C892B2D45D81C7670 /* Debug */ = { + EC06F4BCD0F4CC10B27E32823A6F0935 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9E40F32945DC9CF56B2E7A875BDF9DBE /* Pods-DZNEmptyDataSetTests.debug.xcconfig */; + baseConfigurationReference = 64A732CAD1B5652659390A19B6C0C8DF /* iOSSnapshotTestCase.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -776,33 +1412,33 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/iOSSnapshotTestCase/iOSSnapshotTestCase-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/iOSSnapshotTestCase/iOSSnapshotTestCase-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/iOSSnapshotTestCase/iOSSnapshotTestCase.modulemap"; + PRODUCT_MODULE_NAME = FBSnapshotTestCase; + PRODUCT_NAME = FBSnapshotTestCase; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.1; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 010084C73E57B1D0D7124269DE2FB5B8 /* Build configuration list for PBXNativeTarget "Pods-DZNEmptyDataSetTests" */ = { + 45925B9A74393B787D0B8552FB10993E /* Build configuration list for PBXNativeTarget "Pods-EmptyDataSet" */ = { isa = XCConfigurationList; buildConfigurations = ( - F8191286B6058D8C892B2D45D81C7670 /* Debug */, - 4B756B0C319E4C27F01C0781C4A33A48 /* Release */, + 8273F671372DCC5D8DECAE112429A1F7 /* Debug */, + BFEF5DFC657A5A17557BF850CA58ED54 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -816,6 +1452,33 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 5F728644B9B26206FF90AF6EBE61277D /* Build configuration list for PBXNativeTarget "Pods-Applications" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CD3A91965F811FB1358B0839B1FD8AFE /* Debug */, + 8ABA56DA4587184BD9DF2DF0109D360B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6D7B4E7EB204B4F78272A96C2ADA5BD6 /* Build configuration list for PBXNativeTarget "Pods-DZNEmptyDataSetTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9B7CD3ED739DDFB5CD2C15F27B5DCBB1 /* Debug */, + 970AA8B847EAD3073063B855C97B231A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7F8CE4DC18DBEA01587212F09727DB3D /* Build configuration list for PBXNativeTarget "SnapKit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2E3C8A300772E0028147E4BAF0D5078A /* Debug */, + 020BEC27E3AD6D7C84D288C148A58E74 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; A2580343E01EF46F4A1E600895C7753A /* Build configuration list for PBXNativeTarget "iOSSnapshotTestCase" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -825,11 +1488,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D4D79C952AF7010F341E080CC0AE2F38 /* Build configuration list for PBXNativeTarget "Pods-EmptyDataSetTests" */ = { + F4E0AAF2DAADF2FE3673362A448B0CCE /* Build configuration list for PBXNativeTarget "Pods-Bento" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6393F6295629B82BB95C294654C46850 /* Debug */, - 589AAD4B6B784B8CBCCCF62BA0C7C7D4 /* Release */, + AD0F6071E0AB0ACB7933EFB7C4BB72F4 /* Debug */, + 79CC4E7753F54CB9BD7B6C253109C5EF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/DZNEmptyDataSet/Pods/SnapKit/LICENSE b/DZNEmptyDataSet/Pods/SnapKit/LICENSE new file mode 100644 index 00000000..a18ccfbd --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/LICENSE @@ -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. diff --git a/DZNEmptyDataSet/Pods/SnapKit/README.md b/DZNEmptyDataSet/Pods/SnapKit/README.md new file mode 100644 index 00000000..0945ce66 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/README.md @@ -0,0 +1,136 @@ + + +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 '' 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. diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/Constraint.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/Constraint.swift new file mode 100644 index 00000000..390629ef --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/Constraint.swift @@ -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]) + } +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintAttributes.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintAttributes.swift new file mode 100644 index 00000000..2f0fbe96 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintAttributes.swift @@ -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 +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintConfig.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintConfig.swift new file mode 100644 index 00000000..2746b7d2 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintConfig.swift @@ -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 + +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintConstantTarget.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintConstantTarget.swift new file mode 100644 index 00000000..7f549078 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintConstantTarget.swift @@ -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 + } + +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintDSL.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintDSL.swift new file mode 100644 index 00000000..ecc5173e --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintDSL.swift @@ -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) + } + +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintDescription.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintDescription.swift new file mode 100644 index 00000000..3521f9f9 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintDescription.swift @@ -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 + } + +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintDirectionalInsetTarget.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintDirectionalInsetTarget.swift new file mode 100644 index 00000000..955aec35 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintDirectionalInsetTarget.swift @@ -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 diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintDirectionalInsets.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintDirectionalInsets.swift new file mode 100644 index 00000000..ada8ed5b --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintDirectionalInsets.swift @@ -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 diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintInsetTarget.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintInsetTarget.swift new file mode 100644 index 00000000..ba8a0f3e --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintInsetTarget.swift @@ -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) + } + } + +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintInsets.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintInsets.swift new file mode 100644 index 00000000..738ca055 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintInsets.swift @@ -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 diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintItem.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintItem.swift new file mode 100644 index 00000000..a342c1d9 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintItem.swift @@ -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 +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift new file mode 100644 index 00000000..d429e0cc --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift @@ -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) + } + +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintLayoutGuide.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintLayoutGuide.swift new file mode 100644 index 00000000..e3e50c89 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintLayoutGuide.swift @@ -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 diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift new file mode 100644 index 00000000..0007819c --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift @@ -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 + + } + +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintLayoutSupport.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintLayoutSupport.swift new file mode 100644 index 00000000..e92e9fbc --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintLayoutSupport.swift @@ -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 diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift new file mode 100644 index 00000000..5d6ae899 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift @@ -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) + } +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMaker.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMaker.swift new file mode 100644 index 00000000..38f4d316 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMaker.swift @@ -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() + } + } + +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMakerEditable.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMakerEditable.swift new file mode 100644 index 00000000..f768a177 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMakerEditable.swift @@ -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 +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMakerExtendable.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMakerExtendable.swift new file mode 100644 index 00000000..ce471690 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMakerExtendable.swift @@ -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 + } + +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift new file mode 100644 index 00000000..4e1379e2 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift @@ -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! + } + +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift new file mode 100644 index 00000000..e0d452d1 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift @@ -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) + } +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMakerRelatable.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMakerRelatable.swift new file mode 100644 index 00000000..78895323 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMakerRelatable.swift @@ -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) + } +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift new file mode 100644 index 00000000..6fecd33e --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift @@ -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 + } + +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintOffsetTarget.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintOffsetTarget.swift new file mode 100644 index 00000000..bd9e0a1e --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintOffsetTarget.swift @@ -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 + } + +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintPriority.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintPriority.swift new file mode 100644 index 00000000..f9dab162 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintPriority.swift @@ -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 + } +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintPriorityTarget.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintPriorityTarget.swift new file mode 100644 index 00000000..064f750b --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintPriorityTarget.swift @@ -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 diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintRelatableTarget.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintRelatableTarget.swift new file mode 100644 index 00000000..d517a61e --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintRelatableTarget.swift @@ -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 { +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintRelation.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintRelation.swift new file mode 100644 index 00000000..446aaf76 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintRelation.swift @@ -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 + } + } + } +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintView+Extensions.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintView+Extensions.swift new file mode 100644 index 00000000..a4898dc1 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintView+Extensions.swift @@ -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) + } + +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintView.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintView.swift new file mode 100644 index 00000000..6ff8a76e --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintView.swift @@ -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 diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintViewDSL.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintViewDSL.swift new file mode 100644 index 00000000..a0187f97 --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/ConstraintViewDSL.swift @@ -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 + + } + +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/Debugging.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/Debugging.swift new file mode 100644 index 00000000..a78579ab --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/Debugging.swift @@ -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(from object: Optional) -> Optional { + return object +} + +private func conditionalOptional(from object: T) -> Optional { + return Optional.some(object) +} + +private func descriptionForObject(_ object: AnyObject) -> String { + let pointerDescription = String(format: "%p", UInt(bitPattern: ObjectIdentifier(object))) + var desc = "" + + desc += type(of: object).description() + + if let object = object as? ConstraintView { + desc += ":\(object.snp.label() ?? pointerDescription)" + } else if let object = object as? LayoutConstraint { + desc += ":\(object.label ?? pointerDescription)" + } else { + desc += ":\(pointerDescription)" + } + + if let object = object as? LayoutConstraint, let file = object.constraint?.sourceLocation.0, let line = object.constraint?.sourceLocation.1 { + desc += "@\((file as NSString).lastPathComponent)#\(line)" + } + + desc += "" + return desc +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/LayoutConstraint.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/LayoutConstraint.swift new file mode 100644 index 00000000..5425ea8e --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/LayoutConstraint.swift @@ -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 +} diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/LayoutConstraintItem.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/LayoutConstraintItem.swift new file mode 100644 index 00000000..a59de6bf --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/LayoutConstraintItem.swift @@ -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 diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/Typealiases.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/Typealiases.swift new file mode 100644 index 00000000..ded96ccd --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/Typealiases.swift @@ -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 + diff --git a/DZNEmptyDataSet/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift b/DZNEmptyDataSet/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift new file mode 100644 index 00000000..8e7644cf --- /dev/null +++ b/DZNEmptyDataSet/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift @@ -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) + } + +} diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-Info.plist b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications-Info.plist similarity index 100% rename from DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-Info.plist rename to DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications-Info.plist diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-acknowledgements.markdown b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications-acknowledgements.markdown similarity index 83% rename from DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-acknowledgements.markdown rename to DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications-acknowledgements.markdown index 86eb1f4a..25f8f66c 100644 --- a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-acknowledgements.markdown +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications-acknowledgements.markdown @@ -1,12 +1,9 @@ # Acknowledgements This application makes use of the following third party libraries: -## iOSSnapshotTestCase +## SnapKit -MIT License - -Copyright (c) 2017-2018, Uber Technologies, Inc. -Copyright (c) 2013-2018, Facebook, Inc. +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 @@ -15,15 +12,15 @@ 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 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. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. Generated by CocoaPods - https://cocoapods.org diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-acknowledgements.plist b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications-acknowledgements.plist similarity index 88% rename from DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-acknowledgements.plist rename to DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications-acknowledgements.plist index f24c9fdf..8474d451 100644 --- a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-acknowledgements.plist +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications-acknowledgements.plist @@ -14,10 +14,7 @@ FooterText - MIT License - -Copyright (c) 2017-2018, Uber Technologies, Inc. -Copyright (c) 2013-2018, Facebook, Inc. + 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 @@ -26,21 +23,21 @@ 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 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. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. License MIT Title - iOSSnapshotTestCase + SnapKit Type PSGroupSpecifier diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications-dummy.m b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications-dummy.m new file mode 100644 index 00000000..33ed7538 --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Applications : NSObject +@end +@implementation PodsDummy_Pods_Applications +@end diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-frameworks.sh b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications-frameworks.sh similarity index 97% rename from DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-frameworks.sh rename to DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications-frameworks.sh index 7610fea1..b253b3b3 100755 --- a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-frameworks.sh +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications-frameworks.sh @@ -161,10 +161,10 @@ strip_invalid_archs() { if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/iOSSnapshotTestCase/FBSnapshotTestCase.framework" + install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/iOSSnapshotTestCase/FBSnapshotTestCase.framework" + install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-umbrella.h b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications-umbrella.h similarity index 58% rename from DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-umbrella.h rename to DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications-umbrella.h index b01ae92e..7d5ecb8b 100644 --- a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-umbrella.h +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications-umbrella.h @@ -11,6 +11,6 @@ #endif -FOUNDATION_EXPORT double Pods_EmptyDataSetTestsVersionNumber; -FOUNDATION_EXPORT const unsigned char Pods_EmptyDataSetTestsVersionString[]; +FOUNDATION_EXPORT double Pods_ApplicationsVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_ApplicationsVersionString[]; diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests.debug.xcconfig b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications.debug.xcconfig similarity index 53% rename from DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests.debug.xcconfig rename to DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications.debug.xcconfig index 03f9ee10..5ff82a81 100644 --- a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests.debug.xcconfig +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications.debug.xcconfig @@ -1,10 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase/FBSnapshotTestCase.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase/FBSnapshotTestCase.framework/Headers" -iframework "$(PLATFORM_DIR)/Developer/Library/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase" -OTHER_LDFLAGS = $(inherited) -framework "FBSnapshotTestCase" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" -framework "XCTest" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" +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) diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications.modulemap b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications.modulemap new file mode 100644 index 00000000..a8953272 --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications.modulemap @@ -0,0 +1,6 @@ +framework module Pods_Applications { + umbrella header "Pods-Applications-umbrella.h" + + export * + module * { export * } +} diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests.release.xcconfig b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications.release.xcconfig similarity index 53% rename from DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests.release.xcconfig rename to DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications.release.xcconfig index 03f9ee10..5ff82a81 100644 --- a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests.release.xcconfig +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Applications/Pods-Applications.release.xcconfig @@ -1,10 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase/FBSnapshotTestCase.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase/FBSnapshotTestCase.framework/Headers" -iframework "$(PLATFORM_DIR)/Developer/Library/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase" -OTHER_LDFLAGS = $(inherited) -framework "FBSnapshotTestCase" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" -framework "XCTest" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" +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) diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-Info.plist b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-Info.plist new file mode 100644 index 00000000..2243fe6e --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-acknowledgements.markdown b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-acknowledgements.markdown new file mode 100644 index 00000000..25f8f66c --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-acknowledgements.markdown @@ -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 diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-acknowledgements.plist b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-acknowledgements.plist new file mode 100644 index 00000000..8474d451 --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-acknowledgements.plist @@ -0,0 +1,58 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + License + MIT + Title + SnapKit + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-dummy.m b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-dummy.m new file mode 100644 index 00000000..7e089db8 --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Bento : NSObject +@end +@implementation PodsDummy_Pods_Bento +@end diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-frameworks.sh b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-frameworks.sh new file mode 100755 index 00000000..b253b3b3 --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-frameworks.sh @@ -0,0 +1,171 @@ +#!/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}" + +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + 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" + if [ -r "$source" ]; then + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi + fi +} + +# 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 +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi + stripped="" + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=1 +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/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 diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-umbrella.h b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-umbrella.h new file mode 100644 index 00000000..c368fa2f --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_BentoVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_BentoVersionString[]; + diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento.debug.xcconfig b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento.debug.xcconfig new file mode 100644 index 00000000..5ff82a81 --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento.debug.xcconfig @@ -0,0 +1,13 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +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_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" +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 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento.modulemap b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento.modulemap new file mode 100644 index 00000000..8d21bfa9 --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento.modulemap @@ -0,0 +1,6 @@ +framework module Pods_Bento { + umbrella header "Pods-Bento-umbrella.h" + + export * + module * { export * } +} diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento.release.xcconfig b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento.release.xcconfig new file mode 100644 index 00000000..5ff82a81 --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-Bento/Pods-Bento.release.xcconfig @@ -0,0 +1,13 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +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_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" +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 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests-acknowledgements.markdown b/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests-acknowledgements.markdown index 86eb1f4a..2f639a73 100644 --- a/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests-acknowledgements.markdown +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests-acknowledgements.markdown @@ -1,6 +1,29 @@ # 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. + + ## iOSSnapshotTestCase MIT License diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests-acknowledgements.plist b/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests-acknowledgements.plist index f24c9fdf..3824785a 100644 --- a/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests-acknowledgements.plist +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests-acknowledgements.plist @@ -12,6 +12,35 @@ Type PSGroupSpecifier + + FooterText + Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + License + MIT + Title + SnapKit + Type + PSGroupSpecifier + FooterText MIT License diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests-frameworks.sh b/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests-frameworks.sh index 7610fea1..cd3254aa 100755 --- a/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests-frameworks.sh +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests-frameworks.sh @@ -161,9 +161,11 @@ strip_invalid_archs() { if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" install_framework "${BUILT_PRODUCTS_DIR}/iOSSnapshotTestCase/FBSnapshotTestCase.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" install_framework "${BUILT_PRODUCTS_DIR}/iOSSnapshotTestCase/FBSnapshotTestCase.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests.debug.xcconfig b/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests.debug.xcconfig index 03f9ee10..a13e39ad 100644 --- a/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests.debug.xcconfig +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests.debug.xcconfig @@ -1,10 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase/FBSnapshotTestCase.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase/FBSnapshotTestCase.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase/FBSnapshotTestCase.framework/Headers" -iframework "$(PLATFORM_DIR)/Developer/Library/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase" -OTHER_LDFLAGS = $(inherited) -framework "FBSnapshotTestCase" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" -framework "XCTest" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase/FBSnapshotTestCase.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" -iframework "$(PLATFORM_DIR)/Developer/Library/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase" +OTHER_LDFLAGS = $(inherited) -framework "FBSnapshotTestCase" -framework "Foundation" -framework "QuartzCore" -framework "SnapKit" -framework "UIKit" -framework "XCTest" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests.release.xcconfig b/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests.release.xcconfig index 03f9ee10..a13e39ad 100644 --- a/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests.release.xcconfig +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-DZNEmptyDataSetTests/Pods-DZNEmptyDataSetTests.release.xcconfig @@ -1,10 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase/FBSnapshotTestCase.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase/FBSnapshotTestCase.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase/FBSnapshotTestCase.framework/Headers" -iframework "$(PLATFORM_DIR)/Developer/Library/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase" -OTHER_LDFLAGS = $(inherited) -framework "FBSnapshotTestCase" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" -framework "XCTest" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase/FBSnapshotTestCase.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" -iframework "$(PLATFORM_DIR)/Developer/Library/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/iOSSnapshotTestCase" +OTHER_LDFLAGS = $(inherited) -framework "FBSnapshotTestCase" -framework "Foundation" -framework "QuartzCore" -framework "SnapKit" -framework "UIKit" -framework "XCTest" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet-Info.plist b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet-Info.plist new file mode 100644 index 00000000..2243fe6e --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet-acknowledgements.markdown b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet-acknowledgements.markdown new file mode 100644 index 00000000..25f8f66c --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet-acknowledgements.markdown @@ -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 diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet-acknowledgements.plist b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet-acknowledgements.plist new file mode 100644 index 00000000..8474d451 --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet-acknowledgements.plist @@ -0,0 +1,58 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + License + MIT + Title + SnapKit + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet-dummy.m b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet-dummy.m new file mode 100644 index 00000000..2b0682ef --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_EmptyDataSet : NSObject +@end +@implementation PodsDummy_Pods_EmptyDataSet +@end diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet-umbrella.h b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet-umbrella.h new file mode 100644 index 00000000..5ccc9493 --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_EmptyDataSetVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_EmptyDataSetVersionString[]; + diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet.debug.xcconfig b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet.debug.xcconfig new file mode 100644 index 00000000..30012bc5 --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet.debug.xcconfig @@ -0,0 +1,12 @@ +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' '@executable_path/../../Frameworks' +OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" +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 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet.modulemap b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet.modulemap new file mode 100644 index 00000000..20e8975d --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet.modulemap @@ -0,0 +1,6 @@ +framework module Pods_EmptyDataSet { + umbrella header "Pods-EmptyDataSet-umbrella.h" + + export * + module * { export * } +} diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet.release.xcconfig b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet.release.xcconfig new file mode 100644 index 00000000..30012bc5 --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSet/Pods-EmptyDataSet.release.xcconfig @@ -0,0 +1,12 @@ +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' '@executable_path/../../Frameworks' +OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" +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 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-dummy.m b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-dummy.m deleted file mode 100644 index acda19c1..00000000 --- a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_EmptyDataSetTests : NSObject -@end -@implementation PodsDummy_Pods_EmptyDataSetTests -@end diff --git a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests.modulemap b/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests.modulemap deleted file mode 100644 index c014ad80..00000000 --- a/DZNEmptyDataSet/Pods/Target Support Files/Pods-EmptyDataSetTests/Pods-EmptyDataSetTests.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pods_EmptyDataSetTests { - umbrella header "Pods-EmptyDataSetTests-umbrella.h" - - export * - module * { export * } -} diff --git a/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit-Info.plist b/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit-Info.plist new file mode 100644 index 00000000..8d87a1ae --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 5.0.1 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit-dummy.m b/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit-dummy.m new file mode 100644 index 00000000..b44e8e58 --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_SnapKit : NSObject +@end +@implementation PodsDummy_SnapKit +@end diff --git a/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch b/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch new file mode 100644 index 00000000..beb2a244 --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h b/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h new file mode 100644 index 00000000..1b1be641 --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double SnapKitVersionNumber; +FOUNDATION_EXPORT const unsigned char SnapKitVersionString[]; + diff --git a/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit.modulemap b/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit.modulemap new file mode 100644 index 00000000..4b3e47b2 --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit.modulemap @@ -0,0 +1,6 @@ +framework module SnapKit { + umbrella header "SnapKit-umbrella.h" + + export * + module * { export * } +} diff --git a/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit.xcconfig b/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit.xcconfig new file mode 100644 index 00000000..03ea6fe3 --- /dev/null +++ b/DZNEmptyDataSet/Pods/Target Support Files/SnapKit/SnapKit.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/DZNEmptyDataSet/Sample - Bento/AppDelegate.swift b/DZNEmptyDataSet/Sample - Bento/AppDelegate.swift new file mode 100644 index 00000000..e39e044f --- /dev/null +++ b/DZNEmptyDataSet/Sample - Bento/AppDelegate.swift @@ -0,0 +1,35 @@ +// +// AppDelegate.swift +// Bento +// +// Created by Ignacio Romero Zurbuchen on 2019-12-31. +// Copyright © 2019 DZN. All rights reserved. +// + +import UIKit + +@UIApplicationMain +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) { + // 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. + } + + +} + diff --git a/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Contents.json b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..bb97d4d0 --- /dev/null +++ b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,62 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024.png b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024.png new file mode 100644 index 00000000..2f8b5511 Binary files /dev/null and b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024.png differ diff --git a/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 00000000..f694c283 Binary files /dev/null and b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 00000000..ce04d00c Binary files /dev/null and b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 00000000..6d89ee2c Binary files /dev/null and b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 00000000..a1c80592 Binary files /dev/null and b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 00000000..aa7dca1b Binary files /dev/null and b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 00000000..c422c184 Binary files /dev/null and b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 00000000..6f4d0965 Binary files /dev/null and b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 00000000..a0961d61 Binary files /dev/null and b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/Bento-Box.imageset/Bento-Box.jpg b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/Bento-Box.imageset/Bento-Box.jpg new file mode 100644 index 00000000..98771117 Binary files /dev/null and b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/Bento-Box.imageset/Bento-Box.jpg differ diff --git a/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/Bento-Box.imageset/Bento-Box@2x.jpg b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/Bento-Box.imageset/Bento-Box@2x.jpg new file mode 100644 index 00000000..2010c7da Binary files /dev/null and b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/Bento-Box.imageset/Bento-Box@2x.jpg differ diff --git a/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/Bento-Box.imageset/Contents.json b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/Bento-Box.imageset/Contents.json new file mode 100644 index 00000000..6ce44911 --- /dev/null +++ b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/Bento-Box.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Bento-Box.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Bento-Box@2x.jpg", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/Contents.json b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/Contents.json new file mode 100644 index 00000000..da4a164c --- /dev/null +++ b/DZNEmptyDataSet/Sample - Bento/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/DZNEmptyDataSet/Sample - Bento/Base.lproj/LaunchScreen.storyboard b/DZNEmptyDataSet/Sample - Bento/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000..865e9329 --- /dev/null +++ b/DZNEmptyDataSet/Sample - Bento/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DZNEmptyDataSet/Sample - Bento/Base.lproj/Main.storyboard b/DZNEmptyDataSet/Sample - Bento/Base.lproj/Main.storyboard new file mode 100644 index 00000000..25a76385 --- /dev/null +++ b/DZNEmptyDataSet/Sample - Bento/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DZNEmptyDataSet/Sample - Bento/Info.plist b/DZNEmptyDataSet/Sample - Bento/Info.plist new file mode 100644 index 00000000..b5f9c079 --- /dev/null +++ b/DZNEmptyDataSet/Sample - Bento/Info.plist @@ -0,0 +1,62 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/DZNEmptyDataSet/Sample - Bento/SceneDelegate.swift b/DZNEmptyDataSet/Sample - Bento/SceneDelegate.swift new file mode 100644 index 00000000..e247e0e5 --- /dev/null +++ b/DZNEmptyDataSet/Sample - Bento/SceneDelegate.swift @@ -0,0 +1,53 @@ +// +// SceneDelegate.swift +// Bento +// +// Created by Ignacio Romero Zurbuchen on 2019-12-31. +// Copyright © 2019 DZN. All rights reserved. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/DZNEmptyDataSet/Sample - Bento/ViewController.swift b/DZNEmptyDataSet/Sample - Bento/ViewController.swift new file mode 100644 index 00000000..e119b42e --- /dev/null +++ b/DZNEmptyDataSet/Sample - Bento/ViewController.swift @@ -0,0 +1,108 @@ +// +// ViewController.swift +// Bento +// +// Created by Ignacio Romero Zurbuchen on 2019-12-31. +// Copyright © 2019 DZN. All rights reserved. +// + +import UIKit +import EmptyDataSet + +class ViewController: UIViewController { + + lazy var tableView: UITableView = { + let tableView = UITableView(frame: view.bounds, style: .plain) + tableView.dataSource = self + tableView.tableFooterView = UIView() + tableView.emptyDataSetSource = self + tableView.emptyDataSetDelegate = self + return tableView + }() + + override func viewDidLoad() { + super.viewDidLoad() + + view.addSubview(tableView) + } +} + +extension ViewController: UITableViewDataSource { + + func numberOfSections(in tableView: UITableView) -> Int { + return 0 + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return 0 + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = UITableViewCell() + cell.textLabel?.text = "cell \(indexPath.row+1)" + return cell + } + + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return 50 + } +} + +extension ViewController: EmptyDataSetSource { + + func title(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? { + return NSAttributedString(string: "Hello") + } + + func description(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? { + return NSAttributedString(string: "World") + } + + func image(forEmptyDataSet scrollView: UIScrollView) -> UIImage? { + return UIImage(named: "Bento-Box") + } + + func backgroundColor(forEmptyDataSet scrollView: UIScrollView) -> UIColor? { + return UIColor(red: 232/255, green: 240/255, blue: 242/255, alpha: 1) + } + + func spacing(forEmptyDataSet scrollView: UIScrollView, after emptyDataSetElement: EmptyDataSetElement) -> CGFloat? { + switch emptyDataSetElement { + case .image: + return 30 + default: + return nil + } + } +} + +extension ViewController: EmptyDataSetDelegate { + + func emptyDataSetShouldDisplay(_ scrollView: UIScrollView) -> Bool { + return true + } + + func emptyDataSetShouldForceToDisplay(_ scrollView: UIScrollView) -> Bool { + return false + } + + func emptyDataSetShouldFadeIn(_ scrollView: UIScrollView) -> Bool { + return true + } + + func emptyDataSetShouldAllowScroll(_ scrollView: UIScrollView) -> Bool { + return true + } + + func emptyDataSetShouldAllowTouch(_ scrollView: UIScrollView) -> Bool { + return true + } + + func emptyDataSet(_ scrollView: UIScrollView, didTapView view: UIView) { + print("didTapView") + } + + func emptyDataSet(_ scrollView: UIScrollView, didTapButton button: UIButton) { + print("didTapButton") + } +} diff --git a/Source/Objc/DZNEmptyDataSet.h b/Source/Objc/DZNEmptyDataSet.h new file mode 100644 index 00000000..b5d47fe6 --- /dev/null +++ b/Source/Objc/DZNEmptyDataSet.h @@ -0,0 +1,14 @@ +// +// DZNEmptyDataSet.h +// DZNEmptyDataSet +// +// Created by Ignacio Romero on 2/28/17. +// Copyright © 2017 DZN. All rights reserved. +// + +#import +#import +#import + +FOUNDATION_EXPORT double DZNEmptyDataSetVersionNumber; +FOUNDATION_EXPORT const unsigned char DZNEmptyDataSetVersionString[]; diff --git a/Source/Objc/Info.plist b/Source/Objc/Info.plist new file mode 100644 index 00000000..fbe1e6b3 --- /dev/null +++ b/Source/Objc/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/Source/UIScrollView+EmptyDataSet.h b/Source/Objc/UIScrollView+EmptyDataSet.h similarity index 100% rename from Source/UIScrollView+EmptyDataSet.h rename to Source/Objc/UIScrollView+EmptyDataSet.h diff --git a/Source/UIScrollView+EmptyDataSet.m b/Source/Objc/UIScrollView+EmptyDataSet.m similarity index 100% rename from Source/UIScrollView+EmptyDataSet.m rename to Source/Objc/UIScrollView+EmptyDataSet.m diff --git a/Source/Swift/DZNEmptyDataSet.h b/Source/Swift/DZNEmptyDataSet.h new file mode 100644 index 00000000..c1703d60 --- /dev/null +++ b/Source/Swift/DZNEmptyDataSet.h @@ -0,0 +1,13 @@ +// +// DZNEmptyDataSet.h +// EmptyDataSet +// +// Created by Ignacio Romero Zurbuchen on 2019-12-31. +// Copyright © 2019 DZN. All rights reserved. +// + +#import +#import + +FOUNDATION_EXPORT double EmptyDataSetVersionNumber; +FOUNDATION_EXPORT const unsigned char EmptyDataSetVersionString[]; diff --git a/Source/Swift/EmptyDataSet.swift b/Source/Swift/EmptyDataSet.swift new file mode 100644 index 00000000..dc0fe827 --- /dev/null +++ b/Source/Swift/EmptyDataSet.swift @@ -0,0 +1,56 @@ +// +// EmptyDataSet.swift +// DZNEmptyDataSet +// +// Created by Ignacio Romero Zurbuchen on 2019-12-31. +// Copyright © 2019 DZN. All rights reserved. +// + +import UIKit + +public protocol EmptyDataSetInterface { + + /// The empty datasets delegate + var emptyDataSetSource: EmptyDataSetSource? { get set } + + /// The empty datasets data source + var emptyDataSetDelegate: EmptyDataSetDelegate? { get set } + + /// Returns true if the Empty Data Set View is visible + var isEmptyDataSetVisible: Bool { get } + + /// Reloads the empty dataset content receiver. + /// Call this method to force all the data to refresh. Calling reloadData() is similar, but this method only refreshes the empty dataset, + /// instead of all the delegate/datasource calls from your table view or collection view. + func reloadEmptyDataSet() +} + +public enum EmptyDataSetElement: CaseIterable { + case image, title, description, button +} + +let EmptyDataSetDefaultSpacing: CGFloat = 10 + +extension UIScrollView: EmptyDataSetInterface { + + public weak var emptyDataSetSource: EmptyDataSetSource? { + get { return getEmptyDataSetSource() } + set { setEmptyDataSetSource(newValue) } + } + + public weak var emptyDataSetDelegate: EmptyDataSetDelegate? { + get { return getEmptyDataSetDelegate() } + set { setEmptyDataSetDelegate(newValue) } + } + + public var isEmptyDataSetVisible: Bool { +// guard let view = emptyDataSetView else { return false } +// return !view.isHidden + + return true + } + + public func reloadEmptyDataSet() { + layoutEmptyDataSetIfNeeded() + } +} diff --git a/Source/Swift/EmptyDataSetDelegate.swift b/Source/Swift/EmptyDataSetDelegate.swift new file mode 100644 index 00000000..dc77be00 --- /dev/null +++ b/Source/Swift/EmptyDataSetDelegate.swift @@ -0,0 +1,67 @@ +// +// EmptyDataSetDelegate.swift +// EmptyDataSet +// +// Created by Ignacio Romero Zurbuchen on 2020-01-01. +// Copyright © 2020 DZN. All rights reserved. +// + +import UIKit + +/// The object that acts as the delegate of the empty datasets. Use this delegate for receiving action callbacks. +/// The delegate can adopt the EmptyDataSetDelegate protocol. The delegate is not retained. All delegate methods are optional. +public protocol EmptyDataSetDelegate: class { + + /// Default is true. + func emptyDataSetShouldDisplay(_ scrollView: UIScrollView) -> Bool + + /// Default is false. + func emptyDataSetShouldForceToDisplay(_ scrollView: UIScrollView) -> Bool + + /// Default is true. + func emptyDataSetShouldFadeIn(_ scrollView: UIScrollView) -> Bool + + /// Default is true. + func emptyDataSetShouldAllowScroll(_ scrollView: UIScrollView) -> Bool + + /// Default is true. + func emptyDataSetShouldAllowTouch(_ scrollView: UIScrollView) -> Bool + + /// + func emptyDataSet(_ scrollView: UIScrollView, didTapView view: UIView) + + /// + func emptyDataSet(_ scrollView: UIScrollView, didTapButton button: UIButton) +} + +/// EmptyDataSetDelegate default implementation so all methods are optional +public extension EmptyDataSetDelegate { + + func emptyDataSetShouldDisplay(_ scrollView: UIScrollView) -> Bool { + return true + } + + func emptyDataSetShouldForceToDisplay(_ scrollView: UIScrollView) -> Bool { + return false + } + + func emptyDataSetShouldFadeIn(_ scrollView: UIScrollView) -> Bool { + return true + } + + func emptyDataSetShouldAllowScroll(_ scrollView: UIScrollView) -> Bool { + return true + } + + func emptyDataSetShouldAllowTouch(_ scrollView: UIScrollView) -> Bool { + return true + } + + func emptyDataSet(_ scrollView: UIScrollView, didTapView view: UIView) { + // do nothing + } + + func emptyDataSet(_ scrollView: UIScrollView, didTapButton button: UIButton) { + // do nothing + } +} diff --git a/Source/Swift/EmptyDataSetImpl.swift b/Source/Swift/EmptyDataSetImpl.swift new file mode 100644 index 00000000..62393acd --- /dev/null +++ b/Source/Swift/EmptyDataSetImpl.swift @@ -0,0 +1,271 @@ +// +// EmptyDataSetImpl.swift +// EmptyDataSet +// +// Created by Ignacio Romero Zurbuchen on 2019-12-31. +// Copyright © 2019 DZN. All rights reserved. +// + +import UIKit + +protocol EmptyDataSetProtocol { + func swizzle() -> Bool + func isEmpty() -> Bool +} + +internal extension UIScrollView { + + // MARK: - Setter / Getter + + func getEmptyDataSetSource() -> EmptyDataSetSource? { + let reference = objc_getAssociatedObject(self, &AssociatedKeys.datasource) as? WeakReference + return reference?.object as? EmptyDataSetSource + } + + func setEmptyDataSetSource(_ datasource: EmptyDataSetSource?) { + if datasource == nil { + objc_setAssociatedObject(self, &AssociatedKeys.datasource, nil, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + invalidate() + } else { + objc_setAssociatedObject(self, &AssociatedKeys.datasource, WeakReference(with: datasource), .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + swizzleIfNeeded() + } + } + + func getEmptyDataSetDelegate() -> EmptyDataSetDelegate? { + let reference = objc_getAssociatedObject(self, &AssociatedKeys.delegate) as? WeakReference + return reference?.object as? EmptyDataSetDelegate + } + + func setEmptyDataSetDelegate(_ delegate: Any?) { + if delegate == nil { + objc_setAssociatedObject(self, &AssociatedKeys.delegate, nil, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } else { + objc_setAssociatedObject(self, &AssociatedKeys.delegate, WeakReference(with: delegate), .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + + // MARK: - Layout + + func layoutEmptyDataSetIfNeeded() { + guard let view = self.emptyDataSetView else { return } + + if let source = emptyDataSetSource { + view.titleLabel.attributedText = source.title(forEmptyDataSet: self) + view.descriptionLabel.attributedText = source.description(forEmptyDataSet: self) + view.imageView.image = source.image(forEmptyDataSet: self) + view.backgroundColor = source.backgroundColor(forEmptyDataSet: self) + + view.verticalSpacing = [EmptyDataSetElement: CGFloat]() + EmptyDataSetElement.allCases.forEach { + view.verticalSpacing?[$0] = source.spacing(forEmptyDataSet: self, after: $0) + } + } + + if let delegate = emptyDataSetDelegate { + view.fadeInOnDisplay = delegate.emptyDataSetShouldFadeIn(self) + view.isUserInteractionEnabled = delegate.emptyDataSetShouldAllowTouch(self) + + // TODO: Cache previous scroll state + isScrollEnabled = delegate.emptyDataSetShouldAllowScroll(self) + } + + addSubview(view) + view.setupLayout() + } + + weak var emptyDataSetView: EmptyDataSetView? { + get { + if let reference = objc_getAssociatedObject(self, &AssociatedKeys.view) as? WeakReference { + return reference.object as? EmptyDataSetView + } else { + let view = EmptyDataSetView() + + let tapGesture = UITapGestureRecognizer.init(target: self, action: #selector(didTapContentView(_:))) + view.addGestureRecognizer(tapGesture) + + objc_setAssociatedObject(self, &AssociatedKeys.view, WeakReference(with: view), .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + return view + } + } + set { + objc_setAssociatedObject(self, &AssociatedKeys.view, WeakReference(with: newValue), .OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + } + + // MARK: - Swizzling + + var didSwizzle: Bool? { + get { + let reference = objc_getAssociatedObject(self, &AssociatedKeys.didSwizzle) as? WeakReference + let number = reference?.object as? NSNumber + return number?.boolValue ?? false // Returns false if the boolValue is nil. + } + set { + if let bool = newValue { + objc_setAssociatedObject(self, &AssociatedKeys.didSwizzle, WeakReference(with: NSNumber(value: bool)), .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } else { + objc_setAssociatedObject(self, &AssociatedKeys.didSwizzle, nil, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } + } + + func swizzleIfNeeded() { + guard let bool = didSwizzle, !bool else { return } + + if let proxy = self as? EmptyDataSetProtocol { + didSwizzle = proxy.swizzle() + } else { + print("\(type(of: self)) should conform to protocol EmptyDataset") + } + } + + fileprivate func swizzle(originalSelector: Selector, swizzledSelector: Selector) -> Bool { + guard responds(to: originalSelector) else { return false } + + guard let originalMethod = class_getInstanceMethod(type(of: self), originalSelector), + let swizzledMethod = class_getInstanceMethod(type(of: self), swizzledSelector) else { return false } + + let targetedMethod = class_addMethod(type(of: self), originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod)) + + if targetedMethod { + class_replaceMethod(type(of: self), swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)) + return true + } else { + method_exchangeImplementations(originalMethod, swizzledMethod) + return true + } + } + + // MARK: - Invalidation + + func invalidate() { + if let view = emptyDataSetView { + view.prepareForReuse() + view.isHidden = true + emptyDataSetView = nil + } + } + + // MARK: - Gestures + + @objc private func didTapContentView(_ sender: UITapGestureRecognizer) { + guard let view = sender.view else { return } + emptyDataSetDelegate?.emptyDataSet(self, didTapView: view) + } +} + +// MARK: - UITableView + EmptyDataSetProtocol + +extension UITableView: EmptyDataSetProtocol { + + func swizzle() -> Bool { + var didSwizzle = false + + let newReloadDataSelector = #selector(reloadData_swizzled) + let originalReloadDataSelector = #selector(UITableView.reloadData) + didSwizzle = swizzle(originalSelector: originalReloadDataSelector, swizzledSelector: newReloadDataSelector) + + let newEndUpdatesSelector = #selector(endUpdates_swizzled) + let originalEndUpdatesSelector = #selector(UITableView.endUpdates) + didSwizzle = didSwizzle && + swizzle(originalSelector: originalEndUpdatesSelector, swizzledSelector: newEndUpdatesSelector) + + return didSwizzle + } + + func isEmpty() -> Bool { + let sections = dataSource?.numberOfSections?(in: self) ?? 1 + + for i in 0.. 0 { + return false + } + } + + return true + } + + @objc func reloadData_swizzled() { + print("reloadData_swizzled") + + // Calls the original implementation + reloadData_swizzled() + reloadEmptyDataSet() + } + + @objc func endUpdates_swizzled() { + print("endUpdates_swizzled") + + // Calls the original implementation + endUpdates_swizzled() + reloadEmptyDataSet() + } +} + +// MARK: - UICollectionView + EmptyDataSetProtocol + +extension UICollectionView: EmptyDataSetProtocol { + + func swizzle() -> Bool { + var didSwizzle = false + + let newReloadDataSelector = #selector(reloadData_swizzled) + let originalReloadDataSelector = #selector(UICollectionView.reloadData) + didSwizzle = swizzle(originalSelector: originalReloadDataSelector, swizzledSelector: newReloadDataSelector) + + let newEndUpdatesSelector = #selector(performBatchUpdates_swizzled) + let originalEndUpdatesSelector = #selector(UICollectionView.performBatchUpdates(_:completion:)) + didSwizzle = didSwizzle && + swizzle(originalSelector: originalEndUpdatesSelector, swizzledSelector: newEndUpdatesSelector) + + return didSwizzle + } + + func isEmpty() -> Bool { + let sections = dataSource?.numberOfSections?(in: self) ?? 1 + + for i in 0.. 0 { + return false + } + } + + return true + } + + @objc func reloadData_swizzled() { + // Calls the original implementation + reloadData_swizzled() + reloadEmptyDataSet() + } + + @objc func performBatchUpdates_swizzled() { + // Calls the original implementation + performBatchUpdates_swizzled() + reloadEmptyDataSet() + } +} + +// MARK: - Swizzling Associated Keys + +struct AssociatedKeys { + static var datasource = "emptyDataSetSource" + static var delegate = "emptyDataSetDelegate" + static var view = "emptyDataSetView" + static var didSwizzle = "didSwizzle" +} + +class WeakReference: NSObject { + weak var object: AnyObject? + + init(with object: Any?) { + super.init() + self.object = object as AnyObject? + } + + deinit { + print("WeakReference -deinit") + self.object = nil + } +} diff --git a/Source/Swift/EmptyDataSetSource.swift b/Source/Swift/EmptyDataSetSource.swift new file mode 100644 index 00000000..dedaa9c0 --- /dev/null +++ b/Source/Swift/EmptyDataSetSource.swift @@ -0,0 +1,95 @@ +// +// EmptyDataSetSource.swift +// EmptyDataSet +// +// Created by Ignacio Romero Zurbuchen on 2020-01-01. +// Copyright © 2020 DZN. All rights reserved. +// + +import UIKit + +/// The object that acts as the data source of the empty datasets. +/// The data source must adopt the EmptyDataSetSource protocol. The data source is not retained. All data source methods are optional. +public protocol EmptyDataSetSource: class { + + /// Default is nil. + func title(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? + + /// Default is nil. + func description(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? + + /// Default is nil. + func image(forEmptyDataSet scrollView: UIScrollView) -> UIImage? + + /// Default is nil. + func imageTintColor(forEmptyDataSet scrollView: UIScrollView) -> UIColor? + + /// Default is nil. + func backgroundColor(forEmptyDataSet scrollView: UIScrollView) -> UIColor? + + /// Default is nil. + func buttonTitle(forEmptyDataSet scrollView: UIScrollView, for state: UIControl.State) -> NSAttributedString? + + /// Default is nil. + func buttonImage(forEmptyDataSet scrollView: UIScrollView, for state: UIControl.State) -> UIImage? + + /// Default is nil. + func buttonBackgroundImage(forEmptyDataSet scrollView: UIScrollView, for state: UIControl.State) -> UIImage? + + /// Default is nil. + func button(forEmptyDataSet scrollView: UIScrollView) -> UIButton? + + /// Default is EmptyDataSetDefaultSpacing. + func spacing(forEmptyDataSet scrollView: UIScrollView, after emptyDataSetElement: EmptyDataSetElement) -> CGFloat? + + /// Default is nil. + func customView(forEmptyDataSet scrollView: UIScrollView) -> UIView? +} + +/// EmptyDataSetSource default implementation so all methods are optional +public extension EmptyDataSetSource { + + func title(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? { + return nil + } + + func description(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? { + return nil + } + + func image(forEmptyDataSet scrollView: UIScrollView) -> UIImage? { + return nil + } + + func imagetintColor(forEmptyDataSet scrollView: UIScrollView) -> UIColor? { + return nil + } + + func backgroundColor(forEmptyDataSet scrollView: UIScrollView) -> UIColor? { + return nil + } + + func buttonTitle(forEmptyDataSet scrollView: UIScrollView, for state: UIControl.State) -> NSAttributedString? { + return nil + } + + func buttonImage(forEmptyDataSet scrollView: UIScrollView, for state: UIControl.State) -> UIImage? { + return nil + } + + func buttonBackgroundImage(forEmptyDataSet scrollView: UIScrollView, for state: UIControl.State) -> UIImage? { + return nil + } + + func button(forEmptyDataSet scrollView: UIScrollView) -> UIButton? { + return nil + } + + func spacing(forEmptyDataSet scrollView: UIScrollView, after emptyDataSetElement: EmptyDataSetElement) -> CGFloat? { + return EmptyDataSetDefaultSpacing + } + + func customView(forEmptyDataSet scrollView: UIScrollView) -> UIView? { + return nil + } +} diff --git a/Source/Swift/EmptyDataSetView.swift b/Source/Swift/EmptyDataSetView.swift new file mode 100644 index 00000000..9fddcb19 --- /dev/null +++ b/Source/Swift/EmptyDataSetView.swift @@ -0,0 +1,170 @@ +// +// EmptyDataSetView.swift +// EmptyDataSet +// +// Created by Ignacio Romero Zurbuchen on 2019-12-31. +// Copyright © 2019 DZN. All rights reserved. +// + +import UIKit + +internal class EmptyDataSetView: UIView { + + // MARK: - Internal + + var fadeInOnDisplay = false + var verticalSpacing: [EmptyDataSetElement: CGFloat]? + + lazy var contentView: UIView = { + let view = UIView() + view.alpha = 0 + return view + }() + + lazy var titleLabel: UILabel = { + let label = UILabel() + label.font = UIFont.systemFont(ofSize: 27, weight: .regular) + label.textColor = UIColor(white: 0.6, alpha: 1) + label.textAlignment = .center + label.lineBreakMode = .byWordWrapping + label.numberOfLines = 0 + return label + }() + + lazy var descriptionLabel: UILabel = { + let label = UILabel() + label.font = UIFont.systemFont(ofSize: 17, weight: .regular) + label.textColor = UIColor(white: 0.6, alpha: 1) + label.textAlignment = .center + label.lineBreakMode = .byWordWrapping + label.numberOfLines = 0 + return label + }() + + lazy var imageView: UIImageView = { + let view = UIImageView() + view.contentMode = .scaleAspectFit + return view + }() + + lazy var button: UIButton = { + let button = UIButton() + return button + }() + + // MARK: - Private + + fileprivate var canShowImage: Bool { + return imageView.image != nil + } + + fileprivate var canShowTitle: Bool { + guard let attributedString = titleLabel.attributedText else { return false } + return !attributedString.string.isEmpty + } + + fileprivate var canShowDescription: Bool { + guard let attributedString = descriptionLabel.attributedText else { return false } + return !attributedString.string.isEmpty + } + + // MARK: - Initialization + + override init(frame: CGRect) { + super.init(frame: frame) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - UIView Overrides + + override func didMoveToWindow() { + guard let superview = superview else { return } + frame = superview.bounds + + contentView.frame = bounds + addSubview(contentView) + + if fadeInOnDisplay { + UIView.animate(withDuration: 0.25) { + self.contentView.alpha = 1 + } + } else { + contentView.alpha = 1 + } + } + + // MARK: - Layout + + func setupLayout() { + + prepareForReuse() + + var views = [UIView]() + if canShowImage { views.append(imageView) } + if canShowTitle { views.append(titleLabel) } + if canShowDescription { views.append(descriptionLabel) } + + // skip layout if there is nothing to display + guard views.count > 0 else { return } + + let stackView = UIStackView(arrangedSubviews: views) + stackView.axis = .vertical + stackView.distribution = .fill + stackView.alignment = .center + stackView.spacing = EmptyDataSetDefaultSpacing + + if let spacing = verticalSpacing { + if let space = spacing[.image] { stackView.setCustomSpacing(space, after: imageView) } + if let space = spacing[.title] { stackView.setCustomSpacing(space, after: titleLabel) } + if let space = spacing[.description] { stackView.setCustomSpacing(space, after: descriptionLabel) } + } + + contentView.addSubview(stackView) + stackView.translatesAutoresizingMaskIntoConstraints = false + + NSLayoutConstraint.activate([ + stackView.centerXAnchor.constraint(equalTo: contentView.centerXAnchor), + stackView.centerYAnchor.constraint(equalTo: contentView.centerYAnchor) + ]) + } + + func prepareForReuse() { + guard contentView.subviews.count > 0 else { return } + + titleLabel.text = nil + titleLabel.frame = .zero + + descriptionLabel.text = nil + descriptionLabel.frame = .zero + + imageView.image = nil + + // Removes all subviews + contentView.subviews.forEach({$0.removeFromSuperview()}) + } + + // MARK: - Gesture Handling + + fileprivate func didTapView(sender: UIView) { + print("didTapView: \(sender)") + } + + fileprivate func didTapButton(sender: UIButton) { + print("didTapButton: \(self)") + } + + deinit { + print("EmptyDataSetView -deinit") + } +} + +extension UIView { + + @discardableResult + func equallyRelatedConstraint(view: UIView, attribute: NSLayoutConstraint.Attribute) -> NSLayoutConstraint { + return NSLayoutConstraint(item: view, attribute: attribute, relatedBy: .equal, toItem: self, attribute: attribute, multiplier: 1, constant: 0) + } +} diff --git a/Source/Swift/Info.plist b/Source/Swift/Info.plist new file mode 100644 index 00000000..9bcb2444 --- /dev/null +++ b/Source/Swift/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + +