From 143dc3dd24ee16a18bbe8459437e57ba34a76550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elvis=20Nu=C3=B1ez?= <3lvis@users.noreply.github.com> Date: Fri, 21 Oct 2016 00:49:33 +0200 Subject: [PATCH] Improve structure of demos (#89) * Remove old and add new * Add base ObjectiveC demo * Add simple Swift demo * Add options to Objective-C Demo * Add Table Objective-C demo * Wrap up migrating ObjC demos * Rename containing folders * Add Swift demos * Add without index demo, remove custom cell --- .../Base.lproj/LaunchScreen.storyboard | 27 - CollectionObjC/Info.plist | 38 - CollectionObjC/main.m | 8 - CollectionSwift/AppDelegate.swift | 35 - .../AppIcon.appiconset/Contents.json | 38 - CollectionSwift/CollectionController.swift | 104 -- .../AppDelegate.swift | 28 - .../AppIcon.appiconset/Contents.json | 38 - .../ViewController.swift | 77 - Demo.xcodeproj/project.pbxproj | 1562 +++++------------ .../xcschemes/CollectionObjC.xcscheme | 98 -- .../xcschemes/CollectionSwift.xcscheme | 98 -- .../DATASourceDelegateTableSwift.xcscheme | 98 -- .../InfiniteCollectionSwift.xcscheme | 98 -- .../xcschemes/InfiniteTableSwift.xcscheme | 98 -- ...Swift.xcscheme => ObjectiveCDemo.xcscheme} | 24 +- ...{TableObjC.xcscheme => SwiftDemo.xcscheme} | 24 +- InfiniteCollectionSwift/AppDelegate.swift | 35 - .../Base.lproj/LaunchScreen.storyboard | 27 - .../CollectionController.swift | 121 -- InfiniteCollectionSwift/Info.plist | 38 - InfiniteTableSwift/AppDelegate.swift | 28 - .../AppIcon.appiconset/Contents.json | 38 - .../Base.lproj/LaunchScreen.storyboard | 27 - InfiniteTableSwift/Info.plist | 38 - InfiniteTableSwift/ViewController.swift | 98 -- Library/Helper.swift | 39 + .../AppIcon.appiconset/Contents.json | 10 + ObjectiveCDemo/Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 10 +- .../CollectionViewController.h | 2 +- .../CollectionViewController.m | 65 + .../CollectionViewControllerWithFooter.h | 10 + .../CollectionViewControllerWithFooter.m | 36 +- .../FooterExampleView.h | 0 .../FooterExampleView.m | 0 .../CollectionViewControllerWithSections.h | 10 + .../CollectionViewControllerWithSections.m | 66 + .../Info.plist | 12 +- ObjectiveCDemo/Options/OptionsController.h | 8 + ObjectiveCDemo/Options/OptionsController.m | 104 ++ .../Root}/AppDelegate.h | 1 - .../Root}/AppDelegate.m | 12 +- .../TableViewController/TableViewController.h | 2 +- .../TableViewController/TableViewController.m | 64 + .../TableViewControllerWithSections.h | 10 + .../TableViewControllerWithSections.m | 39 +- {TableObjC => ObjectiveCDemo}/main.m | 2 +- .../AppIcon.appiconset/Contents.json | 0 .../Base.lproj/LaunchScreen.storyboard | 10 +- .../CollectionViewController.swift | 51 + ...CollectionViewControllerWithSections.swift | 52 + .../Info.plist | 12 +- SwiftDemo/Options/OptionsController.swift | 77 + .../Root}/AppDelegate.swift | 4 +- .../TableViewController.swift | 51 + .../TableViewControllerWithSections.swift | 53 + ...ewControllerWithSectionsWithoutIndex.swift | 57 + TableObjC/AppDelegate.h | 8 - TableObjC/AppDelegate.m | 26 - .../AppIcon.appiconset/Contents.json | 38 - TableObjC/Base.lproj/LaunchScreen.storyboard | 27 - TableObjC/Info.plist | 38 - .../AppIcon.appiconset/Contents.json | 38 - TableSwift/Base.lproj/LaunchScreen.storyboard | 27 - TableSwift/CustomCell.swift | 28 - TableSwift/Info.plist | 38 - TableSwift/ViewController.swift | 97 - 68 files changed, 1256 insertions(+), 2927 deletions(-) delete mode 100644 CollectionObjC/Base.lproj/LaunchScreen.storyboard delete mode 100644 CollectionObjC/Info.plist delete mode 100644 CollectionObjC/main.m delete mode 100644 CollectionSwift/AppDelegate.swift delete mode 100644 CollectionSwift/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 CollectionSwift/CollectionController.swift delete mode 100644 DATASourceDelegateTableSwift/AppDelegate.swift delete mode 100644 DATASourceDelegateTableSwift/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 DATASourceDelegateTableSwift/ViewController.swift delete mode 100644 Demo.xcodeproj/xcshareddata/xcschemes/CollectionObjC.xcscheme delete mode 100644 Demo.xcodeproj/xcshareddata/xcschemes/CollectionSwift.xcscheme delete mode 100644 Demo.xcodeproj/xcshareddata/xcschemes/DATASourceDelegateTableSwift.xcscheme delete mode 100644 Demo.xcodeproj/xcshareddata/xcschemes/InfiniteCollectionSwift.xcscheme delete mode 100644 Demo.xcodeproj/xcshareddata/xcschemes/InfiniteTableSwift.xcscheme rename Demo.xcodeproj/xcshareddata/xcschemes/{TableSwift.xcscheme => ObjectiveCDemo.xcscheme} (82%) rename Demo.xcodeproj/xcshareddata/xcschemes/{TableObjC.xcscheme => SwiftDemo.xcscheme} (83%) delete mode 100644 InfiniteCollectionSwift/AppDelegate.swift delete mode 100644 InfiniteCollectionSwift/Base.lproj/LaunchScreen.storyboard delete mode 100644 InfiniteCollectionSwift/CollectionController.swift delete mode 100644 InfiniteCollectionSwift/Info.plist delete mode 100644 InfiniteTableSwift/AppDelegate.swift delete mode 100644 InfiniteTableSwift/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 InfiniteTableSwift/Base.lproj/LaunchScreen.storyboard delete mode 100644 InfiniteTableSwift/Info.plist delete mode 100644 InfiniteTableSwift/ViewController.swift create mode 100644 Library/Helper.swift rename {InfiniteCollectionSwift => ObjectiveCDemo}/Assets.xcassets/AppIcon.appiconset/Contents.json (77%) create mode 100644 ObjectiveCDemo/Assets.xcassets/Contents.json rename {CollectionSwift => ObjectiveCDemo}/Base.lproj/LaunchScreen.storyboard (70%) rename CollectionObjC/ViewController.h => ObjectiveCDemo/CollectionViewController/CollectionViewController.h (68%) create mode 100755 ObjectiveCDemo/CollectionViewController/CollectionViewController.m create mode 100644 ObjectiveCDemo/CollectionViewControllerWithFooter/CollectionViewControllerWithFooter.h rename CollectionObjC/ViewController.m => ObjectiveCDemo/CollectionViewControllerWithFooter/CollectionViewControllerWithFooter.m (71%) mode change 100755 => 100644 rename {CollectionObjC => ObjectiveCDemo/CollectionViewControllerWithFooter}/FooterExampleView.h (100%) rename {CollectionObjC => ObjectiveCDemo/CollectionViewControllerWithFooter}/FooterExampleView.m (100%) create mode 100644 ObjectiveCDemo/CollectionViewControllerWithSections/CollectionViewControllerWithSections.h create mode 100644 ObjectiveCDemo/CollectionViewControllerWithSections/CollectionViewControllerWithSections.m rename {CollectionSwift => ObjectiveCDemo}/Info.plist (84%) create mode 100644 ObjectiveCDemo/Options/OptionsController.h create mode 100644 ObjectiveCDemo/Options/OptionsController.m rename {CollectionObjC => ObjectiveCDemo/Root}/AppDelegate.h (99%) mode change 100755 => 100644 rename {CollectionObjC => ObjectiveCDemo/Root}/AppDelegate.m (57%) mode change 100755 => 100644 rename TableObjC/ViewController.h => ObjectiveCDemo/TableViewController/TableViewController.h (64%) create mode 100755 ObjectiveCDemo/TableViewController/TableViewController.m create mode 100644 ObjectiveCDemo/TableViewControllerWithSections/TableViewControllerWithSections.h rename TableObjC/ViewController.m => ObjectiveCDemo/TableViewControllerWithSections/TableViewControllerWithSections.m (58%) mode change 100755 => 100644 rename {TableObjC => ObjectiveCDemo}/main.m (88%) rename {CollectionObjC => SwiftDemo}/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename {DATASourceDelegateTableSwift => SwiftDemo}/Base.lproj/LaunchScreen.storyboard (70%) create mode 100644 SwiftDemo/CollectionViewController/CollectionViewController.swift create mode 100644 SwiftDemo/CollectionViewControllerWithSections/CollectionViewControllerWithSections.swift rename {DATASourceDelegateTableSwift => SwiftDemo}/Info.plist (84%) create mode 100644 SwiftDemo/Options/OptionsController.swift rename {TableSwift => SwiftDemo/Root}/AppDelegate.swift (87%) mode change 100755 => 100644 create mode 100644 SwiftDemo/TableViewController/TableViewController.swift create mode 100644 SwiftDemo/TableViewControllerWithSections/TableViewControllerWithSections.swift create mode 100644 SwiftDemo/TableViewControllerWithSectionsWithoutIndex/TableViewControllerWithSectionsWithoutIndex.swift delete mode 100755 TableObjC/AppDelegate.h delete mode 100755 TableObjC/AppDelegate.m delete mode 100644 TableObjC/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 TableObjC/Base.lproj/LaunchScreen.storyboard delete mode 100644 TableObjC/Info.plist delete mode 100644 TableSwift/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 TableSwift/Base.lproj/LaunchScreen.storyboard delete mode 100644 TableSwift/CustomCell.swift delete mode 100644 TableSwift/Info.plist delete mode 100644 TableSwift/ViewController.swift diff --git a/CollectionObjC/Base.lproj/LaunchScreen.storyboard b/CollectionObjC/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 2e721e1..0000000 --- a/CollectionObjC/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/CollectionObjC/Info.plist b/CollectionObjC/Info.plist deleted file mode 100644 index d39a4da..0000000 --- a/CollectionObjC/Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/CollectionObjC/main.m b/CollectionObjC/main.m deleted file mode 100644 index 81e84cb..0000000 --- a/CollectionObjC/main.m +++ /dev/null @@ -1,8 +0,0 @@ -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/CollectionSwift/AppDelegate.swift b/CollectionSwift/AppDelegate.swift deleted file mode 100644 index b37cf37..0000000 --- a/CollectionSwift/AppDelegate.swift +++ /dev/null @@ -1,35 +0,0 @@ -import UIKit -import CoreData -import DATAStack - -@UIApplicationMain -class AppDelegate: UIResponder { - var window: UIWindow? - - var dataStack: DATAStack = { - let dataStack = DATAStack(modelName: "DataModel") - - return dataStack - }() -} - -extension AppDelegate: UIApplicationDelegate { - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { - self.window = UIWindow(frame: UIScreen.main.bounds) - guard let window = self.window else { fatalError("Window not found") } - - let bounds = UIScreen.main.bounds - - let layout = UICollectionViewFlowLayout() - layout.itemSize = CGSize(width: 120, height: 120) - layout.sectionInset = UIEdgeInsets(top: 15, left: 0, bottom: 15, right: 0) - layout.headerReferenceSize = CGSize(width: bounds.size.width, height: 60) - - let viewController = CollectionController(layout: layout, dataStack: self.dataStack) - window.rootViewController = UINavigationController(rootViewController: viewController) - window.makeKeyAndVisible() - - return true - } -} diff --git a/CollectionSwift/Assets.xcassets/AppIcon.appiconset/Contents.json b/CollectionSwift/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 118c98f..0000000 --- a/CollectionSwift/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/CollectionSwift/CollectionController.swift b/CollectionSwift/CollectionController.swift deleted file mode 100644 index a38dad4..0000000 --- a/CollectionSwift/CollectionController.swift +++ /dev/null @@ -1,104 +0,0 @@ -import UIKit - -import DATAStack -import CoreData - -class CollectionController: UICollectionViewController { - unowned var dataStack: DATAStack - - lazy var dataSource: DATASource = { - guard let collectionView = self.collectionView else { fatalError("CollectionView is nil") } - - let request: NSFetchRequest = NSFetchRequest(entityName: "User") - request.sortDescriptors = [ - NSSortDescriptor(key: "name", ascending: true), - NSSortDescriptor(key: "firstLetterOfName", ascending: true), - ] - - let dataSource = DATASource(collectionView: collectionView, cellIdentifier: CollectionCell.Identifier, fetchRequest: request, mainContext: self.dataStack.mainContext, sectionName: "firstLetterOfName", configuration: { cell, item, indexPath in - let collectionCell = cell as! CollectionCell - collectionCell.textLabel.text = item.value(forKey: "name") as? String - }) - - return dataSource - }() - - init(layout: UICollectionViewLayout, dataStack: DATAStack) { - self.dataStack = dataStack - - super.init(collectionViewLayout: layout) - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func viewDidLoad() { - super.viewDidLoad() - - guard let collectionView = self.collectionView else { fatalError("CollectionView is nil") } - - collectionView.register(CollectionCell.self, forCellWithReuseIdentifier: CollectionCell.Identifier) - collectionView.dataSource = self.dataSource - collectionView.backgroundColor = UIColor.white - collectionView.contentInset = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20) - - self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(CollectionController.saveAction)) - } - - func saveAction() { - self.dataStack.performInNewBackgroundContext { backgroundContext in - if let entity = NSEntityDescription.entity(forEntityName: "User", in: backgroundContext) { - let user = NSManagedObject(entity: entity, insertInto: backgroundContext) - - let name = self.randomString() - let firstLetter = String(name[name.startIndex]) - user.setValue(name, forKey: "name") - user.setValue(firstLetter.uppercased(), forKey: "firstLetterOfName") - do { - try backgroundContext.save() - } catch let savingError as NSError { - print("Could not save \(savingError)") - } catch { - fatalError() - } - } else { - print("Oh no") - } - } - } - - func randomString() -> String { - let letters = "ABCDEFGHIJKL" - var string = "" - for _ in 0 ... 5 { - let token = UInt32(letters.characters.count) - let letterIndex = Int(arc4random_uniform(token)) - let firstChar = Array(letters.characters)[letterIndex] - string.append(firstChar) - } - - return string - } -} - -extension CollectionController { - - override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - guard let object = self.dataSource.objectAtIndexPath(indexPath) else { return } - - if let name = object.value(forKey: "name") as? String, name.characters.first == "A" { - self.dataStack.performInNewBackgroundContext({ backgroundContext in - let backgroundObject = backgroundContext.object(with: object.objectID) - backgroundObject.setValue(name + "+", forKey: "name") - try! backgroundContext.save() - }) - } else { - self.dataStack.performInNewBackgroundContext({ backgroundContext in - let backgroundObject = backgroundContext.object(with: object.objectID) - backgroundContext.delete(backgroundObject) - try! backgroundContext.save() - }) - } - } -} diff --git a/DATASourceDelegateTableSwift/AppDelegate.swift b/DATASourceDelegateTableSwift/AppDelegate.swift deleted file mode 100644 index c0cb585..0000000 --- a/DATASourceDelegateTableSwift/AppDelegate.swift +++ /dev/null @@ -1,28 +0,0 @@ -import UIKit -import CoreData -import DATAStack - -@UIApplicationMain -class AppDelegate: UIResponder { - var window: UIWindow? - - var dataStack: DATAStack = { - let dataStack = DATAStack(modelName: "DataModel") - - return dataStack - }() -} - -extension AppDelegate: UIApplicationDelegate { - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { - self.window = UIWindow(frame: UIScreen.main.bounds) - guard let window = self.window else { fatalError("Window not found") } - - let viewController = ViewController(dataStack: self.dataStack) - window.rootViewController = UINavigationController(rootViewController: viewController) - window.makeKeyAndVisible() - - return true - } -} diff --git a/DATASourceDelegateTableSwift/Assets.xcassets/AppIcon.appiconset/Contents.json b/DATASourceDelegateTableSwift/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 118c98f..0000000 --- a/DATASourceDelegateTableSwift/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/DATASourceDelegateTableSwift/ViewController.swift b/DATASourceDelegateTableSwift/ViewController.swift deleted file mode 100644 index a765ee6..0000000 --- a/DATASourceDelegateTableSwift/ViewController.swift +++ /dev/null @@ -1,77 +0,0 @@ -import UIKit -import DATAStack -import CoreData - -class ViewController: UITableViewController { - static let CellIdentifier = "CellIdentifier" - var dataStack: DATAStack? - - lazy var dataSource: DATASource = { - let request: NSFetchRequest = NSFetchRequest(entityName: "User") - request.sortDescriptors = [NSSortDescriptor(key: "createdDate", ascending: true)] - - let dataSource = DATASource(tableView: self.tableView, cellIdentifier: ViewController.CellIdentifier, fetchRequest: request, mainContext: self.dataStack!.mainContext, configuration: { cell, item, indexPath in - let date = item.value(forKey: "createdDate") as? NSDate - cell.textLabel?.text = date?.description - }) - - dataSource.delegate = self - - return dataSource - }() - - convenience init(dataStack: DATAStack) { - self.init(style: .plain) - - self.dataStack = dataStack - } - - override func viewDidLoad() { - super.viewDidLoad() - - self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: ViewController.CellIdentifier) - self.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(ViewController.saveAction)) - self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .edit, target: self, action: #selector(ViewController.editAction)) - self.tableView.dataSource = self.dataSource - self.tableView.delegate = self - } - - func saveAction() { - self.dataStack!.performInNewBackgroundContext { backgroundContext in - let entity = NSEntityDescription.entity(forEntityName: "User", in: backgroundContext)! - let user = NSManagedObject(entity: entity, insertInto: backgroundContext) - user.setValue(NSDate(), forKey: "createdDate") - try! backgroundContext.save() - } - } - - func editAction() { - self.setEditing(!self.isEditing, animated: true) - } -} - -extension ViewController: DATASourceDelegate { - - func dataSource(_ dataSource: DATASource, tableView: UITableView, canEditRowAtIndexPath indexPath: IndexPath) -> Bool { - return true - } - - // This doesn't seem to be needed when implementing tableView(_:editActionsForRowAtIndexPath). - func dataSource(_ dataSource: DATASource, tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: IndexPath) { - } -} - -// MARK: - UITableViewDelegate - -extension ViewController { - - override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? { - let delete = UITableViewRowAction(style: .default, title: "Delete") { action, indexPath in - let item = self.dataSource.objectAtIndexPath(indexPath)! - self.dataStack!.mainContext.delete(item) - try! self.dataStack!.mainContext.save() - } - - return [delete] - } -} diff --git a/Demo.xcodeproj/project.pbxproj b/Demo.xcodeproj/project.pbxproj index 4a8ca6a..0fbe778 100644 --- a/Demo.xcodeproj/project.pbxproj +++ b/Demo.xcodeproj/project.pbxproj @@ -7,127 +7,17 @@ objects = { /* Begin PBXBuildFile section */ - 141D2EE41BE021500028F879 /* CustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 141D2EE31BE021500028F879 /* CustomCell.swift */; }; 14308AA21CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9C1CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift */; }; - 14308AA31CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9C1CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift */; }; - 14308AA41CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9C1CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift */; }; - 14308AA51CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9C1CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift */; }; - 14308AA61CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9C1CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift */; }; - 14308AA71CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9C1CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift */; }; - 14308AA81CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9C1CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift */; }; - 14308AA91CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9C1CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift */; }; 14308AAA1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9D1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift */; }; - 14308AAB1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9D1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift */; }; - 14308AAC1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9D1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift */; }; - 14308AAD1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9D1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift */; }; - 14308AAE1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9D1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift */; }; - 14308AAF1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9D1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift */; }; - 14308AB01CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9D1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift */; }; - 14308AB11CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9D1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift */; }; 14308AB21CC66665000C21DF /* DATASource+UITableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9E1CC66665000C21DF /* DATASource+UITableViewDataSource.swift */; }; - 14308AB31CC66665000C21DF /* DATASource+UITableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9E1CC66665000C21DF /* DATASource+UITableViewDataSource.swift */; }; - 14308AB41CC66665000C21DF /* DATASource+UITableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9E1CC66665000C21DF /* DATASource+UITableViewDataSource.swift */; }; - 14308AB51CC66665000C21DF /* DATASource+UITableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9E1CC66665000C21DF /* DATASource+UITableViewDataSource.swift */; }; - 14308AB61CC66665000C21DF /* DATASource+UITableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9E1CC66665000C21DF /* DATASource+UITableViewDataSource.swift */; }; - 14308AB71CC66665000C21DF /* DATASource+UITableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9E1CC66665000C21DF /* DATASource+UITableViewDataSource.swift */; }; - 14308AB81CC66665000C21DF /* DATASource+UITableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9E1CC66665000C21DF /* DATASource+UITableViewDataSource.swift */; }; - 14308AB91CC66665000C21DF /* DATASource+UITableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9E1CC66665000C21DF /* DATASource+UITableViewDataSource.swift */; }; 14308ABA1CC66665000C21DF /* DATASource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9F1CC66665000C21DF /* DATASource.swift */; }; - 14308ABB1CC66665000C21DF /* DATASource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9F1CC66665000C21DF /* DATASource.swift */; }; - 14308ABC1CC66665000C21DF /* DATASource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9F1CC66665000C21DF /* DATASource.swift */; }; - 14308ABD1CC66665000C21DF /* DATASource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9F1CC66665000C21DF /* DATASource.swift */; }; - 14308ABE1CC66665000C21DF /* DATASource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9F1CC66665000C21DF /* DATASource.swift */; }; - 14308ABF1CC66665000C21DF /* DATASource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9F1CC66665000C21DF /* DATASource.swift */; }; - 14308AC01CC66665000C21DF /* DATASource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9F1CC66665000C21DF /* DATASource.swift */; }; - 14308AC11CC66665000C21DF /* DATASource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9F1CC66665000C21DF /* DATASource.swift */; }; 14308AC21CC66665000C21DF /* DATASourceCollectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA01CC66665000C21DF /* DATASourceCollectionHeaderView.swift */; }; - 14308AC31CC66665000C21DF /* DATASourceCollectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA01CC66665000C21DF /* DATASourceCollectionHeaderView.swift */; }; - 14308AC41CC66665000C21DF /* DATASourceCollectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA01CC66665000C21DF /* DATASourceCollectionHeaderView.swift */; }; - 14308AC51CC66665000C21DF /* DATASourceCollectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA01CC66665000C21DF /* DATASourceCollectionHeaderView.swift */; }; - 14308AC61CC66665000C21DF /* DATASourceCollectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA01CC66665000C21DF /* DATASourceCollectionHeaderView.swift */; }; - 14308AC71CC66665000C21DF /* DATASourceCollectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA01CC66665000C21DF /* DATASourceCollectionHeaderView.swift */; }; - 14308AC81CC66665000C21DF /* DATASourceCollectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA01CC66665000C21DF /* DATASourceCollectionHeaderView.swift */; }; - 14308AC91CC66665000C21DF /* DATASourceCollectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA01CC66665000C21DF /* DATASourceCollectionHeaderView.swift */; }; 14308ACA1CC66665000C21DF /* DATASourceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA11CC66665000C21DF /* DATASourceDelegate.swift */; }; - 14308ACB1CC66665000C21DF /* DATASourceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA11CC66665000C21DF /* DATASourceDelegate.swift */; }; - 14308ACC1CC66665000C21DF /* DATASourceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA11CC66665000C21DF /* DATASourceDelegate.swift */; }; - 14308ACD1CC66665000C21DF /* DATASourceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA11CC66665000C21DF /* DATASourceDelegate.swift */; }; - 14308ACE1CC66665000C21DF /* DATASourceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA11CC66665000C21DF /* DATASourceDelegate.swift */; }; - 14308ACF1CC66665000C21DF /* DATASourceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA11CC66665000C21DF /* DATASourceDelegate.swift */; }; - 14308AD01CC66665000C21DF /* DATASourceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA11CC66665000C21DF /* DATASourceDelegate.swift */; }; - 14308AD11CC66665000C21DF /* DATASourceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA11CC66665000C21DF /* DATASourceDelegate.swift */; }; - 146205831C3AB0E400D78FC5 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 146205821C3AB0E400D78FC5 /* AppDelegate.swift */; }; - 146205851C3AB0E400D78FC5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 146205841C3AB0E400D78FC5 /* Assets.xcassets */; }; - 146205881C3AB0E400D78FC5 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 146205861C3AB0E400D78FC5 /* LaunchScreen.storyboard */; }; - 1498B6091C3BC9E80066FAC8 /* CollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6051C3BC9E80066FAC8 /* CollectionCell.swift */; }; - 1498B60A1C3BC9E80066FAC8 /* CollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6051C3BC9E80066FAC8 /* CollectionCell.swift */; }; - 1498B60B1C3BC9E80066FAC8 /* CollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6051C3BC9E80066FAC8 /* CollectionCell.swift */; }; - 1498B60C1C3BC9E80066FAC8 /* CollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6051C3BC9E80066FAC8 /* CollectionCell.swift */; }; - 1498B60D1C3BC9E80066FAC8 /* CollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6051C3BC9E80066FAC8 /* CollectionCell.swift */; }; - 1498B60E1C3BC9E80066FAC8 /* CollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6051C3BC9E80066FAC8 /* CollectionCell.swift */; }; - 1498B60F1C3BC9E80066FAC8 /* CollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6051C3BC9E80066FAC8 /* CollectionCell.swift */; }; - 1498B6101C3BC9E80066FAC8 /* DataModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6061C3BC9E80066FAC8 /* DataModel.xcdatamodeld */; }; - 1498B6111C3BC9E80066FAC8 /* DataModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6061C3BC9E80066FAC8 /* DataModel.xcdatamodeld */; }; - 1498B6121C3BC9E80066FAC8 /* DataModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6061C3BC9E80066FAC8 /* DataModel.xcdatamodeld */; }; - 1498B6131C3BC9E80066FAC8 /* DataModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6061C3BC9E80066FAC8 /* DataModel.xcdatamodeld */; }; - 1498B6141C3BC9E80066FAC8 /* DataModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6061C3BC9E80066FAC8 /* DataModel.xcdatamodeld */; }; - 1498B6151C3BC9E80066FAC8 /* DataModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6061C3BC9E80066FAC8 /* DataModel.xcdatamodeld */; }; - 1498B6161C3BC9E80066FAC8 /* DataModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6061C3BC9E80066FAC8 /* DataModel.xcdatamodeld */; }; - 1498B6171C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6081C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift */; }; - 1498B6181C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6081C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift */; }; - 1498B6191C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6081C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift */; }; - 1498B61A1C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6081C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift */; }; - 1498B61B1C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6081C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift */; }; - 1498B61C1C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6081C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift */; }; - 1498B61D1C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6081C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift */; }; - 149AF1931C0EB9EF00BA0907 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 149AF1921C0EB9EF00BA0907 /* AppDelegate.swift */; }; - 149AF1981C0EB9EF00BA0907 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 149AF1971C0EB9EF00BA0907 /* Assets.xcassets */; }; - 149AF19B1C0EB9EF00BA0907 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 149AF1991C0EB9EF00BA0907 /* LaunchScreen.storyboard */; }; - 149AF1A11C0EBA0700BA0907 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 149AF1A01C0EBA0700BA0907 /* ViewController.swift */; }; + 14663CA61DB97F2D00E8ABFC /* TableViewControllerWithSectionsWithoutIndex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14663CA51DB97F2D00E8ABFC /* TableViewControllerWithSectionsWithoutIndex.swift */; }; 149EE87A1CC916DB002739BA /* DATAStack.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 149EE8791CC916DB002739BA /* DATAStack.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 14A139B41AEFC72B00AD732F /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14A139B31AEFC72B00AD732F /* Tests.swift */; }; - 14AFFAF01C3C00E0001AD02C /* CollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6051C3BC9E80066FAC8 /* CollectionCell.swift */; }; 14AFFAF11C3C00E3001AD02C /* DataModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6061C3BC9E80066FAC8 /* DataModel.xcdatamodeld */; }; - 14AFFAF21C3C00E5001AD02C /* InfiniteLoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6081C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift */; }; - 14C022551CC9031700CEFC40 /* DATAStack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14C022541CC9031700CEFC40 /* DATAStack.framework */; }; - 14C022561CC9031700CEFC40 /* DATAStack.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 14C022541CC9031700CEFC40 /* DATAStack.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 14C022591CC9031F00CEFC40 /* DATAStack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14C022581CC9031F00CEFC40 /* DATAStack.framework */; }; - 14C0225A1CC9031F00CEFC40 /* DATAStack.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 14C022581CC9031F00CEFC40 /* DATAStack.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 14C0225D1CC9033B00CEFC40 /* DATAStack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14C0225C1CC9033B00CEFC40 /* DATAStack.framework */; }; - 14C0225E1CC9033B00CEFC40 /* DATAStack.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 14C0225C1CC9033B00CEFC40 /* DATAStack.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 14C022611CC9034500CEFC40 /* DATAStack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14C022601CC9034500CEFC40 /* DATAStack.framework */; }; - 14C022621CC9034500CEFC40 /* DATAStack.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 14C022601CC9034500CEFC40 /* DATAStack.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 14C022651CC9034E00CEFC40 /* DATAStack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14C022641CC9034E00CEFC40 /* DATAStack.framework */; }; - 14C022661CC9034E00CEFC40 /* DATAStack.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 14C022641CC9034E00CEFC40 /* DATAStack.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 14C022691CC9035800CEFC40 /* DATAStack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14C022681CC9035800CEFC40 /* DATAStack.framework */; }; - 14C0226A1CC9035800CEFC40 /* DATAStack.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 14C022681CC9035800CEFC40 /* DATAStack.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 14C0226D1CC9036100CEFC40 /* DATAStack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14C0226C1CC9036100CEFC40 /* DATAStack.framework */; }; - 14C0226E1CC9036100CEFC40 /* DATAStack.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 14C0226C1CC9036100CEFC40 /* DATAStack.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 14C022701CC9038700CEFC40 /* DATAStack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14C0226C1CC9036100CEFC40 /* DATAStack.framework */; }; - 14F3A67D1BE01B8500789E22 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14F3A67C1BE01B8500789E22 /* AppDelegate.swift */; }; - 14F3A6821BE01B8500789E22 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 14F3A6811BE01B8500789E22 /* Assets.xcassets */; }; - 14F3A6851BE01B8500789E22 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 14F3A6831BE01B8500789E22 /* LaunchScreen.storyboard */; }; - 14F3A6921BE01B9200789E22 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F3A6911BE01B9200789E22 /* main.m */; }; - 14F3A6951BE01B9200789E22 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F3A6941BE01B9200789E22 /* AppDelegate.m */; }; - 14F3A69A1BE01B9200789E22 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 14F3A6991BE01B9200789E22 /* Assets.xcassets */; }; - 14F3A69D1BE01B9200789E22 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 14F3A69B1BE01B9200789E22 /* LaunchScreen.storyboard */; }; - 14F3A6A91BE01B9C00789E22 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14F3A6A81BE01B9C00789E22 /* AppDelegate.swift */; }; - 14F3A6AE1BE01B9C00789E22 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 14F3A6AD1BE01B9C00789E22 /* Assets.xcassets */; }; - 14F3A6B11BE01B9C00789E22 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 14F3A6AF1BE01B9C00789E22 /* LaunchScreen.storyboard */; }; - 14F3A6BE1BE01BA900789E22 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F3A6BD1BE01BA900789E22 /* main.m */; }; - 14F3A6C11BE01BA900789E22 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F3A6C01BE01BA900789E22 /* AppDelegate.m */; }; - 14F3A6C61BE01BA900789E22 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 14F3A6C51BE01BA900789E22 /* Assets.xcassets */; }; - 14F3A6C91BE01BA900789E22 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 14F3A6C71BE01BA900789E22 /* LaunchScreen.storyboard */; }; - 14F3A6DE1BE01D6E00789E22 /* FooterExampleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F3A6D81BE01D6E00789E22 /* FooterExampleView.m */; }; - 14F3A6E01BE01D6E00789E22 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F3A6DC1BE01D6E00789E22 /* ViewController.m */; }; - 14F3A6E41BE01D9200789E22 /* CollectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14F3A6E21BE01D9200789E22 /* CollectionController.swift */; }; - 14F3A6E71BE01DD000789E22 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F3A6E61BE01DD000789E22 /* ViewController.m */; }; - 14F3A6E91BE01DE800789E22 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14F3A6E81BE01DE800789E22 /* ViewController.swift */; }; - 14F535951C3A7E9C00671EDF /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14F535941C3A7E9C00671EDF /* AppDelegate.swift */; }; - 14F535971C3A7E9C00671EDF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 14F535961C3A7E9C00671EDF /* Assets.xcassets */; }; - 14F5359A1C3A7E9C00671EDF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 14F535981C3A7E9C00671EDF /* LaunchScreen.storyboard */; }; - 14F535A01C3A7EC000671EDF /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14F5359F1C3A7EC000671EDF /* ViewController.swift */; }; - 14F7B07C1C3AB23000AE779F /* CollectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14F7B07B1C3AB23000AE779F /* CollectionController.swift */; }; 14F848711CC6686B0052E4B0 /* DATASource.h in Headers */ = {isa = PBXBuildFile; fileRef = 14F848701CC667D20052E4B0 /* DATASource.h */; settings = {ATTRIBUTES = (Public, ); }; }; 14F848721CC668700052E4B0 /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9C1CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift */; }; 14F848731CC668700052E4B0 /* DATASource+UICollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9D1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift */; }; @@ -142,6 +32,50 @@ 14F848891CC668B60052E4B0 /* DATASource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9F1CC66665000C21DF /* DATASource.swift */; }; 14F8488A1CC668B60052E4B0 /* DATASourceCollectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA01CC66665000C21DF /* DATASourceCollectionHeaderView.swift */; }; 14F8488B1CC668B60052E4B0 /* DATASourceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA11CC66665000C21DF /* DATASourceDelegate.swift */; }; + 4471D4E31DB7822C00DE1EBE /* CollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4471D4D41DB7822C00DE1EBE /* CollectionViewController.m */; }; + 4471D4E41DB7822C00DE1EBE /* CollectionViewControllerWithFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4471D4D71DB7822C00DE1EBE /* CollectionViewControllerWithFooter.m */; }; + 4471D4E51DB7822C00DE1EBE /* FooterExampleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4471D4D91DB7822C00DE1EBE /* FooterExampleView.m */; }; + 4471D4E61DB7822C00DE1EBE /* CollectionViewControllerWithSections.m in Sources */ = {isa = PBXBuildFile; fileRef = 4471D4DC1DB7822C00DE1EBE /* CollectionViewControllerWithSections.m */; }; + 4471D4E71DB7822C00DE1EBE /* TableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4471D4DF1DB7822C00DE1EBE /* TableViewController.m */; }; + 4471D4E81DB7822C00DE1EBE /* TableViewControllerWithSections.m in Sources */ = {isa = PBXBuildFile; fileRef = 4471D4E21DB7822C00DE1EBE /* TableViewControllerWithSections.m */; }; + 4479C24B1DB77BB000803558 /* OptionsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4479C23F1DB77BB000803558 /* OptionsController.m */; }; + 4479C24C1DB77BB000803558 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4479C2421DB77BB000803558 /* AppDelegate.m */; }; + 447D2EE61DB784F9006CBF1C /* CollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 447D2EDD1DB784F9006CBF1C /* CollectionViewController.swift */; }; + 447D2EE71DB784F9006CBF1C /* OptionsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 447D2EE11DB784F9006CBF1C /* OptionsController.swift */; }; + 447D2EE81DB784F9006CBF1C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 447D2EE31DB784F9006CBF1C /* AppDelegate.swift */; }; + 447D2EEC1DB78559006CBF1C /* CollectionViewControllerWithSections.swift in Sources */ = {isa = PBXBuildFile; fileRef = 447D2EEB1DB78559006CBF1C /* CollectionViewControllerWithSections.swift */; }; + 447D2EEE1DB7855E006CBF1C /* TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 447D2EED1DB7855E006CBF1C /* TableViewController.swift */; }; + 447D2EF01DB78564006CBF1C /* TableViewControllerWithSections.swift in Sources */ = {isa = PBXBuildFile; fileRef = 447D2EEF1DB78564006CBF1C /* TableViewControllerWithSections.swift */; }; + 44A8DB5E1DB77E62009EF5A7 /* Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44A8DB5D1DB77E62009EF5A7 /* Helper.swift */; }; + 44A8DB5F1DB77E62009EF5A7 /* Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44A8DB5D1DB77E62009EF5A7 /* Helper.swift */; }; + 44A8DB601DB77F46009EF5A7 /* Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44A8DB5D1DB77E62009EF5A7 /* Helper.swift */; }; + 44B91CF01DB7728D009DB4B7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 44B91CEF1DB7728D009DB4B7 /* Assets.xcassets */; }; + 44B91CF31DB7728D009DB4B7 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 44B91CF11DB7728D009DB4B7 /* LaunchScreen.storyboard */; }; + 44B91D001DB7729D009DB4B7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 44B91CFF1DB7729D009DB4B7 /* main.m */; }; + 44B91D0E1DB7729D009DB4B7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 44B91D0D1DB7729D009DB4B7 /* Assets.xcassets */; }; + 44B91D111DB7729D009DB4B7 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 44B91D0F1DB7729D009DB4B7 /* LaunchScreen.storyboard */; }; + 44B91D171DB77375009DB4B7 /* DATAStack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44B91D161DB77375009DB4B7 /* DATAStack.framework */; }; + 44B91D181DB77375009DB4B7 /* DATAStack.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 44B91D161DB77375009DB4B7 /* DATAStack.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 44B91D1B1DB77381009DB4B7 /* DATAStack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44B91D1A1DB77381009DB4B7 /* DATAStack.framework */; }; + 44B91D1C1DB77381009DB4B7 /* DATAStack.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 44B91D1A1DB77381009DB4B7 /* DATAStack.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 44B91D241DB774B0009DB4B7 /* DATASource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9F1CC66665000C21DF /* DATASource.swift */; }; + 44B91D251DB774B0009DB4B7 /* DATASource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9F1CC66665000C21DF /* DATASource.swift */; }; + 44B91D261DB774B2009DB4B7 /* DATASourceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA11CC66665000C21DF /* DATASourceDelegate.swift */; }; + 44B91D271DB774B4009DB4B7 /* DATASourceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA11CC66665000C21DF /* DATASourceDelegate.swift */; }; + 44B91D281DB774B6009DB4B7 /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9C1CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift */; }; + 44B91D291DB774B6009DB4B7 /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9C1CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift */; }; + 44B91D2A1DB774B9009DB4B7 /* DATASource+UICollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9D1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift */; }; + 44B91D2B1DB774BA009DB4B7 /* DATASource+UICollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9D1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift */; }; + 44B91D2C1DB774BD009DB4B7 /* DATASource+UITableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9E1CC66665000C21DF /* DATASource+UITableViewDataSource.swift */; }; + 44B91D2D1DB774BD009DB4B7 /* DATASource+UITableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308A9E1CC66665000C21DF /* DATASource+UITableViewDataSource.swift */; }; + 44B91D2E1DB774BF009DB4B7 /* DATASourceCollectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA01CC66665000C21DF /* DATASourceCollectionHeaderView.swift */; }; + 44B91D2F1DB774C0009DB4B7 /* DATASourceCollectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14308AA01CC66665000C21DF /* DATASourceCollectionHeaderView.swift */; }; + 44B91D301DB77511009DB4B7 /* CollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6051C3BC9E80066FAC8 /* CollectionCell.swift */; }; + 44B91D311DB77511009DB4B7 /* CollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6051C3BC9E80066FAC8 /* CollectionCell.swift */; }; + 44B91D321DB77514009DB4B7 /* DataModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6061C3BC9E80066FAC8 /* DataModel.xcdatamodeld */; }; + 44B91D331DB77515009DB4B7 /* DataModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6061C3BC9E80066FAC8 /* DataModel.xcdatamodeld */; }; + 44B91D341DB77517009DB4B7 /* InfiniteLoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6081C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift */; }; + 44B91D351DB77518009DB4B7 /* InfiniteLoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1498B6081C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -155,79 +89,24 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 14C022571CC9031700CEFC40 /* Embed Frameworks */ = { + 44B91D191DB77375009DB4B7 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( - 14C022561CC9031700CEFC40 /* DATAStack.framework in Embed Frameworks */, + 44B91D181DB77375009DB4B7 /* DATAStack.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; - 14C0225B1CC9031F00CEFC40 /* Embed Frameworks */ = { + 44B91D1D1DB77381009DB4B7 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( - 14C0225A1CC9031F00CEFC40 /* DATAStack.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - 14C0225F1CC9033C00CEFC40 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 14C0225E1CC9033B00CEFC40 /* DATAStack.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - 14C022631CC9034500CEFC40 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 14C022621CC9034500CEFC40 /* DATAStack.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - 14C022671CC9034E00CEFC40 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 14C022661CC9034E00CEFC40 /* DATAStack.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - 14C0226B1CC9035800CEFC40 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 14C0226A1CC9035800CEFC40 /* DATAStack.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - 14C0226F1CC9036200CEFC40 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 14C0226E1CC9036100CEFC40 /* DATAStack.framework in Embed Frameworks */, + 44B91D1C1DB77381009DB4B7 /* DATAStack.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -235,29 +114,18 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 141D2EE31BE021500028F879 /* CustomCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomCell.swift; sourceTree = ""; }; 14308A9C1CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DATASource+NSFetchedResultsControllerDelegate.swift"; sourceTree = ""; }; 14308A9D1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DATASource+UICollectionViewDataSource.swift"; sourceTree = ""; }; 14308A9E1CC66665000C21DF /* DATASource+UITableViewDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DATASource+UITableViewDataSource.swift"; sourceTree = ""; }; 14308A9F1CC66665000C21DF /* DATASource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DATASource.swift; sourceTree = ""; }; 14308AA01CC66665000C21DF /* DATASourceCollectionHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DATASourceCollectionHeaderView.swift; sourceTree = ""; }; 14308AA11CC66665000C21DF /* DATASourceDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DATASourceDelegate.swift; sourceTree = ""; }; - 146205801C3AB0E400D78FC5 /* InfiniteCollectionSwift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = InfiniteCollectionSwift.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 146205821C3AB0E400D78FC5 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 146205841C3AB0E400D78FC5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 146205871C3AB0E400D78FC5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 146205891C3AB0E400D78FC5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 14663CA51DB97F2D00E8ABFC /* TableViewControllerWithSectionsWithoutIndex.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewControllerWithSectionsWithoutIndex.swift; sourceTree = ""; }; 146D72AC1AB782920058798C /* Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 146D72B11AB782920058798C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 1498B6051C3BC9E80066FAC8 /* CollectionCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionCell.swift; sourceTree = ""; }; 1498B6071C3BC9E80066FAC8 /* DataModel.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = DataModel.xcdatamodel; sourceTree = ""; }; 1498B6081C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InfiniteLoadingIndicator.swift; sourceTree = ""; }; - 149AF1901C0EB9EF00BA0907 /* DATASourceDelegateTableSwift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DATASourceDelegateTableSwift.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 149AF1921C0EB9EF00BA0907 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 149AF1971C0EB9EF00BA0907 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 149AF19A1C0EB9EF00BA0907 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 149AF19C1C0EB9EF00BA0907 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 149AF1A01C0EBA0700BA0907 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 149EE8791CC916DB002739BA /* DATAStack.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DATAStack.framework; path = Carthage/Build/iOS/DATAStack.framework; sourceTree = ""; }; 14A139B31AEFC72B00AD732F /* Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; 14C022541CC9031700CEFC40 /* DATAStack.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DATAStack.framework; path = Carthage/Build/iOS/DATAStack.framework; sourceTree = ""; }; @@ -267,65 +135,51 @@ 14C022641CC9034E00CEFC40 /* DATAStack.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DATAStack.framework; path = Carthage/Build/iOS/DATAStack.framework; sourceTree = ""; }; 14C022681CC9035800CEFC40 /* DATAStack.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DATAStack.framework; path = Carthage/Build/iOS/DATAStack.framework; sourceTree = ""; }; 14C0226C1CC9036100CEFC40 /* DATAStack.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DATAStack.framework; path = Carthage/Build/iOS/DATAStack.framework; sourceTree = ""; }; - 14C0AF7F1BD6D4230009ECBE /* .slather.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = .slather.yml; sourceTree = ""; }; 14C0AF801BD6D4230009ECBE /* .travis.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; 14C0AF811BD6D4230009ECBE /* CHANGELOG.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = ""; }; 14C0AF821BD6D4230009ECBE /* CONTRIBUTING.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = CONTRIBUTING.md; sourceTree = ""; }; 14C0AF831BD6D4230009ECBE /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - 14F3A67A1BE01B8400789E22 /* CollectionSwift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CollectionSwift.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 14F3A67C1BE01B8500789E22 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 14F3A6811BE01B8500789E22 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 14F3A6841BE01B8500789E22 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 14F3A6861BE01B8500789E22 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 14F3A68E1BE01B9200789E22 /* CollectionObjC.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CollectionObjC.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 14F3A6911BE01B9200789E22 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 14F3A6931BE01B9200789E22 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 14F3A6941BE01B9200789E22 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 14F3A6991BE01B9200789E22 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 14F3A69C1BE01B9200789E22 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 14F3A69E1BE01B9200789E22 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 14F3A6A61BE01B9C00789E22 /* TableSwift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TableSwift.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 14F3A6A81BE01B9C00789E22 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 14F3A6AD1BE01B9C00789E22 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 14F3A6B01BE01B9C00789E22 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 14F3A6B21BE01B9C00789E22 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 14F3A6BA1BE01BA900789E22 /* TableObjC.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TableObjC.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 14F3A6BD1BE01BA900789E22 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 14F3A6BF1BE01BA900789E22 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 14F3A6C01BE01BA900789E22 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 14F3A6C51BE01BA900789E22 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 14F3A6C81BE01BA900789E22 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 14F3A6CA1BE01BA900789E22 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 14F3A6D71BE01D6E00789E22 /* FooterExampleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FooterExampleView.h; sourceTree = ""; }; - 14F3A6D81BE01D6E00789E22 /* FooterExampleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FooterExampleView.m; sourceTree = ""; }; - 14F3A6DB1BE01D6E00789E22 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - 14F3A6DC1BE01D6E00789E22 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; - 14F3A6E21BE01D9200789E22 /* CollectionController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionController.swift; sourceTree = ""; }; - 14F3A6E51BE01DD000789E22 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - 14F3A6E61BE01DD000789E22 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; - 14F3A6E81BE01DE800789E22 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 14F535921C3A7E9C00671EDF /* InfiniteTableSwift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = InfiniteTableSwift.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 14F535941C3A7E9C00671EDF /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 14F535961C3A7E9C00671EDF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 14F535991C3A7E9C00671EDF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 14F5359B1C3A7E9C00671EDF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 14F5359F1C3A7EC000671EDF /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 14F7B07B1C3AB23000AE779F /* CollectionController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionController.swift; sourceTree = ""; }; 14F848671CC667990052E4B0 /* DATASource.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DATASource.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 14F8486F1CC667BB0052E4B0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 14F848701CC667D20052E4B0 /* DATASource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DATASource.h; sourceTree = ""; }; 14F8487D1CC668820052E4B0 /* DATASource.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DATASource.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4471D4D31DB7822C00DE1EBE /* CollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollectionViewController.h; sourceTree = ""; }; + 4471D4D41DB7822C00DE1EBE /* CollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CollectionViewController.m; sourceTree = ""; }; + 4471D4D61DB7822C00DE1EBE /* CollectionViewControllerWithFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollectionViewControllerWithFooter.h; sourceTree = ""; }; + 4471D4D71DB7822C00DE1EBE /* CollectionViewControllerWithFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CollectionViewControllerWithFooter.m; sourceTree = ""; }; + 4471D4D81DB7822C00DE1EBE /* FooterExampleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FooterExampleView.h; sourceTree = ""; }; + 4471D4D91DB7822C00DE1EBE /* FooterExampleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FooterExampleView.m; sourceTree = ""; }; + 4471D4DB1DB7822C00DE1EBE /* CollectionViewControllerWithSections.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollectionViewControllerWithSections.h; sourceTree = ""; }; + 4471D4DC1DB7822C00DE1EBE /* CollectionViewControllerWithSections.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CollectionViewControllerWithSections.m; sourceTree = ""; }; + 4471D4DE1DB7822C00DE1EBE /* TableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TableViewController.h; sourceTree = ""; }; + 4471D4DF1DB7822C00DE1EBE /* TableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TableViewController.m; sourceTree = ""; }; + 4471D4E11DB7822C00DE1EBE /* TableViewControllerWithSections.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TableViewControllerWithSections.h; sourceTree = ""; }; + 4471D4E21DB7822C00DE1EBE /* TableViewControllerWithSections.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TableViewControllerWithSections.m; sourceTree = ""; }; + 4479C23E1DB77BB000803558 /* OptionsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptionsController.h; sourceTree = ""; }; + 4479C23F1DB77BB000803558 /* OptionsController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OptionsController.m; sourceTree = ""; }; + 4479C2411DB77BB000803558 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 4479C2421DB77BB000803558 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 447D2EDD1DB784F9006CBF1C /* CollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewController.swift; sourceTree = ""; }; + 447D2EE11DB784F9006CBF1C /* OptionsController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OptionsController.swift; sourceTree = ""; }; + 447D2EE31DB784F9006CBF1C /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 447D2EEB1DB78559006CBF1C /* CollectionViewControllerWithSections.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewControllerWithSections.swift; sourceTree = ""; }; + 447D2EED1DB7855E006CBF1C /* TableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewController.swift; sourceTree = ""; }; + 447D2EEF1DB78564006CBF1C /* TableViewControllerWithSections.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewControllerWithSections.swift; sourceTree = ""; }; + 44A8DB5D1DB77E62009EF5A7 /* Helper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Helper.swift; sourceTree = ""; }; + 44B91CE41DB7728D009DB4B7 /* SwiftDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 44B91CEF1DB7728D009DB4B7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 44B91CF21DB7728D009DB4B7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 44B91CF41DB7728D009DB4B7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 44B91CFC1DB7729D009DB4B7 /* ObjectiveCDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ObjectiveCDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 44B91CFF1DB7729D009DB4B7 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 44B91D0D1DB7729D009DB4B7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 44B91D101DB7729D009DB4B7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 44B91D121DB7729D009DB4B7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 44B91D161DB77375009DB4B7 /* DATAStack.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DATAStack.framework; path = Carthage/Build/iOS/DATAStack.framework; sourceTree = ""; }; + 44B91D1A1DB77381009DB4B7 /* DATAStack.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DATAStack.framework; path = Carthage/Build/iOS/DATAStack.framework; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1462057D1C3AB0E400D78FC5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 14C0226D1CC9036100CEFC40 /* DATAStack.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 146D72A91AB782920058798C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -334,65 +188,33 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 149AF18D1C0EB9EF00BA0907 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 14C022651CC9034E00CEFC40 /* DATAStack.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 14F3A6771BE01B8400789E22 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 14C022551CC9031700CEFC40 /* DATAStack.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 14F3A68B1BE01B9200789E22 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 14C022591CC9031F00CEFC40 /* DATAStack.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 14F3A6A31BE01B9C00789E22 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 14C0225D1CC9033B00CEFC40 /* DATAStack.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 14F3A6B71BE01BA900789E22 /* Frameworks */ = { + 14F848631CC667990052E4B0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 14C022611CC9034500CEFC40 /* DATAStack.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 14F5358F1C3A7E9C00671EDF /* Frameworks */ = { + 14F848791CC668820052E4B0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 14C022691CC9035800CEFC40 /* DATAStack.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 14F848631CC667990052E4B0 /* Frameworks */ = { + 44B91CE11DB7728D009DB4B7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 44B91D171DB77375009DB4B7 /* DATAStack.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 14F848791CC668820052E4B0 /* Frameworks */ = { + 44B91CF91DB7729D009DB4B7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 44B91D1B1DB77381009DB4B7 /* DATAStack.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -413,16 +235,12 @@ path = Source; sourceTree = ""; }; - 146205811C3AB0E400D78FC5 /* InfiniteCollectionSwift */ = { + 14663CA41DB97F2D00E8ABFC /* TableViewControllerWithSectionsWithoutIndex */ = { isa = PBXGroup; children = ( - 146205821C3AB0E400D78FC5 /* AppDelegate.swift */, - 14F7B07B1C3AB23000AE779F /* CollectionController.swift */, - 146205841C3AB0E400D78FC5 /* Assets.xcassets */, - 146205861C3AB0E400D78FC5 /* LaunchScreen.storyboard */, - 146205891C3AB0E400D78FC5 /* Info.plist */, + 14663CA51DB97F2D00E8ABFC /* TableViewControllerWithSectionsWithoutIndex.swift */, ); - path = InfiniteCollectionSwift; + path = TableViewControllerWithSectionsWithoutIndex; sourceTree = ""; }; 146D728A1AB782920058798C = { @@ -432,13 +250,8 @@ 14C136501AB7849300B7B07A /* Metadata */, 146D72AF1AB782920058798C /* Tests */, 1498B6041C3BC9E80066FAC8 /* Library */, - 14F3A67B1BE01B8500789E22 /* CollectionSwift */, - 14F3A68F1BE01B9200789E22 /* CollectionObjC */, - 14F3A6A71BE01B9C00789E22 /* TableSwift */, - 14F3A6BB1BE01BA900789E22 /* TableObjC */, - 149AF1911C0EB9EF00BA0907 /* DATASourceDelegateTableSwift */, - 14F535931C3A7E9C00671EDF /* InfiniteTableSwift */, - 146205811C3AB0E400D78FC5 /* InfiniteCollectionSwift */, + 44B91CE51DB7728D009DB4B7 /* SwiftDemo */, + 44B91CFD1DB7729D009DB4B7 /* ObjectiveCDemo */, 146D72941AB782920058798C /* Products */, AD64C6A3429E8A3FBFC3CF2D /* Frameworks */, ); @@ -450,15 +263,10 @@ isa = PBXGroup; children = ( 146D72AC1AB782920058798C /* Tests.xctest */, - 14F3A67A1BE01B8400789E22 /* CollectionSwift.app */, - 14F3A68E1BE01B9200789E22 /* CollectionObjC.app */, - 14F3A6A61BE01B9C00789E22 /* TableSwift.app */, - 14F3A6BA1BE01BA900789E22 /* TableObjC.app */, - 149AF1901C0EB9EF00BA0907 /* DATASourceDelegateTableSwift.app */, - 14F535921C3A7E9C00671EDF /* InfiniteTableSwift.app */, - 146205801C3AB0E400D78FC5 /* InfiniteCollectionSwift.app */, 14F848671CC667990052E4B0 /* DATASource.framework */, 14F8487D1CC668820052E4B0 /* DATASource.framework */, + 44B91CE41DB7728D009DB4B7 /* SwiftDemo.app */, + 44B91CFC1DB7729D009DB4B7 /* ObjectiveCDemo.app */, ); name = Products; sourceTree = ""; @@ -483,29 +291,17 @@ 1498B6041C3BC9E80066FAC8 /* Library */ = { isa = PBXGroup; children = ( - 1498B6051C3BC9E80066FAC8 /* CollectionCell.swift */, 1498B6061C3BC9E80066FAC8 /* DataModel.xcdatamodeld */, + 1498B6051C3BC9E80066FAC8 /* CollectionCell.swift */, 1498B6081C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift */, + 44A8DB5D1DB77E62009EF5A7 /* Helper.swift */, ); path = Library; sourceTree = ""; }; - 149AF1911C0EB9EF00BA0907 /* DATASourceDelegateTableSwift */ = { - isa = PBXGroup; - children = ( - 149AF1921C0EB9EF00BA0907 /* AppDelegate.swift */, - 149AF1A01C0EBA0700BA0907 /* ViewController.swift */, - 149AF1971C0EB9EF00BA0907 /* Assets.xcassets */, - 149AF1991C0EB9EF00BA0907 /* LaunchScreen.storyboard */, - 149AF19C1C0EB9EF00BA0907 /* Info.plist */, - ); - path = DATASourceDelegateTableSwift; - sourceTree = ""; - }; 14C136501AB7849300B7B07A /* Metadata */ = { isa = PBXGroup; children = ( - 14C0AF7F1BD6D4230009ECBE /* .slather.yml */, 14C0AF801BD6D4230009ECBE /* .travis.yml */, 14C0AF811BD6D4230009ECBE /* CHANGELOG.md */, 14C0AF821BD6D4230009ECBE /* CONTRIBUTING.md */, @@ -515,94 +311,167 @@ name = Metadata; sourceTree = ""; }; - 14F3A67B1BE01B8500789E22 /* CollectionSwift */ = { + 4471D4D21DB7822C00DE1EBE /* CollectionViewController */ = { isa = PBXGroup; children = ( - 14F3A67C1BE01B8500789E22 /* AppDelegate.swift */, - 14F3A6E21BE01D9200789E22 /* CollectionController.swift */, - 14F3A6811BE01B8500789E22 /* Assets.xcassets */, - 14F3A6831BE01B8500789E22 /* LaunchScreen.storyboard */, - 14F3A6861BE01B8500789E22 /* Info.plist */, + 4471D4D31DB7822C00DE1EBE /* CollectionViewController.h */, + 4471D4D41DB7822C00DE1EBE /* CollectionViewController.m */, ); - path = CollectionSwift; + path = CollectionViewController; sourceTree = ""; }; - 14F3A68F1BE01B9200789E22 /* CollectionObjC */ = { + 4471D4D51DB7822C00DE1EBE /* CollectionViewControllerWithFooter */ = { isa = PBXGroup; children = ( - 14F3A6931BE01B9200789E22 /* AppDelegate.h */, - 14F3A6941BE01B9200789E22 /* AppDelegate.m */, - 14F3A6D71BE01D6E00789E22 /* FooterExampleView.h */, - 14F3A6D81BE01D6E00789E22 /* FooterExampleView.m */, - 14F3A6DB1BE01D6E00789E22 /* ViewController.h */, - 14F3A6DC1BE01D6E00789E22 /* ViewController.m */, - 14F3A6991BE01B9200789E22 /* Assets.xcassets */, - 14F3A69B1BE01B9200789E22 /* LaunchScreen.storyboard */, - 14F3A69E1BE01B9200789E22 /* Info.plist */, - 14F3A6901BE01B9200789E22 /* Supporting Files */, - ); - path = CollectionObjC; + 4471D4D61DB7822C00DE1EBE /* CollectionViewControllerWithFooter.h */, + 4471D4D71DB7822C00DE1EBE /* CollectionViewControllerWithFooter.m */, + 4471D4D81DB7822C00DE1EBE /* FooterExampleView.h */, + 4471D4D91DB7822C00DE1EBE /* FooterExampleView.m */, + ); + path = CollectionViewControllerWithFooter; sourceTree = ""; }; - 14F3A6901BE01B9200789E22 /* Supporting Files */ = { + 4471D4DA1DB7822C00DE1EBE /* CollectionViewControllerWithSections */ = { isa = PBXGroup; children = ( - 14F3A6911BE01B9200789E22 /* main.m */, + 4471D4DB1DB7822C00DE1EBE /* CollectionViewControllerWithSections.h */, + 4471D4DC1DB7822C00DE1EBE /* CollectionViewControllerWithSections.m */, ); - name = "Supporting Files"; + path = CollectionViewControllerWithSections; sourceTree = ""; }; - 14F3A6A71BE01B9C00789E22 /* TableSwift */ = { + 4471D4DD1DB7822C00DE1EBE /* TableViewController */ = { isa = PBXGroup; children = ( - 14F3A6A81BE01B9C00789E22 /* AppDelegate.swift */, - 14F3A6E81BE01DE800789E22 /* ViewController.swift */, - 141D2EE31BE021500028F879 /* CustomCell.swift */, - 14F3A6AD1BE01B9C00789E22 /* Assets.xcassets */, - 14F3A6AF1BE01B9C00789E22 /* LaunchScreen.storyboard */, - 14F3A6B21BE01B9C00789E22 /* Info.plist */, - ); - path = TableSwift; + 4471D4DE1DB7822C00DE1EBE /* TableViewController.h */, + 4471D4DF1DB7822C00DE1EBE /* TableViewController.m */, + ); + path = TableViewController; sourceTree = ""; }; - 14F3A6BB1BE01BA900789E22 /* TableObjC */ = { + 4471D4E01DB7822C00DE1EBE /* TableViewControllerWithSections */ = { isa = PBXGroup; children = ( - 14F3A6BF1BE01BA900789E22 /* AppDelegate.h */, - 14F3A6C01BE01BA900789E22 /* AppDelegate.m */, - 14F3A6E51BE01DD000789E22 /* ViewController.h */, - 14F3A6E61BE01DD000789E22 /* ViewController.m */, - 14F3A6C51BE01BA900789E22 /* Assets.xcassets */, - 14F3A6C71BE01BA900789E22 /* LaunchScreen.storyboard */, - 14F3A6CA1BE01BA900789E22 /* Info.plist */, - 14F3A6BC1BE01BA900789E22 /* Supporting Files */, - ); - path = TableObjC; + 4471D4E11DB7822C00DE1EBE /* TableViewControllerWithSections.h */, + 4471D4E21DB7822C00DE1EBE /* TableViewControllerWithSections.m */, + ); + path = TableViewControllerWithSections; sourceTree = ""; }; - 14F3A6BC1BE01BA900789E22 /* Supporting Files */ = { + 4479C23D1DB77BB000803558 /* Options */ = { isa = PBXGroup; children = ( - 14F3A6BD1BE01BA900789E22 /* main.m */, + 4479C23E1DB77BB000803558 /* OptionsController.h */, + 4479C23F1DB77BB000803558 /* OptionsController.m */, ); - name = "Supporting Files"; + path = Options; + sourceTree = ""; + }; + 4479C2401DB77BB000803558 /* Root */ = { + isa = PBXGroup; + children = ( + 4479C2411DB77BB000803558 /* AppDelegate.h */, + 4479C2421DB77BB000803558 /* AppDelegate.m */, + ); + path = Root; + sourceTree = ""; + }; + 447D2EDC1DB784F9006CBF1C /* CollectionViewController */ = { + isa = PBXGroup; + children = ( + 447D2EDD1DB784F9006CBF1C /* CollectionViewController.swift */, + ); + path = CollectionViewController; + sourceTree = ""; + }; + 447D2EDF1DB784F9006CBF1C /* CollectionViewControllerWithSections */ = { + isa = PBXGroup; + children = ( + 447D2EEB1DB78559006CBF1C /* CollectionViewControllerWithSections.swift */, + ); + path = CollectionViewControllerWithSections; + sourceTree = ""; + }; + 447D2EE01DB784F9006CBF1C /* Options */ = { + isa = PBXGroup; + children = ( + 447D2EE11DB784F9006CBF1C /* OptionsController.swift */, + ); + path = Options; + sourceTree = ""; + }; + 447D2EE21DB784F9006CBF1C /* Root */ = { + isa = PBXGroup; + children = ( + 447D2EE31DB784F9006CBF1C /* AppDelegate.swift */, + ); + path = Root; + sourceTree = ""; + }; + 447D2EE41DB784F9006CBF1C /* TableViewController */ = { + isa = PBXGroup; + children = ( + 447D2EED1DB7855E006CBF1C /* TableViewController.swift */, + ); + path = TableViewController; + sourceTree = ""; + }; + 447D2EE51DB784F9006CBF1C /* TableViewControllerWithSections */ = { + isa = PBXGroup; + children = ( + 447D2EEF1DB78564006CBF1C /* TableViewControllerWithSections.swift */, + ); + path = TableViewControllerWithSections; + sourceTree = ""; + }; + 44B91CE51DB7728D009DB4B7 /* SwiftDemo */ = { + isa = PBXGroup; + children = ( + 447D2EE21DB784F9006CBF1C /* Root */, + 447D2EE01DB784F9006CBF1C /* Options */, + 447D2EDC1DB784F9006CBF1C /* CollectionViewController */, + 447D2EDF1DB784F9006CBF1C /* CollectionViewControllerWithSections */, + 447D2EE41DB784F9006CBF1C /* TableViewController */, + 447D2EE51DB784F9006CBF1C /* TableViewControllerWithSections */, + 14663CA41DB97F2D00E8ABFC /* TableViewControllerWithSectionsWithoutIndex */, + 44B91CEF1DB7728D009DB4B7 /* Assets.xcassets */, + 44B91CF11DB7728D009DB4B7 /* LaunchScreen.storyboard */, + 44B91CF41DB7728D009DB4B7 /* Info.plist */, + ); + path = SwiftDemo; + sourceTree = ""; + }; + 44B91CFD1DB7729D009DB4B7 /* ObjectiveCDemo */ = { + isa = PBXGroup; + children = ( + 4479C2401DB77BB000803558 /* Root */, + 4479C23D1DB77BB000803558 /* Options */, + 4471D4D21DB7822C00DE1EBE /* CollectionViewController */, + 4471D4DA1DB7822C00DE1EBE /* CollectionViewControllerWithSections */, + 4471D4D51DB7822C00DE1EBE /* CollectionViewControllerWithFooter */, + 4471D4DD1DB7822C00DE1EBE /* TableViewController */, + 4471D4E01DB7822C00DE1EBE /* TableViewControllerWithSections */, + 44B91CFE1DB7729D009DB4B7 /* Supporting Files */, + ); + path = ObjectiveCDemo; sourceTree = ""; }; - 14F535931C3A7E9C00671EDF /* InfiniteTableSwift */ = { + 44B91CFE1DB7729D009DB4B7 /* Supporting Files */ = { isa = PBXGroup; children = ( - 14F535941C3A7E9C00671EDF /* AppDelegate.swift */, - 14F5359F1C3A7EC000671EDF /* ViewController.swift */, - 14F535961C3A7E9C00671EDF /* Assets.xcassets */, - 14F535981C3A7E9C00671EDF /* LaunchScreen.storyboard */, - 14F5359B1C3A7E9C00671EDF /* Info.plist */, + 44B91D0D1DB7729D009DB4B7 /* Assets.xcassets */, + 44B91D0F1DB7729D009DB4B7 /* LaunchScreen.storyboard */, + 44B91D121DB7729D009DB4B7 /* Info.plist */, + 44B91CFF1DB7729D009DB4B7 /* main.m */, ); - path = InfiniteTableSwift; + name = "Supporting Files"; sourceTree = ""; }; AD64C6A3429E8A3FBFC3CF2D /* Frameworks */ = { isa = PBXGroup; children = ( + 44B91D1A1DB77381009DB4B7 /* DATAStack.framework */, + 44B91D161DB77375009DB4B7 /* DATAStack.framework */, 14C022581CC9031F00CEFC40 /* DATAStack.framework */, 149EE8791CC916DB002739BA /* DATAStack.framework */, 14C022541CC9031700CEFC40 /* DATAStack.framework */, @@ -637,24 +506,6 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 1462057F1C3AB0E400D78FC5 /* InfiniteCollectionSwift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1462058C1C3AB0E400D78FC5 /* Build configuration list for PBXNativeTarget "InfiniteCollectionSwift" */; - buildPhases = ( - 1462057C1C3AB0E400D78FC5 /* Sources */, - 1462057D1C3AB0E400D78FC5 /* Frameworks */, - 1462057E1C3AB0E400D78FC5 /* Resources */, - 14C0226F1CC9036200CEFC40 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = InfiniteCollectionSwift; - productName = InfiniteCollectionSwift; - productReference = 146205801C3AB0E400D78FC5 /* InfiniteCollectionSwift.app */; - productType = "com.apple.product-type.application"; - }; 146D72AB1AB782920058798C /* Tests */ = { isa = PBXNativeTarget; buildConfigurationList = 146D72B91AB782920058798C /* Build configuration list for PBXNativeTarget "Tests" */; @@ -673,114 +524,6 @@ productReference = 146D72AC1AB782920058798C /* Tests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - 149AF18F1C0EB9EF00BA0907 /* DATASourceDelegateTableSwift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 149AF19F1C0EB9EF00BA0907 /* Build configuration list for PBXNativeTarget "DATASourceDelegateTableSwift" */; - buildPhases = ( - 149AF18C1C0EB9EF00BA0907 /* Sources */, - 149AF18D1C0EB9EF00BA0907 /* Frameworks */, - 149AF18E1C0EB9EF00BA0907 /* Resources */, - 14C022671CC9034E00CEFC40 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DATASourceDelegateTableSwift; - productName = DATASourceDelegateTableSwift; - productReference = 149AF1901C0EB9EF00BA0907 /* DATASourceDelegateTableSwift.app */; - productType = "com.apple.product-type.application"; - }; - 14F3A6791BE01B8400789E22 /* CollectionSwift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 14F3A6891BE01B8500789E22 /* Build configuration list for PBXNativeTarget "CollectionSwift" */; - buildPhases = ( - 14F3A6761BE01B8400789E22 /* Sources */, - 14F3A6771BE01B8400789E22 /* Frameworks */, - 14F3A6781BE01B8400789E22 /* Resources */, - 14C022571CC9031700CEFC40 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = CollectionSwift; - productName = CollectionSwift; - productReference = 14F3A67A1BE01B8400789E22 /* CollectionSwift.app */; - productType = "com.apple.product-type.application"; - }; - 14F3A68D1BE01B9200789E22 /* CollectionObjC */ = { - isa = PBXNativeTarget; - buildConfigurationList = 14F3A69F1BE01B9200789E22 /* Build configuration list for PBXNativeTarget "CollectionObjC" */; - buildPhases = ( - 14F3A68A1BE01B9200789E22 /* Sources */, - 14F3A68B1BE01B9200789E22 /* Frameworks */, - 14F3A68C1BE01B9200789E22 /* Resources */, - 14C0225B1CC9031F00CEFC40 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = CollectionObjC; - productName = CollectionObjC; - productReference = 14F3A68E1BE01B9200789E22 /* CollectionObjC.app */; - productType = "com.apple.product-type.application"; - }; - 14F3A6A51BE01B9C00789E22 /* TableSwift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 14F3A6B31BE01B9C00789E22 /* Build configuration list for PBXNativeTarget "TableSwift" */; - buildPhases = ( - 14F3A6A21BE01B9C00789E22 /* Sources */, - 14F3A6A31BE01B9C00789E22 /* Frameworks */, - 14F3A6A41BE01B9C00789E22 /* Resources */, - 14C0225F1CC9033C00CEFC40 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = TableSwift; - productName = TableSwift; - productReference = 14F3A6A61BE01B9C00789E22 /* TableSwift.app */; - productType = "com.apple.product-type.application"; - }; - 14F3A6B91BE01BA900789E22 /* TableObjC */ = { - isa = PBXNativeTarget; - buildConfigurationList = 14F3A6CB1BE01BA900789E22 /* Build configuration list for PBXNativeTarget "TableObjC" */; - buildPhases = ( - 14F3A6B61BE01BA900789E22 /* Sources */, - 14F3A6B71BE01BA900789E22 /* Frameworks */, - 14F3A6B81BE01BA900789E22 /* Resources */, - 14C022631CC9034500CEFC40 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = TableObjC; - productName = TableObjC; - productReference = 14F3A6BA1BE01BA900789E22 /* TableObjC.app */; - productType = "com.apple.product-type.application"; - }; - 14F535911C3A7E9C00671EDF /* InfiniteTableSwift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 14F5359E1C3A7E9C00671EDF /* Build configuration list for PBXNativeTarget "InfiniteTableSwift" */; - buildPhases = ( - 14F5358E1C3A7E9C00671EDF /* Sources */, - 14F5358F1C3A7E9C00671EDF /* Frameworks */, - 14F535901C3A7E9C00671EDF /* Resources */, - 14C0226B1CC9035800CEFC40 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = InfiniteTableSwift; - productName = InfiniteTableSwift; - productReference = 14F535921C3A7E9C00671EDF /* InfiniteTableSwift.app */; - productType = "com.apple.product-type.application"; - }; 14F848661CC667990052E4B0 /* DATASource-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = 14F8486E1CC667990052E4B0 /* Build configuration list for PBXNativeTarget "DATASource-iOS" */; @@ -817,6 +560,42 @@ productReference = 14F8487D1CC668820052E4B0 /* DATASource.framework */; productType = "com.apple.product-type.framework"; }; + 44B91CE31DB7728D009DB4B7 /* SwiftDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 44B91CF51DB7728D009DB4B7 /* Build configuration list for PBXNativeTarget "SwiftDemo" */; + buildPhases = ( + 44B91CE01DB7728D009DB4B7 /* Sources */, + 44B91CE11DB7728D009DB4B7 /* Frameworks */, + 44B91CE21DB7728D009DB4B7 /* Resources */, + 44B91D191DB77375009DB4B7 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SwiftDemo; + productName = SwiftDemo; + productReference = 44B91CE41DB7728D009DB4B7 /* SwiftDemo.app */; + productType = "com.apple.product-type.application"; + }; + 44B91CFB1DB7729D009DB4B7 /* ObjectiveCDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 44B91D131DB7729D009DB4B7 /* Build configuration list for PBXNativeTarget "ObjectiveCDemo" */; + buildPhases = ( + 44B91CF81DB7729D009DB4B7 /* Sources */, + 44B91CF91DB7729D009DB4B7 /* Frameworks */, + 44B91CFA1DB7729D009DB4B7 /* Resources */, + 44B91D1D1DB77381009DB4B7 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ObjectiveCDemo; + productName = ObjectiveCDemo; + productReference = 44B91CFC1DB7729D009DB4B7 /* ObjectiveCDemo.app */; + productType = "com.apple.product-type.application"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -824,16 +603,10 @@ isa = PBXProject; attributes = { CLASSPREFIX = ""; - LastSwiftUpdateCheck = 0720; + LastSwiftUpdateCheck = 0800; LastUpgradeCheck = 0800; ORGANIZATIONNAME = ""; TargetAttributes = { - 1462057F1C3AB0E400D78FC5 = { - CreatedOnToolsVersion = 7.2; - DevelopmentTeam = 29X3GG489T; - DevelopmentTeamName = "Elvis Nunez (Personal Team)"; - LastSwiftMigration = 0800; - }; 146D72AB1AB782920058798C = { CreatedOnToolsVersion = 6.2; DevelopmentTeam = C6K65RDJHL; @@ -841,42 +614,6 @@ LastSwiftMigration = 0800; ProvisioningStyle = Automatic; }; - 149AF18F1C0EB9EF00BA0907 = { - CreatedOnToolsVersion = 7.1; - DevelopmentTeam = 29X3GG489T; - DevelopmentTeamName = "Elvis Nunez (Personal Team)"; - LastSwiftMigration = 0800; - }; - 14F3A6791BE01B8400789E22 = { - CreatedOnToolsVersion = 7.1; - DevelopmentTeam = 29X3GG489T; - DevelopmentTeamName = "Elvis Nunez (Personal Team)"; - LastSwiftMigration = 0800; - }; - 14F3A68D1BE01B9200789E22 = { - CreatedOnToolsVersion = 7.1; - DevelopmentTeam = 29X3GG489T; - DevelopmentTeamName = "Elvis Nunez (Personal Team)"; - LastSwiftMigration = 0800; - }; - 14F3A6A51BE01B9C00789E22 = { - CreatedOnToolsVersion = 7.1; - DevelopmentTeam = 29X3GG489T; - DevelopmentTeamName = "Elvis Nunez (Personal Team)"; - LastSwiftMigration = 0800; - }; - 14F3A6B91BE01BA900789E22 = { - CreatedOnToolsVersion = 7.1; - DevelopmentTeam = 29X3GG489T; - DevelopmentTeamName = "Elvis Nunez (Personal Team)"; - LastSwiftMigration = 0800; - }; - 14F535911C3A7E9C00671EDF = { - CreatedOnToolsVersion = 7.2; - DevelopmentTeam = 29X3GG489T; - DevelopmentTeamName = "Elvis Nunez (Personal Team)"; - LastSwiftMigration = 0800; - }; 14F848661CC667990052E4B0 = { CreatedOnToolsVersion = 7.3; DevelopmentTeam = C6K65RDJHL; @@ -889,6 +626,16 @@ DevelopmentTeamName = "Elvis Nunez (Personal Team)"; LastSwiftMigration = 0800; }; + 44B91CE31DB7728D009DB4B7 = { + CreatedOnToolsVersion = 8.0; + DevelopmentTeam = 29X3GG489T; + ProvisioningStyle = Automatic; + }; + 44B91CFB1DB7729D009DB4B7 = { + CreatedOnToolsVersion = 8.0; + DevelopmentTeam = 3TAZ984YN3; + ProvisioningStyle = Automatic; + }; }; }; buildConfigurationList = 146D728E1AB782920058798C /* Build configuration list for PBXProject "Demo" */; @@ -905,251 +652,70 @@ projectRoot = ""; targets = ( 146D72AB1AB782920058798C /* Tests */, - 14F3A6791BE01B8400789E22 /* CollectionSwift */, - 14F3A68D1BE01B9200789E22 /* CollectionObjC */, - 14F3A6A51BE01B9C00789E22 /* TableSwift */, - 14F3A6B91BE01BA900789E22 /* TableObjC */, - 149AF18F1C0EB9EF00BA0907 /* DATASourceDelegateTableSwift */, - 14F535911C3A7E9C00671EDF /* InfiniteTableSwift */, - 1462057F1C3AB0E400D78FC5 /* InfiniteCollectionSwift */, 14F848661CC667990052E4B0 /* DATASource-iOS */, 14F8487C1CC668820052E4B0 /* DATASource-tvOS */, + 44B91CE31DB7728D009DB4B7 /* SwiftDemo */, + 44B91CFB1DB7729D009DB4B7 /* ObjectiveCDemo */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 1462057E1C3AB0E400D78FC5 /* Resources */ = { + 146D72AA1AB782920058798C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 146205851C3AB0E400D78FC5 /* Assets.xcassets in Resources */, - 146205881C3AB0E400D78FC5 /* LaunchScreen.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 146D72AA1AB782920058798C /* Resources */ = { + 14F848651CC667990052E4B0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 149AF18E1C0EB9EF00BA0907 /* Resources */ = { + 14F8487B1CC668820052E4B0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 149AF1981C0EB9EF00BA0907 /* Assets.xcassets in Resources */, - 149AF19B1C0EB9EF00BA0907 /* LaunchScreen.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 14F3A6781BE01B8400789E22 /* Resources */ = { + 44B91CE21DB7728D009DB4B7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 14F3A6821BE01B8500789E22 /* Assets.xcassets in Resources */, - 14F3A6851BE01B8500789E22 /* LaunchScreen.storyboard in Resources */, + 44B91CF31DB7728D009DB4B7 /* LaunchScreen.storyboard in Resources */, + 44B91CF01DB7728D009DB4B7 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 14F3A68C1BE01B9200789E22 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 14F3A69A1BE01B9200789E22 /* Assets.xcassets in Resources */, - 14F3A69D1BE01B9200789E22 /* LaunchScreen.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 14F3A6A41BE01B9C00789E22 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 14F3A6AE1BE01B9C00789E22 /* Assets.xcassets in Resources */, - 14F3A6B11BE01B9C00789E22 /* LaunchScreen.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 14F3A6B81BE01BA900789E22 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 14F3A6C61BE01BA900789E22 /* Assets.xcassets in Resources */, - 14F3A6C91BE01BA900789E22 /* LaunchScreen.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 14F535901C3A7E9C00671EDF /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 14F535971C3A7E9C00671EDF /* Assets.xcassets in Resources */, - 14F5359A1C3A7E9C00671EDF /* LaunchScreen.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 14F848651CC667990052E4B0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 14F8487B1CC668820052E4B0 /* Resources */ = { + 44B91CFA1DB7729D009DB4B7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 44B91D111DB7729D009DB4B7 /* LaunchScreen.storyboard in Resources */, + 44B91D0E1DB7729D009DB4B7 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 1462057C1C3AB0E400D78FC5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 14308AC91CC66665000C21DF /* DATASourceCollectionHeaderView.swift in Sources */, - 146205831C3AB0E400D78FC5 /* AppDelegate.swift in Sources */, - 14308AA91CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */, - 1498B6161C3BC9E80066FAC8 /* DataModel.xcdatamodeld in Sources */, - 14308AB91CC66665000C21DF /* DATASource+UITableViewDataSource.swift in Sources */, - 14308AD11CC66665000C21DF /* DATASourceDelegate.swift in Sources */, - 14308AC11CC66665000C21DF /* DATASource.swift in Sources */, - 14F7B07C1C3AB23000AE779F /* CollectionController.swift in Sources */, - 1498B61D1C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift in Sources */, - 14308AB11CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift in Sources */, - 1498B60F1C3BC9E80066FAC8 /* CollectionCell.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 146D72A81AB782920058798C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 44A8DB601DB77F46009EF5A7 /* Helper.swift in Sources */, 14308AAA1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift in Sources */, 14AFFAF11C3C00E3001AD02C /* DataModel.xcdatamodeld in Sources */, - 14AFFAF21C3C00E5001AD02C /* InfiniteLoadingIndicator.swift in Sources */, 14308AC21CC66665000C21DF /* DATASourceCollectionHeaderView.swift in Sources */, 14308AB21CC66665000C21DF /* DATASource+UITableViewDataSource.swift in Sources */, 14308AA21CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */, 14A139B41AEFC72B00AD732F /* Tests.swift in Sources */, 14308ACA1CC66665000C21DF /* DATASourceDelegate.swift in Sources */, 14308ABA1CC66665000C21DF /* DATASource.swift in Sources */, - 14AFFAF01C3C00E0001AD02C /* CollectionCell.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 149AF18C1C0EB9EF00BA0907 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 14308AC71CC66665000C21DF /* DATASourceCollectionHeaderView.swift in Sources */, - 149AF1A11C0EBA0700BA0907 /* ViewController.swift in Sources */, - 14308AA71CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */, - 1498B6141C3BC9E80066FAC8 /* DataModel.xcdatamodeld in Sources */, - 14308AB71CC66665000C21DF /* DATASource+UITableViewDataSource.swift in Sources */, - 14308ACF1CC66665000C21DF /* DATASourceDelegate.swift in Sources */, - 14308ABF1CC66665000C21DF /* DATASource.swift in Sources */, - 149AF1931C0EB9EF00BA0907 /* AppDelegate.swift in Sources */, - 1498B61B1C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift in Sources */, - 14308AAF1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift in Sources */, - 1498B60D1C3BC9E80066FAC8 /* CollectionCell.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 14F3A6761BE01B8400789E22 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 14308AC31CC66665000C21DF /* DATASourceCollectionHeaderView.swift in Sources */, - 14F3A67D1BE01B8500789E22 /* AppDelegate.swift in Sources */, - 14308AA31CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */, - 1498B6101C3BC9E80066FAC8 /* DataModel.xcdatamodeld in Sources */, - 14308AB31CC66665000C21DF /* DATASource+UITableViewDataSource.swift in Sources */, - 14308ACB1CC66665000C21DF /* DATASourceDelegate.swift in Sources */, - 14308ABB1CC66665000C21DF /* DATASource.swift in Sources */, - 14F3A6E41BE01D9200789E22 /* CollectionController.swift in Sources */, - 1498B6171C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift in Sources */, - 14308AAB1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift in Sources */, - 1498B6091C3BC9E80066FAC8 /* CollectionCell.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 14F3A68A1BE01B9200789E22 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 14F3A6E01BE01D6E00789E22 /* ViewController.m in Sources */, - 14308AB41CC66665000C21DF /* DATASource+UITableViewDataSource.swift in Sources */, - 14308AA41CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */, - 14F3A6951BE01B9200789E22 /* AppDelegate.m in Sources */, - 14F3A6921BE01B9200789E22 /* main.m in Sources */, - 1498B6111C3BC9E80066FAC8 /* DataModel.xcdatamodeld in Sources */, - 14308AC41CC66665000C21DF /* DATASourceCollectionHeaderView.swift in Sources */, - 14F3A6DE1BE01D6E00789E22 /* FooterExampleView.m in Sources */, - 14308AAC1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift in Sources */, - 14308ABC1CC66665000C21DF /* DATASource.swift in Sources */, - 1498B6181C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift in Sources */, - 1498B60A1C3BC9E80066FAC8 /* CollectionCell.swift in Sources */, - 14308ACC1CC66665000C21DF /* DATASourceDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 14F3A6A21BE01B9C00789E22 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 14308AB51CC66665000C21DF /* DATASource+UITableViewDataSource.swift in Sources */, - 14308ACD1CC66665000C21DF /* DATASourceDelegate.swift in Sources */, - 14308AA51CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */, - 14F3A6E91BE01DE800789E22 /* ViewController.swift in Sources */, - 1498B6121C3BC9E80066FAC8 /* DataModel.xcdatamodeld in Sources */, - 14308ABD1CC66665000C21DF /* DATASource.swift in Sources */, - 141D2EE41BE021500028F879 /* CustomCell.swift in Sources */, - 14308AAD1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift in Sources */, - 14F3A6A91BE01B9C00789E22 /* AppDelegate.swift in Sources */, - 1498B60B1C3BC9E80066FAC8 /* CollectionCell.swift in Sources */, - 1498B6191C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift in Sources */, - 14308AC51CC66665000C21DF /* DATASourceCollectionHeaderView.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 14F3A6B61BE01BA900789E22 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 14308AB61CC66665000C21DF /* DATASource+UITableViewDataSource.swift in Sources */, - 14308ACE1CC66665000C21DF /* DATASourceDelegate.swift in Sources */, - 14308AA61CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */, - 14F3A6C11BE01BA900789E22 /* AppDelegate.m in Sources */, - 1498B6131C3BC9E80066FAC8 /* DataModel.xcdatamodeld in Sources */, - 14308ABE1CC66665000C21DF /* DATASource.swift in Sources */, - 14F3A6E71BE01DD000789E22 /* ViewController.m in Sources */, - 14308AAE1CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift in Sources */, - 14F3A6BE1BE01BA900789E22 /* main.m in Sources */, - 1498B60C1C3BC9E80066FAC8 /* CollectionCell.swift in Sources */, - 1498B61A1C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift in Sources */, - 14308AC61CC66665000C21DF /* DATASourceCollectionHeaderView.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 14F5358E1C3A7E9C00671EDF /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 14308AC81CC66665000C21DF /* DATASourceCollectionHeaderView.swift in Sources */, - 14F535A01C3A7EC000671EDF /* ViewController.swift in Sources */, - 14308AA81CC66665000C21DF /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */, - 1498B6151C3BC9E80066FAC8 /* DataModel.xcdatamodeld in Sources */, - 14308AB81CC66665000C21DF /* DATASource+UITableViewDataSource.swift in Sources */, - 14308AD01CC66665000C21DF /* DATASourceDelegate.swift in Sources */, - 14308AC01CC66665000C21DF /* DATASource.swift in Sources */, - 14F535951C3A7E9C00671EDF /* AppDelegate.swift in Sources */, - 1498B61C1C3BC9E80066FAC8 /* InfiniteLoadingIndicator.swift in Sources */, - 14308AB01CC66665000C21DF /* DATASource+UICollectionViewDataSource.swift in Sources */, - 1498B60E1C3BC9E80066FAC8 /* CollectionCell.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1179,61 +745,71 @@ ); runOnlyForDeploymentPostprocessing = 0; }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 146205861C3AB0E400D78FC5 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 146205871C3AB0E400D78FC5 /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; - 149AF1991C0EB9EF00BA0907 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 149AF19A1C0EB9EF00BA0907 /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; - 14F3A6831BE01B8500789E22 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 14F3A6841BE01B8500789E22 /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; - 14F3A69B1BE01B9200789E22 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 14F3A69C1BE01B9200789E22 /* Base */, + 44B91CE01DB7728D009DB4B7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 44B91D321DB77514009DB4B7 /* DataModel.xcdatamodeld in Sources */, + 44B91D341DB77517009DB4B7 /* InfiniteLoadingIndicator.swift in Sources */, + 44B91D281DB774B6009DB4B7 /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */, + 447D2EEC1DB78559006CBF1C /* CollectionViewControllerWithSections.swift in Sources */, + 14663CA61DB97F2D00E8ABFC /* TableViewControllerWithSectionsWithoutIndex.swift in Sources */, + 44B91D2E1DB774BF009DB4B7 /* DATASourceCollectionHeaderView.swift in Sources */, + 447D2EE71DB784F9006CBF1C /* OptionsController.swift in Sources */, + 447D2EE61DB784F9006CBF1C /* CollectionViewController.swift in Sources */, + 44B91D2C1DB774BD009DB4B7 /* DATASource+UITableViewDataSource.swift in Sources */, + 44B91D261DB774B2009DB4B7 /* DATASourceDelegate.swift in Sources */, + 447D2EE81DB784F9006CBF1C /* AppDelegate.swift in Sources */, + 44B91D241DB774B0009DB4B7 /* DATASource.swift in Sources */, + 447D2EEE1DB7855E006CBF1C /* TableViewController.swift in Sources */, + 447D2EF01DB78564006CBF1C /* TableViewControllerWithSections.swift in Sources */, + 44B91D2A1DB774B9009DB4B7 /* DATASource+UICollectionViewDataSource.swift in Sources */, + 44B91D301DB77511009DB4B7 /* CollectionCell.swift in Sources */, + 44A8DB5E1DB77E62009EF5A7 /* Helper.swift in Sources */, ); - name = LaunchScreen.storyboard; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 14F3A6AF1BE01B9C00789E22 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 14F3A6B01BE01B9C00789E22 /* Base */, + 44B91CF81DB7729D009DB4B7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 44B91D2F1DB774C0009DB4B7 /* DATASourceCollectionHeaderView.swift in Sources */, + 4471D4E61DB7822C00DE1EBE /* CollectionViewControllerWithSections.m in Sources */, + 44B91D2D1DB774BD009DB4B7 /* DATASource+UITableViewDataSource.swift in Sources */, + 44B91D291DB774B6009DB4B7 /* DATASource+NSFetchedResultsControllerDelegate.swift in Sources */, + 44B91D271DB774B4009DB4B7 /* DATASourceDelegate.swift in Sources */, + 4471D4E51DB7822C00DE1EBE /* FooterExampleView.m in Sources */, + 44B91D001DB7729D009DB4B7 /* main.m in Sources */, + 44A8DB5F1DB77E62009EF5A7 /* Helper.swift in Sources */, + 44B91D2B1DB774BA009DB4B7 /* DATASource+UICollectionViewDataSource.swift in Sources */, + 44B91D331DB77515009DB4B7 /* DataModel.xcdatamodeld in Sources */, + 4471D4E31DB7822C00DE1EBE /* CollectionViewController.m in Sources */, + 44B91D311DB77511009DB4B7 /* CollectionCell.swift in Sources */, + 44B91D351DB77518009DB4B7 /* InfiniteLoadingIndicator.swift in Sources */, + 4471D4E71DB7822C00DE1EBE /* TableViewController.m in Sources */, + 4479C24C1DB77BB000803558 /* AppDelegate.m in Sources */, + 4471D4E81DB7822C00DE1EBE /* TableViewControllerWithSections.m in Sources */, + 4479C24B1DB77BB000803558 /* OptionsController.m in Sources */, + 44B91D251DB774B0009DB4B7 /* DATASource.swift in Sources */, + 4471D4E41DB7822C00DE1EBE /* CollectionViewControllerWithFooter.m in Sources */, ); - name = LaunchScreen.storyboard; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 14F3A6C71BE01BA900789E22 /* LaunchScreen.storyboard */ = { +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 44B91CF11DB7728D009DB4B7 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( - 14F3A6C81BE01BA900789E22 /* Base */, + 44B91CF21DB7728D009DB4B7 /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; }; - 14F535981C3A7E9C00671EDF /* LaunchScreen.storyboard */ = { + 44B91D0F1DB7729D009DB4B7 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( - 14F535991C3A7E9C00671EDF /* Base */, + 44B91D101DB7729D009DB4B7 /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; @@ -1241,48 +817,6 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 1462058A1C3AB0E400D78FC5 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 29X3GG489T; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = InfiniteCollectionSwift/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = demo.InfiniteCollectionSwift; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - }; - name = Debug; - }; - 1462058B1C3AB0E400D78FC5 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 29X3GG489T; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = InfiniteCollectionSwift/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = demo.InfiniteCollectionSwift; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - }; - name = Release; - }; 146D72B41AB782920058798C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1398,264 +932,6 @@ }; name = Release; }; - 149AF19D1C0EB9EF00BA0907 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 29X3GG489T; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = DATASourceDelegateTableSwift/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = demo.DATASourceDelegateTableSwift; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - }; - name = Debug; - }; - 149AF19E1C0EB9EF00BA0907 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 29X3GG489T; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = DATASourceDelegateTableSwift/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = demo.DATASourceDelegateTableSwift; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - }; - name = Release; - }; - 14F3A6871BE01B8500789E22 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 29X3GG489T; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = CollectionSwift/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = demo.CollectionSwift; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - }; - name = Debug; - }; - 14F3A6881BE01B8500789E22 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 29X3GG489T; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = CollectionSwift/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = demo.CollectionSwift; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - }; - name = Release; - }; - 14F3A6A01BE01B9200789E22 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 29X3GG489T; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = CollectionObjC/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = demo.CollectionObjC; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - }; - name = Debug; - }; - 14F3A6A11BE01B9200789E22 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 29X3GG489T; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = CollectionObjC/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = demo.CollectionObjC; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - }; - name = Release; - }; - 14F3A6B41BE01B9C00789E22 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 29X3GG489T; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = TableSwift/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = demo.TableSwift; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - }; - name = Debug; - }; - 14F3A6B51BE01B9C00789E22 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 29X3GG489T; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = TableSwift/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = demo.TableSwift; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - }; - name = Release; - }; - 14F3A6CC1BE01BA900789E22 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 29X3GG489T; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = TableObjC/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = demo.TableObjC; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - }; - name = Debug; - }; - 14F3A6CD1BE01BA900789E22 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 29X3GG489T; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = TableObjC/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = demo.TableObjC; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - }; - name = Release; - }; - 14F5359C1C3A7E9C00671EDF /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 29X3GG489T; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = InfiniteTableSwift/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = demo.DATASourceDelegateTableSwift; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - }; - name = Debug; - }; - 14F5359D1C3A7E9C00671EDF /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 29X3GG489T; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = InfiniteTableSwift/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = demo.DATASourceDelegateTableSwift; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - }; - name = Release; - }; 14F8486C1CC667990052E4B0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1762,18 +1038,104 @@ }; name = Release; }; + 44B91CF61DB7728D009DB4B7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = 29X3GG489T; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + INFOPLIST_FILE = SwiftDemo/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.3lvis.networking.SwiftDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + }; + name = Debug; + }; + 44B91CF71DB7728D009DB4B7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 29X3GG489T; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + INFOPLIST_FILE = SwiftDemo/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.3lvis.networking.SwiftDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; + }; + name = Release; + }; + 44B91D141DB7729D009DB4B7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = 3TAZ984YN3; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + INFOPLIST_FILE = ObjectiveCDemo/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.3lvis.networking.ObjectiveCDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Debug; + }; + 44B91D151DB7729D009DB4B7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 3TAZ984YN3; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + INFOPLIST_FILE = ObjectiveCDemo/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.3lvis.networking.ObjectiveCDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 1462058C1C3AB0E400D78FC5 /* Build configuration list for PBXNativeTarget "InfiniteCollectionSwift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1462058A1C3AB0E400D78FC5 /* Debug */, - 1462058B1C3AB0E400D78FC5 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 146D728E1AB782920058798C /* Build configuration list for PBXProject "Demo" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -1792,74 +1154,38 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 149AF19F1C0EB9EF00BA0907 /* Build configuration list for PBXNativeTarget "DATASourceDelegateTableSwift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 149AF19D1C0EB9EF00BA0907 /* Debug */, - 149AF19E1C0EB9EF00BA0907 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 14F3A6891BE01B8500789E22 /* Build configuration list for PBXNativeTarget "CollectionSwift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 14F3A6871BE01B8500789E22 /* Debug */, - 14F3A6881BE01B8500789E22 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 14F3A69F1BE01B9200789E22 /* Build configuration list for PBXNativeTarget "CollectionObjC" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 14F3A6A01BE01B9200789E22 /* Debug */, - 14F3A6A11BE01B9200789E22 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 14F3A6B31BE01B9C00789E22 /* Build configuration list for PBXNativeTarget "TableSwift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 14F3A6B41BE01B9C00789E22 /* Debug */, - 14F3A6B51BE01B9C00789E22 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 14F3A6CB1BE01BA900789E22 /* Build configuration list for PBXNativeTarget "TableObjC" */ = { + 14F8486E1CC667990052E4B0 /* Build configuration list for PBXNativeTarget "DATASource-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 14F3A6CC1BE01BA900789E22 /* Debug */, - 14F3A6CD1BE01BA900789E22 /* Release */, + 14F8486C1CC667990052E4B0 /* Debug */, + 14F8486D1CC667990052E4B0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 14F5359E1C3A7E9C00671EDF /* Build configuration list for PBXNativeTarget "InfiniteTableSwift" */ = { + 14F848821CC668820052E4B0 /* Build configuration list for PBXNativeTarget "DATASource-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 14F5359C1C3A7E9C00671EDF /* Debug */, - 14F5359D1C3A7E9C00671EDF /* Release */, + 14F848831CC668820052E4B0 /* Debug */, + 14F848841CC668820052E4B0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 14F8486E1CC667990052E4B0 /* Build configuration list for PBXNativeTarget "DATASource-iOS" */ = { + 44B91CF51DB7728D009DB4B7 /* Build configuration list for PBXNativeTarget "SwiftDemo" */ = { isa = XCConfigurationList; buildConfigurations = ( - 14F8486C1CC667990052E4B0 /* Debug */, - 14F8486D1CC667990052E4B0 /* Release */, + 44B91CF61DB7728D009DB4B7 /* Debug */, + 44B91CF71DB7728D009DB4B7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 14F848821CC668820052E4B0 /* Build configuration list for PBXNativeTarget "DATASource-tvOS" */ = { + 44B91D131DB7729D009DB4B7 /* Build configuration list for PBXNativeTarget "ObjectiveCDemo" */ = { isa = XCConfigurationList; buildConfigurations = ( - 14F848831CC668820052E4B0 /* Debug */, - 14F848841CC668820052E4B0 /* Release */, + 44B91D141DB7729D009DB4B7 /* Debug */, + 44B91D151DB7729D009DB4B7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Demo.xcodeproj/xcshareddata/xcschemes/CollectionObjC.xcscheme b/Demo.xcodeproj/xcshareddata/xcschemes/CollectionObjC.xcscheme deleted file mode 100644 index aff4b23..0000000 --- a/Demo.xcodeproj/xcshareddata/xcschemes/CollectionObjC.xcscheme +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Demo.xcodeproj/xcshareddata/xcschemes/CollectionSwift.xcscheme b/Demo.xcodeproj/xcshareddata/xcschemes/CollectionSwift.xcscheme deleted file mode 100644 index 3dfe87c..0000000 --- a/Demo.xcodeproj/xcshareddata/xcschemes/CollectionSwift.xcscheme +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Demo.xcodeproj/xcshareddata/xcschemes/DATASourceDelegateTableSwift.xcscheme b/Demo.xcodeproj/xcshareddata/xcschemes/DATASourceDelegateTableSwift.xcscheme deleted file mode 100644 index bf0d93a..0000000 --- a/Demo.xcodeproj/xcshareddata/xcschemes/DATASourceDelegateTableSwift.xcscheme +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Demo.xcodeproj/xcshareddata/xcschemes/InfiniteCollectionSwift.xcscheme b/Demo.xcodeproj/xcshareddata/xcschemes/InfiniteCollectionSwift.xcscheme deleted file mode 100644 index 61868a7..0000000 --- a/Demo.xcodeproj/xcshareddata/xcschemes/InfiniteCollectionSwift.xcscheme +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Demo.xcodeproj/xcshareddata/xcschemes/InfiniteTableSwift.xcscheme b/Demo.xcodeproj/xcshareddata/xcschemes/InfiniteTableSwift.xcscheme deleted file mode 100644 index 7d5a66d..0000000 --- a/Demo.xcodeproj/xcshareddata/xcschemes/InfiniteTableSwift.xcscheme +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Demo.xcodeproj/xcshareddata/xcschemes/TableSwift.xcscheme b/Demo.xcodeproj/xcshareddata/xcschemes/ObjectiveCDemo.xcscheme similarity index 82% rename from Demo.xcodeproj/xcshareddata/xcschemes/TableSwift.xcscheme rename to Demo.xcodeproj/xcshareddata/xcschemes/ObjectiveCDemo.xcscheme index 6ea5da0..e9861df 100644 --- a/Demo.xcodeproj/xcshareddata/xcschemes/TableSwift.xcscheme +++ b/Demo.xcodeproj/xcshareddata/xcschemes/ObjectiveCDemo.xcscheme @@ -14,9 +14,9 @@ buildForAnalyzing = "YES"> @@ -32,9 +32,9 @@ @@ -55,9 +55,9 @@ runnableDebuggingMode = "0"> @@ -81,9 +81,9 @@ runnableDebuggingMode = "0"> diff --git a/Demo.xcodeproj/xcshareddata/xcschemes/TableObjC.xcscheme b/Demo.xcodeproj/xcshareddata/xcschemes/SwiftDemo.xcscheme similarity index 83% rename from Demo.xcodeproj/xcshareddata/xcschemes/TableObjC.xcscheme rename to Demo.xcodeproj/xcshareddata/xcschemes/SwiftDemo.xcscheme index b6142ed..2d4ff44 100644 --- a/Demo.xcodeproj/xcshareddata/xcschemes/TableObjC.xcscheme +++ b/Demo.xcodeproj/xcshareddata/xcschemes/SwiftDemo.xcscheme @@ -14,9 +14,9 @@ buildForAnalyzing = "YES"> @@ -32,9 +32,9 @@ @@ -55,9 +55,9 @@ runnableDebuggingMode = "0"> @@ -81,9 +81,9 @@ runnableDebuggingMode = "0"> diff --git a/InfiniteCollectionSwift/AppDelegate.swift b/InfiniteCollectionSwift/AppDelegate.swift deleted file mode 100644 index b37cf37..0000000 --- a/InfiniteCollectionSwift/AppDelegate.swift +++ /dev/null @@ -1,35 +0,0 @@ -import UIKit -import CoreData -import DATAStack - -@UIApplicationMain -class AppDelegate: UIResponder { - var window: UIWindow? - - var dataStack: DATAStack = { - let dataStack = DATAStack(modelName: "DataModel") - - return dataStack - }() -} - -extension AppDelegate: UIApplicationDelegate { - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { - self.window = UIWindow(frame: UIScreen.main.bounds) - guard let window = self.window else { fatalError("Window not found") } - - let bounds = UIScreen.main.bounds - - let layout = UICollectionViewFlowLayout() - layout.itemSize = CGSize(width: 120, height: 120) - layout.sectionInset = UIEdgeInsets(top: 15, left: 0, bottom: 15, right: 0) - layout.headerReferenceSize = CGSize(width: bounds.size.width, height: 60) - - let viewController = CollectionController(layout: layout, dataStack: self.dataStack) - window.rootViewController = UINavigationController(rootViewController: viewController) - window.makeKeyAndVisible() - - return true - } -} diff --git a/InfiniteCollectionSwift/Base.lproj/LaunchScreen.storyboard b/InfiniteCollectionSwift/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 2e721e1..0000000 --- a/InfiniteCollectionSwift/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/InfiniteCollectionSwift/CollectionController.swift b/InfiniteCollectionSwift/CollectionController.swift deleted file mode 100644 index 68d2fd7..0000000 --- a/InfiniteCollectionSwift/CollectionController.swift +++ /dev/null @@ -1,121 +0,0 @@ -import UIKit - -import DATAStack -import CoreData - -class CollectionController: UICollectionViewController { - unowned var dataStack: DATAStack - - lazy var dataSource: DATASource = { - guard let collectionView = self.collectionView else { fatalError("CollectionView is nil") } - - let request: NSFetchRequest = NSFetchRequest(entityName: "User") - request.sortDescriptors = [ - NSSortDescriptor(key: "name", ascending: true), - NSSortDescriptor(key: "firstLetterOfName", ascending: true), - ] - - let dataSource = DATASource(collectionView: collectionView, cellIdentifier: CollectionCell.Identifier, fetchRequest: request, mainContext: self.dataStack.mainContext, sectionName: "firstLetterOfName", configuration: { cell, item, indexPath in - let collectionCell = cell as! CollectionCell - collectionCell.textLabel.text = item.value(forKey: "name") as? String - }) - - return dataSource - }() - - lazy var infiniteLoadingIndicator: InfiniteLoadingIndicator = { - let infiniteLoadingIndicator = InfiniteLoadingIndicator(parentController: self) - - return infiniteLoadingIndicator - }() - - init(layout: UICollectionViewLayout, dataStack: DATAStack) { - self.dataStack = dataStack - - super.init(collectionViewLayout: layout) - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func viewDidLoad() { - super.viewDidLoad() - - guard let collectionView = self.collectionView else { fatalError("CollectionView is nil") } - collectionView.register(CollectionCell.self, forCellWithReuseIdentifier: CollectionCell.Identifier) - collectionView.dataSource = self.dataSource - collectionView.backgroundColor = UIColor.white - collectionView.contentInset = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20) - - if self.dataSource.isEmpty { - self.infiniteLoadingIndicator.present() - self.loadItems(0, completion: { - self.infiniteLoadingIndicator.dismiss() - }) - } - } - - var loading = false - - override func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { - guard let collectionView = self.collectionView else { return } - guard self.loading == false else { return } - - let offset = collectionView.contentOffset.y + UIScreen.main.bounds.height - if offset >= scrollView.contentSize.height { - if let item = self.dataSource.objects.last { - self.loading = true - self.infiniteLoadingIndicator.present() - let initialIndex = Int(item.value(forKey: "name") as! String)! + 1 - self.loadItems(initialIndex, completion: { - self.loading = false - self.infiniteLoadingIndicator.dismiss() - print("loaded items starting at \(item.value(forKey: "name")!)") - }) - } - } - } - - func loadItems(_ initialIndex: Int, completion: ((Void) -> Void)?) { - DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - self.dataStack.performInNewBackgroundContext { backgroundContext in - let entity = NSEntityDescription.entity(forEntityName: "User", in: backgroundContext)! - for i in initialIndex ..< initialIndex + 18 { - let user = NSManagedObject(entity: entity, insertInto: backgroundContext) - user.setValue(String(format: "%04d", i), forKey: "name") - - let tens = Int(floor(Double(i) / 10.0) * 10) - user.setValue(String(tens), forKey: "firstLetterOfName") - } - - try! backgroundContext.save() - DispatchQueue.main.async { - completion?() - } - } - } - } -} - -extension CollectionController { - - override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - guard let numberOfItems = self.collectionView?.numberOfItems(inSection: (indexPath as NSIndexPath).section) else { return } - var items = [NSManagedObject]() - for i in 0 ..< numberOfItems { - let newIndexPath = IndexPath(row: i, section: (indexPath as NSIndexPath).section) - if let item = self.dataSource.objectAtIndexPath(newIndexPath) { - items.append(item) - } - } - - self.dataStack.performInNewBackgroundContext { backgroundContext in - for item in items { - let safeItem = backgroundContext.object(with: item.objectID) - backgroundContext.delete(safeItem) - } - try! backgroundContext.save() - } - } -} diff --git a/InfiniteCollectionSwift/Info.plist b/InfiniteCollectionSwift/Info.plist deleted file mode 100644 index d39a4da..0000000 --- a/InfiniteCollectionSwift/Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/InfiniteTableSwift/AppDelegate.swift b/InfiniteTableSwift/AppDelegate.swift deleted file mode 100644 index c0cb585..0000000 --- a/InfiniteTableSwift/AppDelegate.swift +++ /dev/null @@ -1,28 +0,0 @@ -import UIKit -import CoreData -import DATAStack - -@UIApplicationMain -class AppDelegate: UIResponder { - var window: UIWindow? - - var dataStack: DATAStack = { - let dataStack = DATAStack(modelName: "DataModel") - - return dataStack - }() -} - -extension AppDelegate: UIApplicationDelegate { - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { - self.window = UIWindow(frame: UIScreen.main.bounds) - guard let window = self.window else { fatalError("Window not found") } - - let viewController = ViewController(dataStack: self.dataStack) - window.rootViewController = UINavigationController(rootViewController: viewController) - window.makeKeyAndVisible() - - return true - } -} diff --git a/InfiniteTableSwift/Assets.xcassets/AppIcon.appiconset/Contents.json b/InfiniteTableSwift/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 118c98f..0000000 --- a/InfiniteTableSwift/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/InfiniteTableSwift/Base.lproj/LaunchScreen.storyboard b/InfiniteTableSwift/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 2e721e1..0000000 --- a/InfiniteTableSwift/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/InfiniteTableSwift/Info.plist b/InfiniteTableSwift/Info.plist deleted file mode 100644 index d39a4da..0000000 --- a/InfiniteTableSwift/Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/InfiniteTableSwift/ViewController.swift b/InfiniteTableSwift/ViewController.swift deleted file mode 100644 index 6c46137..0000000 --- a/InfiniteTableSwift/ViewController.swift +++ /dev/null @@ -1,98 +0,0 @@ -import UIKit -import DATAStack -import CoreData - -class ViewController: UITableViewController { - static let Identifier = "Identifier" - weak var dataStack: DATAStack? - - lazy var dataSource: DATASource = { - let request: NSFetchRequest = NSFetchRequest(entityName: "User") - request.sortDescriptors = [ - NSSortDescriptor(key: "name", ascending: true), - NSSortDescriptor(key: "firstLetterOfName", ascending: true), - ] - - let dataSource = DATASource(tableView: self.tableView, cellIdentifier: ViewController.Identifier, fetchRequest: request, mainContext: self.dataStack!.mainContext, sectionName: "firstLetterOfName", configuration: { cell, item, indexPath in - cell.textLabel?.text = item.value(forKey: "name") as? String - }) - - dataSource.delegate = self - - return dataSource - }() - - lazy var infiniteLoadingIndicator: InfiniteLoadingIndicator = { - let infiniteLoadingIndicator = InfiniteLoadingIndicator(parentController: self.parent!) - - return infiniteLoadingIndicator - }() - - convenience init(dataStack: DATAStack) { - self.init(style: .plain) - - self.dataStack = dataStack - } - - override func viewDidLoad() { - super.viewDidLoad() - - self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: ViewController.Identifier) - self.tableView.dataSource = self.dataSource - - if self.dataSource.isEmpty { - self.infiniteLoadingIndicator.present() - self.loadItems(0, completion: { - self.infiniteLoadingIndicator.dismiss() - }) - } - } - - var loading = false - - override func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { - guard let tableView = self.tableView else { return } - guard self.loading == false else { return } - - let offset = tableView.contentOffset.y + UIScreen.main.bounds.height - if offset >= scrollView.contentSize.height { - if let item = self.dataSource.objects.last { - self.loading = true - self.infiniteLoadingIndicator.present() - let initialIndex = Int(item.value(forKey: "name") as! String)! + 1 - self.loadItems(initialIndex, completion: { - self.loading = false - self.infiniteLoadingIndicator.dismiss() - print("loaded items starting at \(item.value(forKey: "name")!)") - }) - } - } - } - - func loadItems(_ initialIndex: Int, completion: ((Void) -> Void)?) { - DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - self.dataStack!.performInNewBackgroundContext { backgroundContext in - let entity = NSEntityDescription.entity(forEntityName: "User", in: backgroundContext)! - for i in initialIndex ..< initialIndex + 18 { - let user = NSManagedObject(entity: entity, insertInto: backgroundContext) - user.setValue(String(format: "%04d", i), forKey: "name") - - let tens = Int(floor(Double(i) / 10.0) * 10) - user.setValue(String(tens), forKey: "firstLetterOfName") - } - - try! backgroundContext.save() - DispatchQueue.main.async { - completion?() - } - } - } - } -} - -extension ViewController: DATASourceDelegate { - - func sectionIndexTitlesForDataSource(_ dataSource: DATASource, tableView: UITableView) -> [String] { - return [String]() - } -} diff --git a/Library/Helper.swift b/Library/Helper.swift new file mode 100644 index 0000000..b537df5 --- /dev/null +++ b/Library/Helper.swift @@ -0,0 +1,39 @@ +import Foundation +import DATAStack + +public class Helper: NSObject { + public class func addNewUser(dataStack: DATAStack) { + dataStack.performInNewBackgroundContext { backgroundContext in + if let entity = NSEntityDescription.entity(forEntityName: "User", in: backgroundContext) { + let user = NSManagedObject(entity: entity, insertInto: backgroundContext) + + let name = self.randomString() + let firstLetter = String(name[name.startIndex]) + user.setValue(name, forKey: "name") + user.setValue(firstLetter.uppercased(), forKey: "firstLetterOfName") + do { + try backgroundContext.save() + } catch let savingError as NSError { + print("Could not save \(savingError)") + } catch { + fatalError() + } + } else { + print("Oh no") + } + } + } + + class func randomString() -> String { + let letters = "ABCDEFGHIJKL" + var string = "" + for _ in 0 ... 5 { + let token = UInt32(letters.characters.count) + let letterIndex = Int(arc4random_uniform(token)) + let firstChar = Array(letters.characters)[letterIndex] + string.append(firstChar) + } + + return string + } +} diff --git a/InfiniteCollectionSwift/Assets.xcassets/AppIcon.appiconset/Contents.json b/ObjectiveCDemo/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 77% rename from InfiniteCollectionSwift/Assets.xcassets/AppIcon.appiconset/Contents.json rename to ObjectiveCDemo/Assets.xcassets/AppIcon.appiconset/Contents.json index 118c98f..b8236c6 100644 --- a/InfiniteCollectionSwift/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/ObjectiveCDemo/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,5 +1,15 @@ { "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, { "idiom" : "iphone", "size" : "29x29", diff --git a/ObjectiveCDemo/Assets.xcassets/Contents.json b/ObjectiveCDemo/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/ObjectiveCDemo/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/CollectionSwift/Base.lproj/LaunchScreen.storyboard b/ObjectiveCDemo/Base.lproj/LaunchScreen.storyboard similarity index 70% rename from CollectionSwift/Base.lproj/LaunchScreen.storyboard rename to ObjectiveCDemo/Base.lproj/LaunchScreen.storyboard index 2e721e1..fdf3f97 100644 --- a/CollectionSwift/Base.lproj/LaunchScreen.storyboard +++ b/ObjectiveCDemo/Base.lproj/LaunchScreen.storyboard @@ -1,7 +1,8 @@ - + - + + @@ -13,10 +14,9 @@ - + - - + diff --git a/CollectionObjC/ViewController.h b/ObjectiveCDemo/CollectionViewController/CollectionViewController.h similarity index 68% rename from CollectionObjC/ViewController.h rename to ObjectiveCDemo/CollectionViewController/CollectionViewController.h index feaafa4..c819b18 100755 --- a/CollectionObjC/ViewController.h +++ b/ObjectiveCDemo/CollectionViewController/CollectionViewController.h @@ -2,7 +2,7 @@ @class DATAStack; -@interface ViewController : UICollectionViewController +@interface CollectionViewController : UICollectionViewController - (instancetype)initWithLayout:(UICollectionViewLayout *)layout andDataStack:(DATAStack *)dataStack; diff --git a/ObjectiveCDemo/CollectionViewController/CollectionViewController.m b/ObjectiveCDemo/CollectionViewController/CollectionViewController.m new file mode 100755 index 0000000..fe6b7d8 --- /dev/null +++ b/ObjectiveCDemo/CollectionViewController/CollectionViewController.m @@ -0,0 +1,65 @@ +#import "CollectionViewController.h" + +@import DATAStack; +@import CoreData; + +#import "FooterExampleView.h" +#import "ObjectiveCDemo-Swift.h" + +@interface CollectionViewController () + +@property (nonatomic, weak) DATAStack *dataStack; +@property (nonatomic) DATASource *dataSource; + +@end + +@implementation CollectionViewController + +- (instancetype)initWithLayout:(UICollectionViewLayout *)layout + andDataStack:(DATAStack *)dataStack { + self = [super initWithCollectionViewLayout:layout]; + if (!self) return nil; + + _dataStack = dataStack; + + return self; +} + +- (DATASource *)dataSource { + if (_dataSource) return _dataSource; + + NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"User"]; + request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]; + + _dataSource = [[DATASource alloc] initWithCollectionView:self.collectionView + cellIdentifier:[CollectionCell Identifier] + fetchRequest:request + mainContext:self.dataStack.mainContext + sectionName:nil + configuration:^(UICollectionViewCell * _Nonnull cell, NSManagedObject * _Nonnull item, NSIndexPath * _Nonnull indexPath) { + CollectionCell *collectionCell = (CollectionCell *)cell; + collectionCell.textLabel.text = [item valueForKey:@"name"]; + }]; + _dataSource.delegate = self; + + return _dataSource; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self.collectionView registerClass:[CollectionCell class] forCellWithReuseIdentifier:[CollectionCell Identifier]]; + UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd + target:self + action:@selector(addAction)]; + self.navigationItem.rightBarButtonItem = item; + self.collectionView.dataSource = self.dataSource; + self.collectionView.backgroundColor = [UIColor whiteColor]; + self.collectionView.contentInset = UIEdgeInsetsMake(20.0, 20.0, 20.0, 20.0); +} + +- (void)addAction { + [Helper addNewUserWithDataStack:self.dataStack]; +} + +@end diff --git a/ObjectiveCDemo/CollectionViewControllerWithFooter/CollectionViewControllerWithFooter.h b/ObjectiveCDemo/CollectionViewControllerWithFooter/CollectionViewControllerWithFooter.h new file mode 100644 index 0000000..27f362a --- /dev/null +++ b/ObjectiveCDemo/CollectionViewControllerWithFooter/CollectionViewControllerWithFooter.h @@ -0,0 +1,10 @@ +@import UIKit; + +@class DATAStack; + +@interface CollectionViewControllerWithFooter : UICollectionViewController + +- (instancetype)initWithLayout:(UICollectionViewLayout *)layout andDataStack:(DATAStack *)dataStack; + +@end + diff --git a/CollectionObjC/ViewController.m b/ObjectiveCDemo/CollectionViewControllerWithFooter/CollectionViewControllerWithFooter.m old mode 100755 new mode 100644 similarity index 71% rename from CollectionObjC/ViewController.m rename to ObjectiveCDemo/CollectionViewControllerWithFooter/CollectionViewControllerWithFooter.m index 0e7e390..5fd726d --- a/CollectionObjC/ViewController.m +++ b/ObjectiveCDemo/CollectionViewControllerWithFooter/CollectionViewControllerWithFooter.m @@ -1,19 +1,19 @@ -#import "ViewController.h" +#import "CollectionViewControllerWithFooter.h" @import DATAStack; @import CoreData; #import "FooterExampleView.h" -#import "CollectionObjC-Swift.h" +#import "ObjectiveCDemo-Swift.h" -@interface ViewController () +@interface CollectionViewControllerWithFooter () @property (nonatomic, weak) DATAStack *dataStack; @property (nonatomic) DATASource *dataSource; @end -@implementation ViewController +@implementation CollectionViewControllerWithFooter - (instancetype)initWithLayout:(UICollectionViewLayout *)layout andDataStack:(DATAStack *)dataStack { @@ -29,7 +29,8 @@ - (DATASource *)dataSource { if (_dataSource) return _dataSource; NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"User"]; - request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"firstLetterOfName" ascending:YES], [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]; + request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"firstLetterOfName" ascending:YES], + [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]; _dataSource = [[DATASource alloc] initWithCollectionView:self.collectionView cellIdentifier:[CollectionCell Identifier] @@ -61,30 +62,7 @@ - (void)viewDidLoad { } - (void)addAction { - [self.dataStack performInNewBackgroundContext:^(NSManagedObjectContext *backgroundContext) { - NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" - inManagedObjectContext:backgroundContext]; - NSManagedObject *user = [[NSManagedObject alloc] initWithEntity:entity - insertIntoManagedObjectContext:backgroundContext]; - NSString *name = [self randomString]; - NSString *firstLetter = [[name substringToIndex:1] uppercaseString]; - [user setValue:name forKey:@"name"]; - [user setValue:firstLetter forKey:@"firstLetterOfName"]; - [backgroundContext save:nil]; - }]; -} - -- (NSString *)randomString { - NSString *letters = @"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - - NSMutableString *randomString = [NSMutableString stringWithCapacity:10]; - - for (int i = 0; i < 10; i++) { - u_int32_t rnd = (u_int32_t)[letters length]; - [randomString appendFormat: @"%C", [letters characterAtIndex:arc4random_uniform(rnd)]]; - } - - return randomString; + [Helper addNewUserWithDataStack:self.dataStack]; } #pragma mark - DATASourceDelegate diff --git a/CollectionObjC/FooterExampleView.h b/ObjectiveCDemo/CollectionViewControllerWithFooter/FooterExampleView.h similarity index 100% rename from CollectionObjC/FooterExampleView.h rename to ObjectiveCDemo/CollectionViewControllerWithFooter/FooterExampleView.h diff --git a/CollectionObjC/FooterExampleView.m b/ObjectiveCDemo/CollectionViewControllerWithFooter/FooterExampleView.m similarity index 100% rename from CollectionObjC/FooterExampleView.m rename to ObjectiveCDemo/CollectionViewControllerWithFooter/FooterExampleView.m diff --git a/ObjectiveCDemo/CollectionViewControllerWithSections/CollectionViewControllerWithSections.h b/ObjectiveCDemo/CollectionViewControllerWithSections/CollectionViewControllerWithSections.h new file mode 100644 index 0000000..f337484 --- /dev/null +++ b/ObjectiveCDemo/CollectionViewControllerWithSections/CollectionViewControllerWithSections.h @@ -0,0 +1,10 @@ +@import UIKit; + +@class DATAStack; + +@interface CollectionViewControllerWithSections : UICollectionViewController + +- (instancetype)initWithLayout:(UICollectionViewLayout *)layout andDataStack:(DATAStack *)dataStack; + +@end + diff --git a/ObjectiveCDemo/CollectionViewControllerWithSections/CollectionViewControllerWithSections.m b/ObjectiveCDemo/CollectionViewControllerWithSections/CollectionViewControllerWithSections.m new file mode 100644 index 0000000..3c12a54 --- /dev/null +++ b/ObjectiveCDemo/CollectionViewControllerWithSections/CollectionViewControllerWithSections.m @@ -0,0 +1,66 @@ +#import "CollectionViewControllerWithSections.h" + +@import DATAStack; +@import CoreData; + +#import "FooterExampleView.h" +#import "ObjectiveCDemo-Swift.h" + +@interface CollectionViewControllerWithSections () + +@property (nonatomic, weak) DATAStack *dataStack; +@property (nonatomic) DATASource *dataSource; + +@end + +@implementation CollectionViewControllerWithSections + +- (instancetype)initWithLayout:(UICollectionViewLayout *)layout + andDataStack:(DATAStack *)dataStack { + self = [super initWithCollectionViewLayout:layout]; + if (!self) return nil; + + _dataStack = dataStack; + + return self; +} + +- (DATASource *)dataSource { + if (_dataSource) return _dataSource; + + NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"User"]; + request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"firstLetterOfName" ascending:YES], + [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]; + + _dataSource = [[DATASource alloc] initWithCollectionView:self.collectionView + cellIdentifier:[CollectionCell Identifier] + fetchRequest:request + mainContext:self.dataStack.mainContext + sectionName:@"firstLetterOfName" + configuration:^(UICollectionViewCell * _Nonnull cell, NSManagedObject * _Nonnull item, NSIndexPath * _Nonnull indexPath) { + CollectionCell *collectionCell = (CollectionCell *)cell; + collectionCell.textLabel.text = [item valueForKey:@"name"]; + }]; + _dataSource.delegate = self; + + return _dataSource; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self.collectionView registerClass:[CollectionCell class] forCellWithReuseIdentifier:[CollectionCell Identifier]]; + UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd + target:self + action:@selector(addAction)]; + self.navigationItem.rightBarButtonItem = item; + self.collectionView.dataSource = self.dataSource; + self.collectionView.backgroundColor = [UIColor whiteColor]; + self.collectionView.contentInset = UIEdgeInsetsMake(20.0, 20.0, 20.0, 20.0); +} + +- (void)addAction { + [Helper addNewUserWithDataStack:self.dataStack]; +} + +@end diff --git a/CollectionSwift/Info.plist b/ObjectiveCDemo/Info.plist similarity index 84% rename from CollectionSwift/Info.plist rename to ObjectiveCDemo/Info.plist index d39a4da..392d758 100644 --- a/CollectionSwift/Info.plist +++ b/ObjectiveCDemo/Info.plist @@ -16,8 +16,6 @@ APPL CFBundleShortVersionString 1.0 - CFBundleSignature - ???? CFBundleVersion 1 LSRequiresIPhoneOS @@ -28,6 +26,16 @@ armv7 + UIStatusBarTintParameters + + UINavigationBar + + Style + UIBarStyleDefault + Translucent + + + UISupportedInterfaceOrientations UIInterfaceOrientationPortrait diff --git a/ObjectiveCDemo/Options/OptionsController.h b/ObjectiveCDemo/Options/OptionsController.h new file mode 100644 index 0000000..fbf7739 --- /dev/null +++ b/ObjectiveCDemo/Options/OptionsController.h @@ -0,0 +1,8 @@ +@import UIKit; +@import DATAStack; + +@interface OptionsController : UITableViewController + +- (instancetype)initWithDataStack:(DATAStack *)dataStack; + +@end diff --git a/ObjectiveCDemo/Options/OptionsController.m b/ObjectiveCDemo/Options/OptionsController.m new file mode 100644 index 0000000..47dadd0 --- /dev/null +++ b/ObjectiveCDemo/Options/OptionsController.m @@ -0,0 +1,104 @@ +#import "OptionsController.h" + +#import "CollectionViewController.h" +#import "CollectionViewControllerWithSections.h" +#import "CollectionViewControllerWithFooter.h" + +#import "TableViewController.h" +#import "TableViewControllerWithSections.h" + +@interface OptionsController () + +@property (nonnull, strong) DATAStack *dataStack; + +@end + +@implementation OptionsController + +- (instancetype)initWithDataStack:(DATAStack *)dataStack { + self = [super initWithStyle:UITableViewStylePlain]; + if (!self) return nil; + + _dataStack = dataStack; + + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"]; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 5; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + + switch (indexPath.row) { + case 0: + cell.textLabel.text = @"CollectionViewController"; + break; + case 1: + cell.textLabel.text = @"CollectionViewControllerWithSections"; + break; + case 2: + cell.textLabel.text = @"CollectionViewControllerWithFooter"; + break; + case 3: + cell.textLabel.text = @"TableViewController"; + break; + case 4: + cell.textLabel.text = @"TableViewControllerWithSections"; + break; + default: + break; + } + + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.row) { + case 0: { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.itemSize = CGSizeMake(120.0, 120.0); + CollectionViewController *controller = [[CollectionViewController alloc] initWithLayout:layout andDataStack:self.dataStack]; + [self.navigationController pushViewController:controller animated:YES]; + } break; + case 1: { + CGRect bounds = [UIScreen mainScreen].bounds; + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.itemSize = CGSizeMake(120.0, 120.0); + layout.sectionInset = UIEdgeInsetsMake(15.0, 0.0, 15.0, 0.0); + layout.headerReferenceSize = CGSizeMake(bounds.size.width, 60.0); + CollectionViewControllerWithSections *controller = [[CollectionViewControllerWithSections alloc] initWithLayout:layout andDataStack:self.dataStack]; + [self.navigationController pushViewController:controller animated:YES]; + } break; + case 2: { + CGRect bounds = [UIScreen mainScreen].bounds; + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.itemSize = CGSizeMake(120.0, 120.0); + layout.sectionInset = UIEdgeInsetsMake(15.0, 0.0, 15.0, 0.0); + layout.headerReferenceSize = CGSizeMake(bounds.size.width, 60.0); + layout.footerReferenceSize = CGSizeMake(bounds.size.width, 60.0); + CollectionViewControllerWithFooter *controller = [[CollectionViewControllerWithFooter alloc] initWithLayout:layout andDataStack:self.dataStack]; + [self.navigationController pushViewController:controller animated:YES]; + } break; + case 3: { + TableViewController *controller = [[TableViewController alloc] initWithDataStack:self.dataStack]; + [self.navigationController pushViewController:controller animated:YES]; + } break; + case 4: { + TableViewControllerWithSections *controller = [[TableViewControllerWithSections alloc] initWithDataStack:self.dataStack]; + [self.navigationController pushViewController:controller animated:YES]; + } break; + default: + break; + } +} + +@end diff --git a/CollectionObjC/AppDelegate.h b/ObjectiveCDemo/Root/AppDelegate.h old mode 100755 new mode 100644 similarity index 99% rename from CollectionObjC/AppDelegate.h rename to ObjectiveCDemo/Root/AppDelegate.h index 72000f0..78d3f7e --- a/CollectionObjC/AppDelegate.h +++ b/ObjectiveCDemo/Root/AppDelegate.h @@ -5,4 +5,3 @@ @property (nonatomic) UIWindow *window; @end - diff --git a/CollectionObjC/AppDelegate.m b/ObjectiveCDemo/Root/AppDelegate.m old mode 100755 new mode 100644 similarity index 57% rename from CollectionObjC/AppDelegate.m rename to ObjectiveCDemo/Root/AppDelegate.m index b330d35..a9a5aa9 --- a/CollectionObjC/AppDelegate.m +++ b/ObjectiveCDemo/Root/AppDelegate.m @@ -1,7 +1,7 @@ #import "AppDelegate.h" @import DATAStack; -#import "ViewController.h" +#import "OptionsController.h" @interface AppDelegate () @@ -25,14 +25,10 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( CGRect bounds = [UIScreen mainScreen].bounds; self.window = [[UIWindow alloc] initWithFrame:bounds]; - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.itemSize = CGSizeMake(120.0, 120.0); - layout.sectionInset = UIEdgeInsetsMake(15.0, 0.0, 15.0, 0.0); - layout.headerReferenceSize = CGSizeMake(bounds.size.width, 60.0); - layout.footerReferenceSize = CGSizeMake(bounds.size.width, 60.0); - ViewController *mainController = [[ViewController alloc] initWithLayout:layout andDataStack:self.dataStack]; - UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:mainController]; + OptionsController *controller = [[OptionsController alloc] initWithDataStack:self.dataStack]; + controller.title = @"Options"; + UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:controller]; self.window.rootViewController = navigationController; [self.window makeKeyAndVisible]; diff --git a/TableObjC/ViewController.h b/ObjectiveCDemo/TableViewController/TableViewController.h similarity index 64% rename from TableObjC/ViewController.h rename to ObjectiveCDemo/TableViewController/TableViewController.h index 05a48c7..e8da938 100755 --- a/TableObjC/ViewController.h +++ b/ObjectiveCDemo/TableViewController/TableViewController.h @@ -2,7 +2,7 @@ @class DATAStack; -@interface ViewController : UITableViewController +@interface TableViewController : UITableViewController - (instancetype)initWithDataStack:(DATAStack *)dataStack; diff --git a/ObjectiveCDemo/TableViewController/TableViewController.m b/ObjectiveCDemo/TableViewController/TableViewController.m new file mode 100755 index 0000000..2143e27 --- /dev/null +++ b/ObjectiveCDemo/TableViewController/TableViewController.m @@ -0,0 +1,64 @@ +#import "TableViewController.h" + +@import DATAStack; +@import CoreData; + +#import "ObjectiveCDemo-Swift.h" + + +static NSString *CellIdentifier = @"CellIdentifier"; + +@interface TableViewController () + +@property (nonatomic, weak) DATAStack *dataStack; +@property (nonatomic) DATASource *dataSource; + +@end + +@implementation TableViewController + +- (instancetype)initWithDataStack:(DATAStack *)dataStack { + self = [super initWithStyle:UITableViewStylePlain]; + if (self) { + _dataStack = dataStack; + } + + return self; +} + +- (DATASource *)dataSource { + if (!_dataSource) { + NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"User"]; + request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]; + + _dataSource = [[DATASource alloc] initWithTableView:self.tableView + cellIdentifier:CellIdentifier + fetchRequest:request + mainContext:self.dataStack.mainContext + sectionName:nil + configuration:^(UITableViewCell * _Nonnull cell, NSManagedObject * _Nonnull item, NSIndexPath * _Nonnull indexPath) { + cell.textLabel.text = [item valueForKey:@"name"]; + }]; + } + + return _dataSource; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellIdentifier]; + + self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addAction)]; + + self.tableView.dataSource = self.dataSource; + + NSManagedObject *object = [self.dataSource objectAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; + NSLog(@"object: %@", object); +} + +- (void)addAction { + [Helper addNewUserWithDataStack:self.dataStack]; +} + +@end diff --git a/ObjectiveCDemo/TableViewControllerWithSections/TableViewControllerWithSections.h b/ObjectiveCDemo/TableViewControllerWithSections/TableViewControllerWithSections.h new file mode 100644 index 0000000..36af505 --- /dev/null +++ b/ObjectiveCDemo/TableViewControllerWithSections/TableViewControllerWithSections.h @@ -0,0 +1,10 @@ +@import UIKit; + +@class DATAStack; + +@interface TableViewControllerWithSections : UITableViewController + +- (instancetype)initWithDataStack:(DATAStack *)dataStack; + +@end + diff --git a/TableObjC/ViewController.m b/ObjectiveCDemo/TableViewControllerWithSections/TableViewControllerWithSections.m old mode 100755 new mode 100644 similarity index 58% rename from TableObjC/ViewController.m rename to ObjectiveCDemo/TableViewControllerWithSections/TableViewControllerWithSections.m index 49235e9..f68e9a9 --- a/TableObjC/ViewController.m +++ b/ObjectiveCDemo/TableViewControllerWithSections/TableViewControllerWithSections.m @@ -1,19 +1,21 @@ -#import "ViewController.h" +#import "TableViewControllerWithSections.h" @import DATAStack; @import CoreData; -#import "TableObjC-Swift.h" + +#import "ObjectiveCDemo-Swift.h" + static NSString *CellIdentifier = @"CellIdentifier"; -@interface ViewController () +@interface TableViewControllerWithSections () @property (nonatomic, weak) DATAStack *dataStack; @property (nonatomic) DATASource *dataSource; @end -@implementation ViewController +@implementation TableViewControllerWithSections - (instancetype)initWithDataStack:(DATAStack *)dataStack { self = [super initWithStyle:UITableViewStylePlain]; @@ -27,8 +29,8 @@ - (instancetype)initWithDataStack:(DATAStack *)dataStack { - (DATASource *)dataSource { if (!_dataSource) { NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"User"]; - request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name" - ascending:YES]]; + request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"firstLetterOfName" ascending:YES], + [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]; _dataSource = [[DATASource alloc] initWithTableView:self.tableView cellIdentifier:CellIdentifier @@ -57,30 +59,7 @@ - (void)viewDidLoad { } - (void)addAction { - [self.dataStack performInNewBackgroundContext:^(NSManagedObjectContext *backgroundContext) { - NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" - inManagedObjectContext:backgroundContext]; - NSManagedObject *user = [[NSManagedObject alloc] initWithEntity:entity - insertIntoManagedObjectContext:backgroundContext]; - NSString *name = [self randomString]; - NSString *firstLetter = [[name substringToIndex:1] uppercaseString]; - [user setValue:name forKey:@"name"]; - [user setValue:firstLetter forKey:@"firstLetterOfName"]; - [backgroundContext save:nil]; - }]; -} - -- (NSString *)randomString { - NSString *letters = @"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - - NSMutableString *randomString = [NSMutableString stringWithCapacity:10]; - - for (int i = 0; i < 10; i++) { - u_int32_t rnd = (u_int32_t)[letters length]; - [randomString appendFormat: @"%C", [letters characterAtIndex:arc4random_uniform(rnd)]]; - } - - return randomString; + [Helper addNewUserWithDataStack:self.dataStack]; } @end diff --git a/TableObjC/main.m b/ObjectiveCDemo/main.m similarity index 88% rename from TableObjC/main.m rename to ObjectiveCDemo/main.m index 81e84cb..1db1e5c 100644 --- a/TableObjC/main.m +++ b/ObjectiveCDemo/main.m @@ -1,4 +1,4 @@ -#import +@import UIKit; #import "AppDelegate.h" int main(int argc, char * argv[]) { diff --git a/CollectionObjC/Assets.xcassets/AppIcon.appiconset/Contents.json b/SwiftDemo/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from CollectionObjC/Assets.xcassets/AppIcon.appiconset/Contents.json rename to SwiftDemo/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/DATASourceDelegateTableSwift/Base.lproj/LaunchScreen.storyboard b/SwiftDemo/Base.lproj/LaunchScreen.storyboard similarity index 70% rename from DATASourceDelegateTableSwift/Base.lproj/LaunchScreen.storyboard rename to SwiftDemo/Base.lproj/LaunchScreen.storyboard index 2e721e1..fdf3f97 100644 --- a/DATASourceDelegateTableSwift/Base.lproj/LaunchScreen.storyboard +++ b/SwiftDemo/Base.lproj/LaunchScreen.storyboard @@ -1,7 +1,8 @@ - + - + + @@ -13,10 +14,9 @@ - + - - + diff --git a/SwiftDemo/CollectionViewController/CollectionViewController.swift b/SwiftDemo/CollectionViewController/CollectionViewController.swift new file mode 100644 index 0000000..203cfa8 --- /dev/null +++ b/SwiftDemo/CollectionViewController/CollectionViewController.swift @@ -0,0 +1,51 @@ +import UIKit + +import DATAStack +import CoreData + +class CollectionViewController: UICollectionViewController { + let dataStack: DATAStack + + lazy var dataSource: DATASource = { + guard let collectionView = self.collectionView else { fatalError("CollectionView is nil") } + + let request: NSFetchRequest = NSFetchRequest(entityName: "User") + request.sortDescriptors = [ + NSSortDescriptor(key: "name", ascending: true), + ] + + let dataSource = DATASource(collectionView: collectionView, cellIdentifier: CollectionCell.Identifier, fetchRequest: request, mainContext: self.dataStack.mainContext, configuration: { cell, item, indexPath in + let collectionCell = cell as! CollectionCell + collectionCell.textLabel.text = item.value(forKey: "name") as? String + }) + + return dataSource + }() + + init(layout: UICollectionViewLayout, dataStack: DATAStack) { + self.dataStack = dataStack + + super.init(collectionViewLayout: layout) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() { + super.viewDidLoad() + + guard let collectionView = self.collectionView else { fatalError("CollectionView is nil") } + + collectionView.register(CollectionCell.self, forCellWithReuseIdentifier: CollectionCell.Identifier) + collectionView.dataSource = self.dataSource + collectionView.backgroundColor = UIColor.white + collectionView.contentInset = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20) + + self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(CollectionViewController.saveAction)) + } + + func saveAction() { + Helper.addNewUser(dataStack: self.dataStack) + } +} diff --git a/SwiftDemo/CollectionViewControllerWithSections/CollectionViewControllerWithSections.swift b/SwiftDemo/CollectionViewControllerWithSections/CollectionViewControllerWithSections.swift new file mode 100644 index 0000000..0eb89af --- /dev/null +++ b/SwiftDemo/CollectionViewControllerWithSections/CollectionViewControllerWithSections.swift @@ -0,0 +1,52 @@ +import UIKit + +import DATAStack +import CoreData + +class CollectionViewControllerWithSections: UICollectionViewController { + unowned let dataStack: DATAStack + + lazy var dataSource: DATASource = { + guard let collectionView = self.collectionView else { fatalError("CollectionView is nil") } + + let request: NSFetchRequest = NSFetchRequest(entityName: "User") + request.sortDescriptors = [ + NSSortDescriptor(key: "name", ascending: true), + NSSortDescriptor(key: "firstLetterOfName", ascending: true), + ] + + let dataSource = DATASource(collectionView: collectionView, cellIdentifier: CollectionCell.Identifier, fetchRequest: request, mainContext: self.dataStack.mainContext, sectionName: "firstLetterOfName", configuration: { cell, item, indexPath in + let collectionCell = cell as! CollectionCell + collectionCell.textLabel.text = item.value(forKey: "name") as? String + }) + + return dataSource + }() + + init(layout: UICollectionViewLayout, dataStack: DATAStack) { + self.dataStack = dataStack + + super.init(collectionViewLayout: layout) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() { + super.viewDidLoad() + + guard let collectionView = self.collectionView else { fatalError("CollectionView is nil") } + + collectionView.register(CollectionCell.self, forCellWithReuseIdentifier: CollectionCell.Identifier) + collectionView.dataSource = self.dataSource + collectionView.backgroundColor = UIColor.white + collectionView.contentInset = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20) + + self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(CollectionViewController.saveAction)) + } + + func saveAction() { + Helper.addNewUser(dataStack: self.dataStack) + } +} diff --git a/DATASourceDelegateTableSwift/Info.plist b/SwiftDemo/Info.plist similarity index 84% rename from DATASourceDelegateTableSwift/Info.plist rename to SwiftDemo/Info.plist index d39a4da..392d758 100644 --- a/DATASourceDelegateTableSwift/Info.plist +++ b/SwiftDemo/Info.plist @@ -16,8 +16,6 @@ APPL CFBundleShortVersionString 1.0 - CFBundleSignature - ???? CFBundleVersion 1 LSRequiresIPhoneOS @@ -28,6 +26,16 @@ armv7 + UIStatusBarTintParameters + + UINavigationBar + + Style + UIBarStyleDefault + Translucent + + + UISupportedInterfaceOrientations UIInterfaceOrientationPortrait diff --git a/SwiftDemo/Options/OptionsController.swift b/SwiftDemo/Options/OptionsController.swift new file mode 100644 index 0000000..1e62988 --- /dev/null +++ b/SwiftDemo/Options/OptionsController.swift @@ -0,0 +1,77 @@ +import UIKit + +import DATAStack + +class OptionsController: UITableViewController { + let dataStack: DATAStack + + init(dataStack: DATAStack) { + self.dataStack = dataStack + + super.init(style: .plain) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() { + super.viewDidLoad() + + self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell") + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return 5 + } + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) + cell.accessoryType = .disclosureIndicator + + switch indexPath.row { + case 0: + cell.textLabel?.text = "CollectionViewController" + case 1: + cell.textLabel?.text = "CollectionViewControllerWithSections" + case 2: + cell.textLabel?.text = "TableViewController" + case 3: + cell.textLabel?.text = "TableViewControllerWithSections" + case 4: + cell.textLabel?.text = "TableViewControllerWithSectionsWithoutIndex" + default: break + } + + return cell + } + + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + switch indexPath.row { + case 0: + let layout = UICollectionViewFlowLayout() + layout.itemSize = CGSize(width: 120, height: 120) + layout.sectionInset = UIEdgeInsets(top: 15, left: 0, bottom: 15, right: 0) + let controller = CollectionViewController(layout: layout, dataStack: self.dataStack) + self.navigationController?.pushViewController(controller, animated: true) + case 1: + let bounds = UIScreen.main.bounds + let layout = UICollectionViewFlowLayout() + layout.itemSize = CGSize(width: 120, height: 120) + layout.sectionInset = UIEdgeInsets(top: 15, left: 0, bottom: 15, right: 0) + layout.headerReferenceSize = CGSize(width: bounds.size.width, height: 60) + let controller = CollectionViewControllerWithSections(layout: layout, dataStack: self.dataStack) + self.navigationController?.pushViewController(controller, animated: true) + case 2: + let controller = TableViewController(dataStack: self.dataStack) + self.navigationController?.pushViewController(controller, animated: true) + case 3: + let controller = TableViewControllerWithSections(dataStack: self.dataStack) + self.navigationController?.pushViewController(controller, animated: true) + case 4: + let controller = TableViewControllerWithSectionsWithoutIndex(dataStack: self.dataStack) + self.navigationController?.pushViewController(controller, animated: true) + default: break + } + } +} diff --git a/TableSwift/AppDelegate.swift b/SwiftDemo/Root/AppDelegate.swift old mode 100755 new mode 100644 similarity index 87% rename from TableSwift/AppDelegate.swift rename to SwiftDemo/Root/AppDelegate.swift index c0cb585..0488624 --- a/TableSwift/AppDelegate.swift +++ b/SwiftDemo/Root/AppDelegate.swift @@ -19,8 +19,8 @@ extension AppDelegate: UIApplicationDelegate { self.window = UIWindow(frame: UIScreen.main.bounds) guard let window = self.window else { fatalError("Window not found") } - let viewController = ViewController(dataStack: self.dataStack) - window.rootViewController = UINavigationController(rootViewController: viewController) + let controller = OptionsController(dataStack: self.dataStack) + window.rootViewController = UINavigationController(rootViewController: controller) window.makeKeyAndVisible() return true diff --git a/SwiftDemo/TableViewController/TableViewController.swift b/SwiftDemo/TableViewController/TableViewController.swift new file mode 100644 index 0000000..70a8d02 --- /dev/null +++ b/SwiftDemo/TableViewController/TableViewController.swift @@ -0,0 +1,51 @@ +import UIKit +import DATAStack +import CoreData + +class TableViewController: UITableViewController { + unowned let dataStack: DATAStack + + lazy var dataSource: DATASource = { + let request: NSFetchRequest = NSFetchRequest(entityName: "User") + request.sortDescriptors = [ + NSSortDescriptor(key: "name", ascending: true), + ] + + let dataSource = DATASource(tableView: self.tableView, cellIdentifier: "Cell", fetchRequest: request, mainContext: self.dataStack.mainContext) + dataSource.delegate = self + + return dataSource + }() + + init(dataStack: DATAStack) { + self.dataStack = dataStack + + super.init(style: .plain) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() { + super.viewDidLoad() + + self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell") + self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(TableViewController.saveAction)) + self.tableView.dataSource = self.dataSource + + let object = self.dataSource.objectAtIndexPath(IndexPath(row: 0, section: 0)) + print(object) + } + + func saveAction() { + Helper.addNewUser(dataStack: self.dataStack) + } +} + +extension TableViewController: DATASourceDelegate { + + func dataSource(_ dataSource: DATASource, configureTableViewCell cell: UITableViewCell, withItem item: NSManagedObject, atIndexPath indexPath: IndexPath) { + cell.textLabel?.text = item.value(forKey: "name") as? String ?? "" + } +} diff --git a/SwiftDemo/TableViewControllerWithSections/TableViewControllerWithSections.swift b/SwiftDemo/TableViewControllerWithSections/TableViewControllerWithSections.swift new file mode 100644 index 0000000..f6dadbf --- /dev/null +++ b/SwiftDemo/TableViewControllerWithSections/TableViewControllerWithSections.swift @@ -0,0 +1,53 @@ +import UIKit +import DATAStack +import CoreData + +class TableViewControllerWithSections: UITableViewController { + unowned let dataStack: DATAStack + + lazy var dataSource: DATASource = { + let request: NSFetchRequest = NSFetchRequest(entityName: "User") + request.sortDescriptors = [ + NSSortDescriptor(key: "firstLetterOfName", ascending: true), + NSSortDescriptor(key: "count", ascending: true), + NSSortDescriptor(key: "name", ascending: true), + ] + + let dataSource = DATASource(tableView: self.tableView, cellIdentifier: "Cell", fetchRequest: request, mainContext: self.dataStack.mainContext, sectionName: "firstLetterOfName") + dataSource.delegate = self + + return dataSource + }() + + init(dataStack: DATAStack) { + self.dataStack = dataStack + + super.init(style: .plain) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() { + super.viewDidLoad() + + self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell") + self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(TableViewController.saveAction)) + self.tableView.dataSource = self.dataSource + + let object = self.dataSource.objectAtIndexPath(IndexPath(row: 0, section: 0)) + print(object) + } + + func saveAction() { + Helper.addNewUser(dataStack: self.dataStack) + } +} + +extension TableViewControllerWithSections: DATASourceDelegate { + + func dataSource(_ dataSource: DATASource, configureTableViewCell cell: UITableViewCell, withItem item: NSManagedObject, atIndexPath indexPath: IndexPath) { + cell.textLabel?.text = item.value(forKey: "name") as? String ?? "" + } +} diff --git a/SwiftDemo/TableViewControllerWithSectionsWithoutIndex/TableViewControllerWithSectionsWithoutIndex.swift b/SwiftDemo/TableViewControllerWithSectionsWithoutIndex/TableViewControllerWithSectionsWithoutIndex.swift new file mode 100644 index 0000000..93cd43d --- /dev/null +++ b/SwiftDemo/TableViewControllerWithSectionsWithoutIndex/TableViewControllerWithSectionsWithoutIndex.swift @@ -0,0 +1,57 @@ +import UIKit +import DATAStack +import CoreData + +class TableViewControllerWithSectionsWithoutIndex: UITableViewController { + unowned let dataStack: DATAStack + + lazy var dataSource: DATASource = { + let request: NSFetchRequest = NSFetchRequest(entityName: "User") + request.sortDescriptors = [ + NSSortDescriptor(key: "firstLetterOfName", ascending: true), + NSSortDescriptor(key: "count", ascending: true), + NSSortDescriptor(key: "name", ascending: true), + ] + + let dataSource = DATASource(tableView: self.tableView, cellIdentifier: "Cell", fetchRequest: request, mainContext: self.dataStack.mainContext, sectionName: "firstLetterOfName") + dataSource.delegate = self + + return dataSource + }() + + init(dataStack: DATAStack) { + self.dataStack = dataStack + + super.init(style: .plain) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() { + super.viewDidLoad() + + self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell") + self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(TableViewController.saveAction)) + self.tableView.dataSource = self.dataSource + + let object = self.dataSource.objectAtIndexPath(IndexPath(row: 0, section: 0)) + print(object) + } + + func saveAction() { + Helper.addNewUser(dataStack: self.dataStack) + } +} + +extension TableViewControllerWithSectionsWithoutIndex: DATASourceDelegate { + + func dataSource(_ dataSource: DATASource, configureTableViewCell cell: UITableViewCell, withItem item: NSManagedObject, atIndexPath indexPath: IndexPath) { + cell.textLabel?.text = item.value(forKey: "name") as? String ?? "" + } + + func sectionIndexTitlesForDataSource(_ dataSource: DATASource, tableView: UITableView) -> [String] { + return [String]() + } +} diff --git a/TableObjC/AppDelegate.h b/TableObjC/AppDelegate.h deleted file mode 100755 index 4c69912..0000000 --- a/TableObjC/AppDelegate.h +++ /dev/null @@ -1,8 +0,0 @@ -@import UIKit; -@import CoreData; - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/TableObjC/AppDelegate.m b/TableObjC/AppDelegate.m deleted file mode 100755 index 761a470..0000000 --- a/TableObjC/AppDelegate.m +++ /dev/null @@ -1,26 +0,0 @@ -#import "AppDelegate.h" -#import "ViewController.h" -@import DATAStack; - -@interface AppDelegate () - -@property (nonatomic) DATAStack *dataStack; - -@end - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - - self.dataStack = [[DATAStack alloc] initWithModelName:@"DataModel"]; - ViewController *mainController = [[ViewController alloc] initWithDataStack:self.dataStack]; - UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:mainController]; - self.window.rootViewController = navigationController; - [self.window makeKeyAndVisible]; - - return YES; -} - -@end - diff --git a/TableObjC/Assets.xcassets/AppIcon.appiconset/Contents.json b/TableObjC/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 118c98f..0000000 --- a/TableObjC/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/TableObjC/Base.lproj/LaunchScreen.storyboard b/TableObjC/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 2e721e1..0000000 --- a/TableObjC/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TableObjC/Info.plist b/TableObjC/Info.plist deleted file mode 100644 index d39a4da..0000000 --- a/TableObjC/Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/TableSwift/Assets.xcassets/AppIcon.appiconset/Contents.json b/TableSwift/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 118c98f..0000000 --- a/TableSwift/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/TableSwift/Base.lproj/LaunchScreen.storyboard b/TableSwift/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 2e721e1..0000000 --- a/TableSwift/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TableSwift/CustomCell.swift b/TableSwift/CustomCell.swift deleted file mode 100644 index a005549..0000000 --- a/TableSwift/CustomCell.swift +++ /dev/null @@ -1,28 +0,0 @@ -import UIKit - -class CustomCell: UITableViewCell { - static let Identifier = "CustomCellIdentifier" - - lazy var label: UILabel = { - let label = UILabel(frame: CGRect.zero) - label.textAlignment = .center - - return label - }() - - override init(style: UITableViewCellStyle, reuseIdentifier: String?) { - super.init(style: style, reuseIdentifier: reuseIdentifier) - - self.contentView.addSubview(self.label) - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func layoutSubviews() { - super.layoutSubviews() - - self.label.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.height) - } -} diff --git a/TableSwift/Info.plist b/TableSwift/Info.plist deleted file mode 100644 index d39a4da..0000000 --- a/TableSwift/Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/TableSwift/ViewController.swift b/TableSwift/ViewController.swift deleted file mode 100644 index 002747b..0000000 --- a/TableSwift/ViewController.swift +++ /dev/null @@ -1,97 +0,0 @@ -import UIKit -import DATAStack -import CoreData - -class ViewController: UITableViewController { - weak var dataStack: DATAStack? - - lazy var dataSource: DATASource = { - let request: NSFetchRequest = NSFetchRequest(entityName: "User") - request.sortDescriptors = [ - NSSortDescriptor(key: "firstLetterOfName", ascending: true), - NSSortDescriptor(key: "count", ascending: true), - NSSortDescriptor(key: "name", ascending: true), - ] - - let dataSource = DATASource(tableView: self.tableView, cellIdentifier: CustomCell.Identifier, fetchRequest: request, mainContext: self.dataStack!.mainContext, sectionName: "firstLetterOfName") - dataSource.delegate = self - - return dataSource - }() - - convenience init(dataStack: DATAStack) { - self.init(style: .plain) - - self.dataStack = dataStack - } - - override func viewDidLoad() { - super.viewDidLoad() - - self.tableView.register(CustomCell.self, forCellReuseIdentifier: CustomCell.Identifier) - self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(ViewController.saveAction)) - self.tableView.dataSource = self.dataSource - - let object = self.dataSource.objectAtIndexPath(IndexPath(row: 0, section: 0)) - print(object) - } - - func saveAction() { - self.dataStack!.performInNewBackgroundContext { backgroundContext in - if let entity = NSEntityDescription.entity(forEntityName: "User", in: backgroundContext) { - let user = NSManagedObject(entity: entity, insertInto: backgroundContext) - - let name = self.randomString() - let firstLetter = String(name[name.startIndex]) - user.setValue(name, forKey: "name") - user.setValue(firstLetter, forKey: "firstLetterOfName") - - do { - try backgroundContext.save() - } catch let savingError as NSError { - print("Could not save \(savingError)") - } catch { - fatalError() - } - } else { - print("Oh no") - } - } - } - - func randomString() -> String { - let letters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZÅØÆ" - var string = "" - for _ in 0 ... 10 { - let token = UInt32(letters.characters.count) - let letterIndex = Int(arc4random_uniform(token)) - let firstChar = Array(letters.characters)[letterIndex] - string.append(firstChar) - } - - return string - } - - override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - let user = self.dataSource.objectAtIndexPath(indexPath) - self.dataStack?.performInNewBackgroundContext { backgroundContext in - guard let objectID = user?.objectID else { fatalError() } - let user = backgroundContext.object(with: objectID) - var count = user.value(forKey: "count") as? Int ?? 0 - count += 1 - user.setValue(count, forKey: "count") - try! backgroundContext.save() - } - } -} - -extension ViewController: DATASourceDelegate { - - func dataSource(_ dataSource: DATASource, configureTableViewCell cell: UITableViewCell, withItem item: NSManagedObject, atIndexPath indexPath: IndexPath) { - if let cell = cell as? CustomCell { - let name = item.value(forKey: "name") as? String ?? "" - let count = item.value(forKey: "count") as? Int ?? 0 - cell.label.text = "\(count) — \(name)" - } - } -}