From c4a195747cabaa6618540457cb7ec227a9e6c82d Mon Sep 17 00:00:00 2001 From: "Julian A. Fordyce" Date: Wed, 12 Dec 2018 17:20:45 -0500 Subject: [PATCH 1/6] add necessary file for project --- .../cohortFirebase.xcodeproj/project.pbxproj | 341 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 5152 bytes .../xcschemes/xcschememanagement.plist | 14 + .../cohortFirebase/AppDelegate.swift | 46 +++ .../AppIcon.appiconset/Contents.json | 98 +++++ .../Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 ++ .../cohortFirebase/Base.lproj/Main.storyboard | 24 ++ .../cohortFirebase/DetailViewController.swift | 30 ++ cohortFirebase/cohortFirebase/EntryCell.swift | 5 + cohortFirebase/cohortFirebase/EntryCell.xib | 18 + cohortFirebase/cohortFirebase/Info.plist | 45 +++ .../cohortFirebase/PersonCell.swift | 5 + cohortFirebase/cohortFirebase/PersonCell.xib | 18 + .../cohortFirebase/ViewController.swift | 20 + 17 files changed, 710 insertions(+) create mode 100644 cohortFirebase/cohortFirebase.xcodeproj/project.pbxproj create mode 100644 cohortFirebase/cohortFirebase.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 cohortFirebase/cohortFirebase.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 cohortFirebase/cohortFirebase.xcodeproj/project.xcworkspace/xcuserdata/juliana.fordyce.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 cohortFirebase/cohortFirebase.xcodeproj/xcuserdata/juliana.fordyce.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 cohortFirebase/cohortFirebase/AppDelegate.swift create mode 100644 cohortFirebase/cohortFirebase/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 cohortFirebase/cohortFirebase/Assets.xcassets/Contents.json create mode 100644 cohortFirebase/cohortFirebase/Base.lproj/LaunchScreen.storyboard create mode 100644 cohortFirebase/cohortFirebase/Base.lproj/Main.storyboard create mode 100644 cohortFirebase/cohortFirebase/DetailViewController.swift create mode 100644 cohortFirebase/cohortFirebase/EntryCell.swift create mode 100644 cohortFirebase/cohortFirebase/EntryCell.xib create mode 100644 cohortFirebase/cohortFirebase/Info.plist create mode 100644 cohortFirebase/cohortFirebase/PersonCell.swift create mode 100644 cohortFirebase/cohortFirebase/PersonCell.xib create mode 100644 cohortFirebase/cohortFirebase/ViewController.swift diff --git a/cohortFirebase/cohortFirebase.xcodeproj/project.pbxproj b/cohortFirebase/cohortFirebase.xcodeproj/project.pbxproj new file mode 100644 index 0000000..0f6e716 --- /dev/null +++ b/cohortFirebase/cohortFirebase.xcodeproj/project.pbxproj @@ -0,0 +1,341 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + C4351A7821C1B2B3007E4831 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4351A7721C1B2B3007E4831 /* AppDelegate.swift */; }; + C4351A7A21C1B2B3007E4831 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4351A7921C1B2B3007E4831 /* ViewController.swift */; }; + C4351A7D21C1B2B3007E4831 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C4351A7B21C1B2B3007E4831 /* Main.storyboard */; }; + C4351A7F21C1B2B4007E4831 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C4351A7E21C1B2B4007E4831 /* Assets.xcassets */; }; + C4351A8221C1B2B4007E4831 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C4351A8021C1B2B4007E4831 /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + C4351A7421C1B2B3007E4831 /* cohortFirebase.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = cohortFirebase.app; sourceTree = BUILT_PRODUCTS_DIR; }; + C4351A7721C1B2B3007E4831 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + C4351A7921C1B2B3007E4831 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + C4351A7C21C1B2B3007E4831 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + C4351A7E21C1B2B4007E4831 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + C4351A8121C1B2B4007E4831 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + C4351A8321C1B2B4007E4831 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + C4351A7121C1B2B3007E4831 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + C4351A6B21C1B2B3007E4831 = { + isa = PBXGroup; + children = ( + C4351A7621C1B2B3007E4831 /* cohortFirebase */, + C4351A7521C1B2B3007E4831 /* Products */, + ); + sourceTree = ""; + }; + C4351A7521C1B2B3007E4831 /* Products */ = { + isa = PBXGroup; + children = ( + C4351A7421C1B2B3007E4831 /* cohortFirebase.app */, + ); + name = Products; + sourceTree = ""; + }; + C4351A7621C1B2B3007E4831 /* cohortFirebase */ = { + isa = PBXGroup; + children = ( + C4351A7721C1B2B3007E4831 /* AppDelegate.swift */, + C4351A7921C1B2B3007E4831 /* ViewController.swift */, + C4351A7B21C1B2B3007E4831 /* Main.storyboard */, + C4351A7E21C1B2B4007E4831 /* Assets.xcassets */, + C4351A8021C1B2B4007E4831 /* LaunchScreen.storyboard */, + C4351A8321C1B2B4007E4831 /* Info.plist */, + ); + path = cohortFirebase; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + C4351A7321C1B2B3007E4831 /* cohortFirebase */ = { + isa = PBXNativeTarget; + buildConfigurationList = C4351A8621C1B2B4007E4831 /* Build configuration list for PBXNativeTarget "cohortFirebase" */; + buildPhases = ( + C4351A7021C1B2B3007E4831 /* Sources */, + C4351A7121C1B2B3007E4831 /* Frameworks */, + C4351A7221C1B2B3007E4831 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = cohortFirebase; + productName = cohortFirebase; + productReference = C4351A7421C1B2B3007E4831 /* cohortFirebase.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + C4351A6C21C1B2B3007E4831 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1010; + LastUpgradeCheck = 1010; + ORGANIZATIONNAME = "Julian A. Fordyce"; + TargetAttributes = { + C4351A7321C1B2B3007E4831 = { + CreatedOnToolsVersion = 10.1; + }; + }; + }; + buildConfigurationList = C4351A6F21C1B2B3007E4831 /* Build configuration list for PBXProject "cohortFirebase" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = C4351A6B21C1B2B3007E4831; + productRefGroup = C4351A7521C1B2B3007E4831 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + C4351A7321C1B2B3007E4831 /* cohortFirebase */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + C4351A7221C1B2B3007E4831 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C4351A8221C1B2B4007E4831 /* LaunchScreen.storyboard in Resources */, + C4351A7F21C1B2B4007E4831 /* Assets.xcassets in Resources */, + C4351A7D21C1B2B3007E4831 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + C4351A7021C1B2B3007E4831 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C4351A7A21C1B2B3007E4831 /* ViewController.swift in Sources */, + C4351A7821C1B2B3007E4831 /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + C4351A7B21C1B2B3007E4831 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + C4351A7C21C1B2B3007E4831 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + C4351A8021C1B2B4007E4831 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + C4351A8121C1B2B4007E4831 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + C4351A8421C1B2B4007E4831 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.1; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + C4351A8521C1B2B4007E4831 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.1; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + C4351A8721C1B2B4007E4831 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = VL892F87QQ; + INFOPLIST_FILE = cohortFirebase/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.cohortFirebase; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + C4351A8821C1B2B4007E4831 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = VL892F87QQ; + INFOPLIST_FILE = cohortFirebase/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.cohortFirebase; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + C4351A6F21C1B2B3007E4831 /* Build configuration list for PBXProject "cohortFirebase" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C4351A8421C1B2B4007E4831 /* Debug */, + C4351A8521C1B2B4007E4831 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C4351A8621C1B2B4007E4831 /* Build configuration list for PBXNativeTarget "cohortFirebase" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C4351A8721C1B2B4007E4831 /* Debug */, + C4351A8821C1B2B4007E4831 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = C4351A6C21C1B2B3007E4831 /* Project object */; +} diff --git a/cohortFirebase/cohortFirebase.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/cohortFirebase/cohortFirebase.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..c982403 --- /dev/null +++ b/cohortFirebase/cohortFirebase.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/cohortFirebase/cohortFirebase.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/cohortFirebase/cohortFirebase.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/cohortFirebase/cohortFirebase.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/cohortFirebase/cohortFirebase.xcodeproj/project.xcworkspace/xcuserdata/juliana.fordyce.xcuserdatad/UserInterfaceState.xcuserstate b/cohortFirebase/cohortFirebase.xcodeproj/project.xcworkspace/xcuserdata/juliana.fordyce.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..e66b0eaf4d75ac6dc61cd6a58ecc58f30d6562f9 GIT binary patch literal 5152 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 literal 0 HcmV?d00001 diff --git a/cohortFirebase/cohortFirebase.xcodeproj/xcuserdata/juliana.fordyce.xcuserdatad/xcschemes/xcschememanagement.plist b/cohortFirebase/cohortFirebase.xcodeproj/xcuserdata/juliana.fordyce.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..ff3d337 --- /dev/null +++ b/cohortFirebase/cohortFirebase.xcodeproj/xcuserdata/juliana.fordyce.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + cohortFirebase.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/cohortFirebase/cohortFirebase/AppDelegate.swift b/cohortFirebase/cohortFirebase/AppDelegate.swift new file mode 100644 index 0000000..28ba7b2 --- /dev/null +++ b/cohortFirebase/cohortFirebase/AppDelegate.swift @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// cohortFirebase +// +// Created by Julian A. Fordyce on 12/12/18. +// Copyright © 2018 Julian A. Fordyce. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git a/cohortFirebase/cohortFirebase/Assets.xcassets/AppIcon.appiconset/Contents.json b/cohortFirebase/cohortFirebase/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ b/cohortFirebase/cohortFirebase/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "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" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/cohortFirebase/cohortFirebase/Assets.xcassets/Contents.json b/cohortFirebase/cohortFirebase/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/cohortFirebase/cohortFirebase/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/cohortFirebase/cohortFirebase/Base.lproj/LaunchScreen.storyboard b/cohortFirebase/cohortFirebase/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..bfa3612 --- /dev/null +++ b/cohortFirebase/cohortFirebase/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cohortFirebase/cohortFirebase/Base.lproj/Main.storyboard b/cohortFirebase/cohortFirebase/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f1bcf38 --- /dev/null +++ b/cohortFirebase/cohortFirebase/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cohortFirebase/cohortFirebase/DetailViewController.swift b/cohortFirebase/cohortFirebase/DetailViewController.swift new file mode 100644 index 0000000..1e65bab --- /dev/null +++ b/cohortFirebase/cohortFirebase/DetailViewController.swift @@ -0,0 +1,30 @@ +// +// DetailViewController.swift +// cohortFirebase +// +// Created by Julian A. Fordyce on 12/12/18. +// Copyright © 2018 Julian A. Fordyce. All rights reserved. +// + +import UIKit + +class DetailViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/cohortFirebase/cohortFirebase/EntryCell.swift b/cohortFirebase/cohortFirebase/EntryCell.swift new file mode 100644 index 0000000..5e6a59f --- /dev/null +++ b/cohortFirebase/cohortFirebase/EntryCell.swift @@ -0,0 +1,5 @@ +import UIKit + +class EntryCell: UITableViewCell { + +} diff --git a/cohortFirebase/cohortFirebase/EntryCell.xib b/cohortFirebase/cohortFirebase/EntryCell.xib new file mode 100644 index 0000000..5039b06 --- /dev/null +++ b/cohortFirebase/cohortFirebase/EntryCell.xib @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/cohortFirebase/cohortFirebase/Info.plist b/cohortFirebase/cohortFirebase/Info.plist new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ b/cohortFirebase/cohortFirebase/Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/cohortFirebase/cohortFirebase/PersonCell.swift b/cohortFirebase/cohortFirebase/PersonCell.swift new file mode 100644 index 0000000..b86b95d --- /dev/null +++ b/cohortFirebase/cohortFirebase/PersonCell.swift @@ -0,0 +1,5 @@ +import UIKit + +class PersonCell: UITableViewCell { + +} diff --git a/cohortFirebase/cohortFirebase/PersonCell.xib b/cohortFirebase/cohortFirebase/PersonCell.xib new file mode 100644 index 0000000..5039b06 --- /dev/null +++ b/cohortFirebase/cohortFirebase/PersonCell.xib @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/cohortFirebase/cohortFirebase/ViewController.swift b/cohortFirebase/cohortFirebase/ViewController.swift new file mode 100644 index 0000000..4ae9a6b --- /dev/null +++ b/cohortFirebase/cohortFirebase/ViewController.swift @@ -0,0 +1,20 @@ +// +// ViewController.swift +// cohortFirebase +// +// Created by Julian A. Fordyce on 12/12/18. +// Copyright © 2018 Julian A. Fordyce. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + +} + From 1f0389129e9315a2dcd1c71048e69be2db6b94e3 Mon Sep 17 00:00:00 2001 From: "Julian A. Fordyce" Date: Wed, 12 Dec 2018 17:36:44 -0500 Subject: [PATCH 2/6] create a model --- cohortFirebase/cohortFirebase/Model.swift | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 cohortFirebase/cohortFirebase/Model.swift diff --git a/cohortFirebase/cohortFirebase/Model.swift b/cohortFirebase/cohortFirebase/Model.swift new file mode 100644 index 0000000..cf14d4b --- /dev/null +++ b/cohortFirebase/cohortFirebase/Model.swift @@ -0,0 +1,9 @@ +// +// Model.swift +// cohortFirebase +// +// Created by Julian A. Fordyce on 12/12/18. +// Copyright © 2018 Julian A. Fordyce. All rights reserved. +// + +import Foundation From d4675dbba110ce6a322c6543bde3b88eef9736ef Mon Sep 17 00:00:00 2001 From: "Julian A. Fordyce" Date: Wed, 12 Dec 2018 19:46:55 -0500 Subject: [PATCH 3/6] build a working project --- .../CustomTableViewController.swift | 90 +++++++++++++++++++ cohortFirebase/cohortFirebase/Person.swift | 9 ++ 2 files changed, 99 insertions(+) create mode 100644 cohortFirebase/cohortFirebase/CustomTableViewController.swift create mode 100644 cohortFirebase/cohortFirebase/Person.swift diff --git a/cohortFirebase/cohortFirebase/CustomTableViewController.swift b/cohortFirebase/cohortFirebase/CustomTableViewController.swift new file mode 100644 index 0000000..22f5192 --- /dev/null +++ b/cohortFirebase/cohortFirebase/CustomTableViewController.swift @@ -0,0 +1,90 @@ +// +// CustomTableViewController.swift +// cohortFirebase +// +// Created by Julian A. Fordyce on 12/12/18. +// Copyright © 2018 Julian A. Fordyce. All rights reserved. +// + +import UIKit + +class CustomTableViewController: UITableViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = false + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + // #warning Incomplete implementation, return the number of sections + return 0 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return 0 + } + + /* + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) + + // Configure the cell... + + return cell + } + */ + + /* + // Override to support conditional editing of the table view. + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the specified item to be editable. + return true + } + */ + + /* + // Override to support editing the table view. + override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // Delete the row from the data source + tableView.deleteRows(at: [indexPath], with: .fade) + } else if editingStyle == .insert { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } + } + */ + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/cohortFirebase/cohortFirebase/Person.swift b/cohortFirebase/cohortFirebase/Person.swift new file mode 100644 index 0000000..093796f --- /dev/null +++ b/cohortFirebase/cohortFirebase/Person.swift @@ -0,0 +1,9 @@ +// +// Person.swift +// cohortFirebase +// +// Created by Julian A. Fordyce on 12/12/18. +// Copyright © 2018 Julian A. Fordyce. All rights reserved. +// + +import Foundation From 5c4ddbd64eebb266face5bcc44246ab1068eb8d1 Mon Sep 17 00:00:00 2001 From: "Julian A. Fordyce" Date: Wed, 12 Dec 2018 19:48:41 -0500 Subject: [PATCH 4/6] add file to answer questions on REST/Firebase --- Firebase.swift | 2 +- Questions.txt | 37 +++ .../cohortFirebase.xcodeproj/project.pbxproj | 40 +++ .../UserInterfaceState.xcuserstate | Bin 5152 -> 30826 bytes .../cohortFirebase/Base.lproj/Main.storyboard | 237 +++++++++++++++++- .../CustomTableViewController.swift | 107 +++----- .../cohortFirebase/DetailViewController.swift | 24 +- cohortFirebase/cohortFirebase/EntryCell.swift | 12 +- cohortFirebase/cohortFirebase/EntryCell.xib | 92 ++++++- cohortFirebase/cohortFirebase/Model.swift | 29 ++- cohortFirebase/cohortFirebase/Person.swift | 20 +- .../cohortFirebase/PersonCell.swift | 4 +- cohortFirebase/cohortFirebase/PersonCell.xib | 55 +++- 13 files changed, 523 insertions(+), 136 deletions(-) create mode 100644 Questions.txt diff --git a/Firebase.swift b/Firebase.swift index d1f857c..537cd8a 100644 --- a/Firebase.swift +++ b/Firebase.swift @@ -10,7 +10,7 @@ import Foundation class Firebase { - static var baseURL: URL! { return URL(string: "https://put-and-post.firebaseio.com/") } + static var baseURL: URL! { return URL(string: "https://julian-84c2b.firebaseio.com/") } static func requestURL(_ method: String, for recordIdentifier: String = "unknownid") -> URL { switch method { diff --git a/Questions.txt b/Questions.txt new file mode 100644 index 0000000..9bed435 --- /dev/null +++ b/Questions.txt @@ -0,0 +1,37 @@ +What is a RESTful interface? When do you use it? What are its characteristics? + +It's similar to CRUD, but it utilizes GET, POST, PUT, DELETE and it is a remote web service. + + +What is the difference between POST and PUT? + +POST is creating data, while PUT is updating data. + + +How does the record ID work in Firebase? Why does it take two steps to save a record (first POST then PUT) in our app? Why does the FirebaseItem protocol even exist? + +It creates a unique identifier on Firebase. Firebase protocol exists to allow the record identifier to work. + + +Explain what a generic type is and what advantages it offers. + +Generic code it flexible and allows you to reuse functions and types. + + +What does a URLRequest do? When do you need one and when can you just use a URL? +It combines the URL we want to load and the policy to use. + + +What is the role of a URL session? How does it work? +It allows your app to create one or more sessions in regards to data transfer. + + +What are completion handlers? Why use completion handlers? What advantages do they provide? + +It's code that contains a closure and we use it to handle the tasks that need to be ran after the data retrieval is complete. + + +Explain at least three strategies that promote code reuse that we used in today's project. + +Completion Handlers, Closures, Generic Types. + diff --git a/cohortFirebase/cohortFirebase.xcodeproj/project.pbxproj b/cohortFirebase/cohortFirebase.xcodeproj/project.pbxproj index 0f6e716..ae47d7d 100644 --- a/cohortFirebase/cohortFirebase.xcodeproj/project.pbxproj +++ b/cohortFirebase/cohortFirebase.xcodeproj/project.pbxproj @@ -12,6 +12,16 @@ C4351A7D21C1B2B3007E4831 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C4351A7B21C1B2B3007E4831 /* Main.storyboard */; }; C4351A7F21C1B2B4007E4831 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C4351A7E21C1B2B4007E4831 /* Assets.xcassets */; }; C4351A8221C1B2B4007E4831 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C4351A8021C1B2B4007E4831 /* LaunchScreen.storyboard */; }; + C4351A8A21C1B2DB007E4831 /* FirebaseItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4351A8921C1B2DB007E4831 /* FirebaseItem.swift */; }; + C4351A8C21C1B2FE007E4831 /* Firebase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4351A8B21C1B2FE007E4831 /* Firebase.swift */; }; + C4351A8E21C1B87F007E4831 /* PersonCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4351A8D21C1B87F007E4831 /* PersonCell.swift */; }; + C4351A9021C1B889007E4831 /* EntryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4351A8F21C1B889007E4831 /* EntryCell.swift */; }; + C4351A9221C1B8D8007E4831 /* PersonCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = C4351A9121C1B8D8007E4831 /* PersonCell.xib */; }; + C4351A9421C1B8E4007E4831 /* EntryCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = C4351A9321C1B8E4007E4831 /* EntryCell.xib */; }; + C4351A9621C1C0F8007E4831 /* DetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4351A9521C1C0F8007E4831 /* DetailViewController.swift */; }; + C4351A9821C1C4D4007E4831 /* Model.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4351A9721C1C4D4007E4831 /* Model.swift */; }; + C4351A9A21C1C557007E4831 /* Person.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4351A9921C1C557007E4831 /* Person.swift */; }; + C4351A9C21C1C93D007E4831 /* CustomTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4351A9B21C1C93D007E4831 /* CustomTableViewController.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -22,6 +32,16 @@ C4351A7E21C1B2B4007E4831 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; C4351A8121C1B2B4007E4831 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; C4351A8321C1B2B4007E4831 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C4351A8921C1B2DB007E4831 /* FirebaseItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FirebaseItem.swift; path = ../../FirebaseItem.swift; sourceTree = ""; }; + C4351A8B21C1B2FE007E4831 /* Firebase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Firebase.swift; path = ../../Firebase.swift; sourceTree = ""; }; + C4351A8D21C1B87F007E4831 /* PersonCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersonCell.swift; sourceTree = ""; }; + C4351A8F21C1B889007E4831 /* EntryCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EntryCell.swift; sourceTree = ""; }; + C4351A9121C1B8D8007E4831 /* PersonCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PersonCell.xib; sourceTree = ""; }; + C4351A9321C1B8E4007E4831 /* EntryCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = EntryCell.xib; sourceTree = ""; }; + C4351A9521C1C0F8007E4831 /* DetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailViewController.swift; sourceTree = ""; }; + C4351A9721C1C4D4007E4831 /* Model.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Model.swift; sourceTree = ""; }; + C4351A9921C1C557007E4831 /* Person.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Person.swift; sourceTree = ""; }; + C4351A9B21C1C93D007E4831 /* CustomTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTableViewController.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -54,9 +74,19 @@ C4351A7621C1B2B3007E4831 /* cohortFirebase */ = { isa = PBXGroup; children = ( + C4351A9121C1B8D8007E4831 /* PersonCell.xib */, + C4351A9321C1B8E4007E4831 /* EntryCell.xib */, C4351A7721C1B2B3007E4831 /* AppDelegate.swift */, + C4351A8D21C1B87F007E4831 /* PersonCell.swift */, + C4351A8F21C1B889007E4831 /* EntryCell.swift */, + C4351A8B21C1B2FE007E4831 /* Firebase.swift */, + C4351A8921C1B2DB007E4831 /* FirebaseItem.swift */, C4351A7921C1B2B3007E4831 /* ViewController.swift */, C4351A7B21C1B2B3007E4831 /* Main.storyboard */, + C4351A9521C1C0F8007E4831 /* DetailViewController.swift */, + C4351A9721C1C4D4007E4831 /* Model.swift */, + C4351A9B21C1C93D007E4831 /* CustomTableViewController.swift */, + C4351A9921C1C557007E4831 /* Person.swift */, C4351A7E21C1B2B4007E4831 /* Assets.xcassets */, C4351A8021C1B2B4007E4831 /* LaunchScreen.storyboard */, C4351A8321C1B2B4007E4831 /* Info.plist */, @@ -124,6 +154,8 @@ files = ( C4351A8221C1B2B4007E4831 /* LaunchScreen.storyboard in Resources */, C4351A7F21C1B2B4007E4831 /* Assets.xcassets in Resources */, + C4351A9421C1B8E4007E4831 /* EntryCell.xib in Resources */, + C4351A9221C1B8D8007E4831 /* PersonCell.xib in Resources */, C4351A7D21C1B2B3007E4831 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -135,8 +167,16 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + C4351A8A21C1B2DB007E4831 /* FirebaseItem.swift in Sources */, + C4351A8E21C1B87F007E4831 /* PersonCell.swift in Sources */, C4351A7A21C1B2B3007E4831 /* ViewController.swift in Sources */, + C4351A8C21C1B2FE007E4831 /* Firebase.swift in Sources */, + C4351A9C21C1C93D007E4831 /* CustomTableViewController.swift in Sources */, + C4351A9021C1B889007E4831 /* EntryCell.swift in Sources */, C4351A7821C1B2B3007E4831 /* AppDelegate.swift in Sources */, + C4351A9A21C1C557007E4831 /* Person.swift in Sources */, + C4351A9621C1C0F8007E4831 /* DetailViewController.swift in Sources */, + C4351A9821C1C4D4007E4831 /* Model.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/cohortFirebase/cohortFirebase.xcodeproj/project.xcworkspace/xcuserdata/juliana.fordyce.xcuserdatad/UserInterfaceState.xcuserstate b/cohortFirebase/cohortFirebase.xcodeproj/project.xcworkspace/xcuserdata/juliana.fordyce.xcuserdatad/UserInterfaceState.xcuserstate index e66b0eaf4d75ac6dc61cd6a58ecc58f30d6562f9..c836a0c5ffbbb40b555eecf01c5a3f368c90e4af 100644 GIT binary patch literal 30826 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%0Ah<_$c(>4( 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 delta 3159 zcmZuzdt6jy8h+n%&UbDob4G!5R2*O!kn3=hiy{{X1i6U=3M%3NqmGV@!4R>i^I2AI ztDD6w8m=jO&p4t_ZmTZJ;r}WU?-3I$caf8b+s6!~O$A z#QK!=3C8Y})GSMaF*7}T{ra~-0TqJ40$E^w1X3Us(jXl&U^-;dV5*}U)zfiwJPmmS zvcUv1U?$|UHIIfew>Qv9bShgDsljKKYJA(IMBhm%L0<+HVD5!-I-wUT=|uK6Q_h?+ z05+(BT3E2i)aKj9qm55Iw8Fl7DC;UN}JW$>~XqV?QLCkmA0y;RgPxQ zNTQ2iiQn~NI=L4b=oIGq7=qY%LyX0!7#cpUb^6Rc6f7_y->la|v8T1yQqh;602 z)9PsISh2#<<`3el&^D*aBWWIlBVgVQFTf#q5f0NVnoV=)jNNb)UV=ZvU+7Fan-@jFkgy^zh!Sg!in?$&m<%Terfc^qvO?iPoJBilcP&#%FKiO!*h zfk5Yf2~B-)1-_ysbneek{|mlm#rKZJ`UO_3Z`c=x(NaHNopcml-y>Xy*C8+=&ngl| z%K{dbUs|AqGMIaMs9`uo48pM^DPl0Kq~4(%QO|P3aX6k<(fQYM#4t4cIv`GB0jJP; zEMPT_sb}p`)Z+BG+oJNF%SMHcMDumFF%W^%sEt8T<8LlqsWqnPm$*meFL^28^+Sb>$k4|?A8l;plUnQ^dzD@go7TFV?H-He4060c#Pkfm2Fw~K$%+~@W^C{cQ^Kc4 z$0sCO(rQhu9WGa+Hpybl$~OAR(wLc&VzjU`aFb=R7;76VZ8=%aLeV?<=s|06!eRkr3fhoiOJ-sSG_^hKI} z<~(zZK6YB1FFZPL@>o9`H)>(s-Hf_3M$@>jD|%AAF(N6M`C8~~ZE<%F`${qm7$Z_r zM=@$&iph60+7v!LGb=l1#?0JVdHDr}v#mwNb4p6*mX=pkR?VxPZ}Xw~G!r#}N}7%m zs@Fg-*_l}C!2nTAAX6a|%9#|d4NS-u*vj~3FB7_>Ox{kg=|08A{4`UytE|Zte_vxd z=3^04u6m|htC?DL;|@HChwv~S#dmQKzvcu^;>K_jxyf8Sm&+~Xye`heZRUL3{ahdS zICq3Q$$h|G;(p>)emoz^n|L!H%TMFu_yj(YPv%qjG(LmRQg)XNn=*nRd`!d#;V0AZltZ}q@hM;M0)C^X~a(jo%Gc=nvkKN;F zFLt-p&M$BGDbo^tRk1gCM?$;tMn5HtrCcwzQO7WAVFxq?9{NR(={I&=yB{%Jj~j-_ zWoX03fI_mVuC$dox*RP9ZOtp4H#yqg!rSon+CUBz8Nd@ElKlf^cp(S!Fa!-4!$v&^ z3$U2|dCbKstVSCv(mM2E5AMUKaX&tX2ZoV6g>T|%9KbVpmSK7h-^a^b0$0mX2H+9y zJ?<(4FPPW(aeN3L#!ui4{A51<*WmFr{0iRt8-6SQBL7$Z1O7b!5r2gr=1SehlS(9tHNu-fN(+hTo@F7AV4@mh(r`J zg_ubqNhT>IjbxBQQcB851*swnNF7;3mXM{yMY_lqvYqVml78|OIY17QL*y_yMvjvc zZ&CQ(P@>5Vwf^;*;Vr@iXx|Nt7fhM4BQ^l_I1lDOyUBEK;hJE_tU*SyF*i zCM}R!rEY1Hbi1@!x>MRBZI^aPJEi-j2c?Ik!_qnF2RTfhDjVfUIbOENxpKZ-C>P0d z$KsUA=-sGkODK@)@Wf~-NSg4%<+ zb+_s6&~4N0(mkx(t2?MWt~;SSsXL{6Q+HZ7pgXU-p!-;NQTLhdlJ2tZil%ClwQQ|S zTdu9w?$owwcWHNP_h|QO4{3ecZf%dYPkTmtR(oE1Sv#h^qP?n}j?>=K-qtQ^Uuc6v Qtif?ZE8a1hOth>21FZQqqW}N^ diff --git a/cohortFirebase/cohortFirebase/Base.lproj/Main.storyboard b/cohortFirebase/cohortFirebase/Base.lproj/Main.storyboard index f1bcf38..c8a0c1e 100644 --- a/cohortFirebase/cohortFirebase/Base.lproj/Main.storyboard +++ b/cohortFirebase/cohortFirebase/Base.lproj/Main.storyboard @@ -1,24 +1,243 @@ - + + + + - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + diff --git a/cohortFirebase/cohortFirebase/CustomTableViewController.swift b/cohortFirebase/cohortFirebase/CustomTableViewController.swift index 22f5192..011ccee 100644 --- a/cohortFirebase/cohortFirebase/CustomTableViewController.swift +++ b/cohortFirebase/cohortFirebase/CustomTableViewController.swift @@ -1,11 +1,3 @@ -// -// CustomTableViewController.swift -// cohortFirebase -// -// Created by Julian A. Fordyce on 12/12/18. -// Copyright © 2018 Julian A. Fordyce. All rights reserved. -// - import UIKit class CustomTableViewController: UITableViewController { @@ -13,78 +5,45 @@ class CustomTableViewController: UITableViewController { override func viewDidLoad() { super.viewDidLoad() - // Uncomment the following line to preserve selection between presentations - // self.clearsSelectionOnViewWillAppear = false - - // Uncomment the following line to display an Edit button in the navigation bar for this view controller. - // self.navigationItem.rightBarButtonItem = self.editButtonItem - } - - // MARK: - Table view data source - - override func numberOfSections(in tableView: UITableView) -> Int { - // #warning Incomplete implementation, return the number of sections - return 0 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - // #warning Incomplete implementation, return the number of rows - return 0 - } - - /* + + switch section { + case 0: + return 1 + case 1: + return Model.shared.count() + default: + fatalError("Illegal section") + } + } + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) - - // Configure the cell... - + if indexPath.section == 0 { + guard let cell = tableView.dequeueReusableCell(withIdentifier: EntryCell.reuseIdentifier, for: indexPath) as? EntryCell + else { fatalError("Unable to dequeue entry cell") } + + cell.nameField.text = "" + cell.cohortField.text = "" + return cell } - */ - - /* - // Override to support conditional editing of the table view. - override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { - // Return false if you do not want the specified item to be editable. - return true - } - */ - - /* - // Override to support editing the table view. - override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { - if editingStyle == .delete { - // Delete the row from the data source - tableView.deleteRows(at: [indexPath], with: .fade) - } else if editingStyle == .insert { - // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view - } - } - */ - - /* - // Override to support rearranging the table view. - override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { - - } - */ - - /* - // Override to support conditional rearranging of the table view. - override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { - // Return false if you do not want the item to be re-orderable. - return true - } - */ - - /* - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. + + guard let cell = tableView.dequeueReusableCell(withIdentifier: PersonCell.reuseIdentifier, for: indexPath) as? PersonCell else { fatalError("Unable to dequeue person cell") } + let person = Model.shared.person(forIndex: indexPath.row) + cell.nameLabel.text = person.name + cell.cohortLabel.text = person.cohort + + return cell + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + tableView.reloadData() } - */ } + + diff --git a/cohortFirebase/cohortFirebase/DetailViewController.swift b/cohortFirebase/cohortFirebase/DetailViewController.swift index 1e65bab..f33a9a1 100644 --- a/cohortFirebase/cohortFirebase/DetailViewController.swift +++ b/cohortFirebase/cohortFirebase/DetailViewController.swift @@ -1,30 +1,24 @@ -// -// DetailViewController.swift -// cohortFirebase -// -// Created by Julian A. Fordyce on 12/12/18. -// Copyright © 2018 Julian A. Fordyce. All rights reserved. -// import UIKit class DetailViewController: UIViewController { + @IBOutlet weak var nameField: UITextField! + + @IBOutlet weak var cohortField: UITextField! + + @IBAction func save(_ sender: Any) { + } + + override func viewDidLoad() { super.viewDidLoad() - // Do any additional setup after loading the view. } - /* - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. } - */ + } diff --git a/cohortFirebase/cohortFirebase/EntryCell.swift b/cohortFirebase/cohortFirebase/EntryCell.swift index 5e6a59f..9e8b384 100644 --- a/cohortFirebase/cohortFirebase/EntryCell.swift +++ b/cohortFirebase/cohortFirebase/EntryCell.swift @@ -1,5 +1,15 @@ import UIKit class EntryCell: UITableViewCell { - + static let reuseIdentifier = "entry cell" + @IBOutlet weak var nameField: UITextField! + @IBOutlet weak var cohortField: UITextField! + @IBAction func add(_ sender: Any) { + guard let name = nameField.text, !name.isEmpty else { return } + let cohort = cohortField.text ?? "" + let person = Person(name: name, cohort: cohort) + Model.shared.add(person: person) + nameField.text = nil + cohortField.text = nil + } } diff --git a/cohortFirebase/cohortFirebase/EntryCell.xib b/cohortFirebase/cohortFirebase/EntryCell.xib index 5039b06..6c3691e 100644 --- a/cohortFirebase/cohortFirebase/EntryCell.xib +++ b/cohortFirebase/cohortFirebase/EntryCell.xib @@ -1,18 +1,92 @@ - - + + + + + - + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cohortFirebase/cohortFirebase/Model.swift b/cohortFirebase/cohortFirebase/Model.swift index cf14d4b..f0980d3 100644 --- a/cohortFirebase/cohortFirebase/Model.swift +++ b/cohortFirebase/cohortFirebase/Model.swift @@ -1,9 +1,22 @@ -// -// Model.swift -// cohortFirebase -// -// Created by Julian A. Fordyce on 12/12/18. -// Copyright © 2018 Julian A. Fordyce. All rights reserved. -// - import Foundation + +class Model { + static let shared = Model() + private init() {} + + private var persons: [Person] = [] + + func count() -> Int { + return persons.count + } + + func person(forIndex index: Int) -> Person { + return persons[index] + } + + func add(person: Person) { + persons.append(person) + + Firebase.save(item: device) { success } + } +} diff --git a/cohortFirebase/cohortFirebase/Person.swift b/cohortFirebase/cohortFirebase/Person.swift index 093796f..7ea369f 100644 --- a/cohortFirebase/cohortFirebase/Person.swift +++ b/cohortFirebase/cohortFirebase/Person.swift @@ -1,9 +1,13 @@ -// -// Person.swift -// cohortFirebase -// -// Created by Julian A. Fordyce on 12/12/18. -// Copyright © 2018 Julian A. Fordyce. All rights reserved. -// - import Foundation + + +class Person: Codable { + var name: String + var cohort: String + + init(name: String, cohort: String) { + self.name = name + self.cohort = cohort + } + +} diff --git a/cohortFirebase/cohortFirebase/PersonCell.swift b/cohortFirebase/cohortFirebase/PersonCell.swift index b86b95d..a84fe61 100644 --- a/cohortFirebase/cohortFirebase/PersonCell.swift +++ b/cohortFirebase/cohortFirebase/PersonCell.swift @@ -1,5 +1,7 @@ import UIKit class PersonCell: UITableViewCell { - + static let reuseIdentifier = "person cell" + @IBOutlet weak var nameLabel: UILabel! + @IBOutlet weak var cohortLabel: UILabel! } diff --git a/cohortFirebase/cohortFirebase/PersonCell.xib b/cohortFirebase/cohortFirebase/PersonCell.xib index 5039b06..73cdc7b 100644 --- a/cohortFirebase/cohortFirebase/PersonCell.xib +++ b/cohortFirebase/cohortFirebase/PersonCell.xib @@ -1,18 +1,53 @@ - - + + + + + - - + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 714c822f252ac67343dd44441090ddd009ad9524 Mon Sep 17 00:00:00 2001 From: "Julian A. Fordyce" Date: Thu, 13 Dec 2018 10:28:48 -0500 Subject: [PATCH 5/6] implement the ability to use Firebase --- cohortFirebase/cohortFirebase/ModelUpdateClient.swift | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 cohortFirebase/cohortFirebase/ModelUpdateClient.swift diff --git a/cohortFirebase/cohortFirebase/ModelUpdateClient.swift b/cohortFirebase/cohortFirebase/ModelUpdateClient.swift new file mode 100644 index 0000000..eb43e03 --- /dev/null +++ b/cohortFirebase/cohortFirebase/ModelUpdateClient.swift @@ -0,0 +1,9 @@ +// +// ModelUpdateClient.swift +// cohortFirebase +// +// Created by Julian A. Fordyce on 12/13/18. +// Copyright © 2018 Julian A. Fordyce. All rights reserved. +// + +import Foundation From 716ef7433cede784963fe7efbcb8fb8d788dd08e Mon Sep 17 00:00:00 2001 From: "Julian A. Fordyce" Date: Thu, 13 Dec 2018 11:50:44 -0500 Subject: [PATCH 6/6] update constraints --- .../cohortFirebase/ViewController.swift | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100644 cohortFirebase/cohortFirebase/ViewController.swift diff --git a/cohortFirebase/cohortFirebase/ViewController.swift b/cohortFirebase/cohortFirebase/ViewController.swift deleted file mode 100644 index 4ae9a6b..0000000 --- a/cohortFirebase/cohortFirebase/ViewController.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// ViewController.swift -// cohortFirebase -// -// Created by Julian A. Fordyce on 12/12/18. -// Copyright © 2018 Julian A. Fordyce. All rights reserved. -// - -import UIKit - -class ViewController: UIViewController { - - override func viewDidLoad() { - super.viewDidLoad() - // Do any additional setup after loading the view, typically from a nib. - } - - -} -