From 065e460c45a376ebc14a3a78cd5756daca54ec93 Mon Sep 17 00:00:00 2001 From: Caio Dias Date: Thu, 16 Jun 2016 16:02:04 -0400 Subject: [PATCH 01/56] Use clickable link I changed your post link text to clickable link. --- AnimatedConstraints/README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AnimatedConstraints/README b/AnimatedConstraints/README index f23d42c..e00a98d 100644 --- a/AnimatedConstraints/README +++ b/AnimatedConstraints/README @@ -9,4 +9,4 @@ Version 1.0 18 May 2015 Initial Version An example on how to animate changes made to autolayout constraints. For further details see the post: -useyourloaf.com/blog/2015/05/18/animating-autolayout-constraints.html \ No newline at end of file +[http://useyourloaf.com/blog/animating-autolayout-constraints/](http://useyourloaf.com/blog/animating-autolayout-constraints/) From 54b4ee342887c924b21cc16342ab1250d8c653fb Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Fri, 13 Sep 2019 14:13:54 +0100 Subject: [PATCH 02/56] Update for Swift 5 --- ScrollGuide/ScrollGuide.xcodeproj/project.pbxproj | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ScrollGuide/ScrollGuide.xcodeproj/project.pbxproj b/ScrollGuide/ScrollGuide.xcodeproj/project.pbxproj index 030e70e..d35b6dd 100644 --- a/ScrollGuide/ScrollGuide.xcodeproj/project.pbxproj +++ b/ScrollGuide/ScrollGuide.xcodeproj/project.pbxproj @@ -104,6 +104,7 @@ TargetAttributes = { 53FD5C2F2126C480008DA03A = { CreatedOnToolsVersion = 10.0; + LastSwiftMigration = 1100; }; }; }; @@ -293,7 +294,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.ScrollGuide; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -311,7 +312,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.ScrollGuide; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; From 582fa388da7348c805e573faee02cd75929f41bd Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Mon, 16 Sep 2019 20:48:00 +0100 Subject: [PATCH 03/56] Add Interface Builder version of using Scroll View layout guides --- ScrollGuide-IB/README.md | 9 + .../ScrollGuide-IB.xcodeproj/project.pbxproj | 345 ++++++++++++++++++ .../ScrollGuide-IB/AppDelegate.swift | 43 +++ .../AppIcon.appiconset/Contents.json | 98 +++++ .../Assets.xcassets/Contents.json | 6 + .../SkyBlue.colorset/Contents.json | 20 + .../Sun.imageset/Contents.json | 15 + .../Assets.xcassets/Sun.imageset/Sun150.pdf | Bin 0 -> 4444 bytes .../Base.lproj/LaunchScreen.storyboard | 51 +++ .../ScrollGuide-IB/Base.lproj/Main.storyboard | 107 ++++++ ScrollGuide-IB/ScrollGuide-IB/Forecast.swift | 49 +++ .../ForecastViewController.swift | 57 +++ ScrollGuide-IB/ScrollGuide-IB/Info.plist | 50 +++ ScrollGuide/README.md | 4 + 14 files changed, 854 insertions(+) create mode 100644 ScrollGuide-IB/README.md create mode 100644 ScrollGuide-IB/ScrollGuide-IB.xcodeproj/project.pbxproj create mode 100644 ScrollGuide-IB/ScrollGuide-IB/AppDelegate.swift create mode 100644 ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/Contents.json create mode 100644 ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/SkyBlue.colorset/Contents.json create mode 100644 ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/Sun.imageset/Contents.json create mode 100644 ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/Sun.imageset/Sun150.pdf create mode 100644 ScrollGuide-IB/ScrollGuide-IB/Base.lproj/LaunchScreen.storyboard create mode 100644 ScrollGuide-IB/ScrollGuide-IB/Base.lproj/Main.storyboard create mode 100644 ScrollGuide-IB/ScrollGuide-IB/Forecast.swift create mode 100644 ScrollGuide-IB/ScrollGuide-IB/ForecastViewController.swift create mode 100644 ScrollGuide-IB/ScrollGuide-IB/Info.plist diff --git a/ScrollGuide-IB/README.md b/ScrollGuide-IB/README.md new file mode 100644 index 0000000..5193288 --- /dev/null +++ b/ScrollGuide-IB/README.md @@ -0,0 +1,9 @@ +# Scroll View Layout Guides + +Xcode 11 adds direct support for the content layout guides of a `UIScrollView` to Interface Builder. See the following post for details: + ++ [Scroll View Layouts With Interface Builder](https://useyourloaf.com/blog/scroll-view-layouts-with-interface-builder/) + +You can compare the Interface Builder version of the layout with the progammatic version described in this earlier post: + ++ [Easier Scrolling With Layout Guides](https://useyourloaf.com/blog/easier-scrolling-with-layout-guides/) diff --git a/ScrollGuide-IB/ScrollGuide-IB.xcodeproj/project.pbxproj b/ScrollGuide-IB/ScrollGuide-IB.xcodeproj/project.pbxproj new file mode 100644 index 0000000..5622ba2 --- /dev/null +++ b/ScrollGuide-IB/ScrollGuide-IB.xcodeproj/project.pbxproj @@ -0,0 +1,345 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 537CC979232BD70800424444 /* ForecastViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 537CC978232BD70800424444 /* ForecastViewController.swift */; }; + 537CC97B232BD80300424444 /* Forecast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 537CC97A232BD80300424444 /* Forecast.swift */; }; + 53926B86232BD49B0070DCB1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53926B85232BD49B0070DCB1 /* AppDelegate.swift */; }; + 53926B8D232BD49B0070DCB1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 53926B8B232BD49B0070DCB1 /* Main.storyboard */; }; + 53926B8F232BD49B0070DCB1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 53926B8E232BD49B0070DCB1 /* Assets.xcassets */; }; + 53926B92232BD49B0070DCB1 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 53926B90232BD49B0070DCB1 /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 537CC978232BD70800424444 /* ForecastViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastViewController.swift; sourceTree = ""; }; + 537CC97A232BD80300424444 /* Forecast.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Forecast.swift; sourceTree = ""; }; + 537CC99C23301D1800424444 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 53926B82232BD49B0070DCB1 /* ScrollGuide-IB.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ScrollGuide-IB.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 53926B85232BD49B0070DCB1 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 53926B8C232BD49B0070DCB1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 53926B8E232BD49B0070DCB1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 53926B91232BD49B0070DCB1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 53926B93232BD49B0070DCB1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 53926B7F232BD49B0070DCB1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 53926B79232BD49B0070DCB1 = { + isa = PBXGroup; + children = ( + 537CC99C23301D1800424444 /* README.md */, + 53926B84232BD49B0070DCB1 /* ScrollGuide-IB */, + 53926B83232BD49B0070DCB1 /* Products */, + ); + sourceTree = ""; + }; + 53926B83232BD49B0070DCB1 /* Products */ = { + isa = PBXGroup; + children = ( + 53926B82232BD49B0070DCB1 /* ScrollGuide-IB.app */, + ); + name = Products; + sourceTree = ""; + }; + 53926B84232BD49B0070DCB1 /* ScrollGuide-IB */ = { + isa = PBXGroup; + children = ( + 537CC978232BD70800424444 /* ForecastViewController.swift */, + 537CC97A232BD80300424444 /* Forecast.swift */, + 53926B85232BD49B0070DCB1 /* AppDelegate.swift */, + 53926B8B232BD49B0070DCB1 /* Main.storyboard */, + 53926B8E232BD49B0070DCB1 /* Assets.xcassets */, + 53926B90232BD49B0070DCB1 /* LaunchScreen.storyboard */, + 53926B93232BD49B0070DCB1 /* Info.plist */, + ); + path = "ScrollGuide-IB"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 53926B81232BD49B0070DCB1 /* ScrollGuide-IB */ = { + isa = PBXNativeTarget; + buildConfigurationList = 53926B96232BD49B0070DCB1 /* Build configuration list for PBXNativeTarget "ScrollGuide-IB" */; + buildPhases = ( + 53926B7E232BD49B0070DCB1 /* Sources */, + 53926B7F232BD49B0070DCB1 /* Frameworks */, + 53926B80232BD49B0070DCB1 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "ScrollGuide-IB"; + productName = "ScrollGuide-IB"; + productReference = 53926B82232BD49B0070DCB1 /* ScrollGuide-IB.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 53926B7A232BD49B0070DCB1 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1100; + LastUpgradeCheck = 1100; + ORGANIZATIONNAME = "Keith Harrison"; + TargetAttributes = { + 53926B81232BD49B0070DCB1 = { + CreatedOnToolsVersion = 11.0; + }; + }; + }; + buildConfigurationList = 53926B7D232BD49B0070DCB1 /* Build configuration list for PBXProject "ScrollGuide-IB" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 53926B79232BD49B0070DCB1; + productRefGroup = 53926B83232BD49B0070DCB1 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 53926B81232BD49B0070DCB1 /* ScrollGuide-IB */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 53926B80232BD49B0070DCB1 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 53926B92232BD49B0070DCB1 /* LaunchScreen.storyboard in Resources */, + 53926B8F232BD49B0070DCB1 /* Assets.xcassets in Resources */, + 53926B8D232BD49B0070DCB1 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 53926B7E232BD49B0070DCB1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 53926B86232BD49B0070DCB1 /* AppDelegate.swift in Sources */, + 537CC97B232BD80300424444 /* Forecast.swift in Sources */, + 537CC979232BD70800424444 /* ForecastViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 53926B8B232BD49B0070DCB1 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 53926B8C232BD49B0070DCB1 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 53926B90232BD49B0070DCB1 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 53926B91232BD49B0070DCB1 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 53926B94232BD49B0070DCB1 /* 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; + 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 = 13.0; + 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; + }; + 53926B95232BD49B0070DCB1 /* 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; + 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 = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 53926B97232BD49B0070DCB1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = LCC2J94N44; + INFOPLIST_FILE = "ScrollGuide-IB/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.ScrollGuide-IB"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 53926B98232BD49B0070DCB1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = LCC2J94N44; + INFOPLIST_FILE = "ScrollGuide-IB/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.ScrollGuide-IB"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 53926B7D232BD49B0070DCB1 /* Build configuration list for PBXProject "ScrollGuide-IB" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 53926B94232BD49B0070DCB1 /* Debug */, + 53926B95232BD49B0070DCB1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 53926B96232BD49B0070DCB1 /* Build configuration list for PBXNativeTarget "ScrollGuide-IB" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 53926B97232BD49B0070DCB1 /* Debug */, + 53926B98232BD49B0070DCB1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 53926B7A232BD49B0070DCB1 /* Project object */; +} diff --git a/ScrollGuide-IB/ScrollGuide-IB/AppDelegate.swift b/ScrollGuide-IB/ScrollGuide-IB/AppDelegate.swift new file mode 100644 index 0000000..a95b2c1 --- /dev/null +++ b/ScrollGuide-IB/ScrollGuide-IB/AppDelegate.swift @@ -0,0 +1,43 @@ +// Copyright © 2019 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + var window: UIWindow? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + if let navigationController = window?.rootViewController as? UINavigationController, + let forecastViewController = navigationController.topViewController as? ForecastViewController { + let forecast = Forecast(title: "Weather For Today", condition: .sun, summary: "Today will be hot and sunny. If you are going out you will need a hat and sunglasses. There is a small chance of a heavy thunderstorm in the afternoon that could cause severe flooding so you may also want to take a boat.") + forecastViewController.forecast = forecast + } + return true + } +} diff --git a/ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/AppIcon.appiconset/Contents.json b/ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ b/ScrollGuide-IB/ScrollGuide-IB/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/ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/Contents.json b/ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/SkyBlue.colorset/Contents.json b/ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/SkyBlue.colorset/Contents.json new file mode 100644 index 0000000..1f49b00 --- /dev/null +++ b/ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/SkyBlue.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + }, + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.463", + "alpha" : "1.000", + "blue" : "1.000", + "green" : "0.835" + } + } + } + ] +} \ No newline at end of file diff --git a/ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/Sun.imageset/Contents.json b/ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/Sun.imageset/Contents.json new file mode 100644 index 0000000..d73dd65 --- /dev/null +++ b/ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/Sun.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Sun150.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "preserves-vector-representation" : true + } +} \ No newline at end of file diff --git a/ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/Sun.imageset/Sun150.pdf b/ScrollGuide-IB/ScrollGuide-IB/Assets.xcassets/Sun.imageset/Sun150.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0715bf8a5ba81db547dabb71dc982f2ddae53fd2 GIT binary patch literal 4444 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ScrollGuide-IB/ScrollGuide-IB/Base.lproj/Main.storyboard b/ScrollGuide-IB/ScrollGuide-IB/Base.lproj/Main.storyboard new file mode 100644 index 0000000..a0fc3ec --- /dev/null +++ b/ScrollGuide-IB/ScrollGuide-IB/Base.lproj/Main.storyboard @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ScrollGuide-IB/ScrollGuide-IB/Forecast.swift b/ScrollGuide-IB/ScrollGuide-IB/Forecast.swift new file mode 100644 index 0000000..a36cd4d --- /dev/null +++ b/ScrollGuide-IB/ScrollGuide-IB/Forecast.swift @@ -0,0 +1,49 @@ +// Copyright © 2019 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +import UIKit + +public struct Forecast { + public enum Condition { + case sun + // other conditions... + } + + let title: String + let condition: Condition + let summary: String +} + +public extension Forecast { + func icon() -> UIImage { + switch condition { + case .sun: return UIImage(named: "Sun")! + // other conditions... + } + } +} diff --git a/ScrollGuide-IB/ScrollGuide-IB/ForecastViewController.swift b/ScrollGuide-IB/ScrollGuide-IB/ForecastViewController.swift new file mode 100644 index 0000000..35e972a --- /dev/null +++ b/ScrollGuide-IB/ScrollGuide-IB/ForecastViewController.swift @@ -0,0 +1,57 @@ +// Copyright © 2019 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +import UIKit + +final class ForecastViewController: UIViewController { + @IBOutlet private var titleLabel: UILabel? + @IBOutlet private var summaryLabel: UILabel? + @IBOutlet private var imageView: UIImageView? + + var forecast: Forecast? { didSet { updateView() } } + + private func updateView() { + if let forecast = forecast { + titleLabel?.text = forecast.title + summaryLabel?.text = forecast.summary + imageView?.image = forecast.icon() + imageView?.sizeToFit() + } + } + + override func viewDidLoad() { + super.viewDidLoad() + updateView() + } +} + +extension ForecastViewController { + @IBAction private func showInfo(_ sender: UIButton) { + print("Show Info") + } +} diff --git a/ScrollGuide-IB/ScrollGuide-IB/Info.plist b/ScrollGuide-IB/ScrollGuide-IB/Info.plist new file mode 100644 index 0000000..8f416d0 --- /dev/null +++ b/ScrollGuide-IB/ScrollGuide-IB/Info.plist @@ -0,0 +1,50 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/ScrollGuide/README.md b/ScrollGuide/README.md index 6bd1f9a..98da7ba 100644 --- a/ScrollGuide/README.md +++ b/ScrollGuide/README.md @@ -3,3 +3,7 @@ An example of using the two new layout guides added to `UIScrollView` in iOS 11. See the following post for details: + [Easier Scrolling With Layout Guides](https://useyourloaf.com/blog/easier-scrolling-with-layout-guides/) + +Starting with Xcode 11 the content layout guides are available in Interface Builder. See this later post for a version of this layout build entirely with Interface Builder: + ++ [Scroll View Layouts With Interface Builder](https://useyourloaf.com/blog/scroll-view-layouts-with-interface-builder/) From 80e8d0af3ca6c88cc4638fc2c860e4e224914b36 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Mon, 16 Sep 2019 20:50:19 +0100 Subject: [PATCH 04/56] Fix typo in README --- ScrollGuide/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ScrollGuide/README.md b/ScrollGuide/README.md index 98da7ba..73909f2 100644 --- a/ScrollGuide/README.md +++ b/ScrollGuide/README.md @@ -4,6 +4,6 @@ An example of using the two new layout guides added to `UIScrollView` in iOS 11. + [Easier Scrolling With Layout Guides](https://useyourloaf.com/blog/easier-scrolling-with-layout-guides/) -Starting with Xcode 11 the content layout guides are available in Interface Builder. See this later post for a version of this layout build entirely with Interface Builder: +Starting with Xcode 11 the content layout guides are available in Interface Builder. See this later post for a version of this layout built entirely with Interface Builder: + [Scroll View Layouts With Interface Builder](https://useyourloaf.com/blog/scroll-view-layouts-with-interface-builder/) From 9cd74600fc074d9765338ca61a69fbd09fdedcd2 Mon Sep 17 00:00:00 2001 From: kharrison Date: Fri, 4 Oct 2019 11:54:34 +0100 Subject: [PATCH 05/56] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 38 ++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..dd84ea7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. From 1117353e9a49fece65d3fdab8cbd821e0adf6242 Mon Sep 17 00:00:00 2001 From: kharrison Date: Fri, 4 Oct 2019 11:57:26 +0100 Subject: [PATCH 06/56] Update issue templates Customise issue template --- .github/ISSUE_TEMPLATE/bug_report.md | 36 +++++++--------------------- 1 file changed, 9 insertions(+), 27 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index dd84ea7..c929601 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -7,32 +7,14 @@ assignees: '' --- -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. +**Project** +This repo contains many projects, please state which project this issue is for. -**Screenshots** -If applicable, add screenshots to help explain your problem. +**Environment** +Please include at least the following details: +- Xcode version +- iOS version +- Device or simulator used to reproduce the bug -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] - -**Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] - -**Additional context** -Add any other context about the problem here. +**Describe the bug** +A clear and concise description of what the bug is. From 0ae7151853acf9e81f40993501e48a168b7059fc Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Fri, 4 Oct 2019 16:01:08 +0100 Subject: [PATCH 07/56] WorldFacts search controller updated for iOS 11 - when available put the search bar in the nav bar --- .../WorldFacts.xcodeproj/project.pbxproj | 14 +- .../WorldFacts/Base.lproj/Main.storyboard | 126 ++++++++---------- WorldFacts/WorldFacts/LaunchScreen.storyboard | 15 ++- WorldFacts/WorldFacts/UYLAppDelegate.m | 2 +- .../UYLCountryTableViewController.m | 8 +- WorldFacts/WorldFacts/WorldFacts-Info.plist | 4 +- 6 files changed, 82 insertions(+), 87 deletions(-) diff --git a/WorldFacts/WorldFacts.xcodeproj/project.pbxproj b/WorldFacts/WorldFacts.xcodeproj/project.pbxproj index 74bc928..debcaf9 100644 --- a/WorldFacts/WorldFacts.xcodeproj/project.pbxproj +++ b/WorldFacts/WorldFacts.xcodeproj/project.pbxproj @@ -235,7 +235,7 @@ isa = PBXProject; attributes = { CLASSPREFIX = UYL; - LastUpgradeCheck = 0920; + LastUpgradeCheck = 1100; TargetAttributes = { 531D960C1AB62FEF00913A78 = { CreatedOnToolsVersion = 6.2; @@ -247,7 +247,7 @@ }; buildConfigurationList = 538A7972157E567E0007B8A5 /* Build configuration list for PBXProject "WorldFacts" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -400,18 +400,21 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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; @@ -452,18 +455,21 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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; @@ -497,9 +503,11 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = 12; DEVELOPMENT_TEAM = LCC2J94N44; GCC_PRECOMPILE_PREFIX_HEADER = NO; INFOPLIST_FILE = "WorldFacts/WorldFacts-Info.plist"; + MARKETING_VERSION = 3.4; PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; @@ -511,9 +519,11 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = 12; DEVELOPMENT_TEAM = LCC2J94N44; GCC_PRECOMPILE_PREFIX_HEADER = NO; INFOPLIST_FILE = "WorldFacts/WorldFacts-Info.plist"; + MARKETING_VERSION = 3.4; PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/WorldFacts/WorldFacts/Base.lproj/Main.storyboard b/WorldFacts/WorldFacts/Base.lproj/Main.storyboard index 231a79f..2cdc686 100644 --- a/WorldFacts/WorldFacts/Base.lproj/Main.storyboard +++ b/WorldFacts/WorldFacts/Base.lproj/Main.storyboard @@ -1,9 +1,11 @@ - - + + + - - + + + @@ -11,8 +13,8 @@ + - @@ -26,115 +28,96 @@ - - - - - + - - + @@ -160,7 +143,7 @@ - + @@ -177,7 +160,7 @@ - + @@ -186,6 +169,7 @@ + @@ -236,41 +220,36 @@ - + - - + - + - + - @@ -284,8 +263,7 @@ - - + @@ -311,8 +289,8 @@ + - diff --git a/WorldFacts/WorldFacts/LaunchScreen.storyboard b/WorldFacts/WorldFacts/LaunchScreen.storyboard index 58daca0..fe2e48d 100644 --- a/WorldFacts/WorldFacts/LaunchScreen.storyboard +++ b/WorldFacts/WorldFacts/LaunchScreen.storyboard @@ -1,7 +1,10 @@ - - + + + - + + + @@ -13,9 +16,9 @@ - + - + @@ -29,7 +32,7 @@ - + diff --git a/WorldFacts/WorldFacts/UYLAppDelegate.m b/WorldFacts/WorldFacts/UYLAppDelegate.m index 28b25ed..d6fd8e0 100644 --- a/WorldFacts/WorldFacts/UYLAppDelegate.m +++ b/WorldFacts/WorldFacts/UYLAppDelegate.m @@ -107,7 +107,7 @@ - (NSManagedObjectContext *)managedObjectContext NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; if (coordinator != nil) { - _managedObjectContext = [[NSManagedObjectContext alloc] init]; + _managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; [_managedObjectContext setPersistentStoreCoordinator:coordinator]; } return _managedObjectContext; diff --git a/WorldFacts/WorldFacts/UYLCountryTableViewController.m b/WorldFacts/WorldFacts/UYLCountryTableViewController.m index 5a60765..8d0b389 100644 --- a/WorldFacts/WorldFacts/UYLCountryTableViewController.m +++ b/WorldFacts/WorldFacts/UYLCountryTableViewController.m @@ -82,8 +82,12 @@ - (void)viewDidLoad NSLocalizedString(@"ScopeButtonCapital",@"Capital")]; self.searchController.searchBar.delegate = self; - self.tableView.tableHeaderView = self.searchController.searchBar; - + if (@available(iOS 11.0, *)) { + self.navigationItem.searchController = self.searchController; + self.navigationItem.hidesSearchBarWhenScrolling = NO; + } else { + self.tableView.tableHeaderView = self.searchController.searchBar; + } self.definesPresentationContext = YES; // The search bar does not seem to set its size automatically diff --git a/WorldFacts/WorldFacts/WorldFacts-Info.plist b/WorldFacts/WorldFacts/WorldFacts-Info.plist index b8734be..528a05a 100644 --- a/WorldFacts/WorldFacts/WorldFacts-Info.plist +++ b/WorldFacts/WorldFacts/WorldFacts-Info.plist @@ -17,11 +17,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 3.3 + $(MARKETING_VERSION) CFBundleSignature ???? CFBundleVersion - 11 + $(CURRENT_PROJECT_VERSION) LSRequiresIPhoneOS UILaunchStoryboardName From 57621481803347cc4cd70230d17ff1dba42ed246 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Fri, 4 Oct 2019 16:25:11 +0100 Subject: [PATCH 08/56] Update AnimatedConstraints for Xcode 11 --- .../project.pbxproj | 39 +++++++++++++++--- .../Base.lproj/Main.storyboard | 30 +++++++------- .../AppIcon.appiconset/Contents.json | 36 ++++++++++++++++ .../AppIcon.appiconset/icon-1024.png | Bin 0 -> 56305 bytes .../AppIcon.appiconset/icon-167.png | Bin 0 -> 11276 bytes .../AppIcon.appiconset/icon-20.png | Bin 0 -> 736 bytes .../AppIcon.appiconset/icon-41.png | Bin 0 -> 1328 bytes .../AppIcon.appiconset/icon-42.png | Bin 0 -> 1328 bytes .../AppIcon.appiconset/icon-60.png | Bin 0 -> 3017 bytes .../AnimatedConstraints/Info.plist | 4 +- .../LaunchScreen.storyboard | 19 +++++---- AnimatedConstraints/README | 12 ------ AnimatedConstraints/README.md | 16 +++++++ 13 files changed, 114 insertions(+), 42 deletions(-) create mode 100644 AnimatedConstraints/AnimatedConstraints/Images.xcassets/AppIcon.appiconset/icon-1024.png create mode 100644 AnimatedConstraints/AnimatedConstraints/Images.xcassets/AppIcon.appiconset/icon-167.png create mode 100644 AnimatedConstraints/AnimatedConstraints/Images.xcassets/AppIcon.appiconset/icon-20.png create mode 100644 AnimatedConstraints/AnimatedConstraints/Images.xcassets/AppIcon.appiconset/icon-41.png create mode 100644 AnimatedConstraints/AnimatedConstraints/Images.xcassets/AppIcon.appiconset/icon-42.png create mode 100644 AnimatedConstraints/AnimatedConstraints/Images.xcassets/AppIcon.appiconset/icon-60.png delete mode 100644 AnimatedConstraints/README create mode 100644 AnimatedConstraints/README.md diff --git a/AnimatedConstraints/AnimatedConstraints.xcodeproj/project.pbxproj b/AnimatedConstraints/AnimatedConstraints.xcodeproj/project.pbxproj index ff20624..1144619 100644 --- a/AnimatedConstraints/AnimatedConstraints.xcodeproj/project.pbxproj +++ b/AnimatedConstraints/AnimatedConstraints.xcodeproj/project.pbxproj @@ -16,7 +16,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 5326FC411B0A8FF5003FF69D /* README */ = {isa = PBXFileReference; lastKnownFileType = text; path = README; sourceTree = ""; }; + 5326FC411B0A8FF5003FF69D /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 53D8FD641B08B9E100265E63 /* AnimatedConstraints.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AnimatedConstraints.app; sourceTree = BUILT_PRODUCTS_DIR; }; 53D8FD681B08B9E100265E63 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 53D8FD691B08B9E100265E63 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; @@ -43,7 +43,7 @@ 53D8FD5B1B08B9E100265E63 = { isa = PBXGroup; children = ( - 5326FC411B0A8FF5003FF69D /* README */, + 5326FC411B0A8FF5003FF69D /* README.md */, 53D8FD661B08B9E100265E63 /* AnimatedConstraints */, 53D8FD651B08B9E100265E63 /* Products */, ); @@ -107,7 +107,7 @@ 53D8FD5C1B08B9E100265E63 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0630; + LastUpgradeCheck = 1110; ORGANIZATIONNAME = "Keith Harrison"; TargetAttributes = { 53D8FD631B08B9E100265E63 = { @@ -117,7 +117,7 @@ }; buildConfigurationList = 53D8FD5F1B08B9E100265E63 /* Build configuration list for PBXProject "AnimatedConstraints" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -175,23 +175,35 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -207,7 +219,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -219,17 +231,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -245,7 +268,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -257,8 +280,10 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = 2; INFOPLIST_FILE = AnimatedConstraints/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -267,8 +292,10 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = 2; INFOPLIST_FILE = AnimatedConstraints/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/AnimatedConstraints/AnimatedConstraints/Base.lproj/Main.storyboard b/AnimatedConstraints/AnimatedConstraints/Base.lproj/Main.storyboard index b93b4fa..ce347f7 100644 --- a/AnimatedConstraints/AnimatedConstraints/Base.lproj/Main.storyboard +++ b/AnimatedConstraints/AnimatedConstraints/Base.lproj/Main.storyboard @@ -1,8 +1,10 @@ - - + + + - - + + + @@ -14,31 +16,31 @@ - + - + - - + + - - + + - + @@ -75,7 +77,7 @@ - + diff --git a/AnimatedConstraints/AnimatedConstraints/Images.xcassets/AppIcon.appiconset/Contents.json b/AnimatedConstraints/AnimatedConstraints/Images.xcassets/AppIcon.appiconset/Contents.json index 27575b9..6fe8d1f 100644 --- a/AnimatedConstraints/AnimatedConstraints/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/AnimatedConstraints/AnimatedConstraints/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,5 +1,17 @@ { "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "icon-41.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "icon-60.png", + "scale" : "3x" + }, { "size" : "29x29", "idiom" : "iphone", @@ -36,6 +48,18 @@ "filename" : "icon-180.png", "scale" : "3x" }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "icon-20.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "icon-42.png", + "scale" : "2x" + }, { "size" : "29x29", "idiom" : "ipad", @@ -71,6 +95,18 @@ "idiom" : "ipad", "filename" : "icon-76@2x.png", "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "icon-167.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "icon-1024.png", + "scale" : "1x" } ], "info" : { diff --git a/AnimatedConstraints/AnimatedConstraints/Images.xcassets/AppIcon.appiconset/icon-1024.png b/AnimatedConstraints/AnimatedConstraints/Images.xcassets/AppIcon.appiconset/icon-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..4a1a9de7f6ad69ba2280fc5250c4368846b7921e GIT binary patch literal 56305 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 Y^-*HM%6=&H7sNNxH`Ob=>iF!x09e}G4*&oF literal 0 HcmV?d00001 diff --git a/AnimatedConstraints/AnimatedConstraints/Images.xcassets/AppIcon.appiconset/icon-167.png b/AnimatedConstraints/AnimatedConstraints/Images.xcassets/AppIcon.appiconset/icon-167.png new file mode 100644 index 0000000000000000000000000000000000000000..0a5ec66a8746d77c19afa4db06b0e9e27145e92d GIT binary patch literal 11276 zcmV+nEc4TeP)SOUo>nkl{?NqN0}txXK-dB|Q1vgCpD0s!>+D zys0FURUxYq!3AxFSI;6@Dc*>o0zcwJ`(kVgHM~F88wWX@(qkLZm5MN*)kAs8ysMB4 z7P=4tuk?F!%v|gi;#W3DPxZTcU1ngI-!l@}CDfOX?}^Yu>5}}E^WOC$WZi?bJSIdu zp8-Ujbt~dx$6rZ@5@}sn0tHsS|gwjhTJ&-+t9N&p(~AX+Xz#u4q;aPBH%M zPH_(z7~EXjQajk4<%aKXc@$h}N9sDM>#}b7d@R3ou?46J;KaSQ&cW3w40Z|VbFn&4 z)PsE`88b#J9gVhlj@F;GS!_P&ayA>;w#!w>P0OnomUi!hmf~cKXHayi@p%(C*pZEH z-Z?Unj$8b&t9^UD@roBiFqjU(=7c^+P#UB`8clCj52s?VR0nC0clfu_R_8UliEuFA z=Ao8dhUPhzaIueA6rSSc-oO|(NhUdlm|dR`Bs&|_wMRSQ9Xa6@bWWOL2mfVC3I=!P zNwTHe=Lx?OW-i)t>mUrZ&dUG)aYwyvZ$>8D1o}GTFbj%#Nzu~&A)~>*l{+Ic{6P#y zfqQr|Tmf86`*v%s7Zojm21+eoWA0(FThMd+{m@DGA0$|cwE~1}x1x*S!(5V1tWXn& z$IOe^Tb0ujmyI3EL7v7?*tJMU&QaWa5NBq)&0pW=M!I53_@?{NQfY))N4_PZWVn0C zI}D2wcW*YhXFPl}wg=Vyt}KJ*|Fmhbh>V~p@3Anbs22)@0Toot7VEXHVgm6&dy>9r zQH$B#jAy%&0QkyT)ZAC64drC73{YUFyF?InO`M0?t&~r}X~w~&bjGbzngo!UMV(OL zT0$cN6~hu@nBbP0GO!xwOJ&Nv(?&9ubATp`>tCI95VN*8eHj406gef3Pg{mJI@jcF z5gB@JkVb9SxXLGURgX!u-rSOHrkbh_+PX0Qt;}+p$yzxv+efhH%q*6_1j_vu6B;Ye zcXAF{kC<>yLM)t|@H)vEqs*VJ&D@4I(CKV*AX{)Xgx}~|EZm>!znStBwnRMlYpdrt zU=!?&^_)f}QfEE}zS*i* z2L`!Ab>LTmKkofe9x?spWPkLKI~cG_E?q|sJA0a?c-`kXQ_kaEvI0JUl0p|r1wfx& z()T~o_ttGC2KPV2wrG~F!x#z6l`uyT8E~ta>pE035fuAV?!wpsou3Qxz*7LF;Mon=dNL zCwQpkYKv2|AKSys7E?pdyfzh(m?#{Gdjd>A(Lrt!uEVae5-tkqW|iKYlV1U1nA}a7 zexf48>MVYP(EgmVXglOmBEIK9o7U$98)7ki@iE-#v=WKRIM?J4mH7j|NN46S@_bStGNXy{)>QaE7v%O9PBsG?A(Z5{ zL>Y&%Np74(XsMo96fPnZpFm2frC8zZ&~0OmjUi>{YEPD9U$6qaK9mk0@kE4v6e#fZ ziSQgnOyRu@%D>tB3h20wr0cHnm?=WD1I92jGczX+<1&BYWSPRS9A;+bWD`Tcup5)i z_QoWQj4=r2{$tHipVEC@Z=WFldK}jYw)??!zpA>0J#Jy~!j&D59I_zZ?J4n3VPXuS z?<2fT%_eC{NQTTh_+1yzheF9Vq9^Aa6malA0Zs&sIs*{#7(tY_g!f+?m>Y17@naE0 zO}&sl6Ame<jnBI9G-7gRXK2r$Qm*s%3E~O=C2O)&7zw z83-KDFc}@j%J%5L7{;xFx?jQ*kX)C?h%O{R5<&ooUkSp4ERSVP z)o+Z~^v;b)lu`&!n_>TGC?=BPE818UHI9H&gC%cBE`S+HoaZ()j(qo(-R}K-uygL{ zpu7O^i)^B2E&#lXr1vx_#TB?9yTOY}Y zZ(_?Ha}#N0((JggGSs-p2Leb~ng~BPs42vWkD!RkjDa_HnTyD+>GPGX7@%e<0RC6p zIePfo`jnq|%g4j-Ibjqm&p#~3m3P81$PXww;a{Uk03G+$8E_Ky#D!vDP>%rklIT@w z8nsL_@_38+sgmwDSwT$JLcA^)9*%e6F)d%4zI*IoJ@VAV&3|#wg#O)Ev5aXQYg&MS z=a`FZWJbecWy25->GgC|w;B`&(KGpTg9W4{&abMfB&?vW;bId}pFZhzJ){F=!h8?> z{j(v<*0gtuYU|~;QCr@0*r(2j&&Rwc^4Q!?n++9t!TP32psJrhK12fb><4F0herA; z6q=|o&gO6X!WL1}1bra!qYZyG{9kM9Qg@9R?jm&m*ddu!9h3ehdjicfg_yCP^s5nZ z$iujdXNu3%VDc4DzX%7)l$sTBfX0u+XOt$x3@)*0D{PbkP{SsY2kZH$l_79M_lz6* z-Iw=pA-ZP23D@mEA;2&|BvisRQ2OCfK4l;l{WSu=+eiQm*`gttZ%1IXgonQydCIuB zm1H*unl0y=fQ2@_O#WFyw}lwm%W&#Zfr&&GBMZ50wFr&srI2IVCDed7jyd-utqKrRDywIr(YO3&Z{DCwEX z*C-QiVTqzIw~QHt>bS*b5DUX6Ck8vFqm76JVU(L;1XN*F1QWos-tCr=+qzh~ZS*#m z?m9W0LI?@NFjo9_YC@7IFbuqHk|427fw&@n;&l-t=gHQyqEg3U{aQ&@XksrGS*PGo zJy-W3;zE3PX5X<3N?a_>Th{f-FSa;q+Zjz;6hxD2^_Eln5QOWCqo@Y)KcC!~w2K5~ z2wCytqozmNZ(bysfW;hlX&_`rzu$0=+Rl$y6Nx5)Brb?|1iYFz8H`SplLu#RGs8cY zR~#hs6|=4V55nD@DE=MvLRBey?l=)7P) z1;V*$oMxFM?N9(37eUk2Ky1#j3Sa{9aEn0@V|bHn=M!Qv9TQCdF#I5FkZM;{+P`te zk{-`Z-rOaoQFD8ZnpeK(fJMwk5{pcDYbYLOo6-WqAP;w^pdF9R)iU0J^}2(R1ka@- zw1L{(;y9tlIA%zkmn)245XgHMa7JPDySR1KwpqAl(M=z1|I8V$J7?x2YwryZM%fSs zo$+NJAZwM0!Lprw&K~Qi&P%&ik~pU1Nq)^IJDW!6{`sdaTG{2{@k3oR>9y$tCRG+~ zRkp+^)op$<1bi7=b4Zxw$%2#lUABL0S1dYIvGs*W{U7QS8SaCiHLU*YW9SH zy8?zv;o`nK$85W{zMX3(0dn)m9qv8hU2Q8WCMSyl)V6`k9!c<#gH8QdMW76SqG)(m zsCX3OO&t+Ek|U&jK?ZAR6ALECsLbifTAF0FlCwWWL)$s1plXMIe7==y5j{C^@GlPh zWI)fAi92n@IwM4=qm0=Eh9L_Z3swL)F}i~Dkydf_VV6EJBYk?LS}pIJ_uZ0sVx%f` zKS7oX4}B5_0>&%T-#*`J`P%lbMO0TWIY4mB;UB^H?1U4N_0nZ^%7^(~P<@PK)iSDG z;93c`9@r&I-ESGyQ|Gbx%;)5U_=tbA@5abq65))sb?xpNvz==NJuq&oYxe!DxXW6{ zWG6$}Becb>MN6$iMY5*yrz$sBsc0dsqyvLgrXMxB1mHd_4NvfYAbfif=fVZ1`Mac| z5EjB+cT^|VyT@()-Iot=t)r{=|MdF(J_&w%{?TTakAN>had^}rq41suMq*$z78|T7 z0*w!Zn`Uotl!e?na!1!{`s=6Lt*TAC4US}O)sKn0f=$e&F>Rh5|G^%IT(9U8J%k_$ zxV5vFB;v;zlZqD$`lVGfD(9Y=G6hztCwGrJhW{1mnozOmombTWlaefO|0H&MIocV`Va>Y)=|+tJ;}zcpgp z$xcjPH-{EtlfprqN-fvyRw+!dzZAP^8I(shn$|iQ(BZBCL@wecWOoj zC$^6b;(b++U{F?bdSj}ax)6*}EpI19YQ`-ne{a?R*QPXSaq+9uH#>UpObvu>kwskv zL3wt8&YYm-4(~sri7l$}w78TNn@U9lY?}KTifu8AuH_^dmu|!(8XjzS;sF|&B zb-2C*pfe9|8o7)68tCScyBs}a=6`FT6yvbV694h$ie=d&wuA{ZpYS0~@JyFhwMC?u z#P@75bQ8mOJ3s^mxWUs&A`G5_)qx4Z5x*Q^di5sHPafjF1{yiH@5gid>^*S4a{-gr zp9lrVU1Q-uE2f|gpHd^SsdhpsvV?k+Yn{YK)Q_3A@nDwpF~4Vif`mYhjcp9iyhJ?e z^uZDdt3k;__gyHc+NSKj>)r#OkFDQBAa(#7)pN`ce9J^`Q*ibsD+-Rec{E1^M_G|p zsDL*I#uo$z^-Uu!DOXPo&Qj3(PrqGbUVkALe%1Ane{JpBk|_MT`NYK~TbE}fBzyAP zn{vJz8^NRBj0Fv_74C(gtp6dsH-CP_3a zabV93tukAUSHHXOEhBexUniZl-K2Yudrhr~FTB@prQ{Fi8hQVXQf<&+8UijxC&w*2 zbyT$nubh$99OiZ5Y#!)e7#k`@o9ATMhAL|6+s#~3R8du2ktv#5Rr1`Fp|0(T!mnEb zZdhq%SV{Ge;@n@$I;HFETDF9ZQ`xFZ=Cy$#31Yl|n%Aqo)nvcKHV(nN&S|+M>l1eD z;t}O~QD1W9s?JlZOB(jLIRDRCOE;;{iu>PDO5DJn%Z8R@hLtWET2eiLHoG45^y zb(@6!TAG9<4Wq7TV@0vi919;?5Eztj&f-;FrdH*cxTqpi((qStZXKD43x`&$?eO{h z-nqZDNEpy#**c|A)*uf`a(`v|c#)92XC|9J)`-|UC_d(PxpUA4FoW~_5T{?;>`T#H zH8H1&r{|bB$Gg>eLA`E|m#*pLzA>al!jR%6LrXL36hu+=u(HhHlBJ!~bpV76GiWfT zou6L+89N~!ErK+Ptf{(8HM$pV5eT_v^Pn3J&L6jDq#8)R=}*@wRizb6)~VrXRV7n1 zC3BXUOuUgqFrer1Va1stIn}TZFlKTnp`j`aOx&(Uk^(!Y3r zKi7QPNSE$1_K%0W?VQ+$)Uo%EWxQ>=r}e1iNA(rsh%LQ|CP!So??<)uso(x{AGeVb zkd~CUAO42jh)m}|gEn0CE|#c8CfW~g*yP+?-0YblX2s17`+u;iE`8gmJ={i0>i7Nk zpO1b;gm;ZOUgNf4I6FVi{V|ZY+%B|Qp$U(Ha&6UFPF%FF%?)w#qc;x!^QXHyCZ>&a z%2tyeIN|wrsjO(nJ>p7MMOB#*)9HFFQH=%vKV?SWa@d;}?KIYHq*yv`*whD3cs94? zE;+F@K*G%E^HuQ2I!VDF9|h0HqBxo&x+0-Sk9Q*Ku?OljA(h-BFKY8kt9oyAA zha|;)K6s~NfQ0FV#I+EH=X4+8@5nrS0%RWg%c*;ZNcQi?yjWA0esUs5!8g)DTg-g? zzqT=o|UEr#sdMpjwVu9BAv(Dh+;oI?-jzsCq8xB)2F{WZK&Hw&h6R% zKhK{2XqWaioKTyb;xe>(M?9~e=W~+y!PJaB5Hl8m9|LvFQ+&<`_2)VXoczRDZ_OO! zzS*=(-}$ee{a}v{Yb4O!OgKeW5}W~`j&k$UH3suNqoG2!u{j}tH~13Gw?Eh%W_kM5 z#}C+Sw)+Ot_PrLqbml`nI<9GU`jIquK6m+&n#yz7UZ+^E_%4d#4MQ^L6>+hmZvzeC zjM=YhI~?=qIV0x{bl*JMs%-I_=iFP`Wwpd=ZMzwC!UlY7QHe`vuY-WRy1BIKd+gf2 z=7lpJ-nHMC?i)r!OR8QQaerx-Rm_WR-fN$4z`PFXC*&0aXJ|{)%u7VdX*na4Y(>@% zOV@Tf{GkiSFYN8U8MH;wlDE&hr(gHw+93i6nN5^SN9~aXBvws{K{7Z67k z`NN_>6`d`~HI>v5LJel~IkFHqy$QkGUE$^`kpy@iSDJcQtxgn-#q7@%{R$tMu3voHnZ}XS@DNJMeYXbp`mzP#KvW@ZN_+no27BP9UFS) z+pfV|~)rka=1#n#?FfU}7%HhjTif=mf^tC><&e#nCt zSFY;n3YoffsCoIUd-v!!S7Q6ch^lhrBxH3+I33_^@T&TZxam*A9#m*its?Bf#CINE zy7;vb_a64(#no#%yTYVg4DI>TAINPvA+FXgHQJ!Zx71diVQckh`yB~tCUK!KkDY$W zhM{2*j$P3Ah(|77R)EDZxmwp}Pk->>&8CYO2g}>UQkUELwXT1gH0ePFGYOYR?dL$~ zncPb-zNnSjdx+bq@BEj}xc}(KE?BX)qbnTh(60XRQy$K3xl-kHbPtjq;>{G@DI{~t zLtmZ-B4?pVL>U7RKEBdP^IjXO9y+EbTbef1*`xp57tVO#m`5*IRomVb0;St!A35o< zBL`1~y|vs^K-sn4e**!x-;wBw(zCa80^zdOX?$ z&T_)#u6)S7h$V^Wdk%^kdjY`xiGKI-K|g=*aJPQb<-3l${qW}-6|<6TbX*?ogl8F1 z2A$a#8fsxU6;dR?SOD)-swHu|{{>a9?B>=(;+HH8Q!`BmP7+T;oH+0?%fi0;NO6qO zQo~NdA&?@%ZmcPpa<|^oJLA;vH;?+(=(;@*#cNnsi``dPBI4DQ{tebn_{*M^}fXwrT5oOZ} zNfRHATv5}p2>$#*)#@OnBo6uCpj&2$L^&4%33j7|nk*45kaNV&SylkabiTA> z?y{oIdR9A8fC(ut^vGA~hkbVmG)#uF+O?_{5&PuosE>q6Aez^+q1-8uKaMMwn}4=Z zf@w@sGiAE#dqJr7&3a}+o^vEP(Utp28Hwj9UVFZY7~P|g_swM^30xdrqaODVs)XPG zFx|?ZUkvyQDW679<1>1v6abVXeN=wLpf8+0+)}da4N;u|p&a%s49sMvtT&OUKnhfQ zN(t@4J*doM!EEm-*qUHS59)5ByQI+R4a?kzBF_PIKUsY(3fV zT!f7H5MWA+fVoh=iWtXylPCtiuCO}>4x)dsaKVn*v~F@$A6HN`wYpp#SVjxy^NYEi zyRR?e3AXtsEZ9YWfVKqa>1hKmBu|J0K}v(f$Oxd@Fx6#KGnSOPf}$m>yDV7Qqi?sR ziLouaUuZHddc5W}R5NEw9;rUSaJhsU7C%`>{P-HaiZ)(-jK(=K{#|n7eY?M1?+T6H z7;*c7n@weyt2rA94{J5dB;#^1lTkTaGHX?>8vF_yvV{ji^I^>97B>yZs33^lN(XK> z**1ptCbGM_WqulC%c7>4Msp6K3}-_8LVi^hT~!txeVSSzh+*JS0j8QXnW0?4z<4xx zzcr?V%SN&w6b}ehej0qwT&{IEcrx9EdPY--%ou=65-vbwlCWS(UQ#iYp2ynwCJlIIV4}y`Kv@ZgSH97 zA=G9pD_}oK>M9SSV_d}%P$ze*U4Rp+);&d*R}p zK1@s2f9gQ$(TRIp|Ncqy+BC-V{`tS%tN(OLc#6vc2YWq;3^huNOfhbrA>x!DK529W zc1{FWuEzy`I3pk%1oLeO11R-pZ}agMtG2n?gZF&ri|K0}FAxxuV)Z{ztv@^I%xy;h>cFQ5^r)uO|0S|+i&u63)rTkEGj9L7`c!LAZQ1?Jn+|=fF=1I* zt>#M7u?wVZ={n(Hm?3gCMt~Cm_!PgkCl(UPDcgXF`nuN9{+mv@@zBS2=slaF!xpQQ zby-t*Eg?v=d_n9c5E$-XQMpZ7WoxOE|m>GAf%>p-#kq8pT8gr;^Huyl9BBd zQZyXP5I`c{VV&RaxnrOEZun&Wpq4|n1D`l{=s4un2lwAlBnTd4_Til2|M$*WV;8g# z=nd?dnfARO3&06sBoV1V&`OA8^IR=2i)CLVDG>6aI?!1V>t&X4GG1qXU2(?|501O! z>fDyMu7UTIQ5W2B-|>IV?VoEt&0Ai)vSvLkz?Ry@d)tP+#71~HDWCBw#{%g_G>!dD zU#=+L{Epk3*(;#-d%L}H#a=J==(L(}N;qB!j!7X@5VWSQ{cWEddE>}qn+x;ji}>41Y6q@9g@E*Hns$ZpKT{(7iTL?;yK9Xcr)2sx z53+4N@>d5wF`&m1^L@<61^O|mIp~kNv) zC1||z5LU&AIBvlE#fXnR=(>Ni6@9T9#ql4Rduw*KVy3pfoyiR4Vj$b3KOFMNPQ7RS z_Y(=t*FoNT6r;Hhq`tK4(mRj1=exVUdgZ%kzg)3XLJysjdTLXktQoPCH)os+rO?Ct zfv8uP(=GH#-0WLHJok!&#rlbDQ!bT@B2)tKHe{Rs+XEjxcG%})evn4rJvC^&2}q;C z<=Z{afA-WHKb*7G|GhI}?1Ihz+phNuE&$!xFe+H$s#-#xLsx@$if@wVb#Vf_fDRPd z;dkRp;D`B(5`9mE;VQhBqhBm!TYlYsPhY&_+v!v`TsdLO8_9>dp%{WDM@T@@W#Z@y zu6|_V-Z#8|#@uD4cJ)&~2gJ!9q1-1phv*NnZ({U$Ag{bI2uN#>1@CI|h_0J@vv(6i%ezZ}q_jNZ!BKcFQ<0uP!f*XD?AK00N~F}IC5>c){LXrQM& z%DvXsr#rT*Q}!=05DRosiyED#y);(xifzzA$J}7J&6{oz14G+&pp(P6=cFMRA}?6A zs(a154*j|;NU++KyOHJUtHSK(*y<8PO6MbYGQ5dJSAyUtqi|_ zVssL!e?0iXo%+lKyy8uiZY;6Alx)btv2Bp}fcWpGtjn@HkNEp{c6sHh_s)5_Vwa}g z`2O3L&EdVXUmMXxb^8ExHsCn&0_yNBs(WzM5f_cuiQ{A&7_I7U1&RD*gi@*al1Y{Q z)p;57e}B+J#}4~6IbyV{HLZq7Hc4DvfbJnQtn@$6p8C5F=4^AtJLipEutj51O+OhMF8$347<89a+W?qtN^oW*+#AE=&6(hTFg7YSb4~H?S4;Ovg4cW zJ!Eqt!n0X18}gb&KSLmj74a99<)&DYm5@|BVAC%~U-+{}zS!^j_eacIRx+is9~{JV zQ}KYX5#b#yWQ#{{7=UjWD{y!NuG2MdZQKLGzU$jH7HP_L9ce*yWnA@95@s0RFe_gd~nK^AKy0SxL2p` z>V)IS?>YANqE25m zb^m6$39=`c)znG_WoZj_yvT!SYh`)d2qcP{+^Jpd6?;8%*-o!F%*xu@T>ES&>PRS3 zh~W*j`1cnt(_A6a|LOpU2Oe^#2p!pdluXZuYz>9o?y?6uQL;1a-h@J;-a5zIZ8 zfT)4!YZ>$Zq673>Btyfz3I``=4sV71o1qTjma-_u*pw@#bX( z2Q`C6Y&IGMIVo-BLlXPCTlg((qNiE@kX>{n7$T zW1=UcA~K>t4yJ?%yO}V-an@+2_sAj{+eXoyNuI%pukgiE3KA8=6fLt3YbkBAMJ6yT z%nY-IC<6H!8*XCgE}4?pGS}`RGs7TR`bW(>Xn>+bb9n(_q^Ume;Eai)FJy7rV-HCa z(c?L8ZKFaC-rF(I7fs2x8=UfaPh5~kGaKPINTCh0(-}th(!dNwODAyfp%JT?J&HdV04Iwo ztwBrkV3Oif&ohE8t1`ja)B>(r{77q3H9hqS|8V zmn!3|alOb8`9q1}Y7k&EPF5!`z(H&Iohd32wiI-zsn$?SMlz#5gIF3s;!j3|sn_)* z4FFkgK5FDRaa!&!qX;__4%XREdO0>%#Py%6uZWQ}NwsCV#XTkZ+}D42Vd7BrDHkqD z$D#O(t;ExTPDd-atx`uX7v(!Tg*X3VRpqBiW@PnZt7C~|2it&hvmq^c`^qVL}Mvsde3*#3K{tEIIsfa(pX~Zbl zjUzcnyoOF3ZD8?beSA228_SB2+i#cu%YU!vw_k31g2I&+`ys_;#x>-<_3M; zu{Qk`js}-a2Pp}vfPgJ2_pxA}PXXfzrj`!M-3QN0-ZtG`Af6&)mJ$p|qPc>F0|_X$ z){eHWm;cK`6h9N`c~5k|yiXN`uLCJ0UOWc%+}FRH*eIr~W17Jgc+BqDF)uF|HRG{B zKZk{;`R;(?00-aY8IH9<#EJZM~ith;B zb(x7=!})hLIL(hxlp_%;_Ua1_E?EDI}ZGuI3bM^1=d71&V1X!0k&R)wXk#ZyY$(aFZ5*t%PUs6E`KE^d}PInU##%d?Cc zsuO5w77G0MY&n;m_loDo00DP-bFNtH+*fOO*H8GevBd=*{!`iz(<<&6!{)6IM~Q$P z#B};@K}y`dbM!W_Y20F~Y;369He=sI?69)7+C#-K((??yghZ61GwQn^YmnsOnW0Gb zmLMRhIrEnATuZd`&S;R^Yxk6R0Y(;ZP)qk?`WBik1{e>T>SObQ?+T6h6eGz_Sxy+} z*)N}hPDiMIbRR(t&rc@I%2_h#3PwimuEQAC64C*VInQiz%NUW{(=y0YrHgVRRoXD1 zzc;n3e(*?zcyDlwRIn5t9z_gwwW8j5^6YNybD+V~9;z2Bc6U@W=z4gph+6py3#%jh zO<(^wybFV*>f8`N31&FOcNysjFanP zq^?Y?P08y!gnW!~eVGK+cKJp0D9^v&GPe)n_yt&vAolNb4=Lu+OFM`bMKtFmMJ`ib zq{-;jJjfI)PT;Alb@}{~s?lw6moA263qhn@@5p)DiJc}jmhRrp12NvlJAV4{0%J}S z^IkJaM=m6?`Gr!A95Wh$y;4{{{;q700YTiH_kzPAhOfR}$2>KD5>X=XAnk-uIiyO# zl39)@VO4CdLzq%|70e zJ3IhDPsk*XPm`*mNIRDYr#De1NjZvw973TyH3%&jjnDSOTKZpA@#htvr;1M%WNx@t z3c1$s1N)`tYTi>>3ohfom#H$yYDnt-Q!mNSj0MFv@lR4XNb@c~{5h}V^ zGreE^g*!>NU(ZcF{jo}iwM2>b%XoV|59uI$sXNgo3JezPz33>crTwL^`*A)oRTfJ4 zV8MG1^zNW5z>=3?QS}{5OC(}`lpENPoV7c#2&R)xCqkyzu@-5dx zCj*f0h9Dxc4_!3yH`a>7We2uL^d6Tni0UOIwfnp|>+DU(H{5W7WA|Nyo6P-DQ;(_1 z;it^P+7X8_0iwCcf+Oirf76D`#iBFn`X9spXUhXO#OzD3&B6Wv0000xN#0004uP)t-s0dL;; z?1cC2iu~#){puI`>r?&e5&h~C`0a%J>oEH3UH9#f_wA4T>K^**Sp4cH`0a}L>~{I= zb^Pib{puF@>~;I=IsEH6{OU0H?0o#{FZt|t`s-Z!>r(maXZh=B`Rii)>O%bMC;IDQ z{OS_@>K^&*Z~E(5{pub2>pJ)Cll$vK`|C{k>~8z(OZe=4`0bEbnze(muQ7+r>gSGw zu%Gzti#LkI`0RcRblEb8$CSFD7kbs|<7Hf(vO$l*_U)7U>tgrqlK1SA=iy@6+jslx zQ~B#*BY@Af%98u*P4w%FiL;JqqoK>xeWSvo`|CvV=UiZ(qac3DE``ECj<@jWfUw7W zkhYEych)(Jx)FEOiL-_D=sx-CJDa}dPyFnz3u`|3LT z>oD@=Hh-;#@#Q!B>Mwn*qx}UAwgZ%3z_UU6!mbW*G!|ml~>ES*6>K6Iy zUH$74^ypwplesd7#r*0K_w9@O>q7nM5&r8D*|JoE0003GNkl$lC?wr$(CZN7N3*K5DoOtL8Y)4{5XRW~XO!?4-dSWV!n<9YsrGF(IDa`80aR8{3v zj^oCw=rCQOq1;m4GH32^I1D$5x}(uSpxN*7dx#%-mUduZtMnI=yUE_#w)#bo#-_@% zu|(n$sm|2RE&kozXZy2w(slji6_&TwSS+T)kxwSKVcO|&FpwmvPm<-7# zGXm3S8FPV&VrB}Mo&jdlpCpZgLS|`sWp!1v427>`;nidM}?LUOHL+$AJ!U_FOv+3oWm=fC7;`ilR^S(X-%Lkrg5&*1bA*1S4rT$VhP+<9i zJo!cm1p@4cfcvBLfby*JDHNE$Cx9bB8N_7?3Ifu|0zU$V4GJya`WB&*QVB+4V~1f2 zA;kGevBbzx*;7iNTJq#7X*2LE-q%C_ri%SY}|Sc)WT`aWz6ZkQ&ku$ zd-!T^&3^{$)W-Ql25(jEkj2F?t6VXQlzhFfHm4Vzt?+L9L*)~4b-qzaoo>ECq3IO> z)G1cDIBUd(XT|yQ!xnY-sF~jQ)Hgl$fCwwCCi0pP0>puAsewc&;jJ&q{Cm8{n{5vy zM-_>s>&Ko7W&K#`M`dXU<@3h&R;E4e zi#?5Gg})xI_k4?kG2wPyu(5HMKqY_z^LU0RBVrU32Vb@&UN9$Kw6J%=1#{9RYeH^u zIPum(gB=wUvZ^Lot0h_3chy8I`%Yx>r>Gr-EeMKCQ?)w7Mf2@#?dF}Xbvr9oG4jz{ za%5i9(syPJSQ!;&SJlg#1W-)uGtKs|xmbykIP!R{&>8Y-tKCsyg#Qnq`BBM*4M~;Inf)+|p@s$7mkgWRwbEq)Qop-0;1R^Ig05%Acbqx-PIjQ! zAwkZCL+13Va=~yxa))}DkaB{AKwq{db(%T#er}9k)ZifJ+yV3Y*Er)x4&2jeh;M&! z^1r*i>&Lr0`2}uX>iUieKl?fpim46(;*?K|a?b@zG6|qvw6a;?^mXK;Nbq@#Sjf|b z`&?l2%32VWkr$a7mCN^UP!3bx_5$WHb*M)z-y4+E1(z*>PUs8fa~hPqq3&;#Ey(uQ+bo^b zV9UEZ2LE%sgNp{8H<#o(#U@V`aF`nNUQY$6^+53u-Sn?d^6e3ycADM0>JiT6A7u&*1bA*1S4rT$VhP+<9i zJo!cm1p@4cfcvBLfby*JDHNE$Cx9bB8N_7?3Ifu|0zU$V4GJya`WB&*QVB+4V~1f2 zA;kGevBbzx*;7iNTJq#7X*2LE-q%C_ri%SY}|Sc)WT`aWz6ZkQ&ku$ zd-!T^&3^{$)W-Ql25(jEkj2F?t6VXQlzhFfHm4Vzt?+L9L*)~4b-qzaoo>ECq3IO> z)G1cDIBUd(XT|yQ!xnY-sF~jQ)Hgl$fCwwCCi0pP0>puAsewc&;jJ&q{Cm8{n{5vy zM-_>s>&Ko7W&K#`M`dXU<@3h&R;E4e zi#?5Gg})xI_k4?kG2wPyu(5HMKqY_z^LU0RBVrU32Vb@&UN9$Kw6J%=1#{9RYeH^u zIPum(gB=wUvZ^Lot0h_3chy8I`%Yx>r>Gr-EeMKCQ?)w7Mf2@#?dF}Xbvr9oG4jz{ za%5i9(syPJSQ!;&SJlg#1W-)uGtKs|xmbykIP!R{&>8Y-tKCsyg#Qnq`BBM*4M~;Inf)+|p@s$7mkgWRwbEq)Qop-0;1R^Ig05%Acbqx-PIjQ! zAwkZCL+13Va=~yxa))}DkaB{AKwq{db(%T#er}9k)ZifJ+yV3Y*Er)x4&2jeh;M&! z^1r*i>&Lr0`2}uX>iUieKl?fpim46(;*?K|a?b@zG6|qvw6a;?^mXK;Nbq@#Sjf|b z`&?l2%32VWkr$a7mCN^UP!3bx_5$WHb*M)z-y4+E1(z*>PUs8fa~hPqq3&;#Ey(uQ+bo^b zV9UEZ2LE%sgNp{8H<#o(#U@V`aF`nNUQY$6^+53u-Sn?d^6e3ycADM0>JiT6A7uuV4P*i6i%}o4{wGsV#1abI&pYDqV0K zJYDBoA|Y7L41MkNUm;=z;?WE7V=#yidt;iG$cm0N7)eYbJ3*}tkG|~9lRNf|#~*De zQVId>h?paBU&4?R5XcolYoHJ_hco!7NNV4A3!Mx4R`hRiK^ut*eGY|`QXrIGk00pw z1BmoG(E*{=`gUTh5ZP$i7Hi2K5pdV9v!wug2Fl2G7RYyU(_5+vc@x+uXt0 zn@&a%8F$KBJ7!)8Q=qc1NE@`^_+bSOmV?Mj1gY&M?Hm{fGIwC z`$_+Nwz~a;*UrgHNhWkm#!JOEt!7GBL|wChQEZS-!2?LK?>a~d6WoX2V5NNym~;=% z{KFGRCz8%zo~nN5DIFl0U87Qq*0sYhtP9IEP78?#uMow69SpcJtJVpK8w`&L z{pzurw8upB$m8aGfuC^rB3nWNpo*#!H+15HaCx0>ya0s<3c?P{?g>&;@Xft^8G^z#_D z3IuK_=3@@6rpBF=7y9voO{DDEgOOXiO52X!4P>xJnBo@{$qOJA41+(IZN&YQ*b%*D zgZe`IMu0`BB-mjXaPbRAue++5GVQ#oeYdW;PQXvS+jHTxH-y2W>?*_|Nikzd$nBsu z@KvJB7~!nkYp%Zk;0cst_wFoxWN-dyWe2gfgU2;QoFlf(4EPXrY<7p(3qlQH^1mR+ zWT+;=0L%c72@)KPXb(wcA%C9IDTGuXm9Zae_TfY+18%$!mnRl3NiL)KoW)+A|#%KzW2Z>^k40t&((kKyay^4^)s9j0wD0c74*f3+F;y(=t%<~I^1EyDAnjKB;lF7Y!yU2k-o6DidA49y z@|bXX4Y8U?tTr64&5s=&iOc`j^%2;2fG3`_hGXf9mW9SV@KG3~oNs^jHtt zY8o5EmU-?#aogWkcMnau-=9AB-Y=ei4+u)g%cvNTq|@|RXJsAAV=E}M=}+!2ebwLB z^bXIWDYFls`QW#jZ_7DQ$;lRm(`y)`sOvT07WjwvRJ`UNs}sqYGzIpaQy=+3+fBag z28tZYs;eZ#ED~^fwXJvvsY3MOg{~s1-f;06sN1C3rjs7~`KzxZy|FYgz*Kn0jWZ*RVM)$rJ)`MvtMr+)UT>jayMPHzGyosc+?6ICXQ zPBMaWD!A8N-F5L>|MB+ARwh$bKq`@dDSs5`6KW_{iPg80 ziifKf#aL|33%5ZLVL?=V7qJj=h*F|huX7P-Y%X)kmcitVU42Vvyw>g(G*`D9w?r51 zR@`hVM~cL4hecF4JYcGOA)VR5IHvY^iQw)y>_xYTD1}KdZNLS<$AV0g@q)t;R$EjBi=m!d^9F2m!+ z#3@kEx~PtVb(mSiBUE}mr^Vu`j+I!WOBlm-yIV{Xu;}3Y*x;PV+yuy|H;jcF*Y@-s zr=}!YCk*1MjAi{SzQAHg`5(>6^CGho2L~4ZH?U)c=gjR>4Ziq-%Mj?SGLP}P4D`TJ zyKR3J9dOuhe=D8CxAheM$HZ~WGv92!ylPSOM~}39@1a-skIW{Rwk>Yax#e5z@oDx^ zbM&);?R((l~0z44QGta|!DRlsSt zj5(z;HvrS>!TN^oFcT3ES8 ziwO&0I{7!>uUzDQv-vM|;k~9W!VKtzQM%|;T7s6+;ONXBJ^H%uJ@}?uR($!?vQE4< z%04k*oho%*HFoIujQ2yZ%(Z9Lc=XVox--kSa4;xVm+-MK(x5DPTqRk^J5OV@t-e%SeUy zX&mRmVMX7Zf%z0oveTdC%J_PF9om>8W+oue;2Na5)A6U@6y!8=BX&w*=*&3Stb`0q z?b&lxLzi~nRRY|^Mn_OR5rxQzxtH0ID&tlQHf(un+o5pFe&PNr0Ql~h0oPE%lO z0d7%Qk%;^}!ZfTZa`EGCOz^8ev}LiPU8`3mbw+LcMWR6LQf1MaOeBLi(^;nxCHzsO zCRF|Ew=BOwD~<@A^uW)z?g5qb3r_*yzDyx23e)`0;Yk_PSHGGg+3)IYg_rE4-E&we zxtTs$)$<%5m9Q4+jLpPp+UyiRM_^2ZAPGSBCdp&c%rJF7Zd3IQfE_6X9LgxjEK=KV zREqKKlw=zz^XTUizev^W<^sGSpa6--B0)EV`?vGXMuSo-kY3;C64_Bs1955xvs^h# z3WR>%N+SrAjNcR+l0-Wg(^neSVAK*{B!`_(WAWCxL2KnvQ$_m*Ab)Dn6_ryc00000 LNkvXXu0mjf{o2?p literal 0 HcmV?d00001 diff --git a/AnimatedConstraints/AnimatedConstraints/Info.plist b/AnimatedConstraints/AnimatedConstraints/Info.plist index 8d07b46..bd1ead3 100644 --- a/AnimatedConstraints/AnimatedConstraints/Info.plist +++ b/AnimatedConstraints/AnimatedConstraints/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - com.useyourloaf.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -19,7 +19,7 @@ CFBundleSignature ???? CFBundleVersion - 1 + $(CURRENT_PROJECT_VERSION) LSRequiresIPhoneOS UILaunchStoryboardName diff --git a/AnimatedConstraints/AnimatedConstraints/LaunchScreen.storyboard b/AnimatedConstraints/AnimatedConstraints/LaunchScreen.storyboard index 76ed3d1..8d412a2 100644 --- a/AnimatedConstraints/AnimatedConstraints/LaunchScreen.storyboard +++ b/AnimatedConstraints/AnimatedConstraints/LaunchScreen.storyboard @@ -1,7 +1,10 @@ - - + + + - + + + @@ -13,17 +16,17 @@ - + - + @@ -41,7 +44,7 @@ - + diff --git a/AnimatedConstraints/README b/AnimatedConstraints/README deleted file mode 100644 index e00a98d..0000000 --- a/AnimatedConstraints/README +++ /dev/null @@ -1,12 +0,0 @@ -======================================================================= -AnimatedConstraints - -Version 1.1 21 May 2015 Switch to changing priorities rather than - adding/removing constraints. -Version 1.0 18 May 2015 Initial Version -======================================================================= - -An example on how to animate changes made to autolayout constraints. -For further details see the post: - -[http://useyourloaf.com/blog/animating-autolayout-constraints/](http://useyourloaf.com/blog/animating-autolayout-constraints/) diff --git a/AnimatedConstraints/README.md b/AnimatedConstraints/README.md new file mode 100644 index 0000000..cdbb29f --- /dev/null +++ b/AnimatedConstraints/README.md @@ -0,0 +1,16 @@ +# AnimatedConstraints + + +An example on how to animate changes made to autolayout constraints. +For further details see the post: + ++ [Animating Autolayout Constraints](https://useyourloaf.com/blog/animating-autolayout-constraints/) + +## Version History + ++ Version 1.2 - 04 Oct 2019 + Minor refresh for Xcode 11. ++ Version 1.1 - 21 May 2015 + Switch to changing priorities rather than adding/removing constraints. ++ Version 1.0 - 18 May 2015 + Initial Version From 6275b08a928f6c8ab741c0b31a5f699284974c20 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Mon, 11 Nov 2019 10:46:19 +0000 Subject: [PATCH 09/56] RevealStack Update for Xcode 11, Swift 5 --- .../RevealStack.xcodeproj/project.pbxproj | 16 ++++++++++++---- RevealStack/RevealStack/AppDelegate.swift | 1 - .../RevealStack/Base.lproj/Main.storyboard | 11 ++++------- .../RevealStack/RevealViewController.swift | 8 +++----- .../RevealStack/UIView+UYLExtensions.swift | 5 ++--- 5 files changed, 21 insertions(+), 20 deletions(-) diff --git a/RevealStack/RevealStack.xcodeproj/project.pbxproj b/RevealStack/RevealStack.xcodeproj/project.pbxproj index 371049c..ee2d5f6 100644 --- a/RevealStack/RevealStack.xcodeproj/project.pbxproj +++ b/RevealStack/RevealStack.xcodeproj/project.pbxproj @@ -96,7 +96,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0830; - LastUpgradeCheck = 0900; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; TargetAttributes = { 535B22581E915D1C002F6D4C = { @@ -108,7 +108,7 @@ }; buildConfigurationList = 535B22541E915D1C002F6D4C /* Build configuration list for PBXProject "RevealStack" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -174,6 +174,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; @@ -184,6 +185,7 @@ 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; @@ -191,6 +193,7 @@ 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; @@ -223,6 +226,7 @@ SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -231,6 +235,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; @@ -241,6 +246,7 @@ 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; @@ -248,6 +254,7 @@ 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; @@ -272,6 +279,7 @@ MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -286,7 +294,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.RevealStack; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 5.0; }; name = Debug; }; @@ -299,7 +307,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.RevealStack; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 5.0; }; name = Release; }; diff --git a/RevealStack/RevealStack/AppDelegate.swift b/RevealStack/RevealStack/AppDelegate.swift index 5bd45f7..62ee578 100644 --- a/RevealStack/RevealStack/AppDelegate.swift +++ b/RevealStack/RevealStack/AppDelegate.swift @@ -35,6 +35,5 @@ import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? } diff --git a/RevealStack/RevealStack/Base.lproj/Main.storyboard b/RevealStack/RevealStack/Base.lproj/Main.storyboard index d28c0af..ea10869 100644 --- a/RevealStack/RevealStack/Base.lproj/Main.storyboard +++ b/RevealStack/RevealStack/Base.lproj/Main.storyboard @@ -1,12 +1,9 @@ - - - - + + - - + @@ -23,7 +20,7 @@ - + diff --git a/RevealStack/RevealStack/RevealViewController.swift b/RevealStack/RevealStack/RevealViewController.swift index 8a59386..73eaeed 100644 --- a/RevealStack/RevealStack/RevealViewController.swift +++ b/RevealStack/RevealStack/RevealViewController.swift @@ -34,10 +34,9 @@ import UIKit class RevealViewController: UIViewController { - - @IBOutlet private weak var rootStackView: UIStackView! - @IBOutlet private weak var imageStackView: UIStackView! - @IBOutlet private weak var revealSwitch: UISwitch! + @IBOutlet private var rootStackView: UIStackView! + @IBOutlet private var imageStackView: UIStackView! + @IBOutlet private var revealSwitch: UISwitch! private lazy var coverView: UIView = { let view = UIView() @@ -81,4 +80,3 @@ class RevealViewController: UIViewController { view.pin(to: stackView) } } - diff --git a/RevealStack/RevealStack/UIView+UYLExtensions.swift b/RevealStack/RevealStack/UIView+UYLExtensions.swift index fe04753..25b5b9e 100644 --- a/RevealStack/RevealStack/UIView+UYLExtensions.swift +++ b/RevealStack/RevealStack/UIView+UYLExtensions.swift @@ -33,13 +33,12 @@ import UIKit public extension UIView { - - public func pin(to view: UIView) { + func pin(to view: UIView) { NSLayoutConstraint.activate([ leadingAnchor.constraint(equalTo: view.leadingAnchor), trailingAnchor.constraint(equalTo: view.trailingAnchor), topAnchor.constraint(equalTo: view.topAnchor), bottomAnchor.constraint(equalTo: view.bottomAnchor) - ]) + ]) } } From 1d60dbbacc897ef05ee13c71fc940ee8f42a343e Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Mon, 30 Dec 2019 14:04:00 +0000 Subject: [PATCH 10/56] Update for Swift 5 and iOS 13 trait collections --- AdaptType/AdaptType.xcodeproj/project.pbxproj | 5 +++-- AdaptType/AdaptType/SettingsViewController.swift | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/AdaptType/AdaptType.xcodeproj/project.pbxproj b/AdaptType/AdaptType.xcodeproj/project.pbxproj index 17b4070..5390100 100644 --- a/AdaptType/AdaptType.xcodeproj/project.pbxproj +++ b/AdaptType/AdaptType.xcodeproj/project.pbxproj @@ -98,6 +98,7 @@ TargetAttributes = { 53ED33A02165588D005E895D = { CreatedOnToolsVersion = 10.0; + LastSwiftMigration = 1120; }; }; }; @@ -293,7 +294,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.AdaptType; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -311,7 +312,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.AdaptType; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; diff --git a/AdaptType/AdaptType/SettingsViewController.swift b/AdaptType/AdaptType/SettingsViewController.swift index 029323b..c2a4310 100644 --- a/AdaptType/AdaptType/SettingsViewController.swift +++ b/AdaptType/AdaptType/SettingsViewController.swift @@ -28,8 +28,7 @@ import UIKit -class SettingsViewController: UIViewController { - +final class SettingsViewController: UIViewController { @IBOutlet var stackView: UIStackView! let backgroundView: UIView = { @@ -42,6 +41,7 @@ class SettingsViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() setupView() + configureView(for: traitCollection) } private func setupView() { @@ -51,7 +51,7 @@ class SettingsViewController: UIViewController { backgroundView.topAnchor.constraint(equalTo: stackView.topAnchor), backgroundView.trailingAnchor.constraint(equalTo: stackView.trailingAnchor), backgroundView.bottomAnchor.constraint(equalTo: stackView.bottomAnchor) - ]) + ]) } } From 8d552311d4cae788000af0407246ca7e856d665a Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Mon, 30 Dec 2019 14:23:11 +0000 Subject: [PATCH 11/56] Update for Xcode 11 and Swift 5 --- StackMargin/StackMargin.xcodeproj/project.pbxproj | 5 +++-- StackMargin/StackMargin/Base.lproj/Main.storyboard | 14 +++++++------- StackMargin/StackMargin/CodeViewController.swift | 7 +++---- StackMargin/StackMargin/IBViewController.swift | 3 +-- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/StackMargin/StackMargin.xcodeproj/project.pbxproj b/StackMargin/StackMargin.xcodeproj/project.pbxproj index 02c18b3..ad65d2c 100644 --- a/StackMargin/StackMargin.xcodeproj/project.pbxproj +++ b/StackMargin/StackMargin.xcodeproj/project.pbxproj @@ -101,6 +101,7 @@ TargetAttributes = { 5315FB282145A86800E81704 = { CreatedOnToolsVersion = 10.0; + LastSwiftMigration = 1120; }; }; }; @@ -297,7 +298,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.StackMargin; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -315,7 +316,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.StackMargin; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; diff --git a/StackMargin/StackMargin/Base.lproj/Main.storyboard b/StackMargin/StackMargin/Base.lproj/Main.storyboard index 46b305f..966a3c5 100644 --- a/StackMargin/StackMargin/Base.lproj/Main.storyboard +++ b/StackMargin/StackMargin/Base.lproj/Main.storyboard @@ -1,10 +1,9 @@ - - - - + + - + + @@ -93,7 +92,7 @@ - + @@ -111,6 +110,7 @@ + @@ -130,7 +130,7 @@ - + diff --git a/StackMargin/StackMargin/CodeViewController.swift b/StackMargin/StackMargin/CodeViewController.swift index 1c35ff6..a580386 100644 --- a/StackMargin/StackMargin/CodeViewController.swift +++ b/StackMargin/StackMargin/CodeViewController.swift @@ -29,7 +29,6 @@ import UIKit final class CodeViewController: UIViewController { - private let chapterLabel: UILabel = { let label = UILabel() label.font = UIFont.preferredFont(forTextStyle: .headline) @@ -69,7 +68,7 @@ final class CodeViewController: UIViewController { stackView.topAnchor.constraint(equalTo: readable.topAnchor), stackView.trailingAnchor.constraint(equalTo: readable.trailingAnchor), stackView.bottomAnchor.constraint(equalTo: readable.bottomAnchor), - ]) + ]) return view }() @@ -108,7 +107,7 @@ final class CodeViewController: UIViewController { scrollView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor), scrollView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor), - scrollView.widthAnchor.constraint(equalTo: containerView.widthAnchor) - ]) + scrollView.widthAnchor.constraint(equalTo: containerView.widthAnchor), + ]) } } diff --git a/StackMargin/StackMargin/IBViewController.swift b/StackMargin/StackMargin/IBViewController.swift index a02ef44..b7dc7b9 100644 --- a/StackMargin/StackMargin/IBViewController.swift +++ b/StackMargin/StackMargin/IBViewController.swift @@ -29,7 +29,6 @@ import UIKit final class IBViewController: UIViewController { - @IBOutlet var stackView: UIStackView! @IBOutlet var chapterLabel: UILabel! @IBOutlet var textView: UITextView! @@ -63,6 +62,6 @@ final class IBViewController: UIViewController { backgroundView.topAnchor.constraint(equalTo: stackView.topAnchor), backgroundView.trailingAnchor.constraint(equalTo: stackView.trailingAnchor), backgroundView.bottomAnchor.constraint(equalTo: stackView.bottomAnchor) - ]) + ]) } } From 9b4739fb9aea7a0385c74943882acacc98142c60 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Tue, 31 Dec 2019 16:55:57 +0000 Subject: [PATCH 12/56] Update for Swift 5 and Xcode 11 --- .../DynamicWebKit.xcodeproj/project.pbxproj | 11 ++++++++--- .../DynamicWebKit/HTMLViewControler.swift | 17 ++++++++--------- DynamicWebKit/DynamicWebKit/readme.html | 8 ++++---- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/DynamicWebKit/DynamicWebKit.xcodeproj/project.pbxproj b/DynamicWebKit/DynamicWebKit.xcodeproj/project.pbxproj index 6d742f6..f0255cc 100644 --- a/DynamicWebKit/DynamicWebKit.xcodeproj/project.pbxproj +++ b/DynamicWebKit/DynamicWebKit.xcodeproj/project.pbxproj @@ -99,11 +99,12 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0900; - LastUpgradeCheck = 0900; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; TargetAttributes = { 53A2B5361F94DBE500095FAD = { CreatedOnToolsVersion = 9.0; + LastSwiftMigration = 1120; ProvisioningStyle = Automatic; }; }; @@ -187,6 +188,7 @@ 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; @@ -194,6 +196,7 @@ 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; @@ -244,6 +247,7 @@ 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; @@ -251,6 +255,7 @@ 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; @@ -290,7 +295,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.DynamicWebKit; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -305,7 +310,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.DynamicWebKit; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; diff --git a/DynamicWebKit/DynamicWebKit/HTMLViewControler.swift b/DynamicWebKit/DynamicWebKit/HTMLViewControler.swift index 36538ef..779671d 100644 --- a/DynamicWebKit/DynamicWebKit/HTMLViewControler.swift +++ b/DynamicWebKit/DynamicWebKit/HTMLViewControler.swift @@ -30,8 +30,7 @@ import UIKit import WebKit -class HTMLViewControler: UIViewController { - +final class HTMLViewControler: UIViewController { private lazy var webview: WKWebView = { let preferences = WKPreferences() preferences.javaScriptEnabled = false @@ -41,15 +40,15 @@ class HTMLViewControler: UIViewController { webview.translatesAutoresizingMaskIntoConstraints = false return webview }() - + override func viewDidLoad() { super.viewDidLoad() setupViews() loadHTML("readme.html") - - NotificationCenter.default.addObserver(self, selector: #selector(contentSizeDidChange(_:)), name: NSNotification.Name.UIContentSizeCategoryDidChange, object: nil) + + NotificationCenter.default.addObserver(self, selector: #selector(contentSizeDidChange(_:)), name: UIContentSizeCategory.didChangeNotification, object: nil) } - + private func setupViews() { view.addSubview(webview) NSLayoutConstraint.activate([ @@ -57,16 +56,16 @@ class HTMLViewControler: UIViewController { webview.trailingAnchor.constraint(equalTo: view.trailingAnchor), webview.topAnchor.constraint(equalTo: view.topAnchor), webview.bottomAnchor.constraint(equalTo: view.bottomAnchor) - ]) + ]) } - + private func loadHTML(_ file: String) { if let baseURL = Bundle.main.resourceURL { let fileURL = baseURL.appendingPathComponent(file) webview.loadFileURL(fileURL, allowingReadAccessTo: fileURL) } } - + @objc private func contentSizeDidChange(_ notification: Notification) { webview.reload() } diff --git a/DynamicWebKit/DynamicWebKit/readme.html b/DynamicWebKit/DynamicWebKit/readme.html index 703c048..5055016 100644 --- a/DynamicWebKit/DynamicWebKit/readme.html +++ b/DynamicWebKit/DynamicWebKit/readme.html @@ -1,9 +1,9 @@ - - + + - + - +

Dynamic Type With WebKit

From 4884522cb841eaf3aea3c666492af6926182ddf2 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Tue, 31 Dec 2019 17:28:07 +0000 Subject: [PATCH 13/56] Update for Swift 5 --- Vector/Vector.xcodeproj/project.pbxproj | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Vector/Vector.xcodeproj/project.pbxproj b/Vector/Vector.xcodeproj/project.pbxproj index 694c0d8..2589db3 100644 --- a/Vector/Vector.xcodeproj/project.pbxproj +++ b/Vector/Vector.xcodeproj/project.pbxproj @@ -95,6 +95,7 @@ TargetAttributes = { 53D182741F669CBB001F1840 = { CreatedOnToolsVersion = 9.0; + LastSwiftMigration = 1120; ProvisioningStyle = Automatic; }; }; @@ -282,7 +283,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.Vector; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -297,7 +298,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.Vector; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; From 51d2f32fba5dcfb43741a8a4c3ed583e445f091c Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Tue, 31 Dec 2019 17:43:15 +0000 Subject: [PATCH 14/56] Formatting --- ScaledFont/ScaledFont/AppDelegate.swift | 1 - ScaledFont/ScaledFont/ScaledFont.swift | 5 ++--- ScaledFont/ScaledFont/ViewController.swift | 25 +++++++++++----------- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/ScaledFont/ScaledFont/AppDelegate.swift b/ScaledFont/ScaledFont/AppDelegate.swift index 130fe68..6420758 100644 --- a/ScaledFont/ScaledFont/AppDelegate.swift +++ b/ScaledFont/ScaledFont/AppDelegate.swift @@ -31,6 +31,5 @@ import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? } diff --git a/ScaledFont/ScaledFont/ScaledFont.swift b/ScaledFont/ScaledFont/ScaledFont.swift index 0936799..09b8b81 100644 --- a/ScaledFont/ScaledFont/ScaledFont.swift +++ b/ScaledFont/ScaledFont/ScaledFont.swift @@ -66,7 +66,6 @@ import UIKit /// font. public final class ScaledFont { - private struct FontDescription: Decodable { let fontSize: CGFloat let fontName: String @@ -80,7 +79,7 @@ public final class ScaledFont { /// - Parameter fontName: Name of a plist file (without the extension) /// in the main bundle that contains the style dictionary used to /// scale fonts for each text style. - + public init(fontName: String) { if let url = Bundle.main.url(forResource: fontName, withExtension: "plist"), let data = try? Data(contentsOf: url) { @@ -105,7 +104,7 @@ public final class ScaledFont { public func font(forTextStyle textStyle: UIFont.TextStyle) -> UIFont { guard let fontDescription = styleDictionary?[textStyle.rawValue], let font = UIFont(name: fontDescription.fontName, size: fontDescription.fontSize) else { - return UIFont.preferredFont(forTextStyle: textStyle) + return UIFont.preferredFont(forTextStyle: textStyle) } let fontMetrics = UIFontMetrics(forTextStyle: textStyle) diff --git a/ScaledFont/ScaledFont/ViewController.swift b/ScaledFont/ScaledFont/ViewController.swift index ddd1857..315a7fd 100644 --- a/ScaledFont/ScaledFont/ViewController.swift +++ b/ScaledFont/ScaledFont/ViewController.swift @@ -30,7 +30,6 @@ import UIKit class ViewController: UIViewController { - // private let fontName = "Default" // private let fontName = "Noteworthy" private let fontName = "NotoSerif" @@ -38,7 +37,7 @@ class ViewController: UIViewController { private let defaultSpacing: CGFloat = 8.0 private lazy var scaledFont: ScaledFont = { - return ScaledFont(fontName: fontName) + ScaledFont(fontName: fontName) }() override func viewDidLoad() { @@ -48,43 +47,43 @@ class ViewController: UIViewController { } private lazy var title1Label: UILabel = { - return label(forTextStyle: .title1, text: "Title 1") + label(forTextStyle: .title1, text: "Title 1") }() private lazy var title2Label: UILabel = { - return label(forTextStyle: .title2, text: "Title 2") + label(forTextStyle: .title2, text: "Title 2") }() private lazy var title3Label: UILabel = { - return label(forTextStyle: .title3, text: "Title 3") + label(forTextStyle: .title3, text: "Title 3") }() private lazy var headlineLabel: UILabel = { - return label(forTextStyle: .headline, text: "Headline") + label(forTextStyle: .headline, text: "Headline") }() private lazy var subheadlineLabel: UILabel = { - return label(forTextStyle: .subheadline, text: "Subheadline") + label(forTextStyle: .subheadline, text: "Subheadline") }() private lazy var bodyLabel: UILabel = { - return label(forTextStyle: .body, text: "Body") + label(forTextStyle: .body, text: "Body") }() private lazy var calloutLabel: UILabel = { - return label(forTextStyle: .callout, text: "Callout") + label(forTextStyle: .callout, text: "Callout") }() private lazy var footnoteLabel: UILabel = { - return label(forTextStyle: .footnote, text: "Footnote") + label(forTextStyle: .footnote, text: "Footnote") }() private lazy var caption1Label: UILabel = { - return label(forTextStyle: .caption1, text: "Caption 1") + label(forTextStyle: .caption1, text: "Caption 1") }() private lazy var caption2Label: UILabel = { - return label(forTextStyle: .caption2, text: "Caption 2") + label(forTextStyle: .caption2, text: "Caption 2") }() private func label(forTextStyle textStyle: UIFont.TextStyle, text: String) -> UILabel { @@ -120,6 +119,6 @@ class ViewController: UIViewController { scrollView.trailingAnchor.constraint(equalTo: stackView.trailingAnchor), scrollView.widthAnchor.constraint(equalTo: stackView.widthAnchor) - ]) + ]) } } From ddcf1f24d6f876b79a5a1378d04acb35e6092c3a Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Tue, 31 Dec 2019 17:51:15 +0000 Subject: [PATCH 15/56] Update for Swift 5 --- Swiper/Swiper.xcodeproj/project.pbxproj | 11 ++++++--- Swiper/Swiper/AppDelegate.swift | 32 ------------------------- Swiper/Swiper/ViewController.swift | 9 ++++--- 3 files changed, 12 insertions(+), 40 deletions(-) diff --git a/Swiper/Swiper.xcodeproj/project.pbxproj b/Swiper/Swiper.xcodeproj/project.pbxproj index d413463..1b441bf 100644 --- a/Swiper/Swiper.xcodeproj/project.pbxproj +++ b/Swiper/Swiper.xcodeproj/project.pbxproj @@ -91,11 +91,12 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0900; - LastUpgradeCheck = 0900; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; TargetAttributes = { 53AF5D051F2B662A00BBF2B8 = { CreatedOnToolsVersion = 9.0; + LastSwiftMigration = 1120; }; }; }; @@ -176,6 +177,7 @@ 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; @@ -183,6 +185,7 @@ 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; @@ -233,6 +236,7 @@ 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; @@ -240,6 +244,7 @@ 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; @@ -278,7 +283,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.Swiper; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -292,7 +297,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.Swiper; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; diff --git a/Swiper/Swiper/AppDelegate.swift b/Swiper/Swiper/AppDelegate.swift index 73948c9..6420758 100644 --- a/Swiper/Swiper/AppDelegate.swift +++ b/Swiper/Swiper/AppDelegate.swift @@ -31,37 +31,5 @@ import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? - - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: 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/Swiper/Swiper/ViewController.swift b/Swiper/Swiper/ViewController.swift index 265d9ad..877487b 100644 --- a/Swiper/Swiper/ViewController.swift +++ b/Swiper/Swiper/ViewController.swift @@ -30,11 +30,10 @@ import UIKit class ViewController: UIViewController { - @IBOutlet private var fullScreenConstraints: [NSLayoutConstraint]! @IBOutlet private var halfScreenConstraints: [NSLayoutConstraint]! - @IBOutlet private weak var modeSwitch: UISwitch! - @IBOutlet private weak var countDisplay: UILabel! + @IBOutlet private var modeSwitch: UISwitch! + @IBOutlet private var countDisplay: UILabel! override var prefersStatusBarHidden: Bool { if #available(iOS 11.0, *) { @@ -44,8 +43,8 @@ class ViewController: UIViewController { } } - override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge { - return fullScreenMode ? [.bottom,.top] : UIRectEdge() + override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge { + return fullScreenMode ? [.bottom, .top] : UIRectEdge() } private var count = 0 { From 9b11a3fbd60ac179d173ff283b156863d17d3dcf Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Tue, 31 Dec 2019 22:35:42 +0000 Subject: [PATCH 16/56] Update for Xcode 11, Swift 5 and iOS 13 --- .../Sources/MarginViewController.swift | 4 +-- Margins/Margins.xcodeproj/project.pbxproj | 26 ++++++++++++++++--- .../xcshareddata/IDEWorkspaceChecks.plist | 8 ++++++ Margins/Margins/Base.lproj/Main.storyboard | 17 +++++------- 4 files changed, 39 insertions(+), 16 deletions(-) create mode 100644 Margins/Margins.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/Margins/Margins.playground/Sources/MarginViewController.swift b/Margins/Margins.playground/Sources/MarginViewController.swift index f05d54a..892fbba 100644 --- a/Margins/Margins.playground/Sources/MarginViewController.swift +++ b/Margins/Margins.playground/Sources/MarginViewController.swift @@ -51,7 +51,7 @@ public class MarginViewController: UIViewController { private func setupViews() { view.addSubview(redView) NSLayoutConstraint.activate([ - redView.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor), + redView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), redView.leadingAnchor.constraint(equalTo: view.leadingAnchor), redView.trailingAnchor.constraint(equalTo: view.trailingAnchor) ]) @@ -77,7 +77,7 @@ public class MarginViewController: UIViewController { NSLayoutConstraint.activate([ stackView.topAnchor.constraint(equalTo: redView.bottomAnchor), - stackView.bottomAnchor.constraint(equalTo: bottomLayoutGuide.topAnchor), + stackView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor), stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor), stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor), diff --git a/Margins/Margins.xcodeproj/project.pbxproj b/Margins/Margins.xcodeproj/project.pbxproj index 672ef9a..d330e67 100644 --- a/Margins/Margins.xcodeproj/project.pbxproj +++ b/Margins/Margins.xcodeproj/project.pbxproj @@ -90,7 +90,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0830; - LastUpgradeCheck = 0830; + LastUpgradeCheck = 1030; ORGANIZATIONNAME = "Keith Harrison"; TargetAttributes = { 53E307711EB33A650055FFCB = { @@ -102,7 +102,7 @@ }; buildConfigurationList = 53E3076D1EB33A650055FFCB /* Build configuration list for PBXProject "Margins" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -166,21 +166,30 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -217,21 +226,30 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -266,7 +284,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.Margins; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 5.0; }; name = Debug; }; @@ -279,7 +297,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.Margins; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 5.0; }; name = Release; }; diff --git a/Margins/Margins.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Margins/Margins.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Margins/Margins.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Margins/Margins/Base.lproj/Main.storyboard b/Margins/Margins/Base.lproj/Main.storyboard index bc78122..17351d7 100644 --- a/Margins/Margins/Base.lproj/Main.storyboard +++ b/Margins/Margins/Base.lproj/Main.storyboard @@ -1,12 +1,12 @@ - + - - + + @@ -14,10 +14,6 @@ - - - - @@ -56,14 +52,15 @@ - + - + + @@ -77,7 +74,7 @@ - + From ff553b49a2bfae4a0301477c614d8819ff48aa6a Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Tue, 31 Dec 2019 22:54:18 +0000 Subject: [PATCH 17/56] Update for Xcode 11 and Swift 5 --- GridView/GridView.xcodeproj/project.pbxproj | 18 ++++++++++-------- GridView/GridView/GridView.swift | 3 +-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/GridView/GridView.xcodeproj/project.pbxproj b/GridView/GridView.xcodeproj/project.pbxproj index b83306f..8324803 100644 --- a/GridView/GridView.xcodeproj/project.pbxproj +++ b/GridView/GridView.xcodeproj/project.pbxproj @@ -143,26 +143,26 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0830; - LastUpgradeCheck = 0930; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; TargetAttributes = { 531CCB861EAA45D2008349F4 = { CreatedOnToolsVersion = 8.3.2; DevelopmentTeam = LCC2J94N44; - LastSwiftMigration = 0900; + LastSwiftMigration = 1120; ProvisioningStyle = Automatic; }; 5366BC611EA8DF80006A06E5 = { CreatedOnToolsVersion = 8.3.2; DevelopmentTeam = LCC2J94N44; - LastSwiftMigration = 0900; + LastSwiftMigration = 1120; ProvisioningStyle = Automatic; }; }; }; buildConfigurationList = 5366BC5D1EA8DF80006A06E5 /* Build configuration list for PBXProject "GridView" */; compatibilityVersion = "Xcode 10.0"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -261,7 +261,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -288,7 +288,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -298,6 +298,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; @@ -357,6 +358,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; @@ -420,7 +422,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.GridView; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; }; name = Debug; }; @@ -438,7 +440,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.GridView; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; }; name = Release; }; diff --git a/GridView/GridView/GridView.swift b/GridView/GridView/GridView.swift index 8167594..ad3349d 100644 --- a/GridView/GridView/GridView.swift +++ b/GridView/GridView/GridView.swift @@ -36,7 +36,6 @@ import UIKit @IBDesignable public class GridView: UIView { - /// The number of horizontal rows - default is 1. @IBInspectable public var rowCount: Int = 1 { didSet { setNeedsDisplay() } } @@ -49,7 +48,7 @@ public class GridView: UIView { /// The grid line width - default is 1 point. @IBInspectable public var lineWidth: CGFloat = 1.0 { didSet { setNeedsDisplay() } } - override public func draw(_ rect: CGRect) { + public override func draw(_ rect: CGRect) { lineColor.set() rowPath?.stroke() columnPath?.stroke() From bb3b5e075ab25dd92edd4730ce53d57de805c9a4 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Tue, 31 Dec 2019 23:11:40 +0000 Subject: [PATCH 18/56] Update for Xcode 11 --- RevealStack/RevealStack/Base.lproj/Main.storyboard | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/RevealStack/RevealStack/Base.lproj/Main.storyboard b/RevealStack/RevealStack/Base.lproj/Main.storyboard index ea10869..d3bf493 100644 --- a/RevealStack/RevealStack/Base.lproj/Main.storyboard +++ b/RevealStack/RevealStack/Base.lproj/Main.storyboard @@ -1,9 +1,10 @@ - + + @@ -11,16 +12,12 @@ - - - - - + @@ -46,9 +43,10 @@ - + + From 938710b9a6983de9da58e247babb14d6159ed093 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Wed, 1 Jan 2020 12:50:10 +0000 Subject: [PATCH 19/56] Update for Xcode 11, Swift 5 --- .../TableHeaderObjC/Base.lproj/Main.storyboard | 17 +++++++---------- .../TableHeaderObjC/ListTableViewController.m | 2 +- .../TableHeader/Base.lproj/Main.storyboard | 15 ++++++--------- .../TableHeader/ListTableViewController.swift | 2 +- 4 files changed, 15 insertions(+), 21 deletions(-) diff --git a/TableHeader/TableHeaderObjC/TableHeaderObjC/Base.lproj/Main.storyboard b/TableHeader/TableHeaderObjC/TableHeaderObjC/Base.lproj/Main.storyboard index 52b3d33..dec5842 100644 --- a/TableHeader/TableHeaderObjC/TableHeaderObjC/Base.lproj/Main.storyboard +++ b/TableHeader/TableHeaderObjC/TableHeaderObjC/Base.lproj/Main.storyboard @@ -1,12 +1,9 @@ - - - - + + - - + @@ -14,7 +11,7 @@ - + @@ -43,14 +40,14 @@
- + - +
- +
- - + + - +
- + @@ -136,7 +133,7 @@ - + diff --git a/StaticTableDynamicType/StaticTable/StaticTableViewController.swift b/StaticTableDynamicType/StaticTable/StaticTableViewController.swift index 1e451ea..1ca1f51 100644 --- a/StaticTableDynamicType/StaticTable/StaticTableViewController.swift +++ b/StaticTableDynamicType/StaticTable/StaticTableViewController.swift @@ -34,12 +34,9 @@ import UIKit class StaticTableViewController: UITableViewController { - - override func viewDidLoad() { - super.viewDidLoad() - tableView.estimatedRowHeight = 56.0 - } - + // This is only necessary for iOS 9. If your minimum deployment + // target is iOS 10 select the "Automatically Adjusts Font" option + // in Interface Builder for each of the text labels. override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = super.tableView(tableView, cellForRowAt: indexPath) if let cell = cell as? UYLPreferredFont { @@ -47,8 +44,10 @@ class StaticTableViewController: UITableViewController { } return cell } - + + // This is only necessary for iOS 9 which seems to ignore the setting + // in Interface Builder. override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { - return UITableViewAutomaticDimension + return UITableView.automaticDimension } } diff --git a/StaticTableDynamicType/StaticTable/UYLBasicStaticTableViewCell.swift b/StaticTableDynamicType/StaticTable/UYLBasicStaticTableViewCell.swift index 5feeb8a..c27509b 100644 --- a/StaticTableDynamicType/StaticTable/UYLBasicStaticTableViewCell.swift +++ b/StaticTableDynamicType/StaticTable/UYLBasicStaticTableViewCell.swift @@ -8,13 +8,12 @@ import UIKit -class UYLBasicStaticTableViewCell: UITableViewCell { - - @IBOutlet weak var titleText: UILabel! +final class UYLBasicStaticTableViewCell: UITableViewCell { + @IBOutlet private weak var titleText: UILabel! } extension UYLBasicStaticTableViewCell: UYLPreferredFont { func contentSizeChanged() { - titleText.font = UIFont.preferredFont(forTextStyle: UIFontTextStyle.headline) + titleText.font = UIFont.preferredFont(forTextStyle: .headline) } } diff --git a/StaticTableDynamicType/StaticTable/UYLSubtitleStaticTableViewCell.swift b/StaticTableDynamicType/StaticTable/UYLSubtitleStaticTableViewCell.swift index a3a7688..8e8226b 100644 --- a/StaticTableDynamicType/StaticTable/UYLSubtitleStaticTableViewCell.swift +++ b/StaticTableDynamicType/StaticTable/UYLSubtitleStaticTableViewCell.swift @@ -33,14 +33,14 @@ import UIKit -class UYLSubtitleStaticTableViewCell: UITableViewCell { - @IBOutlet fileprivate weak var titleText: UILabel! - @IBOutlet fileprivate weak var subtitleText: UILabel! +final class UYLSubtitleStaticTableViewCell: UITableViewCell { + @IBOutlet private weak var titleText: UILabel! + @IBOutlet private weak var subtitleText: UILabel! } extension UYLSubtitleStaticTableViewCell: UYLPreferredFont { func contentSizeChanged() { - titleText.font = UIFont.preferredFont(forTextStyle: UIFontTextStyle.headline) - subtitleText.font = UIFont.preferredFont(forTextStyle: UIFontTextStyle.subheadline) + titleText.font = UIFont.preferredFont(forTextStyle: .headline) + subtitleText.font = UIFont.preferredFont(forTextStyle: .subheadline) } } From 25af1d1e6fe50461e2ed7849e1d2118f8f35629b Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Wed, 8 Jan 2020 17:48:55 +0000 Subject: [PATCH 27/56] Update for Xcode 11, Swift 5 --- AutoLayout/README.md | 12 +++---- Buttons/Buttons.xcodeproj/project.pbxproj | 31 ++++++++++++++++--- Buttons/Buttons/ViewController.swift | 8 ++--- .../timeline.xctimeline | 4 +-- 4 files changed, 39 insertions(+), 16 deletions(-) diff --git a/AutoLayout/README.md b/AutoLayout/README.md index 5905031..42086b1 100644 --- a/AutoLayout/README.md +++ b/AutoLayout/README.md @@ -12,12 +12,12 @@ Auto Layout examples using Interface Builder and in code. See the following posts further details: -+ [Proportional Spacing with Auto Layout](http://useyourloaf.com/blog/proportional-spacing-with-auto-layout/) -+ [Adapting Images for Size Classes](http://useyourloaf.com/blog/adapting-images-for-size-classes/) -+ [Pain Free Constraints with Layout Anchors](http://useyourloaf.com/blog/pain-free-constraints-with-layout-anchors/) -+ [Goodbye Spacer Views Hello Layout Guides](http://useyourloaf.com/blog/goodbye-spacer-views-hello-layout-guides/) -+ [Adapting AutoLayout Without Interface Builder](http://useyourloaf.com/blog/adapting-auto-layout-without-interface-builder/) -+ [Natural Text Alignment for RTL Languages](http://useyourloaf.com/blog/natural-text-alignment-for-rtl-languages/) ++ [Proportional Spacing with Auto Layout](https://useyourloaf.com/blog/proportional-spacing-with-auto-layout/) ++ [Adapting Images for Size Classes](https://useyourloaf.com/blog/adapting-images-for-size-classes/) ++ [Pain Free Constraints with Layout Anchors](https://useyourloaf.com/blog/pain-free-constraints-with-layout-anchors/) ++ [Goodbye Spacer Views Hello Layout Guides](https://useyourloaf.com/blog/goodbye-spacer-views-hello-layout-guides/) ++ [Adapting AutoLayout Without Interface Builder](https://useyourloaf.com/blog/adapting-auto-layout-without-interface-builder/) ++ [Natural Text Alignment for RTL Languages](https://useyourloaf.com/blog/natural-text-alignment-for-rtl-languages/) #### Version History diff --git a/Buttons/Buttons.xcodeproj/project.pbxproj b/Buttons/Buttons.xcodeproj/project.pbxproj index e1199ac..587fde8 100644 --- a/Buttons/Buttons.xcodeproj/project.pbxproj +++ b/Buttons/Buttons.xcodeproj/project.pbxproj @@ -91,18 +91,19 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0720; - LastUpgradeCheck = 0810; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; TargetAttributes = { 5323B0B31C88D97300B183DD = { CreatedOnToolsVersion = 7.2.1; + DevelopmentTeam = LCC2J94N44; LastSwiftMigration = 0810; }; }; }; buildConfigurationList = 5323B0AF1C88D97300B183DD /* Build configuration list for PBXProject "Buttons" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -167,18 +168,27 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -206,6 +216,7 @@ ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -214,18 +225,27 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -246,6 +266,7 @@ MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -255,11 +276,12 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = LCC2J94N44; INFOPLIST_FILE = Buttons/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.Buttons; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 5.0; }; name = Debug; }; @@ -267,11 +289,12 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = LCC2J94N44; INFOPLIST_FILE = Buttons/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.Buttons; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 5.0; }; name = Release; }; diff --git a/Buttons/Buttons/ViewController.swift b/Buttons/Buttons/ViewController.swift index bf55080..dac117a 100644 --- a/Buttons/Buttons/ViewController.swift +++ b/Buttons/Buttons/ViewController.swift @@ -43,11 +43,11 @@ class ViewController: UIViewController { // Create a custom button and set title label style let orangeButton = UIButton(type: .custom) - orangeButton.setTitle("Orange", for: UIControlState()) - orangeButton.setTitleColor(.orange, for: UIControlState()) + orangeButton.setTitle("Orange", for: .normal) + orangeButton.setTitleColor(.orange, for: .normal) orangeButton.setTitleColor(.white, for: .highlighted) orangeButton.titleLabel?.font = UIFont.systemFont(ofSize: 14) - orangeButton.contentEdgeInsets = UIEdgeInsetsMake(8, 8, 8, 8) + orangeButton.contentEdgeInsets = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8) // Get the pre-sliced template images direct from the // asset catalog for the default and hightlighted states @@ -55,7 +55,7 @@ class ViewController: UIViewController { let slicedBorderTemplate = UIImage(named: "slicedBorderTemplate") let slicedFillTemplate = UIImage(named: "slicedFillTemplate") - orangeButton.setBackgroundImage(slicedBorderTemplate, for: UIControlState()) + orangeButton.setBackgroundImage(slicedBorderTemplate, for: .normal) orangeButton.setBackgroundImage(slicedFillTemplate, for: .highlighted) // The tintColor controls the colour used by the template images diff --git a/Playgrounds/ContentMode.playground/Pages/ScaleAspectFill.xcplaygroundpage/timeline.xctimeline b/Playgrounds/ContentMode.playground/Pages/ScaleAspectFill.xcplaygroundpage/timeline.xctimeline index e382b73..9b06466 100644 --- a/Playgrounds/ContentMode.playground/Pages/ScaleAspectFill.xcplaygroundpage/timeline.xctimeline +++ b/Playgrounds/ContentMode.playground/Pages/ScaleAspectFill.xcplaygroundpage/timeline.xctimeline @@ -3,12 +3,12 @@ version = "3.0"> From 8d393dd1ff3b7af86dfb4f73d3ced883edcfd6af Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Wed, 8 Jan 2020 20:46:32 +0000 Subject: [PATCH 28/56] Update for Xcode 11, Swift 5 and iOS 13 --- .../AutoLayout/LayoutGuideController.swift | 102 +++++----- Encode/encode.xcodeproj/project.pbxproj | 32 +++- .../AppIcon.appiconset/Contents.json | 25 +++ Encode/encode/Base.lproj/Main.storyboard | 176 ++++++++++-------- Encode/encode/String+URLEncode.swift | 16 +- Encode/encode/ViewController.swift | 10 +- Encode/encodeTests/String+URLEncodeTest.swift | 8 +- Encode/encodeUITests/encodeUITests.swift | 6 +- 8 files changed, 219 insertions(+), 156 deletions(-) diff --git a/AutoLayout/AutoLayout/LayoutGuideController.swift b/AutoLayout/AutoLayout/LayoutGuideController.swift index 594ebb7..b092cd7 100644 --- a/AutoLayout/AutoLayout/LayoutGuideController.swift +++ b/AutoLayout/AutoLayout/LayoutGuideController.swift @@ -33,24 +33,23 @@ import UIKit -class LayoutGuideController: UIViewController { - +final class LayoutGuideController: UIViewController { // Use layout guides as an alternative to spacer views // The two buttons will be placed between the view margins // with equal spacing between the buttons and the margins // so that the width of the three guides is equal. - + // = |+++++++++++************+++++++++++************+++++++++++| = // = |+ leading +* no *+ middle +* yes *+ trailing+| = // = |+ guide +* button *+ guide +* button *+ guide +| = // = |+++++++++++************+++++++++++************+++++++++++| = - + let leadingGuide = UILayoutGuide() let noButton = UIButton(type: .custom) let middleGuide = UILayoutGuide() let yesButton = UIButton(type: .custom) let trailingGuide = UILayoutGuide() - + override func viewDidLoad() { super.viewDidLoad() setupViews() @@ -58,76 +57,73 @@ class LayoutGuideController: UIViewController { } private func setupViews() { - // Configure the buttons and add them to the superview - + noButton.translatesAutoresizingMaskIntoConstraints = false - noButton.setTitle("No", for: UIControl.State()) + noButton.setTitle("No", for: .normal) let redImage = UIImage(named: "redButton") - noButton.setBackgroundImage(redImage, for: UIControl.State()) - noButton.contentEdgeInsets = UIEdgeInsets.init(top: 8, left: 16, bottom: 8, right: 16) - let noThanksAction = #selector(LayoutGuideController.noThanks(_:)) - noButton.addTarget(self, action: noThanksAction, for: .touchUpInside) - + noButton.setBackgroundImage(redImage, for: .normal) + noButton.contentEdgeInsets = UIEdgeInsets(top: 8, left: 16, bottom: 8, right: 16) + noButton.addTarget(self, action: #selector(LayoutGuideController.noThanks(_:)), for: .touchUpInside) + yesButton.translatesAutoresizingMaskIntoConstraints = false - yesButton.setTitle("Yes please!", for: UIControl.State()) + yesButton.setTitle("Yes please!", for: .normal) let greenImage = UIImage(named: "greenButton") - yesButton.setBackgroundImage(greenImage, for: UIControl.State()) - yesButton.contentEdgeInsets = UIEdgeInsets.init(top: 8, left: 16, bottom: 8, right: 16) - let yesPleaseAction = #selector(LayoutGuideController.yesPlease(_:)) - yesButton.addTarget(self, action: yesPleaseAction, for: .touchUpInside) - + yesButton.setBackgroundImage(greenImage, for: .normal) + yesButton.contentEdgeInsets = UIEdgeInsets(top: 8, left: 16, bottom: 8, right: 16) + yesButton.addTarget(self, action: #selector(LayoutGuideController.yesPlease(_:)), for: .touchUpInside) + view.addSubview(noButton) view.addSubview(yesButton) - + // Add the layout guides to the view // Note that the guides are not part of the // view hierarchy - + view.addLayoutGuide(leadingGuide) view.addLayoutGuide(middleGuide) view.addLayoutGuide(trailingGuide) } - + private func setupConstraints() { - // The views are spaced relative to the margings of // the superview. To space the views relative to the - // edges of the super view replace "margings" with + // edges of the super view replace "margins" with // "view" in the constraints below - + let margins = view.layoutMarginsGuide - - // leading to trailing constraints - // working from left to right - - margins.leadingAnchor.constraint(equalTo: leadingGuide.leadingAnchor).isActive = true - leadingGuide.trailingAnchor.constraint(equalTo: noButton.leadingAnchor).isActive = true - noButton.trailingAnchor.constraint(equalTo: middleGuide.leadingAnchor).isActive = true - middleGuide.trailingAnchor.constraint(equalTo: yesButton.leadingAnchor).isActive = true - yesButton.trailingAnchor.constraint(equalTo: trailingGuide.leadingAnchor).isActive = true - trailingGuide.trailingAnchor.constraint(equalTo: margins.trailingAnchor).isActive = true - - // The buttons should have the same width - noButton.widthAnchor.constraint(equalTo: yesButton.widthAnchor).isActive = true - - // The guides should have the same width - leadingGuide.widthAnchor.constraint(equalTo: middleGuide.widthAnchor).isActive = true - leadingGuide.widthAnchor.constraint(equalTo: trailingGuide.widthAnchor).isActive = true - - // Center everything vertically in the super view - leadingGuide.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true - middleGuide.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true - trailingGuide.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true - noButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true - yesButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true + NSLayoutConstraint.activate([ + // leading to trailing constraints + // working from left to right + + margins.leadingAnchor.constraint(equalTo: leadingGuide.leadingAnchor), + leadingGuide.trailingAnchor.constraint(equalTo: noButton.leadingAnchor), + noButton.trailingAnchor.constraint(equalTo: middleGuide.leadingAnchor), + middleGuide.trailingAnchor.constraint(equalTo: yesButton.leadingAnchor), + yesButton.trailingAnchor.constraint(equalTo: trailingGuide.leadingAnchor), + trailingGuide.trailingAnchor.constraint(equalTo: margins.trailingAnchor), + + // The buttons should have the same width + noButton.widthAnchor.constraint(equalTo: yesButton.widthAnchor), + + // The guides should have the same width + leadingGuide.widthAnchor.constraint(equalTo: middleGuide.widthAnchor), + leadingGuide.widthAnchor.constraint(equalTo: trailingGuide.widthAnchor), + + // Center everything vertically in the super view + leadingGuide.centerYAnchor.constraint(equalTo: view.centerYAnchor), + middleGuide.centerYAnchor.constraint(equalTo: view.centerYAnchor), + trailingGuide.centerYAnchor.constraint(equalTo: view.centerYAnchor), + noButton.centerYAnchor.constraint(equalTo: view.centerYAnchor), + yesButton.centerYAnchor.constraint(equalTo: view.centerYAnchor) + ]) } - - @objc func noThanks(_ sender: UIButton) { + + @objc private func noThanks(_ sender: UIButton) { print("No thanks!") } - - @objc func yesPlease(_ sender: UIButton) { + + @objc private func yesPlease(_ sender: UIButton) { print("Yes please!") } } diff --git a/Encode/encode.xcodeproj/project.pbxproj b/Encode/encode.xcodeproj/project.pbxproj index d1f32bb..90a9c65 100644 --- a/Encode/encode.xcodeproj/project.pbxproj +++ b/Encode/encode.xcodeproj/project.pbxproj @@ -195,11 +195,12 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0720; - LastUpgradeCheck = 0720; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; TargetAttributes = { 53BE6B291C356461001C8FC9 = { CreatedOnToolsVersion = 7.2; + DevelopmentTeam = LCC2J94N44; }; 53BE6B3D1C356462001C8FC9 = { CreatedOnToolsVersion = 7.2; @@ -213,7 +214,7 @@ }; buildConfigurationList = 53BE6B251C356461001C8FC9 /* Build configuration list for PBXProject "encode" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -326,17 +327,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -363,6 +375,7 @@ ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -371,17 +384,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -400,6 +424,8 @@ IPHONEOS_DEPLOYMENT_TARGET = 9.2; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -409,6 +435,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = LCC2J94N44; INFOPLIST_FILE = encode/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.encode; @@ -420,6 +447,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = LCC2J94N44; INFOPLIST_FILE = encode/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.encode; diff --git a/Encode/encode/Assets.xcassets/AppIcon.appiconset/Contents.json b/Encode/encode/Assets.xcassets/AppIcon.appiconset/Contents.json index eeea76c..d8db8d6 100644 --- a/Encode/encode/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Encode/encode/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", @@ -30,6 +40,16 @@ "size" : "60x60", "scale" : "3x" }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, { "idiom" : "ipad", "size" : "29x29", @@ -64,6 +84,11 @@ "idiom" : "ipad", "size" : "83.5x83.5", "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" } ], "info" : { diff --git a/Encode/encode/Base.lproj/Main.storyboard b/Encode/encode/Base.lproj/Main.storyboard index 7ec14df..d39fa46 100644 --- a/Encode/encode/Base.lproj/Main.storyboard +++ b/Encode/encode/Base.lproj/Main.storyboard @@ -1,97 +1,93 @@ - - + + + - - + + + + - + - - - - - + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - + + + + + + @@ -101,7 +97,25 @@ - + + + + + + + + + + + + + + + + + + + diff --git a/Encode/encode/String+URLEncode.swift b/Encode/encode/String+URLEncode.swift index 2d9e9e2..45a1157 100644 --- a/Encode/encode/String+URLEncode.swift +++ b/Encode/encode/String+URLEncode.swift @@ -58,9 +58,9 @@ extension String { public func stringByAddingPercentEncodingForRFC3986() -> String? { let unreserved = "-._~/?" - let allowedCharacterSet = NSMutableCharacterSet.alphanumericCharacterSet() - allowedCharacterSet.addCharactersInString(unreserved) - return stringByAddingPercentEncodingWithAllowedCharacters(allowedCharacterSet) + let allowedCharacterSet = NSMutableCharacterSet.alphanumeric() + allowedCharacterSet.addCharacters(in: unreserved) + return addingPercentEncoding(withAllowedCharacters: allowedCharacterSet as CharacterSet) } /** @@ -83,16 +83,16 @@ extension String { public func stringByAddingPercentEncodingForFormData(plusForSpace: Bool=false) -> String? { let unreserved = "*-._" - let allowedCharacterSet = NSMutableCharacterSet.alphanumericCharacterSet() - allowedCharacterSet.addCharactersInString(unreserved) + let allowedCharacterSet = NSMutableCharacterSet.alphanumeric() + allowedCharacterSet.addCharacters(in: unreserved) if plusForSpace { - allowedCharacterSet.addCharactersInString(" ") + allowedCharacterSet.addCharacters(in: " ") } - var encoded = stringByAddingPercentEncodingWithAllowedCharacters(allowedCharacterSet) + var encoded = addingPercentEncoding(withAllowedCharacters: allowedCharacterSet as CharacterSet) if plusForSpace { - encoded = encoded?.stringByReplacingOccurrencesOfString(" ", withString: "+") + encoded = encoded?.replacingOccurrences(of: " ", with: "+") } return encoded } diff --git a/Encode/encode/ViewController.swift b/Encode/encode/ViewController.swift index 720ca8b..462c88c 100644 --- a/Encode/encode/ViewController.swift +++ b/Encode/encode/ViewController.swift @@ -2,8 +2,8 @@ // ViewController.swift // encode // -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2016 Keith Harrison. All rights reserved. +// Created by Keith Harrison https://useyourloaf.com +// Copyright (c) 2016-2020 Keith Harrison. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: @@ -46,14 +46,14 @@ class ViewController: UIViewController { func updateOutputLabels() { let input = textInput.text - let usePlusForSpace = plusSwitch.on + let usePlusForSpace = plusSwitch.isOn rfc3986Output.text = input?.stringByAddingPercentEncodingForRFC3986() - formOutput.text = input?.stringByAddingPercentEncodingForFormData(usePlusForSpace) + formOutput.text = input?.stringByAddingPercentEncodingForFormData(plusForSpace: usePlusForSpace) } } extension ViewController: UITextFieldDelegate { - func textFieldShouldReturn(textField: UITextField) -> Bool { + func textFieldShouldReturn(_ textField: UITextField) -> Bool { updateOutputLabels() return true } diff --git a/Encode/encodeTests/String+URLEncodeTest.swift b/Encode/encodeTests/String+URLEncodeTest.swift index 4da757f..14af416 100644 --- a/Encode/encodeTests/String+URLEncodeTest.swift +++ b/Encode/encodeTests/String+URLEncodeTest.swift @@ -1,8 +1,8 @@ // // String+URLEncodeTest.swift // -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2016 Keith Harrison. All rights reserved. +// Created by Keith Harrison https://useyourloaf.com +// Copyright (c) 2016-2020 Keith Harrison. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: @@ -92,14 +92,14 @@ class URLEncodeTest: XCTestCase { func testFormSpacePlusEncoded() { let input = "one two" - let output = input.stringByAddingPercentEncodingForFormData(true) + let output = input.stringByAddingPercentEncodingForFormData(plusForSpace: true) let expected = "one+two" XCTAssertEqual(expected, output) } func testFormPlusIsPercentEncoded() { let input = "one+two" - let output = input.stringByAddingPercentEncodingForFormData(true) + let output = input.stringByAddingPercentEncodingForFormData(plusForSpace: true) let expected = "one%2Btwo" XCTAssertEqual(expected, output) } diff --git a/Encode/encodeUITests/encodeUITests.swift b/Encode/encodeUITests/encodeUITests.swift index 9a3a44a..8abdde3 100644 --- a/Encode/encodeUITests/encodeUITests.swift +++ b/Encode/encodeUITests/encodeUITests.swift @@ -2,8 +2,8 @@ // encodeUITests.swift // encodeUITests // -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2016 Keith Harrison. All rights reserved. +// Created by Keith Harrison https://useyourloaf.com +// Copyright (c) 2016-2020 Keith Harrison. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: @@ -63,7 +63,7 @@ class encodeUITests: XCTestCase { let input = "one two" let expectedRFC3986 = input.stringByAddingPercentEncodingForRFC3986() let expectedForm = input.stringByAddingPercentEncodingForFormData() - let expectedPlusForm = input.stringByAddingPercentEncodingForFormData(true) + let expectedPlusForm = input.stringByAddingPercentEncodingForFormData(plusForSpace: true) let textToEncodeTextField = app.textFields["InputText"] textToEncodeTextField.tap() From 355eaeff3f792b420a9a1be2600e7deaaf2ee0f4 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Thu, 9 Jan 2020 17:05:10 +0000 Subject: [PATCH 29/56] Update for Xcode 11, Swift 5 and iOS 13 --- .../AdaptivePopover.xcodeproj/project.pbxproj | 48 ++++++++-- .../Base.lproj/LaunchScreen.storyboard | 29 +++--- .../Base.lproj/Main.storyboard | 92 ++++++++----------- AdaptivePopover/AdaptivePopover/Info.plist | 4 +- .../AdaptivePopover/RootViewController.swift | 75 ++++++++------- .../SimpleTableViewController.swift | 30 +++--- AdaptivePopover/README | 11 --- AdaptivePopover/README.md | 10 ++ 8 files changed, 151 insertions(+), 148 deletions(-) delete mode 100644 AdaptivePopover/README create mode 100644 AdaptivePopover/README.md diff --git a/AdaptivePopover/AdaptivePopover.xcodeproj/project.pbxproj b/AdaptivePopover/AdaptivePopover.xcodeproj/project.pbxproj index e6de0ae..e582a0a 100644 --- a/AdaptivePopover/AdaptivePopover.xcodeproj/project.pbxproj +++ b/AdaptivePopover/AdaptivePopover.xcodeproj/project.pbxproj @@ -18,17 +18,17 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 53A8BF831C0CE6F3003C9B46 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; 53BC63AA1C0A57E4009BFDDF /* AdaptivePopover.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AdaptivePopover.app; sourceTree = BUILT_PRODUCTS_DIR; }; 53BC63AD1C0A57E4009BFDDF /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 53BC63B21C0A57E4009BFDDF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 53BC63B41C0A57E4009BFDDF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 53BC63B71C0A57E4009BFDDF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 53BC63B91C0A57E4009BFDDF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 53BC63BF1C0A591A009BFDDF /* RootViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RootViewController.swift; sourceTree = ""; }; 53BC63C11C0A596C009BFDDF /* SimpleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleViewController.swift; sourceTree = ""; }; 53BC63C31C0A5F59009BFDDF /* SimpleTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleTableViewController.swift; sourceTree = ""; }; 53BC63C51C0A5F72009BFDDF /* DetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DetailViewController.swift; sourceTree = ""; }; + 53FFA91A23C768C000EAFE01 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 53FFA91D23C76E7D00EAFE01 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 53FFA91E23C76E7D00EAFE01 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -45,7 +45,7 @@ 53BC63A11C0A57E4009BFDDF = { isa = PBXGroup; children = ( - 53A8BF831C0CE6F3003C9B46 /* README */, + 53FFA91A23C768C000EAFE01 /* README.md */, 53BC63AC1C0A57E4009BFDDF /* AdaptivePopover */, 53BC63AB1C0A57E4009BFDDF /* Products */, ); @@ -102,17 +102,18 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0710; - LastUpgradeCheck = 0710; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; TargetAttributes = { 53BC63A91C0A57E4009BFDDF = { CreatedOnToolsVersion = 7.1.1; + DevelopmentTeam = LCC2J94N44; }; }; }; buildConfigurationList = 53BC63A51C0A57E4009BFDDF /* Build configuration list for PBXProject "AdaptivePopover" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -160,7 +161,7 @@ 53BC63B11C0A57E4009BFDDF /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( - 53BC63B21C0A57E4009BFDDF /* Base */, + 53FFA91D23C76E7D00EAFE01 /* Base */, ); name = Main.storyboard; sourceTree = ""; @@ -168,7 +169,7 @@ 53BC63B61C0A57E4009BFDDF /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( - 53BC63B71C0A57E4009BFDDF /* Base */, + 53FFA91E23C76E7D00EAFE01 /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; @@ -180,17 +181,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -217,6 +229,7 @@ ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -225,17 +238,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -254,6 +278,8 @@ IPHONEOS_DEPLOYMENT_TARGET = 9.1; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -263,8 +289,11 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = 2; + DEVELOPMENT_TEAM = LCC2J94N44; INFOPLIST_FILE = AdaptivePopover/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 2.0; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.AdaptivePopover; PRODUCT_NAME = "$(TARGET_NAME)"; }; @@ -274,8 +303,11 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = 2; + DEVELOPMENT_TEAM = LCC2J94N44; INFOPLIST_FILE = AdaptivePopover/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 2.0; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.AdaptivePopover; PRODUCT_NAME = "$(TARGET_NAME)"; }; diff --git a/AdaptivePopover/AdaptivePopover/Base.lproj/LaunchScreen.storyboard b/AdaptivePopover/AdaptivePopover/Base.lproj/LaunchScreen.storyboard index f9b6409..bfec1a2 100644 --- a/AdaptivePopover/AdaptivePopover/Base.lproj/LaunchScreen.storyboard +++ b/AdaptivePopover/AdaptivePopover/Base.lproj/LaunchScreen.storyboard @@ -1,45 +1,41 @@ - - + + + - + + + - - - - - + - + - - - + - + + @@ -53,9 +49,8 @@ - + - diff --git a/AdaptivePopover/AdaptivePopover/Base.lproj/Main.storyboard b/AdaptivePopover/AdaptivePopover/Base.lproj/Main.storyboard index b02fbee..e1d5a06 100644 --- a/AdaptivePopover/AdaptivePopover/Base.lproj/Main.storyboard +++ b/AdaptivePopover/AdaptivePopover/Base.lproj/Main.storyboard @@ -1,28 +1,27 @@ - - + + + - + + + - - - - - + - + - - - + - + + @@ -65,64 +63,55 @@ - - - - - + - - + - + + - + - + - - + - + - + - - @@ -146,28 +135,23 @@ - - - - - + - - + - + + @@ -183,9 +167,8 @@ - + - @@ -194,7 +177,7 @@ - + @@ -202,9 +185,8 @@ - + - diff --git a/AdaptivePopover/AdaptivePopover/Info.plist b/AdaptivePopover/AdaptivePopover/Info.plist index 40c6215..26e2b70 100644 --- a/AdaptivePopover/AdaptivePopover/Info.plist +++ b/AdaptivePopover/AdaptivePopover/Info.plist @@ -15,11 +15,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0 + $(MARKETING_VERSION) CFBundleSignature ???? CFBundleVersion - 1 + $(CURRENT_PROJECT_VERSION) LSRequiresIPhoneOS UILaunchStoryboardName diff --git a/AdaptivePopover/AdaptivePopover/RootViewController.swift b/AdaptivePopover/AdaptivePopover/RootViewController.swift index e73020f..3afb47c 100644 --- a/AdaptivePopover/AdaptivePopover/RootViewController.swift +++ b/AdaptivePopover/AdaptivePopover/RootViewController.swift @@ -33,75 +33,72 @@ import UIKit -class RootViewController: UIViewController { +final class RootViewController: UIViewController { + @IBOutlet var simpleButton: UIButton! + @IBOutlet var embeddedButton: UIButton! - @IBOutlet weak var simpleButton: UIButton! - @IBOutlet weak var embeddedButton: UIButton! - - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { switch segue.identifier { case "SimpleSegue"?: - let simplePPC = segue.destinationViewController.popoverPresentationController + let simplePPC = segue.destination.popoverPresentationController simplePPC?.delegate = self simplePPC?.sourceView = simpleButton simplePPC?.sourceRect = simpleButton.bounds case "EmbeddedSegue"?: - let embeddedPPC = segue.destinationViewController.popoverPresentationController + let embeddedPPC = segue.destination.popoverPresentationController embeddedPPC?.delegate = self embeddedPPC?.sourceView = embeddedButton embeddedPPC?.sourceRect = embeddedButton.bounds default: - fatalError("Unknown segue: \(segue.identifier)") + fatalError("Unknown segue: \(segue.identifier ?? "Unknown")") } } } - // MARK: UIPopoverPresentationControllerDelegate + extension RootViewController: UIPopoverPresentationControllerDelegate { - // In modal presentation we need to add a button to our popover // to allow it to be dismissed. Handle the situation where // our popover may be embedded in a navigation controller - - func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? { - guard style != .None else { + + func presentationController(_ controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? { + if style == .none { return controller.presentedViewController } - - if let navController = controller.presentedViewController as? UINavigationController { - addDismissButton(navController) - return navController - } else { - let navController = UINavigationController.init(rootViewController: controller.presentedViewController) - addDismissButton(navController) - return navController - } + + let navigationController: UINavigationController = { + guard let navigationController = controller.presentedViewController as? UINavigationController else { + return UINavigationController(rootViewController: controller.presentedViewController) + } + return navigationController + }() + + addDismissButton(navigationController) + return navigationController } - + // Check for when we present in a non modal style and remove the // the dismiss button from the navigation bar. - - func presentationController(presentationController: UIPresentationController, willPresentWithAdaptiveStyle style: UIModalPresentationStyle, transitionCoordinator: UIViewControllerTransitionCoordinator?) { - if style == .None { - if let navController = presentationController.presentedViewController as? UINavigationController { - removeDismissButton(navController) - } + + func presentationController(_ presentationController: UIPresentationController, willPresentWithAdaptiveStyle style: UIModalPresentationStyle, transitionCoordinator: UIViewControllerTransitionCoordinator?) { + if style == .none, + let navController = presentationController.presentedViewController as? UINavigationController { + removeDismissButton(navController) } } - - func didDismissPresentedView() { - presentedViewController?.dismissViewControllerAnimated(true, completion: nil) + + @objc private func didDismissPresentedView() { + presentedViewController?.dismiss(animated: true, completion: nil) } - - private func addDismissButton(navigationController: UINavigationController) { + + private func addDismissButton(_ navigationController: UINavigationController) { let rootViewController = navigationController.viewControllers[0] - rootViewController.navigationItem.leftBarButtonItem = UIBarButtonItem.init(barButtonSystemItem: .Done, - target: self, action: "didDismissPresentedView") + rootViewController.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(didDismissPresentedView)) } - - private func removeDismissButton(navigationController: UINavigationController) { + + private func removeDismissButton(_ navigationController: UINavigationController) { let rootViewController = navigationController.viewControllers[0] - rootViewController.navigationItem.leftBarButtonItem = nil; + rootViewController.navigationItem.leftBarButtonItem = nil } } diff --git a/AdaptivePopover/AdaptivePopover/SimpleTableViewController.swift b/AdaptivePopover/AdaptivePopover/SimpleTableViewController.swift index 68f8ac9..a41c123 100644 --- a/AdaptivePopover/AdaptivePopover/SimpleTableViewController.swift +++ b/AdaptivePopover/AdaptivePopover/SimpleTableViewController.swift @@ -33,32 +33,30 @@ import UIKit -class SimpleTableViewController: UIViewController { - +final class SimpleTableViewController: UIViewController { @IBOutlet var tableView: UITableView! - - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { - if segue.identifier == "ShowDetailSegue" { - if let indexPath = tableView.indexPathForCell(sender as! UITableViewCell) { - if let detailViewController = segue.destinationViewController as? DetailViewController { - detailViewController.detailText = "Item \(indexPath.row)" - } - } + + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + if segue.identifier == "ShowDetailSegue", + let sender = sender as? UITableViewCell, + let indexPath = tableView.indexPath(for: sender), + let detailViewController = segue.destination as? DetailViewController { + detailViewController.detailText = "Item \(indexPath.row)" } } } extension SimpleTableViewController: UITableViewDataSource { - func numberOfSectionsInTableView(tableView: UITableView) -> Int { + func numberOfSections(in tableView: UITableView) -> Int { return 1 } - - func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 10 } - - func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCellWithIdentifier("SimpleCell", forIndexPath: indexPath) + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "SimpleCell", for: indexPath) cell.textLabel?.text = "Item \(indexPath.row)" return cell } diff --git a/AdaptivePopover/README b/AdaptivePopover/README deleted file mode 100644 index c60fb7d..0000000 --- a/AdaptivePopover/README +++ /dev/null @@ -1,11 +0,0 @@ -======================================================================= -AdaptivePopover - Adapting popovers to size classes - -Version 1.0 30 Nov 2015 Initial version. -======================================================================= - -Example of how to use the UIPopoverPresentationController delegate -protocol to adapt a popover to compact size classes. See the following -post for further details: - -http://useyourloaf.com/blog/making-popovers-adapt-to-size-classes.html diff --git a/AdaptivePopover/README.md b/AdaptivePopover/README.md new file mode 100644 index 0000000..2f2a4be --- /dev/null +++ b/AdaptivePopover/README.md @@ -0,0 +1,10 @@ +# AdaptivePopover - Adapting popovers to size classes + ++ Version 2.0 09 Jan 2020 Updated for Xcode 11, Swift 5 and iOS 13 ++ Version 1.0 30 Nov 2015 Initial version. + +Example of how to use the `UIPopoverPresentationController` delegate +protocol to adapt a popover to compact size classes. See the following +post for further details: + ++ [Making Popovers Adapt to Size Classes](https://useyourloaf.com/blog/making-popovers-adapt-to-size-classes/) From 6449d3633fc9ec32bef31c4a18fe2f606f618c31 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Fri, 10 Jan 2020 16:33:06 +0000 Subject: [PATCH 30/56] Update for Xcode 11, Swift 5 and iOS 13 --- .../project.pbxproj | 3 + .../Designable.xcodeproj/project.pbxproj | 16 ++-- Designable/DesignableSwift/LevelView.swift | 46 ++++++------ .../DesignableSwift/LevelViewController.swift | 11 ++- Stacks/Stacks/HiddenViewController.swift | 9 +-- .../Stacks/ScrollingStackViewController.swift | 15 ++-- Stacks/Stacks/SizeClassViewController.swift | 19 +++-- Stacks/Stacks/ViewController.swift | 17 ++--- .../TwitterSearch.xcodeproj/project.pbxproj | 70 ++++++++++++++++-- .../AppIcon.appiconset/Contents.json | 30 ++++++++ .../AppIcon.appiconset/icon2-1024.png | Bin 0 -> 5005 bytes .../AppIcon.appiconset/icon2-20.png | Bin 0 -> 1470 bytes .../AppIcon.appiconset/icon2-20@2x-1.png | Bin 0 -> 1854 bytes .../AppIcon.appiconset/icon2-20@2x.png | Bin 0 -> 1854 bytes .../AppIcon.appiconset/icon2-20@3x.png | Bin 0 -> 2360 bytes .../TwitterSearch/LaunchScreen.storyboard | 18 +++-- .../TwitterSearch/Storyboard.storyboard | 46 ++++++------ .../WorldFacts.xcodeproj/project.pbxproj | 14 +++- 18 files changed, 207 insertions(+), 107 deletions(-) create mode 100644 TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-1024.png create mode 100644 TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20.png create mode 100644 TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@2x-1.png create mode 100644 TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@2x.png create mode 100644 TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@3x.png diff --git a/AnimatedConstraints/AnimatedConstraints.xcodeproj/project.pbxproj b/AnimatedConstraints/AnimatedConstraints.xcodeproj/project.pbxproj index 1144619..a579b76 100644 --- a/AnimatedConstraints/AnimatedConstraints.xcodeproj/project.pbxproj +++ b/AnimatedConstraints/AnimatedConstraints.xcodeproj/project.pbxproj @@ -112,6 +112,7 @@ TargetAttributes = { 53D8FD631B08B9E100265E63 = { CreatedOnToolsVersion = 6.3.1; + DevelopmentTeam = LCC2J94N44; }; }; }; @@ -281,6 +282,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CURRENT_PROJECT_VERSION = 2; + DEVELOPMENT_TEAM = LCC2J94N44; INFOPLIST_FILE = AnimatedConstraints/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.$(PRODUCT_NAME:rfc1034identifier)"; @@ -293,6 +295,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CURRENT_PROJECT_VERSION = 2; + DEVELOPMENT_TEAM = LCC2J94N44; INFOPLIST_FILE = AnimatedConstraints/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.$(PRODUCT_NAME:rfc1034identifier)"; diff --git a/Designable/Designable.xcodeproj/project.pbxproj b/Designable/Designable.xcodeproj/project.pbxproj index 7250625..53b2c3e 100644 --- a/Designable/Designable.xcodeproj/project.pbxproj +++ b/Designable/Designable.xcodeproj/project.pbxproj @@ -187,7 +187,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0900; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; TargetAttributes = { 538021F21B20EC3900434436 = { @@ -197,13 +197,13 @@ 53C515E71B2786ED0062905B = { CreatedOnToolsVersion = 6.3.2; DevelopmentTeam = LCC2J94N44; - LastSwiftMigration = 0900; + LastSwiftMigration = 1120; }; }; }; buildConfigurationList = 538021EE1B20EC3900434436 /* Build configuration list for PBXProject "Designable" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -307,6 +307,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -315,12 +316,14 @@ 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_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; @@ -361,6 +364,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -369,12 +373,14 @@ 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_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; @@ -444,7 +450,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; }; name = Debug; }; @@ -458,7 +464,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; }; name = Release; }; diff --git a/Designable/DesignableSwift/LevelView.swift b/Designable/DesignableSwift/LevelView.swift index 8306ece..7897fb2 100644 --- a/Designable/DesignableSwift/LevelView.swift +++ b/Designable/DesignableSwift/LevelView.swift @@ -34,18 +34,17 @@ import UIKit /** -A custom level view displayed as a horizontal colored bar which -changes color as the level drops below a configurable theshold. -Set the value of the level as a CGFloat between 0.0 and 1.0. -Customise the colors of the bar, the threshold, border width -and border color as required. -*/ + A custom level view displayed as a horizontal colored bar which + changes color as the level drops below a configurable theshold. + Set the value of the level as a CGFloat between 0.0 and 1.0. + Customise the colors of the bar, the threshold, border width + and border color as required. + */ @IBDesignable class LevelView: UIView { - /** - The current level value in the range 0.0 - 1.0. Defaults to 1.0. - */ + The current level value in the range 0.0 - 1.0. Defaults to 1.0. + */ @IBInspectable var value: CGFloat = 1.0 { didSet { updateLayoutProperties() @@ -53,9 +52,9 @@ class LevelView: UIView { } /** - The threshold value in the range 0.0 - 1.0 at which the bar color - changes between emptyColor and fullColor. Default is 0.3. - */ + The threshold value in the range 0.0 - 1.0 at which the bar color + changes between emptyColor and fullColor. Default is 0.3. + */ @IBInspectable var threshold: CGFloat = 0.3 { didSet { updateLayoutProperties() @@ -63,8 +62,8 @@ class LevelView: UIView { } /** - The border width for the frame surrounding the bar. Default is 2.0. - */ + The border width for the frame surrounding the bar. Default is 2.0. + */ @IBInspectable var borderWidth: CGFloat = 2.0 { didSet { updateLayoutProperties() @@ -72,8 +71,8 @@ class LevelView: UIView { } /** - The color of the bar border. Default is black. - */ + The color of the bar border. Default is black. + */ @IBInspectable var borderColor: UIColor = .black { didSet { updateLayoutProperties() @@ -81,23 +80,23 @@ class LevelView: UIView { } /** - The color of the bar when value >= threshold. Default is green. - */ + The color of the bar when value >= threshold. Default is green. + */ @IBInspectable var fullColor: UIColor = .green { didSet { updateLayoutProperties() } } - + /** - The color of the bar when value < threshold. Default is red. - */ + The color of the bar when value < threshold. Default is red. + */ @IBInspectable var emtpyColor: UIColor = .red { didSet { updateLayoutProperties() } } - + private let barLayer = CAShapeLayer() func setup() { @@ -109,7 +108,7 @@ class LevelView: UIView { super.init(frame: frame) setup() } - + required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) setup() @@ -130,5 +129,4 @@ class LevelView: UIView { layer.cornerRadius = 5.0 layer.masksToBounds = true } - } diff --git a/Designable/DesignableSwift/LevelViewController.swift b/Designable/DesignableSwift/LevelViewController.swift index 78b1793..1c17279 100644 --- a/Designable/DesignableSwift/LevelViewController.swift +++ b/Designable/DesignableSwift/LevelViewController.swift @@ -33,17 +33,16 @@ import UIKit -class LevelViewController: UIViewController { +final class LevelViewController: UIViewController { + @IBOutlet private var levelView: LevelView! + @IBOutlet private var stepper: UIStepper! - @IBOutlet weak var levelView: LevelView! - @IBOutlet weak var stepper: UIStepper! - override func viewDidLoad() { super.viewDidLoad() stepper.value = Double(levelView.value) } - - @IBAction func valueChanged(sender: UIStepper) { + + @IBAction func valueChanged(_ sender: UIStepper) { levelView.value = CGFloat(sender.value) } } diff --git a/Stacks/Stacks/HiddenViewController.swift b/Stacks/Stacks/HiddenViewController.swift index e099673..6943606 100644 --- a/Stacks/Stacks/HiddenViewController.swift +++ b/Stacks/Stacks/HiddenViewController.swift @@ -33,20 +33,19 @@ import UIKit -class HiddenViewController: UIViewController { - - @IBOutlet weak var extraHeart: UIImageView! +final class HiddenViewController: UIViewController { + @IBOutlet private var extraHeart: UIImageView! override func viewDidLoad() { super.viewDidLoad() configureView(traitCollection.verticalSizeClass) } - + override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) { super.willTransition(to: newCollection, with: coordinator) configureView(newCollection.verticalSizeClass) } - + private func configureView(_ verticalSizeClass: UIUserInterfaceSizeClass) { guard extraHeart != nil else { return diff --git a/Stacks/Stacks/ScrollingStackViewController.swift b/Stacks/Stacks/ScrollingStackViewController.swift index 75d9665..2363417 100644 --- a/Stacks/Stacks/ScrollingStackViewController.swift +++ b/Stacks/Stacks/ScrollingStackViewController.swift @@ -33,25 +33,24 @@ import UIKit -class ScrollingStackViewController: UIViewController { +final class ScrollingStackViewController: UIViewController { + @IBOutlet private var scrollView: UIScrollView! + @IBOutlet private var stackView: UIStackView! - @IBOutlet weak var scrollView: UIScrollView! - @IBOutlet weak var stackView: UIStackView! - @IBAction func singleTap(_ sender: UITapGestureRecognizer) { let heartImage = UIImage(named: "Heart") let heartImageView = UIImageView(image: heartImage) stackView.addArrangedSubview(heartImageView) scrollToEnd(heartImageView) } - + @IBAction func twoFingerTap(_ sender: UITapGestureRecognizer) { let starImage = UIImage(named: "Star") let starImageView = UIImageView(image: starImage) stackView.addArrangedSubview(starImageView) scrollToEnd(starImageView) } - + @IBAction func threeFingerTap(_ sender: UITapGestureRecognizer) { let views = stackView.arrangedSubviews for entry in views { @@ -59,11 +58,11 @@ class ScrollingStackViewController: UIViewController { entry.removeFromSuperview() } } - + private func scrollToEnd(_ addedView: UIView) { let contentViewHeight = scrollView.contentSize.height + addedView.bounds.height + stackView.spacing let offsetY = contentViewHeight - scrollView.bounds.height - if (offsetY > 0) { + if offsetY > 0 { scrollView.setContentOffset(CGPoint(x: scrollView.contentOffset.x, y: offsetY), animated: true) } } diff --git a/Stacks/Stacks/SizeClassViewController.swift b/Stacks/Stacks/SizeClassViewController.swift index 50204ec..de4e79b 100644 --- a/Stacks/Stacks/SizeClassViewController.swift +++ b/Stacks/Stacks/SizeClassViewController.swift @@ -33,9 +33,8 @@ import UIKit -class SizeClassViewController: UIViewController { - - @IBOutlet weak var stackView: UIStackView! +final class SizeClassViewController: UIViewController { + @IBOutlet private var stackView: UIStackView! // The alignment axis of the stack view should be set correctly in the Storyboard // for the given size classes. It should be horizontal except for when the view @@ -51,17 +50,17 @@ class SizeClassViewController: UIViewController { // super.viewDidLoad() // configureViewForSize(view.bounds.size) // } - -// override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { -// super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) +// +// override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { +// super.viewWillTransition(to: size, with: coordinator) // configureViewForSize(size) // } - -// private func configureViewForSize(size: CGSize) { +// +// private func configureViewForSize(_ size: CGSize) { // if size.width > size.height { -// stackView.axis = .Horizontal +// stackView.axis = .horizontal // } else { -// stackView.axis = .Vertical +// stackView.axis = .vertical // } // } } diff --git a/Stacks/Stacks/ViewController.swift b/Stacks/Stacks/ViewController.swift index f4750d3..f172d89 100644 --- a/Stacks/Stacks/ViewController.swift +++ b/Stacks/Stacks/ViewController.swift @@ -33,24 +33,23 @@ import UIKit -class ViewController: UIViewController { - - @IBOutlet weak var axisSwitch: UISwitch! - @IBOutlet weak var stackView: UIStackView! - +final class ViewController: UIViewController { + @IBOutlet private var axisSwitch: UISwitch! + @IBOutlet private var stackView: UIStackView! + @IBAction func axisChange(_ sender: UISwitch) { UIView.animate(withDuration: 1.0, animations: { self.updateConstraintsForAxis() - }) + }) } - + override func viewDidLoad() { super.viewDidLoad() updateConstraintsForAxis() } - fileprivate func updateConstraintsForAxis() { - if (axisSwitch.isOn) { + private func updateConstraintsForAxis() { + if axisSwitch.isOn { stackView.axis = .horizontal } else { stackView.axis = .vertical diff --git a/TwitterSearch/TwitterSearch.xcodeproj/project.pbxproj b/TwitterSearch/TwitterSearch.xcodeproj/project.pbxproj index 4b86589..7223dfd 100644 --- a/TwitterSearch/TwitterSearch.xcodeproj/project.pbxproj +++ b/TwitterSearch/TwitterSearch.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 47; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -209,7 +209,7 @@ 53CB80F0139D70FF0030ADD7 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0700; + LastUpgradeCheck = 1120; TargetAttributes = { 5345C8541C32CC3C00B88AB7 = { CreatedOnToolsVersion = 7.2; @@ -221,11 +221,12 @@ }; }; buildConfigurationList = 53CB80F3139D70FF0030ADD7 /* Build configuration list for PBXProject "TwitterSearch" */; - compatibilityVersion = "Xcode 6.3"; - developmentRegion = English; + compatibilityVersion = "Xcode 11.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = 53CB80EE139D70FF0030ADD7; productRefGroup = 53CB80FA139D70FF0030ADD7 /* Products */; @@ -338,7 +339,11 @@ GCC_WARN_UNUSED_FUNCTION = YES; INFOPLIST_FILE = TwitterSearchUnitTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.TwitterSearchUnitTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -377,7 +382,11 @@ GCC_WARN_UNUSED_FUNCTION = YES; INFOPLIST_FILE = TwitterSearchUnitTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.TwitterSearchUnitTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -389,14 +398,38 @@ 53CB8118139D70FF0030ADD7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = "compiler-default"; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = DEBUG; GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.0; ONLY_ACTIVE_ARCH = YES; @@ -407,10 +440,34 @@ 53CB8119139D70FF0030ADD7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = "compiler-default"; + GCC_NO_COMMON_BLOCKS = YES; GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; @@ -472,6 +529,7 @@ 5345C85E1C32CC3C00B88AB7 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; 53CB80F3139D70FF0030ADD7 /* Build configuration list for PBXProject "TwitterSearch" */ = { isa = XCConfigurationList; diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Contents.json b/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Contents.json index 49901b5..dd3842a 100644 --- a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,5 +1,17 @@ { "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "icon2-20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "icon2-20@3x.png", + "scale" : "3x" + }, { "size" : "29x29", "idiom" : "iphone", @@ -36,6 +48,18 @@ "filename" : "Icon@3x.png", "scale" : "3x" }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "icon2-20.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "icon2-20@2x-1.png", + "scale" : "2x" + }, { "size" : "29x29", "idiom" : "ipad", @@ -77,6 +101,12 @@ "idiom" : "ipad", "filename" : "Icon2-835@2x.png", "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "icon2-1024.png", + "scale" : "1x" } ], "info" : { diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-1024.png b/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..b628b9e9dc88a6f68cb8bf7379717aece1d91bb2 GIT binary patch literal 5005 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 JPyb(z(OuPOt@OY8~S2Jn$ zmYPz034-PQd~qyklnYl=n0WUB(8x5+N@w`tONHM7=wOzG1UEKiOU_3q075%1o|VXUgwTQxL@p@96GO98*g z@P2HUN@W$+9J+#{H;hb5jG^_0_WVlgG}l;_ZKuA`QzsF)=A%^Vp}z>Y9-Ch>TW<54h53-tf3uAwQ}Zr zURuu6e8sHZNJ003_anVe81X^CIE6w{>q8jFZN`SIaj65gUexYLg82p9-k@bli|pzt zMli{bkRLOGn$639h>slyTkVXj=fUw=B(#j3!|@?V<7_~JiTmPus`Y7QwxicAV>~#K zgKI2)M|Aj>&A@9Jl7k94qK7h_l^U(V8U#7;hwgc}!DwIMKDJ{9Fjp7o-ufnDya~C~ z@>r%^EdGH$_!x44g`!IM@xG=EUvC)o!0={HxSbMP+ZSdlNX->U%B~>{voZkpdGHvv z`T@Q*yMh=NMlOBHkSX_8AxE)zJNkY7$ZW-ARVD;U@fT+Cb%O@{(t@q_AeUN?5W{f{ zn3E}1S0Ts5c-d4%5IOr~is#VesNXq=;TpKlEEzHE0}b%>gRNd-xOO9kJsI%Q%jR7q zk&}hes6%K!bvn!#)C44RoaNyPYiRw#%sgG6Fx&_r&YS=PTtFiLFax4M7zj8GFkVal z&crphy#U^~fc}GADojDH8e_p0LCoKoC&5mJ|9AE!w|_s>f1D6k&p)5{|41ep584ft z_10qK#$lqTk8`VkD81X782<-r`#wsYk*NEcCio^nlW#B-B_{|37a;u=! z;{2RaP!NRXWtP|(*?>KSE{q5fh%V>++=8Oi;$omSJ5#6@WHEI05eRGS%wcvQ3!-cA zFUkb^G!f)3J42`i$YSW~Be7Y4EQq856!caBnH8xy5iXg)00sNP$iPM)s|316=lq=f zqTqtW-m&{c!2iNs|Mk_3{*lw_;o(xj}^&9Q?K>r=>mv!<=wnrF z15624zWFJcX_YRCC8>5s28I^828OzZmLZ0wRtAPvmcUp;Q-kCJkc@LtYGO%#QAmD% zjvd$+xgf5Bv7R|ZC$c;NR|bQ0`sgL7f>fG|J!l7&Mrs;7AK~jE{-7< zg2{6hS#&nW9B^6ZHo;D8&8(R>|8cF{%P{GEUiaT$XBtC!%g#nUT%Ma{zPacxlh^;h zC#%wC9iDmeT*TMKx7R$WySlOV?b6n;>Eh8FKmIZCvCW9v@%wY|!P&2S48AV@eN(0S z|K`hG?b3hk?g&?wdRE1|o;cqhleJIWu$0O5Lhip$bKYN6EZuSGe*DdUHR*{DfAESs zrY*?6H%+cxM>n^yKl;(-si|TonhMNzZGI@^z&8I)^>t3|dv~YpFt{!jDRb`FN=b=Z zb=}YY{XV+K((dK?@~|CjDQtdc*)-dKrrggv-}CoV6MrPLk@WJk1^Myu6YFY2xgt%a zq-_s8xD-E+v!?nm^Yf(C2Uqs&*Wy^smg4y4+%th6(+U?`J*<%46y#%8c6P?A4P6F& h5p~N>+!V=VW5}Ks=ek{F^-NHq>gnp|vd$@?2>|oQ_J#le literal 0 HcmV?d00001 diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@2x-1.png b/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@2x-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d6fccd4d7f412e0b0f9518812c703a0f50ace629 GIT binary patch literal 1854 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1SFZ~=vx6P#^NA%Cx&(BWL^R}oCO|{#S9GG z!XV7ZFl&wk0|SdvW=KRygs+cPa(=E}VoH8es$NBI0Z=sqgH44MkeQoWlBiITo0C^; zRbi_HR$&EXgM{^!6u?SKvTcwsYk*NEcCio^nlW#B-B_{|37a;u=! z;{2RaP!NRXWtP|(*?>KSE{q5fh%V>++=8Oi;$omSJ5#6@WHEI05eRGS%wcvQ3!-cA zFUkb^G!f)3J42`i$YSW~Be7Y4EQq856!caBnH8xy5iXg)00sNP#K1-$s|316=lq=f zqTqtW-m&{c!2iNs|Mk_3{*lw_;o(xj}^&9Q?K>r=>mv!<=wnrF z15624zWFJcX_YRCC8>5s28I^828OzZmLZ0wRtAPv20-tksX=l9NXEG+HL)bWC?r2W z#}4d^To6~mSkD}y6ImXr)kYtbi;!{^B+G(DfqB-B3#b#8|LwSfH7i9K7?`$tx;TbJ za3;@LWYL+Zz;M|if@@Rpm84y*Hr$eC8w>sjhSeWD^Y8cH*o*J;D^D0Ou4rZHo_X`% ztY_~7OLpq5_|i4;r~Hw9^71?0y}e+2@$t96vgV$83EzaisJJyxc%^-x^>e6=elb^l zV#+W6>xT|~j1GCeGVI99_4+^V-<#0VEu13oG}-Rv_l45SHWd70lKTEz`u65vFMa(} ze}0}*TkT@B3GdF+kvo2d#Ssnc7Y-!S4wNpv2SLq5w+usqtJ57weCu&FgIiJE$ zGq*c9d^9zF9e@4bRPEYN|Nbg!bqj^5B$tMt{Ht|gnZ13)b@wHTx4A_A{0OMX&(t_v z@1_v#@wT<&S@Dk9AB;Jo*Sx8eOgeJ)>9hNBpOd7%Kbmvrcl8AWfr~Y5D;ZXEBzCh- zx#v(~cVl(uRgMJ@X0Hws&`j(V-*II@r|`CjfRCas=btZU%9!;qhHqiMz_@Rrqfd;0V8WEeo(~@hZToT0FE?hE;v=uT>lI7yGvECG&*<*` zW@D=hJc?#17q%SSImanJSK7>Jhxv8s`pR?s(+{0ra3YDX@%=yVXCFLjSZ;lM*m&Zh zTl}ACil-;#8%n?D-|t%7V(K9I{WbT#vma0H-@i#wx_7>>Mc>9(=}AAITj$$tn8J3d zu2OGS$#XpUcXLL#a&k#6m7iiz#}UG|W^Ti_x*CU^q_){UegVwFQ#{YvbqM}G z<#cj`=!)qw-KxHFOxY?6o=q1|?L2Q^u-{4INrcY2{}PLS-qdt8dED`QQnF$H7xoU; z`SUph^Mz-56$O3W9i8Ogw~~SP*B_qrm%VAcYSRmkd{yz_%VIogezCe*!SVaQbvKNz zE1gMDach}#gw=fdM8S)9TDXNy0zIqr_Q0x~13Ge*E2|DPRb5G1<2hffNm+jdb=D*ylh literal 0 HcmV?d00001 diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@2x.png b/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d6fccd4d7f412e0b0f9518812c703a0f50ace629 GIT binary patch literal 1854 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1SFZ~=vx6P#^NA%Cx&(BWL^R}oCO|{#S9GG z!XV7ZFl&wk0|SdvW=KRygs+cPa(=E}VoH8es$NBI0Z=sqgH44MkeQoWlBiITo0C^; zRbi_HR$&EXgM{^!6u?SKvTcwsYk*NEcCio^nlW#B-B_{|37a;u=! z;{2RaP!NRXWtP|(*?>KSE{q5fh%V>++=8Oi;$omSJ5#6@WHEI05eRGS%wcvQ3!-cA zFUkb^G!f)3J42`i$YSW~Be7Y4EQq856!caBnH8xy5iXg)00sNP#K1-$s|316=lq=f zqTqtW-m&{c!2iNs|Mk_3{*lw_;o(xj}^&9Q?K>r=>mv!<=wnrF z15624zWFJcX_YRCC8>5s28I^828OzZmLZ0wRtAPv20-tksX=l9NXEG+HL)bWC?r2W z#}4d^To6~mSkD}y6ImXr)kYtbi;!{^B+G(DfqB-B3#b#8|LwSfH7i9K7?`$tx;TbJ za3;@LWYL+Zz;M|if@@Rpm84y*Hr$eC8w>sjhSeWD^Y8cH*o*J;D^D0Ou4rZHo_X`% ztY_~7OLpq5_|i4;r~Hw9^71?0y}e+2@$t96vgV$83EzaisJJyxc%^-x^>e6=elb^l zV#+W6>xT|~j1GCeGVI99_4+^V-<#0VEu13oG}-Rv_l45SHWd70lKTEz`u65vFMa(} ze}0}*TkT@B3GdF+kvo2d#Ssnc7Y-!S4wNpv2SLq5w+usqtJ57weCu&FgIiJE$ zGq*c9d^9zF9e@4bRPEYN|Nbg!bqj^5B$tMt{Ht|gnZ13)b@wHTx4A_A{0OMX&(t_v z@1_v#@wT<&S@Dk9AB;Jo*Sx8eOgeJ)>9hNBpOd7%Kbmvrcl8AWfr~Y5D;ZXEBzCh- zx#v(~cVl(uRgMJ@X0Hws&`j(V-*II@r|`CjfRCas=btZU%9!;qhHqiMz_@Rrqfd;0V8WEeo(~@hZToT0FE?hE;v=uT>lI7yGvECG&*<*` zW@D=hJc?#17q%SSImanJSK7>Jhxv8s`pR?s(+{0ra3YDX@%=yVXCFLjSZ;lM*m&Zh zTl}ACil-;#8%n?D-|t%7V(K9I{WbT#vma0H-@i#wx_7>>Mc>9(=}AAITj$$tn8J3d zu2OGS$#XpUcXLL#a&k#6m7iiz#}UG|W^Ti_x*CU^q_){UegVwFQ#{YvbqM}G z<#cj`=!)qw-KxHFOxY?6o=q1|?L2Q^u-{4INrcY2{}PLS-qdt8dED`QQnF$H7xoU; z`SUph^Mz-56$O3W9i8Ogw~~SP*B_qrm%VAcYSRmkd{yz_%VIogezCe*!SVaQbvKNz zE1gMDach}#gw=fdM8S)9TDXNy0zIqr_Q0x~13Ge*E2|DPRb5G1<2hffNm+jdb=D*ylh literal 0 HcmV?d00001 diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@3x.png b/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..fafe1474834c9acdfd6faa4c82d753eca7ab6ad8 GIT binary patch literal 2360 zcmZ`*4OCKT8phN#mDSQ}b+i!wnsMX;rY0i(Vc@^1m9Dl%fI^`lpy1TV9Cz|a-#%K>?) zRpr3mekA^1k$e(sNleqkC2v@D<(Mcchsj7+w_tZFor^zC8_Jep_T=-v6cC8s|jd>S_F0LF_CmWl@W`l zgALWVa7SW+RRb%D0Zayy9nB( zJzqZa-e$J89~}{~O^^lmb@}1DXOZJH$05OWRPR-I___-c>Byzwy_COr%;9|O@(EB? zR9>M)<}t)@UG25W{!WLxlK9gm`Bx8TecMN<{3hX6Nr#?yTHoW%9=Csg^*~Y-@W?BR zDr@Q<2d;?27v^R9p{}wgl}&vEx$bW9Uk7KLJZKr|?K}*${R%zlXxewjc-TL@bk9`h z&*!*$se0e5W}RM~nYhlo_FU3t_jdU2DpAt zMD+FP#s>4{ak7Ee28wLCT+hA7DKU;Q_xS9X+%#b^%XRVXfJ#+9*>B7q-cz#pt_Mz^ z&lNu1nqcg;$U`&&v%Et$0*MC-%CG}}&Nis#eOpEpK~?v&TI=hHcE;U`#RcSVV zZ*PKFL!#xB6*adVbtKvsZzoIaO#6V?PUP^%H!} zZBK@jiqpyA$j13V_qYG%_6jR%QpYgSrHK@Zu0-;v zP4c^5oSx~se>p!ioeeD5$TG}&DspJaBMcF<#R|S4m*yQfbR_-goHB7h27jXfZkG?| zmUSnp4&C@FBwO4weHIepOo@J|+!*j|1Eo{qc(i)$gJ3^%+Z-_JdGt=e)2ZmYrG9yN z+p^YPe+8t?=?psA?yy9Uw3~tTsdD+lHsr_=dwdiw z=Y@l9X4gzXFT}kewp9Rs(b00(;-?Vo>G0#5?tOdFoMWws6G)nMPCLlp(&p!nX`5~< zyNW#imX?_*?8!GRlX_XiISkqi4lMK@8iKE{OO~~)iQnt=4YmM0w0lFpb#1Bq@3ceH z(6&>H_3|<=PKA)sxPQh3Y6E5X9uD0Hf5p;OJW(niwAed9`k@rRD8&`_cDpIT@H%IU zeV1*$#$EwMDRh-wUUAL0;J(?->L10HmSt^wYWe&8Gj5#QdMQ5o$vNxjoty0Q!~CE6 zx9ekeIo;Ql+twOX9UGMa@njKRxJ@vjC(Yy zDok>$Q)V(7BFq(ESTtRDNlUxgd+TiRiT_N`=XLkY4awkz%^n zA8#EmYVH&=6hBO{|7pd=yBC!nUz<@kHyVk#$V9%~E6WfKR#%H#@jj^L3KL{|r(JkU z|0J!lTHH8Yy+t%6l#WDFzC4JrQY09@TTCo1i5Rp}DYrh0sBtM*`pB#|_e}dV83wxQ z$kzTQ3KNZquNvf3iZ2vbTU!3ogCpmthWECcjEw}BTqK&8mx|*&1rFBCo-0RM{ytI< zyexTAm}}BEiW;W{SCm - + + + - + + @@ -10,13 +12,13 @@ - - + + - + - + @@ -30,7 +32,7 @@ - + diff --git a/TwitterSearch/TwitterSearch/Storyboard.storyboard b/TwitterSearch/TwitterSearch/Storyboard.storyboard index e6f596e..4739dc5 100644 --- a/TwitterSearch/TwitterSearch/Storyboard.storyboard +++ b/TwitterSearch/TwitterSearch/Storyboard.storyboard @@ -1,9 +1,10 @@ - - + + + - - + + @@ -11,6 +12,7 @@ + @@ -26,15 +28,15 @@ - - + + - + - + @@ -42,11 +44,11 @@ - + - + @@ -63,38 +65,38 @@ - + - + - + - + - + - + @@ -121,7 +123,7 @@ - + diff --git a/WorldFacts/WorldFacts.xcodeproj/project.pbxproj b/WorldFacts/WorldFacts.xcodeproj/project.pbxproj index debcaf9..dc570e8 100644 --- a/WorldFacts/WorldFacts.xcodeproj/project.pbxproj +++ b/WorldFacts/WorldFacts.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -246,7 +246,7 @@ }; }; buildConfigurationList = 538A7972157E567E0007B8A5 /* Build configuration list for PBXProject "WorldFacts" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 11.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -364,7 +364,10 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; INFOPLIST_FILE = WorldFactsBuilder/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); MACOSX_DEPLOYMENT_TARGET = 10.10; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.$(PRODUCT_NAME:rfc1034identifier)"; @@ -387,7 +390,10 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; INFOPLIST_FILE = WorldFactsBuilder/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); MACOSX_DEPLOYMENT_TARGET = 10.10; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.$(PRODUCT_NAME:rfc1034identifier)"; From 56876926ad49a31b1e9f44b49284ddfeb70cf2d1 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Fri, 10 Jan 2020 17:06:46 +0000 Subject: [PATCH 31/56] Update for Xcode 11 --- .../AlertController.xcodeproj/project.pbxproj | 61 ++++++++++++++++--- .../Base.lproj/Launch Screen.storyboard | 29 +++++++++ .../Base.lproj/Main.storyboard | 33 +++++----- .../AppIcon.appiconset/Contents.json | 45 ++++++++++++++ .../Images.xcassets/Contents.json | 6 ++ .../LaunchImage.launchimage/Contents.json | 51 ---------------- AlertController/AlertController/Info.plist | 4 +- AlertController/README | 2 +- 8 files changed, 155 insertions(+), 76 deletions(-) create mode 100644 AlertController/AlertController/Base.lproj/Launch Screen.storyboard create mode 100644 AlertController/AlertController/Images.xcassets/Contents.json delete mode 100644 AlertController/AlertController/Images.xcassets/LaunchImage.launchimage/Contents.json diff --git a/AlertController/AlertController.xcodeproj/project.pbxproj b/AlertController/AlertController.xcodeproj/project.pbxproj index be08d10..5ac5e6a 100644 --- a/AlertController/AlertController.xcodeproj/project.pbxproj +++ b/AlertController/AlertController.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -13,6 +13,7 @@ 5307C7DE19B6245B00CFD37F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5307C7DC19B6245B00CFD37F /* Main.storyboard */; }; 5307C7E019B6245B00CFD37F /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5307C7DF19B6245B00CFD37F /* Images.xcassets */; }; 53AF7FFA1AECFD9C00683F34 /* README in Resources */ = {isa = PBXBuildFile; fileRef = 53AF7FF91AECFD9C00683F34 /* README */; }; + 53B2CD6023C8E61A007FF91F /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 53B2CD6223C8E61A007FF91F /* Launch Screen.storyboard */; }; 53D5575019B66F5D005EAFDF /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 53D5574E19B66F5D005EAFDF /* Localizable.strings */; }; /* End PBXBuildFile section */ @@ -27,6 +28,7 @@ 5307C7DD19B6245B00CFD37F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 5307C7DF19B6245B00CFD37F /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 53AF7FF91AECFD9C00683F34 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; + 53B2CD6123C8E61A007FF91F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = "Base.lproj/Launch Screen.storyboard"; sourceTree = ""; }; 53D5574F19B66F5D005EAFDF /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; /* End PBXFileReference section */ @@ -66,6 +68,7 @@ 5307C7D919B6245B00CFD37F /* ViewController.h */, 5307C7DA19B6245B00CFD37F /* ViewController.m */, 5307C7DC19B6245B00CFD37F /* Main.storyboard */, + 53B2CD6223C8E61A007FF91F /* Launch Screen.storyboard */, 5307C7DF19B6245B00CFD37F /* Images.xcassets */, 5307C7D219B6245B00CFD37F /* Supporting Files */, ); @@ -108,7 +111,7 @@ 5307C7C719B6245B00CFD37F /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0600; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; TargetAttributes = { 5307C7CE19B6245B00CFD37F = { @@ -117,8 +120,8 @@ }; }; buildConfigurationList = 5307C7CA19B6245B00CFD37F /* Build configuration list for PBXProject "AlertController" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + compatibilityVersion = "Xcode 11.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -142,6 +145,7 @@ 53AF7FFA1AECFD9C00683F34 /* README in Resources */, 5307C7DE19B6245B00CFD37F /* Main.storyboard in Resources */, 53D5575019B66F5D005EAFDF /* Localizable.strings in Resources */, + 53B2CD6023C8E61A007FF91F /* Launch Screen.storyboard in Resources */, 5307C7E019B6245B00CFD37F /* Images.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -170,6 +174,14 @@ name = Main.storyboard; sourceTree = ""; }; + 53B2CD6223C8E61A007FF91F /* Launch Screen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 53B2CD6123C8E61A007FF91F /* Base */, + ); + name = "Launch Screen.storyboard"; + sourceTree = ""; + }; 53D5574E19B66F5D005EAFDF /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( @@ -185,24 +197,37 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -227,17 +252,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -245,6 +281,7 @@ ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + 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; @@ -263,9 +300,13 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + DEVELOPMENT_TEAM = LCC2J94N44; INFOPLIST_FILE = AlertController/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -274,9 +315,13 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + DEVELOPMENT_TEAM = LCC2J94N44; INFOPLIST_FILE = AlertController/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/AlertController/AlertController/Base.lproj/Launch Screen.storyboard b/AlertController/AlertController/Base.lproj/Launch Screen.storyboard new file mode 100644 index 0000000..02419c6 --- /dev/null +++ b/AlertController/AlertController/Base.lproj/Launch Screen.storyboard @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AlertController/AlertController/Base.lproj/Main.storyboard b/AlertController/AlertController/Base.lproj/Main.storyboard index c45897b..13541af 100644 --- a/AlertController/AlertController/Base.lproj/Main.storyboard +++ b/AlertController/AlertController/Base.lproj/Main.storyboard @@ -1,7 +1,10 @@ - - + + + - + + + @@ -13,59 +16,59 @@ - + - + diff --git a/AlertController/AlertController/Images.xcassets/AppIcon.appiconset/Contents.json b/AlertController/AlertController/Images.xcassets/AppIcon.appiconset/Contents.json index 91bf9c1..d8db8d6 100644 --- a/AlertController/AlertController/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/AlertController/AlertController/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,18 +1,53 @@ { "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" }, { @@ -44,6 +79,16 @@ "idiom" : "ipad", "size" : "76x76", "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" } ], "info" : { diff --git a/AlertController/AlertController/Images.xcassets/Contents.json b/AlertController/AlertController/Images.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/AlertController/AlertController/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/AlertController/AlertController/Images.xcassets/LaunchImage.launchimage/Contents.json b/AlertController/AlertController/Images.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index 6f870a4..0000000 --- a/AlertController/AlertController/Images.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "subtype" : "retina4", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/AlertController/AlertController/Info.plist b/AlertController/AlertController/Info.plist index 984f066..3af6cd7 100644 --- a/AlertController/AlertController/Info.plist +++ b/AlertController/AlertController/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - com.useyourloaf.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -22,6 +22,8 @@ 1 LSRequiresIPhoneOS + UILaunchStoryboardName + Launch Screen UIMainStoryboardFile Main UIRequiredDeviceCapabilities diff --git a/AlertController/README b/AlertController/README index 72a408d..3b9896a 100644 --- a/AlertController/README +++ b/AlertController/README @@ -10,4 +10,4 @@ action sheet views. The UIAlertController class was introduced in iOS 8 as a replacement for UIAlertView and UIActionSheet. Full details in the following post: -http://useyourloaf.com/blog/2014/09/05/uialertcontroller-changes-in-ios-8.html +https://useyourloaf.com/blog/uialertcontroller-changes-in-ios-8/ From 56fc39aca92c8ce22155bd93c574230b84213466 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Fri, 10 Jan 2020 17:55:15 +0000 Subject: [PATCH 32/56] Update for Xcode 11 --- QReader/QReader.xcodeproj/project.pbxproj | 61 ++++++++++++--- .../Base.lproj/LaunchScreen.storyboard | 29 +++++++ .../AppIcon.appiconset/Contents.json | 72 +++++++++++++++--- .../AppIcon.appiconset/icon-29.png | Bin 780 -> 0 bytes .../AppIcon.appiconset/icon-29@2x-1.png | Bin 6643 -> 0 bytes .../AppIcon.appiconset/icon-29@2x.png | Bin 6643 -> 0 bytes .../AppIcon.appiconset/icon-40.png | Bin 1232 -> 0 bytes .../AppIcon.appiconset/icon-40@2x-1.png | Bin 8186 -> 0 bytes .../AppIcon.appiconset/icon-40@2x.png | Bin 8186 -> 0 bytes .../AppIcon.appiconset/icon-60@2x.png | Bin 9227 -> 0 bytes .../AppIcon.appiconset/icon-76.png | Bin 2129 -> 0 bytes .../AppIcon.appiconset/icon-76@2x.png | Bin 9585 -> 0 bytes .../AppIcon.appiconset/qr-1024.png | Bin 0 -> 951 bytes .../AppIcon.appiconset/qr-120.png | Bin 0 -> 2408 bytes .../AppIcon.appiconset/qr-121.png | Bin 0 -> 2408 bytes .../AppIcon.appiconset/qr-152.png | Bin 0 -> 2988 bytes .../AppIcon.appiconset/qr-167.png | Bin 0 -> 2707 bytes .../AppIcon.appiconset/qr-180.png | Bin 0 -> 2937 bytes .../AppIcon.appiconset/qr-20.png | Bin 0 -> 510 bytes .../AppIcon.appiconset/qr-29.png | Bin 0 -> 859 bytes .../AppIcon.appiconset/qr-40.png | Bin 0 -> 1297 bytes .../AppIcon.appiconset/qr-41.png | Bin 0 -> 1297 bytes .../AppIcon.appiconset/qr-42.png | Bin 0 -> 1297 bytes .../AppIcon.appiconset/qr-58.png | Bin 0 -> 1826 bytes .../AppIcon.appiconset/qr-59.png | Bin 0 -> 1826 bytes .../AppIcon.appiconset/qr-60.png | Bin 0 -> 1816 bytes .../AppIcon.appiconset/qr-76.png | Bin 0 -> 2263 bytes .../AppIcon.appiconset/qr-80.png | Bin 0 -> 2143 bytes .../AppIcon.appiconset/qr-81.png | Bin 0 -> 2143 bytes .../AppIcon.appiconset/qr-87.png | Bin 0 -> 2369 bytes QReader/QReader/Images.xcassets/Contents.json | 6 ++ .../LaunchImage.launchimage/Contents.json | 51 ------------- QReader/QReader/QReader-Info.plist | 8 +- QReader/QReader/QReader-Prefix.pch | 16 ---- QReader/README | 4 +- 35 files changed, 155 insertions(+), 92 deletions(-) create mode 100644 QReader/QReader/Base.lproj/LaunchScreen.storyboard delete mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-29.png delete mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-29@2x-1.png delete mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-29@2x.png delete mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-40.png delete mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-40@2x-1.png delete mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-40@2x.png delete mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-60@2x.png delete mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-76.png delete mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-76@2x.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-1024.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-120.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-121.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-152.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-167.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-180.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-20.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-29.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-40.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-41.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-42.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-58.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-59.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-60.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-76.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-80.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-81.png create mode 100644 QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-87.png create mode 100644 QReader/QReader/Images.xcassets/Contents.json delete mode 100644 QReader/QReader/Images.xcassets/LaunchImage.launchimage/Contents.json delete mode 100644 QReader/QReader/QReader-Prefix.pch diff --git a/QReader/QReader.xcodeproj/project.pbxproj b/QReader/QReader.xcodeproj/project.pbxproj index 4c81bae..a29ccae 100644 --- a/QReader/QReader.xcodeproj/project.pbxproj +++ b/QReader/QReader.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -21,6 +21,7 @@ 5344A5B218DF769400C61776 /* UYLTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5344A5B118DF769400C61776 /* UYLTableViewController.m */; }; 5344A5B418DF769400C61776 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5344A5B318DF769400C61776 /* Images.xcassets */; }; 537EB39F18E231FE006B6FF5 /* UYLWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 537EB39E18E231FE006B6FF5 /* UYLWebViewController.m */; }; + 53B2CD6523C8ED8C007FF91F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 53B2CD6723C8ED8C007FF91F /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -37,7 +38,6 @@ 5344A5A018DF769400C61776 /* QReader-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "QReader-Info.plist"; sourceTree = ""; }; 5344A5A218DF769400C61776 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 5344A5A418DF769400C61776 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 5344A5A618DF769400C61776 /* QReader-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "QReader-Prefix.pch"; sourceTree = ""; }; 5344A5A718DF769400C61776 /* UYLAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UYLAppDelegate.h; sourceTree = ""; }; 5344A5A818DF769400C61776 /* UYLAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLAppDelegate.m; sourceTree = ""; }; 5344A5AB18DF769400C61776 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main_iPhone.storyboard; sourceTree = ""; }; @@ -48,6 +48,7 @@ 5344A5BA18DF769400C61776 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 537EB39D18E231FE006B6FF5 /* UYLWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLWebViewController.h; sourceTree = ""; }; 537EB39E18E231FE006B6FF5 /* UYLWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLWebViewController.m; sourceTree = ""; }; + 53B2CD6623C8ED8C007FF91F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -131,12 +132,12 @@ 5344A59F18DF769400C61776 /* Supporting Files */ = { isa = PBXGroup; children = ( + 53B2CD6723C8ED8C007FF91F /* LaunchScreen.storyboard */, 5344A5A718DF769400C61776 /* UYLAppDelegate.h */, 5344A5A818DF769400C61776 /* UYLAppDelegate.m */, 5344A5A018DF769400C61776 /* QReader-Info.plist */, 5344A5A118DF769400C61776 /* InfoPlist.strings */, 5344A5A418DF769400C61776 /* main.m */, - 5344A5A618DF769400C61776 /* QReader-Prefix.pch */, 53249C0219AF6D8400EA1639 /* Localizable.strings */, ); name = "Supporting Files"; @@ -169,7 +170,7 @@ isa = PBXProject; attributes = { CLASSPREFIX = UYL; - LastUpgradeCheck = 0510; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; TargetAttributes = { 5344A59418DF769400C61776 = { @@ -178,8 +179,8 @@ }; }; buildConfigurationList = 5344A59018DF769400C61776 /* Build configuration list for PBXProject "QReader" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + compatibilityVersion = "Xcode 11.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -203,6 +204,7 @@ 53249C0419AF6D8400EA1639 /* Localizable.strings in Resources */, 5344A5AF18DF769400C61776 /* Main_iPad.storyboard in Resources */, 5344A5B418DF769400C61776 /* Images.xcassets in Resources */, + 53B2CD6523C8ED8C007FF91F /* LaunchScreen.storyboard in Resources */, 5344A5AC18DF769400C61776 /* Main_iPhone.storyboard in Resources */, 5344A5A318DF769400C61776 /* InfoPlist.strings in Resources */, ); @@ -259,6 +261,14 @@ name = Main_iPad.storyboard; sourceTree = ""; }; + 53B2CD6723C8ED8C007FF91F /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 53B2CD6623C8ED8C007FF91F /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ @@ -266,22 +276,37 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -294,7 +319,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -305,29 +330,43 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + 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 = 7.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; @@ -338,11 +377,10 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CODE_SIGN_IDENTITY = "iPhone Developer"; GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "QReader/QReader-Prefix.pch"; INFOPLIST_FILE = "QReader/QReader-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; @@ -352,11 +390,10 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CODE_SIGN_IDENTITY = "iPhone Developer"; GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "QReader/QReader-Prefix.pch"; INFOPLIST_FILE = "QReader/QReader-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; diff --git a/QReader/QReader/Base.lproj/LaunchScreen.storyboard b/QReader/QReader/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..8b40a2e --- /dev/null +++ b/QReader/QReader/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/QReader/QReader/Images.xcassets/AppIcon.appiconset/Contents.json b/QReader/QReader/Images.xcassets/AppIcon.appiconset/Contents.json index 9f52deb..d74362b 100644 --- a/QReader/QReader/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/QReader/QReader/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,58 +1,112 @@ { "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "qr-40.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "qr-60.png", + "scale" : "3x" + }, { "size" : "29x29", "idiom" : "iphone", - "filename" : "icon-29@2x.png", + "filename" : "qr-58.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "qr-87.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "qr-80.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "iphone", - "filename" : "icon-40@2x-1.png", + "filename" : "qr-120.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "qr-121.png", "scale" : "2x" }, { "size" : "60x60", "idiom" : "iphone", - "filename" : "icon-60@2x.png", + "filename" : "qr-180.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "qr-20.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "qr-41.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "ipad", - "filename" : "icon-29.png", + "filename" : "qr-29.png", "scale" : "1x" }, { "size" : "29x29", "idiom" : "ipad", - "filename" : "icon-29@2x-1.png", + "filename" : "qr-59.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "ipad", - "filename" : "icon-40.png", + "filename" : "qr-42.png", "scale" : "1x" }, { "size" : "40x40", "idiom" : "ipad", - "filename" : "icon-40@2x.png", + "filename" : "qr-81.png", "scale" : "2x" }, { "size" : "76x76", "idiom" : "ipad", - "filename" : "icon-76.png", + "filename" : "qr-76.png", "scale" : "1x" }, { "size" : "76x76", "idiom" : "ipad", - "filename" : "icon-76@2x.png", + "filename" : "qr-152.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "qr-167.png", "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "qr-1024.png", + "scale" : "1x" } ], "info" : { diff --git a/QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-29.png b/QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-29.png deleted file mode 100644 index dd6e8a5e25c74075278c512fd2a4a36ec809ee4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 780 zcmV+n1M~ceP)yHS7dQcA{ zMJZ|(x@MUvQ@6X@-A-@1na(;jQdCI9&2o8nJ@)P=BNTalDec5o0uY)li`i(OHSls_LpwBE> zK-U(0jg#v0o32)`iI8SGKZ=S>FVIW~qMCxxt|$LoxyFlfG`%=@iPxA3!n7Eq3e_{# zpyP9$OGg!{HJC=x$?I_>KvERPZm{c%VMQbys^@;N(fMd-SEw~0>Z0m7Yo4;e5m6$o zF;`EZjlMb6A-q-0`eChNqJ6~tRk_U3%$B#EeWzLuyQ{W^m6>XfjpI62NXS#7Zu97e za z><|?8chmJ*FVBKJ@*DC(Hv2vqAg`P&!2Ttn7KRN*qqaC~EoE}rh>K)R=r);@ZZO^zPeoI+ z__~VoKzL6ma0STq03Yz|G z*A+}AHmpd-y*UYF6LsOb-MOkI(O)zBBgs8`yl|t9KUdHk+m4KCh?cbo~dKbO7?)9|9Zz0000< KMNUMnLSTZW!*D$S diff --git a/QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-29@2x-1.png b/QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-29@2x-1.png deleted file mode 100644 index 75e77ea65de4450db69e0b1387bc8ddeffeb6165..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6643 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 Vh8PlZ{`@DcAfqZ>C29QT{{Xn9K=uFt diff --git a/QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-29@2x.png b/QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-29@2x.png deleted file mode 100644 index 75e77ea65de4450db69e0b1387bc8ddeffeb6165..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6643 zcmZ`+1yodP*B(MTMd_B38XD>D28jU?7;`&~0(>Z)?s7^D~g003J-URv}1F8K38L%jdCpIh()05BvV zQc~&)Qc~3FP7W3jTXO(F9y>G1{khg0VJN(fzisp(Ej9fKsTVr+xRCr~WQ{Nde|5x= zAO<(-2eOawpX!)B??jLbr8Sj#gc%~KY;ofsZVmt&KJ%r9>3kzhq3u(m3n>LZu z)DroA=-EEIzgg=%Ylk|6^YooxEG@qj9SQ(LW{OYPmw{*vF+mI3N5XZ7{P865DOU(5 z7hx`XUIpz+Z?)}N@j6TEP)ahxYAz{ggyaKHR%EOCVjBH&ek5}4ixm2=miezy&D)+U zqyg5>nIk`b#lF*~F{MJJmeo~M1j)Ta*+962>fgWU+Y8AUzNxruSnqIfM z?3i1k^wqi*8T7i=K4RE~XGuh6ftGA{D}Zf;fHOM%bP8yDqBfx34n=%zxkBxL8gTpo zP`{Y*oifDsWnAw!EJn^BY{J3<7`Q-}Ajb%ctD!~&iuJmxl+ zSt}|oQj&(juyB&$X1C{fcPpI&kWWKBtQpyzL`T7!+8Ub)=s{stt--Di3l7qn$z|MilYK%?p&+Uk`NDT<` zm&Zd&LSmOkgoq>8Nr=wgZ$Zvk1h+tIN5Eu&*C?{;8$L&r7s$Gu*p8T3{&M0NAzexw z2#Wy_v^R%%kMktTVh9UxQzfVI$n?=Xr6km!Jwob}3X8#u6Tci~C?RGJEX$Qr7dd(2 zLfV367Le1M}jegEzQc&WGUF zH0>CE=ULbcg;f^JT4 zZm`C*M!rV62K}gs(#>If!L3PB7#Sbg8X5haXT2G|0-xurhP=G{@HFv~*`E1zB5k5Y zB0^$xnX+31@@+f#Q+&v4PX~c84dK0=`(-P*@bY*?o zvn{e6Pnt&BPD(h8ju05eu^aG9G`?uma+g$70_p*csx=OBMK!W3vkN-p zIt=_ic8*eiHja=;?<&a+&+RbDGRa>yeNq-%KE|A{pD)z^%=G=M@FUR`1BRNgOocdw zs38@t*~!J{#x3xAIF`-26$4K>Z|gu_%@+`;LUuYwphtM{b-ri%B@3oVgkD4@;R2x% z>mI8X+YT!g=qc!do?ZQR%~j9m-ZUFSQ=fql>lIVzNYTQ2LuD!3l3T}~k5HOn%>rSo zYAgH<=ZyB6;hGawB-A6c4d;B;#f_;o$Y%8Ac0!?eDHAmEbOd`O z9}|n{kZ6*P*lFz5auc~zEV~(dq>+bX?xgm7;)?#x6-;F&YQwG9u6JQpWbU@!CKvj{2d>CHT?k#RZ>WIdMszPG2@xf4q}+mq(Rr~9 zA742Wv$OJ4Fzk9ZX?ys3xFfTHWu&EgTjiq%#|Pyiq6n1;-DQX5`edf$RAjtml4X>V z^;kjBRoO`WNa`XHLMpPy-gItGrRU=dN}(&e-!NA8*|}dNL3ckpHLR5m!>eM9xVn3klY0%rOckmW z9xJRMs!23_b*(cx4p=Qsh)KwQ%3V5E`Uw(Le^EanNpBKf!(zxS!q^7v;mPNaYWWD6 z+Sew?6CaCJW^x8uw5GiKp?oSINtaF^2*QL~*DYGgnP-30fZ?y7tfsBn4^s?%AG-GC zwcvGkwQP6$5pvVTyKjS289ZI}V!m0`-LR`=`Lul}+K$>ze(rEsb~wtMY{@=+aZ)2k zqo&>13VN{KFWD@qvE0TsVt`}YXZzT8Z@~guX+57z`*Q3QJp3*En;QL>xSb`CkM89H z>?~-nt?;by+Wo5=n){c9t(Nb4sbJ8{xzVbxhLvluR^8op9TS6B#<-AZv*>!R zlDamJ(cn% zDBn`&&Tqazenum3^ljjR>L3eCc+NB2r)-PyHv8=TsD8M9?(~=Gu=fRg5N~Dgr7i!7 zOo|Z-HnH@(*C&x@scF!UmP+v0k;fV70@?1q$CCZQM-gE}p@Ofs1D?K5OspGRcr4P_Fjb+r95zei7O7S-c%XEyaB)2J?D$Yjtb7yOPIf^4vLDy7t7nl z&H`?8uT4(|Vz+kHF4PjUqr}`_qu(5RFxXkFFP#T{zvdDI`QHDgM0b=2IRgNg1V1kX zKw1Vd0Dw#jd9LT8r=l!q>R`uiV&(ugXZNsky!QqGggpfBAMMOtOsGBVZ0(%|Jw#}K zc?jM=|Ac|G)W2L@Y(!}FRMe@Z9GuLldD(f`IcP;OsHv%ioy;r*HKk?$rr*Db&|0~; zI0^!R?(XjF?%eDSPL@DU0RaIZ2N#fwi|yWn&Dqo5#l(Zn-ucO2i~MIDX>(^&Cy1j9 z#KE5W=ej0f2UiynTH2q1{`vfsrwhd5zme>n|CV(x5ctyq|pEqvjp1q5EoHS;a`IOg#TNSzgSWZc8*Tw&d&EVQQp5Pzhi&;>-{&3C_mTVgx|qG z32IJ|d!;5n^ZF;J-?2aaLH`!ucknmD&(aI3Lp;oF^`s&91^r9KGhyJr8vZ0oIoLWl zX*rshn*U7f7v(qTPw!u0K>sVuZ-(E9W~PG9u3&3(QFjJdtcJT68IY|4E$Gb z;rpE+sN!G-vG9~OaWNO=;^5?AT8p3UpN`RURVh_};03vRscvwWRWx~XY) z?FMe{{{DX1A6b^`OYz&)%6D}xmP9QFOC24)w_a_kPgwQqt>9TAoEH~ID^umVMC>n` z+z%EZMZ{MpTN8;ay6f=l4!^q}@NBX8yP(kT>!0Qu9hP9J@il4j8>>U{69eTM-x(RB z7MflK`p#4tiuwIuHLrHO`{9$6&hNnIb-uqKfwI=9rq^gsA^mX~ut36XQ4{)Qf1&l7 z;m5eo#i7Il@X&CB&CER_mpywJc=FsiTi8=G30al8m_chT6N66YlDvQ{kvUt?wJb!a zdu=!wm;4#tTBeZuJ1Q|ski2iUsE>ZyNUzuJ*`C2Fm6&hjyLZf6yK@WVU}H~34T2{w zDqZ$~@KPs`lwlt?>Dsrxh-gX?3{wxNnD^OkASy0hROa?X9-^yjPH0~UHrYqZAfQn@ zabMv$G{}prJVZ8}5aD#T)|AI`B!fgRQc1k9!{aEA-@DLap~bcQ6RhNg4Nv#peB)N5 z-8{;e4w5kFn+vM3l4g)xH04;eQAc}r>k3Hak{ibH(thy+WFiG>+=VzR#mO5>0L!5) zXzQ&^*K)X z#PtEi?b1ZwdQT|sz}EIu`F(fpj@OjZ?)w!-CHmS*e$gpdad-kHkbE{mvql^!K)N9LT>fdX3E-DgH!5fFKT*i^KI$U3hXGLV6Cdv@TJd2n4$Wvu#fHO_PbvT za?GDgDv45q;ua??I+S1!hS8VN_*i{^ls?2<%StvUl7Cezx zDjUi?921KAdiAXj^R>#kqu1V-X07T`1#9*@)>_Yz41r8N+n^O137e0=0A_gh63I9S zXxL&V$dIz%E;&s&xT%yxCE$Z?J_KU!k9U2{=XXpk>$lW5LtgVmWsQl$N)78v_w2kN zJ#KcY2dv0B?kKwYbH+5E3afpvL4);_gWYV<-9f(6+XRBvQ*s7lxAGf@H3WB)ter&T z9^8z{G1bPN-nRi$ja;xp8Yx!bizW`6X;!`_C3xV3cVGBpzS{i=8B)R|`2D7229apN zB}5zA7xzGJ&5ZRbIU$N)GaGXZ6cOV#wa^m`fLMe)V;1p_J0?puELQfICN zAkD$+D4V_2aXTI4g0jF!dgKJmr`Z4ux3Lq?U!T}_ei_QKH(0B=kw){~dN?Mo;Z$>= z{0cvKe{*xQ29D5jK}WWxu7Y-?X%MI7Bc;m0M;bX6yBI&kjpO@L37z}#+r_9isQefd z>U^58^I#2DwevpHvm?CQIC>>3=6H#vPY?Hyx-!CFI=`Gu2ANbG#F=J~kWRYlc(crH z%*3TEvt)0L#>B_#s@af`kT(r8T-FA>@>?p@rZ{=nIfo)c#eIm!(5^h)tuu%62%^kA8fADkY@AjfX17g47MFg~^3I4i{S8Gn`X$!;FeNT~KVm znFw_&Sv!bM*5Xh;=iACJUba&QyC4~f&` zyLvy$%GQAHn5~`C+8&r%R^U>4tYm}Os>qpHR=<)`nilhl3(h%j*7qFW&-b^ugY9wC zJBP>YH*eUb_dc~`4l$^$*DrOZGRd;_E5cMBIr0W{MPwiu#}+!_hgI`fF|a8SD@`i$QEVoaSAK;9R5VR_ zth00*Q;3nW7Wt%Q1xp6eGhuHNeMdhnk>tS?2!*I{5}H@W53}S3!fK7Pj&)eUN%bz? z8L{ef)RDqwQs^2M5}At?(wv`{+!@EI?r?2u7B8!|!Vye6R1p~Ci!h;*6!5PUyDK#L zXS{^RPu{oD>z3k~745UqSE5=fUMp2A&3^Lg;Pua;pvbUhYiVW^SCuIx1V-Ayowi%;)U zfmvnN2Z_n7uL~@Zr+#n8-`X*1)V;nxnysJ3M}9W2XRhTpYhgO!VI~k!5$A227UwIo zdh9hyQZu19Jy3Pd8KrV1b!wdEg3>C@d}O?YtdYN5ztC@aCGIAY#S~%xU}4cQVR~Z8 z9oqg4eDGSYOx)PtO0Xl4jg+#0$cTpaR(h!i7o{IZOC9cvY9<#pc#>!Pa_drz z4}WA-vLQAT7G0ZB^Det|$4_lgyFN|wCV4@^L^ZQV#5Fn0*i{Aw(HJzYf4FA z+aO91bJVAe*i>V)a*o$RW*7x(O;&UYuii=w;Z`+fJu%>8mLi(nvtqPQ#;Sy{5b;&k zt=22ZTj5-lyf^OJ-uxi$9_o2}iE92GV(9$jA`p$NnK|>#q!r_Sc9Fq%A;g>4qN~Cy zq@6WES}A)rI=)xz>B>B1*?L*JdXl77vR!bP%TA;$uh+KmGqvG`WirW&G$3^F^qg#? zHBP04WCGO;sjLOsk~my}73t;5EU;0*!LL8WIk+}74Kq~qskq5*E-x-K#-zh|Uriq| zpywe(I!-&(KXy4o9=4cqED?J(J0{@M zEY$ABl0>zM77B>tubzQ^Ok!~i2H?Rc`Mzj&V^P&(Iu9|cQaQ-WIFKM>4}d3BbfYw5 zSMhy%S_%Sol^@5^xSLlp|jMJDZz}RHOo|IzQf$tUVR8>HN~(8MKA_rB+u=g zeM8519z1ESyma1W<`QgdPmY(*#!~~gyQ^VgbBUR!9937o4s}2zWaGOdqYHW zzQtZSS#~(kx=@z)=87jF&n8j7Zj*Jzgz+dPv-6rEjfvxH31v1!*@wH#3*!FBusF5r zNoO|niWw|zh-T2ri{z`?ceZu99v;8Nb=F?X Vh8PlZ{`@DcAfqZ>C29QT{{Xn9K=uFt diff --git a/QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-40.png b/QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-40.png deleted file mode 100644 index a9be21404481b7e819bf26b45b8b5e3ffaaa9744..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1232 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 Hu0mjfO@0EY diff --git a/QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-76@2x.png b/QReader/QReader/Images.xcassets/AppIcon.appiconset/icon-76@2x.png deleted file mode 100644 index f3b19010d1eecb3c6f1243ad73fba1595bcb60b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9585 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 SveMuGV}X>ll&TcW!~O@t3duhJ diff --git a/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-1024.png b/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..91962620fb8625bcccab55e37ef63c26c9a1a93c GIT binary patch literal 951 zcmeAS@N?(olHy`uVBq!ia0y~yU;#2&7#Nv>llhfA zb39!fLn`9l957@A3LaAUy?om-z6g*`28IJScPC44Z&ct~Af{KaLMVpI`}5ReK`~6u ztnHi6CfF+Mvt>T{@^U|mj#&RohWc;6&;KjeIdJ>u`{PVCw*TMmXWVYDeqa2-?SiN7 zVB=7Uu9A~$8UFA4{rSnA*Y8*}(vm>-qXCWbRDFk@OIcpqV!qFrwAOj*<4QCYK(50V zZms^rDc?YzLIVxo-g$lDjb}#_269vK&IYYv`%rUV07GuU*@=s{+_*EZ{gw!Z97BSi zmiU63ckI|Oq!RX73o&mvzVZf_sHB`0Bmj{Wok%HF5Nh}{rT_V_He_)K`|s(-&p~T) zzj8m5{qPkOVW>c2c}nrLPfRoNcU`Y4N0kEd8n)#}FmJeXCvN4^h|7C&v(3^m!!o6- zsBnMyeg(eX`9kfWG=c^$@ErK|LRxJ>(V4SHr=rP$xF+TG`#!NH)_Gkw$Ktoz*E5Tb ze{PCi+~ePgso6y>l}YRKvo$eYtQe93@66oq#NK@LF6bPF9799p^xtopEP|IFIj)^A za7__IMZ?bg9p(+s-kq>eosH>dhMz?VnzJi!-|uFcDT$$%;ey8Jrw6u6EH(AQkZS-& z($4p*{7V?TDmgJ^5A4}#`@7B1tNVy_%k_Pjt~#*(+v5p9T@8sBelOn_!CO!QF@i6k VMxg1uuG1qB*VEO{Wt~$(69AvH=`;WU literal 0 HcmV?d00001 diff --git a/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-120.png b/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-120.png new file mode 100644 index 0000000000000000000000000000000000000000..2975ebb8ef63ba018246c3274348fec259721e61 GIT binary patch literal 2408 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 Ao&W#< literal 0 HcmV?d00001 diff --git a/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-29.png b/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-29.png new file mode 100644 index 0000000000000000000000000000000000000000..6f6688662c8979f18803917a046ebc71085b5048 GIT binary patch literal 859 zcmV-h1ElyY{QZb!pKB)<7G@*77*elEZKq)XAF@gGO>l0uBbuB z1Y)+hWo!mxt-2Tu>1|{qaft>)T}Op61y<;kxAC^Rjf%`R|M`i6%g@vszS_35nR5nh zh+C>SYboIna3cNfcN2zm7p_jMLjvc|xo_yC)2p9ZN}^gtKRSIjrZ>`i>90Co^!p1u zUKf968(JiDyJQ5&bhfoz_p+|^weepvGDbCjjPKiDQl>Baa%qtWba#Hn;~DgLda8Wc znRGKs2Y&E)YV;S*AN_;`Tp42^SysIoOzL2GPppopyQ>mnSm41!2)O@j4uIPuOsZ>t zj&$`una51ANT+O002ovPDHLkV1hd7pvnLM literal 0 HcmV?d00001 diff --git a/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-40.png b/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-40.png new file mode 100644 index 0000000000000000000000000000000000000000..24450d2d357a990629274ae9e3ba8b24d67ca292 GIT binary patch literal 1297 zcmV+s1@8KZP)uk000EoNklV6vxkPvC!)WN3E|++F`sPGkDw0ZrV#zTi<|+igTOORha{8CvI_BHYzB@Qgzd% z1|eAIf>1L>P1Lb4Nk_DpIQ>8vZ!50G50cCXZ9!XTVQ_Yz(hz~K&F8(4nQ5E&VY;thS3ik1IiVUqJba+ z_NyxzoL8t*NFE6#>;bqECjz9oiqW=Z;HnGgQ% zNq^GW6MWI5mHB!Hz?YJn&M@h@avuOeJKG4_TMc201UQzUu_lVH?I386gGa{!#l{QS zxk6Szvs6K5@oVDM=A~dbFtao z+I-=$3?5uw7rX~QH^ICGITzYM*6VD(<8H3^%7AY~x9eN8y~=#F)r~hws_xssUJV`b zRR^2U-EzWQS!J$pyAc2}9ErpNOBW<)Rk(gtg6C{PqV44h0){N#*({I$v>ZKYDc!fh z_GzBQUaCEGP`hS-nWYU8doBIQ3vfWXUL|q=B3Yg-P0C5dLZ#$Rvy{z}CT&P1}nLm)LTo4tRRr0T;{x62`7MaSmi^lmWWhh?D0UR!SH)=9rXyb*GMMuX&RdOH z9~l}?Zg1>+-nczS^$4-)n@rWNBFrzqeY;d-jZtY;ATwivjlT-*pimJstxY88HQE17 z?PqQx_BrM58ph-I$$#pUYxVNXBj_zzCeO{qzH5wjlblTb!c=_?Z&qkdpD~R+sMZ{D znBL!{*c?6nJNT?YMb9)?GwjUj8-Q>*>7_0$=w&3+7vbF{60S^bFXK0j`) zEZ63KhNn-Jj1s5t2LiFcvc+hAThcn}ACLGK9-r_>IuloI#TEL*&@`v8NRfy?nHr$2 zlXoT?(}+_Dfa04Mto>z2zr`R5R;lZ8IE}wtxSkh&XXzyVkNbw zUU_TB+L>vt*8!GiUUOwEQqG;R_QX+_m^g(HQ7E8CK{07kC6d_5pkor9B1-o(I6cYnDHOd3W+i*x7+bpf*OZlANlUK_ zQ%;#6=aGjdQ)|jEIO^*iwI!O!$#st77RQbc3k_Q|tMl}lvU7#SmH3|7F*bd}CDH#e zYR%E9GZ1ldYCsHzLb1TnP;hKK7z*Ps$@ym(5lMmw_=@@$Ug2?J&YgXJ00000NkvXX Hu0mjf;P-MK literal 0 HcmV?d00001 diff --git a/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-41.png b/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-41.png new file mode 100644 index 0000000000000000000000000000000000000000..24450d2d357a990629274ae9e3ba8b24d67ca292 GIT binary patch literal 1297 zcmV+s1@8KZP)uk000EoNklV6vxkPvC!)WN3E|++F`sPGkDw0ZrV#zTi<|+igTOORha{8CvI_BHYzB@Qgzd% z1|eAIf>1L>P1Lb4Nk_DpIQ>8vZ!50G50cCXZ9!XTVQ_Yz(hz~K&F8(4nQ5E&VY;thS3ik1IiVUqJba+ z_NyxzoL8t*NFE6#>;bqECjz9oiqW=Z;HnGgQ% zNq^GW6MWI5mHB!Hz?YJn&M@h@avuOeJKG4_TMc201UQzUu_lVH?I386gGa{!#l{QS zxk6Szvs6K5@oVDM=A~dbFtao z+I-=$3?5uw7rX~QH^ICGITzYM*6VD(<8H3^%7AY~x9eN8y~=#F)r~hws_xssUJV`b zRR^2U-EzWQS!J$pyAc2}9ErpNOBW<)Rk(gtg6C{PqV44h0){N#*({I$v>ZKYDc!fh z_GzBQUaCEGP`hS-nWYU8doBIQ3vfWXUL|q=B3Yg-P0C5dLZ#$Rvy{z}CT&P1}nLm)LTo4tRRr0T;{x62`7MaSmi^lmWWhh?D0UR!SH)=9rXyb*GMMuX&RdOH z9~l}?Zg1>+-nczS^$4-)n@rWNBFrzqeY;d-jZtY;ATwivjlT-*pimJstxY88HQE17 z?PqQx_BrM58ph-I$$#pUYxVNXBj_zzCeO{qzH5wjlblTb!c=_?Z&qkdpD~R+sMZ{D znBL!{*c?6nJNT?YMb9)?GwjUj8-Q>*>7_0$=w&3+7vbF{60S^bFXK0j`) zEZ63KhNn-Jj1s5t2LiFcvc+hAThcn}ACLGK9-r_>IuloI#TEL*&@`v8NRfy?nHr$2 zlXoT?(}+_Dfa04Mto>z2zr`R5R;lZ8IE}wtxSkh&XXzyVkNbw zUU_TB+L>vt*8!GiUUOwEQqG;R_QX+_m^g(HQ7E8CK{07kC6d_5pkor9B1-o(I6cYnDHOd3W+i*x7+bpf*OZlANlUK_ zQ%;#6=aGjdQ)|jEIO^*iwI!O!$#st77RQbc3k_Q|tMl}lvU7#SmH3|7F*bd}CDH#e zYR%E9GZ1ldYCsHzLb1TnP;hKK7z*Ps$@ym(5lMmw_=@@$Ug2?J&YgXJ00000NkvXX Hu0mjf;P-MK literal 0 HcmV?d00001 diff --git a/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-42.png b/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-42.png new file mode 100644 index 0000000000000000000000000000000000000000..24450d2d357a990629274ae9e3ba8b24d67ca292 GIT binary patch literal 1297 zcmV+s1@8KZP)uk000EoNklV6vxkPvC!)WN3E|++F`sPGkDw0ZrV#zTi<|+igTOORha{8CvI_BHYzB@Qgzd% z1|eAIf>1L>P1Lb4Nk_DpIQ>8vZ!50G50cCXZ9!XTVQ_Yz(hz~K&F8(4nQ5E&VY;thS3ik1IiVUqJba+ z_NyxzoL8t*NFE6#>;bqECjz9oiqW=Z;HnGgQ% zNq^GW6MWI5mHB!Hz?YJn&M@h@avuOeJKG4_TMc201UQzUu_lVH?I386gGa{!#l{QS zxk6Szvs6K5@oVDM=A~dbFtao z+I-=$3?5uw7rX~QH^ICGITzYM*6VD(<8H3^%7AY~x9eN8y~=#F)r~hws_xssUJV`b zRR^2U-EzWQS!J$pyAc2}9ErpNOBW<)Rk(gtg6C{PqV44h0){N#*({I$v>ZKYDc!fh z_GzBQUaCEGP`hS-nWYU8doBIQ3vfWXUL|q=B3Yg-P0C5dLZ#$Rvy{z}CT&P1}nLm)LTo4tRRr0T;{x62`7MaSmi^lmWWhh?D0UR!SH)=9rXyb*GMMuX&RdOH z9~l}?Zg1>+-nczS^$4-)n@rWNBFrzqeY;d-jZtY;ATwivjlT-*pimJstxY88HQE17 z?PqQx_BrM58ph-I$$#pUYxVNXBj_zzCeO{qzH5wjlblTb!c=_?Z&qkdpD~R+sMZ{D znBL!{*c?6nJNT?YMb9)?GwjUj8-Q>*>7_0$=w&3+7vbF{60S^bFXK0j`) zEZ63KhNn-Jj1s5t2LiFcvc+hAThcn}ACLGK9-r_>IuloI#TEL*&@`v8NRfy?nHr$2 zlXoT?(}+_Dfa04Mto>z2zr`R5R;lZ8IE}wtxSkh&XXzyVkNbw zUU_TB+L>vt*8!GiUUOwEQqG;R_QX+_m^g(HQ7E8CK{07kC6d_5pkor9B1-o(I6cYnDHOd3W+i*x7+bpf*OZlANlUK_ zQ%;#6=aGjdQ)|jEIO^*iwI!O!$#st77RQbc3k_Q|tMl}lvU7#SmH3|7F*bd}CDH#e zYR%E9GZ1ldYCsHzLb1TnP;hKK7z*Ps$@ym(5lMmw_=@@$Ug2?J&YgXJ00000NkvXX Hu0mjf;P-MK literal 0 HcmV?d00001 diff --git a/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-58.png b/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-58.png new file mode 100644 index 0000000000000000000000000000000000000000..c87ee9245b9f2a95cd8e5a25eda0a97886ed928a GIT binary patch literal 1826 zcmV+-2i^FIP)g`D4nz)v$wIWbE~BLVTfChsy0cx{TMMVTLmsDA0^o(d3SsryAGKB zfalH8xjBB1pZlKkyze;%-8JrQ>ecM&?5S+_G_%ocE_;E9E@sDx$jD}i&aj~mi0C}) zN14t0eq^#{A;Af_;DHaFND$EpbQ94fz#s_<(nR!qXi%X*gahC)Mq~x7(tYwuS$50I z)ORi+Abla(lgHV6QR zJgHETWUNuDK$vH>I32+B^bE5(*qv6)7N4A)v(Cw2frCBTVRPCrXFAOQb!@oIdZQHU zu*n)n0PXOWVkJ`NV~tX(6l;a`u2FnpS3PU42G?Sj6?HB=MDB2PW+9>LS)qG&?-}cV?Gqw{M_0asAHW z*T_V-uiN)$)*tYFi!L#jSBGCE>hetx)s}=Q#M@cRsIcZbd-RB|Z`Y&xZe8y@Mt{`z z4?V9xO;>e&mNs@C9r~{R3MD$X=}+l9^&R>)U0>fhQCt3TM2fMN<)5QIBx}eYL>Cf2 zP5dO0IFdM;7)TsToS|fJ`<`zEw@@J%+`H#+V*j44!9hBeILhHx5#}CBgGxU7?X#D5#WPDF>`@X%wP4R>K_B|4OF8)|B9QpxXOH|U=f553$sA=z7nmkXqcg_ zrXukXjT6}c6dPc$`LhP>bH<#VeH&Oa0D}PBH0FwC2j&c;=x>rbT~gnFN$BFadEXMx<#M#23^eW6nn&8=?R+2pOrk4v|1crSYVhCt0eJO>C6$4 zt6CXjbOUf}2`{DkzDm+n(zRRev!OJM7y-_B?p;3t8LW!Xtuw9SO0}Om9@w%sa}aySt!JJ zW6#C*$6`N>{U~-Yb|`ilOG6@7#dgG=0rtnP;CRdxT7r?-Nz{epP&+K4P)EoH+^K}m zW5HeGc2>K#F8X*h`jzPBXm8Y`EyYr8QSu}%Ctm;_)>6ry=qhaq9*k;mYO>~oEgJ36 zY&CB%=Dv29Q(Z)EVXO;|D|I8yrc!@M{V8>co>G(aGqsP&CLi9KN_DDw_@DGO_1V;4 zQh!YyQhU^1noFfZ>IBgpZZPHBT8(|Jj@72fuqaBKa=&6jld>41UsRfMujk%Wln4EF z09uq*|4M(W!Yj)ZId|6Y_xTt9|7(Z<7*+c^V6uwU2ZvQ`hD8*YiH)Ka^`Zk;^K))q zbcxNPXaVqko_AaFSJ2>Y6dT>k-EQE${LPxI6*UPT-`4sOD`!q+h3$aF!LbI1gL7D6 zW6kQYu>l+VAG2g3yMqj?!(!O17Kh!i*kLeVOU-?)z7SL$lGSP|5Z!ArJg`D4nz)v$wIWbE~BLVTfChsy0cx{TMMVTLmsDA0^o(d3SsryAGKB zfalH8xjBB1pZlKkyze;%-8JrQ>ecM&?5S+_G_%ocE_;E9E@sDx$jD}i&aj~mi0C}) zN14t0eq^#{A;Af_;DHaFND$EpbQ94fz#s_<(nR!qXi%X*gahC)Mq~x7(tYwuS$50I z)ORi+Abla(lgHV6QR zJgHETWUNuDK$vH>I32+B^bE5(*qv6)7N4A)v(Cw2frCBTVRPCrXFAOQb!@oIdZQHU zu*n)n0PXOWVkJ`NV~tX(6l;a`u2FnpS3PU42G?Sj6?HB=MDB2PW+9>LS)qG&?-}cV?Gqw{M_0asAHW z*T_V-uiN)$)*tYFi!L#jSBGCE>hetx)s}=Q#M@cRsIcZbd-RB|Z`Y&xZe8y@Mt{`z z4?V9xO;>e&mNs@C9r~{R3MD$X=}+l9^&R>)U0>fhQCt3TM2fMN<)5QIBx}eYL>Cf2 zP5dO0IFdM;7)TsToS|fJ`<`zEw@@J%+`H#+V*j44!9hBeILhHx5#}CBgGxU7?X#D5#WPDF>`@X%wP4R>K_B|4OF8)|B9QpxXOH|U=f553$sA=z7nmkXqcg_ zrXukXjT6}c6dPc$`LhP>bH<#VeH&Oa0D}PBH0FwC2j&c;=x>rbT~gnFN$BFadEXMx<#M#23^eW6nn&8=?R+2pOrk4v|1crSYVhCt0eJO>C6$4 zt6CXjbOUf}2`{DkzDm+n(zRRev!OJM7y-_B?p;3t8LW!Xtuw9SO0}Om9@w%sa}aySt!JJ zW6#C*$6`N>{U~-Yb|`ilOG6@7#dgG=0rtnP;CRdxT7r?-Nz{epP&+K4P)EoH+^K}m zW5HeGc2>K#F8X*h`jzPBXm8Y`EyYr8QSu}%Ctm;_)>6ry=qhaq9*k;mYO>~oEgJ36 zY&CB%=Dv29Q(Z)EVXO;|D|I8yrc!@M{V8>co>G(aGqsP&CLi9KN_DDw_@DGO_1V;4 zQh!YyQhU^1noFfZ>IBgpZZPHBT8(|Jj@72fuqaBKa=&6jld>41UsRfMujk%Wln4EF z09uq*|4M(W!Yj)ZId|6Y_xTt9|7(Z<7*+c^V6uwU2ZvQ`hD8*YiH)Ka^`Zk;^K))q zbcxNPXaVqko_AaFSJ2>Y6dT>k-EQE${LPxI6*UPT-`4sOD`!q+h3$aF!LbI1gL7D6 zW6kQYu>l+VAG2g3yMqj?!(!O17Kh!i*kLeVOU-?)z7SL$lGSP|5Z!ArJSP)8Ja>eD8hl_kHgfVBtjwB7Cp`^dFjWBSy%1i)C@;BhBBj zSgz18S6801?6cfzvDhqAE5|Hh%UxvNVp-5>vvf>l+AE}Dv%qp0#NmenV2~kEh>(?O zFX^=T%Ct=`mkEcvALxFtJEnpG3V!d}ll_^?^-8uAO|C%pv`YILrG2&gQ59edKxRNN zliixNW_MP=wybsL7Jq&QUItj4xx=r~-p9tFatF_Z$dl2gKy$nVOGGmCp;7| zM@AhR2wu8FSzFe$Xp@XgeBt29*B94K#9UuDe$6!@`=Pzxfdywo-CD{oa;Uo*^- zWI~6uQ)-rWs{rU7>6G@290P!M>D?c`u0&R7d!!xGcInd!tx9Aq+mZ5H6-o8Tfq)77 z`a1jEeE}5!e|}|aUpLCOJJ1+tQX(s~V4sK5I0dNL-pGO=0mU=`BvQjKL$zF1$npS) zLK_8u3V^cDPG@26y}5kZ-*-AqSeRp5t#cQ#J~v0u>})6lopymfiwX@NTNoTt%9<;M zkt7Mo|BJ%dSYEzjaGGqc=iGfM0CMkDaq#%)&`q_9jVldDYsAuM(9X=FO@ozI*}46Xc0aOyqG$k`g)3| zU!D{M6BO%7J&w}RqbopV&4F^{KBAi%S+m5)Hv@I>So|L8M0{*GNlNkf8YR3&!PCR1 z2ss@uP?(gCk%A<}<7eYUOo{^LB?ix7GYbhohLkilzKz)Hpt=&|utWLVg9k zFsM}&rr0Fx0E;Q|5QfOPn^72MptV$5C{33#Y%lvP!bx^^W>+|LE+x$H!5*rO6BA$6bA0G9h=%Z&TKI*In|LW%;0dpsT;@3G(6Oxyi}3stqu;xf$qd z4qY$L^+KUon5V8j3j~e!S}@KgryVF3)^NG7Zg0Sb@`bf;v)7@<-fXx3rxQc7hU@Pn zTI8E_V$8Da!qR2UXIS)z5?Pg}9yy8_nS@g>$?LN1^O?{c?g+PsKL?Wn+I-t! z^*O?v&o`C+ZF;NEl%Dmqr_<|b^)06VhQ;)s!r@w=%0BBC8pe1&Yw|Rn7$%$TVsWAP zKJ|s-qRnOkYg;RBX=yB8ve|4cjBT53tIc9-ve`Z;Hn%V>EX=m;#UiOv7@ES=H3zlG zdIKaktuWRvU0O6a&0>jy6|$xS%_+V{sHtBz2>Jj0qWc#LY_Wsk*aF@F0000)3l-S6Cc4RQzVfBVbck46tiqg~N1+IQ#R5jy$%X!L3hoQ+0@3F(d= zibnrPC*sk#xR$nq(O06;Uqqu9MfYp~Z+bk>c|70ow0k^$3U_#(M9%hjJYxWG!sGb^ z@D0xoJ)Q`i*ph<*kLMYWXN#wU!hQg=aVL!sa@gtY2#2HL1L1HNZL6KlG@CcV;cvA* z(b~Gj>D=1d8V(1X&abw%o+4zqb3-_Mh_2lqJ{S&v-|0Ld5fBB!1q86rPQqGnKm%Y0 z(&W#803-;x3+4g>b^$#ixT9(22qqD_iqTe<8tce`7T0Ujl?36 z?nvZ)Le}!@X#l}Zn<9~463JHbD|x|&VJENc-z>{{BEFb{}cmOU^sVqrfohR(7_30cfIM@IIr>}!M=m}H3 zy1FZagSB-v6pjxLa$3#c;6ze;kb3k{h>pIoR#3qq0mmJ^P6pLE1l~?p`W+4J?eD65Zdi@u6H_r5(QXbK8b+3oQo15RgH%M6?8OB8=%PVvw5%-FU_G??A2K8A;(%m4mlh@j>WoTaq2ox z$STKjhhrxpZ^mMA(I0!t;dmw%`=a9!B3XB=myn|yH@;VJJ-A0oGeYu~Pjk`&|JBn8 zzz&9y)yNp;)ad9}fMtw>dbcsm$N4jA0rX<~Xp3;Th&P z)C(!iR!L4R(^n13W}1+xa!QJ97RZTOt--K>TVOEM(vjA1FYOtFp%fEm&RhZ%95)L9 z?lKtW0SmcmgQ14PMFxiB<{Jz$0EGlhX9JV~8kuBM2zUo*FOr3&7XXX-=h5s7lo8oxp)~ z`hN9;YV}E#s_?Q$ZC}A%qcBYsOjFq;pO%xtWFo251SV3cPjtFZQmI9zMZj1pRjJbr zrAAFAl};zu=@#l1q*4Q^)B=;qV5&En=BHBQfYHS2bmBM6D-in7zYs9(>7;_L;B@K) zl0}x&nLuEd*SjasDG2KYp-B)r11|;w0k5~i>s=)@1p?1|y&gf>?)`z+yG;-}0)b#4 z6bO7*5PlR0+#nacUg?0EdfCgLPHhEc`{BZUmcJfki+KoNNF;^{=}jaPiDR@Sb8v5S z^X~{*Vf&KJwv&*z6N&3Yw6M+AnMfQ-98Dyivf0+yY~y6Gx%u18&8KF1ywa*M{pplv z(^}-J(XCXjP%2Hz#bQs}eM$>ZqELvF1DR8q%(K8_O6A8GP%4j7FQ*iMQiY;ip%C?^ zP?S+GN&#HY;A#f4%-jsF&{mPT4BQ&SZ9ooc7|)2KTNzxV-m%QzfSY5uJ_Z6Zh6(DW zkC^{Fqs@StI_{F9gc<`pf(BImU^Z9j^<}^kvmU6>>lJ$a zEL57!D!sn&?Uc9ttBwjie+x2AO8_b2+er{Afqnj<-~W=|KLC7ASPIM)gla*U1?Beb zI=^2g2rb(;0b>6rzyEpvUcY}-5SZM8OMd?)L74gNB&At!Iu**PxciL$6k)Y?5whC) z1*>(P)fy*cm30jv!^!01R;#;lb7SLXtM%Dr@*i@tT04`;W66D1Ym?Qw#%ld?9mj+OuK+i)fJ}tfCcVI|EN;kf zEej$B0F0wl1^{&J%}F^Kjpe}omc4UV^_5#J^JkP(;j7L*^-)n!&)SPbK&8ud&gTpGcKduU`h0tR zzNIcR^`?Bjw)Txa-+7nI-rl~G1yF|U}8wt$k=48vj?ZB;ckYfFXO zd255zjaAv|sp&+wnQ0wNX_u{5S8q!vRhty47P2T*2AUQ$ei)i`4de&u+2brv*buD! zQAe8g>FCOO=Y5erefOMm?+fTN#{b429Lwe2EsdkO+!SdT&*k1{!i8M!644MRuabrd zeyNC{1!t-OaI& zt7-?)@!sBp9H)sMQPmNe?Ct$UZ|^=;{YoUVOI4$h$PuEg*M3Ab$*Q`8D6eydh}u;3 ze2L^<7N!E}X~~}eR-gq46D5Eo3zLBYkuLdH%<%(#6_zYSl<1%k4+^nKh(8l;5n_ZU z;_zvn#+J!h*Ub2Q`EZGZmvECq%CB`gD zo&%sp#WLVF6$?}>R8b48T7W75xU(0R3|JM$y-cvE=pDm;1AuB3%Yl04m{imO_IX@( zuSWS2>oY-5*aU9y6uKp>6U7-}b=08RBQ8D}D}r?EsQEK#svK4(y^;Pb%!%&8kk z3t$Cj%GENv+)9j6$+K9?Y)o}?GdZ1GoX)MhZgM(}&COM~;&gs9m+N#op9EfXI)4k8 znw$6Mav`U}oEoR|VW)E&(>6Pu4I1aVWCc)lmldFSx|Z$i@^mfh8{0hHzGT3oyX*!W z6|Ci{;o*^+f@rj{Q8F66jg7mAo^5PgYc#$#JnS_ZEscwA!TGfO7%gpIr5*d0V97K( zdYNMqnBX5AR}6;whK4$WVb17iO+&+6gJEiPwBB$HOc(=$Ia6TVXiA(YqMOnP1K1S3 z+jIafz{WELuoUgXPA)x0h4x{c-F}zdZn9eE0k>PNi|qEh?e-@73cKA3)L5+s&fICY zFXqfrtHo}&Sgi}e;LLnr==gCKPC9yZ$!RKvE?Ecf!`Ur8#-&W=QcKHZCbOiqbs_MN zOon~CoXMPTZC%;gx*Ry3$y{X0s+QFnucc*CCiAyU<^=FwCi7M%v$Un9>bm5#UV6Q^ z>^2>|59!9zi?PdGdKHztBphDl^)3&GS8yT}4%Y%eV>rAXIPvn!S>O(@w~mur!|fW6 z-&VunHNbu0@I79yKOCNSv&%E$0K3eRb=>H32pHrMZ#J7dm&j$QDk@#UE zF-8-KM3Nu8)77;uk1wEUU6Rn?1sDK$f2;I-Sk7+iZQ=>?BLp+gGI6<(bB4 z(U2krpATcRQOn27=7$P}m(1pX$<%5xc}=D@X7fGfWrf1ULg5c4(^|9n=|Z8?WID`G znoNt$=GA7iYBsMmnF40>OGF+5TQIra5g z%;l)9zlQPgNlw;i0nFtUKwW*EM$lj7B(9E+PmGUqy6oA;KI0fIF-26k+psAU`TWV! zIF-*&(Wu4ZCwjZ7X;V|vkBBbh^P@x`=JTs9%|w&={28q%EtW4>EH4s0YO#1M7QOV! zonWt{_}#pWqGj>D}-p`b)^t@%W@T}WO>=Zz!Biwz`*;!0$DyYFdz$Imz}^o zA!MLVmgmdzJU|j+sm3XPPvO$zZc}tV%+BO;#Scq09?vr1L@M>WRO)al^-o}>$D>L1 zc$z()dw}I_Z3|PWIUdiwZEXvHHJ z(yO$~H9}Z{+k`L)VHTnma0*d{+E{Fh5O;KUztG)X5MoU%*2EOI@Wx_0VzKo?e2zIE zba!h{w#8xw0RQDT2LU8+tmVJ5Wc>opsMu!~zduTJ(C^>m_lNxczYuNl`$uTJv$LzG z=Lh`wLBIc(#B;r~^M#(Dbap;Pbf%|guiyW8PtSp#o|8oTIy*lu`FHmy_0CDukUq^^F&{EyGLl$?G6zQxZNFnecyGvw}(QzL!k|B_amXrZuh!S zsEg>3+ua@t{gLRIQ0QP^-&oo2hq~mM#wcJZZeJB2qemT%4T{pHDDAvHtSG|a&?Gw? zs-o;19Q?VWJmhdZH#pelaQGb##j)Dq@Hian6lKrg;5&nZ=ZPW?M^I5Nmg(3f?Mrt# zs7o$AEK$XW)YY?R&z(JczG&6rQzHKP5z!USTqgSHKS^FVMraztoS7n`|HFSS{2Nsb VsrL0x<+T6+002ovPDHLkV1ll%DX0Jd literal 0 HcmV?d00001 diff --git a/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-81.png b/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-81.png new file mode 100644 index 0000000000000000000000000000000000000000..ed0910e064a3d33fe1061d468a19cc9396de7696 GIT binary patch literal 2143 zcmV-l2%z_gP)G1yF|U}8wt$k=48vj?ZB;ckYfFXO zd255zjaAv|sp&+wnQ0wNX_u{5S8q!vRhty47P2T*2AUQ$ei)i`4de&u+2brv*buD! zQAe8g>FCOO=Y5erefOMm?+fTN#{b429Lwe2EsdkO+!SdT&*k1{!i8M!644MRuabrd zeyNC{1!t-OaI& zt7-?)@!sBp9H)sMQPmNe?Ct$UZ|^=;{YoUVOI4$h$PuEg*M3Ab$*Q`8D6eydh}u;3 ze2L^<7N!E}X~~}eR-gq46D5Eo3zLBYkuLdH%<%(#6_zYSl<1%k4+^nKh(8l;5n_ZU z;_zvn#+J!h*Ub2Q`EZGZmvECq%CB`gD zo&%sp#WLVF6$?}>R8b48T7W75xU(0R3|JM$y-cvE=pDm;1AuB3%Yl04m{imO_IX@( zuSWS2>oY-5*aU9y6uKp>6U7-}b=08RBQ8D}D}r?EsQEK#svK4(y^;Pb%!%&8kk z3t$Cj%GENv+)9j6$+K9?Y)o}?GdZ1GoX)MhZgM(}&COM~;&gs9m+N#op9EfXI)4k8 znw$6Mav`U}oEoR|VW)E&(>6Pu4I1aVWCc)lmldFSx|Z$i@^mfh8{0hHzGT3oyX*!W z6|Ci{;o*^+f@rj{Q8F66jg7mAo^5PgYc#$#JnS_ZEscwA!TGfO7%gpIr5*d0V97K( zdYNMqnBX5AR}6;whK4$WVb17iO+&+6gJEiPwBB$HOc(=$Ia6TVXiA(YqMOnP1K1S3 z+jIafz{WELuoUgXPA)x0h4x{c-F}zdZn9eE0k>PNi|qEh?e-@73cKA3)L5+s&fICY zFXqfrtHo}&Sgi}e;LLnr==gCKPC9yZ$!RKvE?Ecf!`Ur8#-&W=QcKHZCbOiqbs_MN zOon~CoXMPTZC%;gx*Ry3$y{X0s+QFnucc*CCiAyU<^=FwCi7M%v$Un9>bm5#UV6Q^ z>^2>|59!9zi?PdGdKHztBphDl^)3&GS8yT}4%Y%eV>rAXIPvn!S>O(@w~mur!|fW6 z-&VunHNbu0@I79yKOCNSv&%E$0K3eRb=>H32pHrMZ#J7dm&j$QDk@#UE zF-8-KM3Nu8)77;uk1wEUU6Rn?1sDK$f2;I-Sk7+iZQ=>?BLp+gGI6<(bB4 z(U2krpATcRQOn27=7$P}m(1pX$<%5xc}=D@X7fGfWrf1ULg5c4(^|9n=|Z8?WID`G znoNt$=GA7iYBsMmnF40>OGF+5TQIra5g z%;l)9zlQPgNlw;i0nFtUKwW*EM$lj7B(9E+PmGUqy6oA;KI0fIF-26k+psAU`TWV! zIF-*&(Wu4ZCwjZ7X;V|vkBBbh^P@x`=JTs9%|w&={28q%EtW4>EH4s0YO#1M7QOV! zonWt{_}#pWqGj>D}-p`b)^t@%W@T}WO>=Zz!Biwz`*;!0$DyYFdz$Imz}^o zA!MLVmgmdzJU|j+sm3XPPvO$zZc}tV%+BO;#Scq09?vr1L@M>WRO)al^-o}>$D>L1 zc$z()dw}I_Z3|PWIUdiwZEXvHHJ z(yO$~H9}Z{+k`L)VHTnma0*d{+E{Fh5O;KUztG)X5MoU%*2EOI@Wx_0VzKo?e2zIE zba!h{w#8xw0RQDT2LU8+tmVJ5Wc>opsMu!~zduTJ(C^>m_lNxczYuNl`$uTJv$LzG z=Lh`wLBIc(#B;r~^M#(Dbap;Pbf%|guiyW8PtSp#o|8oTIy*lu`FHmy_0CDukUq^^F&{EyGLl$?G6zQxZNFnecyGvw}(QzL!k|B_amXrZuh!S zsEg>3+ua@t{gLRIQ0QP^-&oo2hq~mM#wcJZZeJB2qemT%4T{pHDDAvHtSG|a&?Gw? zs-o;19Q?VWJmhdZH#pelaQGb##j)Dq@Hian6lKrg;5&nZ=ZPW?M^I5Nmg(3f?Mrt# zs7o$AEK$XW)YY?R&z(JczG&6rQzHKP5z!USTqgSHKS^FVMraztoS7n`|HFSS{2Nsb VsrL0x<+T6+002ovPDHLkV1ll%DX0Jd literal 0 HcmV?d00001 diff --git a/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-87.png b/QReader/QReader/Images.xcassets/AppIcon.appiconset/qr-87.png new file mode 100644 index 0000000000000000000000000000000000000000..4052f3de2e6143c6e06bca1625ff991ddeb5c774 GIT binary patch literal 2369 zcmV-H3BLA;P)O|<+`&7NzvwbNRcLO-CWEsdQ7&R!jlE6a_D z_D75=^`4`vwdlNb*j2XRoAQPjjBrHm8z9-zsS+3YEf&K6_;k-SE`SKo0oVYDK$@|&fB|?JI}9|HJvRUt1lXkNu--6UVr-w!_n6PO!{^&c zsM|1(G4>os_Zr46y}d!hFnW7?KW6Mc!|?U?9%SrQ!*EmVHlOcdddlZJ%-HjWv8hZ4 zAJEC)xW&@J&EHrDx)^&GK%Qo}4j~#?I!J&5Xh3lCb(jVK_IVJ2xt*BPiQ1W{1F&)o zQ-SX`Vw9o26O9o}xf6u&+tXM!9}WOObth&6xOx;dji{q%f$5!)0pQ{~P}>UVoHjFl z*?~CWORB>+B~$~o9n{g#fw=%2qbN$RbYnpW7S^Ky{90U%_g{w6!XNIy902VjsGEWM z4%7fr2bw3=!TP)CB4p{HUF!WX$A+muT?=*0ZNWkSwvnO^IP)pcg89}1^)^hmLEz&m z8|Hzg^Jplbz6G;@Y8&4om@q$V1vV2HM~8~%he^-BZGx~u5V{4SOAwrbut*Su8G`U8 zW9tN=w@}zE2-h%{BU)h0AqcTTVVfXqVJs;KEktJt!WDwBlCNOW-O^!nWMu3@r}6(9 z;}c8}7*T)~5rtFnKv^Tdg%?aytcJQgyh;?cU;c|IqF3W9)Bk_pNTX z`v$jr1Kpj@2Zx4sI-P6i=g`m)xin3#b2{Bl=gn^S9d7p~>)m#_-M_PbSU%+B?{+6+ ze=It$0LYw%$&ao4D{`t`P{&c~#~vV9Asv1h4)=w_cN+#(Vy_s+b>VRMXW{VEoE~Lt z&@iqqI`88b=skvUM>xErNQ*5I4!_RWYg@PWmF)-L1sz&g>1F9qiu{+fE}`~^NaS8! zzbg{y-@JJnfoLT137~rYa09bWu zm?Ku2CyQ-2;3)2gVaApMF|LFDRrceNe7?YYzbHCI@iI{qKhNhoL~$see?S!PCg&B! zMMP(c;@`OlKNiJRqPR>H7w7YN0^b%zO1@+H{BBWP%?R-QTWtwYz-R%50wDn-1wh1k zLZCbSdYFdly-9*@N1@!LI~cY#1WPSb7i_)Y*Q$-ljf^;;+5!uWNG<;SIU3D3V3 z$~)XIdj0+7L=>+SS< zukm`<54e z>(uc0bxGNNP%4^#k0z6^CX;_jCjZI@e@Z5kuOyRS01F(B8o*|ncGJ8H0L`2QGRY(y zj(XrsGI<2RQir3-;ShjX4o5AG%YDe&59K~&wQ;^1Ragg}*XtWm+l1M?&uPNEDxhi< zQ-GO`IDZ^9voZ1!rp+f^M)1jT)HR`|5z_&w35_6HKy4$fM2pZ9sGazH%<}`!lcn`~ zeEj|J)juD%OVU2Zwn01(9(4=)e} zA2HCKQvjG$eQk;|4Va-QHHuQFD9r$5MWLxDQ>iNzDVcgQEPpt!+Un)t^c|_y2vDvjNC|Det^zfKd$KaYSSbiJsb@72ZPT9gMEa$P4gII_nGEy#s*FEmSFHP(=@jQ0y_eM@0;em zfx!Kyc~co%-Up-6 zUqz$Q6}mnZXwmgk(dcMTj~><@Z+uJ7r&jJx!- zX!OO2e5f@4TKmCn=}=auvda1Ka>KaXFl56}45QUB=%=9@Mh#%+bO}&r7|V!O@z`&b n#aiC5m{SJ;Oz!{nzFzmgZ}$JC+p55E00000NkvXXu0mjfLS3e+ literal 0 HcmV?d00001 diff --git a/QReader/QReader/Images.xcassets/Contents.json b/QReader/QReader/Images.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/QReader/QReader/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/QReader/QReader/Images.xcassets/LaunchImage.launchimage/Contents.json b/QReader/QReader/Images.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index 6f870a4..0000000 --- a/QReader/QReader/Images.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "subtype" : "retina4", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/QReader/QReader/QReader-Info.plist b/QReader/QReader/QReader-Info.plist index 283cb28..b63c730 100644 --- a/QReader/QReader/QReader-Info.plist +++ b/QReader/QReader/QReader-Info.plist @@ -9,7 +9,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - com.useyourloaf.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -26,14 +26,18 @@ NSCameraUsageDescription The camera is used to capture QR codes. + UILaunchStoryboardName + LaunchScreen UIMainStoryboardFile - Main_iPhone + Main_iPad UIMainStoryboardFile~ipad Main_iPad UIRequiredDeviceCapabilities armv7 + UIRequiresFullScreen + UISupportedInterfaceOrientations UIInterfaceOrientationPortrait diff --git a/QReader/QReader/QReader-Prefix.pch b/QReader/QReader/QReader-Prefix.pch deleted file mode 100644 index 82a2bb4..0000000 --- a/QReader/QReader/QReader-Prefix.pch +++ /dev/null @@ -1,16 +0,0 @@ -// -// Prefix header -// -// The contents of this file are implicitly included at the beginning of every source file. -// - -#import - -#ifndef __IPHONE_5_0 -#warning "This project uses features only available in iOS SDK 5.0 and later." -#endif - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/QReader/README b/QReader/README index 4b19816..71a1a9b 100644 --- a/QReader/README +++ b/QReader/README @@ -6,9 +6,9 @@ Version 1.0 12 May 2014 Initial version. Example of how to use AVFoundation to capture QR codes. See the following post for details: -http://useyourloaf.com/blog/2014/05/13/reading-qr-codes.html +https://useyourloaf.com/blog/reading-qr-codes/ For details on adding an alert view to warn the user when the camera cannot be accessed and directly launch the settings (requires iOS 8) see the following post: -http://useyourloaf.com/blog/2014/08/28/open-settings-url.html \ No newline at end of file +https://useyourloaf.com/blog/open-settings-url/ From 62819e629c7c27ac72cd1349b424116bc8516af0 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Fri, 10 Jan 2020 21:54:21 +0000 Subject: [PATCH 33/56] Update for Xcode 11 --- .../Huckleberry.xcodeproj/project.pbxproj | 44 +++++++++---- .../Base.lproj/LaunchScreen.storyboard | 29 +++++++++ .../Huckleberry/Huckleberry-Info.plist | 2 + .../Huckleberry/Huckleberry-Prefix.pch | 16 ----- .../AppIcon.appiconset/Contents.json | 30 +++++++++ .../Huckleberry/Images.xcassets/Contents.json | 6 ++ .../LaunchImage.launchimage/Contents.json | 23 ------- Motion/Motion.xcodeproj/project.pbxproj | 59 +++++++++++++----- Motion/Motion/Base.lproj/Main.storyboard | 42 +++++-------- .../AppIcon.appiconset/Contents.json | 30 +++++++++ Motion/Motion/Images.xcassets/Contents.json | 6 ++ .../LaunchImage.launchimage/Contents.json | 23 ------- .../grid.imageset/Contents.json | 12 ++-- Motion/Motion/LaunchScreen.storyboard | 29 +++++++++ Motion/Motion/Motion-Info.plist | 5 +- Motion/Motion/Motion-Prefix.pch | 16 ----- Motion/README | 2 +- SelfSize/README | 4 +- SelfSize/SelfSize.xcodeproj/project.pbxproj | 51 ++++++++++++--- SelfSize/SelfSize/Base.lproj/Main.storyboard | 23 ++++--- .../AppIcon.appiconset/Contents.json | 45 +++++++++++++ .../SelfSize/Images.xcassets/Contents.json | 6 ++ .../LaunchImage.launchimage/Contents.json | 51 --------------- SelfSize/SelfSize/Info.plist | 4 +- SelfSize/SelfSize/LaunchScreen.storyboard | 29 +++++++++ SpeakEasy/README | 2 +- SpeakEasy/SpeakEasy.xcodeproj/project.pbxproj | 53 ++++++++++++---- .../SpeakEasy/Base.lproj/Main.storyboard | 40 +++++------- .../AppIcon.appiconset/Contents.json | 37 +++++++++-- .../AppIcon.appiconset/icon120.png | Bin 528 -> 0 bytes .../AppIcon.appiconset/icon58.png | Bin 459 -> 0 bytes .../AppIcon.appiconset/icon80.png | Bin 465 -> 0 bytes .../SpeakEasy/Images.xcassets/Contents.json | 6 ++ .../LaunchImage.launchimage/Contents.json | 25 -------- .../LaunchImage.launchimage/Default.png | Bin 170 -> 0 bytes .../LaunchImage.launchimage/DefaultR4.png | Bin 184 -> 0 bytes SpeakEasy/SpeakEasy/LaunchScreen.storyboard | 29 +++++++++ SpeakEasy/SpeakEasy/SpeakEasy-Info.plist | 4 +- SpeakEasy/SpeakEasy/SpeakEasy-Prefix.pch | 16 ----- 39 files changed, 510 insertions(+), 289 deletions(-) create mode 100644 Huckleberry/Huckleberry/Base.lproj/LaunchScreen.storyboard delete mode 100644 Huckleberry/Huckleberry/Huckleberry-Prefix.pch create mode 100644 Huckleberry/Huckleberry/Images.xcassets/Contents.json delete mode 100644 Huckleberry/Huckleberry/Images.xcassets/LaunchImage.launchimage/Contents.json create mode 100644 Motion/Motion/Images.xcassets/Contents.json delete mode 100644 Motion/Motion/Images.xcassets/LaunchImage.launchimage/Contents.json create mode 100644 Motion/Motion/LaunchScreen.storyboard delete mode 100644 Motion/Motion/Motion-Prefix.pch create mode 100644 SelfSize/SelfSize/Images.xcassets/Contents.json delete mode 100644 SelfSize/SelfSize/Images.xcassets/LaunchImage.launchimage/Contents.json create mode 100644 SelfSize/SelfSize/LaunchScreen.storyboard delete mode 100644 SpeakEasy/SpeakEasy/Images.xcassets/AppIcon.appiconset/icon120.png delete mode 100644 SpeakEasy/SpeakEasy/Images.xcassets/AppIcon.appiconset/icon58.png delete mode 100644 SpeakEasy/SpeakEasy/Images.xcassets/AppIcon.appiconset/icon80.png create mode 100644 SpeakEasy/SpeakEasy/Images.xcassets/Contents.json delete mode 100644 SpeakEasy/SpeakEasy/Images.xcassets/LaunchImage.launchimage/Contents.json delete mode 100644 SpeakEasy/SpeakEasy/Images.xcassets/LaunchImage.launchimage/Default.png delete mode 100644 SpeakEasy/SpeakEasy/Images.xcassets/LaunchImage.launchimage/DefaultR4.png create mode 100644 SpeakEasy/SpeakEasy/LaunchScreen.storyboard delete mode 100644 SpeakEasy/SpeakEasy/SpeakEasy-Prefix.pch diff --git a/Huckleberry/Huckleberry.xcodeproj/project.pbxproj b/Huckleberry/Huckleberry.xcodeproj/project.pbxproj index 779a6e6..cb5ed1a 100644 --- a/Huckleberry/Huckleberry.xcodeproj/project.pbxproj +++ b/Huckleberry/Huckleberry.xcodeproj/project.pbxproj @@ -3,13 +3,13 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ + 5325894623C911B9008ABE63 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5325894823C911B9008ABE63 /* LaunchScreen.storyboard */; }; 53512CFC18AC3A0300A74F57 /* UYLTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 53512CFB18AC3A0300A74F57 /* UYLTableViewController.m */; }; 535C803818AD71750039A2B3 /* SourceData.plist in Resources */ = {isa = PBXBuildFile; fileRef = 535C803718AD71750039A2B3 /* SourceData.plist */; }; - 536259DA1F41DEFD00616356 /* README.md in Sources */ = {isa = PBXBuildFile; fileRef = 536259D91F41DEFD00616356 /* README.md */; }; 5363F6D618AADBF6001CBD3A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5363F6D518AADBF6001CBD3A /* Foundation.framework */; }; 5363F6D818AADBF6001CBD3A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5363F6D718AADBF6001CBD3A /* CoreGraphics.framework */; }; 5363F6DA18AADBF6001CBD3A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5363F6D918AADBF6001CBD3A /* UIKit.framework */; }; @@ -22,6 +22,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 5325894723C911B9008ABE63 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 53512CFA18AC3A0300A74F57 /* UYLTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLTableViewController.h; sourceTree = ""; }; 53512CFB18AC3A0300A74F57 /* UYLTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLTableViewController.m; sourceTree = ""; }; 535C803718AD71750039A2B3 /* SourceData.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = SourceData.plist; sourceTree = ""; }; @@ -33,7 +34,6 @@ 5363F6DD18AADBF6001CBD3A /* Huckleberry-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Huckleberry-Info.plist"; sourceTree = ""; }; 5363F6DF18AADBF6001CBD3A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 5363F6E118AADBF6001CBD3A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 5363F6E318AADBF6001CBD3A /* Huckleberry-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Huckleberry-Prefix.pch"; sourceTree = ""; }; 5363F6E418AADBF6001CBD3A /* UYLAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UYLAppDelegate.h; sourceTree = ""; }; 5363F6E518AADBF6001CBD3A /* UYLAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLAppDelegate.m; sourceTree = ""; }; 5363F6E818AADBF6001CBD3A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; @@ -96,6 +96,7 @@ 53512CFA18AC3A0300A74F57 /* UYLTableViewController.h */, 53512CFB18AC3A0300A74F57 /* UYLTableViewController.m */, 5363F6E718AADBF6001CBD3A /* Main.storyboard */, + 5325894823C911B9008ABE63 /* LaunchScreen.storyboard */, 5363F6ED18AADBF6001CBD3A /* Images.xcassets */, 5363F6DC18AADBF6001CBD3A /* Supporting Files */, ); @@ -109,7 +110,6 @@ 5363F6DD18AADBF6001CBD3A /* Huckleberry-Info.plist */, 5363F6DE18AADBF6001CBD3A /* InfoPlist.strings */, 5363F6E118AADBF6001CBD3A /* main.m */, - 5363F6E318AADBF6001CBD3A /* Huckleberry-Prefix.pch */, ); name = "Supporting Files"; sourceTree = ""; @@ -141,12 +141,12 @@ isa = PBXProject; attributes = { CLASSPREFIX = UYL; - LastUpgradeCheck = 0830; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; }; buildConfigurationList = 5363F6CD18AADBF6001CBD3A /* Build configuration list for PBXProject "Huckleberry" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + compatibilityVersion = "Xcode 11.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -170,6 +170,7 @@ 5363F6EE18AADBF6001CBD3A /* Images.xcassets in Resources */, 535C803818AD71750039A2B3 /* SourceData.plist in Resources */, 5363F6E018AADBF6001CBD3A /* InfoPlist.strings in Resources */, + 5325894623C911B9008ABE63 /* LaunchScreen.storyboard in Resources */, 5363F6E918AADBF6001CBD3A /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -183,7 +184,6 @@ files = ( 53512CFC18AC3A0300A74F57 /* UYLTableViewController.m in Sources */, 5363F6E218AADBF6001CBD3A /* main.m in Sources */, - 536259DA1F41DEFD00616356 /* README.md in Sources */, 53A8DCA618AC37530053ABAF /* UYLTextCell.m in Sources */, 5363F6E618AADBF6001CBD3A /* UYLAppDelegate.m in Sources */, ); @@ -192,6 +192,14 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ + 5325894823C911B9008ABE63 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 5325894723C911B9008ABE63 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; 5363F6DE18AADBF6001CBD3A /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( @@ -219,14 +227,22 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -263,14 +279,22 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -296,9 +320,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Huckleberry/Huckleberry-Prefix.pch"; INFOPLIST_FILE = "Huckleberry/Huckleberry-Info.plist"; PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -310,9 +332,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Huckleberry/Huckleberry-Prefix.pch"; INFOPLIST_FILE = "Huckleberry/Huckleberry-Info.plist"; PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/Huckleberry/Huckleberry/Base.lproj/LaunchScreen.storyboard b/Huckleberry/Huckleberry/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..867027e --- /dev/null +++ b/Huckleberry/Huckleberry/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Huckleberry/Huckleberry/Huckleberry-Info.plist b/Huckleberry/Huckleberry/Huckleberry-Info.plist index 6667e41..3f28fd9 100644 --- a/Huckleberry/Huckleberry/Huckleberry-Info.plist +++ b/Huckleberry/Huckleberry/Huckleberry-Info.plist @@ -24,6 +24,8 @@ 1.0 LSRequiresIPhoneOS + UILaunchStoryboardName + LaunchScreen UIMainStoryboardFile Main UIRequiredDeviceCapabilities diff --git a/Huckleberry/Huckleberry/Huckleberry-Prefix.pch b/Huckleberry/Huckleberry/Huckleberry-Prefix.pch deleted file mode 100644 index 82a2bb4..0000000 --- a/Huckleberry/Huckleberry/Huckleberry-Prefix.pch +++ /dev/null @@ -1,16 +0,0 @@ -// -// Prefix header -// -// The contents of this file are implicitly included at the beginning of every source file. -// - -#import - -#ifndef __IPHONE_5_0 -#warning "This project uses features only available in iOS SDK 5.0 and later." -#endif - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/Huckleberry/Huckleberry/Images.xcassets/AppIcon.appiconset/Contents.json b/Huckleberry/Huckleberry/Images.xcassets/AppIcon.appiconset/Contents.json index a396706..19882d5 100644 --- a/Huckleberry/Huckleberry/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/Huckleberry/Huckleberry/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,19 +1,49 @@ { "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" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" } ], "info" : { diff --git a/Huckleberry/Huckleberry/Images.xcassets/Contents.json b/Huckleberry/Huckleberry/Images.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/Huckleberry/Huckleberry/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Huckleberry/Huckleberry/Images.xcassets/LaunchImage.launchimage/Contents.json b/Huckleberry/Huckleberry/Images.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index c79ebd3..0000000 --- a/Huckleberry/Huckleberry/Images.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "subtype" : "retina4", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Motion/Motion.xcodeproj/project.pbxproj b/Motion/Motion.xcodeproj/project.pbxproj index 15ed68b..928742d 100644 --- a/Motion/Motion.xcodeproj/project.pbxproj +++ b/Motion/Motion.xcodeproj/project.pbxproj @@ -3,10 +3,11 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ + 530D9CF223C928930087DFA0 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 530D9CF123C928930087DFA0 /* LaunchScreen.storyboard */; }; 5365E38B1875D15500466DA8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5365E38A1875D15500466DA8 /* Foundation.framework */; }; 5365E38D1875D15500466DA8 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5365E38C1875D15500466DA8 /* CoreGraphics.framework */; }; 5365E38F1875D15500466DA8 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5365E38E1875D15500466DA8 /* UIKit.framework */; }; @@ -19,6 +20,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 530D9CF123C928930087DFA0 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; 5365E3871875D15500466DA8 /* Motion.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Motion.app; sourceTree = BUILT_PRODUCTS_DIR; }; 5365E38A1875D15500466DA8 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 5365E38C1875D15500466DA8 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; @@ -26,7 +28,6 @@ 5365E3921875D15500466DA8 /* Motion-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Motion-Info.plist"; sourceTree = ""; }; 5365E3941875D15500466DA8 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 5365E3961875D15500466DA8 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 5365E3981875D15500466DA8 /* Motion-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Motion-Prefix.pch"; sourceTree = ""; }; 5365E3991875D15500466DA8 /* UYLAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UYLAppDelegate.h; sourceTree = ""; }; 5365E39A1875D15500466DA8 /* UYLAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLAppDelegate.m; sourceTree = ""; }; 5365E39D1875D15500466DA8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; @@ -86,6 +87,7 @@ 5365E3991875D15500466DA8 /* UYLAppDelegate.h */, 5365E39A1875D15500466DA8 /* UYLAppDelegate.m */, 5365E39C1875D15500466DA8 /* Main.storyboard */, + 530D9CF123C928930087DFA0 /* LaunchScreen.storyboard */, 5365E39F1875D15500466DA8 /* UYLViewController.h */, 5365E3A01875D15500466DA8 /* UYLViewController.m */, 5365E3A21875D15500466DA8 /* Images.xcassets */, @@ -100,7 +102,6 @@ 5365E3921875D15500466DA8 /* Motion-Info.plist */, 5365E3931875D15500466DA8 /* InfoPlist.strings */, 5365E3961875D15500466DA8 /* main.m */, - 5365E3981875D15500466DA8 /* Motion-Prefix.pch */, ); name = "Supporting Files"; sourceTree = ""; @@ -132,12 +133,12 @@ isa = PBXProject; attributes = { CLASSPREFIX = UYL; - LastUpgradeCheck = 0500; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; }; buildConfigurationList = 5365E3821875D15500466DA8 /* Build configuration list for PBXProject "Motion" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + compatibilityVersion = "Xcode 11.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -159,6 +160,7 @@ buildActionMask = 2147483647; files = ( 5365E3A31875D15500466DA8 /* Images.xcassets in Resources */, + 530D9CF223C928930087DFA0 /* LaunchScreen.storyboard in Resources */, 5365E3951875D15500466DA8 /* InfoPlist.strings in Resources */, 5365E39E1875D15500466DA8 /* Main.storyboard in Resources */, ); @@ -203,23 +205,37 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -232,7 +248,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; @@ -242,30 +258,43 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + 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; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; @@ -275,11 +304,12 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + DEVELOPMENT_TEAM = LCC2J94N44; GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Motion/Motion-Prefix.pch"; INFOPLIST_FILE = "Motion/Motion-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = app; }; name = Debug; @@ -288,11 +318,12 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + DEVELOPMENT_TEAM = LCC2J94N44; GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Motion/Motion-Prefix.pch"; INFOPLIST_FILE = "Motion/Motion-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = app; }; name = Release; diff --git a/Motion/Motion/Base.lproj/Main.storyboard b/Motion/Motion/Base.lproj/Main.storyboard index db8b053..60e9d60 100644 --- a/Motion/Motion/Base.lproj/Main.storyboard +++ b/Motion/Motion/Base.lproj/Main.storyboard @@ -1,7 +1,10 @@ - - + + + - + + + @@ -13,39 +16,33 @@ - + - - + - - - - - + - + @@ -54,7 +51,7 @@ - + @@ -63,7 +60,7 @@ - + @@ -72,7 +69,7 @@ - + @@ -83,12 +80,11 @@ - + - @@ -99,11 +95,7 @@ + - - - - - - \ No newline at end of file + diff --git a/Motion/Motion/Images.xcassets/AppIcon.appiconset/Contents.json b/Motion/Motion/Images.xcassets/AppIcon.appiconset/Contents.json index a396706..19882d5 100644 --- a/Motion/Motion/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/Motion/Motion/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,19 +1,49 @@ { "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" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" } ], "info" : { diff --git a/Motion/Motion/Images.xcassets/Contents.json b/Motion/Motion/Images.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/Motion/Motion/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Motion/Motion/Images.xcassets/LaunchImage.launchimage/Contents.json b/Motion/Motion/Images.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index c79ebd3..0000000 --- a/Motion/Motion/Images.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "subtype" : "retina4", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Motion/Motion/Images.xcassets/grid.imageset/Contents.json b/Motion/Motion/Images.xcassets/grid.imageset/Contents.json index 453044d..72e7291 100644 --- a/Motion/Motion/Images.xcassets/grid.imageset/Contents.json +++ b/Motion/Motion/Images.xcassets/grid.imageset/Contents.json @@ -2,13 +2,17 @@ "images" : [ { "idiom" : "universal", - "scale" : "1x", - "filename" : "grid.png" + "filename" : "grid.png", + "scale" : "1x" }, { "idiom" : "universal", - "scale" : "2x", - "filename" : "grid@2x.png" + "filename" : "grid@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/Motion/Motion/LaunchScreen.storyboard b/Motion/Motion/LaunchScreen.storyboard new file mode 100644 index 0000000..8235141 --- /dev/null +++ b/Motion/Motion/LaunchScreen.storyboard @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Motion/Motion/Motion-Info.plist b/Motion/Motion/Motion-Info.plist index 79bd7f0..bcdaf3d 100644 --- a/Motion/Motion/Motion-Info.plist +++ b/Motion/Motion/Motion-Info.plist @@ -9,7 +9,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - com.useyourloaf.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -24,6 +24,8 @@ 1.0 LSRequiresIPhoneOS + UILaunchStoryboardName + LaunchScreen UIMainStoryboardFile Main UIRequiredDeviceCapabilities @@ -35,6 +37,7 @@ UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + UIInterfaceOrientationPortraitUpsideDown diff --git a/Motion/Motion/Motion-Prefix.pch b/Motion/Motion/Motion-Prefix.pch deleted file mode 100644 index 82a2bb4..0000000 --- a/Motion/Motion/Motion-Prefix.pch +++ /dev/null @@ -1,16 +0,0 @@ -// -// Prefix header -// -// The contents of this file are implicitly included at the beginning of every source file. -// - -#import - -#ifndef __IPHONE_5_0 -#warning "This project uses features only available in iOS SDK 5.0 and later." -#endif - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/Motion/README b/Motion/README index 8fae223..3ae9ee8 100644 --- a/Motion/README +++ b/Motion/README @@ -7,4 +7,4 @@ This is a example project showing how to add motion effects to a view to create a sense of depth. For further details see the following blog post: -http://useyourloaf.com/blog/2014/01/03/motion-effects.html +https://useyourloaf.com/blog/motion-effects/ diff --git a/SelfSize/README b/SelfSize/README index f2cf08d..9a6664e 100644 --- a/SelfSize/README +++ b/SelfSize/README @@ -7,9 +7,9 @@ Example of using self-sizing table view cells and universal storyboards introduced in iOS 8. This is a reworking of the Huckleberry project removing code that is no longer required. The full details are in the following post: -http://useyourloaf.com/blog/2014/08/07/self-sizing-table-view-cells.html +https://useyourloaf.com/blog/self-sizing-table-view-cells/ The original post can also be found here: -http://useyourloaf.com/blog/2014/02/14/table-view-cells-with-varying-row-heights.html +https://useyourloaf.com/blog/table-view-cells-with-varying-row-heights/ diff --git a/SelfSize/SelfSize.xcodeproj/project.pbxproj b/SelfSize/SelfSize.xcodeproj/project.pbxproj index 28d9945..f6033cc 100644 --- a/SelfSize/SelfSize.xcodeproj/project.pbxproj +++ b/SelfSize/SelfSize.xcodeproj/project.pbxproj @@ -3,10 +3,11 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ + 5325894A23C91363008ABE63 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5325894923C91363008ABE63 /* LaunchScreen.storyboard */; }; 5351AA8A19845210006179CA /* README in Resources */ = {isa = PBXBuildFile; fileRef = 5351AA8919845210006179CA /* README */; }; 53EDDFCA19819CC40064D44A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 53EDDFC919819CC40064D44A /* main.m */; }; 53EDDFCD19819CC40064D44A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 53EDDFCC19819CC40064D44A /* AppDelegate.m */; }; @@ -18,6 +19,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 5325894923C91363008ABE63 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; 5351AA8919845210006179CA /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; 53EDDFC419819CC40064D44A /* SelfSize.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SelfSize.app; sourceTree = BUILT_PRODUCTS_DIR; }; 53EDDFC819819CC40064D44A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -71,6 +73,7 @@ 53EDDFF119819E1C0064D44A /* UYLTextCell.h */, 53EDDFF219819E1C0064D44A /* UYLTextCell.m */, 53EDDFD119819CC40064D44A /* Main.storyboard */, + 5325894923C91363008ABE63 /* LaunchScreen.storyboard */, 53EDDFD419819CC40064D44A /* Images.xcassets */, 53EDDFC719819CC40064D44A /* Supporting Files */, ); @@ -113,7 +116,7 @@ 53EDDFBC19819CC40064D44A /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0600; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; TargetAttributes = { 53EDDFC319819CC40064D44A = { @@ -122,8 +125,8 @@ }; }; buildConfigurationList = 53EDDFBF19819CC40064D44A /* Build configuration list for PBXProject "SelfSize" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + compatibilityVersion = "Xcode 11.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -147,6 +150,7 @@ 5351AA8A19845210006179CA /* README in Resources */, 53EDDFD319819CC40064D44A /* Main.storyboard in Resources */, 53EDDFD519819CC40064D44A /* Images.xcassets in Resources */, + 5325894A23C91363008ABE63 /* LaunchScreen.storyboard in Resources */, 53EDDFF519819FFC0064D44A /* SourceData.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -183,24 +187,37 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -225,17 +242,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -243,6 +271,7 @@ ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + 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; @@ -261,9 +290,12 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; INFOPLIST_FILE = SelfSize/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -272,9 +304,12 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; INFOPLIST_FILE = SelfSize/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/SelfSize/SelfSize/Base.lproj/Main.storyboard b/SelfSize/SelfSize/Base.lproj/Main.storyboard index 6bfa106..03be3d6 100644 --- a/SelfSize/SelfSize/Base.lproj/Main.storyboard +++ b/SelfSize/SelfSize/Base.lproj/Main.storyboard @@ -1,7 +1,10 @@ - - + + + - + + + @@ -9,23 +12,25 @@ - + - + + + - + @@ -64,7 +69,7 @@ - + diff --git a/SelfSize/SelfSize/Images.xcassets/AppIcon.appiconset/Contents.json b/SelfSize/SelfSize/Images.xcassets/AppIcon.appiconset/Contents.json index 91bf9c1..d8db8d6 100644 --- a/SelfSize/SelfSize/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/SelfSize/SelfSize/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,18 +1,53 @@ { "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" }, { @@ -44,6 +79,16 @@ "idiom" : "ipad", "size" : "76x76", "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" } ], "info" : { diff --git a/SelfSize/SelfSize/Images.xcassets/Contents.json b/SelfSize/SelfSize/Images.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/SelfSize/SelfSize/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SelfSize/SelfSize/Images.xcassets/LaunchImage.launchimage/Contents.json b/SelfSize/SelfSize/Images.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index 6f870a4..0000000 --- a/SelfSize/SelfSize/Images.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "subtype" : "retina4", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/SelfSize/SelfSize/Info.plist b/SelfSize/SelfSize/Info.plist index cab5273..95c9575 100644 --- a/SelfSize/SelfSize/Info.plist +++ b/SelfSize/SelfSize/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - com.useyourloaf.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -22,6 +22,8 @@ 1 LSRequiresIPhoneOS + UILaunchStoryboardName + LaunchScreen UIMainStoryboardFile Main UIRequiredDeviceCapabilities diff --git a/SelfSize/SelfSize/LaunchScreen.storyboard b/SelfSize/SelfSize/LaunchScreen.storyboard new file mode 100644 index 0000000..883d763 --- /dev/null +++ b/SelfSize/SelfSize/LaunchScreen.storyboard @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SpeakEasy/README b/SpeakEasy/README index 02b311d..96d071a 100644 --- a/SpeakEasy/README +++ b/SpeakEasy/README @@ -8,4 +8,4 @@ text to speech synthesis. Makes use of custom voices, pitch, rate and text highlighting. For further details see the following blog post: -http://useyourloaf.com/blog/2014/01/08/synthesized-speech-from-text.html \ No newline at end of file +https://useyourloaf.com/blog/synthesized-speech-from-text/ diff --git a/SpeakEasy/SpeakEasy.xcodeproj/project.pbxproj b/SpeakEasy/SpeakEasy.xcodeproj/project.pbxproj index 1fd4ccd..07fa233 100644 --- a/SpeakEasy/SpeakEasy.xcodeproj/project.pbxproj +++ b/SpeakEasy/SpeakEasy.xcodeproj/project.pbxproj @@ -3,10 +3,11 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ + 530D9CF023C926AC0087DFA0 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 530D9CEF23C926AC0087DFA0 /* LaunchScreen.storyboard */; }; 5329C82318785C4F00B91692 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5329C82218785C4F00B91692 /* Foundation.framework */; }; 5329C82518785C4F00B91692 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5329C82418785C4F00B91692 /* CoreGraphics.framework */; }; 5329C82718785C4F00B91692 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5329C82618785C4F00B91692 /* UIKit.framework */; }; @@ -19,6 +20,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 530D9CEF23C926AC0087DFA0 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; 5329C81F18785C4F00B91692 /* SpeakEasy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SpeakEasy.app; sourceTree = BUILT_PRODUCTS_DIR; }; 5329C82218785C4F00B91692 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 5329C82418785C4F00B91692 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; @@ -26,7 +28,6 @@ 5329C82A18785C4F00B91692 /* SpeakEasy-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "SpeakEasy-Info.plist"; sourceTree = ""; }; 5329C82C18785C4F00B91692 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 5329C82E18785C4F00B91692 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 5329C83018785C4F00B91692 /* SpeakEasy-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SpeakEasy-Prefix.pch"; sourceTree = ""; }; 5329C83118785C4F00B91692 /* UYLAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UYLAppDelegate.h; sourceTree = ""; }; 5329C83218785C4F00B91692 /* UYLAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLAppDelegate.m; sourceTree = ""; }; 5329C83518785C4F00B91692 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; @@ -86,6 +87,7 @@ 5329C83118785C4F00B91692 /* UYLAppDelegate.h */, 5329C83218785C4F00B91692 /* UYLAppDelegate.m */, 5329C83418785C4F00B91692 /* Main.storyboard */, + 530D9CEF23C926AC0087DFA0 /* LaunchScreen.storyboard */, 5329C83718785C4F00B91692 /* UYLViewController.h */, 5329C83818785C4F00B91692 /* UYLViewController.m */, 5329C83A18785C4F00B91692 /* Images.xcassets */, @@ -100,7 +102,6 @@ 5329C82A18785C4F00B91692 /* SpeakEasy-Info.plist */, 5329C82B18785C4F00B91692 /* InfoPlist.strings */, 5329C82E18785C4F00B91692 /* main.m */, - 5329C83018785C4F00B91692 /* SpeakEasy-Prefix.pch */, ); name = "Supporting Files"; sourceTree = ""; @@ -132,12 +133,12 @@ isa = PBXProject; attributes = { CLASSPREFIX = UYL; - LastUpgradeCheck = 0510; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; }; buildConfigurationList = 5329C81A18785C4F00B91692 /* Build configuration list for PBXProject "SpeakEasy" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + compatibilityVersion = "Xcode 11.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -159,6 +160,7 @@ buildActionMask = 2147483647; files = ( 5329C83B18785C4F00B91692 /* Images.xcassets in Resources */, + 530D9CF023C926AC0087DFA0 /* LaunchScreen.storyboard in Resources */, 5329C82D18785C4F00B91692 /* InfoPlist.strings in Resources */, 5329C83618785C4F00B91692 /* Main.storyboard in Resources */, ); @@ -203,22 +205,37 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -231,7 +248,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; @@ -241,29 +258,43 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + 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; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; @@ -273,10 +304,9 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "SpeakEasy/SpeakEasy-Prefix.pch"; INFOPLIST_FILE = "SpeakEasy/SpeakEasy-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; @@ -286,10 +316,9 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "SpeakEasy/SpeakEasy-Prefix.pch"; INFOPLIST_FILE = "SpeakEasy/SpeakEasy-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; diff --git a/SpeakEasy/SpeakEasy/Base.lproj/Main.storyboard b/SpeakEasy/SpeakEasy/Base.lproj/Main.storyboard index fc9f909..bf0a3b5 100644 --- a/SpeakEasy/SpeakEasy/Base.lproj/Main.storyboard +++ b/SpeakEasy/SpeakEasy/Base.lproj/Main.storyboard @@ -1,10 +1,13 @@ - - + + + - + + + - + @@ -13,12 +16,11 @@ - + - - + @@ -26,8 +28,7 @@ - - + @@ -39,8 +40,7 @@ - - + @@ -51,26 +51,24 @@ - - + - + @@ -97,11 +95,7 @@ + - - - - - - \ No newline at end of file + diff --git a/SpeakEasy/SpeakEasy/Images.xcassets/AppIcon.appiconset/Contents.json b/SpeakEasy/SpeakEasy/Images.xcassets/AppIcon.appiconset/Contents.json index 80689ca..19882d5 100644 --- a/SpeakEasy/SpeakEasy/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/SpeakEasy/SpeakEasy/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,22 +1,49 @@ { "images" : [ { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", "size" : "29x29", + "scale" : "2x" + }, + { "idiom" : "iphone", - "filename" : "icon58.png", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", "scale" : "2x" }, { + "idiom" : "iphone", "size" : "40x40", + "scale" : "3x" + }, + { "idiom" : "iphone", - "filename" : "icon80.png", + "size" : "60x60", "scale" : "2x" }, { - "size" : "60x60", "idiom" : "iphone", - "filename" : "icon120.png", - "scale" : "2x" + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" } ], "info" : { diff --git a/SpeakEasy/SpeakEasy/Images.xcassets/AppIcon.appiconset/icon120.png b/SpeakEasy/SpeakEasy/Images.xcassets/AppIcon.appiconset/icon120.png deleted file mode 100644 index 0077715e84c6014c0cad9cf02c3e1da4bf1dc33e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmV+r0`L8aP)$PO+=tum$NK&Erq_1l^VPcGmHz(y-0#V(+J5u;?ZM-q%IB`7*LA|=p{v<_ z?DyiU+I_?1qU`qJ^!o4A?7ZXh)b#r9_4@D2=&sc4z4`q1{{Q`?)^g?a*Tm(dr`UJH z5a z-syuMjgEVBReo02#HD9bVn4VtH%0cujYXM-3%ydNcEk+|4TL31B}8RPWkfYfHAEFk z6+|6M9Yj&gv17-M9XodH*s){BjxRWN?D$aX*PeYGNeDnO5S0>O2JhE9euihNjnbq}Ow)*?Q>p+r8nLvD}BV-HN5x zbo>4J*zLme`t8r^wd(fY>Gj;X;F9R|+_&G5)9bsV)^hOp=;`&{$L6WO$%D2tgG67{Qmp+{Pm~UciivD)9bpk-HHAF{H)r4=JeRy@XDyzdGGk=$L6Sq z38mTq008GnL_t(|0qxbtZo@DT1kf2$qD0xIOM36Um;e8^2!<~KMQgc85FpUIFZMvr zECz$$)Ob@ne&cH68}zA4CX^M{8QX$Mg&iYl61Y~FBzFe(2&ui6y(~Ia1$z}0x|9?s z(V?M8gP5m?N6b*fAXZbPM$A#fAx5G9FzP6>p?{pMpZyY^BHM_~C^FZFP9OC>b-`?^ zYi)O=Ez_NMWrfo&l!s&gKy$8Ihcje3I_Am=a-DMJ47o<Sp!GS0)&hgS@daV43wEqJptJx0002ovPDHLkV1hHc B0WSam diff --git a/SpeakEasy/SpeakEasy/Images.xcassets/AppIcon.appiconset/icon80.png b/SpeakEasy/SpeakEasy/Images.xcassets/AppIcon.appiconset/icon80.png deleted file mode 100644 index 8f906ac356787ec22a3c806528bdeefcc093e32f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 465 zcmV;?0WSWDP)i_@#=k(gx?!&d-jn3(_=JeV7{rIHUbFtip==IyA)^e%YdaT-h-0;f!{rJG+ zp3dpC{Qml<*mttsh~x6q#^$Ki?7sg0{;S!2xZjfL_1^3D;P?CU&FQk+@5r#+hQH#R z@c8Ja*LC~-`P1yY;_}kB-;l-SruO^sqty9Lb)uBK7-{Mqz+2n;Ba$TP>n3Yi zsm+?Y*J@S48j4EGb!E<4^0Lzs^MSPub4}_7A`G3Tltd{tp~{JpR|+eLR4Aw?TCb3r zXthEbqBRQ1h?Xg&C0eTx;*kPV;1Ve?1*X83Xj}G9vA3SRm+i~Jy>0C4%e@cn3)a1{ z-7moYQ~XaV-bT*CraaDB*p|l*BX;-XvCoJDxnztE<#GhT@rhhc0XUP*>;m9YK34$O z^0@(SWpsBB4{~~hCpkUy@+zmd_YZk}e#z_mM_x1iKS}Zn7cdb9A#bX!00000NkvXX Hu0mjfG*t*S diff --git a/SpeakEasy/SpeakEasy/Images.xcassets/Contents.json b/SpeakEasy/SpeakEasy/Images.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/SpeakEasy/SpeakEasy/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SpeakEasy/SpeakEasy/Images.xcassets/LaunchImage.launchimage/Contents.json b/SpeakEasy/SpeakEasy/Images.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index a195255..0000000 --- a/SpeakEasy/SpeakEasy/Images.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "filename" : "Default.png", - "scale" : "2x" - }, - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "retina4", - "filename" : "DefaultR4.png", - "minimum-system-version" : "7.0", - "orientation" : "portrait", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/SpeakEasy/SpeakEasy/Images.xcassets/LaunchImage.launchimage/Default.png b/SpeakEasy/SpeakEasy/Images.xcassets/LaunchImage.launchimage/Default.png deleted file mode 100644 index d66b897c194499fef271e2174afaa4f09ecbc6bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sU_QXe3>2BK6SV_KF$egBxc>kDfB6yV6F_c~ xr;B4qMcmtihKxYop#@+4bGh{w0GZSR6%zXA85nmc__u&e^mO%eS?83{1OSWB8rlE= diff --git a/SpeakEasy/SpeakEasy/Images.xcassets/LaunchImage.launchimage/DefaultR4.png b/SpeakEasy/SpeakEasy/Images.xcassets/LaunchImage.launchimage/DefaultR4.png deleted file mode 100644 index 804499ceee04996ef771df748f940b6aae704ac9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sU@2f^28uX1mOBF}<^Z1%*Z=?jFFzuE0>~}! xba4!+h + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SpeakEasy/SpeakEasy/SpeakEasy-Info.plist b/SpeakEasy/SpeakEasy/SpeakEasy-Info.plist index 23cd2c3..bc8f3ff 100644 --- a/SpeakEasy/SpeakEasy/SpeakEasy-Info.plist +++ b/SpeakEasy/SpeakEasy/SpeakEasy-Info.plist @@ -9,7 +9,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - com.useyourloaf.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -24,6 +24,8 @@ 1.0 LSRequiresIPhoneOS + UILaunchStoryboardName + LaunchScreen UIMainStoryboardFile Main UIRequiredDeviceCapabilities diff --git a/SpeakEasy/SpeakEasy/SpeakEasy-Prefix.pch b/SpeakEasy/SpeakEasy/SpeakEasy-Prefix.pch deleted file mode 100644 index 82a2bb4..0000000 --- a/SpeakEasy/SpeakEasy/SpeakEasy-Prefix.pch +++ /dev/null @@ -1,16 +0,0 @@ -// -// Prefix header -// -// The contents of this file are implicitly included at the beginning of every source file. -// - -#import - -#ifndef __IPHONE_5_0 -#warning "This project uses features only available in iOS SDK 5.0 and later." -#endif - -#ifdef __OBJC__ - #import - #import -#endif From ff0edded2c2ae5f550fad42afcc0c351f3ed83fb Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Fri, 10 Jan 2020 22:10:29 +0000 Subject: [PATCH 34/56] Update for Xcode 11 and Swift 5 --- RemindMe10/RemindMe.xcodeproj/project.pbxproj | 28 ++++++++++++++++--- RemindMe10/RemindMe/AppDelegate.swift | 2 +- .../RemindMe/UNMutableNotification+UYL.swift | 4 +-- .../RemindMeObjc/UYLNotificationDelegate.m | 2 +- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/RemindMe10/RemindMe.xcodeproj/project.pbxproj b/RemindMe10/RemindMe.xcodeproj/project.pbxproj index d17847a..f91d866 100644 --- a/RemindMe10/RemindMe.xcodeproj/project.pbxproj +++ b/RemindMe10/RemindMe.xcodeproj/project.pbxproj @@ -176,7 +176,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0800; - LastUpgradeCheck = 0810; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; TargetAttributes = { 539D5EB81DC4DBF500130F2F = { @@ -193,7 +193,7 @@ }; buildConfigurationList = 53BA9AF01DB283D7000BD07D /* Build configuration list for PBXProject "RemindMe" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -324,20 +324,29 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_SUSPICIOUS_MOVES = YES; CLANG_WARN_UNREACHABLE_CODE = YES; @@ -367,6 +376,7 @@ SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -375,20 +385,29 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_SUSPICIOUS_MOVES = YES; CLANG_WARN_UNREACHABLE_CODE = YES; @@ -410,6 +429,7 @@ MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -424,7 +444,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.RemindMe; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 5.0; }; name = Debug; }; @@ -437,7 +457,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.RemindMe; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 5.0; }; name = Release; }; diff --git a/RemindMe10/RemindMe/AppDelegate.swift b/RemindMe10/RemindMe/AppDelegate.swift index b57cf86..85e52f5 100644 --- a/RemindMe10/RemindMe/AppDelegate.swift +++ b/RemindMe10/RemindMe/AppDelegate.swift @@ -40,7 +40,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? let notificationDelegate = UYLNotificationDelegate() - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { let options: UNAuthorizationOptions = [.alert, .sound]; registerForLocalNotifications(options: options) let center = UNUserNotificationCenter.current() diff --git a/RemindMe10/RemindMe/UNMutableNotification+UYL.swift b/RemindMe10/RemindMe/UNMutableNotification+UYL.swift index 58cf0df..8ab4d29 100644 --- a/RemindMe10/RemindMe/UNMutableNotification+UYL.swift +++ b/RemindMe10/RemindMe/UNMutableNotification+UYL.swift @@ -42,9 +42,9 @@ extension UNMutableNotificationContent { /// - body: The message displayed in the notification alert. /// - title: A short description of the reason for the alert. /// - sound: The sound to play when the notification is - /// delivered. Defaults to `UNNotificationSound.default()`. + /// delivered. Defaults to `UNNotificationSound.default`. - convenience init(body: String, title: String, sound: UNNotificationSound = UNNotificationSound.default()) { + convenience init(body: String, title: String, sound: UNNotificationSound = UNNotificationSound.default) { self.init() self.title = NSString.localizedUserNotificationString(forKey: title, arguments: nil) self.body = body diff --git a/RemindMe10/RemindMeObjc/UYLNotificationDelegate.m b/RemindMe10/RemindMeObjc/UYLNotificationDelegate.m index 776c88a..011b8d5 100644 --- a/RemindMe10/RemindMeObjc/UYLNotificationDelegate.m +++ b/RemindMe10/RemindMeObjc/UYLNotificationDelegate.m @@ -40,7 +40,7 @@ - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNot completionHandler(UNNotificationPresentationOptionAlert + UNNotificationPresentationOptionSound); } -- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler { +- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler { completionHandler(); } From cff31734e06a840e2c1ca799bef9abce80f64f86 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Sat, 11 Jan 2020 14:32:40 +0000 Subject: [PATCH 35/56] Update for Xcode 11 and minimum of iOS 9 --- .../DynamicText.xcodeproj/project.pbxproj | 22 +++-- .../DynamicText/Base.lproj/Main.storyboard | 79 +++++++----------- .../DynamicText/DynamicText-Info.plist | 5 +- .../AppIcon.appiconset/Contents.json | 60 +++++++++++++ .../AppIcon.appiconset/icon-1024.png | Bin 0 -> 56305 bytes .../AppIcon.appiconset/icon-167.png | Bin 0 -> 11276 bytes .../AppIcon.appiconset/icon-20.png | Bin 0 -> 736 bytes .../AppIcon.appiconset/icon-29.png | Bin 0 -> 821 bytes .../AppIcon.appiconset/icon-29@2x-1.png | Bin 0 -> 2535 bytes .../AppIcon.appiconset/icon-40@2x-1.png | Bin 0 -> 4680 bytes .../AppIcon.appiconset/icon-41.png | Bin 0 -> 1328 bytes .../AppIcon.appiconset/icon-42.png | Bin 0 -> 1328 bytes .../AppIcon.appiconset/icon-76.png | Bin 0 -> 4136 bytes .../AppIcon.appiconset/icon-76@2x.png | Bin 0 -> 17726 bytes .../DynamicText/UYLTextStyleViewController.m | 5 -- DynamicText/README.md | 3 +- 16 files changed, 111 insertions(+), 63 deletions(-) create mode 100644 DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-1024.png create mode 100644 DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-167.png create mode 100644 DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-20.png create mode 100644 DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-29.png create mode 100644 DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-29@2x-1.png create mode 100644 DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-40@2x-1.png create mode 100644 DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-41.png create mode 100644 DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-42.png create mode 100644 DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-76.png create mode 100644 DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-76@2x.png diff --git a/DynamicText/DynamicText.xcodeproj/project.pbxproj b/DynamicText/DynamicText.xcodeproj/project.pbxproj index 7055b4a..8707dce 100644 --- a/DynamicText/DynamicText.xcodeproj/project.pbxproj +++ b/DynamicText/DynamicText.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 48; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -145,12 +145,12 @@ isa = PBXProject; attributes = { CLASSPREFIX = UYL; - LastUpgradeCheck = 0940; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; }; buildConfigurationList = 5393B52517F83CB600AD2292 /* Build configuration list for PBXProject "DynamicText" */; - compatibilityVersion = "Xcode 8.0"; - developmentRegion = English; + compatibilityVersion = "Xcode 11.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -227,6 +227,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -269,7 +270,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; @@ -279,6 +280,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -314,7 +316,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; @@ -324,13 +326,15 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = 1.3; DEVELOPMENT_TEAM = LCC2J94N44; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "DynamicText/DynamicText-Prefix.pch"; INFOPLIST_FILE = "DynamicText/DynamicText-Info.plist"; + MARKETING_VERSION = 1.3; PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = 1; + TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = app; }; name = Debug; @@ -339,13 +343,15 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = 1.3; DEVELOPMENT_TEAM = LCC2J94N44; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "DynamicText/DynamicText-Prefix.pch"; INFOPLIST_FILE = "DynamicText/DynamicText-Info.plist"; + MARKETING_VERSION = 1.3; PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = 1; + TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = app; }; name = Release; diff --git a/DynamicText/DynamicText/Base.lproj/Main.storyboard b/DynamicText/DynamicText/Base.lproj/Main.storyboard index ff01357..f069627 100644 --- a/DynamicText/DynamicText/Base.lproj/Main.storyboard +++ b/DynamicText/DynamicText/Base.lproj/Main.storyboard @@ -1,10 +1,13 @@ - - + + + - + + + - + @@ -13,59 +16,52 @@ - + - + @@ -103,9 +99,9 @@ - + - + @@ -114,60 +110,53 @@ - + - + @@ -205,7 +194,7 @@ - + @@ -214,8 +203,9 @@ + - + @@ -224,16 +214,11 @@ - + - - - - - - \ No newline at end of file + diff --git a/DynamicText/DynamicText/DynamicText-Info.plist b/DynamicText/DynamicText/DynamicText-Info.plist index fce2f33..2348c0a 100644 --- a/DynamicText/DynamicText/DynamicText-Info.plist +++ b/DynamicText/DynamicText/DynamicText-Info.plist @@ -17,11 +17,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.2 + $(MARKETING_VERSION) CFBundleSignature ???? CFBundleVersion - 1.2 + $(CURRENT_PROJECT_VERSION) LSRequiresIPhoneOS UILaunchStoryboardName @@ -37,6 +37,7 @@ UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + UIInterfaceOrientationPortraitUpsideDown diff --git a/DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/Contents.json b/DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/Contents.json index f60b56f..1120389 100644 --- a/DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/Contents.json @@ -47,6 +47,66 @@ "idiom" : "iphone", "filename" : "icon-180.png", "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "icon-20.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "icon-41.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "icon-29.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "icon-29@2x-1.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "icon-42.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "icon-40@2x-1.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "icon-76.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "icon-76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "icon-167.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "icon-1024.png", + "scale" : "1x" } ], "info" : { diff --git a/DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-1024.png b/DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..4a1a9de7f6ad69ba2280fc5250c4368846b7921e GIT binary patch literal 56305 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 Y^-*HM%6=&H7sNNxH`Ob=>iF!x09e}G4*&oF literal 0 HcmV?d00001 diff --git a/DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-167.png b/DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-167.png new file mode 100644 index 0000000000000000000000000000000000000000..0a5ec66a8746d77c19afa4db06b0e9e27145e92d GIT binary patch literal 11276 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 literal 0 HcmV?d00001 diff --git a/DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-29@2x-1.png b/DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-29@2x-1.png new file mode 100644 index 0000000000000000000000000000000000000000..3c599a552c33fae613e1ab51f03e7e7434bbcb81 GIT binary patch literal 2535 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 literal 0 HcmV?d00001 diff --git a/DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-40@2x-1.png b/DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-40@2x-1.png new file mode 100644 index 0000000000000000000000000000000000000000..afcf538b066551cf9098ace98b82019a45999e07 GIT binary patch literal 4680 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 KMNUMnLSTa7Rs$~p literal 0 HcmV?d00001 diff --git a/DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-41.png b/DynamicText/DynamicText/Images.xcassets/AppIcon.appiconset/icon-41.png new file mode 100644 index 0000000000000000000000000000000000000000..c663546f40b42b9e41523fc6182d8a6b4b99090d GIT binary patch literal 1328 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 Date: Sat, 11 Jan 2020 14:43:00 +0000 Subject: [PATCH 36/56] Archive Collection project (bug was resolved in iOS 9.3) --- .../Collection.xcodeproj/project.pbxproj | 528 ++++++++++++++++++ .../Collection/Base.lproj/Main.storyboard | 129 +++++ .../Collection/Collection-Info.plist | 41 ++ .../Collection/Collection-Prefix.pch | 16 + .../AppIcon.appiconset/Contents.json | 20 + .../AppIcon.appiconset/icon-29.png | Bin 0 -> 859 bytes .../AppIcon.appiconset/icon-29@2x.png | Bin 0 -> 2561 bytes .../AppIcon.appiconset/icon-40.png | Bin 0 -> 1362 bytes .../AppIcon.appiconset/icon-40@2x.png | Bin 0 -> 4710 bytes .../AppIcon.appiconset/icon-76.png | Bin 0 -> 4166 bytes .../AppIcon.appiconset/icon-76@2x.png | Bin 0 -> 17774 bytes .../Collection/Images.xcassets/Contents.json | 6 + .../LaunchImage.launchimage/Contents.json | 8 +- .../Default-Landscape@2x~ipad.png | Bin 0 -> 1001 bytes .../Default-Landscape~ipad.png | Bin 0 -> 593 bytes .../Default-Portrait@2x~ipad.png | Bin 0 -> 1784 bytes .../Default-Portrait~ipad.png | Bin 0 -> 338 bytes .../Collection/Collection/UYLAppDelegate.h | 39 ++ .../Collection/Collection/UYLAppDelegate.m | 44 ++ .../Collection/UYLCollectionViewController.h | 38 ++ .../Collection/UYLCollectionViewController.m | 124 ++++ Archive/Collection/Collection/UYLSimpleCell.h | 40 ++ Archive/Collection/Collection/UYLSimpleCell.m | 51 ++ .../Collection/Collection/UYLViewController.h | 38 ++ .../Collection/Collection/UYLViewController.m | 50 ++ .../Collection/en.lproj/InfoPlist.strings | 2 + Archive/Collection/Collection/main.m | 43 ++ .../CollectionTests-Info.plist | 22 + .../CollectionTests/CollectionTests.m | 34 ++ .../en.lproj/InfoPlist.strings | 2 + Archive/Collection/README | 16 + 31 files changed, 1287 insertions(+), 4 deletions(-) create mode 100644 Archive/Collection/Collection.xcodeproj/project.pbxproj create mode 100644 Archive/Collection/Collection/Base.lproj/Main.storyboard create mode 100644 Archive/Collection/Collection/Collection-Info.plist create mode 100644 Archive/Collection/Collection/Collection-Prefix.pch rename {Collection => Archive/Collection}/Collection/Images.xcassets/AppIcon.appiconset/Contents.json (69%) create mode 100644 Archive/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-29.png create mode 100644 Archive/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-29@2x.png create mode 100644 Archive/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-40.png create mode 100644 Archive/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-40@2x.png create mode 100644 Archive/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-76.png create mode 100644 Archive/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-76@2x.png create mode 100644 Archive/Collection/Collection/Images.xcassets/Contents.json rename {Collection => Archive/Collection}/Collection/Images.xcassets/LaunchImage.launchimage/Contents.json (100%) create mode 100644 Archive/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png create mode 100644 Archive/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png create mode 100644 Archive/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png create mode 100644 Archive/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png create mode 100644 Archive/Collection/Collection/UYLAppDelegate.h create mode 100644 Archive/Collection/Collection/UYLAppDelegate.m create mode 100644 Archive/Collection/Collection/UYLCollectionViewController.h create mode 100644 Archive/Collection/Collection/UYLCollectionViewController.m create mode 100644 Archive/Collection/Collection/UYLSimpleCell.h create mode 100644 Archive/Collection/Collection/UYLSimpleCell.m create mode 100644 Archive/Collection/Collection/UYLViewController.h create mode 100644 Archive/Collection/Collection/UYLViewController.m create mode 100644 Archive/Collection/Collection/en.lproj/InfoPlist.strings create mode 100644 Archive/Collection/Collection/main.m create mode 100644 Archive/Collection/CollectionTests/CollectionTests-Info.plist create mode 100644 Archive/Collection/CollectionTests/CollectionTests.m create mode 100644 Archive/Collection/CollectionTests/en.lproj/InfoPlist.strings create mode 100644 Archive/Collection/README diff --git a/Archive/Collection/Collection.xcodeproj/project.pbxproj b/Archive/Collection/Collection.xcodeproj/project.pbxproj new file mode 100644 index 0000000..84347c5 --- /dev/null +++ b/Archive/Collection/Collection.xcodeproj/project.pbxproj @@ -0,0 +1,528 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 52; + objects = { + +/* Begin PBXBuildFile section */ + 53A5F89517E3BA57000DB6B5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53A5F89417E3BA57000DB6B5 /* Foundation.framework */; }; + 53A5F89717E3BA57000DB6B5 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53A5F89617E3BA57000DB6B5 /* CoreGraphics.framework */; }; + 53A5F89917E3BA57000DB6B5 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53A5F89817E3BA57000DB6B5 /* UIKit.framework */; }; + 53A5F89F17E3BA57000DB6B5 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 53A5F89D17E3BA57000DB6B5 /* InfoPlist.strings */; }; + 53A5F8A117E3BA57000DB6B5 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A5F8A017E3BA57000DB6B5 /* main.m */; }; + 53A5F8A517E3BA57000DB6B5 /* UYLAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A5F8A417E3BA57000DB6B5 /* UYLAppDelegate.m */; }; + 53A5F8A817E3BA57000DB6B5 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 53A5F8A617E3BA57000DB6B5 /* Main.storyboard */; }; + 53A5F8AB17E3BA57000DB6B5 /* UYLCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A5F8AA17E3BA57000DB6B5 /* UYLCollectionViewController.m */; }; + 53A5F8AD17E3BA57000DB6B5 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 53A5F8AC17E3BA57000DB6B5 /* Images.xcassets */; }; + 53A5F8B417E3BA57000DB6B5 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53A5F8B317E3BA57000DB6B5 /* XCTest.framework */; }; + 53A5F8B517E3BA57000DB6B5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53A5F89417E3BA57000DB6B5 /* Foundation.framework */; }; + 53A5F8B617E3BA57000DB6B5 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53A5F89817E3BA57000DB6B5 /* UIKit.framework */; }; + 53A5F8BE17E3BA57000DB6B5 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 53A5F8BC17E3BA57000DB6B5 /* InfoPlist.strings */; }; + 53A5F8C017E3BA57000DB6B5 /* CollectionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A5F8BF17E3BA57000DB6B5 /* CollectionTests.m */; }; + 53A5F8CB17E3BFFB000DB6B5 /* UYLSimpleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A5F8CA17E3BFFB000DB6B5 /* UYLSimpleCell.m */; }; + 53A5F8CE17E3C692000DB6B5 /* UYLViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A5F8CD17E3C692000DB6B5 /* UYLViewController.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 53A5F8B717E3BA57000DB6B5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 53A5F88917E3BA57000DB6B5 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 53A5F89017E3BA57000DB6B5; + remoteInfo = Collection; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 53A5F89117E3BA57000DB6B5 /* Collection.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Collection.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 53A5F89417E3BA57000DB6B5 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 53A5F89617E3BA57000DB6B5 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 53A5F89817E3BA57000DB6B5 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 53A5F89C17E3BA57000DB6B5 /* Collection-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Collection-Info.plist"; sourceTree = ""; }; + 53A5F89E17E3BA57000DB6B5 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 53A5F8A017E3BA57000DB6B5 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 53A5F8A217E3BA57000DB6B5 /* Collection-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Collection-Prefix.pch"; sourceTree = ""; }; + 53A5F8A317E3BA57000DB6B5 /* UYLAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UYLAppDelegate.h; sourceTree = ""; }; + 53A5F8A417E3BA57000DB6B5 /* UYLAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLAppDelegate.m; sourceTree = ""; }; + 53A5F8A717E3BA57000DB6B5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 53A5F8A917E3BA57000DB6B5 /* UYLCollectionViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UYLCollectionViewController.h; sourceTree = ""; }; + 53A5F8AA17E3BA57000DB6B5 /* UYLCollectionViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLCollectionViewController.m; sourceTree = ""; }; + 53A5F8AC17E3BA57000DB6B5 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 53A5F8B217E3BA57000DB6B5 /* CollectionTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CollectionTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 53A5F8B317E3BA57000DB6B5 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 53A5F8BB17E3BA57000DB6B5 /* CollectionTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CollectionTests-Info.plist"; sourceTree = ""; }; + 53A5F8BD17E3BA57000DB6B5 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 53A5F8BF17E3BA57000DB6B5 /* CollectionTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CollectionTests.m; sourceTree = ""; }; + 53A5F8C917E3BFFB000DB6B5 /* UYLSimpleCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLSimpleCell.h; sourceTree = ""; }; + 53A5F8CA17E3BFFB000DB6B5 /* UYLSimpleCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLSimpleCell.m; sourceTree = ""; }; + 53A5F8CC17E3C692000DB6B5 /* UYLViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLViewController.h; sourceTree = ""; }; + 53A5F8CD17E3C692000DB6B5 /* UYLViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLViewController.m; sourceTree = ""; }; + 53D5C7E617F62BD50077FB0D /* README */ = {isa = PBXFileReference; lastKnownFileType = text; path = README; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 53A5F88E17E3BA57000DB6B5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 53A5F89717E3BA57000DB6B5 /* CoreGraphics.framework in Frameworks */, + 53A5F89917E3BA57000DB6B5 /* UIKit.framework in Frameworks */, + 53A5F89517E3BA57000DB6B5 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 53A5F8AF17E3BA57000DB6B5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 53A5F8B417E3BA57000DB6B5 /* XCTest.framework in Frameworks */, + 53A5F8B617E3BA57000DB6B5 /* UIKit.framework in Frameworks */, + 53A5F8B517E3BA57000DB6B5 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 53A5F88817E3BA57000DB6B5 = { + isa = PBXGroup; + children = ( + 53D5C7E617F62BD50077FB0D /* README */, + 53A5F89A17E3BA57000DB6B5 /* Collection */, + 53A5F8B917E3BA57000DB6B5 /* CollectionTests */, + 53A5F89317E3BA57000DB6B5 /* Frameworks */, + 53A5F89217E3BA57000DB6B5 /* Products */, + ); + sourceTree = ""; + }; + 53A5F89217E3BA57000DB6B5 /* Products */ = { + isa = PBXGroup; + children = ( + 53A5F89117E3BA57000DB6B5 /* Collection.app */, + 53A5F8B217E3BA57000DB6B5 /* CollectionTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 53A5F89317E3BA57000DB6B5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 53A5F89417E3BA57000DB6B5 /* Foundation.framework */, + 53A5F89617E3BA57000DB6B5 /* CoreGraphics.framework */, + 53A5F89817E3BA57000DB6B5 /* UIKit.framework */, + 53A5F8B317E3BA57000DB6B5 /* XCTest.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 53A5F89A17E3BA57000DB6B5 /* Collection */ = { + isa = PBXGroup; + children = ( + 53A5F8A317E3BA57000DB6B5 /* UYLAppDelegate.h */, + 53A5F8A417E3BA57000DB6B5 /* UYLAppDelegate.m */, + 53A5F8A617E3BA57000DB6B5 /* Main.storyboard */, + 53A5F8CC17E3C692000DB6B5 /* UYLViewController.h */, + 53A5F8CD17E3C692000DB6B5 /* UYLViewController.m */, + 53A5F8C917E3BFFB000DB6B5 /* UYLSimpleCell.h */, + 53A5F8CA17E3BFFB000DB6B5 /* UYLSimpleCell.m */, + 53A5F8A917E3BA57000DB6B5 /* UYLCollectionViewController.h */, + 53A5F8AA17E3BA57000DB6B5 /* UYLCollectionViewController.m */, + 53A5F8AC17E3BA57000DB6B5 /* Images.xcassets */, + 53A5F89B17E3BA57000DB6B5 /* Supporting Files */, + ); + path = Collection; + sourceTree = ""; + }; + 53A5F89B17E3BA57000DB6B5 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 53A5F89C17E3BA57000DB6B5 /* Collection-Info.plist */, + 53A5F89D17E3BA57000DB6B5 /* InfoPlist.strings */, + 53A5F8A017E3BA57000DB6B5 /* main.m */, + 53A5F8A217E3BA57000DB6B5 /* Collection-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 53A5F8B917E3BA57000DB6B5 /* CollectionTests */ = { + isa = PBXGroup; + children = ( + 53A5F8BF17E3BA57000DB6B5 /* CollectionTests.m */, + 53A5F8BA17E3BA57000DB6B5 /* Supporting Files */, + ); + path = CollectionTests; + sourceTree = ""; + }; + 53A5F8BA17E3BA57000DB6B5 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 53A5F8BB17E3BA57000DB6B5 /* CollectionTests-Info.plist */, + 53A5F8BC17E3BA57000DB6B5 /* InfoPlist.strings */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 53A5F89017E3BA57000DB6B5 /* Collection */ = { + isa = PBXNativeTarget; + buildConfigurationList = 53A5F8C317E3BA57000DB6B5 /* Build configuration list for PBXNativeTarget "Collection" */; + buildPhases = ( + 53A5F88D17E3BA57000DB6B5 /* Sources */, + 53A5F88E17E3BA57000DB6B5 /* Frameworks */, + 53A5F88F17E3BA57000DB6B5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Collection; + productName = Collection; + productReference = 53A5F89117E3BA57000DB6B5 /* Collection.app */; + productType = "com.apple.product-type.application"; + }; + 53A5F8B117E3BA57000DB6B5 /* CollectionTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 53A5F8C617E3BA57000DB6B5 /* Build configuration list for PBXNativeTarget "CollectionTests" */; + buildPhases = ( + 53A5F8AE17E3BA57000DB6B5 /* Sources */, + 53A5F8AF17E3BA57000DB6B5 /* Frameworks */, + 53A5F8B017E3BA57000DB6B5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 53A5F8B817E3BA57000DB6B5 /* PBXTargetDependency */, + ); + name = CollectionTests; + productName = CollectionTests; + productReference = 53A5F8B217E3BA57000DB6B5 /* CollectionTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 53A5F88917E3BA57000DB6B5 /* Project object */ = { + isa = PBXProject; + attributes = { + CLASSPREFIX = UYL; + LastUpgradeCheck = 1120; + ORGANIZATIONNAME = "Keith Harrison"; + TargetAttributes = { + 53A5F89017E3BA57000DB6B5 = { + DevelopmentTeam = LCC2J94N44; + }; + 53A5F8B117E3BA57000DB6B5 = { + TestTargetID = 53A5F89017E3BA57000DB6B5; + }; + }; + }; + buildConfigurationList = 53A5F88C17E3BA57000DB6B5 /* Build configuration list for PBXProject "Collection" */; + compatibilityVersion = "Xcode 11.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 53A5F88817E3BA57000DB6B5; + productRefGroup = 53A5F89217E3BA57000DB6B5 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 53A5F89017E3BA57000DB6B5 /* Collection */, + 53A5F8B117E3BA57000DB6B5 /* CollectionTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 53A5F88F17E3BA57000DB6B5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 53A5F8AD17E3BA57000DB6B5 /* Images.xcassets in Resources */, + 53A5F89F17E3BA57000DB6B5 /* InfoPlist.strings in Resources */, + 53A5F8A817E3BA57000DB6B5 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 53A5F8B017E3BA57000DB6B5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 53A5F8BE17E3BA57000DB6B5 /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 53A5F88D17E3BA57000DB6B5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 53A5F8A117E3BA57000DB6B5 /* main.m in Sources */, + 53A5F8A517E3BA57000DB6B5 /* UYLAppDelegate.m in Sources */, + 53A5F8CB17E3BFFB000DB6B5 /* UYLSimpleCell.m in Sources */, + 53A5F8AB17E3BA57000DB6B5 /* UYLCollectionViewController.m in Sources */, + 53A5F8CE17E3C692000DB6B5 /* UYLViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 53A5F8AE17E3BA57000DB6B5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 53A5F8C017E3BA57000DB6B5 /* CollectionTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 53A5F8B817E3BA57000DB6B5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 53A5F89017E3BA57000DB6B5 /* Collection */; + targetProxy = 53A5F8B717E3BA57000DB6B5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 53A5F89D17E3BA57000DB6B5 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 53A5F89E17E3BA57000DB6B5 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 53A5F8A617E3BA57000DB6B5 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 53A5F8A717E3BA57000DB6B5 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 53A5F8BC17E3BA57000DB6B5 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 53A5F8BD17E3BA57000DB6B5 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 53A5F8C117E3BA57000DB6B5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + 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; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = 2; + }; + name = Debug; + }; + 53A5F8C217E3BA57000DB6B5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = 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_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_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + 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; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = 2; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 53A5F8C417E3BA57000DB6B5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CODE_SIGN_IDENTITY = "iPhone Developer"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Collection/Collection-Prefix.pch"; + INFOPLIST_FILE = "Collection/Collection-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 53A5F8C517E3BA57000DB6B5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CODE_SIGN_IDENTITY = "iPhone Developer"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Collection/Collection-Prefix.pch"; + INFOPLIST_FILE = "Collection/Collection-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; + 53A5F8C717E3BA57000DB6B5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Collection.app/Collection"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Collection/Collection-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "CollectionTests/CollectionTests-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUNDLE_LOADER)"; + WRAPPER_EXTENSION = xctest; + }; + name = Debug; + }; + 53A5F8C817E3BA57000DB6B5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Collection.app/Collection"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Collection/Collection-Prefix.pch"; + INFOPLIST_FILE = "CollectionTests/CollectionTests-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUNDLE_LOADER)"; + WRAPPER_EXTENSION = xctest; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 53A5F88C17E3BA57000DB6B5 /* Build configuration list for PBXProject "Collection" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 53A5F8C117E3BA57000DB6B5 /* Debug */, + 53A5F8C217E3BA57000DB6B5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 53A5F8C317E3BA57000DB6B5 /* Build configuration list for PBXNativeTarget "Collection" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 53A5F8C417E3BA57000DB6B5 /* Debug */, + 53A5F8C517E3BA57000DB6B5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 53A5F8C617E3BA57000DB6B5 /* Build configuration list for PBXNativeTarget "CollectionTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 53A5F8C717E3BA57000DB6B5 /* Debug */, + 53A5F8C817E3BA57000DB6B5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 53A5F88917E3BA57000DB6B5 /* Project object */; +} diff --git a/Archive/Collection/Collection/Base.lproj/Main.storyboard b/Archive/Collection/Collection/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f255ba7 --- /dev/null +++ b/Archive/Collection/Collection/Base.lproj/Main.storyboard @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Archive/Collection/Collection/Collection-Info.plist b/Archive/Collection/Collection/Collection-Info.plist new file mode 100644 index 0000000..f1c66e4 --- /dev/null +++ b/Archive/Collection/Collection/Collection-Info.plist @@ -0,0 +1,41 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/Archive/Collection/Collection/Collection-Prefix.pch b/Archive/Collection/Collection/Collection-Prefix.pch new file mode 100644 index 0000000..82a2bb4 --- /dev/null +++ b/Archive/Collection/Collection/Collection-Prefix.pch @@ -0,0 +1,16 @@ +// +// Prefix header +// +// The contents of this file are implicitly included at the beginning of every source file. +// + +#import + +#ifndef __IPHONE_5_0 +#warning "This project uses features only available in iOS SDK 5.0 and later." +#endif + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/Collection/Collection/Images.xcassets/AppIcon.appiconset/Contents.json b/Archive/Collection/Collection/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 69% rename from Collection/Collection/Images.xcassets/AppIcon.appiconset/Contents.json rename to Archive/Collection/Collection/Images.xcassets/AppIcon.appiconset/Contents.json index 55b6e38..8279c03 100644 --- a/Collection/Collection/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/Archive/Collection/Collection/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,5 +1,15 @@ { "images" : [ + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, { "size" : "29x29", "idiom" : "ipad", @@ -35,6 +45,16 @@ "idiom" : "ipad", "filename" : "icon-76@2x.png", "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" } ], "info" : { diff --git a/Archive/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-29.png b/Archive/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-29.png new file mode 100644 index 0000000000000000000000000000000000000000..b257b07226846aca036ccff246e65d2e730a5e0f GIT binary patch literal 859 zcmV-h1ElIUx?40wvf6u*VjyPv;fd3Z* zK>ElefQ3kb^j=I=-=i9--XKT_UM7H&IPpD_B^d-s0`PEoVnYZXFGfW%HB#fMzX#}y ztcmlsYknV`SB8M(m$Ofb8uq`5j`DIYxIcz5jav_#MCJ#l5_U9|HJ10E$p0jc5!8X( zE(XC#xBE9NUTg9!$V0_kw^lMmN(!lzcK!TwMaOU^0F2pJb&jSV%K5@=F>w2+*5Lw* z4jHX<-P6*hx4EFID1Ey3bUQ?ngy80mmu43=y7jld<=uLJ!mEjt7vsi~jES%fqSk>j zeUfMOqqf8`d*Y}q!FL_98l7GVh$`F5^Hxur40e;@SGHlslw?njcOVA#90AcO*J_W7 zMRxUh>Gi%{@Q*6X9&4|7ggSD5o$@K5J+68j4*+ zpXogOU?_hn&~0nJbyc^-MY{li<5mZMRu&fEr1@yu`_18@g{j}49lN)3`8))*toVDT z)4|ai!#OZ9%sr1&)o`vgLA5)yJ8%p5yh!nHI&MIs~*#R6L?b zE&vcrvZ3jW*5TqyJ3HcI=1|E%T11aW*Ep~*HE!le&dWd|DTdGQ#*ibHiAQH-q0$#l z(HRs#BJ#<^VaoScG_08rh3Xq7S_!$4>$RrQ@v*oZ?es|ALeDpD?InvLS3qJ~0`vk4 l^Y0T)z+eOe#Gt)Jgg=K>VSjU{PzwM6002ovPDHLkV1n$|p@9GZ literal 0 HcmV?d00001 diff --git a/Archive/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-29@2x.png b/Archive/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7759c83f4b10efb32e7c54af86c6cfd0adc14e64 GIT binary patch literal 2561 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 QR{#J207*qoM6N<$g437vy#N3J literal 0 HcmV?d00001 diff --git a/Archive/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-76@2x.png b/Archive/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-76@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7bdbed3bcd25858e35e136552a11675defee0c45 GIT binary patch literal 17774 zcmV(!K;^%QP)0ssI2m!P+H002cbNkl7|M%iK+@6xS|+CP8)6finW zc$%%X2VvPR(ijoe+R|)ZwltD$4JdR>j z=iar)R<^XA{rl_3vt1!;>25vShx2N-EzHnktf|Imylt5f6o z+7!+3Y(2w)+VtkE*%Qs_wVfqNXGq&#Ha*)Ky;->v-dZETRtAdODMn#5+SEX{UK?#I zvE|*C>9yU{Sl*gb%{INdyIzfLy_$9Q*23cQZhC9KfBi5^r)Tqp2%JUhT1&7A+S93R zywOgUj=uKvS$J-}-MzZ@yzQ!~9q+p2?Cq_oHa4YYcNJ@`wARREgRo5+C2g~LS~9lj zwUbS(*RUm=CA6)#tw;avb>ooYdc(rYmchqY)Sv|WEquRD=05Qz$g}05k zUc2SZMvRJSu?u_NTHE4UTMsyCrybD=pc8kus8-x2?qDRNHE&x82kF ztV?dZ8kVk68^qf7nIHz-GEfB3Y~| za&p=H78^x-eSDYk(qo1Oo=NuVyuTn7m?U3vRrj{uK07eYTZxc_!9ik=?1SO-2|!*a zGRu4ENIp3`07g$LHEFuGflQ^6oUi&}DMTfug&ff|M1ju0($FU4zE;5*>kaiL3$@kd z2$OAN!Y&m1G8+NGayEALJAKqG1PYUO_r} zq16oDeSLhZLl|;dQyWm4&--A-B<7MgNJ&m#m+=H3Ipp8GfD%>_YSUVaQxCMwjtM4=$Jd|eyT=cHdgUO@~Y;HXSQvCkrtP>UEVypq5D)L?5l(NKmk;cd!?j) z{ZV_D2H$Kprn6%H&~gP_dZCsFw5-oL@*7`~gPIzXqb>gCKf$YnOr4T&?8@HP0D{6r z%Ry6s336mOQdO4Rqd}-9@_$N5U8(JR-i?35Sm=8JZ|}&7q@3oV z;UTJhN&ofZZ=Jw28XPmFq_Pg;r=q%boPcOIlsQdEquV{J4?YWey0l8WJcp?B@KP&p zIo8xMhyob;5<9L$l@4CJS~3i;qWZ8rGhJ$gp*T(0h%S<^9ho^90}W(xBS(>{8uf5s z(ztaFQpWNw-3NNGs`3V;5BMOVb2aiWxSUX@d_k!aH{KIk&oM&R2cBj3-b|des856x zp0g37%u7m9$Gf!s9^v}HM52Lmdxp~IRl;3bnA4$pzJk)vGnB@u zmW{1?(^1l~fV20;G8DZ=xs3Ie1_#GF zOuv#r)&XJfwUS2pj|`DTV^b47IUzW=sw%2BnoV~?CZtz_-PtLzlxRBK$4MrS zv~v=b#!FDKv1nwU%t9i_ceQ46Q{SVteU8*+sjM}->Dlr;90%;f)QWC8@iOb=aAjJA z;d_lMiO~ngHM~ClkjvJXNulJ-irJRS@orvDbaMer1Ys2--Ee{o&KikeD32J6FXch- zW06QFI7iQ@3yzm};Q~-W$bH8w!|kI; z&hO5+_`Fh{+c0bP{iQI@s6)_{r&y?4VCMrz88ikefta-;Vgfnech|ddRG3z$W0jzw zU6cZbbDEp+T=B&TL%cMMpr;jGudxSDAl2ZW4+u;{SnL#JaZhZ#Pf?0VX6^X)i4`1pbj#a$G3W>b{t6`+UUnlO$(o>-5 z=fp%$iw&z4IVN0MQpb#>(5?|UHkG;<8O;tiA^gdUbk?F+9xf4*6jO?GMdqH3q<(VY zKA#==`v4j^!tCJ1#x;)OA+>g zK9DNe_}2LSd*qiZghUS7sHDn{q&=FXen@X-tvVXF7 zCQy1+RleWnB+NrX0thJDpoGXEf{GGoF$9nVZ6JUkNdOU?kVX+uwCy~2kB2@HwNcv! zR0N`pGIh(K$Pg5y9RnI91eru6p{hc{l&XZB`zrVT_ivxdTKb~U>lNZzhE-W9zxwJs z_w2Lxf7n~6hu}jNz`4?mLoD&XGy#^y!&jqNDt^VCq(*eR(oAjF*|%+X%IChJar|p ze3ri5qc{bcK3DzKvu!dw2lT|{NSstb!lJ230WBdwA-V-_R-czb9YD3Jhf|lc16xf^ zwB)AgJ~G9)mNc|EkB**j!CP-T_WE76SQN+xuNFZLLOU579qB}5LDmFf9fc3y=EALp zVgtC8V?|=Dts|AnZHO<0`khS{)tpNzH6Ir2V1MtK-J6YcxI1;)EvGLc@kzY0OJ4|= zLiFOaMXuCvnyISDbqqw9kf!|soQyI+8EMF5puk=7p|AB=Ouu}OD}J-()a@Rgb;zy$ z;cx@N2MQDzTBLL_I=2OrBRC{*Rg#baa?GOkCx8LCaM>vF^a`5LZ4RgEtw?*7Q!Ccf zuhn=J2p?)~*4lffBjv=8h;#w&L^{QJ77E4%5Zu3!!Hc?t0`sgfLo^Y4LwAO7W(Zm% z9+8-@oQNv~m7TV+G-mfbzTr+^dV6~b+nvW>{mL;3SeTKMD7lN z5knCZ*&tO2OtwG^gW*+0;m6W-0U>qk!0=3@sACvE*`cD`oyh+MFRO^;ID__uC!UC! z3Ri)u!8QqRuLSOPAsxwJb(3)doD&saC3u(Pt`J;2?P-EE<99)K$@UY}8=k@sT>Zwc z&v})#>s`D2_RDYkiGH`p1B@FYZhlJt#18@twjxeAG)11CQ8Y9{Lv;^wwEWW17V2Ot zm-DPmL5NEkPAteN?NrdiEkt)lg~((*$-piOKgA%tJ&P~W;xI)jVSX@ymGVk2iiAJ)Iku$ zt<|ws4iPt~cj_%!HO(bN_`%kL>G`F0tvX9o2@SUdV3JM*7i$R}YU$FJOabEhr=^1% zX$B2ii&G7PNe{aaJJr@Y{QAMva<0>)pcI=Y(E_JGWh?AjML&2@M~398okq_jn3)zz zxva|F^QBMRu*>IuyuDTHq}}g2bFVo(qoM}Ty%_;Fp-v=O2BT37^ zDvsE4mmskqR)R#3kk;@Z+$XWlMS6;P{k{J~_q@Wbzh#|J$;RQSTbx%Xlzg(T4y^ih zT?<&h`&!&*x{V~QFo)=i-@#F2XEd39g$QS^u?yrq$)4z6bDJ+rePUn@tJa2VEua6P z%SWxbJfsRrVw_wCISwY?Z}%uSxbP_EizDtxE%Y#V@PKj{a##!iR0_&81W<6>>LnaY zQO*Qnm3RzRZsh5Tg;8(^ClG>qApN*)xsHvJB`{stcTh9~EM@eVjw&OqFytA=8f(2-e6e2t=!2g@k6 zFtfxtG0}?L$^xgq|?b03uq1R>9kot(M3=5CrL0?rMvYzdC2z6Rvra{gHL<{>{otSB@a|qnzMw@^sxwlVE>MoShV(D&>`Vf;1~2S#4O!Nf%m?@LKG9 zdz5$+jf4UXmt`}U?98-M5+H<9P%I7*GK#g5DT!h-r?6BRq0$7Ch7Iro8`6@{CL_`XFO*dJMg)#R@~aJh>0@X(1y@18&jWRsjK zUA#6ltl9%r4*~?kh?0`NLy#wTCnSWTcplfg?plLcN>_9WmK7^V1emA8Q*LrrG%`=(TpcKJBNat9NH-eys8c( z@LV=`tLay~#s1{Fc{0u zE$|@CO7YbvjK{fYAF6gc1hcpM8%{#~WC_ZZt~D6pl0|*MWh)bgGH)=>T=|Yv7osBR zC>2zv{)9n;D-S@KnXYFUJv96x}y-8a=GDLsU1h`vs65)@7plzs?ENHGk z^&w*#s{uByVsz=~HA02cm?2u~jHR7%Aq#}nwJrt`nNb?({Y3W-%C_{~o+C<|AZ30P zmt_|X0#h!^jtzrH^K=yZQveibnBhjt5G8&MYbtn`lvTz_2UXfon2UL_HTmKxH$Sk2 zt;U+T)gP{%ajj4g&{3?Gq|forArNZuIK)LWR7m)>k1$m{7Sfnl z=uyB+ji{-@Y-#Vu(%^zdgAv5`qJ6KVO@=ca2|W@~R~}We6AMufXorp~_@!yvy{?eP zOS&}bQ=S@tT-Y^B_VY(K-s6IUY_->|$6dM0WOd6poinnT3p!JnH$siLha|%_6`Nnjgfp97ZMs_ppihZv5&DOTsYwC6n z%$jM+6K5Y?7PUkz@u}A>sipmNZGmcl=14K@j!!}N$L&7XDG4?z%fID8s`Pl zouiNjdOikeAlx7j8VnuMb{M(7v$=dfr`K&^-0)&K;lT7KivA`V3gD^peHVz-WW_Q$ zw+yHn%>B2EHhRsM4=atW_UgE;OSc)b*gR9Sf<;N!0(d>pw;o$K?@GD^Cp7e2N36D#e$4wfU8+R(*3Yyv@maJAp zsrp1W4)cc5q6vK-V#PpXr3uo$i=@zof8e`s{`#C(+n>4Kwe#Iye)|vg)4E7$QT|nX z3Ix=;#gz0RQ5L3!v;vE&KGN*Ei<%+}9?a3s0??q1k4(K#TC04>jdnyuT7U1U7A0pW zQsqX%{UdG|&>r#y@}C|ZMWPO9E~+ok85VY_7#WB=n-v`WFovtL7%1T=#ln-~TY*eeSQ7L| zXUmS~9-y6jj=WzF2Y2j1@5!q?A)(V$iGh8nlErG@D!Qdm=&8n}p^r{2Z;tvOb~2I! zI-Fo@5auDX12;JZO1nOO({AV7wzK_3>!b;D&fNRQQknVgbZ9G3b~IH`vKq1y9%mQS zf#Lu_I+yPz?oc6Xb5R^uhH1W{Z-p?lZV@Jh45j{_lOtJ)q#Lzg#V~lA3N<^x_!}(< zQXzXQ36)7k_)im=$X8*nRb`suGe0#RMl`7WU%C|S@qx9*ec{L_2G+DcZ^3OXn}6a( zqu1*9nigu(Q%zAFblp*wB3(nukoRO>7$aT4h|a%N;P~yJ2n2>EKBMu%j3X6lXs<*i z$BzCa{XHKUA|N2ng-bW|+Gu&mrhyDaU1k^el;T~m@Yo@mG%rZ$BO`yQ#5_X(RB`I> zp;A-C^(d9jzIB&R-n5%NhxI=v{?{pc{M;NS?M{JfyOT+e8{FGd%?Z%SVno_o&C7Ue}((+H}2V?m6MY zb=D|J^hFDZ>D+gefUX7-7TyagA=DeSE1bIn&1eSXQ2M8)B*H(@7)w{9TiKaGollkJ zjd%KJv(^u19>Q#1@lY{|i8R$3zVJq=Z07t{iW~Sjgz&Ip2*iuhTL+>+Cdp+io*1Q% zCS`j2(O&S&9ZtArqCJ--ZtLdbcAgs+UI7}E9AxRLH^Ws_!gVS}xh_Rfw#DV;zb&>` z-ybj(C9aSn1|C|qHBkRP=OFs~PUKR?^QKRjG@~hz=(sNxQihaAYC^f@U946VHMkJF ze^C0O?m})ecQ(vuC{)6RZCGPH05*;7@TDW~e|(fZ=e6}lOXhyy;t^>@qeP4Q!DP0i zF9K+Z7IH@rM(u^DXV3XvF{{=rO%ZmES0?9RX31*BXS!ZSuMA~@)^wonL+)gJ(DNuc9U$QOx#Wh;%u z6kU)as6ar|TBUiOxTiqs}h&F6k4sKszM? zRaXI=Ba)G%3FjX%XThfSTo>HdW49moO%a6pQA&6a7?TblR_xxYa!#e{A*66uX+~!c zO-28*5_0-bw8d=#q9BZ=5;dhn2AukPKA5ta1fp&i`KS^c#4KREZn0x5{_cU73I^pe z(sh==49p7rRzhjJs1q$eI^B!ic>gQ*pLMW3uj`s=SM0s@gN^HJljwmK4DV{h+_Lbc zlx*UTb!ur-Q`9{tTsD+Ykkd0i9# z?%``^eA_B|oB+Zt7*-RI94%!lDCcz@qB06%vUchNri9~<23q8lbo7jiD@=NRBE<#) z_C#_70}bDg;gI(q{xYs&9eMy75;bjy2-(o~LBHvG#C(xJ1{H(+TYs@&)7{UXVgC*5 z$H!i>%jOHsP~93(SXDJ<5>Q`QHE=o8=7#4YS3qY|SHswA8|9LYykes@a{xlPC-6<_ zKAwTz<5MGWs!D|9?%Rd;k5={|s}CSrKzltHafA7(A*)dZf2eMGVjbi^yXTx*wEze1#T* zSghJyXb9P-GleQemh~JTO;S`(s41@ggrLfgyGmH`z6H`sPeXXa)KQzpB9H`%A#O*G z4j)1J)dkgpr`Ma`H|CzcF@yh|-#d1G-$oBC9;JZue6N(6twukw?byC;Ht8ETX7RRT z7Hzvp-zMumopDiy12iHA>}cI%5`+)KOOrVTLU|l!<<_HS;Br;wqLa>5R%Os#*82X& zYK|%b0_brE(Sw*$-b3pn&Wn-~yK;i!2rj_5R( z<}K-8%l^NvQELy38@p)S*uHUNA0PZ;+p)c`8na~05i9DJ7+_Frr}-Y1ghJnp9X<^a83H*gwhe+e%st79IzpE}Pvn zdEry*&hOi}J!%{Mwr|Y5-mwoY8C4n^{wpVY#i%9YH}2a;8@y=SjTddY{!_V*mLzzQ zyi(Q)a0vr6GJI|sD!9NBoNwU1k@k3{`09NYi4Z!3%BhC&HA*S=6u2h7b`7np9|%YK zpB;JMQ|k{NvUxol-`h84 z@PG6A#{6!{=+fAWZRKPyAGNsM)J20EJa~e~jp^Hby(gO_b4QMV3GbCVxX!|wN%2Cz zR&;c};r%`D;SmUXGGc)+^3|sk*pI7D=l%Cf)}MamL3cg2$*?|Z!{FdHD|Utq@=b z3H3B>a7W>{=5BY)RR;`%Ksro=?N<-D>WCfhc9^zQozW`3Vbv}fuxOzr34>T!Sx3HG z|8L(VR}D$Mr)v@Nh8hpZIQk%lH2lIlc6#5{Qz-TRwkT4+vi~(l?fffig8c|hp}fFw zyMd{~xS)<1&_KH=Ia_P15j*ORY3 z?)7u5Snh~%LY>+cJ5C1e3MoDSJWni~xA-ZFtIh)^xt}61hRJ1p+1ZN!tS+Uvk zWVLEL_h-9)TM=EK*Q;887D!Vsb$+i3L4(U6wQ+Gnwyb=w}N&z@*6;x%*6 zn@`*0RyX)&IXoSZ&n1_({Pqh|P#7Ml7?9cVX#otV-*?AH9>w$xVkh$_94OX#q>rjl zdHGqWQ*oRWT;yH4^v|;=efrit>_xdgy8DmLn0S->2BJP_tRm>5(;XR&HWeGL!f$4t zNwhiWke#CyYw-q294f}rnzjm`1**ft}w|{!? z??>P7ZV(T1PEvLSY>5Vov=9IiFsymWPi3PfCg>xV^&Y9TNIp_|%!a1D^36&R4iqf0 zq~uYI+LKVv8BH$C4}EX)zy5qzd(o`-zu~8!f9tiLWM+wQhWHYd>G1JN{z_|xC{OAs z$39LWa@&>3&Wz+QJY<%po0A3RLcFNPko7xwIpE+TQC`<+CR}Q%G-bpGuHFA@b6#gJ zf_2Q!zxdMRYx0N{P0>A9HP($?AW+f=i#bU8_G(U%{QoV#)U_On!Bxw8W`xSk8aniY z9?|9)aL45vsOH^0sGHiAx-q-Yof^4mR-|LEK4{jjcCx?fHEqW`&VT!rIRmS~MrBVb zA!+HzR0-@6S#~rg#g0R!eDl?~F!rX@NUF&qJ=j(p0ZfPdgvlo3Hkuq3P^` zM%IgzF2Q}aN$(cleQ!&nr(01L{S!?DF#0!+5!7^Z z*n9$IqvJtZ_SlSM^}M_2shc}v4J&e6+J?z|r>9FjiyD=ZA^z}W%3JL%Ut!ZOKm0%L zdA0r3tpmp2J?r30*T@Z%7NxDIXU$SWo4vXbaD}-tuw8@rfGT4bSyoQ z2rFe0+pkcLg0@sGj5R$#yW1sH)-o>ERNZIDxcxuRt{8dfciws3z2oe!XieT`{=klSq-i)mEv`=#AC}u5g)#X^q`wbO^eV5(gLmX~8`5$DtX#2C8>~ia zb^jcUt%1j@lOhU`6rD&**jZ#z9W)qEy>$8w_rKEqD%Rdx-*?5~m#mdnv{zxtt|N6F zlxLzHAmgY`QMWjyu8sy66EKi>=Z=tM3|;3Q!q+v>djyn}lbn`uWO)lrrCqtRA`d;2 z63UmlFM3mO@kqj8T;A~@HqR^@dBDFPdCNmv*$aHV`4tcR=iwKvy~gtP3Q|(925)Xv zr&(aPVThZ_R(1L5jv`gX;pLWE^;giQ>GTcs9FdU274z#A)0X}oZA2NzLhB{Q8moUO z3NNKPf?@>|iAkXq!jsF_c>An(-TwP6?FGAbd)dR+O#9lpBbVotXvd&t6%vZeX78=Z zv3vmSz*~e8M{}Nl&g8#P%vHGcakFW8&pW$~L71-o>l%xyD#PDa=>P*X)s73IltUKg z7p9DIDwl-L>-v@b>xqH2C(kf~4Be1%-c121OWu zItJlW;|3MwE6lAlb!QN!l8QTSH}Z(0V@od?=oO4K5l1x|8A7=p{)nnaRsn>(^6Q2& zp=fi9x0YVizxIB!j=f{S=JtYGuifm??@#;c=yjJWjgc3R)*3$T7J^AUAvJ=R?54JX z-W)y4KgArGth^QgHN*nBSSwIILY+t*MN-|G1c+l!Mb1a-w9@6uxzWFxmW(;U*%VtrfpgkV&~}B`Oi%f`5wOv2F>F8% z4q@+=nN>ia(z}JvY_Ru5$IkED#D@JEH@4@-8RxxZy{8(^hbnpDqg4}-;%(~i<9FKkUU94W9nBZ3R`>BUWWTH0HZAWtth0YNj*23AC#a?l16P`oLEM!V8~r$nyJCeu zkQ|8|WeSbq!`D?narNjEqxZV#xceU;W5aRbQ(tt`k>_o({u52oT?8EI!8B|X?3mR1 zdXTaH2vUtMtvb7c+B@DcYi2cL^Hv#Sxf0nq%s6n3scMLpN*e#D1MF>@GMWN)omH>G z=<8(eSaHWLA~3Zokk(Soz_QVi%Lb*)lP-GiLrX^6uv{-6z4*o>zw+`87ds%@i0yTM zb7tR^;OUbhz4s#9Omwkh(@+{z2|Ne7gROCn38!fH^Hy%8HxbjAwBocQgZtZCFj8G5 z!v5Yxb*jHpJ#fHOfzoiYQlfM>XyvPmwxPr&jNrzIcW_Yk9#jxcrE3vQ>n$1dHQ{0}HU@iK`sLjMc&mrE{N~8x8 zSdcrx;L2N7TOi+3Gijo&GGj*QSYaG}X}ob$%mY^q3stR}IURKA(bwEN>`?Xnx4HYu z!!9hU+N+ki=m+T{p{iNsvgfniOp6j8ah`m-!>^KKfP*T7VPo(#rViOTRJIX48>r;; zw|ZP<2kC=^JG#qVUsU!}ar&v_EP~83e@?Q#KxpNN9sk9TKCpPqFidmi9ei!9}&>)NwKZ*06pj=Iv7t)Dz`%P6%q2^&Db#OryyN&VPxPxnvtv z_IgPgc>~mG%OJ&^#F8kB&I6zb*cxcKxOBycjXrf&X@;ZVf6+%jKIoJayww%Kw8D+H z@(rDJIbz5%a^vVJvlGn%zD9p8#Lo@pfNY!w`f9aC*Mk$sJTNz$@8Ht|4BBQm`8{LmX!v24mLCC(h2a9gkTTq5>=>Cum|k)4m%+D z(C&KnkmG5DGpgk z8c43Yl5+?|K&uz(keRnkKI_(fY*?<3zxn!^Z~mS)(q)#LJ{M)Ag$LXkmCvBr9`a0@ zW2fD%EitlGQ}rj~v$vufh;_OdbBW_h(ELEr#nI-_VwMqnnhou92?|7ia)HJ5P{hch zg&U~oQ5!5w>!hseVr%*E%Z|Eo-fL`FuBqdH^{qoMG-jz1Uzzb9@sipiAaeZ&T~(!eqyyLxR4H@uQ_43x%@f2f=VxS5sJwpje3SB!9 zQvc-VQd_W!ZWVp{N)_D!21aYNw>KyEN z?XyiD{prsxUy*HCu0cu8;!{svBd_qVl*Rbg9|WSRDi<|!P!fBHLa|@ergZn|UN+%ad)r7_N+ts~#2 zEmB%Smo=|py%>#|*6_ltm@ZIMH%S=X(3M#tS2Je|GCe0$ddLTuue@i+!!A44hVi=e zkgp!J?VTQ##0)AvQII1|Bi505=&B4`4d^8~qEG>#xS7e5H4fzI6+i_UBI4suRh{y7 zW4M&>mXqV=mjEv!>q9q4jG^F1{m0SYn)`Yi#_OFs{QMgSd>x5uo!udAQLkJ8QUJ{e zi*fwGXbYgNEBQ$=J%ETJoG@^6<(>PoR*7+#p;q{xQbQ zB2gyS$!*0{O2ZKU=%csm1*hG)@MXhWs`LAw9QUcz6b#$K#`OzZG~1K}hbh_6`)t2* zREI2eLfUU7Mq(cqGE_H%kk?~b@8ncrMJc$&+Mke1XUcM-lMf&42obH~JRlNDxkg*2 znAfjaP`ZCTB^ojMQ=eP<>>4(V*E%DYFFy4{ITvjAnY0GBH>Sb)zeWQpgCojWvZ%mSVoK!1JWdWUTV?p8fnYE){M_!3p6H$EjOeJ)65cO?-XG6VU4c@2JZ% zNmcPgJm0@$=>ccz0 z2N}Pzj@;L%2dh?uXx{x{2|_HJ(X_rhRmH+J8B*2`Y9gt_P*CMuJT&M5KXd!OAHVTn z8}{o{dtdh9H(ehH2?$I`fh7*;wxcv1^)8}7txuHWsgp{KmW~1y=sJ>I$52algGlR- z?Ag05UVX4c%cF4ZNvBm$4`n=JP6aBbU8NMBub8$4GvF6SU9gaPyTLiV=etLLv$1jFu*}t|!jw5SWjR)&9aiQwb<5 zsmTN?0BbeO?o+R4I;6qSI!VI)TESsn%A?LilNwwMg}m|}#)H(u45FZ-zjE{~jS8C4 zo_~MgCw}_K*7kg?Ek`|m`oznpZ~xP#1>(Os_l+}WAN25&=SOw$#+TjqqodCvqhnGE zV6)Valop|=izW?}b17wcy}e;;scJ`a&x}JpDtpLjJN9E@g*wQ;8aiTl#wc90jqL_tES>Wx_QddeaZq%+Ds*hUJv{ zm#^`;pY410ZBqu_CeOJ!_R^k{j|ae}u&PxaI&~sAl&Q-b7jyy7G_#6T^cQagk#ht_ zz>^x9FL~u1IZ;Ab-I2;%Bcc)wK$@~O?eT`bGSI**VG+F`Oeb3xxOfonGoW@C`kb5J zKQU&jFPv@9VT~M7j@jvlGxxk=<8_}FkVO&Tyh86Y8=U^b1HX31p3govT>ilmPuhI_ z#YtjuZCwx*AnGn6uEjI#Iz+N^3LH8u0U3k&C0drRBZk+vd*5ZPdp15_$&lKi0CQ+G z;lFJ-*W1S3an@d!j@x(vVqo{| zwue$qQzc>ZdpA4n#>1|j|62P?*LBlAv-j4&(G^3;G$=>KTa;-HVKGM0nyZ}*M%E>H z*_2*t=#MIIL3m{PoiJo2ME7RLhcu_vm>pDN&I)4(m46O}`eO!|0C6Pn5p;5sY-2X^R0<5zZ*|jWW;oa>{tegbahDk)L-Ro}lktJNl5e2@$SO3e?qt#1hK>Vf4c#{b;Z!VK*7Ns@4a%?t zz-6yjK@+MBTWyAF}mwWx08O@^8-*VaX?QcuT zhfvU5kvqlj|HK%es;NaO>6>>=_~h(EfB$FZLC3xB<}XeDx>df&!krmIi)dQTIB?Yk zdeB*Jenl?qVsdrdiIfse7sI(*K5~!f!5S^;>sFNT`oWJmX+ffs8da{`u(~r#hu){m zl}kK-WdtM9 z82!gV7a%Y}+Da+gyvqdibdBFw@*SeZi}qRGX!(4?3s9rP+!vsbJfYoPw#7OB+Vji? ztC!K-Jo7Ez*>s(!Y8Bd0>x6D|y*;H>6u5XaqVh?W7Cy7#89$u*wLA7&ojhohb)S6X z!|zWp84<-H6A3}){x9ql=q5ukPZ{D{bUePmf_D_!m!&%e};tevW6E=}|ct#2z6Vr~- z6r%wNe1c*(^3=fLAYn+&9d{I-mJ|OtjMzaVZ6J9< z)D|^%R8BQXr>@3GjC7D9@m#uMjnDsN%4dFj(36e_u};|ax^woqP*Q%E`a1?5V>OT{ z*7yX`gB&bGXqd(cqrorIMAFim2%+G39(b^_2mh#O^)C$YZz7h&n0ii57*hD~ zqSQC*SvvZR+3)!3os;T3XrEW!dF|n62Kvw~&^jJr;B@4KAlsxgWQesSgp-2!(8Tgb zW$K{$>)m9GPDHwJBwD-y4?}oYB_Shv5=s2WV;{k6MAA#fu1P*yo%?Tt5S?c;#EaiLBb%@{n?}29Cq0$XS`+B^c{ZK?hMTg+$CSVBvJ_f{EL6omS{Gu zX)aHZgG!eMY*(xP9zrQ zCdIDQ;cOnR$zo~#PspixKrc+a-f*-ayogO(e!SN8?4nov20|lZ*?b@`+h<&}rSKSu zXCu}}spE!v3<-Q}>M*hJ$JN@6X?tizl9H|1htKI+>MhHf*V$p(D@cz#<$s>^1NNs<795H{ix;s7J zs~Bxyi)0%64SbK2I#oMJ(ZKYaNe z;G440|4?h+vzhuraZ{<_-YjFOU{1^M?A2C2uUWmLQWoRJK$J6q&tlD$(qo>uNhYJ# z*-=AoN!G*{*L_UcOKdkhyb#MHetrB;Rkq&WQ|5*v9#Mp_h%{{uR0eD?GiDjV^WPf& z?)Iwn_Cd zQa|RpB>N*+84(O7J$l&{XeVFLYsAUlL?O?d9k>g zq(Vg7{GeW4VdhwBK(*2LCtc5cM>_78x5zY3a_1U#wsVNeSKl_`NH0DFi?6TGznvVA z6N4eIuAZsy|d3dYY-nb_XjP=nfb;<=r zDfGE^Ba@&$Xt?{hHmxgAXIX1?qS0oDMIDe6P%5haAjg4igx7GHv56o1=)OPybFCq7 zj#yfnmPX7o2=W-#soCvVsV{x}N0?3$97U?g`&%lJ?jUe~RNVf7S{GW&Ru0Ly||%2m&!v~k|+ z(g#0@53^26gU^2c*4B>6`TqRt!Y)czu_F{)I_TzZtm=(1a9HYj`677C8F_K&gySgjImLl0!yKeQ~2(GO{N0Ma~FYUrCk zFj<*iMo9rjjxNzwGe;wvj^FoNGwVi&b;R9}EcVX3gZtdV@R#`NKQiE6REqx{)==Ke z;o+v0ha8ZULI-8}o3msFChN%`B0X6ZQY>A1p7^R5_?*be*sZM$uJ?8X6R;9Twzz2U zC1_^&%&^h%3O?Ks?jN(xS2A}#G|2U@{LC{u#9DB{D%m-rM& z7x+Pu5KS5?D@TCEIl;oyP;2&*w1vW~H=zn;5UkWw9yhj2nCUH`y=sg}9Oq<4J5TmA z1_Qj+k$(b0`ugK9Ah=Ooj#BNU5d=RSLeK|l1MKsDLzO)}2IKf-37RH8(FO1rWKH9r zH>i1tgUvM9TN>I@l$Dwxa!IH;JI!Ybo;2SOBf^7bEk1+^ZU1*xNvVRuKJiPz&!BN} zpOADVH0&C0iTGEL6%n&cb)@3W(B?eHx=LBGO=wuEz(8!M$a!4!T6b*l{(996zhu$Z z>64qwkc%kAS$CvAFQJxy2hUsCw8Y2uTvMv75EqcS`vMi_s)UvEYkhtEdGHjz=u)aQ zZmKTuVlA>p-J8pjm{+o+Httt#Nsi!YvGnvV0hu8ocZ1uY=*YGLQ{OgnyP7pb;+@x9 ziC}ZqE&IEeTa91WP04p4H!xJNvss|o6O|Q&UY%_^K#a*>RVrmQz_rTZy(A-G9Bb4G z9^$Ys*7wJs?VX_BYSKP0RsI_t14tZ@rQV!0Fh*gWrfi`p@VaE~rj|20ziUb5q#4WW z!6M{7M3-F`Eqn*A32lbOI^Gnq<|fxQ-55mBVY*Mbooa4>(@Qm~_fPG&6uaq#3_q{y z$MTF`y(;ahQyS}CfcK3h@C^0+`ET2#86xBJAO2sFyKkF6?&k|QpY1 z#83X}yTCjdoOeL|NN69?z~n+}^y@gZM4Vcy`3I0<$IJzVxB~g6^6j`84!S0ywPRdr zj_MVP+dYCDL!L|pE0;@#F63w%p=nv~fVrUhI;u9-`mbYhp()i8h9ea1Py@2xv}{Sp z3p2!gc=&$1`EHo#NTMDzNxyB@t_Mx9J%d?GG)%TDY1&OAGv3X+-I+?j%e%fL;*a^Z z25b3kLG~uya1jk|Mc<)LaG(&FzQsvcbz+D#u_fIOprCv-M*b8+=7)TL{(k#4)cAcr z=cVK3T+LqyZ*Oz5_pL7bf5I?-51>j5`dfUvMmzpl*v>xtoq!;Vy^hHH%f}_bO+_)_ zQZdssREJ<>5LTJ&I$a}D1>-$|q}nqFg}401cRC2`y!Z}E^@Ll!S(!keHzY13E3fs8 zF#rDe{XCVP4G-i9@U_v_?`-a+6_?`=JED?ivRqBN1Zv)ExNfx{E-He)l|oCHavM|z zhs~3BUrw+V%KfLi7=fJEa(MCXVd=%x2|A`1%1qLAfS0s;zIuB;1MDc|pmLNR_vMHn z+cBY230z_ghEb3Gcwc|~4suc7Cb{PNl;j8eo$9mX5y8ar8Ob-@KX#PhH29Ky%DUHo z&4=&Z8A*cOHRS8C5(LP^LaRg4;9kLoEaJgdj_yah;@eJHmQSpif9tNMFC-S@{otA`jn z370!z+g7i2YUCN~X7{VE^Ya1nf1p?!qR6}6^4n)Dz*dVA5040TAnu62o+2Afo%EB( z!Yp%`fjEIDnaG(8$p6p39J7-R=U&tVy7NQE0XW;aks+VuXQQ}FIrdH+a<)%<(X^!C z9@I_OzCZrSbw2cBTCUQNJS87lc6ZO~ zq$feRs~A^mg8b*tWu(Yszw42e@rp{tBfCyc?It>`bg2t_m~yo#e-0ngG-On3%O2%l zak#R4zh8YdbnN(aR_vb^qiZ=b6-Cn1=viNFN_~C&R+m6}IfI-bl)&;jvN*xOVwO!m z#Mxe*>zqBt?6ACY%+;5daE0ChqN`FUQm;>)^(SZRqXyWQMd?kI$7k$C@Ti?mw0%3L z3_k9$g5aE^I4N<@G3zv7+yN$oxsuBwcS28DQpeMD*QG}2A*yR0S}IdN=kV6v))2qg zBHF(ox_@;3tX68DT?X#Kl!PkW<)quC@b1dnn5Icv??np3AWMf?hE(<5IiHM}-aVNs zFb?Ek?fW(=FAg@e2GVHTtJVmA33@tC)td5X(AN<8-tw|~&Do=8&z>?J$th)>ABC<@ z%jvm;k@G!WuZgMHda)6MUq_rZMt%SB+i6zqnkSEF_tlhoi8mV=C-dpG;23*kK`Ay2~AQTqcrrw$-4ftip?Ah-*}jo)6wp2h?@Sk$Z8Ryv;Lb=jser zlzIB2ubAi3FdJVxgSm(}IJCZD$*;3PyC5Vrb3tG?afzP-uNBDo_?>ij#FE!t^%?kY z*m@O@DM7EV&%YnbzOB=BqQsYqh|?-jwD?&a(q0G?7$lV2k$AaeQ2}!TALV9swlP9> zfMLvI&e`2u`>yxqNhk>#aecE!OE>6jjFeXKt2uo?YITLpi$(UXd?yk@s%EzMuOg@i z+)>qFMibHd9ZRvDHMC-`Q74m9c|B%c5P literal 0 HcmV?d00001 diff --git a/Archive/Collection/Collection/Images.xcassets/Contents.json b/Archive/Collection/Collection/Images.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/Archive/Collection/Collection/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Contents.json b/Archive/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Contents.json similarity index 100% rename from Collection/Collection/Images.xcassets/LaunchImage.launchimage/Contents.json rename to Archive/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Contents.json index 2d612de..bc976a6 100644 --- a/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Contents.json +++ b/Archive/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Contents.json @@ -3,33 +3,33 @@ { "orientation" : "portrait", "idiom" : "ipad", + "filename" : "Default-Portrait~ipad.png", "extent" : "full-screen", "minimum-system-version" : "7.0", - "filename" : "Default-Portrait~ipad.png", "scale" : "1x" }, { "orientation" : "landscape", "idiom" : "ipad", + "filename" : "Default-Landscape~ipad.png", "extent" : "full-screen", "minimum-system-version" : "7.0", - "filename" : "Default-Landscape~ipad.png", "scale" : "1x" }, { "orientation" : "portrait", "idiom" : "ipad", + "filename" : "Default-Portrait@2x~ipad.png", "extent" : "full-screen", "minimum-system-version" : "7.0", - "filename" : "Default-Portrait@2x~ipad.png", "scale" : "2x" }, { "orientation" : "landscape", "idiom" : "ipad", + "filename" : "Default-Landscape@2x~ipad.png", "extent" : "full-screen", "minimum-system-version" : "7.0", - "filename" : "Default-Landscape@2x~ipad.png", "scale" : "2x" } ], diff --git a/Archive/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png b/Archive/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..534be4d6ec459e583ea037755f4bf174f974aa73 GIT binary patch literal 1001 zcmeAS@N?(olHy`uVBq!ia0y~y-~ck&7?_xW)ckJ_|9}){fKQ0)|NsAg{P?kH)22=b zWl07G=GmSujv*C{Z!aiC=dgEakt!T9!up<{9 literal 0 HcmV?d00001 diff --git a/Archive/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png b/Archive/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..30876cb6121ccadd832a619951d6ef1e748ae39a GIT binary patch literal 1784 zcmeAS@N?(olHy`uVBq!ia0y~yU;{Ea7+9Erl+gdDtUyXMz$e7@|Ns9#e*D<9Y18-b z-`~G~|KY=j0|yRF_PwzHsAHa|i(^Oyby7{7 z4GaoEGnueZAGBE*7#$b{7?7xj%R2=U?#|;v7e`e^77xuPvdqA6FUXXJTLNoh<^)?fw-QoelF{r5}E)bC`9Z4 literal 0 HcmV?d00001 diff --git a/Archive/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png b/Archive/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..e18280803869e944264c47643ba389bd704d2431 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0y~yUTNn zBm)B@i>HfYNX4zU=N&m27&urqXlHr`OC6lAki$EzN{@*&kiB3&H_)D;2E^I+w-prb S65442a=E9gpUXO@geCyyRUyRy literal 0 HcmV?d00001 diff --git a/Archive/Collection/Collection/UYLAppDelegate.h b/Archive/Collection/Collection/UYLAppDelegate.h new file mode 100644 index 0000000..7a6a4ae --- /dev/null +++ b/Archive/Collection/Collection/UYLAppDelegate.h @@ -0,0 +1,39 @@ +// +// UYLAppDelegate.h +// Collection +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2013 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + +@interface UYLAppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + +@end diff --git a/Archive/Collection/Collection/UYLAppDelegate.m b/Archive/Collection/Collection/UYLAppDelegate.m new file mode 100644 index 0000000..9398d93 --- /dev/null +++ b/Archive/Collection/Collection/UYLAppDelegate.m @@ -0,0 +1,44 @@ +// +// UYLAppDelegate.m +// Collection +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2013 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "UYLAppDelegate.h" + +@implementation UYLAppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + return YES; +} + + +@end diff --git a/Archive/Collection/Collection/UYLCollectionViewController.h b/Archive/Collection/Collection/UYLCollectionViewController.h new file mode 100644 index 0000000..2f910e6 --- /dev/null +++ b/Archive/Collection/Collection/UYLCollectionViewController.h @@ -0,0 +1,38 @@ +// +// UYLViewController.h +// Collection +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2013 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import + +@interface UYLCollectionViewController : UICollectionViewController + +@end diff --git a/Archive/Collection/Collection/UYLCollectionViewController.m b/Archive/Collection/Collection/UYLCollectionViewController.m new file mode 100644 index 0000000..eddfe0b --- /dev/null +++ b/Archive/Collection/Collection/UYLCollectionViewController.m @@ -0,0 +1,124 @@ +// +// UYLViewController.m +// Collection +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2013 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "UYLCollectionViewController.h" +#import "UYLViewController.h" +#import "UYLSimpleCell.h" + +@interface UYLCollectionViewController () + +@property (nonatomic, strong) UIPopoverController *uylPopoverController; + +@end + +@implementation UYLCollectionViewController + +static NSString *UYLStoryboardViewControllerID = @"UYLViewController"; +static NSString *UYLSimpleCellID = @"UYLSimpleCell"; + +#pragma mark - +#pragma mark === UICollectionViewDataSource === +#pragma mark - + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section +{ + return 100; +} + +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath +{ + UYLSimpleCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:UYLSimpleCellID forIndexPath:indexPath]; + cell.cellLabel.text = [NSString stringWithFormat:@"cell %d",indexPath.row]; + return cell; +} + +#pragma mark - +#pragma mark === Gesture Recognizer Action === +#pragma mark - + +- (IBAction)doubleTappedCell:(id)sender +{ + CGPoint tappedPoint = [sender locationInView:self.collectionView]; + NSIndexPath *tappedCellPath = [self.collectionView indexPathForItemAtPoint:tappedPoint]; + + if (tappedCellPath) + { + UYLSimpleCell *cell = (UYLSimpleCell *)[self.collectionView cellForItemAtIndexPath:tappedCellPath]; + [self.collectionView selectItemAtIndexPath:tappedCellPath animated:YES scrollPosition:UICollectionViewScrollPositionNone]; + + if (self.uylPopoverController == nil) + { + UYLViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:UYLStoryboardViewControllerID]; + self.uylPopoverController = [[UIPopoverController alloc] initWithContentViewController:viewController]; + self.uylPopoverController.delegate = self; + } + + [self.uylPopoverController presentPopoverFromRect:cell.frame + inView:self.collectionView + permittedArrowDirections:UIPopoverArrowDirectionAny + animated:YES]; + + } +} + +#pragma mark - +#pragma mark === UIPopoverControllerDelegate === +#pragma mark - + +- (void)popoverController:(UIPopoverController *)popoverController willRepositionPopoverToRect:(inout CGRect *)rect inView:(inout UIView *__autoreleasing *)view +{ + if (self.uylPopoverController == popoverController) + { + NSArray *selectedItems = self.collectionView.indexPathsForSelectedItems; + NSIndexPath *itemPath = (NSIndexPath *)[selectedItems lastObject]; + if (itemPath) + { + UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:itemPath]; + if (cell) + { + CGRect requiredRect = cell.frame; + *rect = requiredRect; + } + } + } +} + +- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController +{ + for (NSIndexPath *indexPath in self.collectionView.indexPathsForSelectedItems) + { + [self.collectionView deselectItemAtIndexPath:indexPath animated:YES]; + } +} + +@end diff --git a/Archive/Collection/Collection/UYLSimpleCell.h b/Archive/Collection/Collection/UYLSimpleCell.h new file mode 100644 index 0000000..7dc2973 --- /dev/null +++ b/Archive/Collection/Collection/UYLSimpleCell.h @@ -0,0 +1,40 @@ +// +// UYLSimpleCell.h +// Collection +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2013 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import + +@interface UYLSimpleCell : UICollectionViewCell + +@property (nonatomic, weak) IBOutlet UILabel *cellLabel; + +@end diff --git a/Archive/Collection/Collection/UYLSimpleCell.m b/Archive/Collection/Collection/UYLSimpleCell.m new file mode 100644 index 0000000..4660dff --- /dev/null +++ b/Archive/Collection/Collection/UYLSimpleCell.m @@ -0,0 +1,51 @@ +// +// UYLSimpleCell.m +// Collection +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2013 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "UYLSimpleCell.h" + +@implementation UYLSimpleCell + +- (id)initWithCoder:(NSCoder *)aDecoder +{ + self = [super initWithCoder:aDecoder]; + if (self) + { + UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectZero]; + backgroundView.layer.borderColor = [[UIColor lightGrayColor] CGColor]; + backgroundView.layer.borderWidth = 2; + self.selectedBackgroundView = backgroundView; + } + return self; +} + +@end diff --git a/Archive/Collection/Collection/UYLViewController.h b/Archive/Collection/Collection/UYLViewController.h new file mode 100644 index 0000000..f774f70 --- /dev/null +++ b/Archive/Collection/Collection/UYLViewController.h @@ -0,0 +1,38 @@ +// +// UYLViewController.h +// Collection +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2013 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import + +@interface UYLViewController : UIViewController + +@end diff --git a/Archive/Collection/Collection/UYLViewController.m b/Archive/Collection/Collection/UYLViewController.m new file mode 100644 index 0000000..da2ab3e --- /dev/null +++ b/Archive/Collection/Collection/UYLViewController.m @@ -0,0 +1,50 @@ +// +// UYLViewController.m +// Collection +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2013 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "UYLViewController.h" + +@interface UYLViewController () + +@property (weak, nonatomic) IBOutlet UILabel *contentLabel; + +@end + +@implementation UYLViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + self.contentLabel.text = @"Content"; +} + +@end diff --git a/Archive/Collection/Collection/en.lproj/InfoPlist.strings b/Archive/Collection/Collection/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/Archive/Collection/Collection/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Archive/Collection/Collection/main.m b/Archive/Collection/Collection/main.m new file mode 100644 index 0000000..840edb6 --- /dev/null +++ b/Archive/Collection/Collection/main.m @@ -0,0 +1,43 @@ +// +// main.m +// Collection +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2013 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import + +#import "UYLAppDelegate.h" + +int main(int argc, char * argv[]) +{ + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([UYLAppDelegate class])); + } +} diff --git a/Archive/Collection/CollectionTests/CollectionTests-Info.plist b/Archive/Collection/CollectionTests/CollectionTests-Info.plist new file mode 100644 index 0000000..169b6f7 --- /dev/null +++ b/Archive/Collection/CollectionTests/CollectionTests-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/Archive/Collection/CollectionTests/CollectionTests.m b/Archive/Collection/CollectionTests/CollectionTests.m new file mode 100644 index 0000000..96f9b2c --- /dev/null +++ b/Archive/Collection/CollectionTests/CollectionTests.m @@ -0,0 +1,34 @@ +// +// CollectionTests.m +// CollectionTests +// +// Created by Keith Harrison on 13/09/2013. +// Copyright (c) 2013 Keith Harrison. All rights reserved. +// + +#import + +@interface CollectionTests : XCTestCase + +@end + +@implementation CollectionTests + +- (void)setUp +{ + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown +{ + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample +{ + XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); +} + +@end diff --git a/Archive/Collection/CollectionTests/en.lproj/InfoPlist.strings b/Archive/Collection/CollectionTests/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/Archive/Collection/CollectionTests/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Archive/Collection/README b/Archive/Collection/README new file mode 100644 index 0000000..9975405 --- /dev/null +++ b/Archive/Collection/README @@ -0,0 +1,16 @@ +======================================================================= +Collection - A Simple Collection View + +Version 1.0 27 September 2013 Initial version. +======================================================================= + +**THIS BUG WAS RESOLVED IN iOS 9.3** + +This is a example project to reproduce a bug in the way that iOS 7 +repostions popovers when a view is rotated. + +For further details see the following blog post: + +https://useyourloaf.com/blog/uipopover-arrow-not-repositioned-correctly-on-rotation/ + +You can also view the bug report on Open Radar at https://openradar.appspot.com/14995477 From 0351f8276f5ef669cd6a10f8b36097e93ab3efcd Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Sat, 11 Jan 2020 14:43:27 +0000 Subject: [PATCH 37/56] Archive Collection project --- .../Collection.xcodeproj/project.pbxproj | 499 ------------------ .../Collection/Base.lproj/Main.storyboard | 129 ----- Collection/Collection/Collection-Info.plist | 41 -- Collection/Collection/Collection-Prefix.pch | 16 - .../AppIcon.appiconset/icon-29.png | Bin 859 -> 0 bytes .../AppIcon.appiconset/icon-29@2x.png | Bin 2561 -> 0 bytes .../AppIcon.appiconset/icon-40.png | Bin 1362 -> 0 bytes .../AppIcon.appiconset/icon-40@2x.png | Bin 4710 -> 0 bytes .../AppIcon.appiconset/icon-76.png | Bin 4166 -> 0 bytes .../AppIcon.appiconset/icon-76@2x.png | Bin 17774 -> 0 bytes .../Default-Landscape@2x~ipad.png | Bin 1001 -> 0 bytes .../Default-Landscape~ipad.png | Bin 593 -> 0 bytes .../Default-Portrait@2x~ipad.png | Bin 1784 -> 0 bytes .../Default-Portrait~ipad.png | Bin 338 -> 0 bytes Collection/Collection/UYLAppDelegate.h | 39 -- Collection/Collection/UYLAppDelegate.m | 44 -- .../Collection/UYLCollectionViewController.h | 38 -- .../Collection/UYLCollectionViewController.m | 124 ----- Collection/Collection/UYLSimpleCell.h | 40 -- Collection/Collection/UYLSimpleCell.m | 51 -- Collection/Collection/UYLViewController.h | 38 -- Collection/Collection/UYLViewController.m | 50 -- .../Collection/en.lproj/InfoPlist.strings | 2 - Collection/Collection/main.m | 43 -- .../CollectionTests-Info.plist | 22 - Collection/CollectionTests/CollectionTests.m | 34 -- .../en.lproj/InfoPlist.strings | 2 - Collection/README | 14 - 28 files changed, 1226 deletions(-) delete mode 100644 Collection/Collection.xcodeproj/project.pbxproj delete mode 100644 Collection/Collection/Base.lproj/Main.storyboard delete mode 100644 Collection/Collection/Collection-Info.plist delete mode 100644 Collection/Collection/Collection-Prefix.pch delete mode 100644 Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-29.png delete mode 100644 Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-29@2x.png delete mode 100644 Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-40.png delete mode 100644 Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-40@2x.png delete mode 100644 Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-76.png delete mode 100644 Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-76@2x.png delete mode 100644 Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png delete mode 100644 Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png delete mode 100644 Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png delete mode 100644 Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png delete mode 100644 Collection/Collection/UYLAppDelegate.h delete mode 100644 Collection/Collection/UYLAppDelegate.m delete mode 100644 Collection/Collection/UYLCollectionViewController.h delete mode 100644 Collection/Collection/UYLCollectionViewController.m delete mode 100644 Collection/Collection/UYLSimpleCell.h delete mode 100644 Collection/Collection/UYLSimpleCell.m delete mode 100644 Collection/Collection/UYLViewController.h delete mode 100644 Collection/Collection/UYLViewController.m delete mode 100644 Collection/Collection/en.lproj/InfoPlist.strings delete mode 100644 Collection/Collection/main.m delete mode 100644 Collection/CollectionTests/CollectionTests-Info.plist delete mode 100644 Collection/CollectionTests/CollectionTests.m delete mode 100644 Collection/CollectionTests/en.lproj/InfoPlist.strings delete mode 100644 Collection/README diff --git a/Collection/Collection.xcodeproj/project.pbxproj b/Collection/Collection.xcodeproj/project.pbxproj deleted file mode 100644 index 83cd935..0000000 --- a/Collection/Collection.xcodeproj/project.pbxproj +++ /dev/null @@ -1,499 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 53A5F89517E3BA57000DB6B5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53A5F89417E3BA57000DB6B5 /* Foundation.framework */; }; - 53A5F89717E3BA57000DB6B5 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53A5F89617E3BA57000DB6B5 /* CoreGraphics.framework */; }; - 53A5F89917E3BA57000DB6B5 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53A5F89817E3BA57000DB6B5 /* UIKit.framework */; }; - 53A5F89F17E3BA57000DB6B5 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 53A5F89D17E3BA57000DB6B5 /* InfoPlist.strings */; }; - 53A5F8A117E3BA57000DB6B5 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A5F8A017E3BA57000DB6B5 /* main.m */; }; - 53A5F8A517E3BA57000DB6B5 /* UYLAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A5F8A417E3BA57000DB6B5 /* UYLAppDelegate.m */; }; - 53A5F8A817E3BA57000DB6B5 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 53A5F8A617E3BA57000DB6B5 /* Main.storyboard */; }; - 53A5F8AB17E3BA57000DB6B5 /* UYLCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A5F8AA17E3BA57000DB6B5 /* UYLCollectionViewController.m */; }; - 53A5F8AD17E3BA57000DB6B5 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 53A5F8AC17E3BA57000DB6B5 /* Images.xcassets */; }; - 53A5F8B417E3BA57000DB6B5 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53A5F8B317E3BA57000DB6B5 /* XCTest.framework */; }; - 53A5F8B517E3BA57000DB6B5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53A5F89417E3BA57000DB6B5 /* Foundation.framework */; }; - 53A5F8B617E3BA57000DB6B5 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53A5F89817E3BA57000DB6B5 /* UIKit.framework */; }; - 53A5F8BE17E3BA57000DB6B5 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 53A5F8BC17E3BA57000DB6B5 /* InfoPlist.strings */; }; - 53A5F8C017E3BA57000DB6B5 /* CollectionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A5F8BF17E3BA57000DB6B5 /* CollectionTests.m */; }; - 53A5F8CB17E3BFFB000DB6B5 /* UYLSimpleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A5F8CA17E3BFFB000DB6B5 /* UYLSimpleCell.m */; }; - 53A5F8CE17E3C692000DB6B5 /* UYLViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A5F8CD17E3C692000DB6B5 /* UYLViewController.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 53A5F8B717E3BA57000DB6B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 53A5F88917E3BA57000DB6B5 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 53A5F89017E3BA57000DB6B5; - remoteInfo = Collection; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 53A5F89117E3BA57000DB6B5 /* Collection.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Collection.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 53A5F89417E3BA57000DB6B5 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 53A5F89617E3BA57000DB6B5 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 53A5F89817E3BA57000DB6B5 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 53A5F89C17E3BA57000DB6B5 /* Collection-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Collection-Info.plist"; sourceTree = ""; }; - 53A5F89E17E3BA57000DB6B5 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - 53A5F8A017E3BA57000DB6B5 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 53A5F8A217E3BA57000DB6B5 /* Collection-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Collection-Prefix.pch"; sourceTree = ""; }; - 53A5F8A317E3BA57000DB6B5 /* UYLAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UYLAppDelegate.h; sourceTree = ""; }; - 53A5F8A417E3BA57000DB6B5 /* UYLAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLAppDelegate.m; sourceTree = ""; }; - 53A5F8A717E3BA57000DB6B5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 53A5F8A917E3BA57000DB6B5 /* UYLCollectionViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UYLCollectionViewController.h; sourceTree = ""; }; - 53A5F8AA17E3BA57000DB6B5 /* UYLCollectionViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLCollectionViewController.m; sourceTree = ""; }; - 53A5F8AC17E3BA57000DB6B5 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - 53A5F8B217E3BA57000DB6B5 /* CollectionTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CollectionTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 53A5F8B317E3BA57000DB6B5 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - 53A5F8BB17E3BA57000DB6B5 /* CollectionTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CollectionTests-Info.plist"; sourceTree = ""; }; - 53A5F8BD17E3BA57000DB6B5 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - 53A5F8BF17E3BA57000DB6B5 /* CollectionTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CollectionTests.m; sourceTree = ""; }; - 53A5F8C917E3BFFB000DB6B5 /* UYLSimpleCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLSimpleCell.h; sourceTree = ""; }; - 53A5F8CA17E3BFFB000DB6B5 /* UYLSimpleCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLSimpleCell.m; sourceTree = ""; }; - 53A5F8CC17E3C692000DB6B5 /* UYLViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLViewController.h; sourceTree = ""; }; - 53A5F8CD17E3C692000DB6B5 /* UYLViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLViewController.m; sourceTree = ""; }; - 53D5C7E617F62BD50077FB0D /* README */ = {isa = PBXFileReference; lastKnownFileType = text; path = README; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 53A5F88E17E3BA57000DB6B5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 53A5F89717E3BA57000DB6B5 /* CoreGraphics.framework in Frameworks */, - 53A5F89917E3BA57000DB6B5 /* UIKit.framework in Frameworks */, - 53A5F89517E3BA57000DB6B5 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 53A5F8AF17E3BA57000DB6B5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 53A5F8B417E3BA57000DB6B5 /* XCTest.framework in Frameworks */, - 53A5F8B617E3BA57000DB6B5 /* UIKit.framework in Frameworks */, - 53A5F8B517E3BA57000DB6B5 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 53A5F88817E3BA57000DB6B5 = { - isa = PBXGroup; - children = ( - 53D5C7E617F62BD50077FB0D /* README */, - 53A5F89A17E3BA57000DB6B5 /* Collection */, - 53A5F8B917E3BA57000DB6B5 /* CollectionTests */, - 53A5F89317E3BA57000DB6B5 /* Frameworks */, - 53A5F89217E3BA57000DB6B5 /* Products */, - ); - sourceTree = ""; - }; - 53A5F89217E3BA57000DB6B5 /* Products */ = { - isa = PBXGroup; - children = ( - 53A5F89117E3BA57000DB6B5 /* Collection.app */, - 53A5F8B217E3BA57000DB6B5 /* CollectionTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 53A5F89317E3BA57000DB6B5 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 53A5F89417E3BA57000DB6B5 /* Foundation.framework */, - 53A5F89617E3BA57000DB6B5 /* CoreGraphics.framework */, - 53A5F89817E3BA57000DB6B5 /* UIKit.framework */, - 53A5F8B317E3BA57000DB6B5 /* XCTest.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 53A5F89A17E3BA57000DB6B5 /* Collection */ = { - isa = PBXGroup; - children = ( - 53A5F8A317E3BA57000DB6B5 /* UYLAppDelegate.h */, - 53A5F8A417E3BA57000DB6B5 /* UYLAppDelegate.m */, - 53A5F8A617E3BA57000DB6B5 /* Main.storyboard */, - 53A5F8CC17E3C692000DB6B5 /* UYLViewController.h */, - 53A5F8CD17E3C692000DB6B5 /* UYLViewController.m */, - 53A5F8C917E3BFFB000DB6B5 /* UYLSimpleCell.h */, - 53A5F8CA17E3BFFB000DB6B5 /* UYLSimpleCell.m */, - 53A5F8A917E3BA57000DB6B5 /* UYLCollectionViewController.h */, - 53A5F8AA17E3BA57000DB6B5 /* UYLCollectionViewController.m */, - 53A5F8AC17E3BA57000DB6B5 /* Images.xcassets */, - 53A5F89B17E3BA57000DB6B5 /* Supporting Files */, - ); - path = Collection; - sourceTree = ""; - }; - 53A5F89B17E3BA57000DB6B5 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 53A5F89C17E3BA57000DB6B5 /* Collection-Info.plist */, - 53A5F89D17E3BA57000DB6B5 /* InfoPlist.strings */, - 53A5F8A017E3BA57000DB6B5 /* main.m */, - 53A5F8A217E3BA57000DB6B5 /* Collection-Prefix.pch */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 53A5F8B917E3BA57000DB6B5 /* CollectionTests */ = { - isa = PBXGroup; - children = ( - 53A5F8BF17E3BA57000DB6B5 /* CollectionTests.m */, - 53A5F8BA17E3BA57000DB6B5 /* Supporting Files */, - ); - path = CollectionTests; - sourceTree = ""; - }; - 53A5F8BA17E3BA57000DB6B5 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 53A5F8BB17E3BA57000DB6B5 /* CollectionTests-Info.plist */, - 53A5F8BC17E3BA57000DB6B5 /* InfoPlist.strings */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 53A5F89017E3BA57000DB6B5 /* Collection */ = { - isa = PBXNativeTarget; - buildConfigurationList = 53A5F8C317E3BA57000DB6B5 /* Build configuration list for PBXNativeTarget "Collection" */; - buildPhases = ( - 53A5F88D17E3BA57000DB6B5 /* Sources */, - 53A5F88E17E3BA57000DB6B5 /* Frameworks */, - 53A5F88F17E3BA57000DB6B5 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Collection; - productName = Collection; - productReference = 53A5F89117E3BA57000DB6B5 /* Collection.app */; - productType = "com.apple.product-type.application"; - }; - 53A5F8B117E3BA57000DB6B5 /* CollectionTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 53A5F8C617E3BA57000DB6B5 /* Build configuration list for PBXNativeTarget "CollectionTests" */; - buildPhases = ( - 53A5F8AE17E3BA57000DB6B5 /* Sources */, - 53A5F8AF17E3BA57000DB6B5 /* Frameworks */, - 53A5F8B017E3BA57000DB6B5 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 53A5F8B817E3BA57000DB6B5 /* PBXTargetDependency */, - ); - name = CollectionTests; - productName = CollectionTests; - productReference = 53A5F8B217E3BA57000DB6B5 /* CollectionTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 53A5F88917E3BA57000DB6B5 /* Project object */ = { - isa = PBXProject; - attributes = { - CLASSPREFIX = UYL; - LastUpgradeCheck = 0500; - ORGANIZATIONNAME = "Keith Harrison"; - TargetAttributes = { - 53A5F89017E3BA57000DB6B5 = { - DevelopmentTeam = LCC2J94N44; - }; - 53A5F8B117E3BA57000DB6B5 = { - TestTargetID = 53A5F89017E3BA57000DB6B5; - }; - }; - }; - buildConfigurationList = 53A5F88C17E3BA57000DB6B5 /* Build configuration list for PBXProject "Collection" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 53A5F88817E3BA57000DB6B5; - productRefGroup = 53A5F89217E3BA57000DB6B5 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 53A5F89017E3BA57000DB6B5 /* Collection */, - 53A5F8B117E3BA57000DB6B5 /* CollectionTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 53A5F88F17E3BA57000DB6B5 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 53A5F8AD17E3BA57000DB6B5 /* Images.xcassets in Resources */, - 53A5F89F17E3BA57000DB6B5 /* InfoPlist.strings in Resources */, - 53A5F8A817E3BA57000DB6B5 /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 53A5F8B017E3BA57000DB6B5 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 53A5F8BE17E3BA57000DB6B5 /* InfoPlist.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 53A5F88D17E3BA57000DB6B5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 53A5F8A117E3BA57000DB6B5 /* main.m in Sources */, - 53A5F8A517E3BA57000DB6B5 /* UYLAppDelegate.m in Sources */, - 53A5F8CB17E3BFFB000DB6B5 /* UYLSimpleCell.m in Sources */, - 53A5F8AB17E3BA57000DB6B5 /* UYLCollectionViewController.m in Sources */, - 53A5F8CE17E3C692000DB6B5 /* UYLViewController.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 53A5F8AE17E3BA57000DB6B5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 53A5F8C017E3BA57000DB6B5 /* CollectionTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 53A5F8B817E3BA57000DB6B5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 53A5F89017E3BA57000DB6B5 /* Collection */; - targetProxy = 53A5F8B717E3BA57000DB6B5 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 53A5F89D17E3BA57000DB6B5 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 53A5F89E17E3BA57000DB6B5 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - 53A5F8A617E3BA57000DB6B5 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 53A5F8A717E3BA57000DB6B5 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 53A5F8BC17E3BA57000DB6B5 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 53A5F8BD17E3BA57000DB6B5 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 53A5F8C117E3BA57000DB6B5 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - 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; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = 2; - }; - name = Debug; - }; - 53A5F8C217E3BA57000DB6B5 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - 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; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = 2; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 53A5F8C417E3BA57000DB6B5 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CODE_SIGN_IDENTITY = "iPhone Developer"; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Collection/Collection-Prefix.pch"; - INFOPLIST_FILE = "Collection/Collection-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - 53A5F8C517E3BA57000DB6B5 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CODE_SIGN_IDENTITY = "iPhone Developer"; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Collection/Collection-Prefix.pch"; - INFOPLIST_FILE = "Collection/Collection-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; - 53A5F8C717E3BA57000DB6B5 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Collection.app/Collection"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Collection/Collection-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = "CollectionTests/CollectionTests-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUNDLE_LOADER)"; - WRAPPER_EXTENSION = xctest; - }; - name = Debug; - }; - 53A5F8C817E3BA57000DB6B5 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Collection.app/Collection"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Collection/Collection-Prefix.pch"; - INFOPLIST_FILE = "CollectionTests/CollectionTests-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUNDLE_LOADER)"; - WRAPPER_EXTENSION = xctest; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 53A5F88C17E3BA57000DB6B5 /* Build configuration list for PBXProject "Collection" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 53A5F8C117E3BA57000DB6B5 /* Debug */, - 53A5F8C217E3BA57000DB6B5 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 53A5F8C317E3BA57000DB6B5 /* Build configuration list for PBXNativeTarget "Collection" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 53A5F8C417E3BA57000DB6B5 /* Debug */, - 53A5F8C517E3BA57000DB6B5 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 53A5F8C617E3BA57000DB6B5 /* Build configuration list for PBXNativeTarget "CollectionTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 53A5F8C717E3BA57000DB6B5 /* Debug */, - 53A5F8C817E3BA57000DB6B5 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 53A5F88917E3BA57000DB6B5 /* Project object */; -} diff --git a/Collection/Collection/Base.lproj/Main.storyboard b/Collection/Collection/Base.lproj/Main.storyboard deleted file mode 100644 index f255ba7..0000000 --- a/Collection/Collection/Base.lproj/Main.storyboard +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Collection/Collection/Collection-Info.plist b/Collection/Collection/Collection-Info.plist deleted file mode 100644 index 6614037..0000000 --- a/Collection/Collection/Collection-Info.plist +++ /dev/null @@ -1,41 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - com.useyourloaf.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - LSRequiresIPhoneOS - - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/Collection/Collection/Collection-Prefix.pch b/Collection/Collection/Collection-Prefix.pch deleted file mode 100644 index 82a2bb4..0000000 --- a/Collection/Collection/Collection-Prefix.pch +++ /dev/null @@ -1,16 +0,0 @@ -// -// Prefix header -// -// The contents of this file are implicitly included at the beginning of every source file. -// - -#import - -#ifndef __IPHONE_5_0 -#warning "This project uses features only available in iOS SDK 5.0 and later." -#endif - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-29.png b/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-29.png deleted file mode 100644 index b257b07226846aca036ccff246e65d2e730a5e0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 859 zcmV-h1ElIUx?40wvf6u*VjyPv;fd3Z* zK>ElefQ3kb^j=I=-=i9--XKT_UM7H&IPpD_B^d-s0`PEoVnYZXFGfW%HB#fMzX#}y ztcmlsYknV`SB8M(m$Ofb8uq`5j`DIYxIcz5jav_#MCJ#l5_U9|HJ10E$p0jc5!8X( zE(XC#xBE9NUTg9!$V0_kw^lMmN(!lzcK!TwMaOU^0F2pJb&jSV%K5@=F>w2+*5Lw* z4jHX<-P6*hx4EFID1Ey3bUQ?ngy80mmu43=y7jld<=uLJ!mEjt7vsi~jES%fqSk>j zeUfMOqqf8`d*Y}q!FL_98l7GVh$`F5^Hxur40e;@SGHlslw?njcOVA#90AcO*J_W7 zMRxUh>Gi%{@Q*6X9&4|7ggSD5o$@K5J+68j4*+ zpXogOU?_hn&~0nJbyc^-MY{li<5mZMRu&fEr1@yu`_18@g{j}49lN)3`8))*toVDT z)4|ai!#OZ9%sr1&)o`vgLA5)yJ8%p5yh!nHI&MIs~*#R6L?b zE&vcrvZ3jW*5TqyJ3HcI=1|E%T11aW*Ep~*HE!le&dWd|DTdGQ#*ibHiAQH-q0$#l z(HRs#BJ#<^VaoScG_08rh3Xq7S_!$4>$RrQ@v*oZ?es|ALeDpD?InvLS3qJ~0`vk4 l^Y0T)z+eOe#Gt)Jgg=K>VSjU{PzwM6002ovPDHLkV1n$|p@9GZ diff --git a/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-29@2x.png b/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-29@2x.png deleted file mode 100644 index 7759c83f4b10efb32e7c54af86c6cfd0adc14e64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2561 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 QR{#J207*qoM6N<$g437vy#N3J diff --git a/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-76@2x.png b/Collection/Collection/Images.xcassets/AppIcon.appiconset/icon-76@2x.png deleted file mode 100644 index 7bdbed3bcd25858e35e136552a11675defee0c45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17774 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 diff --git a/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png b/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png deleted file mode 100644 index 534be4d6ec459e583ea037755f4bf174f974aa73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1001 zcmeAS@N?(olHy`uVBq!ia0y~y-~ck&7?_xW)ckJ_|9}){fKQ0)|NsAg{P?kH)22=b zWl07G=GmSujv*C{Z!aiC=dgEakt!T9!up<{9 diff --git a/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png b/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png deleted file mode 100644 index 30876cb6121ccadd832a619951d6ef1e748ae39a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1784 zcmeAS@N?(olHy`uVBq!ia0y~yU;{Ea7+9Erl+gdDtUyXMz$e7@|Ns9#e*D<9Y18-b z-`~G~|KY=j0|yRF_PwzHsAHa|i(^Oyby7{7 z4GaoEGnueZAGBE*7#$b{7?7xj%R2=U?#|;v7e`e^77xuPvdqA6FUXXJTLNoh<^)?fw-QoelF{r5}E)bC`9Z4 diff --git a/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png b/Collection/Collection/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png deleted file mode 100644 index e18280803869e944264c47643ba389bd704d2431..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 338 zcmeAS@N?(olHy`uVBq!ia0y~yUTNn zBm)B@i>HfYNX4zU=N&m27&urqXlHr`OC6lAki$EzN{@*&kiB3&H_)D;2E^I+w-prb S65442a=E9gpUXO@geCyyRUyRy diff --git a/Collection/Collection/UYLAppDelegate.h b/Collection/Collection/UYLAppDelegate.h deleted file mode 100644 index 7a6a4ae..0000000 --- a/Collection/Collection/UYLAppDelegate.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// UYLAppDelegate.h -// Collection -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2013 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import - -@interface UYLAppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/Collection/Collection/UYLAppDelegate.m b/Collection/Collection/UYLAppDelegate.m deleted file mode 100644 index 9398d93..0000000 --- a/Collection/Collection/UYLAppDelegate.m +++ /dev/null @@ -1,44 +0,0 @@ -// -// UYLAppDelegate.m -// Collection -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2013 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import "UYLAppDelegate.h" - -@implementation UYLAppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - return YES; -} - - -@end diff --git a/Collection/Collection/UYLCollectionViewController.h b/Collection/Collection/UYLCollectionViewController.h deleted file mode 100644 index 2f910e6..0000000 --- a/Collection/Collection/UYLCollectionViewController.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// UYLViewController.h -// Collection -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2013 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import - -@interface UYLCollectionViewController : UICollectionViewController - -@end diff --git a/Collection/Collection/UYLCollectionViewController.m b/Collection/Collection/UYLCollectionViewController.m deleted file mode 100644 index eddfe0b..0000000 --- a/Collection/Collection/UYLCollectionViewController.m +++ /dev/null @@ -1,124 +0,0 @@ -// -// UYLViewController.m -// Collection -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2013 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import "UYLCollectionViewController.h" -#import "UYLViewController.h" -#import "UYLSimpleCell.h" - -@interface UYLCollectionViewController () - -@property (nonatomic, strong) UIPopoverController *uylPopoverController; - -@end - -@implementation UYLCollectionViewController - -static NSString *UYLStoryboardViewControllerID = @"UYLViewController"; -static NSString *UYLSimpleCellID = @"UYLSimpleCell"; - -#pragma mark - -#pragma mark === UICollectionViewDataSource === -#pragma mark - - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section -{ - return 100; -} - -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath -{ - UYLSimpleCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:UYLSimpleCellID forIndexPath:indexPath]; - cell.cellLabel.text = [NSString stringWithFormat:@"cell %d",indexPath.row]; - return cell; -} - -#pragma mark - -#pragma mark === Gesture Recognizer Action === -#pragma mark - - -- (IBAction)doubleTappedCell:(id)sender -{ - CGPoint tappedPoint = [sender locationInView:self.collectionView]; - NSIndexPath *tappedCellPath = [self.collectionView indexPathForItemAtPoint:tappedPoint]; - - if (tappedCellPath) - { - UYLSimpleCell *cell = (UYLSimpleCell *)[self.collectionView cellForItemAtIndexPath:tappedCellPath]; - [self.collectionView selectItemAtIndexPath:tappedCellPath animated:YES scrollPosition:UICollectionViewScrollPositionNone]; - - if (self.uylPopoverController == nil) - { - UYLViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:UYLStoryboardViewControllerID]; - self.uylPopoverController = [[UIPopoverController alloc] initWithContentViewController:viewController]; - self.uylPopoverController.delegate = self; - } - - [self.uylPopoverController presentPopoverFromRect:cell.frame - inView:self.collectionView - permittedArrowDirections:UIPopoverArrowDirectionAny - animated:YES]; - - } -} - -#pragma mark - -#pragma mark === UIPopoverControllerDelegate === -#pragma mark - - -- (void)popoverController:(UIPopoverController *)popoverController willRepositionPopoverToRect:(inout CGRect *)rect inView:(inout UIView *__autoreleasing *)view -{ - if (self.uylPopoverController == popoverController) - { - NSArray *selectedItems = self.collectionView.indexPathsForSelectedItems; - NSIndexPath *itemPath = (NSIndexPath *)[selectedItems lastObject]; - if (itemPath) - { - UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:itemPath]; - if (cell) - { - CGRect requiredRect = cell.frame; - *rect = requiredRect; - } - } - } -} - -- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController -{ - for (NSIndexPath *indexPath in self.collectionView.indexPathsForSelectedItems) - { - [self.collectionView deselectItemAtIndexPath:indexPath animated:YES]; - } -} - -@end diff --git a/Collection/Collection/UYLSimpleCell.h b/Collection/Collection/UYLSimpleCell.h deleted file mode 100644 index 7dc2973..0000000 --- a/Collection/Collection/UYLSimpleCell.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// UYLSimpleCell.h -// Collection -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2013 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import - -@interface UYLSimpleCell : UICollectionViewCell - -@property (nonatomic, weak) IBOutlet UILabel *cellLabel; - -@end diff --git a/Collection/Collection/UYLSimpleCell.m b/Collection/Collection/UYLSimpleCell.m deleted file mode 100644 index 4660dff..0000000 --- a/Collection/Collection/UYLSimpleCell.m +++ /dev/null @@ -1,51 +0,0 @@ -// -// UYLSimpleCell.m -// Collection -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2013 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import "UYLSimpleCell.h" - -@implementation UYLSimpleCell - -- (id)initWithCoder:(NSCoder *)aDecoder -{ - self = [super initWithCoder:aDecoder]; - if (self) - { - UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectZero]; - backgroundView.layer.borderColor = [[UIColor lightGrayColor] CGColor]; - backgroundView.layer.borderWidth = 2; - self.selectedBackgroundView = backgroundView; - } - return self; -} - -@end diff --git a/Collection/Collection/UYLViewController.h b/Collection/Collection/UYLViewController.h deleted file mode 100644 index f774f70..0000000 --- a/Collection/Collection/UYLViewController.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// UYLViewController.h -// Collection -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2013 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import - -@interface UYLViewController : UIViewController - -@end diff --git a/Collection/Collection/UYLViewController.m b/Collection/Collection/UYLViewController.m deleted file mode 100644 index da2ab3e..0000000 --- a/Collection/Collection/UYLViewController.m +++ /dev/null @@ -1,50 +0,0 @@ -// -// UYLViewController.m -// Collection -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2013 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import "UYLViewController.h" - -@interface UYLViewController () - -@property (weak, nonatomic) IBOutlet UILabel *contentLabel; - -@end - -@implementation UYLViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - self.contentLabel.text = @"Content"; -} - -@end diff --git a/Collection/Collection/en.lproj/InfoPlist.strings b/Collection/Collection/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28f..0000000 --- a/Collection/Collection/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/Collection/Collection/main.m b/Collection/Collection/main.m deleted file mode 100644 index 840edb6..0000000 --- a/Collection/Collection/main.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// main.m -// Collection -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2013 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import - -#import "UYLAppDelegate.h" - -int main(int argc, char * argv[]) -{ - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([UYLAppDelegate class])); - } -} diff --git a/Collection/CollectionTests/CollectionTests-Info.plist b/Collection/CollectionTests/CollectionTests-Info.plist deleted file mode 100644 index 6dd5353..0000000 --- a/Collection/CollectionTests/CollectionTests-Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - com.useyourloaf.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/Collection/CollectionTests/CollectionTests.m b/Collection/CollectionTests/CollectionTests.m deleted file mode 100644 index 96f9b2c..0000000 --- a/Collection/CollectionTests/CollectionTests.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// CollectionTests.m -// CollectionTests -// -// Created by Keith Harrison on 13/09/2013. -// Copyright (c) 2013 Keith Harrison. All rights reserved. -// - -#import - -@interface CollectionTests : XCTestCase - -@end - -@implementation CollectionTests - -- (void)setUp -{ - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown -{ - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void)testExample -{ - XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); -} - -@end diff --git a/Collection/CollectionTests/en.lproj/InfoPlist.strings b/Collection/CollectionTests/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28f..0000000 --- a/Collection/CollectionTests/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/Collection/README b/Collection/README deleted file mode 100644 index 54a5631..0000000 --- a/Collection/README +++ /dev/null @@ -1,14 +0,0 @@ -======================================================================= -Collection - A Simple Collection View - -Version 1.0 27 September 2013 Initial version. -======================================================================= - -This is a example project to reproduce a bug in the way that iOS 7 -repostions popovers when a view is rotated. - -For further details see the following blog post: - -http://useyourloaf.com/blog/2013/09/27/uipopover-arrow-not-repositioned-correctly-on-rotation.html - -You can also view the bug report on Open Radar at http://openradar.appspot.com/14995477 \ No newline at end of file From 2de8ac53c0f334c882efdbabe26abfd395b6be59 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Sat, 11 Jan 2020 15:10:56 +0000 Subject: [PATCH 38/56] Archive TwitterSearch project --- .../TwitterSearch.xcodeproj/project.pbxproj | 0 .../AppIcon.appiconset/Contents.json | 0 .../Images.xcassets/AppIcon.appiconset/Icon2-29.png | Bin .../AppIcon.appiconset/Icon2-29@2x-1.png | Bin .../AppIcon.appiconset/Icon2-29@2x.png | Bin .../AppIcon.appiconset/Icon2-29@3x.png | Bin .../Images.xcassets/AppIcon.appiconset/Icon2-40.png | Bin .../AppIcon.appiconset/Icon2-40@2x-1.png | Bin .../AppIcon.appiconset/Icon2-40@2x.png | Bin .../Images.xcassets/AppIcon.appiconset/Icon2-76.png | Bin .../AppIcon.appiconset/Icon2-76@2x.png | Bin .../AppIcon.appiconset/Icon2-835@2x.png | Bin .../AppIcon.appiconset/Icon@2x-1.png | Bin .../Images.xcassets/AppIcon.appiconset/Icon@2x.png | Bin .../Images.xcassets/AppIcon.appiconset/Icon@3x.png | Bin .../AppIcon.appiconset/icon2-1024.png | Bin .../Images.xcassets/AppIcon.appiconset/icon2-20.png | Bin .../AppIcon.appiconset/icon2-20@2x-1.png | Bin .../AppIcon.appiconset/icon2-20@2x.png | Bin .../AppIcon.appiconset/icon2-20@3x.png | Bin .../TwitterSearch/Images.xcassets/Contents.json | 0 .../TwitterSearch/LaunchScreen.storyboard | 0 .../TwitterSearch/NSString+URLEncoding.h | 0 .../TwitterSearch/NSString+URLEncoding.m | 0 .../TwitterSearch/RootViewController.h | 0 .../TwitterSearch/RootViewController.m | 0 .../TwitterSearch/SearchViewController.h | 0 .../TwitterSearch/SearchViewController.m | 0 .../TwitterSearch/Storyboard.storyboard | 0 .../TwitterSearch}/TwitterSearch/TweetCell.h | 0 .../TwitterSearch}/TwitterSearch/TweetCell.m | 0 .../TwitterSearch/TwitterSearch-Info.plist | 0 .../TwitterSearch/TwitterSearchAppDelegate.h | 0 .../TwitterSearch/TwitterSearchAppDelegate.m | 0 .../TwitterSearch/en.lproj/InfoPlist.strings | 0 .../TwitterSearch}/TwitterSearch/main.m | 0 .../TwitterSearchUnitTests/Info.plist | 0 .../NSStringURLEncodingUnitTests.m | 0 38 files changed, 0 insertions(+), 0 deletions(-) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch.xcodeproj/project.pbxproj (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/Contents.json (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29@2x-1.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29@2x.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29@3x.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-40.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-40@2x-1.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-40@2x.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-76.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-76@2x.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-835@2x.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon@2x-1.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon@2x.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon@3x.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-1024.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@2x-1.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@2x.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@3x.png (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Images.xcassets/Contents.json (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/LaunchScreen.storyboard (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/NSString+URLEncoding.h (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/NSString+URLEncoding.m (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/RootViewController.h (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/RootViewController.m (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/SearchViewController.h (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/SearchViewController.m (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/Storyboard.storyboard (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/TweetCell.h (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/TweetCell.m (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/TwitterSearch-Info.plist (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/TwitterSearchAppDelegate.h (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/TwitterSearchAppDelegate.m (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/en.lproj/InfoPlist.strings (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearch/main.m (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearchUnitTests/Info.plist (100%) rename {TwitterSearch => Archive/TwitterSearch}/TwitterSearchUnitTests/NSStringURLEncodingUnitTests.m (100%) diff --git a/TwitterSearch/TwitterSearch.xcodeproj/project.pbxproj b/Archive/TwitterSearch/TwitterSearch.xcodeproj/project.pbxproj similarity index 100% rename from TwitterSearch/TwitterSearch.xcodeproj/project.pbxproj rename to Archive/TwitterSearch/TwitterSearch.xcodeproj/project.pbxproj diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Contents.json b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Contents.json rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Contents.json diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29@2x-1.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29@2x-1.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29@2x-1.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29@2x-1.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29@2x.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29@2x.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29@2x.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29@2x.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29@3x.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29@3x.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29@3x.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-29@3x.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-40.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-40.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-40.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-40.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-40@2x-1.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-40@2x-1.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-40@2x-1.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-40@2x-1.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-40@2x.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-40@2x.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-40@2x.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-40@2x.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-76.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-76.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-76.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-76.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-76@2x.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-76@2x.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-76@2x.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-76@2x.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-835@2x.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-835@2x.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-835@2x.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon2-835@2x.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon@2x-1.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon@2x-1.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon@2x-1.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon@2x-1.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon@2x.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon@2x.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon@2x.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon@2x.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon@3x.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon@3x.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon@3x.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/Icon@3x.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-1024.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-1024.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-1024.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-1024.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@2x-1.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@2x-1.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@2x-1.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@2x-1.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@2x.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@2x.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@2x.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@2x.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@3x.png b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@3x.png similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@3x.png rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/AppIcon.appiconset/icon2-20@3x.png diff --git a/TwitterSearch/TwitterSearch/Images.xcassets/Contents.json b/Archive/TwitterSearch/TwitterSearch/Images.xcassets/Contents.json similarity index 100% rename from TwitterSearch/TwitterSearch/Images.xcassets/Contents.json rename to Archive/TwitterSearch/TwitterSearch/Images.xcassets/Contents.json diff --git a/TwitterSearch/TwitterSearch/LaunchScreen.storyboard b/Archive/TwitterSearch/TwitterSearch/LaunchScreen.storyboard similarity index 100% rename from TwitterSearch/TwitterSearch/LaunchScreen.storyboard rename to Archive/TwitterSearch/TwitterSearch/LaunchScreen.storyboard diff --git a/TwitterSearch/TwitterSearch/NSString+URLEncoding.h b/Archive/TwitterSearch/TwitterSearch/NSString+URLEncoding.h similarity index 100% rename from TwitterSearch/TwitterSearch/NSString+URLEncoding.h rename to Archive/TwitterSearch/TwitterSearch/NSString+URLEncoding.h diff --git a/TwitterSearch/TwitterSearch/NSString+URLEncoding.m b/Archive/TwitterSearch/TwitterSearch/NSString+URLEncoding.m similarity index 100% rename from TwitterSearch/TwitterSearch/NSString+URLEncoding.m rename to Archive/TwitterSearch/TwitterSearch/NSString+URLEncoding.m diff --git a/TwitterSearch/TwitterSearch/RootViewController.h b/Archive/TwitterSearch/TwitterSearch/RootViewController.h similarity index 100% rename from TwitterSearch/TwitterSearch/RootViewController.h rename to Archive/TwitterSearch/TwitterSearch/RootViewController.h diff --git a/TwitterSearch/TwitterSearch/RootViewController.m b/Archive/TwitterSearch/TwitterSearch/RootViewController.m similarity index 100% rename from TwitterSearch/TwitterSearch/RootViewController.m rename to Archive/TwitterSearch/TwitterSearch/RootViewController.m diff --git a/TwitterSearch/TwitterSearch/SearchViewController.h b/Archive/TwitterSearch/TwitterSearch/SearchViewController.h similarity index 100% rename from TwitterSearch/TwitterSearch/SearchViewController.h rename to Archive/TwitterSearch/TwitterSearch/SearchViewController.h diff --git a/TwitterSearch/TwitterSearch/SearchViewController.m b/Archive/TwitterSearch/TwitterSearch/SearchViewController.m similarity index 100% rename from TwitterSearch/TwitterSearch/SearchViewController.m rename to Archive/TwitterSearch/TwitterSearch/SearchViewController.m diff --git a/TwitterSearch/TwitterSearch/Storyboard.storyboard b/Archive/TwitterSearch/TwitterSearch/Storyboard.storyboard similarity index 100% rename from TwitterSearch/TwitterSearch/Storyboard.storyboard rename to Archive/TwitterSearch/TwitterSearch/Storyboard.storyboard diff --git a/TwitterSearch/TwitterSearch/TweetCell.h b/Archive/TwitterSearch/TwitterSearch/TweetCell.h similarity index 100% rename from TwitterSearch/TwitterSearch/TweetCell.h rename to Archive/TwitterSearch/TwitterSearch/TweetCell.h diff --git a/TwitterSearch/TwitterSearch/TweetCell.m b/Archive/TwitterSearch/TwitterSearch/TweetCell.m similarity index 100% rename from TwitterSearch/TwitterSearch/TweetCell.m rename to Archive/TwitterSearch/TwitterSearch/TweetCell.m diff --git a/TwitterSearch/TwitterSearch/TwitterSearch-Info.plist b/Archive/TwitterSearch/TwitterSearch/TwitterSearch-Info.plist similarity index 100% rename from TwitterSearch/TwitterSearch/TwitterSearch-Info.plist rename to Archive/TwitterSearch/TwitterSearch/TwitterSearch-Info.plist diff --git a/TwitterSearch/TwitterSearch/TwitterSearchAppDelegate.h b/Archive/TwitterSearch/TwitterSearch/TwitterSearchAppDelegate.h similarity index 100% rename from TwitterSearch/TwitterSearch/TwitterSearchAppDelegate.h rename to Archive/TwitterSearch/TwitterSearch/TwitterSearchAppDelegate.h diff --git a/TwitterSearch/TwitterSearch/TwitterSearchAppDelegate.m b/Archive/TwitterSearch/TwitterSearch/TwitterSearchAppDelegate.m similarity index 100% rename from TwitterSearch/TwitterSearch/TwitterSearchAppDelegate.m rename to Archive/TwitterSearch/TwitterSearch/TwitterSearchAppDelegate.m diff --git a/TwitterSearch/TwitterSearch/en.lproj/InfoPlist.strings b/Archive/TwitterSearch/TwitterSearch/en.lproj/InfoPlist.strings similarity index 100% rename from TwitterSearch/TwitterSearch/en.lproj/InfoPlist.strings rename to Archive/TwitterSearch/TwitterSearch/en.lproj/InfoPlist.strings diff --git a/TwitterSearch/TwitterSearch/main.m b/Archive/TwitterSearch/TwitterSearch/main.m similarity index 100% rename from TwitterSearch/TwitterSearch/main.m rename to Archive/TwitterSearch/TwitterSearch/main.m diff --git a/TwitterSearch/TwitterSearchUnitTests/Info.plist b/Archive/TwitterSearch/TwitterSearchUnitTests/Info.plist similarity index 100% rename from TwitterSearch/TwitterSearchUnitTests/Info.plist rename to Archive/TwitterSearch/TwitterSearchUnitTests/Info.plist diff --git a/TwitterSearch/TwitterSearchUnitTests/NSStringURLEncodingUnitTests.m b/Archive/TwitterSearch/TwitterSearchUnitTests/NSStringURLEncodingUnitTests.m similarity index 100% rename from TwitterSearch/TwitterSearchUnitTests/NSStringURLEncodingUnitTests.m rename to Archive/TwitterSearch/TwitterSearchUnitTests/NSStringURLEncodingUnitTests.m From 30f1048f52d23e83e23db7e3fc76105ffdb855b0 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Sat, 11 Jan 2020 15:56:16 +0000 Subject: [PATCH 39/56] Update for Xcode 11 --- BUG TableView State Restore/README | 2 +- .../restore.xcodeproj/project.pbxproj | 52 ++++++++++++++++--- .../MainStoryboard.storyboard | 44 +++++++--------- .../restore/restore-Info.plist | 2 +- Refresh/README.md | 5 +- Refresh/Refresh.xcodeproj/project.pbxproj | 24 ++++++++- .../AppIcon.appiconset/Contents.json | 5 ++ 7 files changed, 97 insertions(+), 37 deletions(-) rename BUG TableView State Restore/restore/{en.lproj => Base.lproj}/MainStoryboard.storyboard (60%) diff --git a/BUG TableView State Restore/README b/BUG TableView State Restore/README index 7a1ba94..e463f6e 100644 --- a/BUG TableView State Restore/README +++ b/BUG TableView State Restore/README @@ -22,7 +22,7 @@ as expected. For further details see the following blog post: -http://useyourloaf.com/blog/2013/04/07/bug-table-view-state-not-restored-when-embedded-in-navigation-controller.html +https://useyourloaf.com/blog/bug-table-view-state-not-restored-when-embedded-in-navigation-controller/ ************************************************************************** *** This bug has been tested and reproduced for iOS 6.0 and iOS 6.1.3. *** diff --git a/BUG TableView State Restore/restore.xcodeproj/project.pbxproj b/BUG TableView State Restore/restore.xcodeproj/project.pbxproj index a3364b9..f3bb7b1 100644 --- a/BUG TableView State Restore/restore.xcodeproj/project.pbxproj +++ b/BUG TableView State Restore/restore.xcodeproj/project.pbxproj @@ -23,6 +23,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 5334608723CA275700BE943E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainStoryboard.storyboard; sourceTree = ""; }; 53370CBD16F62D8D0090DFC5 /* restore.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = restore.app; sourceTree = BUILT_PRODUCTS_DIR; }; 53370CC016F62D8D0090DFC5 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 53370CC216F62D8D0090DFC5 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -36,7 +37,6 @@ 53370CD216F62D8D0090DFC5 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; 53370CD416F62D8D0090DFC5 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; 53370CD616F62D8D0090DFC5 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; - 53370CD916F62D8D0090DFC5 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard.storyboard; sourceTree = ""; }; 53370CE316F62FF70090DFC5 /* UYLTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UYLTableViewController.h; path = ../UYLTableViewController.h; sourceTree = ""; }; 53370CE416F62FF70090DFC5 /* UYLTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = UYLTableViewController.m; path = ../UYLTableViewController.m; sourceTree = ""; }; 537C3B7517121F9100FA27ED /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; @@ -140,15 +140,16 @@ isa = PBXProject; attributes = { CLASSPREFIX = UYL; - LastUpgradeCheck = 0460; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; }; buildConfigurationList = 53370CB816F62D8D0090DFC5 /* Build configuration list for PBXProject "restore" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = 53370CB416F62D8D0090DFC5; productRefGroup = 53370CBE16F62D8D0090DFC5 /* Products */; @@ -202,7 +203,7 @@ 53370CD816F62D8D0090DFC5 /* MainStoryboard.storyboard */ = { isa = PBXVariantGroup; children = ( - 53370CD916F62D8D0090DFC5 /* en */, + 5334608723CA275700BE943E /* Base */, ); name = MainStoryboard.storyboard; sourceTree = ""; @@ -214,28 +215,47 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; @@ -245,21 +265,39 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; @@ -272,6 +310,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "restore/restore-Prefix.pch"; INFOPLIST_FILE = "restore/restore-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; @@ -283,6 +322,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "restore/restore-Prefix.pch"; INFOPLIST_FILE = "restore/restore-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; diff --git a/BUG TableView State Restore/restore/en.lproj/MainStoryboard.storyboard b/BUG TableView State Restore/restore/Base.lproj/MainStoryboard.storyboard similarity index 60% rename from BUG TableView State Restore/restore/en.lproj/MainStoryboard.storyboard rename to BUG TableView State Restore/restore/Base.lproj/MainStoryboard.storyboard index e233416..39f83d9 100644 --- a/BUG TableView State Restore/restore/en.lproj/MainStoryboard.storyboard +++ b/BUG TableView State Restore/restore/Base.lproj/MainStoryboard.storyboard @@ -1,33 +1,37 @@ - - + + + - + + + - - + + - + - + - - + + - - - + @@ -39,17 +43,7 @@ - + - - - - - - - - - - - \ No newline at end of file + diff --git a/BUG TableView State Restore/restore/restore-Info.plist b/BUG TableView State Restore/restore/restore-Info.plist index e20c6df..36d8600 100644 --- a/BUG TableView State Restore/restore/restore-Info.plist +++ b/BUG TableView State Restore/restore/restore-Info.plist @@ -9,7 +9,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - com.useyourloaf.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/Refresh/README.md b/Refresh/README.md index 270b6b7..793948c 100644 --- a/Refresh/README.md +++ b/Refresh/README.md @@ -1,5 +1,6 @@ ## Refresh - Pull-to-refresh control for a table view controller + Version 1.2 11 Jan 2020 Update for Xcode 11 Version 1.1 25 Nov 2016 Update for Xcode 8 and general clean-up. Version 1.0 18 June 2013 Initial Version @@ -10,8 +11,8 @@ control for table views by adding a UIRefreshControl to a table view controller using Interface Builder. This project uses Objective-C and has been updated for compatibility -with Xcode 8.1. +with Xcode 11. For further details see the following post: -+ [UIRefreshControl Fun and Games](http://useyourloaf.com/blog/uirefreshcontrol-fun-and-games/) ++ [UIRefreshControl Fun and Games](https://useyourloaf.com/blog/uirefreshcontrol-fun-and-games/) diff --git a/Refresh/Refresh.xcodeproj/project.pbxproj b/Refresh/Refresh.xcodeproj/project.pbxproj index 7f7b858..a6839d5 100644 --- a/Refresh/Refresh.xcodeproj/project.pbxproj +++ b/Refresh/Refresh.xcodeproj/project.pbxproj @@ -133,12 +133,12 @@ isa = PBXProject; attributes = { CLASSPREFIX = UYL; - LastUpgradeCheck = 0810; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; }; buildConfigurationList = 530A6028176F8FBF004F85D9 /* Build configuration list for PBXProject "Refresh" */; compatibilityVersion = "Xcode 8.0"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -205,15 +205,24 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -246,15 +255,24 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -286,6 +304,7 @@ INFOPLIST_FILE = "Refresh/Refresh-Info.plist"; PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = app; }; name = Debug; @@ -300,6 +319,7 @@ INFOPLIST_FILE = "Refresh/Refresh-Info.plist"; PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = app; }; name = Release; diff --git a/Refresh/Refresh/Images.xcassets/AppIcon.appiconset/Contents.json b/Refresh/Refresh/Images.xcassets/AppIcon.appiconset/Contents.json index b8236c6..19882d5 100644 --- a/Refresh/Refresh/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/Refresh/Refresh/Images.xcassets/AppIcon.appiconset/Contents.json @@ -39,6 +39,11 @@ "idiom" : "iphone", "size" : "60x60", "scale" : "3x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" } ], "info" : { From f5ad5ae96ec000cfcc76aa0eb8b56aa3922fbd90 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Sat, 11 Jan 2020 15:56:58 +0000 Subject: [PATCH 40/56] Archive BUG TableView State Restore --- .../BUG TableView State Restore}/README | 0 .../UYLTableViewController.h | 0 .../UYLTableViewController.m | 0 .../restore.xcodeproj/project.pbxproj | 0 .../restore/Base.lproj/MainStoryboard.storyboard | 0 .../restore/Default-568h@2x.png | Bin .../restore/Default.png | Bin .../restore/Default@2x.png | Bin .../restore/NavStoryboard.storyboard | 0 .../restore/UYLAppDelegate.h | 0 .../restore/UYLAppDelegate.m | 0 .../restore/en.lproj/InfoPlist.strings | 0 .../BUG TableView State Restore}/restore/main.m | 0 .../restore/restore-Info.plist | 0 .../restore/restore-Prefix.pch | 0 15 files changed, 0 insertions(+), 0 deletions(-) rename {BUG TableView State Restore => Archive/BUG TableView State Restore}/README (100%) rename {BUG TableView State Restore => Archive/BUG TableView State Restore}/UYLTableViewController.h (100%) rename {BUG TableView State Restore => Archive/BUG TableView State Restore}/UYLTableViewController.m (100%) rename {BUG TableView State Restore => Archive/BUG TableView State Restore}/restore.xcodeproj/project.pbxproj (100%) rename {BUG TableView State Restore => Archive/BUG TableView State Restore}/restore/Base.lproj/MainStoryboard.storyboard (100%) rename {BUG TableView State Restore => Archive/BUG TableView State Restore}/restore/Default-568h@2x.png (100%) rename {BUG TableView State Restore => Archive/BUG TableView State Restore}/restore/Default.png (100%) rename {BUG TableView State Restore => Archive/BUG TableView State Restore}/restore/Default@2x.png (100%) rename {BUG TableView State Restore => Archive/BUG TableView State Restore}/restore/NavStoryboard.storyboard (100%) rename {BUG TableView State Restore => Archive/BUG TableView State Restore}/restore/UYLAppDelegate.h (100%) rename {BUG TableView State Restore => Archive/BUG TableView State Restore}/restore/UYLAppDelegate.m (100%) rename {BUG TableView State Restore => Archive/BUG TableView State Restore}/restore/en.lproj/InfoPlist.strings (100%) rename {BUG TableView State Restore => Archive/BUG TableView State Restore}/restore/main.m (100%) rename {BUG TableView State Restore => Archive/BUG TableView State Restore}/restore/restore-Info.plist (100%) rename {BUG TableView State Restore => Archive/BUG TableView State Restore}/restore/restore-Prefix.pch (100%) diff --git a/BUG TableView State Restore/README b/Archive/BUG TableView State Restore/README similarity index 100% rename from BUG TableView State Restore/README rename to Archive/BUG TableView State Restore/README diff --git a/BUG TableView State Restore/UYLTableViewController.h b/Archive/BUG TableView State Restore/UYLTableViewController.h similarity index 100% rename from BUG TableView State Restore/UYLTableViewController.h rename to Archive/BUG TableView State Restore/UYLTableViewController.h diff --git a/BUG TableView State Restore/UYLTableViewController.m b/Archive/BUG TableView State Restore/UYLTableViewController.m similarity index 100% rename from BUG TableView State Restore/UYLTableViewController.m rename to Archive/BUG TableView State Restore/UYLTableViewController.m diff --git a/BUG TableView State Restore/restore.xcodeproj/project.pbxproj b/Archive/BUG TableView State Restore/restore.xcodeproj/project.pbxproj similarity index 100% rename from BUG TableView State Restore/restore.xcodeproj/project.pbxproj rename to Archive/BUG TableView State Restore/restore.xcodeproj/project.pbxproj diff --git a/BUG TableView State Restore/restore/Base.lproj/MainStoryboard.storyboard b/Archive/BUG TableView State Restore/restore/Base.lproj/MainStoryboard.storyboard similarity index 100% rename from BUG TableView State Restore/restore/Base.lproj/MainStoryboard.storyboard rename to Archive/BUG TableView State Restore/restore/Base.lproj/MainStoryboard.storyboard diff --git a/BUG TableView State Restore/restore/Default-568h@2x.png b/Archive/BUG TableView State Restore/restore/Default-568h@2x.png similarity index 100% rename from BUG TableView State Restore/restore/Default-568h@2x.png rename to Archive/BUG TableView State Restore/restore/Default-568h@2x.png diff --git a/BUG TableView State Restore/restore/Default.png b/Archive/BUG TableView State Restore/restore/Default.png similarity index 100% rename from BUG TableView State Restore/restore/Default.png rename to Archive/BUG TableView State Restore/restore/Default.png diff --git a/BUG TableView State Restore/restore/Default@2x.png b/Archive/BUG TableView State Restore/restore/Default@2x.png similarity index 100% rename from BUG TableView State Restore/restore/Default@2x.png rename to Archive/BUG TableView State Restore/restore/Default@2x.png diff --git a/BUG TableView State Restore/restore/NavStoryboard.storyboard b/Archive/BUG TableView State Restore/restore/NavStoryboard.storyboard similarity index 100% rename from BUG TableView State Restore/restore/NavStoryboard.storyboard rename to Archive/BUG TableView State Restore/restore/NavStoryboard.storyboard diff --git a/BUG TableView State Restore/restore/UYLAppDelegate.h b/Archive/BUG TableView State Restore/restore/UYLAppDelegate.h similarity index 100% rename from BUG TableView State Restore/restore/UYLAppDelegate.h rename to Archive/BUG TableView State Restore/restore/UYLAppDelegate.h diff --git a/BUG TableView State Restore/restore/UYLAppDelegate.m b/Archive/BUG TableView State Restore/restore/UYLAppDelegate.m similarity index 100% rename from BUG TableView State Restore/restore/UYLAppDelegate.m rename to Archive/BUG TableView State Restore/restore/UYLAppDelegate.m diff --git a/BUG TableView State Restore/restore/en.lproj/InfoPlist.strings b/Archive/BUG TableView State Restore/restore/en.lproj/InfoPlist.strings similarity index 100% rename from BUG TableView State Restore/restore/en.lproj/InfoPlist.strings rename to Archive/BUG TableView State Restore/restore/en.lproj/InfoPlist.strings diff --git a/BUG TableView State Restore/restore/main.m b/Archive/BUG TableView State Restore/restore/main.m similarity index 100% rename from BUG TableView State Restore/restore/main.m rename to Archive/BUG TableView State Restore/restore/main.m diff --git a/BUG TableView State Restore/restore/restore-Info.plist b/Archive/BUG TableView State Restore/restore/restore-Info.plist similarity index 100% rename from BUG TableView State Restore/restore/restore-Info.plist rename to Archive/BUG TableView State Restore/restore/restore-Info.plist diff --git a/BUG TableView State Restore/restore/restore-Prefix.pch b/Archive/BUG TableView State Restore/restore/restore-Prefix.pch similarity index 100% rename from BUG TableView State Restore/restore/restore-Prefix.pch rename to Archive/BUG TableView State Restore/restore/restore-Prefix.pch From be1ee3ef2f7d2bd8b5bd04116e87727eb4e07440 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Sat, 11 Jan 2020 17:30:02 +0000 Subject: [PATCH 41/56] Archive StaticTable, Styles and TaskTimer projects --- .../StaticTable}/README.markdown | 0 .../StaticTable.xcodeproj/project.pbxproj | 67 ++- .../StaticTable/Settings.storyboard | 259 ++++----- .../StaticTable/StaticTable-Info.plist | 2 +- .../StaticTable/StaticTable-Prefix.pch | 0 .../UYLAdvancedSettingsViewController.h | 0 .../UYLAdvancedSettingsViewController.m | 0 .../StaticTable}/StaticTable/UYLAppDelegate.h | 0 .../StaticTable}/StaticTable/UYLAppDelegate.m | 0 .../StaticTable/UYLFirstViewController.h | 0 .../StaticTable/UYLFirstViewController.m | 0 .../StaticTable/UYLFirstViewController.xib | 35 ++ .../UYLGeneralSettingsTableViewController.h | 0 .../UYLGeneralSettingsTableViewController.m | 0 .../UYLRotatingTableViewController.h | 0 .../UYLRotatingTableViewController.m | 0 .../StaticTable/en.lproj/InfoPlist.strings | 0 .../StaticTable}/StaticTable/first.png | Bin .../StaticTable}/StaticTable/first@2x.png | Bin .../StaticTable}/StaticTable/main.m | 0 .../StaticTable}/StaticTable/second.png | Bin .../StaticTable}/StaticTable/second@2x.png | Bin Archive/Styles/README | 71 +++ .../Styles/Styles.xcodeproj/project.pbxproj | 458 ++++++++++++++++ Archive/Styles/Styles/LaunchScreen.storyboard | 29 ++ .../Styles/Styles/MainStoryboard.storyboard | 484 +++++++++++++++++ .../Resources/back-button-landscape.png | Bin 0 -> 838 bytes .../Resources/back-button-landscape@2x.png | Bin 0 -> 2005 bytes .../Styles/Styles/Resources/back-button.png | Bin 0 -> 1012 bytes .../Styles/Resources/back-button@2x.png | Bin 0 -> 2384 bytes Archive/Styles/Styles/Resources/divider.png | Bin 0 -> 72 bytes .../Styles/Styles/Resources/divider@2x.png | Bin 0 -> 75 bytes .../Styles/Styles/Resources/green-button.png | Bin 0 -> 2305 bytes .../Styles/Resources/green-button@2x.png | Bin 0 -> 7044 bytes .../Styles/Resources/navbar-landscape.png | Bin 0 -> 1631 bytes .../Styles/Resources/navbar-landscape@2x.png | Bin 0 -> 4652 bytes Archive/Styles/Styles/Resources/navbar.png | Bin 0 -> 2009 bytes Archive/Styles/Styles/Resources/navbar@2x.png | Bin 0 -> 6321 bytes .../Styles/Styles/Resources/orange-button.png | Bin 0 -> 2111 bytes .../Styles/Resources/orange-button@2x.png | Bin 0 -> 7016 bytes Archive/Styles/Styles/Resources/orange.png | Bin 0 -> 82 bytes Archive/Styles/Styles/Resources/orange@2x.png | Bin 0 -> 78 bytes .../Styles/Styles/Resources/red-button.png | Bin 0 -> 2039 bytes .../Styles/Styles/Resources/red-button@2x.png | Bin 0 -> 6696 bytes .../Styles/Styles/Resources/steel-button.png | Bin 0 -> 2562 bytes .../Styles/Resources/steel-button@2x.png | Bin 0 -> 8079 bytes Archive/Styles/Styles/Styles-Info.plist | 43 ++ Archive/Styles/Styles/Styles-Prefix.pch | 14 + Archive/Styles/Styles/UYLAppDelegate.h | 39 ++ Archive/Styles/Styles/UYLAppDelegate.m | 46 ++ Archive/Styles/Styles/UYLListViewController.h | 38 ++ Archive/Styles/Styles/UYLListViewController.m | 45 ++ Archive/Styles/Styles/UYLOkButton.h | 36 ++ Archive/Styles/Styles/UYLOkButton.m | 36 ++ Archive/Styles/Styles/UYLResetButton.h | 36 ++ Archive/Styles/Styles/UYLResetButton.m | 36 ++ .../Styles/Styles/UYLRotatingViewController.h | 38 ++ .../Styles/Styles/UYLRotatingViewController.m | 49 ++ Archive/Styles/Styles/UYLStyleController.h | 39 ++ Archive/Styles/Styles/UYLStyleController.m | 125 +++++ Archive/Styles/Styles/UYLZeroButton.h | 36 ++ Archive/Styles/Styles/UYLZeroButton.m | 36 ++ .../Styles/Styles/en.lproj/InfoPlist.strings | 2 + Archive/Styles/Styles/main.m | 43 ++ Archive/TaskTimer/README | 95 ++++ .../TaskTimer.xcodeproj/project.pbxproj | 493 ++++++++++++++++++ .../UYLTaskListViewController_iPad.xib | 29 ++ .../UYLTaskListViewController_iPhone.xib | 28 + .../Base.lproj/UYLTaskViewController_iPad.xib | 65 +++ .../UYLTaskViewController_iPhone.xib | 64 +++ .../TaskTimer/NSNumber+UYLTimeFormatter.h | 39 ++ .../TaskTimer/NSNumber+UYLTimeFormatter.m | 63 +++ Archive/TaskTimer/TaskTimer/Task.h | 44 ++ Archive/TaskTimer/TaskTimer/Task.m | 43 ++ .../TaskTimer/TaskTimer/TaskTimer-Info.plist | 46 ++ .../TaskTimer/TaskTimer/TaskTimer-Prefix.pch | 15 + .../TaskTimer.xcdatamodeld/.xccurrentversion | 8 + .../Accessibile.xcdatamodel/contents | 12 + Archive/TaskTimer/TaskTimer/UYLAppDelegate.h | 49 ++ Archive/TaskTimer/TaskTimer/UYLAppDelegate.m | 164 ++++++ Archive/TaskTimer/TaskTimer/UYLCounterView.h | 51 ++ Archive/TaskTimer/TaskTimer/UYLCounterView.m | 292 +++++++++++ .../TaskTimer/UYLTaskListViewController.h | 43 ++ .../TaskTimer/UYLTaskListViewController.m | 247 +++++++++ .../TaskTimer/UYLTaskViewController.h | 43 ++ .../TaskTimer/UYLTaskViewController.m | 299 +++++++++++ Archive/TaskTimer/TaskTimer/checked.png | Bin 0 -> 1790 bytes Archive/TaskTimer/TaskTimer/checked@2x.png | Bin 0 -> 2241 bytes .../TaskTimer/en.lproj/InfoPlist.strings | 2 + Archive/TaskTimer/TaskTimer/main.m | 43 ++ Archive/TaskTimer/TaskTimer/redbutton.png | Bin 0 -> 2242 bytes Archive/TaskTimer/TaskTimer/start.png | Bin 0 -> 2182 bytes Archive/TaskTimer/TaskTimer/start@2x.png | Bin 0 -> 2864 bytes Archive/TaskTimer/TaskTimer/stop.png | Bin 0 -> 2173 bytes Archive/TaskTimer/TaskTimer/stop@2x.png | Bin 0 -> 2845 bytes Archive/TaskTimer/TaskTimer/unchecked.png | Bin 0 -> 1536 bytes Archive/TaskTimer/TaskTimer/unchecked@2x.png | Bin 0 -> 1603 bytes .../StaticTable/UYLFirstViewController.xib | 223 -------- 98 files changed, 4261 insertions(+), 381 deletions(-) rename {StaticTable => Archive/StaticTable}/README.markdown (100%) rename {StaticTable => Archive/StaticTable}/StaticTable.xcodeproj/project.pbxproj (87%) rename {StaticTable => Archive/StaticTable}/StaticTable/Settings.storyboard (70%) rename {StaticTable => Archive/StaticTable}/StaticTable/StaticTable-Info.plist (94%) rename {StaticTable => Archive/StaticTable}/StaticTable/StaticTable-Prefix.pch (100%) rename {StaticTable => Archive/StaticTable}/StaticTable/UYLAdvancedSettingsViewController.h (100%) rename {StaticTable => Archive/StaticTable}/StaticTable/UYLAdvancedSettingsViewController.m (100%) rename {StaticTable => Archive/StaticTable}/StaticTable/UYLAppDelegate.h (100%) rename {StaticTable => Archive/StaticTable}/StaticTable/UYLAppDelegate.m (100%) rename {StaticTable => Archive/StaticTable}/StaticTable/UYLFirstViewController.h (100%) rename {StaticTable => Archive/StaticTable}/StaticTable/UYLFirstViewController.m (100%) create mode 100644 Archive/StaticTable/StaticTable/UYLFirstViewController.xib rename {StaticTable => Archive/StaticTable}/StaticTable/UYLGeneralSettingsTableViewController.h (100%) rename {StaticTable => Archive/StaticTable}/StaticTable/UYLGeneralSettingsTableViewController.m (100%) rename {StaticTable => Archive/StaticTable}/StaticTable/UYLRotatingTableViewController.h (100%) rename {StaticTable => Archive/StaticTable}/StaticTable/UYLRotatingTableViewController.m (100%) rename {StaticTable => Archive/StaticTable}/StaticTable/en.lproj/InfoPlist.strings (100%) rename {StaticTable => Archive/StaticTable}/StaticTable/first.png (100%) rename {StaticTable => Archive/StaticTable}/StaticTable/first@2x.png (100%) rename {StaticTable => Archive/StaticTable}/StaticTable/main.m (100%) rename {StaticTable => Archive/StaticTable}/StaticTable/second.png (100%) rename {StaticTable => Archive/StaticTable}/StaticTable/second@2x.png (100%) create mode 100644 Archive/Styles/README create mode 100644 Archive/Styles/Styles.xcodeproj/project.pbxproj create mode 100644 Archive/Styles/Styles/LaunchScreen.storyboard create mode 100644 Archive/Styles/Styles/MainStoryboard.storyboard create mode 100644 Archive/Styles/Styles/Resources/back-button-landscape.png create mode 100644 Archive/Styles/Styles/Resources/back-button-landscape@2x.png create mode 100644 Archive/Styles/Styles/Resources/back-button.png create mode 100644 Archive/Styles/Styles/Resources/back-button@2x.png create mode 100644 Archive/Styles/Styles/Resources/divider.png create mode 100644 Archive/Styles/Styles/Resources/divider@2x.png create mode 100644 Archive/Styles/Styles/Resources/green-button.png create mode 100644 Archive/Styles/Styles/Resources/green-button@2x.png create mode 100644 Archive/Styles/Styles/Resources/navbar-landscape.png create mode 100644 Archive/Styles/Styles/Resources/navbar-landscape@2x.png create mode 100644 Archive/Styles/Styles/Resources/navbar.png create mode 100644 Archive/Styles/Styles/Resources/navbar@2x.png create mode 100644 Archive/Styles/Styles/Resources/orange-button.png create mode 100644 Archive/Styles/Styles/Resources/orange-button@2x.png create mode 100644 Archive/Styles/Styles/Resources/orange.png create mode 100644 Archive/Styles/Styles/Resources/orange@2x.png create mode 100644 Archive/Styles/Styles/Resources/red-button.png create mode 100644 Archive/Styles/Styles/Resources/red-button@2x.png create mode 100644 Archive/Styles/Styles/Resources/steel-button.png create mode 100644 Archive/Styles/Styles/Resources/steel-button@2x.png create mode 100644 Archive/Styles/Styles/Styles-Info.plist create mode 100644 Archive/Styles/Styles/Styles-Prefix.pch create mode 100644 Archive/Styles/Styles/UYLAppDelegate.h create mode 100644 Archive/Styles/Styles/UYLAppDelegate.m create mode 100644 Archive/Styles/Styles/UYLListViewController.h create mode 100644 Archive/Styles/Styles/UYLListViewController.m create mode 100644 Archive/Styles/Styles/UYLOkButton.h create mode 100644 Archive/Styles/Styles/UYLOkButton.m create mode 100644 Archive/Styles/Styles/UYLResetButton.h create mode 100644 Archive/Styles/Styles/UYLResetButton.m create mode 100644 Archive/Styles/Styles/UYLRotatingViewController.h create mode 100644 Archive/Styles/Styles/UYLRotatingViewController.m create mode 100644 Archive/Styles/Styles/UYLStyleController.h create mode 100644 Archive/Styles/Styles/UYLStyleController.m create mode 100644 Archive/Styles/Styles/UYLZeroButton.h create mode 100644 Archive/Styles/Styles/UYLZeroButton.m create mode 100644 Archive/Styles/Styles/en.lproj/InfoPlist.strings create mode 100644 Archive/Styles/Styles/main.m create mode 100644 Archive/TaskTimer/README create mode 100644 Archive/TaskTimer/TaskTimer.xcodeproj/project.pbxproj create mode 100644 Archive/TaskTimer/TaskTimer/Base.lproj/UYLTaskListViewController_iPad.xib create mode 100644 Archive/TaskTimer/TaskTimer/Base.lproj/UYLTaskListViewController_iPhone.xib create mode 100644 Archive/TaskTimer/TaskTimer/Base.lproj/UYLTaskViewController_iPad.xib create mode 100644 Archive/TaskTimer/TaskTimer/Base.lproj/UYLTaskViewController_iPhone.xib create mode 100644 Archive/TaskTimer/TaskTimer/NSNumber+UYLTimeFormatter.h create mode 100644 Archive/TaskTimer/TaskTimer/NSNumber+UYLTimeFormatter.m create mode 100644 Archive/TaskTimer/TaskTimer/Task.h create mode 100644 Archive/TaskTimer/TaskTimer/Task.m create mode 100644 Archive/TaskTimer/TaskTimer/TaskTimer-Info.plist create mode 100644 Archive/TaskTimer/TaskTimer/TaskTimer-Prefix.pch create mode 100644 Archive/TaskTimer/TaskTimer/TaskTimer.xcdatamodeld/.xccurrentversion create mode 100644 Archive/TaskTimer/TaskTimer/TaskTimer.xcdatamodeld/Accessibile.xcdatamodel/contents create mode 100644 Archive/TaskTimer/TaskTimer/UYLAppDelegate.h create mode 100644 Archive/TaskTimer/TaskTimer/UYLAppDelegate.m create mode 100644 Archive/TaskTimer/TaskTimer/UYLCounterView.h create mode 100644 Archive/TaskTimer/TaskTimer/UYLCounterView.m create mode 100644 Archive/TaskTimer/TaskTimer/UYLTaskListViewController.h create mode 100644 Archive/TaskTimer/TaskTimer/UYLTaskListViewController.m create mode 100644 Archive/TaskTimer/TaskTimer/UYLTaskViewController.h create mode 100644 Archive/TaskTimer/TaskTimer/UYLTaskViewController.m create mode 100644 Archive/TaskTimer/TaskTimer/checked.png create mode 100644 Archive/TaskTimer/TaskTimer/checked@2x.png create mode 100644 Archive/TaskTimer/TaskTimer/en.lproj/InfoPlist.strings create mode 100644 Archive/TaskTimer/TaskTimer/main.m create mode 100644 Archive/TaskTimer/TaskTimer/redbutton.png create mode 100644 Archive/TaskTimer/TaskTimer/start.png create mode 100644 Archive/TaskTimer/TaskTimer/start@2x.png create mode 100644 Archive/TaskTimer/TaskTimer/stop.png create mode 100644 Archive/TaskTimer/TaskTimer/stop@2x.png create mode 100644 Archive/TaskTimer/TaskTimer/unchecked.png create mode 100644 Archive/TaskTimer/TaskTimer/unchecked@2x.png delete mode 100644 StaticTable/StaticTable/UYLFirstViewController.xib diff --git a/StaticTable/README.markdown b/Archive/StaticTable/README.markdown similarity index 100% rename from StaticTable/README.markdown rename to Archive/StaticTable/README.markdown diff --git a/StaticTable/StaticTable.xcodeproj/project.pbxproj b/Archive/StaticTable/StaticTable.xcodeproj/project.pbxproj similarity index 87% rename from StaticTable/StaticTable.xcodeproj/project.pbxproj rename to Archive/StaticTable/StaticTable.xcodeproj/project.pbxproj index bb3438f..e8d0a88 100644 --- a/StaticTable/StaticTable.xcodeproj/project.pbxproj +++ b/Archive/StaticTable/StaticTable.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -42,7 +42,7 @@ 532B11F7154F362C004B4780 /* second.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = second.png; sourceTree = ""; }; 532B11F9154F362C004B4780 /* second@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "second@2x.png"; sourceTree = ""; }; 532B1206154F3712004B4780 /* Settings.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Settings.storyboard; sourceTree = ""; }; - 53ACC43215582581005E26DC /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; path = README.markdown; sourceTree = ""; }; + 53ACC43215582581005E26DC /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.markdown; sourceTree = ""; }; 53F33DE215508DBE0094277E /* UYLGeneralSettingsTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLGeneralSettingsTableViewController.h; sourceTree = ""; }; 53F33DE315508DBE0094277E /* UYLGeneralSettingsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLGeneralSettingsTableViewController.m; sourceTree = ""; }; 53F33DE915509B360094277E /* UYLAdvancedSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLAdvancedSettingsViewController.h; sourceTree = ""; }; @@ -190,14 +190,15 @@ isa = PBXProject; attributes = { CLASSPREFIX = UYL; - LastUpgradeCheck = 0430; + LastUpgradeCheck = 1120; }; buildConfigurationList = 532B11D1154F362C004B4780 /* Build configuration list for PBXProject "StaticTable" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + compatibilityVersion = "Xcode 11.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = 532B11CC154F362C004B4780; productRefGroup = 532B11D8154F362C004B4780 /* Products */; @@ -259,12 +260,32 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ENABLE_OBJC_ARC = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -272,10 +293,14 @@ ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; @@ -284,16 +309,38 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ENABLE_OBJC_ARC = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; @@ -306,6 +353,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "StaticTable/StaticTable-Prefix.pch"; INFOPLIST_FILE = "StaticTable/StaticTable-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; @@ -317,6 +365,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "StaticTable/StaticTable-Prefix.pch"; INFOPLIST_FILE = "StaticTable/StaticTable-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; diff --git a/StaticTable/StaticTable/Settings.storyboard b/Archive/StaticTable/StaticTable/Settings.storyboard similarity index 70% rename from StaticTable/StaticTable/Settings.storyboard rename to Archive/StaticTable/StaticTable/Settings.storyboard index 9a8474f..bd38de0 100644 --- a/StaticTable/StaticTable/Settings.storyboard +++ b/Archive/StaticTable/StaticTable/Settings.storyboard @@ -1,140 +1,136 @@ - - + + + - - - + + + - + - - - + + - + - - + + - - + + - - - + - + - - + + - - + + - - - + - + - - + + - - + + - - - + - + - - + + - - + + - - - + @@ -154,132 +150,126 @@ + - + - + - - - + + - + - - + + - - - + - + - - + + - - - + - + - - + + - - - + - + - - + + - - - + - + - - + + - - - + - + - - + + - - - + @@ -291,17 +281,17 @@ + - + - - + @@ -309,38 +299,37 @@ + - + - + - - - + + - + - - + + - - - + @@ -350,22 +339,21 @@ - + - - + + - - - + @@ -380,34 +368,9 @@ + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + diff --git a/StaticTable/StaticTable/StaticTable-Info.plist b/Archive/StaticTable/StaticTable/StaticTable-Info.plist similarity index 94% rename from StaticTable/StaticTable/StaticTable-Info.plist rename to Archive/StaticTable/StaticTable/StaticTable-Info.plist index 408dd6d..9989d33 100644 --- a/StaticTable/StaticTable/StaticTable-Info.plist +++ b/Archive/StaticTable/StaticTable/StaticTable-Info.plist @@ -9,7 +9,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - com.useyourloaf.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/StaticTable/StaticTable/StaticTable-Prefix.pch b/Archive/StaticTable/StaticTable/StaticTable-Prefix.pch similarity index 100% rename from StaticTable/StaticTable/StaticTable-Prefix.pch rename to Archive/StaticTable/StaticTable/StaticTable-Prefix.pch diff --git a/StaticTable/StaticTable/UYLAdvancedSettingsViewController.h b/Archive/StaticTable/StaticTable/UYLAdvancedSettingsViewController.h similarity index 100% rename from StaticTable/StaticTable/UYLAdvancedSettingsViewController.h rename to Archive/StaticTable/StaticTable/UYLAdvancedSettingsViewController.h diff --git a/StaticTable/StaticTable/UYLAdvancedSettingsViewController.m b/Archive/StaticTable/StaticTable/UYLAdvancedSettingsViewController.m similarity index 100% rename from StaticTable/StaticTable/UYLAdvancedSettingsViewController.m rename to Archive/StaticTable/StaticTable/UYLAdvancedSettingsViewController.m diff --git a/StaticTable/StaticTable/UYLAppDelegate.h b/Archive/StaticTable/StaticTable/UYLAppDelegate.h similarity index 100% rename from StaticTable/StaticTable/UYLAppDelegate.h rename to Archive/StaticTable/StaticTable/UYLAppDelegate.h diff --git a/StaticTable/StaticTable/UYLAppDelegate.m b/Archive/StaticTable/StaticTable/UYLAppDelegate.m similarity index 100% rename from StaticTable/StaticTable/UYLAppDelegate.m rename to Archive/StaticTable/StaticTable/UYLAppDelegate.m diff --git a/StaticTable/StaticTable/UYLFirstViewController.h b/Archive/StaticTable/StaticTable/UYLFirstViewController.h similarity index 100% rename from StaticTable/StaticTable/UYLFirstViewController.h rename to Archive/StaticTable/StaticTable/UYLFirstViewController.h diff --git a/StaticTable/StaticTable/UYLFirstViewController.m b/Archive/StaticTable/StaticTable/UYLFirstViewController.m similarity index 100% rename from StaticTable/StaticTable/UYLFirstViewController.m rename to Archive/StaticTable/StaticTable/UYLFirstViewController.m diff --git a/Archive/StaticTable/StaticTable/UYLFirstViewController.xib b/Archive/StaticTable/StaticTable/UYLFirstViewController.xib new file mode 100644 index 0000000..8325205 --- /dev/null +++ b/Archive/StaticTable/StaticTable/UYLFirstViewController.xib @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StaticTable/StaticTable/UYLGeneralSettingsTableViewController.h b/Archive/StaticTable/StaticTable/UYLGeneralSettingsTableViewController.h similarity index 100% rename from StaticTable/StaticTable/UYLGeneralSettingsTableViewController.h rename to Archive/StaticTable/StaticTable/UYLGeneralSettingsTableViewController.h diff --git a/StaticTable/StaticTable/UYLGeneralSettingsTableViewController.m b/Archive/StaticTable/StaticTable/UYLGeneralSettingsTableViewController.m similarity index 100% rename from StaticTable/StaticTable/UYLGeneralSettingsTableViewController.m rename to Archive/StaticTable/StaticTable/UYLGeneralSettingsTableViewController.m diff --git a/StaticTable/StaticTable/UYLRotatingTableViewController.h b/Archive/StaticTable/StaticTable/UYLRotatingTableViewController.h similarity index 100% rename from StaticTable/StaticTable/UYLRotatingTableViewController.h rename to Archive/StaticTable/StaticTable/UYLRotatingTableViewController.h diff --git a/StaticTable/StaticTable/UYLRotatingTableViewController.m b/Archive/StaticTable/StaticTable/UYLRotatingTableViewController.m similarity index 100% rename from StaticTable/StaticTable/UYLRotatingTableViewController.m rename to Archive/StaticTable/StaticTable/UYLRotatingTableViewController.m diff --git a/StaticTable/StaticTable/en.lproj/InfoPlist.strings b/Archive/StaticTable/StaticTable/en.lproj/InfoPlist.strings similarity index 100% rename from StaticTable/StaticTable/en.lproj/InfoPlist.strings rename to Archive/StaticTable/StaticTable/en.lproj/InfoPlist.strings diff --git a/StaticTable/StaticTable/first.png b/Archive/StaticTable/StaticTable/first.png similarity index 100% rename from StaticTable/StaticTable/first.png rename to Archive/StaticTable/StaticTable/first.png diff --git a/StaticTable/StaticTable/first@2x.png b/Archive/StaticTable/StaticTable/first@2x.png similarity index 100% rename from StaticTable/StaticTable/first@2x.png rename to Archive/StaticTable/StaticTable/first@2x.png diff --git a/StaticTable/StaticTable/main.m b/Archive/StaticTable/StaticTable/main.m similarity index 100% rename from StaticTable/StaticTable/main.m rename to Archive/StaticTable/StaticTable/main.m diff --git a/StaticTable/StaticTable/second.png b/Archive/StaticTable/StaticTable/second.png similarity index 100% rename from StaticTable/StaticTable/second.png rename to Archive/StaticTable/StaticTable/second.png diff --git a/StaticTable/StaticTable/second@2x.png b/Archive/StaticTable/StaticTable/second@2x.png similarity index 100% rename from StaticTable/StaticTable/second@2x.png rename to Archive/StaticTable/StaticTable/second@2x.png diff --git a/Archive/Styles/README b/Archive/Styles/README new file mode 100644 index 0000000..029456c --- /dev/null +++ b/Archive/Styles/README @@ -0,0 +1,71 @@ +======================================================================= +Styles + +Version 1.0 24 August 2012 Initial Version +======================================================================= + +The Styles App is an example of how to use the UIAppearance protocol to +customise the appearance of common UIKit controls. + +For further details see: + +useyourloaf.com/blog/using-appearance-proxy-to-style-apps/ + + +======================================================================= +App Delegate +======================================================================= + +UYLAppDelegate.h +UYLAppDelegate.m + +The App delegate is largely unmodified from the template code. The use of +a storyboard to configure and load the UI means there is not much for the +app delegate to do in this simple app other than setup the appearance. + +======================================================================= +Style Controller +======================================================================= + +The core of the appearance code is contained in the custom UYLStyleController +class. This class has a single public class method +applyStyle which +contains all of the UIAppearance related code. Refer to the blog post +for a full description. + +======================================================================= +Views +======================================================================= + +MainStoryboard.storyboard + +The storyboard file defines the user interface for the application. It +uses a navigation controller with a static table view as the root view +to list each of the UIKit control views. + +UYLOkButton.h +UYLOkButton.m +UYLResetButton.h +UYLResetButton.m +UYLZeroButton.h +UYLZeroButton.m + +These classes are UIButton sub-classes that do nothing other than define +a custom subclass used to allow the appearance of specific buttons to be +modified. + +======================================================================= +Controllers +======================================================================= + +UYLListViewController.h +UYLListViewController.m + +This is a subclass of UITableViewController used for the static table view +containing the list of UIKit controls. The only method that the subclass +actually contains is to enable interface rotation. + +UYLRotatingViewController.h +UYLRotatingViewController.m + +This is a container class used for all of the UIKit control views. The viewDidLoad method is used to set the view background. It also implements +the standard method to enable interface orientation. diff --git a/Archive/Styles/Styles.xcodeproj/project.pbxproj b/Archive/Styles/Styles.xcodeproj/project.pbxproj new file mode 100644 index 0000000..f63390f --- /dev/null +++ b/Archive/Styles/Styles.xcodeproj/project.pbxproj @@ -0,0 +1,458 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 52; + objects = { + +/* Begin PBXBuildFile section */ + 5305B53E15E6310900AC81F4 /* UYLZeroButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 5305B53D15E6310900AC81F4 /* UYLZeroButton.m */; }; + 5305B54615E6408500AC81F4 /* divider.png in Resources */ = {isa = PBXBuildFile; fileRef = 5305B54415E6408500AC81F4 /* divider.png */; }; + 5305B54715E6408500AC81F4 /* divider@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5305B54515E6408500AC81F4 /* divider@2x.png */; }; + 532F266715BDDF7A00321881 /* UYLRotatingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 532F266615BDDF7A00321881 /* UYLRotatingViewController.m */; }; + 532F267915BDE44F00321881 /* UYLResetButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 532F267815BDE44F00321881 /* UYLResetButton.m */; }; + 532F267C15BDEAEB00321881 /* UYLStyleController.m in Sources */ = {isa = PBXBuildFile; fileRef = 532F267B15BDEAEB00321881 /* UYLStyleController.m */; }; + 5334608A23CA316E00BE943E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5334608923CA316E00BE943E /* LaunchScreen.storyboard */; }; + 535734EA15B75876006F0E6A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 535734E915B75876006F0E6A /* UIKit.framework */; }; + 535734EC15B75876006F0E6A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 535734EB15B75876006F0E6A /* Foundation.framework */; }; + 535734EE15B75876006F0E6A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 535734ED15B75876006F0E6A /* CoreGraphics.framework */; }; + 535734F415B75876006F0E6A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 535734F215B75876006F0E6A /* InfoPlist.strings */; }; + 535734F615B75877006F0E6A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 535734F515B75877006F0E6A /* main.m */; }; + 535734FA15B75878006F0E6A /* UYLAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 535734F915B75878006F0E6A /* UYLAppDelegate.m */; }; + 5357350015B75878006F0E6A /* UYLListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 535734FF15B75878006F0E6A /* UYLListViewController.m */; }; + 5374A30A15B7698400B796D2 /* MainStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5374A30915B7698400B796D2 /* MainStoryboard.storyboard */; }; + 53AA526415E56F7A000C8D04 /* green-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA525615E56F7A000C8D04 /* green-button.png */; }; + 53AA526515E56F7A000C8D04 /* green-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA525715E56F7A000C8D04 /* green-button@2x.png */; }; + 53AA526615E56F7A000C8D04 /* navbar-landscape.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA525815E56F7A000C8D04 /* navbar-landscape.png */; }; + 53AA526715E56F7A000C8D04 /* navbar-landscape@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA525915E56F7A000C8D04 /* navbar-landscape@2x.png */; }; + 53AA526815E56F7A000C8D04 /* navbar.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA525A15E56F7A000C8D04 /* navbar.png */; }; + 53AA526915E56F7A000C8D04 /* navbar@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA525B15E56F7A000C8D04 /* navbar@2x.png */; }; + 53AA526A15E56F7A000C8D04 /* orange-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA525C15E56F7A000C8D04 /* orange-button.png */; }; + 53AA526B15E56F7A000C8D04 /* orange-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA525D15E56F7A000C8D04 /* orange-button@2x.png */; }; + 53AA526E15E56F7A000C8D04 /* red-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA526015E56F7A000C8D04 /* red-button.png */; }; + 53AA526F15E56F7A000C8D04 /* red-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA526115E56F7A000C8D04 /* red-button@2x.png */; }; + 53AA527015E56F7A000C8D04 /* steel-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA526215E56F7A000C8D04 /* steel-button.png */; }; + 53AA527115E56F7A000C8D04 /* steel-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA526315E56F7A000C8D04 /* steel-button@2x.png */; }; + 53AA527715E57B0C000C8D04 /* back-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA527615E57B0C000C8D04 /* back-button.png */; }; + 53AA527915E58E9B000C8D04 /* back-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA527815E58E9B000C8D04 /* back-button@2x.png */; }; + 53AA527C15E591BF000C8D04 /* back-button-landscape.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA527A15E591BF000C8D04 /* back-button-landscape.png */; }; + 53AA527D15E591BF000C8D04 /* back-button-landscape@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA527B15E591BF000C8D04 /* back-button-landscape@2x.png */; }; + 53E2967015BF36C800D8AD2A /* UYLOkButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 53E2966F15BF36C800D8AD2A /* UYLOkButton.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 5305B53C15E6310900AC81F4 /* UYLZeroButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLZeroButton.h; sourceTree = ""; }; + 5305B53D15E6310900AC81F4 /* UYLZeroButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLZeroButton.m; sourceTree = ""; }; + 5305B54415E6408500AC81F4 /* divider.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = divider.png; sourceTree = ""; }; + 5305B54515E6408500AC81F4 /* divider@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "divider@2x.png"; sourceTree = ""; }; + 532F266515BDDF7A00321881 /* UYLRotatingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLRotatingViewController.h; sourceTree = ""; }; + 532F266615BDDF7A00321881 /* UYLRotatingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLRotatingViewController.m; sourceTree = ""; }; + 532F267715BDE44F00321881 /* UYLResetButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLResetButton.h; sourceTree = ""; }; + 532F267815BDE44F00321881 /* UYLResetButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLResetButton.m; sourceTree = ""; }; + 532F267A15BDEAEA00321881 /* UYLStyleController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLStyleController.h; sourceTree = ""; }; + 532F267B15BDEAEB00321881 /* UYLStyleController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLStyleController.m; sourceTree = ""; }; + 5334608823CA30B700BE943E /* README */ = {isa = PBXFileReference; lastKnownFileType = text; path = README; sourceTree = ""; }; + 5334608923CA316E00BE943E /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; + 535734E515B75876006F0E6A /* Styles.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Styles.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 535734E915B75876006F0E6A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 535734EB15B75876006F0E6A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 535734ED15B75876006F0E6A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 535734F115B75876006F0E6A /* Styles-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Styles-Info.plist"; sourceTree = ""; }; + 535734F315B75876006F0E6A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 535734F515B75877006F0E6A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 535734F715B75877006F0E6A /* Styles-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Styles-Prefix.pch"; sourceTree = ""; }; + 535734F815B75878006F0E6A /* UYLAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UYLAppDelegate.h; sourceTree = ""; }; + 535734F915B75878006F0E6A /* UYLAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLAppDelegate.m; sourceTree = ""; }; + 535734FE15B75878006F0E6A /* UYLListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UYLListViewController.h; sourceTree = ""; }; + 535734FF15B75878006F0E6A /* UYLListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLListViewController.m; sourceTree = ""; }; + 5374A30915B7698400B796D2 /* MainStoryboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = MainStoryboard.storyboard; sourceTree = ""; }; + 53AA525615E56F7A000C8D04 /* green-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "green-button.png"; sourceTree = ""; }; + 53AA525715E56F7A000C8D04 /* green-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "green-button@2x.png"; sourceTree = ""; }; + 53AA525815E56F7A000C8D04 /* navbar-landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "navbar-landscape.png"; sourceTree = ""; }; + 53AA525915E56F7A000C8D04 /* navbar-landscape@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "navbar-landscape@2x.png"; sourceTree = ""; }; + 53AA525A15E56F7A000C8D04 /* navbar.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = navbar.png; sourceTree = ""; }; + 53AA525B15E56F7A000C8D04 /* navbar@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "navbar@2x.png"; sourceTree = ""; }; + 53AA525C15E56F7A000C8D04 /* orange-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "orange-button.png"; sourceTree = ""; }; + 53AA525D15E56F7A000C8D04 /* orange-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "orange-button@2x.png"; sourceTree = ""; }; + 53AA526015E56F7A000C8D04 /* red-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "red-button.png"; sourceTree = ""; }; + 53AA526115E56F7A000C8D04 /* red-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "red-button@2x.png"; sourceTree = ""; }; + 53AA526215E56F7A000C8D04 /* steel-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "steel-button.png"; sourceTree = ""; }; + 53AA526315E56F7A000C8D04 /* steel-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "steel-button@2x.png"; sourceTree = ""; }; + 53AA527615E57B0C000C8D04 /* back-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "back-button.png"; sourceTree = ""; }; + 53AA527815E58E9B000C8D04 /* back-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "back-button@2x.png"; sourceTree = ""; }; + 53AA527A15E591BF000C8D04 /* back-button-landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "back-button-landscape.png"; sourceTree = ""; }; + 53AA527B15E591BF000C8D04 /* back-button-landscape@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "back-button-landscape@2x.png"; sourceTree = ""; }; + 53E2966E15BF36C800D8AD2A /* UYLOkButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLOkButton.h; sourceTree = ""; }; + 53E2966F15BF36C800D8AD2A /* UYLOkButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLOkButton.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 535734E215B75876006F0E6A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 535734EA15B75876006F0E6A /* UIKit.framework in Frameworks */, + 535734EC15B75876006F0E6A /* Foundation.framework in Frameworks */, + 535734EE15B75876006F0E6A /* CoreGraphics.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 535734DA15B75875006F0E6A = { + isa = PBXGroup; + children = ( + 5334608823CA30B700BE943E /* README */, + 535734EF15B75876006F0E6A /* Styles */, + 535734E815B75876006F0E6A /* Frameworks */, + 535734E615B75876006F0E6A /* Products */, + ); + sourceTree = ""; + }; + 535734E615B75876006F0E6A /* Products */ = { + isa = PBXGroup; + children = ( + 535734E515B75876006F0E6A /* Styles.app */, + ); + name = Products; + sourceTree = ""; + }; + 535734E815B75876006F0E6A /* Frameworks */ = { + isa = PBXGroup; + children = ( + 535734E915B75876006F0E6A /* UIKit.framework */, + 535734EB15B75876006F0E6A /* Foundation.framework */, + 535734ED15B75876006F0E6A /* CoreGraphics.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 535734EF15B75876006F0E6A /* Styles */ = { + isa = PBXGroup; + children = ( + 53AA525515E56F7A000C8D04 /* Resources */, + 5357351115B75A9B006F0E6A /* Views */, + 5357351215B75AB6006F0E6A /* Controllers */, + 535734F815B75878006F0E6A /* UYLAppDelegate.h */, + 535734F915B75878006F0E6A /* UYLAppDelegate.m */, + 535734F015B75876006F0E6A /* Supporting Files */, + ); + path = Styles; + sourceTree = ""; + }; + 535734F015B75876006F0E6A /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 535734F115B75876006F0E6A /* Styles-Info.plist */, + 535734F215B75876006F0E6A /* InfoPlist.strings */, + 535734F515B75877006F0E6A /* main.m */, + 535734F715B75877006F0E6A /* Styles-Prefix.pch */, + 5334608923CA316E00BE943E /* LaunchScreen.storyboard */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 5357351115B75A9B006F0E6A /* Views */ = { + isa = PBXGroup; + children = ( + 5374A30915B7698400B796D2 /* MainStoryboard.storyboard */, + 532F267715BDE44F00321881 /* UYLResetButton.h */, + 532F267815BDE44F00321881 /* UYLResetButton.m */, + 53E2966E15BF36C800D8AD2A /* UYLOkButton.h */, + 53E2966F15BF36C800D8AD2A /* UYLOkButton.m */, + 5305B53C15E6310900AC81F4 /* UYLZeroButton.h */, + 5305B53D15E6310900AC81F4 /* UYLZeroButton.m */, + ); + name = Views; + sourceTree = ""; + }; + 5357351215B75AB6006F0E6A /* Controllers */ = { + isa = PBXGroup; + children = ( + 535734FE15B75878006F0E6A /* UYLListViewController.h */, + 535734FF15B75878006F0E6A /* UYLListViewController.m */, + 532F266515BDDF7A00321881 /* UYLRotatingViewController.h */, + 532F266615BDDF7A00321881 /* UYLRotatingViewController.m */, + 532F267A15BDEAEA00321881 /* UYLStyleController.h */, + 532F267B15BDEAEB00321881 /* UYLStyleController.m */, + ); + name = Controllers; + sourceTree = ""; + }; + 53AA525515E56F7A000C8D04 /* Resources */ = { + isa = PBXGroup; + children = ( + 5305B54415E6408500AC81F4 /* divider.png */, + 5305B54515E6408500AC81F4 /* divider@2x.png */, + 53AA527A15E591BF000C8D04 /* back-button-landscape.png */, + 53AA527B15E591BF000C8D04 /* back-button-landscape@2x.png */, + 53AA527815E58E9B000C8D04 /* back-button@2x.png */, + 53AA527615E57B0C000C8D04 /* back-button.png */, + 53AA525615E56F7A000C8D04 /* green-button.png */, + 53AA525715E56F7A000C8D04 /* green-button@2x.png */, + 53AA525815E56F7A000C8D04 /* navbar-landscape.png */, + 53AA525915E56F7A000C8D04 /* navbar-landscape@2x.png */, + 53AA525A15E56F7A000C8D04 /* navbar.png */, + 53AA525B15E56F7A000C8D04 /* navbar@2x.png */, + 53AA525C15E56F7A000C8D04 /* orange-button.png */, + 53AA525D15E56F7A000C8D04 /* orange-button@2x.png */, + 53AA526015E56F7A000C8D04 /* red-button.png */, + 53AA526115E56F7A000C8D04 /* red-button@2x.png */, + 53AA526215E56F7A000C8D04 /* steel-button.png */, + 53AA526315E56F7A000C8D04 /* steel-button@2x.png */, + ); + path = Resources; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 535734E415B75876006F0E6A /* Styles */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5357350E15B75878006F0E6A /* Build configuration list for PBXNativeTarget "Styles" */; + buildPhases = ( + 535734E115B75876006F0E6A /* Sources */, + 535734E215B75876006F0E6A /* Frameworks */, + 535734E315B75876006F0E6A /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Styles; + productName = Styles; + productReference = 535734E515B75876006F0E6A /* Styles.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 535734DC15B75875006F0E6A /* Project object */ = { + isa = PBXProject; + attributes = { + CLASSPREFIX = UYL; + LastUpgradeCheck = 1120; + }; + buildConfigurationList = 535734DF15B75875006F0E6A /* Build configuration list for PBXProject "Styles" */; + compatibilityVersion = "Xcode 11.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 535734DA15B75875006F0E6A; + productRefGroup = 535734E615B75876006F0E6A /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 535734E415B75876006F0E6A /* Styles */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 535734E315B75876006F0E6A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 535734F415B75876006F0E6A /* InfoPlist.strings in Resources */, + 5374A30A15B7698400B796D2 /* MainStoryboard.storyboard in Resources */, + 53AA526415E56F7A000C8D04 /* green-button.png in Resources */, + 53AA526515E56F7A000C8D04 /* green-button@2x.png in Resources */, + 53AA526615E56F7A000C8D04 /* navbar-landscape.png in Resources */, + 53AA526715E56F7A000C8D04 /* navbar-landscape@2x.png in Resources */, + 53AA526815E56F7A000C8D04 /* navbar.png in Resources */, + 53AA526915E56F7A000C8D04 /* navbar@2x.png in Resources */, + 53AA526A15E56F7A000C8D04 /* orange-button.png in Resources */, + 53AA526B15E56F7A000C8D04 /* orange-button@2x.png in Resources */, + 53AA526E15E56F7A000C8D04 /* red-button.png in Resources */, + 53AA526F15E56F7A000C8D04 /* red-button@2x.png in Resources */, + 53AA527015E56F7A000C8D04 /* steel-button.png in Resources */, + 53AA527115E56F7A000C8D04 /* steel-button@2x.png in Resources */, + 53AA527715E57B0C000C8D04 /* back-button.png in Resources */, + 53AA527915E58E9B000C8D04 /* back-button@2x.png in Resources */, + 53AA527C15E591BF000C8D04 /* back-button-landscape.png in Resources */, + 53AA527D15E591BF000C8D04 /* back-button-landscape@2x.png in Resources */, + 5334608A23CA316E00BE943E /* LaunchScreen.storyboard in Resources */, + 5305B54615E6408500AC81F4 /* divider.png in Resources */, + 5305B54715E6408500AC81F4 /* divider@2x.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 535734E115B75876006F0E6A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 535734F615B75877006F0E6A /* main.m in Sources */, + 535734FA15B75878006F0E6A /* UYLAppDelegate.m in Sources */, + 5357350015B75878006F0E6A /* UYLListViewController.m in Sources */, + 532F266715BDDF7A00321881 /* UYLRotatingViewController.m in Sources */, + 532F267915BDE44F00321881 /* UYLResetButton.m in Sources */, + 532F267C15BDEAEB00321881 /* UYLStyleController.m in Sources */, + 53E2967015BF36C800D8AD2A /* UYLOkButton.m in Sources */, + 5305B53E15E6310900AC81F4 /* UYLZeroButton.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 535734F215B75876006F0E6A /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 535734F315B75876006F0E6A /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 5357350C15B75878006F0E6A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_OBJC_ARC = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 5357350D15B75878006F0E6A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_OBJC_ARC = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 5357350F15B75878006F0E6A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEVELOPMENT_TEAM = LCC2J94N44; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Styles/Styles-Prefix.pch"; + INFOPLIST_FILE = "Styles/Styles-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 5357351015B75878006F0E6A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEVELOPMENT_TEAM = LCC2J94N44; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Styles/Styles-Prefix.pch"; + INFOPLIST_FILE = "Styles/Styles-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 535734DF15B75875006F0E6A /* Build configuration list for PBXProject "Styles" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5357350C15B75878006F0E6A /* Debug */, + 5357350D15B75878006F0E6A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5357350E15B75878006F0E6A /* Build configuration list for PBXNativeTarget "Styles" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5357350F15B75878006F0E6A /* Debug */, + 5357351015B75878006F0E6A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 535734DC15B75875006F0E6A /* Project object */; +} diff --git a/Archive/Styles/Styles/LaunchScreen.storyboard b/Archive/Styles/Styles/LaunchScreen.storyboard new file mode 100644 index 0000000..06d6044 --- /dev/null +++ b/Archive/Styles/Styles/LaunchScreen.storyboard @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Archive/Styles/Styles/MainStoryboard.storyboard b/Archive/Styles/Styles/MainStoryboard.storyboard new file mode 100644 index 0000000..e0db02c --- /dev/null +++ b/Archive/Styles/Styles/MainStoryboard.storyboard @@ -0,0 +1,484 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Archive/Styles/Styles/Resources/back-button-landscape.png b/Archive/Styles/Styles/Resources/back-button-landscape.png new file mode 100644 index 0000000000000000000000000000000000000000..8e0731703b9bedb6b4aa886a77721002ed57742b GIT binary patch literal 838 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�(Efv9yxxarn-`$X#CnAmBL2>f=V zdDl}wUPEch7WfsS+aC-79?RwO0{J6m*Y+p6osDaPm9Rbuo=~Mg&+Z3ECp>6b)*G3= zfng`(8idT?cR252(cX*E#o&n$Ze4%p-JV{MIC^yU3Cqs@%yIj`Fm1lrl;BJU^s~`b zv5*i?6hPzVyVsZldLS>q{OUhSm2$(e?MH-RCg0BJ@5Nygz3aD|4Fh^8XV0E({bzCU zyUoV!@1fTO(S_ZCb#jP4W2Wy`RTAOD!_k0v1@uVv?%ms%oSghS2C&l*G-_Hla2g7& z%j*)o?nI!}N$?1P?=2h9V<9P*FJJyEk$0lqZrC-_roBfT9z*hhRgD~J2DT9!gdT6jR5-1W()+^z8ES{ON_YUCxpglM^ z_>;ERTo8nvyyX3QXgG^{&JpBiz*sdV#B(38mU86CkxfEa^O>AGC4?%CF?k;QQ6vV> z&S>2J@1g-~EUxQb1_-{{TE6`U-)n|7TIIB!!@#*7MlzZT>Nh3B1A$=}%mHhd3b?ei z^n2g;zm9(U7NEz8szzc%iS?ndfk2!BN$^CR0%^G))MzxOT{k-qs!NPL90%%t5E_dI zB9Ob(f2G0!+$tX}6Vb_RfB*A{krdWNXddAMVqLEZ0fN_TumjQ}^62b-+qO?nfZD2(9MwRqg~+A{Q=PxQ2)s3UG%oM88hz`sK%H5@>~_JDyPgCYT0N zbR6e9M0m#c+CCBSO%MUAehb9^?+gWmbH?a+gdhl*1XFlhytur){8QJ>Jx&1H)mJr= z9EE;Cf)9f^7j!&;bnw-5I)E=y+-I8RDa&>y!$8G+2a4VS(1r181^E8&3`nue&(HtO z^SrOgNc{zb;07ns18_6MXaC60St5805Q*r#0qGW!Tj#Tg_+tuMi$LM>M$UO!`5n%A zPr#g@bR9k8vFZE%uQ&x#{`Z2VQt34Sc)~O-Te}e$=0DH5N`(68Gr~3zow<1N;?wMa zb>M_brScX4Jg5#d3^S~LQCILBR=s*dh;1Q+BV|BVoEzzOfKG~eNs6x{;%)#yLwZ5Q zSb!>N@@F9D5eZX-gcL-yCFa}pdi|w?2M@MD%Kre!5YUJ)N+ovy0000zopr0GPiHEC2ui literal 0 HcmV?d00001 diff --git a/Archive/Styles/Styles/Resources/divider@2x.png b/Archive/Styles/Styles/Resources/divider@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ea104494b15a476cf7fb941850c286a367bea276 GIT binary patch literal 75 zcmeAS@N?(olHy`uVBq!ia0vp^Oh6pL0U`qqZhQo!ggjjwLo|YuJ(!u>0<)$pQe|b( X*?lQ-QDWf|pe%!@tDnm{r-UW|GYb+6 literal 0 HcmV?d00001 diff --git a/Archive/Styles/Styles/Resources/green-button.png b/Archive/Styles/Styles/Resources/green-button.png new file mode 100644 index 0000000000000000000000000000000000000000..9c5fe4e20ac78868acbe04d94bb70fa88920bc65 GIT binary patch literal 2305 zcmV+c3I6tpP)2af>btMrzx>U|{n>Y)->?78uYPZzZ$8~T9?CF4 zm;n;jv<#U^V1^_Zhxa*O9{&4JzUyCn`Si^XzJLDihwrDq`TL)I_tyXe_&5Ljga7!= z=l9?Jt8aer)1Un2v#)>m$w!ZhCFo(95gR#7hQPC2voUjJ%?1e?FgV{oeEZewmp}O8 z|NZ*6zxeT&Pygw^|M<869tMB>iy!{gFaO1t|Kor9hadg)r{8@>+K@b8qA(kp22r+0 zF?dobo>9~02?C5KcTBcX^7zFMf9wDLqi=ul2j71F4}bsD@BaFM?>@hO`LBNUgP;Dv zx1S{e#5(SXP*l!QTr^#jI(KNG5WG%`QHtuCl zdSiV3n@_&`d|!Y0?*9Da*3bUOU;bd9zR+^-Q9M4}1M%P=R@kj2H& z=uRF_c`pC@mp|B-PxrHrcm3h-eLqT#a@dnz0vL*ij5`bjs8MEGwsFTev&KS{Hc4Q1 zkb7|R@%{Ynqd)wJAAP#HAc8m&F;m&5@8cmE!cZC7RGyobFx1IoB{QknGPtx^=>!{BX-k#{urMeD-CZ* zo97a2lBZ}oESe0=IS)JHVrEUE+0xJ>$D#zymb=H6!GTX7Zyq;YAjxCPTQ=OoI7|{Z zTUNrmnbYx%hJ#ld(1@Id%gjW%4XQ9O&%208}v zhOwn%!*cIqi{go+haD|@Idk}UG7YCojU7D<5+*j9^K!$iTv*nGiZOsvtc1#>JN9tN zxWkASE3}W3D_z3EcpWildT>#;5q8eN@ZOp6u*=0ZN+z*^I>SkufoTz(E1C}wMN-*2 z8;Kt6^gbq*UK#_C8c232+M^5EaMP2aM(JU9@|Y8h89_cExi`;%mO_)`W>2mxNKIwM zgJ{uc!1L0yaap)zEQw1^;u)8QQE_}Y9B^d~6P~5UaDEb;tL8E9YcjzduGZe)-#Y`UXVMmV((BoMu znnjy+Y@U1M6dMOGmU(bGHY$2-xuRL|B&;wMqcS7f;lPJbIu`A9#^rJD8BQ^23A;HM zmZwRCQ4`3bhS>D-NTcvfFB>-|jzZ@HiY|tz%$)3|Xe@S_Av3{oJDJID4wgr*0p^^? z0(Od>QBW_KD1LvG_uL*wCY?1X3Bdu%Q?dWW>^c!xuLh)QtL2<0}R zH=eVbb{Lq$6vhrC*`_ypj(3#A9&cx+2N&4L;qgEz#789ho)(LD+G8DHya{ghq~pf3 zIQEcuX){T@RQAw~9as@V(GJ6T#~KBF0CZ`w#{>7uV>=hykeS|do5g!fdTBg8#Op9d z@M3XOv?Ja{JSL|e8x;s2>fX!A;LV}Uip}DdmBUPn25iFQy)$F8xUuM=m;+}VZ5A)K z(P2DXQTHKl4~~WcYl6<1r#VA5c5s+CwsEs1>~biEZp2}-4Ty`4D^J|;Cdm8Yd}&b@ z=V7NX3L_aNcaJTFF(}sz6`Km&P!^VqJ8c$2u@P1-dT_pcEWf@_z!~BQE5L_b@1-W6xAFg1n!y*RMaG*FV0Wd0!?*!RdJ@Gu>%3v=J*C7Xz^= z9;p~L&oR4pO^L*Lg4u16a`#*p95BuMK z|L+)T3>X@_7!AQpTGpeT-NR0MDBCDCTS8`KL$qvoRrQ(jb@*dvD`<~wP zrk8L3==|zW`o-sO{S6G@C;#pFkH7ip{kyOKA3y!UKg{P}=Hts8CJeN3Y-|T=7}#=H zvC-rVz>qwEJm&o>Uw(gn^Dpzw&-%sh{eS+`ul}un4+DT7|6l&<{gJ=?^0hzv{>Q%l z@qe>Vzh&RE7crBpX%P$n7z!{z0NQx)@y);0$3Oe#;~RhX>DT_|pZ^zs4KM%z z`2GLtFYfW@edT98{;^uPMg b0093#-l(3VZ}h4{00000NkvXXu0mjfN28_V literal 0 HcmV?d00001 diff --git a/Archive/Styles/Styles/Resources/green-button@2x.png b/Archive/Styles/Styles/Resources/green-button@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b8354921c5ba2c0ceebd6bdeec3938d08f4b58fb GIT binary patch literal 7044 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 X-J)^t*ua&De;@Mk@N;i;4N3nmRY-Hg literal 0 HcmV?d00001 diff --git a/Archive/Styles/Styles/Resources/navbar-landscape.png b/Archive/Styles/Styles/Resources/navbar-landscape.png new file mode 100644 index 0000000000000000000000000000000000000000..765fe756f0b1e581bae441756ff4a1f8aa34c42f GIT binary patch literal 1631 zcmV-l2B7(gP)|{9VB)t9G_qm4h+Qq1WPIAaeI9S#iw@`{!V#a*SwaJi)PLx zTVPpL%Iuc!umf_WDr@LI7QyF$wPeszL1PU;G%eG#%=5f}YQ@AhO~M7P)kJ9v7aQ~k z=AM&;FgVAZE9X0x)VN8b;xi7zFbf#j5M4;!N~K)5 z5UEi>%103>NBn`5iX??lYyvFU1{)g(_!T|40s3Y|qgILEc<0T|yk{Rk8a7)j=JWZ2 zFc*Of&TKxLJtJoR^D}Bl(4fhJYB47vj_563jbKVbE3OzKkzCMXBLcCh@B35Vn<5cS zJsjV*Cz`IwvV3!MBT2HZ>ywG?`=00dQ_KMn3V2}JkdK)!O0-JZwr$sS zp&$25T@fWBomGXdd2ND8Q;sJ?{$O1w!GOfo}>-zfY z=Dl zG%Rvb03um*9}WkSEM>FVf9-pFdzTj%-KVZ;0VV(o<3OMH`~4n0-Fm&APNx&^0sZ=2 zz1!2j%H@it zwIPH@*uWYRm7?*p-99gzhuIGgKR^6ZhZquDGL3W;zOi-ktB0V!NK zNP@*9x_9^YM@L6t_Wk{RMOI!v7!7Da2DIpigRR&H7LM3<>?IJ=&3XmViVf(FKt+u( zJ9c>RI}q|0h_{!^V6~255J9ZhpW^YIogG>-Z-D;CcwB6Mazs|}tk+@`T~iT>vL#zV z!$N>JY(*p3-%)%EP*k<1swzmON~+5F{OP;@^V593D#Byq8KV_CdZ`x20g#BwQ_RCSVEz7DTs!Ci`0=O;pBvmDEi%OJu5Zq{mfH8Kg9688@eFT#}PnJ>soacEV zDDpz3C~_%iAW%G8r-A5YRDjQNy8^(h779=<+hb7;sfJzKi#CtM<_UOw5+NZ9i6WvZ zP&}G$tb(}U{RE>;ar3A;qq>38_<7rkvMhvXTUKE@sNh0Q|6nb>)@bEAv2$-P+9_(m(98TQt%W}GxjArpPp2f52bQ;IX zsaOoNa9s}y(qVKPIa5L?FgOL6`Pk2htFS3zLi9s19*+h3?`ATdSkfUenBb5&mM&z1 z0&0l&)8sO`ysT)99X~Ju{Iq$Z(eQ3`H&Uo5M#CXgfaJ0)4C$ag@^IZR7=iT?Y>4g} dyPzLt_6O87x~&Jh0ObGx002ovPDHLkV1l}>2~7Y1 literal 0 HcmV?d00001 diff --git a/Archive/Styles/Styles/Resources/navbar-landscape@2x.png b/Archive/Styles/Styles/Resources/navbar-landscape@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6414039b00d9e5e97bc48b1d972cd96ed78fd2f2 GIT binary patch literal 4652 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 literal 0 HcmV?d00001 diff --git a/Archive/Styles/Styles/Resources/navbar.png b/Archive/Styles/Styles/Resources/navbar.png new file mode 100644 index 0000000000000000000000000000000000000000..29c90298df11d229bfae67ec0e5641709886b48a GIT binary patch literal 2009 zcmV;~2PXK5P)gH)|IaYYbJ3`sT=u?m&87f>5* z@1?cY_qwi?wEGIj`6I%~V4zRvMy`@1-Th5Zcmo zVATrYofb}+w?%qBpMPkI0TW2Dkp+<|PLzUF15U(gQ0yQb6EhTuuR5K|QkLc4S8~9T z1G11K$};p))KYE`$RUa(f(1x?+;?5q_wXJGb@x3y20#OWJr@EsX-X-i)&Ms_ge(IIF2eb2q{HEOI37<1Q2@cf zvy|hUZDmcFCntU(Dyer_O6Ai=+cR^LzBP#A6Y$6_Lh?nz&K@WD8jNc2J90N_?dB%BqZPdHFp-?bQBk+S>uSdoxq6MaiqY*_= zFhjJEZnxWLG!#WUIX)>A3zvrB`#~7?$STg`kkskk5<55!B=H0PtR!!2Y%DD;r5NdS z`rz=uzH$Qi0J3(mGDL@GK!|utxm5Z$esJhGPA3RDbi~Xnd7eLqN2BePO7h3m)zmBO z?d>^^i#PLw!1u5s>WLM=HmaK&4+pO$=wskl?tkrm6UfQVX!Zzkg+4!AXAC1zpro zY`D~Ds`h@|wrxcCK=;FB^7MOl^O`a}{!vT7K#o_#w_rbkREN737*4Eem{(<6a-1)qNe=@3~5p>QxFS@FO1k|#kX0zF~wU_ao&lK0-nkBGE zf2b(e?M8tZ2G9H7mqMC_1PGLr7BX$}g!@T`!&!|j%d(yPN&5u91{L-CeZHPQKY5<# zrf&WeMO9U|zJIKbmo^~nN5cD!9mtV$ob!{2xi+{LZ1PNK{A+d<%8`gw9uq=`e z0LPh+tli6xBSe;J$m{h&!D`#x@Vwo8k}w#%<;4_@ z*%+XS8#b?7ZxSN|T}a4?o9sow4&n;kv?!0jgzk4JMEfQg0Ah*j-wr|_oJg8%nevx5tOm|RDkZ3kY>NjR(>A8kFz+wHqyB`00000NkvXXu0mjfR8YoX literal 0 HcmV?d00001 diff --git a/Archive/Styles/Styles/Resources/navbar@2x.png b/Archive/Styles/Styles/Resources/navbar@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6c7c2328d40c0e63f18726dbfd114bbc02275492 GIT binary patch literal 6321 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 literal 0 HcmV?d00001 diff --git a/Archive/Styles/Styles/Resources/orange-button.png b/Archive/Styles/Styles/Resources/orange-button.png new file mode 100644 index 0000000000000000000000000000000000000000..4a3680ed6b71e8194fcf6133d9ddeeecce51d883 GIT binary patch literal 2111 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 bfrlY#8t2#LqGx!33K%?H{an^LB{Ts5XW|of literal 0 HcmV?d00001 diff --git a/Archive/Styles/Styles/Resources/red-button.png b/Archive/Styles/Styles/Resources/red-button.png new file mode 100644 index 0000000000000000000000000000000000000000..3a6ad7a2258e10a9b6cc77dc4d193ee5f74fd548 GIT binary patch literal 2039 zcmV9sW+e=3Ca?JJXMLXEe181> z=P&&1tKa)8fC2pSlfV9>x1ap_ldpdF%wGo6nEG`R-?b2@ibp^3y*$Kl$I^^3~U$_~$S3emJ~0XF^g~GG`7KpwSfJ9hI6h zH32d`TwL7dpT|Fan*Z~qufBDD^3BUn;ejvs@h@Nd>Nj7^jT-=@lDTo_@Loufxi~pF z6B+?-xskc?miN&(oE%zy^Wv8;Uwy%k;q~>Ge)Q#sAN=E|G-`$o5K2B|rR>@BHqIDabV&#WQXQuu(dmkqP7mtVtHd z9&V#NXo$m>;e9+0mGJ*IpXxjE!`JftfBIza;vqca9UcT&uGtuFQ;zBRq{TIIX*|ZemjXf0a03cyQX~P5~C}3>37-yK3FdV>O6!Cs= z^D#cv_g>@MH{P%z%Az5LV#CoU8Ip~TjUF6NbI~#+%pz>m?8%~wG3iKdjBmg2=`GhN z9)!^BNk>MILDOi64Y)8W0GY(YVsaow%@z=bxJ~->didf%+9(@`r*wGc;*p{P&<$+S zSm3bDq9G<{7A=NoEcS2>dGIdy;`Qb^99$ZVt8f4P$s; zHjKp`+b9`}hLGWoHWL6)4)AjH1&4;R!w8xd4Ka$A!A7y^p)wRbqZnJKM>csYDQJy~OP*+T(03KAA=Cd@63Mc61d3egboHp1lvH!5uw z2crSOfP^s$7=jU)cX{GKU=f&u(tw6C+-9Zd;njn<;nKryEZu+s#XyF}a1e}z7+o5` z+@g69JhKvNp5={4Lc^QKVL-!iqp)}a#v+Itp$KqNI2<=15Qe;iBsYw3SX?lf9$wIK z(O9$PVvUknF*M1=GY)QA7;*r(=8=OCmV;W1N9fk$G_AIo{YqhhjWY*{G>7 zmBx;MULsrs<{6dDmMhy>W-1NxajbaL!()mMfkxP2XbOvX59N8N)NCXnyl@xqhe5of zv6xZbvIsLoLu|szM|qGL-dHq}iSaff89t6}h{Gnqy^i-xr9l?rFbQi81a>6GT|BeK z@@^)ffQ*|2wiqE}B#Sl`ae2Rv&yRqp>4_i#ECSA01Y=n_BNUsY*bplX!_j7<6nki6 z6puN5e#LKJ5unA9nHY-;fC&Tv!B}H?m%#>3;Au{tK@MWiTnUchRo?ve^_j0f;eCK1 zNY5nC<}MpxQ><($W-8khLqTewapS;L3`QyTgke6(o3EeG^NYVYy+$}34p-c~!#I<< zqqumR@F9)26z}G6=9c#;t`zsqMQ=`u#vLbLl)pHAo?kpSKmQfK`EI=99pOgJ$8zP3 z_wkm)Mdpq-ig$z?7w_?Lxj1~pM_e2(&Ro24xVZRk{EFY){Cx1g_%Hu3|LK2>2iI(b z!Lq|>6wI@P#f{x;X`|Sz6b59JXB3TRa~R0t-^ZWjzy53f^8>$r{Or&3&A*B_$a|?= z2{#V!xVU)7H6P6#?{RULchlt^jd#3J$$a2#YCbM^d6)O`XYuFx=GTv(!2te_zy4Ex z@;~RRe~7Q~F#>?_jKi`aifx1^VF66VfI+koWahQ}Y4b0af0J+ik-z!3{3Q$k{yRVY z7yS5-`N4Pj&fl@$<1;=GY)&3?vM?ab5MclafNdr(yzs5~cl0ZM^MCpKU-Ps7z+V9j z0090QKl;QEUwr@JdtdPF@#VvV2Lk{A00000K)B=L4{v^ZeEq>MKJ)Yc$ln40{C^$~ V7KXqtuG|0s002ovPDHLkV1jyj&qe?M literal 0 HcmV?d00001 diff --git a/Archive/Styles/Styles/Resources/red-button@2x.png b/Archive/Styles/Styles/Resources/red-button@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e197a76c64b209b9ee86e7faeea5b9aa4fc88d80 GIT binary patch literal 6696 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 y?cA{Q!!GL|1$V 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 Y2Sbo%1c++c7ytkO07*qoM6N<$f<=|Ji2wiq literal 0 HcmV?d00001 diff --git a/Archive/Styles/Styles/Resources/steel-button@2x.png b/Archive/Styles/Styles/Resources/steel-button@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0afa6ac96b0e3a3f4c3af581320016d186fb7f41 GIT binary patch literal 8079 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 literal 0 HcmV?d00001 diff --git a/Archive/Styles/Styles/Styles-Info.plist b/Archive/Styles/Styles/Styles-Info.plist new file mode 100644 index 0000000..66a4d0c --- /dev/null +++ b/Archive/Styles/Styles/Styles-Info.plist @@ -0,0 +1,43 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + MainStoryboard + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + UIInterfaceOrientationPortraitUpsideDown + + + diff --git a/Archive/Styles/Styles/Styles-Prefix.pch b/Archive/Styles/Styles/Styles-Prefix.pch new file mode 100644 index 0000000..6c81c58 --- /dev/null +++ b/Archive/Styles/Styles/Styles-Prefix.pch @@ -0,0 +1,14 @@ +// +// Prefix header for all source files of the 'Styles' target in the 'Styles' project +// + +#import + +#ifndef __IPHONE_5_0 +#warning "This project uses features only available in iOS SDK 5.0 and later." +#endif + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/Archive/Styles/Styles/UYLAppDelegate.h b/Archive/Styles/Styles/UYLAppDelegate.h new file mode 100644 index 0000000..febe5c9 --- /dev/null +++ b/Archive/Styles/Styles/UYLAppDelegate.h @@ -0,0 +1,39 @@ +// +// UYLAppDelegate.h +// Styles +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + +@interface UYLAppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + +@end diff --git a/Archive/Styles/Styles/UYLAppDelegate.m b/Archive/Styles/Styles/UYLAppDelegate.m new file mode 100644 index 0000000..cd2822a --- /dev/null +++ b/Archive/Styles/Styles/UYLAppDelegate.m @@ -0,0 +1,46 @@ +// +// UYLAppDelegate.m +// Styles +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "UYLAppDelegate.h" +#import "UYLStyleController.h" + +@implementation UYLAppDelegate + +@synthesize window = _window; + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + [UYLStyleController applyStyle]; + return YES; +} + +@end diff --git a/Archive/Styles/Styles/UYLListViewController.h b/Archive/Styles/Styles/UYLListViewController.h new file mode 100644 index 0000000..e1ecd40 --- /dev/null +++ b/Archive/Styles/Styles/UYLListViewController.h @@ -0,0 +1,38 @@ +// +// UYLFirstViewController.h +// Styles +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import + +@interface UYLListViewController : UITableViewController + +@end diff --git a/Archive/Styles/Styles/UYLListViewController.m b/Archive/Styles/Styles/UYLListViewController.m new file mode 100644 index 0000000..ca15048 --- /dev/null +++ b/Archive/Styles/Styles/UYLListViewController.m @@ -0,0 +1,45 @@ +// +// UYLFirstViewController.m +// Styles +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "UYLListViewController.h" + +@interface UYLListViewController () +@end + +@implementation UYLListViewController + +//- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation +//{ +// return YES; +//} + +@end diff --git a/Archive/Styles/Styles/UYLOkButton.h b/Archive/Styles/Styles/UYLOkButton.h new file mode 100644 index 0000000..279a947 --- /dev/null +++ b/Archive/Styles/Styles/UYLOkButton.h @@ -0,0 +1,36 @@ +// +// UYLOkButton.h +// Styles +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + +@interface UYLOkButton : UIButton +@end diff --git a/Archive/Styles/Styles/UYLOkButton.m b/Archive/Styles/Styles/UYLOkButton.m new file mode 100644 index 0000000..52c135d --- /dev/null +++ b/Archive/Styles/Styles/UYLOkButton.m @@ -0,0 +1,36 @@ +// +// UYLOkButton.m +// Styles +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "UYLOkButton.h" + +@implementation UYLOkButton +@end diff --git a/Archive/Styles/Styles/UYLResetButton.h b/Archive/Styles/Styles/UYLResetButton.h new file mode 100644 index 0000000..8e02791 --- /dev/null +++ b/Archive/Styles/Styles/UYLResetButton.h @@ -0,0 +1,36 @@ +// +// UYLResetButton.h +// Styles +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + +@interface UYLResetButton : UIButton +@end diff --git a/Archive/Styles/Styles/UYLResetButton.m b/Archive/Styles/Styles/UYLResetButton.m new file mode 100644 index 0000000..2de0503 --- /dev/null +++ b/Archive/Styles/Styles/UYLResetButton.m @@ -0,0 +1,36 @@ +// +// UYLResetButton.m +// Styles +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "UYLResetButton.h" + +@implementation UYLResetButton +@end diff --git a/Archive/Styles/Styles/UYLRotatingViewController.h b/Archive/Styles/Styles/UYLRotatingViewController.h new file mode 100644 index 0000000..eacf87e --- /dev/null +++ b/Archive/Styles/Styles/UYLRotatingViewController.h @@ -0,0 +1,38 @@ +// +// UYLRotatingViewController.h +// Styles +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import + +@interface UYLRotatingViewController : UIViewController + +@end diff --git a/Archive/Styles/Styles/UYLRotatingViewController.m b/Archive/Styles/Styles/UYLRotatingViewController.m new file mode 100644 index 0000000..243d96f --- /dev/null +++ b/Archive/Styles/Styles/UYLRotatingViewController.m @@ -0,0 +1,49 @@ +// +// UYLRotatingViewController.m +// Styles +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "UYLRotatingViewController.h" + +@implementation UYLRotatingViewController + +- (void) viewDidLoad +{ + [super viewDidLoad]; + self.view.backgroundColor = [UIColor lightGrayColor]; +} + +//- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation +//{ +// return YES; +//} + +@end diff --git a/Archive/Styles/Styles/UYLStyleController.h b/Archive/Styles/Styles/UYLStyleController.h new file mode 100644 index 0000000..7ec86af --- /dev/null +++ b/Archive/Styles/Styles/UYLStyleController.h @@ -0,0 +1,39 @@ +// +// UYLStyleController.h +// Styles +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + +@interface UYLStyleController : NSObject + ++ (void)applyStyle; + +@end diff --git a/Archive/Styles/Styles/UYLStyleController.m b/Archive/Styles/Styles/UYLStyleController.m new file mode 100644 index 0000000..7310ba7 --- /dev/null +++ b/Archive/Styles/Styles/UYLStyleController.m @@ -0,0 +1,125 @@ +// +// UYLStyleController.m +// Styles +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "UYLStyleController.h" +#import "UYLRotatingViewController.h" +#import "UYLResetButton.h" +#import "UYLOkButton.h" +#import "UYLZeroButton.h" + +@implementation UYLStyleController + ++ (void)applyStyle +{ + // UINavigationBar + UIImage *navBarImage = [UIImage imageNamed:@"navbar"]; + navBarImage = [navBarImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20.0, 0, 20.0)]; + + UIImage *navBarLandscapeImage = [UIImage imageNamed:@"navbar-landscape"]; + navBarLandscapeImage = [navBarLandscapeImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20.0, 0, 20.0)]; + + UINavigationBar *navigationBarAppearance = [UINavigationBar appearance]; + [navigationBarAppearance setBackgroundImage:navBarImage forBarMetrics:UIBarMetricsDefault]; + [navigationBarAppearance setBackgroundImage:navBarLandscapeImage forBarMetrics:UIBarMetricsLandscapePhone]; + + NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor grayColor], NSForegroundColorAttributeName, nil]; + [navigationBarAppearance setTitleTextAttributes:textAttributes]; + + UIImage *backButtonImage = [UIImage imageNamed:@"back-button"]; + backButtonImage = [backButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 25.0, 0, 6.0)]; + + UIImage *backButtonLandscapeImage = [UIImage imageNamed:@"back-button-landscape"]; + backButtonLandscapeImage = [backButtonLandscapeImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 25.0, 0, 6.0)]; + + UIBarButtonItem *barButtonItemAppearance = [UIBarButtonItem appearance]; + [barButtonItemAppearance setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; + [barButtonItemAppearance setBackButtonBackgroundImage:backButtonLandscapeImage forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone]; + + + // UIButton + UIImage *defaultButtonImage = [UIImage imageNamed:@"steel-button"]; + defaultButtonImage = [defaultButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20.0, 0, 20.0)]; + [[UIButton appearanceWhenContainedIn:[UYLRotatingViewController class], nil] setBackgroundImage:defaultButtonImage forState:UIControlStateNormal]; + + UIImage *okButtonImage = [UIImage imageNamed:@"green-button"]; + okButtonImage = [okButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20.0, 0, 20.0)]; + [[UYLOkButton appearanceWhenContainedIn:[UYLRotatingViewController class], nil] setBackgroundImage:okButtonImage forState:UIControlStateNormal]; + + UIImage *zeroButtonImage = [UIImage imageNamed:@"orange-button"]; + zeroButtonImage = [zeroButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20.0, 0, 20.0)]; + [[UYLZeroButton appearanceWhenContainedIn:[UYLRotatingViewController class], nil] setBackgroundImage:zeroButtonImage forState:UIControlStateNormal]; + + UIImage *resetButtonImage = [UIImage imageNamed:@"red-button"]; + resetButtonImage = [resetButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20.0, 0, 20.0)]; + [[UYLResetButton appearanceWhenContainedIn:[UYLRotatingViewController class], nil] setBackgroundImage:resetButtonImage forState:UIControlStateNormal]; + [[UYLResetButton appearanceWhenContainedIn:[UYLRotatingViewController class], nil] setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + + + // Set some colors + UIColor *mainColor = [UIColor darkGrayColor]; + UIColor *altColor = [UIColor lightGrayColor]; + + + // UILabel + UILabel *labelAppearance = [UILabel appearanceWhenContainedIn:[UYLRotatingViewController class], nil]; + [labelAppearance setTextColor:mainColor]; + + + // UIActivityIndicator + [[UIActivityIndicatorView appearance] setColor:[UIColor redColor]]; + + + // UIProgressView + [[UIProgressView appearance] setProgressTintColor:mainColor]; + [[UIProgressView appearance] setTrackTintColor:altColor]; + + + // UISwitch + [[UISwitch appearance] setOnTintColor:altColor]; + + + // UISlider + [[UISlider appearance] setMinimumTrackTintColor:mainColor]; + [[UISlider appearance] setMaximumTrackTintColor:altColor]; + [[UISlider appearance] setThumbTintColor:[UIColor redColor]]; + + + // UISegmentedControl + [[UISegmentedControl appearance] setBackgroundImage:defaultButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; + [[UISegmentedControl appearance] setBackgroundImage:zeroButtonImage forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; + + UIImage *dividerImage = [UIImage imageNamed:@"divider"]; + [[UISegmentedControl appearance] setDividerImage:dividerImage forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; +} + +@end diff --git a/Archive/Styles/Styles/UYLZeroButton.h b/Archive/Styles/Styles/UYLZeroButton.h new file mode 100644 index 0000000..e773f6b --- /dev/null +++ b/Archive/Styles/Styles/UYLZeroButton.h @@ -0,0 +1,36 @@ +// +// UYLZeroButton.h +// Styles +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + +@interface UYLZeroButton : UIButton +@end diff --git a/Archive/Styles/Styles/UYLZeroButton.m b/Archive/Styles/Styles/UYLZeroButton.m new file mode 100644 index 0000000..1bb41ea --- /dev/null +++ b/Archive/Styles/Styles/UYLZeroButton.m @@ -0,0 +1,36 @@ +// +// UYLZeroButton.m +// Styles +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "UYLZeroButton.h" + +@implementation UYLZeroButton +@end diff --git a/Archive/Styles/Styles/en.lproj/InfoPlist.strings b/Archive/Styles/Styles/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/Archive/Styles/Styles/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Archive/Styles/Styles/main.m b/Archive/Styles/Styles/main.m new file mode 100644 index 0000000..b1284ba --- /dev/null +++ b/Archive/Styles/Styles/main.m @@ -0,0 +1,43 @@ +// +// main.m +// Styles +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import + +#import "UYLAppDelegate.h" + +int main(int argc, char *argv[]) +{ + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([UYLAppDelegate class])); + } +} diff --git a/Archive/TaskTimer/README b/Archive/TaskTimer/README new file mode 100644 index 0000000..949762d --- /dev/null +++ b/Archive/TaskTimer/README @@ -0,0 +1,95 @@ +======================================================================= +TaskTimer + +Version 1.1 14 May 2012 Add shake to reset +Version 1.0 6-April 2012 Initial Version +======================================================================= + +The TaskTimer App is intended as an example on how to add accessibility +features to an existing App. It is based on the Master Detail Xcode +project template and is a universal app that uses Core Data for its +model. The basic function of the App is to time how long it takes to +perform a list of tasks. + +For further details see: + +https://useyourloaf.com/blog/voiceover-accessibility/ +https://useyourloaf.com/blog/detecting-voiceover-status-changes/ + +======================================================================= +Model +======================================================================= + +Task.m +Task.h +The model consists of a single Core Data entity class for the task data. + +======================================================================= +View +======================================================================= + +UYLCounterView.h +UYLCounterView.m + +The UYLCounterView is a custom UIView subclass used to display the +current duration of a task and buttons to start and stop the counter. +Users of the view can implement the UYLCounterViewDelegate protocol +to receive methods calls when the counter is stopper/started. + +UYLTaskListViewController_iPad.xib +UYLTaskListViewController_iPhone.xib + +iPad and iPhone versions of the NIB for the UYLTaskListViewController. +This NIB is a basic UITableView. + +UYLTaskViewController_iPad.xib +UYLTaskViewController_iPhone.xib + +iPad and iPhone versions of the NIB for the UYLTaskViewController. This +is a custom view containing a text view to allow the task name to be +displayed and edited. It also contains a UYLCounterView to show the +task timer. + +======================================================================= +Controller +======================================================================= + +UYLTaskListViewController.h +UYLTaskListViewController.m + +The master view controller on the iPad and root view controller on the +iPhone. This controller implements the delegates for a table view +showing the list of tasks. The table supports adding/deleting of tasks. + +On the iPad the currently selected task is shown in the detail view +controller which is implemented by a UYLTaskViewController. + +On the iPhone selecting a task pushes a UYLTaskViewController onto +the navigation controller stack. + +UYLTaskViewController.h +UYLTaskViewController.m + +Used to show the task details and allow the task timer to be stopped +and started. A shake event can be used to reset the task. A reset +button is shown/hidden depending on the state of VoiceOver. + +======================================================================= +App Delegate +======================================================================= + +UYLAppDelegate.h +UYLAppDelegate.m + +The App delegate is largely unmodified from the template code. It creates +the root view controllers and initialises the core data stack. + +======================================================================= +Other files +======================================================================= + +NSNumber+UYLTimeFormatter.h +NSNumber+UYLTimeFormatter.m + +A category on NSNumber to provide a string representation of the elapsed +time. diff --git a/Archive/TaskTimer/TaskTimer.xcodeproj/project.pbxproj b/Archive/TaskTimer/TaskTimer.xcodeproj/project.pbxproj new file mode 100644 index 0000000..c30bd55 --- /dev/null +++ b/Archive/TaskTimer/TaskTimer.xcodeproj/project.pbxproj @@ -0,0 +1,493 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 532DD95A1530C8EC00ED5845 /* UYLCounterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 532DD9591530C8EC00ED5845 /* UYLCounterView.m */; }; + 532DD9601530C90300ED5845 /* UYLTaskListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 532DD95D1530C90300ED5845 /* UYLTaskListViewController.m */; }; + 532DD9611530C90300ED5845 /* UYLTaskViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 532DD95F1530C90300ED5845 /* UYLTaskViewController.m */; }; + 532DD96C1530C9AD00ED5845 /* UYLAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 532DD96B1530C9AD00ED5845 /* UYLAppDelegate.m */; }; + 532DD9751530CA6400ED5845 /* UYLTaskListViewController_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 532DD96D1530CA6400ED5845 /* UYLTaskListViewController_iPad.xib */; }; + 532DD9761530CA6400ED5845 /* UYLTaskListViewController_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 532DD96F1530CA6400ED5845 /* UYLTaskListViewController_iPhone.xib */; }; + 532DD9771530CA6400ED5845 /* UYLTaskViewController_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 532DD9711530CA6400ED5845 /* UYLTaskViewController_iPad.xib */; }; + 532DD9781530CA6400ED5845 /* UYLTaskViewController_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 532DD9731530CA6400ED5845 /* UYLTaskViewController_iPhone.xib */; }; + 534644A5155F083D00B20849 /* redbutton.png in Resources */ = {isa = PBXBuildFile; fileRef = 534644A4155F083D00B20849 /* redbutton.png */; }; + 536270F6152E0A55009732E1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 536270F5152E0A55009732E1 /* UIKit.framework */; }; + 536270F8152E0A55009732E1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 536270F7152E0A55009732E1 /* Foundation.framework */; }; + 536270FA152E0A55009732E1 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 536270F9152E0A55009732E1 /* CoreGraphics.framework */; }; + 536270FC152E0A55009732E1 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 536270FB152E0A55009732E1 /* CoreData.framework */; }; + 53627102152E0A55009732E1 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 53627100152E0A55009732E1 /* InfoPlist.strings */; }; + 53627104152E0A55009732E1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 53627103152E0A55009732E1 /* main.m */; }; + 53627127152E0B87009732E1 /* Task.m in Sources */ = {isa = PBXBuildFile; fileRef = 53627125152E0B87009732E1 /* Task.m */; }; + 5362712B152E0BF1009732E1 /* TaskTimer.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 53627129152E0BF1009732E1 /* TaskTimer.xcdatamodeld */; }; + 539F94F1153AE6F0009CF03D /* NSNumber+UYLTimeFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 539F94F0153AE6F0009CF03D /* NSNumber+UYLTimeFormatter.m */; }; + 53BD55AA1533880300BCFB33 /* checked.png in Resources */ = {isa = PBXBuildFile; fileRef = 53BD55A21533880300BCFB33 /* checked.png */; }; + 53BD55AB1533880300BCFB33 /* checked@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53BD55A31533880300BCFB33 /* checked@2x.png */; }; + 53BD55AC1533880300BCFB33 /* start.png in Resources */ = {isa = PBXBuildFile; fileRef = 53BD55A41533880300BCFB33 /* start.png */; }; + 53BD55AD1533880300BCFB33 /* start@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53BD55A51533880300BCFB33 /* start@2x.png */; }; + 53BD55AE1533880300BCFB33 /* stop.png in Resources */ = {isa = PBXBuildFile; fileRef = 53BD55A61533880300BCFB33 /* stop.png */; }; + 53BD55AF1533880300BCFB33 /* stop@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53BD55A71533880300BCFB33 /* stop@2x.png */; }; + 53BD55B01533880300BCFB33 /* unchecked.png in Resources */ = {isa = PBXBuildFile; fileRef = 53BD55A81533880300BCFB33 /* unchecked.png */; }; + 53BD55B11533880300BCFB33 /* unchecked@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53BD55A91533880300BCFB33 /* unchecked@2x.png */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 532DD9581530C8EC00ED5845 /* UYLCounterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLCounterView.h; sourceTree = ""; }; + 532DD9591530C8EC00ED5845 /* UYLCounterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLCounterView.m; sourceTree = ""; }; + 532DD95C1530C90300ED5845 /* UYLTaskListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLTaskListViewController.h; sourceTree = ""; }; + 532DD95D1530C90300ED5845 /* UYLTaskListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLTaskListViewController.m; sourceTree = ""; }; + 532DD95E1530C90300ED5845 /* UYLTaskViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLTaskViewController.h; sourceTree = ""; }; + 532DD95F1530C90300ED5845 /* UYLTaskViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLTaskViewController.m; sourceTree = ""; }; + 532DD96A1530C9AD00ED5845 /* UYLAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLAppDelegate.h; sourceTree = ""; }; + 532DD96B1530C9AD00ED5845 /* UYLAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLAppDelegate.m; sourceTree = ""; }; + 5334608B23CA3B5E00BE943E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UYLTaskListViewController_iPad.xib; sourceTree = ""; }; + 5334608C23CA3B5E00BE943E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UYLTaskListViewController_iPhone.xib; sourceTree = ""; }; + 5334608D23CA3B5E00BE943E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UYLTaskViewController_iPad.xib; sourceTree = ""; }; + 5334608E23CA3B5E00BE943E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UYLTaskViewController_iPhone.xib; sourceTree = ""; }; + 534644A4155F083D00B20849 /* redbutton.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = redbutton.png; sourceTree = ""; }; + 536270F1152E0A55009732E1 /* TaskTimer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TaskTimer.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 536270F5152E0A55009732E1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 536270F7152E0A55009732E1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 536270F9152E0A55009732E1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 536270FB152E0A55009732E1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + 536270FF152E0A55009732E1 /* TaskTimer-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TaskTimer-Info.plist"; sourceTree = ""; }; + 53627101152E0A55009732E1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 53627103152E0A55009732E1 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 53627105152E0A55009732E1 /* TaskTimer-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TaskTimer-Prefix.pch"; sourceTree = ""; }; + 53627124152E0B87009732E1 /* Task.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Task.h; sourceTree = ""; }; + 53627125152E0B87009732E1 /* Task.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Task.m; sourceTree = ""; }; + 5362712A152E0BF1009732E1 /* Accessibile.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Accessibile.xcdatamodel; sourceTree = ""; }; + 539F94EF153AE6F0009CF03D /* NSNumber+UYLTimeFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSNumber+UYLTimeFormatter.h"; sourceTree = ""; }; + 539F94F0153AE6F0009CF03D /* NSNumber+UYLTimeFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSNumber+UYLTimeFormatter.m"; sourceTree = ""; }; + 53BD55A21533880300BCFB33 /* checked.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = checked.png; sourceTree = ""; }; + 53BD55A31533880300BCFB33 /* checked@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "checked@2x.png"; sourceTree = ""; }; + 53BD55A41533880300BCFB33 /* start.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = start.png; sourceTree = ""; }; + 53BD55A51533880300BCFB33 /* start@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "start@2x.png"; sourceTree = ""; }; + 53BD55A61533880300BCFB33 /* stop.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = stop.png; sourceTree = ""; }; + 53BD55A71533880300BCFB33 /* stop@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stop@2x.png"; sourceTree = ""; }; + 53BD55A81533880300BCFB33 /* unchecked.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = unchecked.png; sourceTree = ""; }; + 53BD55A91533880300BCFB33 /* unchecked@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "unchecked@2x.png"; sourceTree = ""; }; + 53DA48A1152FA0D700A616D8 /* README */ = {isa = PBXFileReference; lastKnownFileType = text; path = README; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 536270EE152E0A55009732E1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 536270F6152E0A55009732E1 /* UIKit.framework in Frameworks */, + 536270F8152E0A55009732E1 /* Foundation.framework in Frameworks */, + 536270FA152E0A55009732E1 /* CoreGraphics.framework in Frameworks */, + 536270FC152E0A55009732E1 /* CoreData.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 536270E6152E0A55009732E1 = { + isa = PBXGroup; + children = ( + 53DA48A1152FA0D700A616D8 /* README */, + 536270FD152E0A55009732E1 /* TaskTimer */, + 536270F4152E0A55009732E1 /* Frameworks */, + 536270F2152E0A55009732E1 /* Products */, + ); + sourceTree = ""; + }; + 536270F2152E0A55009732E1 /* Products */ = { + isa = PBXGroup; + children = ( + 536270F1152E0A55009732E1 /* TaskTimer.app */, + ); + name = Products; + sourceTree = ""; + }; + 536270F4152E0A55009732E1 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 536270F5152E0A55009732E1 /* UIKit.framework */, + 536270F7152E0A55009732E1 /* Foundation.framework */, + 536270F9152E0A55009732E1 /* CoreGraphics.framework */, + 536270FB152E0A55009732E1 /* CoreData.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 536270FD152E0A55009732E1 /* TaskTimer */ = { + isa = PBXGroup; + children = ( + 532DD96A1530C9AD00ED5845 /* UYLAppDelegate.h */, + 532DD96B1530C9AD00ED5845 /* UYLAppDelegate.m */, + 53A72C4A153DEE61000AAB9C /* Categories */, + 53627123152E0B65009732E1 /* Model */, + 5362712C152E0BFF009732E1 /* View */, + 5362712D152E0C07009732E1 /* Controller */, + 53627146152E0C72009732E1 /* Images */, + 536270FE152E0A55009732E1 /* Supporting Files */, + ); + path = TaskTimer; + sourceTree = ""; + }; + 536270FE152E0A55009732E1 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 536270FF152E0A55009732E1 /* TaskTimer-Info.plist */, + 53627100152E0A55009732E1 /* InfoPlist.strings */, + 53627103152E0A55009732E1 /* main.m */, + 53627105152E0A55009732E1 /* TaskTimer-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 53627123152E0B65009732E1 /* Model */ = { + isa = PBXGroup; + children = ( + 53627129152E0BF1009732E1 /* TaskTimer.xcdatamodeld */, + 53627124152E0B87009732E1 /* Task.h */, + 53627125152E0B87009732E1 /* Task.m */, + ); + name = Model; + sourceTree = ""; + }; + 5362712C152E0BFF009732E1 /* View */ = { + isa = PBXGroup; + children = ( + 532DD96D1530CA6400ED5845 /* UYLTaskListViewController_iPad.xib */, + 532DD96F1530CA6400ED5845 /* UYLTaskListViewController_iPhone.xib */, + 532DD9711530CA6400ED5845 /* UYLTaskViewController_iPad.xib */, + 532DD9731530CA6400ED5845 /* UYLTaskViewController_iPhone.xib */, + 532DD9581530C8EC00ED5845 /* UYLCounterView.h */, + 532DD9591530C8EC00ED5845 /* UYLCounterView.m */, + ); + name = View; + sourceTree = ""; + }; + 5362712D152E0C07009732E1 /* Controller */ = { + isa = PBXGroup; + children = ( + 532DD95C1530C90300ED5845 /* UYLTaskListViewController.h */, + 532DD95D1530C90300ED5845 /* UYLTaskListViewController.m */, + 532DD95E1530C90300ED5845 /* UYLTaskViewController.h */, + 532DD95F1530C90300ED5845 /* UYLTaskViewController.m */, + ); + name = Controller; + sourceTree = ""; + }; + 53627146152E0C72009732E1 /* Images */ = { + isa = PBXGroup; + children = ( + 534644A4155F083D00B20849 /* redbutton.png */, + 53BD55A21533880300BCFB33 /* checked.png */, + 53BD55A31533880300BCFB33 /* checked@2x.png */, + 53BD55A41533880300BCFB33 /* start.png */, + 53BD55A51533880300BCFB33 /* start@2x.png */, + 53BD55A61533880300BCFB33 /* stop.png */, + 53BD55A71533880300BCFB33 /* stop@2x.png */, + 53BD55A81533880300BCFB33 /* unchecked.png */, + 53BD55A91533880300BCFB33 /* unchecked@2x.png */, + ); + name = Images; + sourceTree = ""; + }; + 53A72C4A153DEE61000AAB9C /* Categories */ = { + isa = PBXGroup; + children = ( + 539F94EF153AE6F0009CF03D /* NSNumber+UYLTimeFormatter.h */, + 539F94F0153AE6F0009CF03D /* NSNumber+UYLTimeFormatter.m */, + ); + name = Categories; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 536270F0152E0A55009732E1 /* TaskTimer */ = { + isa = PBXNativeTarget; + buildConfigurationList = 53627120152E0A55009732E1 /* Build configuration list for PBXNativeTarget "TaskTimer" */; + buildPhases = ( + 536270ED152E0A55009732E1 /* Sources */, + 536270EE152E0A55009732E1 /* Frameworks */, + 536270EF152E0A55009732E1 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = TaskTimer; + productName = TaskTimer; + productReference = 536270F1152E0A55009732E1 /* TaskTimer.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 536270E8152E0A55009732E1 /* Project object */ = { + isa = PBXProject; + attributes = { + CLASSPREFIX = UYL; + LastUpgradeCheck = 1120; + }; + buildConfigurationList = 536270EB152E0A55009732E1 /* Build configuration list for PBXProject "TaskTimer" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 536270E6152E0A55009732E1; + productRefGroup = 536270F2152E0A55009732E1 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 536270F0152E0A55009732E1 /* TaskTimer */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 536270EF152E0A55009732E1 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 53627102152E0A55009732E1 /* InfoPlist.strings in Resources */, + 532DD9751530CA6400ED5845 /* UYLTaskListViewController_iPad.xib in Resources */, + 532DD9761530CA6400ED5845 /* UYLTaskListViewController_iPhone.xib in Resources */, + 532DD9771530CA6400ED5845 /* UYLTaskViewController_iPad.xib in Resources */, + 532DD9781530CA6400ED5845 /* UYLTaskViewController_iPhone.xib in Resources */, + 53BD55AA1533880300BCFB33 /* checked.png in Resources */, + 53BD55AB1533880300BCFB33 /* checked@2x.png in Resources */, + 53BD55AC1533880300BCFB33 /* start.png in Resources */, + 53BD55AD1533880300BCFB33 /* start@2x.png in Resources */, + 53BD55AE1533880300BCFB33 /* stop.png in Resources */, + 53BD55AF1533880300BCFB33 /* stop@2x.png in Resources */, + 53BD55B01533880300BCFB33 /* unchecked.png in Resources */, + 53BD55B11533880300BCFB33 /* unchecked@2x.png in Resources */, + 534644A5155F083D00B20849 /* redbutton.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 536270ED152E0A55009732E1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 53627104152E0A55009732E1 /* main.m in Sources */, + 53627127152E0B87009732E1 /* Task.m in Sources */, + 5362712B152E0BF1009732E1 /* TaskTimer.xcdatamodeld in Sources */, + 532DD95A1530C8EC00ED5845 /* UYLCounterView.m in Sources */, + 532DD9601530C90300ED5845 /* UYLTaskListViewController.m in Sources */, + 532DD9611530C90300ED5845 /* UYLTaskViewController.m in Sources */, + 532DD96C1530C9AD00ED5845 /* UYLAppDelegate.m in Sources */, + 539F94F1153AE6F0009CF03D /* NSNumber+UYLTimeFormatter.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 532DD96D1530CA6400ED5845 /* UYLTaskListViewController_iPad.xib */ = { + isa = PBXVariantGroup; + children = ( + 5334608B23CA3B5E00BE943E /* Base */, + ); + name = UYLTaskListViewController_iPad.xib; + sourceTree = ""; + }; + 532DD96F1530CA6400ED5845 /* UYLTaskListViewController_iPhone.xib */ = { + isa = PBXVariantGroup; + children = ( + 5334608C23CA3B5E00BE943E /* Base */, + ); + name = UYLTaskListViewController_iPhone.xib; + sourceTree = ""; + }; + 532DD9711530CA6400ED5845 /* UYLTaskViewController_iPad.xib */ = { + isa = PBXVariantGroup; + children = ( + 5334608D23CA3B5E00BE943E /* Base */, + ); + name = UYLTaskViewController_iPad.xib; + sourceTree = ""; + }; + 532DD9731530CA6400ED5845 /* UYLTaskViewController_iPhone.xib */ = { + isa = PBXVariantGroup; + children = ( + 5334608E23CA3B5E00BE943E /* Base */, + ); + name = UYLTaskViewController_iPhone.xib; + sourceTree = ""; + }; + 53627100152E0A55009732E1 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 53627101152E0A55009732E1 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 5362711E152E0A55009732E1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_OBJC_ARC = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 5362711F152E0A55009732E1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_OBJC_ARC = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 53627121152E0A55009732E1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "TaskTimer/TaskTimer-Prefix.pch"; + INFOPLIST_FILE = "TaskTimer/TaskTimer-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 53627122152E0A55009732E1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "TaskTimer/TaskTimer-Prefix.pch"; + INFOPLIST_FILE = "TaskTimer/TaskTimer-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 536270EB152E0A55009732E1 /* Build configuration list for PBXProject "TaskTimer" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5362711E152E0A55009732E1 /* Debug */, + 5362711F152E0A55009732E1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 53627120152E0A55009732E1 /* Build configuration list for PBXNativeTarget "TaskTimer" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 53627121152E0A55009732E1 /* Debug */, + 53627122152E0A55009732E1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + 53627129152E0BF1009732E1 /* TaskTimer.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + 5362712A152E0BF1009732E1 /* Accessibile.xcdatamodel */, + ); + currentVersion = 5362712A152E0BF1009732E1 /* Accessibile.xcdatamodel */; + path = TaskTimer.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ + }; + rootObject = 536270E8152E0A55009732E1 /* Project object */; +} diff --git a/Archive/TaskTimer/TaskTimer/Base.lproj/UYLTaskListViewController_iPad.xib b/Archive/TaskTimer/TaskTimer/Base.lproj/UYLTaskListViewController_iPad.xib new file mode 100644 index 0000000..f37ea5e --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/Base.lproj/UYLTaskListViewController_iPad.xib @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Archive/TaskTimer/TaskTimer/Base.lproj/UYLTaskListViewController_iPhone.xib b/Archive/TaskTimer/TaskTimer/Base.lproj/UYLTaskListViewController_iPhone.xib new file mode 100644 index 0000000..477fd87 --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/Base.lproj/UYLTaskListViewController_iPhone.xib @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Archive/TaskTimer/TaskTimer/Base.lproj/UYLTaskViewController_iPad.xib b/Archive/TaskTimer/TaskTimer/Base.lproj/UYLTaskViewController_iPad.xib new file mode 100644 index 0000000..1fd7bab --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/Base.lproj/UYLTaskViewController_iPad.xib @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Archive/TaskTimer/TaskTimer/Base.lproj/UYLTaskViewController_iPhone.xib b/Archive/TaskTimer/TaskTimer/Base.lproj/UYLTaskViewController_iPhone.xib new file mode 100644 index 0000000..328cc4f --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/Base.lproj/UYLTaskViewController_iPhone.xib @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Archive/TaskTimer/TaskTimer/NSNumber+UYLTimeFormatter.h b/Archive/TaskTimer/TaskTimer/NSNumber+UYLTimeFormatter.h new file mode 100644 index 0000000..3c2cd73 --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/NSNumber+UYLTimeFormatter.h @@ -0,0 +1,39 @@ +// +// NSNumber+UYLTimeFormatter.h +// TaskTimer +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + +@interface NSNumber (UYLTimeFormatter) + +- (NSString *)stringValueAsTime; + +@end diff --git a/Archive/TaskTimer/TaskTimer/NSNumber+UYLTimeFormatter.m b/Archive/TaskTimer/TaskTimer/NSNumber+UYLTimeFormatter.m new file mode 100644 index 0000000..b5c8699 --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/NSNumber+UYLTimeFormatter.m @@ -0,0 +1,63 @@ +// +// NSNumber+UYLTimeFormatter.m +// TaskTimer +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "NSNumber+UYLTimeFormatter.h" + +@implementation NSNumber (UYLTimeFormatter) + +// Returns an NSString with a textual representation of the time expressed in +// minutes and seconds (e.g. "5 minutes and 10 seconds" + +- (NSString *)stringValueAsTime +{ + NSUInteger minutes = [self integerValue] / 60; + NSUInteger seconds = [self integerValue] % 60; + + NSString *secondsFormat = (seconds == 1) ? NSLocalizedString(@"second",nil) : + NSLocalizedString(@"seconds",nil); + NSString *minutesFormat = (minutes == 1) ? NSLocalizedString(@"minute",nil) : + NSLocalizedString(@"minutes",nil); + + NSString *text = nil; + if (minutes > 0) + { + text = [NSString stringWithFormat:@" %u %@ %u %@",minutes,minutesFormat,seconds,secondsFormat]; + } + else + { + text = [NSString stringWithFormat:@" %u %@",seconds,secondsFormat]; + } + + return text; +} + +@end diff --git a/Archive/TaskTimer/TaskTimer/Task.h b/Archive/TaskTimer/TaskTimer/Task.h new file mode 100644 index 0000000..59044a8 --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/Task.h @@ -0,0 +1,44 @@ +// +// Task.h +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import +#import + + +@interface Task : NSManagedObject + +@property (nonatomic, retain) NSNumber * complete; +@property (nonatomic, retain) NSDate * createdAt; +@property (nonatomic, retain) NSNumber * duration; +@property (nonatomic, retain) NSString * note; + +@end diff --git a/Archive/TaskTimer/TaskTimer/Task.m b/Archive/TaskTimer/TaskTimer/Task.m new file mode 100644 index 0000000..da446c8 --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/Task.m @@ -0,0 +1,43 @@ +// +// Task.m +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "Task.h" + + +@implementation Task + +@dynamic complete; +@dynamic createdAt; +@dynamic duration; +@dynamic note; + +@end diff --git a/Archive/TaskTimer/TaskTimer/TaskTimer-Info.plist b/Archive/TaskTimer/TaskTimer/TaskTimer-Info.plist new file mode 100644 index 0000000..363537d --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/TaskTimer-Info.plist @@ -0,0 +1,46 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + UIInterfaceOrientationPortraitUpsideDown + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/Archive/TaskTimer/TaskTimer/TaskTimer-Prefix.pch b/Archive/TaskTimer/TaskTimer/TaskTimer-Prefix.pch new file mode 100644 index 0000000..79c40be --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/TaskTimer-Prefix.pch @@ -0,0 +1,15 @@ +// +// Prefix header for all source files of the 'TaskTimer' target in the 'TaskTimer' project +// + +#import + +#ifndef __IPHONE_4_0 +#warning "This project uses features only available in iOS SDK 4.0 and later." +#endif + +#ifdef __OBJC__ + #import + #import + #import +#endif diff --git a/Archive/TaskTimer/TaskTimer/TaskTimer.xcdatamodeld/.xccurrentversion b/Archive/TaskTimer/TaskTimer/TaskTimer.xcdatamodeld/.xccurrentversion new file mode 100644 index 0000000..34639d4 --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/TaskTimer.xcdatamodeld/.xccurrentversion @@ -0,0 +1,8 @@ + + + + + _XCCurrentVersionName + Accessibile.xcdatamodel + + diff --git a/Archive/TaskTimer/TaskTimer/TaskTimer.xcdatamodeld/Accessibile.xcdatamodel/contents b/Archive/TaskTimer/TaskTimer/TaskTimer.xcdatamodeld/Accessibile.xcdatamodel/contents new file mode 100644 index 0000000..0bd2cc0 --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/TaskTimer.xcdatamodeld/Accessibile.xcdatamodel/contents @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Archive/TaskTimer/TaskTimer/UYLAppDelegate.h b/Archive/TaskTimer/TaskTimer/UYLAppDelegate.h new file mode 100644 index 0000000..2f14c1f --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/UYLAppDelegate.h @@ -0,0 +1,49 @@ +// +// UYLAppDelegate.h +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import + +@interface UYLAppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + +@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; +@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; +@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; + +@property (strong, nonatomic) UINavigationController *navigationController; +@property (strong, nonatomic) UISplitViewController *splitViewController; + +- (void)saveContext; +- (NSURL *)applicationDocumentsDirectory; + +@end diff --git a/Archive/TaskTimer/TaskTimer/UYLAppDelegate.m b/Archive/TaskTimer/TaskTimer/UYLAppDelegate.m new file mode 100644 index 0000000..b0a54ba --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/UYLAppDelegate.m @@ -0,0 +1,164 @@ +// +// UYLAppDelegate.m +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "UYLAppDelegate.h" +#import "UYLTaskListViewController.h" +#import "UYLTaskViewController.h" + +@implementation UYLAppDelegate + +@synthesize window = _window; +@synthesize managedObjectContext = __managedObjectContext; +@synthesize managedObjectModel = __managedObjectModel; +@synthesize persistentStoreCoordinator = __persistentStoreCoordinator; +@synthesize navigationController = _navigationController; +@synthesize splitViewController = _splitViewController; + +#pragma mark - +#pragma mark === Application Delegate Methods === +#pragma mark - + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; + + if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) + { + UYLTaskListViewController *taskListViewController = [[UYLTaskListViewController alloc] initWithNibName:@"UYLTaskListViewController_iPhone" + bundle:nil]; + self.navigationController = [[UINavigationController alloc] initWithRootViewController:taskListViewController]; + self.window.rootViewController = self.navigationController; + taskListViewController.managedObjectContext = self.managedObjectContext; + } + else + { + UYLTaskListViewController *taskListViewController = [[UYLTaskListViewController alloc] initWithNibName:@"UYLTaskListViewController_iPad" + bundle:nil]; + UINavigationController *taskListNavigationController = [[UINavigationController alloc] initWithRootViewController:taskListViewController]; + UYLTaskViewController *taskViewController = [[UYLTaskViewController alloc] initWithNibName:@"UYLTaskViewController_iPad" bundle:nil]; + UINavigationController *taskNavigationController = [[UINavigationController alloc] initWithRootViewController:taskViewController]; + taskListViewController.detailViewController = taskViewController; + + self.splitViewController = [[UISplitViewController alloc] init]; + self.splitViewController.viewControllers = [NSArray arrayWithObjects:taskListNavigationController, taskNavigationController, nil]; + self.splitViewController.delegate = taskViewController; + + self.window.rootViewController = self.splitViewController; + taskListViewController.managedObjectContext = self.managedObjectContext; + } + [self.window makeKeyAndVisible]; + return YES; +} + +- (void)applicationWillTerminate:(UIApplication *)application +{ + [self saveContext]; +} + +- (void)applicationDidEnterBackground:(UIApplication *)application +{ + [self saveContext]; +} + +#pragma mark - +#pragma mark === Core Data Accessors === +#pragma mark - + +- (NSManagedObjectContext *)managedObjectContext +{ + if (__managedObjectContext != nil) + { + return __managedObjectContext; + } + + NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; + if (coordinator != nil) + { + __managedObjectContext = [[NSManagedObjectContext alloc] init]; + [__managedObjectContext setPersistentStoreCoordinator:coordinator]; + } + return __managedObjectContext; +} + +- (NSManagedObjectModel *)managedObjectModel +{ + if (__managedObjectModel != nil) + { + return __managedObjectModel; + } + NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"TaskTimer" withExtension:@"momd"]; + __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; + return __managedObjectModel; +} + +- (NSPersistentStoreCoordinator *)persistentStoreCoordinator +{ + if (__persistentStoreCoordinator != nil) + { + return __persistentStoreCoordinator; + } + + NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"TaskTimer.sqlite"]; + + NSError *error = nil; + __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; + if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) + { + NSLog(@"Unresolved error %@, %@", error, [error userInfo]); + } + + return __persistentStoreCoordinator; +} + +#pragma mark - +#pragma mark === Utility Methods === +#pragma mark - + +- (void)saveContext +{ + NSError *error = nil; + NSManagedObjectContext *managedObjectContext = self.managedObjectContext; + if (managedObjectContext != nil) + { + if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) + { + NSLog(@"Unresolved error %@, %@", error, [error userInfo]); + } + } +} + +- (NSURL *)applicationDocumentsDirectory +{ + return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; +} + +@end diff --git a/Archive/TaskTimer/TaskTimer/UYLCounterView.h b/Archive/TaskTimer/TaskTimer/UYLCounterView.h new file mode 100644 index 0000000..7fbd13e --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/UYLCounterView.h @@ -0,0 +1,51 @@ +// +// UYLCounterView.h +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import + +@protocol UYLCounterViewDelegate + +@optional + +- (void)didStartCounter; +- (void)didStopCounter; + +@end + +@interface UYLCounterView : UIView + +@property (nonatomic, weak) id delegate; +@property (nonatomic, assign) NSUInteger secondsCounter; +@property (nonatomic, strong) NSMutableArray *accessibleElements; +@property (nonatomic, assign) BOOL counterEnabled; + +@end diff --git a/Archive/TaskTimer/TaskTimer/UYLCounterView.m b/Archive/TaskTimer/TaskTimer/UYLCounterView.m new file mode 100644 index 0000000..245d24a --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/UYLCounterView.m @@ -0,0 +1,292 @@ +// +// UYLCounterView.m +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "UYLCounterView.h" +#import "NSNumber+UYLTimeFormatter.h" + +@interface UYLCounterView () + +@property (nonatomic, strong) UIButton *startButton; +@property (nonatomic, strong) UIButton *stopButton; + +- (void)setupView; + +@end + +@implementation UYLCounterView + +@synthesize delegate=_delegate; +@synthesize secondsCounter=_secondsCounter; +@synthesize accessibleElements=_accessibleElements; +@synthesize counterEnabled=_counterEnabled; +@synthesize startButton=_startButton; +@synthesize stopButton=_stopButton; + +#define UYLCOUNTERVIEW_LIMIT 3599 // Maximum seconds that can be displayed as mm:ss +#define UYLCOUNTERVIEW_MARGIN 10 +#define UYLCOUNTERVIEW_MINFONT 10 + +#define UYLCOUNTERVIEW_ELEMENTINDEX_STARTBUTTON 0 +#define UYLCOUNTERVIEW_ELEMENTINDEX_COUNTERTEXT 1 +#define UYLCOUNTERVIEW_ELEMENTINDEX_STOPBUTTON 2 + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) + { + [self setupView]; + } + return self; +} + +- (id)initWithCoder:(NSCoder *)aDecoder +{ + self = [super initWithCoder:aDecoder]; + if (self) + { + [self setupView]; + } + return self; +} + +- (void)setSecondsCounter:(NSUInteger)secondsCounter +{ + if (secondsCounter > UYLCOUNTERVIEW_LIMIT) + { + secondsCounter = UYLCOUNTERVIEW_LIMIT; + } + + _secondsCounter = secondsCounter; + + if (_accessibleElements) + { + UIAccessibilityElement *counterElement = [self.accessibleElements objectAtIndex:UYLCOUNTERVIEW_ELEMENTINDEX_COUNTERTEXT]; + counterElement.accessibilityValue = [[NSNumber numberWithInteger:secondsCounter] stringValueAsTime]; + } + + [self setNeedsDisplay]; +} + +- (void)setCounterEnabled:(BOOL)counterEnabled +{ + _counterEnabled = counterEnabled; + + if (counterEnabled == YES) + { + self.startButton.enabled = YES; + self.stopButton.enabled = NO; + } + else + { + self.startButton.enabled = NO; + self.stopButton.enabled = NO; + } +} +- (void)drawRect:(CGRect)rect +{ + NSUInteger minutes = self.secondsCounter / 60; + NSUInteger seconds = self.secondsCounter % 60; + + NSString *counterText = [NSString stringWithFormat:@"%02u:%02u", minutes, seconds]; + UIFont *font = [UIFont boldSystemFontOfSize:48]; + + CGFloat actualFontSize; + CGSize stringSize = [counterText sizeWithFont:font + minFontSize:UYLCOUNTERVIEW_MINFONT + actualFontSize:&actualFontSize + forWidth:self.bounds.size.width + lineBreakMode:UILineBreakModeTailTruncation]; + + + CGPoint point = CGPointMake((self.bounds.size.width - stringSize.width)/2, + (self.bounds.size.height - stringSize.height)/2); + + [counterText drawAtPoint:point + forWidth:stringSize.width + withFont:font + fontSize:actualFontSize + lineBreakMode:UILineBreakModeWordWrap + baselineAdjustment:UIBaselineAdjustmentAlignBaselines]; + +} + +#pragma mark - +#pragma mark === Action methods === +#pragma mark - + +- (void)startAction:(UIButton *)sender +{ + self.startButton.enabled = NO; + self.stopButton.enabled = YES; + + if (_accessibleElements) + { + UIAccessibilityElement *startElement = [self.accessibleElements objectAtIndex:UYLCOUNTERVIEW_ELEMENTINDEX_STARTBUTTON]; + startElement.accessibilityTraits = UIAccessibilityTraitButton | UIAccessibilityTraitNotEnabled; + + UIAccessibilityElement *stopElement = [self.accessibleElements objectAtIndex:UYLCOUNTERVIEW_ELEMENTINDEX_STOPBUTTON]; + stopElement.accessibilityTraits = UIAccessibilityTraitButton; + } + + if ([self.delegate respondsToSelector:@selector(didStartCounter)]) + { + [self.delegate didStartCounter]; + } +} + +- (void)stopAction:(UIButton *)sender +{ + self.counterEnabled = NO; + + if (_accessibleElements) + { + UIAccessibilityElement *stopElement = [self.accessibleElements objectAtIndex:UYLCOUNTERVIEW_ELEMENTINDEX_STOPBUTTON]; + stopElement.accessibilityTraits = UIAccessibilityTraitButton | UIAccessibilityTraitNotEnabled; + } + + if ([self.delegate respondsToSelector:@selector(didStopCounter)]) + { + [self.delegate didStopCounter]; + } +} + +#pragma mark - +#pragma mark === Accessibility Container methods === +#pragma mark - + +- (NSArray *)accessibleElements +{ + if (_accessibleElements != nil) + { + return _accessibleElements; + } + + _accessibleElements = [[NSMutableArray alloc] init]; + + // For the start and stop buttons we need to convert the button frame to the screen + // coord system when setting the accessibility frame. + + // start button + + UIAccessibilityElement *startElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self]; + startElement.accessibilityFrame = [self convertRect:self.startButton.frame toView:nil]; + startElement.accessibilityLabel = NSLocalizedString(@"Start", nil); + startElement.accessibilityTraits = UIAccessibilityTraitButton; + if (self.startButton.enabled == NO) startElement.accessibilityTraits |= UIAccessibilityTraitNotEnabled; + + [_accessibleElements addObject:startElement]; + + // The accessibilityFrame is returned in screen coordinates so it is first + // converted from screen to the local view coord system. + // The counter element frame is then calculated and then converted back + // to the screen coordinate system when setting the accessibility frame. + + CGRect frame = [self convertRect:self.accessibilityFrame fromView:nil]; + + UIAccessibilityElement *counterElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self]; + CGRect textFrame = CGRectInset(frame, UYLCOUNTERVIEW_MARGIN + self.startButton.bounds.size.width + UYLCOUNTERVIEW_MARGIN, UYLCOUNTERVIEW_MARGIN); + counterElement.accessibilityFrame = [self convertRect:textFrame toView:nil]; + counterElement.accessibilityLabel = NSLocalizedString(@"Duration", nil); + counterElement.accessibilityValue = [[NSNumber numberWithInteger:self.secondsCounter] stringValueAsTime]; + counterElement.accessibilityTraits = UIAccessibilityTraitUpdatesFrequently; + + [_accessibleElements addObject:counterElement]; + + // stop button + + UIAccessibilityElement *stopElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self]; + stopElement.accessibilityFrame = [self convertRect:self.stopButton.frame toView:nil]; + stopElement.accessibilityLabel = NSLocalizedString(@"Stop", nil); + stopElement.accessibilityTraits = UIAccessibilityTraitButton; + if (self.stopButton.enabled == NO) stopElement.accessibilityTraits |= UIAccessibilityTraitNotEnabled; + + [_accessibleElements addObject:stopElement]; + + return _accessibleElements; +} + +- (BOOL)isAccessibilityElement +{ + return NO; +} + +- (NSInteger)accessibilityElementCount +{ + return [[self accessibleElements] count]; +} + +- (id)accessibilityElementAtIndex:(NSInteger)index +{ + return [[self accessibleElements] objectAtIndex:index]; +} + +- (NSInteger)indexOfAccessibilityElement:(id)element +{ + return [[self accessibleElements] indexOfObject:element]; +} + +#pragma mark - +#pragma mark === Private methods === +#pragma mark - + +- (void)setupView +{ + UIImage *startImage = [UIImage imageNamed:@"start.png"]; + UIImage *stopImage = [UIImage imageNamed:@"stop.png"]; + + CGRect startFrame = CGRectMake(UYLCOUNTERVIEW_MARGIN, (self.bounds.size.height - startImage.size.height)/2, + startImage.size.height, startImage.size.width); + CGRect stopFrame = CGRectMake(self.bounds.size.width - UYLCOUNTERVIEW_MARGIN - stopImage.size.width, + (self.bounds.size.height - stopImage.size.height)/2, + stopImage.size.height, stopImage.size.width); + + self.startButton = [[UIButton alloc] initWithFrame:startFrame]; + self.stopButton = [[UIButton alloc] initWithFrame:stopFrame]; + + self.startButton.autoresizingMask = UIViewAutoresizingFlexibleRightMargin; + self.stopButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; + + [self.startButton setImage:startImage forState:UIControlStateNormal]; + [self.stopButton setImage:stopImage forState:UIControlStateNormal]; + + [self.startButton addTarget:self action:@selector(startAction:) forControlEvents:UIControlEventTouchUpInside]; + [self.stopButton addTarget:self action:@selector(stopAction:) forControlEvents:UIControlEventTouchUpInside]; + + self.startButton.enabled = NO; + self.stopButton.enabled = NO; + + [self addSubview:self.startButton]; + [self addSubview:self.stopButton]; +} + +@end diff --git a/Archive/TaskTimer/TaskTimer/UYLTaskListViewController.h b/Archive/TaskTimer/TaskTimer/UYLTaskListViewController.h new file mode 100644 index 0000000..53127fa --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/UYLTaskListViewController.h @@ -0,0 +1,43 @@ +// +// UYLMasterViewController.h +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import +#import +#import "UYLTaskViewController.h" + +@interface UYLTaskListViewController : UITableViewController + +@property (strong, nonatomic) UYLTaskViewController *detailViewController; +@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController; +@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext; + +@end diff --git a/Archive/TaskTimer/TaskTimer/UYLTaskListViewController.m b/Archive/TaskTimer/TaskTimer/UYLTaskListViewController.m new file mode 100644 index 0000000..0505d63 --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/UYLTaskListViewController.m @@ -0,0 +1,247 @@ +// +// UYLMasterViewController.m +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "UYLTaskListViewController.h" +#import "Task.h" +#import "NSNumber+UYLTimeFormatter.h" + +@interface UYLTaskListViewController () +- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath; +@end + +@implementation UYLTaskListViewController + +@synthesize detailViewController = _detailViewController; +@synthesize fetchedResultsController = __fetchedResultsController; +@synthesize managedObjectContext = __managedObjectContext; + +#pragma mark - +#pragma mark === View Life Cycle Management === +#pragma mark - + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) + { + self.title = NSLocalizedString(@"Task List", nil); + if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) + { + self.clearsSelectionOnViewWillAppear = NO; + self.contentSizeForViewInPopover = CGSizeMake(320.0, 600.0); + } + } + return self; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + self.navigationItem.leftBarButtonItem = self.editButtonItem; + + UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)]; + self.navigationItem.rightBarButtonItem = addButton; +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation +{ + return YES; +} + +#pragma mark - +#pragma mark === Table View Data Source Delegate Methods === +#pragma mark - + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return [[self.fetchedResultsController sections] count]; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + id sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; + return [sectionInfo numberOfObjects]; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"Cell"; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + if (cell == nil) + { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; + if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) + { + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + } + } + + [self configureCell:cell atIndexPath:indexPath]; + return cell; +} + +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath +{ + return YES; +} + +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (editingStyle == UITableViewCellEditingStyleDelete) + { + Task *task = [[self fetchedResultsController] objectAtIndexPath:indexPath]; + if ([self.detailViewController.task isEqual:task]) + { + self.detailViewController.task = nil; + } + + NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; + [context deleteObject:task]; + + NSError *error = nil; + if (![context save:&error]) + { + NSLog(@"Unresolved error %@, %@", error, [error userInfo]); + } + } +} + +#pragma mark - +#pragma mark === Table View Delegate Methods === +#pragma mark - + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + Task *task = [[self fetchedResultsController] objectAtIndexPath:indexPath]; + if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) + { + UYLTaskViewController *detailViewController = [[UYLTaskViewController alloc] initWithNibName:@"UYLTaskViewController_iPhone" + bundle:nil]; + detailViewController.task = task; + [self.navigationController pushViewController:detailViewController animated:YES]; + } + else + { + self.detailViewController.task = task; + } +} + +#pragma mark - +#pragma mark === Fetched Results Controller === +#pragma mark - + +- (NSFetchedResultsController *)fetchedResultsController +{ + if (__fetchedResultsController != nil) + { + return __fetchedResultsController; + } + + NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; + NSEntityDescription *entity = [NSEntityDescription entityForName:@"Task" inManagedObjectContext:self.managedObjectContext]; + [fetchRequest setEntity:entity]; + [fetchRequest setFetchBatchSize:20]; + + NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"createdAt" ascending:NO]; + NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil]; + [fetchRequest setSortDescriptors:sortDescriptors]; + + NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest + managedObjectContext:self.managedObjectContext + sectionNameKeyPath:nil + cacheName:@"Todo"]; + frc.delegate = self; + self.fetchedResultsController = frc; + + NSError *error = nil; + if (![self.fetchedResultsController performFetch:&error]) + { + NSLog(@"Unresolved error %@, %@", error, [error userInfo]); + } + + return __fetchedResultsController; +} + + - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller +{ + [self.tableView reloadData]; +} + +#pragma mark - +#pragma mark === Action methods === +#pragma mark - + +- (void)insertNewObject:(id)sender +{ + NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; + NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity]; + Task *task = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context]; + + task.note = @"New Task"; + task.createdAt = [NSDate date]; + + NSError *error = nil; + if (![context save:&error]) + { + NSLog(@"Unresolved error %@, %@", error, [error userInfo]); + } +} + +#pragma mark - +#pragma mark === Private methods === +#pragma mark - + +- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath +{ + Task *task = [self.fetchedResultsController objectAtIndexPath:indexPath]; + cell.textLabel.text = task.note; + cell.detailTextLabel.text = nil; + cell.imageView.image = [UIImage imageNamed:@"unchecked.png"]; + cell.accessibilityLabel = task.note; + + if ([task.complete boolValue]) + { + NSUInteger minutes = [task.duration integerValue] / 60; + NSUInteger seconds = [task.duration integerValue] % 60; + + cell.detailTextLabel.text = [NSString stringWithFormat:@"%02u:%02u", minutes, seconds]; + cell.imageView.image = [UIImage imageNamed:@"checked.png"]; + + NSString *durationText = [NSString stringWithFormat:@"%@ %@",task.note, + NSLocalizedString(@"completed in", nil)]; + durationText = [durationText stringByAppendingString:[task.duration stringValueAsTime]]; + cell.accessibilityLabel = durationText; + } +} + +@end diff --git a/Archive/TaskTimer/TaskTimer/UYLTaskViewController.h b/Archive/TaskTimer/TaskTimer/UYLTaskViewController.h new file mode 100644 index 0000000..e73c2be --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/UYLTaskViewController.h @@ -0,0 +1,43 @@ +// +// UYLDetailViewController.h +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import +#import "Task.h" +#import "UYLCounterView.h" + +@interface UYLTaskViewController : UIViewController + +@property (strong, nonatomic) Task *task; +@property (weak, nonatomic) IBOutlet UITextField *taskNote; +@property (weak, nonatomic) IBOutlet UYLCounterView *taskCounterView; + +@end diff --git a/Archive/TaskTimer/TaskTimer/UYLTaskViewController.m b/Archive/TaskTimer/TaskTimer/UYLTaskViewController.m new file mode 100644 index 0000000..e956ad2 --- /dev/null +++ b/Archive/TaskTimer/TaskTimer/UYLTaskViewController.m @@ -0,0 +1,299 @@ +// +// UYLDetailViewController.m +// +// Created by Keith Harrison http://useyourloaf.com +// Copyright (c) 2012 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of Keith Harrison nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "UYLTaskViewController.h" + +@interface UYLTaskViewController () + +@property (assign, nonatomic) BOOL running; +@property (strong, nonatomic) NSTimer *taskTimer; +@property (strong, nonatomic) UIPopoverController *masterPopoverController; +@property (weak, nonatomic) IBOutlet UIButton *taskResetButton; + +- (void)configureView; +- (void)saveContext; +- (IBAction)taskResetAction; +- (void)voiceOverStatusChanged; + +@end + +@implementation UYLTaskViewController + +@synthesize task=_task; +@synthesize taskNote=_taskNote; +@synthesize taskCounterView=_taskCounterView; +@synthesize taskResetButton=_taskResetButton; +@synthesize running=_running; +@synthesize taskTimer=_taskTimer; +@synthesize masterPopoverController = _masterPopoverController; + +#pragma mark - +#pragma mark === Accessors === +#pragma mark - + +- (void)setTask:(Task *)newTask +{ + if (_task != newTask) + { + _task = newTask; + + self.running = NO; + self.taskTimer = nil; + + // Update the view. + [self configureView]; + } + + if (self.masterPopoverController != nil) { + [self.masterPopoverController dismissPopoverAnimated:YES]; + } +} + +- (void)setTaskTimer:(NSTimer *)taskTimer +{ + [_taskTimer invalidate]; + _taskTimer = taskTimer; +} + +#pragma mark - +#pragma mark === View Life Cycle Management === +#pragma mark - + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) + { + self.title = NSLocalizedString(@"Task", nil); + } + return self; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + self.taskCounterView.delegate = self; + [self configureView]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(voiceOverStatusChanged) + name:UIAccessibilityVoiceOverStatusChanged + object:nil]; +} + +- (void)viewDidUnload +{ + [super viewDidUnload]; + self.taskTimer = nil; + [self saveContext]; + + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [self becomeFirstResponder]; +} + +- (void)viewWillDisappear:(BOOL)animated +{ + [super viewWillDisappear:animated]; + self.taskTimer = nil; + [self saveContext]; +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation +{ + return YES; +} + +- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation +{ + // The accessibility elements should be recalculated when the orientation changes + self.taskCounterView.accessibleElements = nil; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - +#pragma mark === Split View Delegate methods === +#pragma mark - + +- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation { + return NO; +} + +- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController +{ + barButtonItem.title = NSLocalizedString(@"Task List", nil); + [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES]; + self.masterPopoverController = popoverController; +} + +- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem +{ + // Called when the view is shown again in the split view, invalidating the button and popover controller. + [self.navigationItem setLeftBarButtonItem:nil animated:YES]; + self.masterPopoverController = nil; +} + +#pragma mark - +#pragma mark === Text delegate methods === +#pragma mark - + +- (BOOL)textFieldShouldReturn:(UITextField *)textField +{ + if (self.task) + { + self.task.note = textField.text; + } + [textField resignFirstResponder]; + return YES; +} + +#pragma mark - +#pragma mark === UIResponder Respond to motion events === +#pragma mark - + +- (BOOL)canBecomeFirstResponder +{ + return YES; +} + +- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event +{ + [self taskResetAction]; +} + +#pragma mark - +#pragma mark === UYLCounterViewDelegate methods === +#pragma mark - + +- (void)didStartCounter +{ + self.running = YES; + + // Create a timer that fires every second. + NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 + target:self + selector:@selector(timerTick:) + userInfo:nil + repeats:YES]; + self.taskTimer = timer; +} + +- (void)didStopCounter +{ + if (self.task) + { + self.task.complete = [NSNumber numberWithBool:YES]; + } + + self.running = NO; + self.taskTimer = nil; + [self saveContext]; +} + +- (void)timerTick:(NSTimer *)timer +{ + if (self.running && self.task) + { + NSUInteger duration = [self.task.duration integerValue]; + duration++; + + self.task.duration = [NSNumber numberWithInteger:duration]; + self.taskCounterView.secondsCounter = duration; + } +} + +#pragma mark - +#pragma mark === Private methods === +#pragma mark - + +- (void)configureView +{ + NSInteger duration = 0; + self.taskNote.enabled = NO; + self.taskCounterView.counterEnabled = NO; + self.taskNote.text = nil; + + if (self.task) + { + self.taskNote.enabled = YES; + self.taskNote.text = self.task.note; + duration = [self.task.duration integerValue]; + if ([self.task.complete boolValue] == NO) + { + self.taskCounterView.counterEnabled = YES; + } + } + self.taskCounterView.secondsCounter = duration; + self.taskResetButton.hidden = ! UIAccessibilityIsVoiceOverRunning(); +} + +- (void)saveContext +{ + NSError *error = nil; + NSManagedObjectContext *managedObjectContext = [self.task managedObjectContext]; + if (managedObjectContext != nil) + { + if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) + { + NSLog(@"Unresolved error %@, %@", error, [error userInfo]); + } + } +} + +- (IBAction)taskResetAction +{ + if (self.task) + { + self.running = NO; + self.taskTimer = nil; + + self.task.duration = [NSNumber numberWithInteger:0]; + self.task.complete = [NSNumber numberWithBool:NO]; + + self.taskCounterView.secondsCounter = 0; + self.taskCounterView.counterEnabled = YES; + } +} + +- (void)voiceOverStatusChanged +{ + self.taskResetButton.hidden = ! UIAccessibilityIsVoiceOverRunning(); +} + +@end diff --git a/Archive/TaskTimer/TaskTimer/checked.png b/Archive/TaskTimer/TaskTimer/checked.png new file mode 100644 index 0000000000000000000000000000000000000000..df7084dc9f6845b1f42013f2118460dae4ede262 GIT binary patch literal 1790 zcmZWp4LH+l8~_u&kgx2A_ zua2e;AvGjA9O?8y3~v-COUn1xt5t70qxW^4>w2H-x}WEM?(28|?%#c1&-I7{1AGni zEc5^XFd&n>4{A>H72BYr+1uV`(f|N5%Ony5$wVR;$m2vYV;KOjOPYJ=1!pj5i>H_q zR%Ys1T7AyYB)jSmCA5B<#V_qTA_!}4;7 z&5wlG@3E)1&oR^T<=<5rfkQs;XTKT7KcB;lSRr<11yh9us&89eEO!`rP{wyf7G#(8 z*V&KQwtaGOdLOI5V3}SA+YcYNXn2%#;N(;>wL7?Bf8gg%H_q-Ob4hb==U?wUKhk)< zH$36Ka${;`Og*^`3A_7RZN4+rWUi?_%r;ku^qMa!PA>cP{R4N?3CavOBvwSLGv$GI zPdv`wsbKLEpWrIa%3>Pa|BlTt+caF!Ly(Taye>rXuSaAhPvlm2H9Jnj{aznQF`f9Q z?X)jnVh%Ng0W;!6+tp099q_CIwhD=P{ZO;+Bgww|+fEj`w% zKaCE)q2+v4BGSKW#XUfQK>YFpl?U^;ip!~njH$%YwAQ$`LWAr5MQ%RK&X=2}&sbg( zY|fm#KL&o2N2C|#r1=fmaHOp^+1;CX+@4#O*`1Luo-HomT)P}pRvC}#fAopiGIKq- zyQ?a7@ttYRN2!eIP$JZAX*IlA2$}m(h4^&CVZNGxxRYEvF>dUKkvGc+<^NXdO<$AO zWl29^>&`YGBGK4UlBXD)k3?kl5Daf+oI2IT{R~MwnRDAV@-e!9Gc(xkjqVkZt;gUF z@`d4i&kH7_Uyt75C4^oaJV{musSm3Ur~}mDYIFL_JZ^}Ztbm?^h2>oCRgKXWCNq*k zd!79o!zqqea&Cquk$>NdBvp}q>nKse4al_a?aIj^%x&QvAzVk+($w3#RP9lfegqP* z-b9EO!98kO%fy)OeP>D3L8W1B2-~SmR%p@#W+(r)DUM`$Tydd9p&JiVjNS6Pyj-Yv zBFChP4;G?#Uwf2f-IeHdI%(jz+0@l3SzPY32ILGSzkk#GSol9)DOGdMI$JN@$RH~?jlF=x>YTshB4)?)-%tC-TVcV`> zy)<9IS6osE9{|4Iykc5Fv1}^3VqPq=fCNi z8y0#(AmE~r$b^IhM1l)~!#j?2LZMJdM`xt7GhBm!^Ap(usu0fR!@iLGkH?$Ar}3Cv z0h7Z9S9qzBoOl5i3SB9*w!Y}3)7I*6<9V^GRp>M%BbLEpumyai6T%6(My|=l&}nFX zd}K6(CRo+IMz`7kfqESImoNtT|7Z+yMbTdrerbO-s_7r6he58*5~nxnX@J*E9!>Vf z2a&{0eLwAQ4cwSE$NARUW<#E}W9+&;gmjf>3sp+8B-t428jITu#DjTc%Ot%FAOnP1 z!&*eUGFZ>w_zVj#HcWi_Fwl6h04SO-F52A{x~^hNy~MuT8%=`9m!j?P5@TK_7zz2Zrow2mla?II!@QYs&=%ZBR0PF72`@um_Hpiuu#PP1I!;!snp zjW3Xt1E_5s4p}mt7MB{CHvX{WB7k}?4Fym}X})wPGki2%H&irfIY6{0wxH*?gQAy^ z^(2_0K3ge;*Qiv^9reDi@9#n5|F)bJMWCm?x@N_-s&{bwBt0+}G#++@JgT<4&PE?N(CIQ~-fMN@RQD z-eqsHV)C-f_eL9`7zBcR2(YuGlI`pOY8b~iAeaRLZ4srrz2rQ1Rkcas(9gncO2iq; zYN=IjE(au9nwMK-$tTO+6Er1{pKUw)Ae^n~(zo+kSBP8jXDN>20wnIL+{P>cK~u5$ z^VKPE4cWz3tw;YXjz56+KlwTS0=KftrT$<`ov13-YAn)v=BYWp)xBUOpR93c@Z&-A zVo_#se(oRpbl0@oZl1@NpNnz2K}SiUS`v5nHhJmZ8MKfanE1&H-&au%(f^we?2bFK zaW)_>yW)>Z6=0CG_+jgi?TcCLYaNuKkj4G1K4Le|R&@@Ap z@Z*HHY_(7#nq%8tK3=3%Q22;v^TxV%+nM(6$_u%yTROzU8!`;cN)9zCPGe|Sz$WLj zk`-_3aGhNs5K1<+dvErJlyZhLYbt6qt|_!RU+GfcDRWXl`zzS=aqU9>`oziBF<|Qn zJD>ctILe?tN7SUB+6fEec3sm>ZD+phpP#cf>)1Y`lh7vlo8+ZBb19~?qbhd(3q0tX zs3>52u|Te|Nx3E;GW)d(wRC0sM==3)Gp2fCd>sW_(NOWc;#0T6^u>x=q3A2FHmSkQ z-ka^4^%QGO%1Ty$1b8;F4j=B|{)9wDq+K^)KF0K|51?&+Cs&qiVEKF#IcF%_CP!^_ z?dZ+0$OC!LBghM`3;PzF7n~M67c_ico#1*bkn0eK_2_A*dq&2*=Oz=P5A>Kg)_b}b zm8I1jh$cV$6K!8*fA4;AH&Ti0-MO)Qau9o6a8rPkEo!{g)ALzuSrxw@;v}OcuuVo< zR)_qs3+i-8vS&Q+R<8D78#fo_t91dXG527h_S$}RImLBy;d*sr*C?ld^ZPB_NQTQX#1AgjL=ckH7)BA6rXI!%TM$L|1I8VPaf9I%&siPG&>Z${79Mv%n zT$uqHN;jRq^93oMi`JhTlC_*yAM~(5^z$LZK`JHRYVCWIBVSh+gXxwf7B3P%JlUgv z6#OCZ+n3qcgBmvr+2(~RA8wB?NFN#*@trFk_2rE?%s0q#AADE$0EG&gx7@`quYfgN zdk-E6w08Z9fk6dD8$cj1JHVC3r#VtE-kcB=!-vCUp#&k^Wi$wc6=0Ub5Eh>S2ttC{ zJd6N`SVdr#kqX#x!dQSA$_!J;2zqJAu{rfMi6-I58Y(XHYB{I?0 z)&JPbQ;zno&Z@1k7BFY7@$t2y7tijx*>=dq`wyQx@%dQ&fGbJ9_6q&lBlt0gwNmb9 zu5ERP*@hs5My2o`l0PGnA;0U%_X9UIB&Lts>LUjWqukpW@W?^j*vp|J-gMsv{3N(P z?-Qu=1P&tQ9JnS+pYRnRLH9s|gfqfqq4@Mz@3RCMTgsUW`|*@11!!~s>$r*cLR>_G zc@Wv;@`JYnOrwL1yNB_VJ~hR1hjeJ_lI$!LlsrkI!i@95!?=!D9ZPaaOJyW~m?Tw8 zy3w>ArYO9V2JypEHo6`aEnZ4|hd=z+sj}cB`>mFe)`=z>HRv-v*5($Qn_Y#Vk8$38mq|b8a|w~qxCDD)1k@8>Nt8TDCI30`T9+Iz`wb@(EZrx zLod%QhnK30-;4J0+?IR}>Ir33gd8D#xt!51)j;iX-*=B~6w;`*Euu2~jX9Tap4#J; zbnhrEQXYJ=76{ZZ!_`7@LZ!^?g3M2+cBKPvallR}?#?kF0~RZLJ-qV)XM5_)Ly8|1 zEXVz?DrmzVwti)Yii=xyq)MeS6VDquIv|OabtRJV_`IL{dgPf;Ak6ho3%AKL<;4WP zn*Y_n3E zu6TQCCis)?H1zVM^$k^3p-i@2+we8L`+B4VX>l9|mX{LI+EWvk@3g*jD*&fzJ(aK| v8_LW}d5@_B&>Vo3r&8}hSX40 + +#import "UYLAppDelegate.h" + +int main(int argc, char *argv[]) +{ + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([UYLAppDelegate class])); + } +} diff --git a/Archive/TaskTimer/TaskTimer/redbutton.png b/Archive/TaskTimer/TaskTimer/redbutton.png new file mode 100644 index 0000000000000000000000000000000000000000..5b99cd97c28a264f388e15a67e9723bfa10d3553 GIT binary patch literal 2242 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 literal 0 HcmV?d00001 diff --git a/Archive/TaskTimer/TaskTimer/start@2x.png b/Archive/TaskTimer/TaskTimer/start@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2e2bc5218486b53ea67ef7dc4eda6cbdf5478397 GIT binary patch literal 2864 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 literal 0 HcmV?d00001 diff --git a/Archive/TaskTimer/TaskTimer/stop.png b/Archive/TaskTimer/TaskTimer/stop.png new file mode 100644 index 0000000000000000000000000000000000000000..25d1c1102f34992286c860186f1b876cc41ea1a4 GIT binary patch literal 2173 zcmZWpc{mhm7oRaAJJ*_Zj3v~}*q33(nr5;jOO3LR!Ne@g$RN=a*%CsN+-r$jL!m@S zmTb2WO_nQRB9vvUNp;hQzOUy#&-XshdEfJ%_ji8hciulvii`765kYxD001C@LEE|R zoLalKpKoVR->xSD0H76ut*r~j))wp%K@K8>;dh?1u6m4<$K0hXQ^;PWGL}UTGDM}* zsyy7zG$_d5@8ZK;FZ*aC-_ZBBPU-VVlDyl9aoua8N8u(9S$GSS@Q`0QlWrp~+_Cv^ z3HS)(W-UFWUW%l>u?o4q$tb5(R=GX#?yAqKiZ`2!LM^{Cvg$sSKh4A(@S9lkHY&`z zR>;gVKdCCvZ+&pX>dv3B&W&C$9#~i6(cyMq)wT%}{x=IhsF5dGcR=cY*o2)z#wo87 z5^`APm15ut`!6fnlh$unEvA%Un#ovydfxQmb^}EfF;lmBt$@6=(ve!7DUFWr26|t@ zgx3`rwQ9$q^YV?oF(=L~<@>X-jmKSn^c#_lPp`(Teq5W?yf*dZ+K^9F_n>%uWoQGY z1FqIQyLCV_UV8OumzTy>I^1gQW`1nxvoFt0WER|(!4oO$Mw3+JC0U8d^4B(5b81$(LDYM`$*~Jp9}KkUa-oj1r!UAX+}7Y8rA)r=>Pe0j zkN@yyp10o<`)82P%y#0T3|~>I_%O7_{XHth?rBk%6?f!LS3T5>Gp!nNM&H{YL&|15 z8^>3Z+>o_Svb}$~Kq3ED57qKLs#d4Cf3UJV5C2rj?z~)vhGCIkyD%4ltp@7f&AcMq ztVB8C1_C+exD2}H$fexz7sW3{&m^>mcQ8fnjodV{C-lFQ;9gd|MUzZi?4AQ_XWIrc z(-Ryg)X7=x>S=6=2+Hd^#kBr_@zITSl;OakX{AfO4S(4CN-f`uWe-%vZ+w;s{gzcg zI8;dIZ*3QS#00H=t%7~8KD7402G$f?voQagqXnylHOBfhD9Ei~)h1_sMb;*@c%X5l zpv+emDErJSvOQp*cKrGC1C$@2=yU0hH3Iq&Ba#H{!4LdpS2Rq=R4}=dIhMK7GeR>> z5m9GujGe=5xo@4^IC#nHFcV>1 z(Ho;W5N#C~^Cnn!>F!cN_|?%y__ABh$c*8I^1EKu8*LXn4V=teq8~aS=V1f$;Ob>? zONq+ew$IQ9>oMxhhp3&54L z-#)L#dmm`JMKZc2w$ePm#p^dc9kgCJ6GWYM*l6LSJpV`56A(`C(0XRIGXexCXiq8t zASAhKKtO(h8~^|$5!|sftdk=GM<&Aj1IYn+7@bJjK?495bi|HJ#MAu2bYd8Zil8GQ zdkDmizZ-@_znqE8jXU0 z!=s|2U{MAzazrp(&&QPqBu{Ex>DPsK$LC^Q0@1m5NK z42Q4vD3P$E2RUi-XQ?Zgwwm$CtQEGeYg$UgT^Xx3Bl*Ej^54kcZ&M&P6$jpsBzj z&>Y>8`T?O(G)mye>xwyoZ~*rTU2~yYdFJ}0|-pF0$99thKLf980BEp4SxQQpC;a~^RmBK5(($wWz-jw4ra^Y`+$~nJR9H}d26jkype5K zMNa$MgwCAP>|z44zf{{rRa9vFFq1g#?0YFQA-+|eEmozMPeSTQYaa&r@V!g;t4--% zW@q;OMIq-hmAB(`I8fw8j}X$b0{vvEMQ1Y=XI8z~lRS~+r8bmePo8L5Kh_}H_Zoym&Uo2D5r_8mudxa3XdqNIIBRy>avWM&lP zUN!jZun^bu=o<3g-6*?99&jMMJ^sY&7VpDPM|1?=&i$f<|5bXASK+2vh>OvA*=2l8 zcBw(d9>|E*wCqhBn#;!Fdo z6(RrR|3XfyF*x_E(f$#WfwWIJZAtQLE6WW%q)qe| zPY#hzJM!|{W~2KZviB$7!;0eOBc@_n!di1h$_K9>x59JB#TPCf%%@7kf9{xuC})}b z=cdNkjwlc_TNF}WijzsN>JO%Hec!)XTQ%0|Rhc{#*WGZ_%6s2pdDP2ZR`lAs8xpTdwU%U}#Qy(h&_UI2v;9ZZ-2o@(Q>JH1Haz?XFa==r< zQ;lSr`?cY-s12u$zcx;9*ll=iNc)dxkuV!5HuRjlN9v7%$!WjU&vB9N0~)6udpW8V zr`EbhqF&e_tXbA=&kOotA}GI?vi+Y&3?I@P=`aB%r)gl|Yn3i5){WPWA51q*gz450 zw#?7GJegpP9qt#c!Gx-}GIPPNASqF8;$hYY1KBwRY{77O_H@1NjjdczP%4;3f#m9I z-|vn*+#7*BANe*=YQAKi8J70u5n|CXdvHqYLRpDN<=WE=7|m09=!oi*MziqVSxDs~ zr1`d7$ZpM3n$!qJ2l|G}J9cJI;g34&*NL==ngSjV-9nvr@k@W(D_r1N z3jVRa9PKIHm>+sPf6vmB*$qCQ$;p7#f~f$?BUmToHAZ@Dw07JU|HYDJvSO}dE5=zmh z8$o|7^tbU2jetUaOQ>gzpsuIT5OX3K2hoCS!PTI~AP59vNcIoVcd)Sf@A2)O5j2QO zCFvs&G#U*~(}WYrfe3XyJw1e)20}vvwyl6sB0{NHIxLhT|BuQ4d@OJjKQf*~#S=pz zJHA+7VmQ?Z3f)QcXZ%yAzu%ucq;PV`?=1d)2wVt`fD5Hk5bAJs#2@qRvxfeD`jl|r zV4NTIcin&Nem7u-4MhBlHbnft+7Pi*(Z4GEr~TjTcK^m8L&TrEGzLwXh?oKZ{1}vl zsS}+!&pZ|6VR?`feWge!3lzLZGEI{Ac)x5c7_VBF2$7AnM#e!2B~9PMN@crE#Ud-A zZE>;|mBGRX(4eZ=VgWPd+s>aXOU3X&<@t}<7D`U}ty@Ojp;_lgSB+`fi-Nq^k?yEp z>s{RoPjuvLER>S%-TQck?3C3GAF>pzOmG;EF&@K?jkvu9l>;6IWGbdktD zd30%1%y|xk1Q_BE(bR1@X43<7iBa|eWxna3OpQ(YaHa61kHr|1(+u338yRVF44fJ4 ze9y*m`rF`jab5TlJ#@W@#cW_70?G-i#@h@l5wWHos;U=J<@dUP2;tf{Dq?3r%)PGZ zsueenfgd*N=UnP+xXYgoq7KQ6J>s`(-RojMP}a-|KK{2}wA9e(CJ<{q78w%uWuH~! z>IitlY;5bJ#I754+y?)NYOt$41;~pRvfVOwEA5CWh|$?wpdu&B55Lv#j%V5?TgSeg zMU5FQ`N%vi7ni)^fcO05I2LZP&~9XUj$tDLl$bf1K<%`La4=(HP}+o3`cZV(580VZ zls@zdc-MEYgydy<(3W(`<9R+zr%FN`M>+djbh~Zg)-zpu$@leiE5;sM70bnEHsQCM z2?ZKWN$THd<7uf7vUV``iX=VD@B^4Ttu%0;j#MjI(l53|h%M|^s^Qd5(c8f2`ZsaLB@Im+4(LMjvRs+y0)}4_J0b zzbm&%G)wC8y}O3eJ?pF5`|#NjoQ}=>vi_K4iC|L!S05@Y{q@CKFylwi0~cq!`b^Fz z#oihpp{O$%bs}^j!^`Gs+SU9+bKPru*(yI=%cq0_t?nR=+PeL(_6OYIULOx(Q~(u4 zE`mOHDvP;?eG3DHv^~A8wFBPeIYR0uRvhb*nr8g)>3vBL%5^oFK;qOkVsB;xdv<}@ z*^ZE>-P{g?t444WJH{Xxq>!5;HF>B@_Mu#d(|b`yPXFE6_EVkL^!#&1gl|sVpY8zH zOa#j7gd(F&QZwe@1}3au3yXstm;BydAD4A?DFZfUIU?)(5}$h?&}{SyJT>u=%&{@;Fq$F2@}Em3>3?@8QWu%z!-XNG7~Wl-{ia5371s4j%;03?r|^Ns@zoU zN>ZJy9c2`DTFT+XlF~MXJeCahD=Z!0e5q>^iYSP|lxzXNe6NzgSon+AaOh}8rF2UwU-YE{Y1m-;((wFWIJ11Gq4yi(7{Kdy)mku2*3e;y!`Ud7#M)8gm#^xm@ky*3)wf+4Fk}PxoS6+nNSXi0 ZhiF@Y8|3ijF6*673}tC&QDNp2`yaCT6f*z- literal 0 HcmV?d00001 diff --git a/Archive/TaskTimer/TaskTimer/unchecked.png b/Archive/TaskTimer/TaskTimer/unchecked.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f88e126a1d92060e63e0b9e807e71fe494a30e GIT binary patch literal 1536 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%1|*NXY)xihVE&Nl>>S|f?5q$_l%JNFlghxL zF|jxFZvO2M5&O>km?dKN3pV!giFU6K4UXO^Ew%O-o9E=EFP)@zp1q;9VEBTyyC%o=Ipm#|1T~LTe+NBWu8+`xNWW6$ION)E3Mb@E8KJY`9br(Z z(0BMWb5`||LqAWNi@gqhuW+w(N7j$ll>z%Q&Q4L=ky})G&TduPoa|lZUAE2Qg7;Tl zcAEHH*esy+FYGsXr|a`9s!r_nV%2x<1@|u>JKa$&Q2*lAE0*(-5zErz zp8jjq?u+Lu7PzLnIpm35r_0_2#~j{WUw&+duH}Qribc^zvBrHOPX8t)vu*C!Iq`Fz z^V*g<(z9ltF1CMSw^eK5`77&IO-tP?>rx}pr)shw;V{oTtB4JZMk^+?^X!u?2n=Rs z_L&lJC1{F7=ki3p)VGyS8x9v9nZdi}`b<-|%<~Tg-?hlhE)i~hbNso2<|OBo89fa? z_f+yH9#-kTBv@2%d7Di4`J}ryzkIecxuE@6w)xD?d2aC{@7Gjcy0E_f%XhKt-xKF# zYR|7=KX90D%M9j^zt-#h-Jtzxqm$mA>dmiT3HjKp+`sbn%CA?r-mPA_wPWHh+pTT; zLp_r7(k5KAv2&ZyE`C}e?r>^N&4q&h%#~$5+f|d!T3r{;j8K2UzO-G{;BS&JmsbDvEJk8iTPJ_c|DUa$z6GK&t`kYo(f&IIS2M$z4~pV#rmcw zWX@! z_Olh7{39O8P*`z9z9|8>y;bpKhp8 z8yV>WRp=I1=9MH?=;jqGLkxkLj>|?L9+q}oPwjafLBZ?k;uzx5`S#jIUIqmo=7Z)*|EKyM zWpik>o2otkj;h1Xn#X1g2IU#EFF*C<>YvsD0XFW3^z|HE&z~{PI!uxCyrcRThvmzv{dUFZG3gy^ zb-#8vUh&{PbM{-W{}-2rtz6EmGS4X|+_qNkV`jsYmDcO{74EtH{GfT?@y@YR0cujmq_3Pe^7xo*x)Ae~4RVVg(vFbbbg8P?`o$ja>sDE+m70da^h-GPU zPye-Q_r>!S3tZFP9P-4j(`E01V-D}GFF&?J*Yd$*#iD4VSmQnsr+<@@**16VocKA< zd2P!a=~=T+7u!Fv+p4wj{FQa9rlszcb*Yi)Q#DzTaG2+vRm28HqZJd{dG^T`1O_uR z`%DSA5;R4kb9o|P>f6ev4TlSl%-~&feWs~f=J|($?^9V zwdYr`A2`gnWd`%dU+eY$ZqWX;(MfMl_2$>FgnVpP?q7L(<<~1*?^dte+A;B$?bf#a zp&rS3X%jBm*ttz;7eB2KcR01C=0d@L=E}03?W##isG9 zQ$?S0KiyMQ9zFebndgs?A7MWNfB5}~`yrX~a8g0!56>M+HOetPbFV&rp8WYub5-4nJa0`PlBg3pY5)2HCd6^**B@w}FfdWk9d zNvV1jxdlMg3=B3ERzPNMYDuC(MQ%=Bu~mhw5?F;5kPQ;nS5g2gDap1~itr6kaLzAE zRWQ*r(KAr8<5EyiuqjGOvkG!?gK7uzY?U%fN(!v>^~=l4^~#O)@{7{-4J|D#^$m>l zjf`}GDs+o0^GXscbn}XpA%?)raY-#sF3Kz@$;{7F0GXSZlwVq6tE2?72o50bOi6~@ zQ&3uz1GXh4SwA%=H8(Y{q*&ij&rlz3I8d)mO0rdPX;M~datYYoaO1!pa7s+qM-sNt z$5d^j4{{Nb3nAVIivs;`$7Q1r4@*0)r}n&#z~HU-ba4#HXncEXFIR&B55q&3n*ZT_ zlY?YjU#Q;MUi$jt{H13*R!BU!VcWRBhtu-9W9ZX$oi!6@p5G|3S*h)Ugi|s{uc8S7 z#^$yy|137NZK;}7C%toPlyQsN;-9&t(wmi%o%CD}uqUT|UX=ohYEM@`mvv4FO#sIH BxwZfR literal 0 HcmV?d00001 diff --git a/StaticTable/StaticTable/UYLFirstViewController.xib b/StaticTable/StaticTable/UYLFirstViewController.xib deleted file mode 100644 index 5df5285..0000000 --- a/StaticTable/StaticTable/UYLFirstViewController.xib +++ /dev/null @@ -1,223 +0,0 @@ - - - - 1296 - 11D50 - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 1181 - - - IBProxyObject - IBUIView - IBUILabel - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - - - 298 - {{20, 155}, {280, 21}} - - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - First View Controller - - 1 - MCAwIDAAA - - - 0 - 10 - 1 - - 1 - 17 - - - Helvetica - 17 - 16 - - - - {{0, 64}, {320, 367}} - - - - - 10 - - 549453824 - {512, 1} - - - - - - TU0AKgAACAjFzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/ -y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/ -xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/ -xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/ -xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/ -xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/ -xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/ -y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/ -y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/ -xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/ -xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/ -xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/ -xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/ -xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/ -y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/ -y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/ -xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/ -xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/ -xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/ -xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/ -xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/ -y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/ -y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/ -xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/ -xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/ -xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/ -xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/ -xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/ -y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/ -y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/ -xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/ -xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/ -xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/ -xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/ -xczS/8vS2P/L0tj/xczU/wANAQAAAwAAAAECAAAAAQEAAwAAAAEAAQAAAQIAAwAAAAQAAAiqAQMAAwAA -AAEAAQAAAQYAAwAAAAEAAgAAAREABAAAAAEAAAAIARIAAwAAAAEAAQAAARUAAwAAAAEABAAAARYAAwAA -AAEAAQAAARcABAAAAAEAAAgAARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAQAAAiyAAAAAAAI -AAgACAAIAAEAAQABAAE - - - - - - 3 - MCAwAA - - - groupTableViewBackgroundColor - - - - NO - - - IBCocoaTouchFramework - - - - - - - view - - - - 3 - - - - - - 0 - - - - - - 1 - - - - - - - - -1 - - - File's Owner - - - -2 - - - - - 5 - - - - - - - UYLFirstViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 5 - - - - - UYLFirstViewController - UIViewController - - IBProjectSource - ./Classes/UYLFirstViewController.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - YES - 3 - 1181 - - From ae53a069fe33df7fd13eeb2ad8ba88bb2f882e95 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Sat, 11 Jan 2020 17:30:20 +0000 Subject: [PATCH 42/56] Remove archived projects --- Styles/README | 71 --- Styles/Styles.xcodeproj/project.pbxproj | 401 -------------- Styles/Styles/MainStoryboard.storyboard | 501 ------------------ .../Resources/back-button-landscape.png | Bin 838 -> 0 bytes .../Resources/back-button-landscape@2x.png | Bin 2005 -> 0 bytes Styles/Styles/Resources/back-button.png | Bin 1012 -> 0 bytes Styles/Styles/Resources/back-button@2x.png | Bin 2384 -> 0 bytes Styles/Styles/Resources/divider.png | Bin 72 -> 0 bytes Styles/Styles/Resources/divider@2x.png | Bin 75 -> 0 bytes Styles/Styles/Resources/green-button.png | Bin 2305 -> 0 bytes Styles/Styles/Resources/green-button@2x.png | Bin 7044 -> 0 bytes Styles/Styles/Resources/navbar-landscape.png | Bin 1631 -> 0 bytes .../Styles/Resources/navbar-landscape@2x.png | Bin 4652 -> 0 bytes Styles/Styles/Resources/navbar.png | Bin 2009 -> 0 bytes Styles/Styles/Resources/navbar@2x.png | Bin 6321 -> 0 bytes Styles/Styles/Resources/orange-button.png | Bin 2111 -> 0 bytes Styles/Styles/Resources/orange-button@2x.png | Bin 7016 -> 0 bytes Styles/Styles/Resources/orange.png | Bin 82 -> 0 bytes Styles/Styles/Resources/orange@2x.png | Bin 78 -> 0 bytes Styles/Styles/Resources/red-button.png | Bin 2039 -> 0 bytes Styles/Styles/Resources/red-button@2x.png | Bin 6696 -> 0 bytes Styles/Styles/Resources/steel-button.png | Bin 2562 -> 0 bytes Styles/Styles/Resources/steel-button@2x.png | Bin 8079 -> 0 bytes Styles/Styles/Styles-Info.plist | 41 -- Styles/Styles/Styles-Prefix.pch | 14 - Styles/Styles/UYLAppDelegate.h | 39 -- Styles/Styles/UYLAppDelegate.m | 46 -- Styles/Styles/UYLListViewController.h | 38 -- Styles/Styles/UYLListViewController.m | 45 -- Styles/Styles/UYLOkButton.h | 36 -- Styles/Styles/UYLOkButton.m | 36 -- Styles/Styles/UYLResetButton.h | 36 -- Styles/Styles/UYLResetButton.m | 36 -- Styles/Styles/UYLRotatingViewController.h | 38 -- Styles/Styles/UYLRotatingViewController.m | 49 -- Styles/Styles/UYLStyleController.h | 39 -- Styles/Styles/UYLStyleController.m | 125 ----- Styles/Styles/UYLZeroButton.h | 36 -- Styles/Styles/UYLZeroButton.m | 36 -- Styles/Styles/en.lproj/InfoPlist.strings | 2 - Styles/Styles/main.m | 43 -- TaskTimer/README | 95 ---- TaskTimer/TaskTimer.xcodeproj/project.pbxproj | 444 ---------------- .../TaskTimer/NSNumber+UYLTimeFormatter.h | 39 -- .../TaskTimer/NSNumber+UYLTimeFormatter.m | 63 --- TaskTimer/TaskTimer/Task.h | 44 -- TaskTimer/TaskTimer/Task.m | 43 -- TaskTimer/TaskTimer/TaskTimer-Info.plist | 46 -- TaskTimer/TaskTimer/TaskTimer-Prefix.pch | 15 - .../TaskTimer.xcdatamodeld/.xccurrentversion | 8 - .../Accessibile.xcdatamodel/contents | 12 - TaskTimer/TaskTimer/UYLAppDelegate.h | 49 -- TaskTimer/TaskTimer/UYLAppDelegate.m | 164 ------ TaskTimer/TaskTimer/UYLCounterView.h | 51 -- TaskTimer/TaskTimer/UYLCounterView.m | 292 ---------- .../TaskTimer/UYLTaskListViewController.h | 43 -- .../TaskTimer/UYLTaskListViewController.m | 247 --------- TaskTimer/TaskTimer/UYLTaskViewController.h | 43 -- TaskTimer/TaskTimer/UYLTaskViewController.m | 299 ----------- TaskTimer/TaskTimer/checked.png | Bin 1790 -> 0 bytes TaskTimer/TaskTimer/checked@2x.png | Bin 2241 -> 0 bytes .../TaskTimer/en.lproj/InfoPlist.strings | 2 - .../UYLTaskListViewController_iPad.xib | 166 ------ .../UYLTaskListViewController_iPhone.xib | 143 ----- .../en.lproj/UYLTaskViewController_iPad.xib | 331 ------------ .../en.lproj/UYLTaskViewController_iPhone.xib | 334 ------------ TaskTimer/TaskTimer/main.m | 43 -- TaskTimer/TaskTimer/redbutton.png | Bin 2242 -> 0 bytes TaskTimer/TaskTimer/start.png | Bin 2182 -> 0 bytes TaskTimer/TaskTimer/start@2x.png | Bin 2864 -> 0 bytes TaskTimer/TaskTimer/stop.png | Bin 2173 -> 0 bytes TaskTimer/TaskTimer/stop@2x.png | Bin 2845 -> 0 bytes TaskTimer/TaskTimer/unchecked.png | Bin 1536 -> 0 bytes TaskTimer/TaskTimer/unchecked@2x.png | Bin 1603 -> 0 bytes 74 files changed, 4724 deletions(-) delete mode 100644 Styles/README delete mode 100644 Styles/Styles.xcodeproj/project.pbxproj delete mode 100644 Styles/Styles/MainStoryboard.storyboard delete mode 100644 Styles/Styles/Resources/back-button-landscape.png delete mode 100644 Styles/Styles/Resources/back-button-landscape@2x.png delete mode 100644 Styles/Styles/Resources/back-button.png delete mode 100644 Styles/Styles/Resources/back-button@2x.png delete mode 100644 Styles/Styles/Resources/divider.png delete mode 100644 Styles/Styles/Resources/divider@2x.png delete mode 100644 Styles/Styles/Resources/green-button.png delete mode 100644 Styles/Styles/Resources/green-button@2x.png delete mode 100644 Styles/Styles/Resources/navbar-landscape.png delete mode 100644 Styles/Styles/Resources/navbar-landscape@2x.png delete mode 100644 Styles/Styles/Resources/navbar.png delete mode 100644 Styles/Styles/Resources/navbar@2x.png delete mode 100644 Styles/Styles/Resources/orange-button.png delete mode 100644 Styles/Styles/Resources/orange-button@2x.png delete mode 100644 Styles/Styles/Resources/orange.png delete mode 100644 Styles/Styles/Resources/orange@2x.png delete mode 100644 Styles/Styles/Resources/red-button.png delete mode 100644 Styles/Styles/Resources/red-button@2x.png delete mode 100644 Styles/Styles/Resources/steel-button.png delete mode 100644 Styles/Styles/Resources/steel-button@2x.png delete mode 100644 Styles/Styles/Styles-Info.plist delete mode 100644 Styles/Styles/Styles-Prefix.pch delete mode 100644 Styles/Styles/UYLAppDelegate.h delete mode 100644 Styles/Styles/UYLAppDelegate.m delete mode 100644 Styles/Styles/UYLListViewController.h delete mode 100644 Styles/Styles/UYLListViewController.m delete mode 100644 Styles/Styles/UYLOkButton.h delete mode 100644 Styles/Styles/UYLOkButton.m delete mode 100644 Styles/Styles/UYLResetButton.h delete mode 100644 Styles/Styles/UYLResetButton.m delete mode 100644 Styles/Styles/UYLRotatingViewController.h delete mode 100644 Styles/Styles/UYLRotatingViewController.m delete mode 100644 Styles/Styles/UYLStyleController.h delete mode 100644 Styles/Styles/UYLStyleController.m delete mode 100644 Styles/Styles/UYLZeroButton.h delete mode 100644 Styles/Styles/UYLZeroButton.m delete mode 100644 Styles/Styles/en.lproj/InfoPlist.strings delete mode 100644 Styles/Styles/main.m delete mode 100644 TaskTimer/README delete mode 100644 TaskTimer/TaskTimer.xcodeproj/project.pbxproj delete mode 100644 TaskTimer/TaskTimer/NSNumber+UYLTimeFormatter.h delete mode 100644 TaskTimer/TaskTimer/NSNumber+UYLTimeFormatter.m delete mode 100644 TaskTimer/TaskTimer/Task.h delete mode 100644 TaskTimer/TaskTimer/Task.m delete mode 100644 TaskTimer/TaskTimer/TaskTimer-Info.plist delete mode 100644 TaskTimer/TaskTimer/TaskTimer-Prefix.pch delete mode 100644 TaskTimer/TaskTimer/TaskTimer.xcdatamodeld/.xccurrentversion delete mode 100644 TaskTimer/TaskTimer/TaskTimer.xcdatamodeld/Accessibile.xcdatamodel/contents delete mode 100644 TaskTimer/TaskTimer/UYLAppDelegate.h delete mode 100644 TaskTimer/TaskTimer/UYLAppDelegate.m delete mode 100644 TaskTimer/TaskTimer/UYLCounterView.h delete mode 100644 TaskTimer/TaskTimer/UYLCounterView.m delete mode 100644 TaskTimer/TaskTimer/UYLTaskListViewController.h delete mode 100644 TaskTimer/TaskTimer/UYLTaskListViewController.m delete mode 100644 TaskTimer/TaskTimer/UYLTaskViewController.h delete mode 100644 TaskTimer/TaskTimer/UYLTaskViewController.m delete mode 100644 TaskTimer/TaskTimer/checked.png delete mode 100644 TaskTimer/TaskTimer/checked@2x.png delete mode 100644 TaskTimer/TaskTimer/en.lproj/InfoPlist.strings delete mode 100644 TaskTimer/TaskTimer/en.lproj/UYLTaskListViewController_iPad.xib delete mode 100644 TaskTimer/TaskTimer/en.lproj/UYLTaskListViewController_iPhone.xib delete mode 100644 TaskTimer/TaskTimer/en.lproj/UYLTaskViewController_iPad.xib delete mode 100644 TaskTimer/TaskTimer/en.lproj/UYLTaskViewController_iPhone.xib delete mode 100644 TaskTimer/TaskTimer/main.m delete mode 100644 TaskTimer/TaskTimer/redbutton.png delete mode 100644 TaskTimer/TaskTimer/start.png delete mode 100644 TaskTimer/TaskTimer/start@2x.png delete mode 100644 TaskTimer/TaskTimer/stop.png delete mode 100644 TaskTimer/TaskTimer/stop@2x.png delete mode 100644 TaskTimer/TaskTimer/unchecked.png delete mode 100644 TaskTimer/TaskTimer/unchecked@2x.png diff --git a/Styles/README b/Styles/README deleted file mode 100644 index 463bf10..0000000 --- a/Styles/README +++ /dev/null @@ -1,71 +0,0 @@ -======================================================================= -Styles - -Version 1.0 24 August 2012 Initial Version -======================================================================= - -The Styles App is an example of how to use the UIAppearance protocol to -customise the appearance of common UIKit controls. - -For further details see: - -useyourloaf.com/blog/2012/08/24/using-appearance-proxy-to-style-apps.html - - -======================================================================= -App Delegate -======================================================================= - -UYLAppDelegate.h -UYLAppDelegate.m - -The App delegate is largely unmodified from the template code. The use of -a storyboard to configure and load the UI means there is not much for the -app delegate to do in this simple app other than setup the appearance. - -======================================================================= -Style Controller -======================================================================= - -The core of the appearance code is contained in the custom UYLStyleController -class. This class has a single public class method +applyStyle which -contains all of the UIAppearance related code. Refer to the blog post -for a full description. - -======================================================================= -Views -======================================================================= - -MainStoryboard.storyboard - -The storyboard file defines the user interface for the application. It -uses a navigation controller with a static table view as the root view -to list each of the UIKit control views. - -UYLOkButton.h -UYLOkButton.m -UYLResetButton.h -UYLResetButton.m -UYLZeroButton.h -UYLZeroButton.m - -These classes are UIButton sub-classes that do nothing other than define -a custom subclass used to allow the appearance of specific buttons to be -modified. - -======================================================================= -Controllers -======================================================================= - -UYLListViewController.h -UYLListViewController.m - -This is a subclass of UITableViewController used for the static table view -containing the list of UIKit controls. The only method that the subclass -actually contains is to enable interface rotation. - -UYLRotatingViewController.h -UYLRotatingViewController.m - -This is a container class used for all of the UIKit control views. The viewDidLoad method is used to set the view background. It also implements -the standard method to enable interface orientation. \ No newline at end of file diff --git a/Styles/Styles.xcodeproj/project.pbxproj b/Styles/Styles.xcodeproj/project.pbxproj deleted file mode 100644 index 26e39d7..0000000 --- a/Styles/Styles.xcodeproj/project.pbxproj +++ /dev/null @@ -1,401 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 5305B53E15E6310900AC81F4 /* UYLZeroButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 5305B53D15E6310900AC81F4 /* UYLZeroButton.m */; }; - 5305B54615E6408500AC81F4 /* divider.png in Resources */ = {isa = PBXBuildFile; fileRef = 5305B54415E6408500AC81F4 /* divider.png */; }; - 5305B54715E6408500AC81F4 /* divider@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5305B54515E6408500AC81F4 /* divider@2x.png */; }; - 532F266715BDDF7A00321881 /* UYLRotatingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 532F266615BDDF7A00321881 /* UYLRotatingViewController.m */; }; - 532F267915BDE44F00321881 /* UYLResetButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 532F267815BDE44F00321881 /* UYLResetButton.m */; }; - 532F267C15BDEAEB00321881 /* UYLStyleController.m in Sources */ = {isa = PBXBuildFile; fileRef = 532F267B15BDEAEB00321881 /* UYLStyleController.m */; }; - 535734EA15B75876006F0E6A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 535734E915B75876006F0E6A /* UIKit.framework */; }; - 535734EC15B75876006F0E6A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 535734EB15B75876006F0E6A /* Foundation.framework */; }; - 535734EE15B75876006F0E6A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 535734ED15B75876006F0E6A /* CoreGraphics.framework */; }; - 535734F415B75876006F0E6A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 535734F215B75876006F0E6A /* InfoPlist.strings */; }; - 535734F615B75877006F0E6A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 535734F515B75877006F0E6A /* main.m */; }; - 535734FA15B75878006F0E6A /* UYLAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 535734F915B75878006F0E6A /* UYLAppDelegate.m */; }; - 5357350015B75878006F0E6A /* UYLListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 535734FF15B75878006F0E6A /* UYLListViewController.m */; }; - 5374A30A15B7698400B796D2 /* MainStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5374A30915B7698400B796D2 /* MainStoryboard.storyboard */; }; - 53AA526415E56F7A000C8D04 /* green-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA525615E56F7A000C8D04 /* green-button.png */; }; - 53AA526515E56F7A000C8D04 /* green-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA525715E56F7A000C8D04 /* green-button@2x.png */; }; - 53AA526615E56F7A000C8D04 /* navbar-landscape.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA525815E56F7A000C8D04 /* navbar-landscape.png */; }; - 53AA526715E56F7A000C8D04 /* navbar-landscape@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA525915E56F7A000C8D04 /* navbar-landscape@2x.png */; }; - 53AA526815E56F7A000C8D04 /* navbar.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA525A15E56F7A000C8D04 /* navbar.png */; }; - 53AA526915E56F7A000C8D04 /* navbar@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA525B15E56F7A000C8D04 /* navbar@2x.png */; }; - 53AA526A15E56F7A000C8D04 /* orange-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA525C15E56F7A000C8D04 /* orange-button.png */; }; - 53AA526B15E56F7A000C8D04 /* orange-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA525D15E56F7A000C8D04 /* orange-button@2x.png */; }; - 53AA526E15E56F7A000C8D04 /* red-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA526015E56F7A000C8D04 /* red-button.png */; }; - 53AA526F15E56F7A000C8D04 /* red-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA526115E56F7A000C8D04 /* red-button@2x.png */; }; - 53AA527015E56F7A000C8D04 /* steel-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA526215E56F7A000C8D04 /* steel-button.png */; }; - 53AA527115E56F7A000C8D04 /* steel-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA526315E56F7A000C8D04 /* steel-button@2x.png */; }; - 53AA527715E57B0C000C8D04 /* back-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA527615E57B0C000C8D04 /* back-button.png */; }; - 53AA527915E58E9B000C8D04 /* back-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA527815E58E9B000C8D04 /* back-button@2x.png */; }; - 53AA527C15E591BF000C8D04 /* back-button-landscape.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA527A15E591BF000C8D04 /* back-button-landscape.png */; }; - 53AA527D15E591BF000C8D04 /* back-button-landscape@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53AA527B15E591BF000C8D04 /* back-button-landscape@2x.png */; }; - 53E2967015BF36C800D8AD2A /* UYLOkButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 53E2966F15BF36C800D8AD2A /* UYLOkButton.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 5305B53C15E6310900AC81F4 /* UYLZeroButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLZeroButton.h; sourceTree = ""; }; - 5305B53D15E6310900AC81F4 /* UYLZeroButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLZeroButton.m; sourceTree = ""; }; - 5305B54415E6408500AC81F4 /* divider.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = divider.png; sourceTree = ""; }; - 5305B54515E6408500AC81F4 /* divider@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "divider@2x.png"; sourceTree = ""; }; - 532F266515BDDF7A00321881 /* UYLRotatingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLRotatingViewController.h; sourceTree = ""; }; - 532F266615BDDF7A00321881 /* UYLRotatingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLRotatingViewController.m; sourceTree = ""; }; - 532F267715BDE44F00321881 /* UYLResetButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLResetButton.h; sourceTree = ""; }; - 532F267815BDE44F00321881 /* UYLResetButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLResetButton.m; sourceTree = ""; }; - 532F267A15BDEAEA00321881 /* UYLStyleController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLStyleController.h; sourceTree = ""; }; - 532F267B15BDEAEB00321881 /* UYLStyleController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLStyleController.m; sourceTree = ""; }; - 535734E515B75876006F0E6A /* Styles.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Styles.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 535734E915B75876006F0E6A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 535734EB15B75876006F0E6A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 535734ED15B75876006F0E6A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 535734F115B75876006F0E6A /* Styles-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Styles-Info.plist"; sourceTree = ""; }; - 535734F315B75876006F0E6A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - 535734F515B75877006F0E6A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 535734F715B75877006F0E6A /* Styles-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Styles-Prefix.pch"; sourceTree = ""; }; - 535734F815B75878006F0E6A /* UYLAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UYLAppDelegate.h; sourceTree = ""; }; - 535734F915B75878006F0E6A /* UYLAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLAppDelegate.m; sourceTree = ""; }; - 535734FE15B75878006F0E6A /* UYLListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UYLListViewController.h; sourceTree = ""; }; - 535734FF15B75878006F0E6A /* UYLListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLListViewController.m; sourceTree = ""; }; - 5374A30915B7698400B796D2 /* MainStoryboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = MainStoryboard.storyboard; sourceTree = ""; }; - 53AA525615E56F7A000C8D04 /* green-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "green-button.png"; sourceTree = ""; }; - 53AA525715E56F7A000C8D04 /* green-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "green-button@2x.png"; sourceTree = ""; }; - 53AA525815E56F7A000C8D04 /* navbar-landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "navbar-landscape.png"; sourceTree = ""; }; - 53AA525915E56F7A000C8D04 /* navbar-landscape@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "navbar-landscape@2x.png"; sourceTree = ""; }; - 53AA525A15E56F7A000C8D04 /* navbar.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = navbar.png; sourceTree = ""; }; - 53AA525B15E56F7A000C8D04 /* navbar@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "navbar@2x.png"; sourceTree = ""; }; - 53AA525C15E56F7A000C8D04 /* orange-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "orange-button.png"; sourceTree = ""; }; - 53AA525D15E56F7A000C8D04 /* orange-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "orange-button@2x.png"; sourceTree = ""; }; - 53AA526015E56F7A000C8D04 /* red-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "red-button.png"; sourceTree = ""; }; - 53AA526115E56F7A000C8D04 /* red-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "red-button@2x.png"; sourceTree = ""; }; - 53AA526215E56F7A000C8D04 /* steel-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "steel-button.png"; sourceTree = ""; }; - 53AA526315E56F7A000C8D04 /* steel-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "steel-button@2x.png"; sourceTree = ""; }; - 53AA527615E57B0C000C8D04 /* back-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "back-button.png"; sourceTree = ""; }; - 53AA527815E58E9B000C8D04 /* back-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "back-button@2x.png"; sourceTree = ""; }; - 53AA527A15E591BF000C8D04 /* back-button-landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "back-button-landscape.png"; sourceTree = ""; }; - 53AA527B15E591BF000C8D04 /* back-button-landscape@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "back-button-landscape@2x.png"; sourceTree = ""; }; - 53E2966E15BF36C800D8AD2A /* UYLOkButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLOkButton.h; sourceTree = ""; }; - 53E2966F15BF36C800D8AD2A /* UYLOkButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLOkButton.m; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 535734E215B75876006F0E6A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 535734EA15B75876006F0E6A /* UIKit.framework in Frameworks */, - 535734EC15B75876006F0E6A /* Foundation.framework in Frameworks */, - 535734EE15B75876006F0E6A /* CoreGraphics.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 535734DA15B75875006F0E6A = { - isa = PBXGroup; - children = ( - 535734EF15B75876006F0E6A /* Styles */, - 535734E815B75876006F0E6A /* Frameworks */, - 535734E615B75876006F0E6A /* Products */, - ); - sourceTree = ""; - }; - 535734E615B75876006F0E6A /* Products */ = { - isa = PBXGroup; - children = ( - 535734E515B75876006F0E6A /* Styles.app */, - ); - name = Products; - sourceTree = ""; - }; - 535734E815B75876006F0E6A /* Frameworks */ = { - isa = PBXGroup; - children = ( - 535734E915B75876006F0E6A /* UIKit.framework */, - 535734EB15B75876006F0E6A /* Foundation.framework */, - 535734ED15B75876006F0E6A /* CoreGraphics.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 535734EF15B75876006F0E6A /* Styles */ = { - isa = PBXGroup; - children = ( - 53AA525515E56F7A000C8D04 /* Resources */, - 5357351115B75A9B006F0E6A /* Views */, - 5357351215B75AB6006F0E6A /* Controllers */, - 535734F815B75878006F0E6A /* UYLAppDelegate.h */, - 535734F915B75878006F0E6A /* UYLAppDelegate.m */, - 535734F015B75876006F0E6A /* Supporting Files */, - ); - path = Styles; - sourceTree = ""; - }; - 535734F015B75876006F0E6A /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 535734F115B75876006F0E6A /* Styles-Info.plist */, - 535734F215B75876006F0E6A /* InfoPlist.strings */, - 535734F515B75877006F0E6A /* main.m */, - 535734F715B75877006F0E6A /* Styles-Prefix.pch */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 5357351115B75A9B006F0E6A /* Views */ = { - isa = PBXGroup; - children = ( - 5374A30915B7698400B796D2 /* MainStoryboard.storyboard */, - 532F267715BDE44F00321881 /* UYLResetButton.h */, - 532F267815BDE44F00321881 /* UYLResetButton.m */, - 53E2966E15BF36C800D8AD2A /* UYLOkButton.h */, - 53E2966F15BF36C800D8AD2A /* UYLOkButton.m */, - 5305B53C15E6310900AC81F4 /* UYLZeroButton.h */, - 5305B53D15E6310900AC81F4 /* UYLZeroButton.m */, - ); - name = Views; - sourceTree = ""; - }; - 5357351215B75AB6006F0E6A /* Controllers */ = { - isa = PBXGroup; - children = ( - 535734FE15B75878006F0E6A /* UYLListViewController.h */, - 535734FF15B75878006F0E6A /* UYLListViewController.m */, - 532F266515BDDF7A00321881 /* UYLRotatingViewController.h */, - 532F266615BDDF7A00321881 /* UYLRotatingViewController.m */, - 532F267A15BDEAEA00321881 /* UYLStyleController.h */, - 532F267B15BDEAEB00321881 /* UYLStyleController.m */, - ); - name = Controllers; - sourceTree = ""; - }; - 53AA525515E56F7A000C8D04 /* Resources */ = { - isa = PBXGroup; - children = ( - 5305B54415E6408500AC81F4 /* divider.png */, - 5305B54515E6408500AC81F4 /* divider@2x.png */, - 53AA527A15E591BF000C8D04 /* back-button-landscape.png */, - 53AA527B15E591BF000C8D04 /* back-button-landscape@2x.png */, - 53AA527815E58E9B000C8D04 /* back-button@2x.png */, - 53AA527615E57B0C000C8D04 /* back-button.png */, - 53AA525615E56F7A000C8D04 /* green-button.png */, - 53AA525715E56F7A000C8D04 /* green-button@2x.png */, - 53AA525815E56F7A000C8D04 /* navbar-landscape.png */, - 53AA525915E56F7A000C8D04 /* navbar-landscape@2x.png */, - 53AA525A15E56F7A000C8D04 /* navbar.png */, - 53AA525B15E56F7A000C8D04 /* navbar@2x.png */, - 53AA525C15E56F7A000C8D04 /* orange-button.png */, - 53AA525D15E56F7A000C8D04 /* orange-button@2x.png */, - 53AA526015E56F7A000C8D04 /* red-button.png */, - 53AA526115E56F7A000C8D04 /* red-button@2x.png */, - 53AA526215E56F7A000C8D04 /* steel-button.png */, - 53AA526315E56F7A000C8D04 /* steel-button@2x.png */, - ); - path = Resources; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 535734E415B75876006F0E6A /* Styles */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5357350E15B75878006F0E6A /* Build configuration list for PBXNativeTarget "Styles" */; - buildPhases = ( - 535734E115B75876006F0E6A /* Sources */, - 535734E215B75876006F0E6A /* Frameworks */, - 535734E315B75876006F0E6A /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Styles; - productName = Styles; - productReference = 535734E515B75876006F0E6A /* Styles.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 535734DC15B75875006F0E6A /* Project object */ = { - isa = PBXProject; - attributes = { - CLASSPREFIX = UYL; - LastUpgradeCheck = 0430; - }; - buildConfigurationList = 535734DF15B75875006F0E6A /* Build configuration list for PBXProject "Styles" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 535734DA15B75875006F0E6A; - productRefGroup = 535734E615B75876006F0E6A /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 535734E415B75876006F0E6A /* Styles */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 535734E315B75876006F0E6A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 535734F415B75876006F0E6A /* InfoPlist.strings in Resources */, - 5374A30A15B7698400B796D2 /* MainStoryboard.storyboard in Resources */, - 53AA526415E56F7A000C8D04 /* green-button.png in Resources */, - 53AA526515E56F7A000C8D04 /* green-button@2x.png in Resources */, - 53AA526615E56F7A000C8D04 /* navbar-landscape.png in Resources */, - 53AA526715E56F7A000C8D04 /* navbar-landscape@2x.png in Resources */, - 53AA526815E56F7A000C8D04 /* navbar.png in Resources */, - 53AA526915E56F7A000C8D04 /* navbar@2x.png in Resources */, - 53AA526A15E56F7A000C8D04 /* orange-button.png in Resources */, - 53AA526B15E56F7A000C8D04 /* orange-button@2x.png in Resources */, - 53AA526E15E56F7A000C8D04 /* red-button.png in Resources */, - 53AA526F15E56F7A000C8D04 /* red-button@2x.png in Resources */, - 53AA527015E56F7A000C8D04 /* steel-button.png in Resources */, - 53AA527115E56F7A000C8D04 /* steel-button@2x.png in Resources */, - 53AA527715E57B0C000C8D04 /* back-button.png in Resources */, - 53AA527915E58E9B000C8D04 /* back-button@2x.png in Resources */, - 53AA527C15E591BF000C8D04 /* back-button-landscape.png in Resources */, - 53AA527D15E591BF000C8D04 /* back-button-landscape@2x.png in Resources */, - 5305B54615E6408500AC81F4 /* divider.png in Resources */, - 5305B54715E6408500AC81F4 /* divider@2x.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 535734E115B75876006F0E6A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 535734F615B75877006F0E6A /* main.m in Sources */, - 535734FA15B75878006F0E6A /* UYLAppDelegate.m in Sources */, - 5357350015B75878006F0E6A /* UYLListViewController.m in Sources */, - 532F266715BDDF7A00321881 /* UYLRotatingViewController.m in Sources */, - 532F267915BDE44F00321881 /* UYLResetButton.m in Sources */, - 532F267C15BDEAEB00321881 /* UYLStyleController.m in Sources */, - 53E2967015BF36C800D8AD2A /* UYLOkButton.m in Sources */, - 5305B53E15E6310900AC81F4 /* UYLZeroButton.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 535734F215B75876006F0E6A /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 535734F315B75876006F0E6A /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 5357350C15B75878006F0E6A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - CLANG_ENABLE_OBJC_ARC = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.1; - SDKROOT = iphoneos; - }; - name = Debug; - }; - 5357350D15B75878006F0E6A /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - CLANG_ENABLE_OBJC_ARC = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.1; - OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 5357350F15B75878006F0E6A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Styles/Styles-Prefix.pch"; - INFOPLIST_FILE = "Styles/Styles-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - 5357351015B75878006F0E6A /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Styles/Styles-Prefix.pch"; - INFOPLIST_FILE = "Styles/Styles-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 535734DF15B75875006F0E6A /* Build configuration list for PBXProject "Styles" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5357350C15B75878006F0E6A /* Debug */, - 5357350D15B75878006F0E6A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5357350E15B75878006F0E6A /* Build configuration list for PBXNativeTarget "Styles" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5357350F15B75878006F0E6A /* Debug */, - 5357351015B75878006F0E6A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 535734DC15B75875006F0E6A /* Project object */; -} diff --git a/Styles/Styles/MainStoryboard.storyboard b/Styles/Styles/MainStoryboard.storyboard deleted file mode 100644 index 494f317..0000000 --- a/Styles/Styles/MainStoryboard.storyboard +++ /dev/null @@ -1,501 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Styles/Styles/Resources/back-button-landscape.png b/Styles/Styles/Resources/back-button-landscape.png deleted file mode 100644 index 8e0731703b9bedb6b4aa886a77721002ed57742b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838 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�(Efv9yxxarn-`$X#CnAmBL2>f=V zdDl}wUPEch7WfsS+aC-79?RwO0{J6m*Y+p6osDaPm9Rbuo=~Mg&+Z3ECp>6b)*G3= zfng`(8idT?cR252(cX*E#o&n$Ze4%p-JV{MIC^yU3Cqs@%yIj`Fm1lrl;BJU^s~`b zv5*i?6hPzVyVsZldLS>q{OUhSm2$(e?MH-RCg0BJ@5Nygz3aD|4Fh^8XV0E({bzCU zyUoV!@1fTO(S_ZCb#jP4W2Wy`RTAOD!_k0v1@uVv?%ms%oSghS2C&l*G-_Hla2g7& z%j*)o?nI!}N$?1P?=2h9V<9P*FJJyEk$0lqZrC-_roBfT9z*hhRgD~J2DT9!gdT6jR5-1W()+^z8ES{ON_YUCxpglM^ z_>;ERTo8nvyyX3QXgG^{&JpBiz*sdV#B(38mU86CkxfEa^O>AGC4?%CF?k;QQ6vV> z&S>2J@1g-~EUxQb1_-{{TE6`U-)n|7TIIB!!@#*7MlzZT>Nh3B1A$=}%mHhd3b?ei z^n2g;zm9(U7NEz8szzc%iS?ndfk2!BN$^CR0%^G))MzxOT{k-qs!NPL90%%t5E_dI zB9Ob(f2G0!+$tX}6Vb_RfB*A{krdWNXddAMVqLEZ0fN_TumjQ}^62b-+qO?nfZD2(9MwRqg~+A{Q=PxQ2)s3UG%oM88hz`sK%H5@>~_JDyPgCYT0N zbR6e9M0m#c+CCBSO%MUAehb9^?+gWmbH?a+gdhl*1XFlhytur){8QJ>Jx&1H)mJr= z9EE;Cf)9f^7j!&;bnw-5I)E=y+-I8RDa&>y!$8G+2a4VS(1r181^E8&3`nue&(HtO z^SrOgNc{zb;07ns18_6MXaC60St5805Q*r#0qGW!Tj#Tg_+tuMi$LM>M$UO!`5n%A zPr#g@bR9k8vFZE%uQ&x#{`Z2VQt34Sc)~O-Te}e$=0DH5N`(68Gr~3zow<1N;?wMa zb>M_brScX4Jg5#d3^S~LQCILBR=s*dh;1Q+BV|BVoEzzOfKG~eNs6x{;%)#yLwZ5Q zSb!>N@@F9D5eZX-gcL-yCFa}pdi|w?2M@MD%Kre!5YUJ)N+ovy0000zopr0GPiHEC2ui diff --git a/Styles/Styles/Resources/divider@2x.png b/Styles/Styles/Resources/divider@2x.png deleted file mode 100644 index ea104494b15a476cf7fb941850c286a367bea276..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75 zcmeAS@N?(olHy`uVBq!ia0vp^Oh6pL0U`qqZhQo!ggjjwLo|YuJ(!u>0<)$pQe|b( X*?lQ-QDWf|pe%!@tDnm{r-UW|GYb+6 diff --git a/Styles/Styles/Resources/green-button.png b/Styles/Styles/Resources/green-button.png deleted file mode 100644 index 9c5fe4e20ac78868acbe04d94bb70fa88920bc65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2305 zcmV+c3I6tpP)2af>btMrzx>U|{n>Y)->?78uYPZzZ$8~T9?CF4 zm;n;jv<#U^V1^_Zhxa*O9{&4JzUyCn`Si^XzJLDihwrDq`TL)I_tyXe_&5Ljga7!= z=l9?Jt8aer)1Un2v#)>m$w!ZhCFo(95gR#7hQPC2voUjJ%?1e?FgV{oeEZewmp}O8 z|NZ*6zxeT&Pygw^|M<869tMB>iy!{gFaO1t|Kor9hadg)r{8@>+K@b8qA(kp22r+0 zF?dobo>9~02?C5KcTBcX^7zFMf9wDLqi=ul2j71F4}bsD@BaFM?>@hO`LBNUgP;Dv zx1S{e#5(SXP*l!QTr^#jI(KNG5WG%`QHtuCl zdSiV3n@_&`d|!Y0?*9Da*3bUOU;bd9zR+^-Q9M4}1M%P=R@kj2H& z=uRF_c`pC@mp|B-PxrHrcm3h-eLqT#a@dnz0vL*ij5`bjs8MEGwsFTev&KS{Hc4Q1 zkb7|R@%{Ynqd)wJAAP#HAc8m&F;m&5@8cmE!cZC7RGyobFx1IoB{QknGPtx^=>!{BX-k#{urMeD-CZ* zo97a2lBZ}oESe0=IS)JHVrEUE+0xJ>$D#zymb=H6!GTX7Zyq;YAjxCPTQ=OoI7|{Z zTUNrmnbYx%hJ#ld(1@Id%gjW%4XQ9O&%208}v zhOwn%!*cIqi{go+haD|@Idk}UG7YCojU7D<5+*j9^K!$iTv*nGiZOsvtc1#>JN9tN zxWkASE3}W3D_z3EcpWildT>#;5q8eN@ZOp6u*=0ZN+z*^I>SkufoTz(E1C}wMN-*2 z8;Kt6^gbq*UK#_C8c232+M^5EaMP2aM(JU9@|Y8h89_cExi`;%mO_)`W>2mxNKIwM zgJ{uc!1L0yaap)zEQw1^;u)8QQE_}Y9B^d~6P~5UaDEb;tL8E9YcjzduGZe)-#Y`UXVMmV((BoMu znnjy+Y@U1M6dMOGmU(bGHY$2-xuRL|B&;wMqcS7f;lPJbIu`A9#^rJD8BQ^23A;HM zmZwRCQ4`3bhS>D-NTcvfFB>-|jzZ@HiY|tz%$)3|Xe@S_Av3{oJDJID4wgr*0p^^? z0(Od>QBW_KD1LvG_uL*wCY?1X3Bdu%Q?dWW>^c!xuLh)QtL2<0}R zH=eVbb{Lq$6vhrC*`_ypj(3#A9&cx+2N&4L;qgEz#789ho)(LD+G8DHya{ghq~pf3 zIQEcuX){T@RQAw~9as@V(GJ6T#~KBF0CZ`w#{>7uV>=hykeS|do5g!fdTBg8#Op9d z@M3XOv?Ja{JSL|e8x;s2>fX!A;LV}Uip}DdmBUPn25iFQy)$F8xUuM=m;+}VZ5A)K z(P2DXQTHKl4~~WcYl6<1r#VA5c5s+CwsEs1>~biEZp2}-4Ty`4D^J|;Cdm8Yd}&b@ z=V7NX3L_aNcaJTFF(}sz6`Km&P!^VqJ8c$2u@P1-dT_pcEWf@_z!~BQE5L_b@1-W6xAFg1n!y*RMaG*FV0Wd0!?*!RdJ@Gu>%3v=J*C7Xz^= z9;p~L&oR4pO^L*Lg4u16a`#*p95BuMK z|L+)T3>X@_7!AQpTGpeT-NR0MDBCDCTS8`KL$qvoRrQ(jb@*dvD`<~wP zrk8L3==|zW`o-sO{S6G@C;#pFkH7ip{kyOKA3y!UKg{P}=Hts8CJeN3Y-|T=7}#=H zvC-rVz>qwEJm&o>Uw(gn^Dpzw&-%sh{eS+`ul}un4+DT7|6l&<{gJ=?^0hzv{>Q%l z@qe>Vzh&RE7crBpX%P$n7z!{z0NQx)@y);0$3Oe#;~RhX>DT_|pZ^zs4KM%z z`2GLtFYfW@edT98{;^uPMg b0093#-l(3VZ}h4{00000NkvXXu0mjfN28_V diff --git a/Styles/Styles/Resources/green-button@2x.png b/Styles/Styles/Resources/green-button@2x.png deleted file mode 100644 index b8354921c5ba2c0ceebd6bdeec3938d08f4b58fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7044 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 X-J)^t*ua&De;@Mk@N;i;4N3nmRY-Hg diff --git a/Styles/Styles/Resources/navbar-landscape.png b/Styles/Styles/Resources/navbar-landscape.png deleted file mode 100644 index 765fe756f0b1e581bae441756ff4a1f8aa34c42f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1631 zcmV-l2B7(gP)|{9VB)t9G_qm4h+Qq1WPIAaeI9S#iw@`{!V#a*SwaJi)PLx zTVPpL%Iuc!umf_WDr@LI7QyF$wPeszL1PU;G%eG#%=5f}YQ@AhO~M7P)kJ9v7aQ~k z=AM&;FgVAZE9X0x)VN8b;xi7zFbf#j5M4;!N~K)5 z5UEi>%103>NBn`5iX??lYyvFU1{)g(_!T|40s3Y|qgILEc<0T|yk{Rk8a7)j=JWZ2 zFc*Of&TKxLJtJoR^D}Bl(4fhJYB47vj_563jbKVbE3OzKkzCMXBLcCh@B35Vn<5cS zJsjV*Cz`IwvV3!MBT2HZ>ywG?`=00dQ_KMn3V2}JkdK)!O0-JZwr$sS zp&$25T@fWBomGXdd2ND8Q;sJ?{$O1w!GOfo}>-zfY z=Dl zG%Rvb03um*9}WkSEM>FVf9-pFdzTj%-KVZ;0VV(o<3OMH`~4n0-Fm&APNx&^0sZ=2 zz1!2j%H@it zwIPH@*uWYRm7?*p-99gzhuIGgKR^6ZhZquDGL3W;zOi-ktB0V!NK zNP@*9x_9^YM@L6t_Wk{RMOI!v7!7Da2DIpigRR&H7LM3<>?IJ=&3XmViVf(FKt+u( zJ9c>RI}q|0h_{!^V6~255J9ZhpW^YIogG>-Z-D;CcwB6Mazs|}tk+@`T~iT>vL#zV z!$N>JY(*p3-%)%EP*k<1swzmON~+5F{OP;@^V593D#Byq8KV_CdZ`x20g#BwQ_RCSVEz7DTs!Ci`0=O;pBvmDEi%OJu5Zq{mfH8Kg9688@eFT#}PnJ>soacEV zDDpz3C~_%iAW%G8r-A5YRDjQNy8^(h779=<+hb7;sfJzKi#CtM<_UOw5+NZ9i6WvZ zP&}G$tb(}U{RE>;ar3A;qq>38_<7rkvMhvXTUKE@sNh0Q|6nb>)@bEAv2$-P+9_(m(98TQt%W}GxjArpPp2f52bQ;IX zsaOoNa9s}y(qVKPIa5L?FgOL6`Pk2htFS3zLi9s19*+h3?`ATdSkfUenBb5&mM&z1 z0&0l&)8sO`ysT)99X~Ju{Iq$Z(eQ3`H&Uo5M#CXgfaJ0)4C$ag@^IZR7=iT?Y>4g} dyPzLt_6O87x~&Jh0ObGx002ovPDHLkV1l}>2~7Y1 diff --git a/Styles/Styles/Resources/navbar-landscape@2x.png b/Styles/Styles/Resources/navbar-landscape@2x.png deleted file mode 100644 index 6414039b00d9e5e97bc48b1d972cd96ed78fd2f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4652 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 diff --git a/Styles/Styles/Resources/navbar.png b/Styles/Styles/Resources/navbar.png deleted file mode 100644 index 29c90298df11d229bfae67ec0e5641709886b48a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2009 zcmV;~2PXK5P)gH)|IaYYbJ3`sT=u?m&87f>5* z@1?cY_qwi?wEGIj`6I%~V4zRvMy`@1-Th5Zcmo zVATrYofb}+w?%qBpMPkI0TW2Dkp+<|PLzUF15U(gQ0yQb6EhTuuR5K|QkLc4S8~9T z1G11K$};p))KYE`$RUa(f(1x?+;?5q_wXJGb@x3y20#OWJr@EsX-X-i)&Ms_ge(IIF2eb2q{HEOI37<1Q2@cf zvy|hUZDmcFCntU(Dyer_O6Ai=+cR^LzBP#A6Y$6_Lh?nz&K@WD8jNc2J90N_?dB%BqZPdHFp-?bQBk+S>uSdoxq6MaiqY*_= zFhjJEZnxWLG!#WUIX)>A3zvrB`#~7?$STg`kkskk5<55!B=H0PtR!!2Y%DD;r5NdS z`rz=uzH$Qi0J3(mGDL@GK!|utxm5Z$esJhGPA3RDbi~Xnd7eLqN2BePO7h3m)zmBO z?d>^^i#PLw!1u5s>WLM=HmaK&4+pO$=wskl?tkrm6UfQVX!Zzkg+4!AXAC1zpro zY`D~Ds`h@|wrxcCK=;FB^7MOl^O`a}{!vT7K#o_#w_rbkREN737*4Eem{(<6a-1)qNe=@3~5p>QxFS@FO1k|#kX0zF~wU_ao&lK0-nkBGE zf2b(e?M8tZ2G9H7mqMC_1PGLr7BX$}g!@T`!&!|j%d(yPN&5u91{L-CeZHPQKY5<# zrf&WeMO9U|zJIKbmo^~nN5cD!9mtV$ob!{2xi+{LZ1PNK{A+d<%8`gw9uq=`e z0LPh+tli6xBSe;J$m{h&!D`#x@Vwo8k}w#%<;4_@ z*%+XS8#b?7ZxSN|T}a4?o9sow4&n;kv?!0jgzk4JMEfQg0Ah*j-wr|_oJg8%nevx5tOm|RDkZ3kY>NjR(>A8kFz+wHqyB`00000NkvXXu0mjfR8YoX diff --git a/Styles/Styles/Resources/navbar@2x.png b/Styles/Styles/Resources/navbar@2x.png deleted file mode 100644 index 6c7c2328d40c0e63f18726dbfd114bbc02275492..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6321 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 diff --git a/Styles/Styles/Resources/orange-button.png b/Styles/Styles/Resources/orange-button.png deleted file mode 100644 index 4a3680ed6b71e8194fcf6133d9ddeeecce51d883..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2111 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 bfrlY#8t2#LqGx!33K%?H{an^LB{Ts5XW|of diff --git a/Styles/Styles/Resources/red-button.png b/Styles/Styles/Resources/red-button.png deleted file mode 100644 index 3a6ad7a2258e10a9b6cc77dc4d193ee5f74fd548..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2039 zcmV9sW+e=3Ca?JJXMLXEe181> z=P&&1tKa)8fC2pSlfV9>x1ap_ldpdF%wGo6nEG`R-?b2@ibp^3y*$Kl$I^^3~U$_~$S3emJ~0XF^g~GG`7KpwSfJ9hI6h zH32d`TwL7dpT|Fan*Z~qufBDD^3BUn;ejvs@h@Nd>Nj7^jT-=@lDTo_@Loufxi~pF z6B+?-xskc?miN&(oE%zy^Wv8;Uwy%k;q~>Ge)Q#sAN=E|G-`$o5K2B|rR>@BHqIDabV&#WQXQuu(dmkqP7mtVtHd z9&V#NXo$m>;e9+0mGJ*IpXxjE!`JftfBIza;vqca9UcT&uGtuFQ;zBRq{TIIX*|ZemjXf0a03cyQX~P5~C}3>37-yK3FdV>O6!Cs= z^D#cv_g>@MH{P%z%Az5LV#CoU8Ip~TjUF6NbI~#+%pz>m?8%~wG3iKdjBmg2=`GhN z9)!^BNk>MILDOi64Y)8W0GY(YVsaow%@z=bxJ~->didf%+9(@`r*wGc;*p{P&<$+S zSm3bDq9G<{7A=NoEcS2>dGIdy;`Qb^99$ZVt8f4P$s; zHjKp`+b9`}hLGWoHWL6)4)AjH1&4;R!w8xd4Ka$A!A7y^p)wRbqZnJKM>csYDQJy~OP*+T(03KAA=Cd@63Mc61d3egboHp1lvH!5uw z2crSOfP^s$7=jU)cX{GKU=f&u(tw6C+-9Zd;njn<;nKryEZu+s#XyF}a1e}z7+o5` z+@g69JhKvNp5={4Lc^QKVL-!iqp)}a#v+Itp$KqNI2<=15Qe;iBsYw3SX?lf9$wIK z(O9$PVvUknF*M1=GY)QA7;*r(=8=OCmV;W1N9fk$G_AIo{YqhhjWY*{G>7 zmBx;MULsrs<{6dDmMhy>W-1NxajbaL!()mMfkxP2XbOvX59N8N)NCXnyl@xqhe5of zv6xZbvIsLoLu|szM|qGL-dHq}iSaff89t6}h{Gnqy^i-xr9l?rFbQi81a>6GT|BeK z@@^)ffQ*|2wiqE}B#Sl`ae2Rv&yRqp>4_i#ECSA01Y=n_BNUsY*bplX!_j7<6nki6 z6puN5e#LKJ5unA9nHY-;fC&Tv!B}H?m%#>3;Au{tK@MWiTnUchRo?ve^_j0f;eCK1 zNY5nC<}MpxQ><($W-8khLqTewapS;L3`QyTgke6(o3EeG^NYVYy+$}34p-c~!#I<< zqqumR@F9)26z}G6=9c#;t`zsqMQ=`u#vLbLl)pHAo?kpSKmQfK`EI=99pOgJ$8zP3 z_wkm)Mdpq-ig$z?7w_?Lxj1~pM_e2(&Ro24xVZRk{EFY){Cx1g_%Hu3|LK2>2iI(b z!Lq|>6wI@P#f{x;X`|Sz6b59JXB3TRa~R0t-^ZWjzy53f^8>$r{Or&3&A*B_$a|?= z2{#V!xVU)7H6P6#?{RULchlt^jd#3J$$a2#YCbM^d6)O`XYuFx=GTv(!2te_zy4Ex z@;~RRe~7Q~F#>?_jKi`aifx1^VF66VfI+koWahQ}Y4b0af0J+ik-z!3{3Q$k{yRVY z7yS5-`N4Pj&fl@$<1;=GY)&3?vM?ab5MclafNdr(yzs5~cl0ZM^MCpKU-Ps7z+V9j z0090QKl;QEUwr@JdtdPF@#VvV2Lk{A00000K)B=L4{v^ZeEq>MKJ)Yc$ln40{C^$~ V7KXqtuG|0s002ovPDHLkV1jyj&qe?M diff --git a/Styles/Styles/Resources/red-button@2x.png b/Styles/Styles/Resources/red-button@2x.png deleted file mode 100644 index e197a76c64b209b9ee86e7faeea5b9aa4fc88d80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6696 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 y?cA{Q!!GL|1$V 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 Y2Sbo%1c++c7ytkO07*qoM6N<$f<=|Ji2wiq diff --git a/Styles/Styles/Resources/steel-button@2x.png b/Styles/Styles/Resources/steel-button@2x.png deleted file mode 100644 index 0afa6ac96b0e3a3f4c3af581320016d186fb7f41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8079 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 diff --git a/Styles/Styles/Styles-Info.plist b/Styles/Styles/Styles-Info.plist deleted file mode 100644 index faa11bb..0000000 --- a/Styles/Styles/Styles-Info.plist +++ /dev/null @@ -1,41 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - com.useyourloaf.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - LSRequiresIPhoneOS - - UIMainStoryboardFile - MainStoryboard - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - UIInterfaceOrientationPortraitUpsideDown - - - diff --git a/Styles/Styles/Styles-Prefix.pch b/Styles/Styles/Styles-Prefix.pch deleted file mode 100644 index 6c81c58..0000000 --- a/Styles/Styles/Styles-Prefix.pch +++ /dev/null @@ -1,14 +0,0 @@ -// -// Prefix header for all source files of the 'Styles' target in the 'Styles' project -// - -#import - -#ifndef __IPHONE_5_0 -#warning "This project uses features only available in iOS SDK 5.0 and later." -#endif - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/Styles/Styles/UYLAppDelegate.h b/Styles/Styles/UYLAppDelegate.h deleted file mode 100644 index febe5c9..0000000 --- a/Styles/Styles/UYLAppDelegate.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// UYLAppDelegate.h -// Styles -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import - -@interface UYLAppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/Styles/Styles/UYLAppDelegate.m b/Styles/Styles/UYLAppDelegate.m deleted file mode 100644 index cd2822a..0000000 --- a/Styles/Styles/UYLAppDelegate.m +++ /dev/null @@ -1,46 +0,0 @@ -// -// UYLAppDelegate.m -// Styles -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import "UYLAppDelegate.h" -#import "UYLStyleController.h" - -@implementation UYLAppDelegate - -@synthesize window = _window; - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - [UYLStyleController applyStyle]; - return YES; -} - -@end diff --git a/Styles/Styles/UYLListViewController.h b/Styles/Styles/UYLListViewController.h deleted file mode 100644 index e1ecd40..0000000 --- a/Styles/Styles/UYLListViewController.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// UYLFirstViewController.h -// Styles -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import - -@interface UYLListViewController : UITableViewController - -@end diff --git a/Styles/Styles/UYLListViewController.m b/Styles/Styles/UYLListViewController.m deleted file mode 100644 index eddda08..0000000 --- a/Styles/Styles/UYLListViewController.m +++ /dev/null @@ -1,45 +0,0 @@ -// -// UYLFirstViewController.m -// Styles -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import "UYLListViewController.h" - -@interface UYLListViewController () -@end - -@implementation UYLListViewController - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return YES; -} - -@end diff --git a/Styles/Styles/UYLOkButton.h b/Styles/Styles/UYLOkButton.h deleted file mode 100644 index 279a947..0000000 --- a/Styles/Styles/UYLOkButton.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// UYLOkButton.h -// Styles -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import - -@interface UYLOkButton : UIButton -@end diff --git a/Styles/Styles/UYLOkButton.m b/Styles/Styles/UYLOkButton.m deleted file mode 100644 index 52c135d..0000000 --- a/Styles/Styles/UYLOkButton.m +++ /dev/null @@ -1,36 +0,0 @@ -// -// UYLOkButton.m -// Styles -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import "UYLOkButton.h" - -@implementation UYLOkButton -@end diff --git a/Styles/Styles/UYLResetButton.h b/Styles/Styles/UYLResetButton.h deleted file mode 100644 index 8e02791..0000000 --- a/Styles/Styles/UYLResetButton.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// UYLResetButton.h -// Styles -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import - -@interface UYLResetButton : UIButton -@end diff --git a/Styles/Styles/UYLResetButton.m b/Styles/Styles/UYLResetButton.m deleted file mode 100644 index 2de0503..0000000 --- a/Styles/Styles/UYLResetButton.m +++ /dev/null @@ -1,36 +0,0 @@ -// -// UYLResetButton.m -// Styles -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import "UYLResetButton.h" - -@implementation UYLResetButton -@end diff --git a/Styles/Styles/UYLRotatingViewController.h b/Styles/Styles/UYLRotatingViewController.h deleted file mode 100644 index eacf87e..0000000 --- a/Styles/Styles/UYLRotatingViewController.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// UYLRotatingViewController.h -// Styles -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import - -@interface UYLRotatingViewController : UIViewController - -@end diff --git a/Styles/Styles/UYLRotatingViewController.m b/Styles/Styles/UYLRotatingViewController.m deleted file mode 100644 index 7333012..0000000 --- a/Styles/Styles/UYLRotatingViewController.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// UYLRotatingViewController.m -// Styles -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import "UYLRotatingViewController.h" - -@implementation UYLRotatingViewController - -- (void) viewDidLoad -{ - [super viewDidLoad]; - self.view.backgroundColor = [UIColor lightGrayColor]; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return YES; -} - -@end diff --git a/Styles/Styles/UYLStyleController.h b/Styles/Styles/UYLStyleController.h deleted file mode 100644 index 7ec86af..0000000 --- a/Styles/Styles/UYLStyleController.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// UYLStyleController.h -// Styles -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import - -@interface UYLStyleController : NSObject - -+ (void)applyStyle; - -@end diff --git a/Styles/Styles/UYLStyleController.m b/Styles/Styles/UYLStyleController.m deleted file mode 100644 index b12ad10..0000000 --- a/Styles/Styles/UYLStyleController.m +++ /dev/null @@ -1,125 +0,0 @@ -// -// UYLStyleController.m -// Styles -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import "UYLStyleController.h" -#import "UYLRotatingViewController.h" -#import "UYLResetButton.h" -#import "UYLOkButton.h" -#import "UYLZeroButton.h" - -@implementation UYLStyleController - -+ (void)applyStyle -{ - // UINavigationBar - UIImage *navBarImage = [UIImage imageNamed:@"navbar"]; - navBarImage = [navBarImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20.0, 0, 20.0)]; - - UIImage *navBarLandscapeImage = [UIImage imageNamed:@"navbar-landscape"]; - navBarLandscapeImage = [navBarLandscapeImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20.0, 0, 20.0)]; - - UINavigationBar *navigationBarAppearance = [UINavigationBar appearance]; - [navigationBarAppearance setBackgroundImage:navBarImage forBarMetrics:UIBarMetricsDefault]; - [navigationBarAppearance setBackgroundImage:navBarLandscapeImage forBarMetrics:UIBarMetricsLandscapePhone]; - - NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor grayColor], UITextAttributeTextColor, nil]; - [navigationBarAppearance setTitleTextAttributes:textAttributes]; - - UIImage *backButtonImage = [UIImage imageNamed:@"back-button"]; - backButtonImage = [backButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 25.0, 0, 6.0)]; - - UIImage *backButtonLandscapeImage = [UIImage imageNamed:@"back-button-landscape"]; - backButtonLandscapeImage = [backButtonLandscapeImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 25.0, 0, 6.0)]; - - UIBarButtonItem *barButtonItemAppearance = [UIBarButtonItem appearance]; - [barButtonItemAppearance setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - [barButtonItemAppearance setBackButtonBackgroundImage:backButtonLandscapeImage forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone]; - - - // UIButton - UIImage *defaultButtonImage = [UIImage imageNamed:@"steel-button"]; - defaultButtonImage = [defaultButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20.0, 0, 20.0)]; - [[UIButton appearanceWhenContainedIn:[UYLRotatingViewController class], nil] setBackgroundImage:defaultButtonImage forState:UIControlStateNormal]; - - UIImage *okButtonImage = [UIImage imageNamed:@"green-button"]; - okButtonImage = [okButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20.0, 0, 20.0)]; - [[UYLOkButton appearanceWhenContainedIn:[UYLRotatingViewController class], nil] setBackgroundImage:okButtonImage forState:UIControlStateNormal]; - - UIImage *zeroButtonImage = [UIImage imageNamed:@"orange-button"]; - zeroButtonImage = [zeroButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20.0, 0, 20.0)]; - [[UYLZeroButton appearanceWhenContainedIn:[UYLRotatingViewController class], nil] setBackgroundImage:zeroButtonImage forState:UIControlStateNormal]; - - UIImage *resetButtonImage = [UIImage imageNamed:@"red-button"]; - resetButtonImage = [resetButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20.0, 0, 20.0)]; - [[UYLResetButton appearanceWhenContainedIn:[UYLRotatingViewController class], nil] setBackgroundImage:resetButtonImage forState:UIControlStateNormal]; - [[UYLResetButton appearanceWhenContainedIn:[UYLRotatingViewController class], nil] setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; - - - // Set some colors - UIColor *mainColor = [UIColor darkGrayColor]; - UIColor *altColor = [UIColor lightGrayColor]; - - - // UILabel - UILabel *labelAppearance = [UILabel appearanceWhenContainedIn:[UYLRotatingViewController class], nil]; - [labelAppearance setTextColor:mainColor]; - - - // UIActivityIndicator - [[UIActivityIndicatorView appearance] setColor:[UIColor redColor]]; - - - // UIProgressView - [[UIProgressView appearance] setProgressTintColor:mainColor]; - [[UIProgressView appearance] setTrackTintColor:altColor]; - - - // UISwitch - [[UISwitch appearance] setOnTintColor:altColor]; - - - // UISlider - [[UISlider appearance] setMinimumTrackTintColor:mainColor]; - [[UISlider appearance] setMaximumTrackTintColor:altColor]; - [[UISlider appearance] setThumbTintColor:[UIColor redColor]]; - - - // UISegmentedControl - [[UISegmentedControl appearance] setBackgroundImage:defaultButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - [[UISegmentedControl appearance] setBackgroundImage:zeroButtonImage forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; - - UIImage *dividerImage = [UIImage imageNamed:@"divider"]; - [[UISegmentedControl appearance] setDividerImage:dividerImage forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; -} - -@end diff --git a/Styles/Styles/UYLZeroButton.h b/Styles/Styles/UYLZeroButton.h deleted file mode 100644 index e773f6b..0000000 --- a/Styles/Styles/UYLZeroButton.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// UYLZeroButton.h -// Styles -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import - -@interface UYLZeroButton : UIButton -@end diff --git a/Styles/Styles/UYLZeroButton.m b/Styles/Styles/UYLZeroButton.m deleted file mode 100644 index 1bb41ea..0000000 --- a/Styles/Styles/UYLZeroButton.m +++ /dev/null @@ -1,36 +0,0 @@ -// -// UYLZeroButton.m -// Styles -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import "UYLZeroButton.h" - -@implementation UYLZeroButton -@end diff --git a/Styles/Styles/en.lproj/InfoPlist.strings b/Styles/Styles/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28f..0000000 --- a/Styles/Styles/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/Styles/Styles/main.m b/Styles/Styles/main.m deleted file mode 100644 index b1284ba..0000000 --- a/Styles/Styles/main.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// main.m -// Styles -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import - -#import "UYLAppDelegate.h" - -int main(int argc, char *argv[]) -{ - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([UYLAppDelegate class])); - } -} diff --git a/TaskTimer/README b/TaskTimer/README deleted file mode 100644 index fd14c10..0000000 --- a/TaskTimer/README +++ /dev/null @@ -1,95 +0,0 @@ -======================================================================= -TaskTimer - -Version 1.1 14 May 2012 Add shake to reset -Version 1.0 6-April 2012 Initial Version -======================================================================= - -The TaskTimer App is intended as an example on how to add accessibility -features to an existing App. It is based on the Master Detail Xcode -project template and is a universal app that uses Core Data for its -model. The basic function of the App is to time how long it takes to -perform a list of tasks. - -For further details see: - -http://useyourloaf.com/blog/2012/4/23/voiceover-accessibility.html -http://useyourloaf.com/blog/2012/5/14/detecting-voiceover-status-changes.html - -======================================================================= -Model -======================================================================= - -Task.m -Task.h -The model consists of a single Core Data entity class for the task data. - -======================================================================= -View -======================================================================= - -UYLCounterView.h -UYLCounterView.m - -The UYLCounterView is a custom UIView subclass used to display the -current duration of a task and buttons to start and stop the counter. -Users of the view can implement the UYLCounterViewDelegate protocol -to receive methods calls when the counter is stopper/started. - -UYLTaskListViewController_iPad.xib -UYLTaskListViewController_iPhone.xib - -iPad and iPhone versions of the NIB for the UYLTaskListViewController. -This NIB is a basic UITableView. - -UYLTaskViewController_iPad.xib -UYLTaskViewController_iPhone.xib - -iPad and iPhone versions of the NIB for the UYLTaskViewController. This -is a custom view containing a text view to allow the task name to be -displayed and edited. It also contains a UYLCounterView to show the -task timer. - -======================================================================= -Controller -======================================================================= - -UYLTaskListViewController.h -UYLTaskListViewController.m - -The master view controller on the iPad and root view controller on the -iPhone. This controller implements the delegates for a table view -showing the list of tasks. The table supports adding/deleting of tasks. - -On the iPad the currently selected task is shown in the detail view -controller which is implemented by a UYLTaskViewController. - -On the iPhone selecting a task pushes a UYLTaskViewController onto -the navigation controller stack. - -UYLTaskViewController.h -UYLTaskViewController.m - -Used to show the task details and allow the task timer to be stopped -and started. A shake event can be used to reset the task. A reset -button is shown/hidden depending on the state of VoiceOver. - -======================================================================= -App Delegate -======================================================================= - -UYLAppDelegate.h -UYLAppDelegate.m - -The App delegate is largely unmodified from the template code. It creates -the root view controllers and initialises the core data stack. - -======================================================================= -Other files -======================================================================= - -NSNumber+UYLTimeFormatter.h -NSNumber+UYLTimeFormatter.m - -A category on NSNumber to provide a string representation of the elapsed -time. diff --git a/TaskTimer/TaskTimer.xcodeproj/project.pbxproj b/TaskTimer/TaskTimer.xcodeproj/project.pbxproj deleted file mode 100644 index b1fb648..0000000 --- a/TaskTimer/TaskTimer.xcodeproj/project.pbxproj +++ /dev/null @@ -1,444 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 532DD95A1530C8EC00ED5845 /* UYLCounterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 532DD9591530C8EC00ED5845 /* UYLCounterView.m */; }; - 532DD9601530C90300ED5845 /* UYLTaskListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 532DD95D1530C90300ED5845 /* UYLTaskListViewController.m */; }; - 532DD9611530C90300ED5845 /* UYLTaskViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 532DD95F1530C90300ED5845 /* UYLTaskViewController.m */; }; - 532DD96C1530C9AD00ED5845 /* UYLAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 532DD96B1530C9AD00ED5845 /* UYLAppDelegate.m */; }; - 532DD9751530CA6400ED5845 /* UYLTaskListViewController_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 532DD96D1530CA6400ED5845 /* UYLTaskListViewController_iPad.xib */; }; - 532DD9761530CA6400ED5845 /* UYLTaskListViewController_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 532DD96F1530CA6400ED5845 /* UYLTaskListViewController_iPhone.xib */; }; - 532DD9771530CA6400ED5845 /* UYLTaskViewController_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 532DD9711530CA6400ED5845 /* UYLTaskViewController_iPad.xib */; }; - 532DD9781530CA6400ED5845 /* UYLTaskViewController_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 532DD9731530CA6400ED5845 /* UYLTaskViewController_iPhone.xib */; }; - 534644A5155F083D00B20849 /* redbutton.png in Resources */ = {isa = PBXBuildFile; fileRef = 534644A4155F083D00B20849 /* redbutton.png */; }; - 536270F6152E0A55009732E1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 536270F5152E0A55009732E1 /* UIKit.framework */; }; - 536270F8152E0A55009732E1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 536270F7152E0A55009732E1 /* Foundation.framework */; }; - 536270FA152E0A55009732E1 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 536270F9152E0A55009732E1 /* CoreGraphics.framework */; }; - 536270FC152E0A55009732E1 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 536270FB152E0A55009732E1 /* CoreData.framework */; }; - 53627102152E0A55009732E1 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 53627100152E0A55009732E1 /* InfoPlist.strings */; }; - 53627104152E0A55009732E1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 53627103152E0A55009732E1 /* main.m */; }; - 53627127152E0B87009732E1 /* Task.m in Sources */ = {isa = PBXBuildFile; fileRef = 53627125152E0B87009732E1 /* Task.m */; }; - 5362712B152E0BF1009732E1 /* TaskTimer.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 53627129152E0BF1009732E1 /* TaskTimer.xcdatamodeld */; }; - 539F94F1153AE6F0009CF03D /* NSNumber+UYLTimeFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 539F94F0153AE6F0009CF03D /* NSNumber+UYLTimeFormatter.m */; }; - 53BD55AA1533880300BCFB33 /* checked.png in Resources */ = {isa = PBXBuildFile; fileRef = 53BD55A21533880300BCFB33 /* checked.png */; }; - 53BD55AB1533880300BCFB33 /* checked@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53BD55A31533880300BCFB33 /* checked@2x.png */; }; - 53BD55AC1533880300BCFB33 /* start.png in Resources */ = {isa = PBXBuildFile; fileRef = 53BD55A41533880300BCFB33 /* start.png */; }; - 53BD55AD1533880300BCFB33 /* start@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53BD55A51533880300BCFB33 /* start@2x.png */; }; - 53BD55AE1533880300BCFB33 /* stop.png in Resources */ = {isa = PBXBuildFile; fileRef = 53BD55A61533880300BCFB33 /* stop.png */; }; - 53BD55AF1533880300BCFB33 /* stop@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53BD55A71533880300BCFB33 /* stop@2x.png */; }; - 53BD55B01533880300BCFB33 /* unchecked.png in Resources */ = {isa = PBXBuildFile; fileRef = 53BD55A81533880300BCFB33 /* unchecked.png */; }; - 53BD55B11533880300BCFB33 /* unchecked@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53BD55A91533880300BCFB33 /* unchecked@2x.png */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 532DD9581530C8EC00ED5845 /* UYLCounterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLCounterView.h; sourceTree = ""; }; - 532DD9591530C8EC00ED5845 /* UYLCounterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLCounterView.m; sourceTree = ""; }; - 532DD95C1530C90300ED5845 /* UYLTaskListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLTaskListViewController.h; sourceTree = ""; }; - 532DD95D1530C90300ED5845 /* UYLTaskListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLTaskListViewController.m; sourceTree = ""; }; - 532DD95E1530C90300ED5845 /* UYLTaskViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLTaskViewController.h; sourceTree = ""; }; - 532DD95F1530C90300ED5845 /* UYLTaskViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLTaskViewController.m; sourceTree = ""; }; - 532DD96A1530C9AD00ED5845 /* UYLAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLAppDelegate.h; sourceTree = ""; }; - 532DD96B1530C9AD00ED5845 /* UYLAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLAppDelegate.m; sourceTree = ""; }; - 532DD96E1530CA6400ED5845 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/UYLTaskListViewController_iPad.xib; sourceTree = ""; }; - 532DD9701530CA6400ED5845 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/UYLTaskListViewController_iPhone.xib; sourceTree = ""; }; - 532DD9721530CA6400ED5845 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/UYLTaskViewController_iPad.xib; sourceTree = ""; }; - 532DD9741530CA6400ED5845 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/UYLTaskViewController_iPhone.xib; sourceTree = ""; }; - 534644A4155F083D00B20849 /* redbutton.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = redbutton.png; sourceTree = ""; }; - 536270F1152E0A55009732E1 /* TaskTimer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TaskTimer.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 536270F5152E0A55009732E1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 536270F7152E0A55009732E1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 536270F9152E0A55009732E1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 536270FB152E0A55009732E1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; - 536270FF152E0A55009732E1 /* TaskTimer-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TaskTimer-Info.plist"; sourceTree = ""; }; - 53627101152E0A55009732E1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - 53627103152E0A55009732E1 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 53627105152E0A55009732E1 /* TaskTimer-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TaskTimer-Prefix.pch"; sourceTree = ""; }; - 53627124152E0B87009732E1 /* Task.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Task.h; sourceTree = ""; }; - 53627125152E0B87009732E1 /* Task.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Task.m; sourceTree = ""; }; - 5362712A152E0BF1009732E1 /* Accessibile.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Accessibile.xcdatamodel; sourceTree = ""; }; - 539F94EF153AE6F0009CF03D /* NSNumber+UYLTimeFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSNumber+UYLTimeFormatter.h"; sourceTree = ""; }; - 539F94F0153AE6F0009CF03D /* NSNumber+UYLTimeFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSNumber+UYLTimeFormatter.m"; sourceTree = ""; }; - 53BD55A21533880300BCFB33 /* checked.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = checked.png; sourceTree = ""; }; - 53BD55A31533880300BCFB33 /* checked@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "checked@2x.png"; sourceTree = ""; }; - 53BD55A41533880300BCFB33 /* start.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = start.png; sourceTree = ""; }; - 53BD55A51533880300BCFB33 /* start@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "start@2x.png"; sourceTree = ""; }; - 53BD55A61533880300BCFB33 /* stop.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = stop.png; sourceTree = ""; }; - 53BD55A71533880300BCFB33 /* stop@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stop@2x.png"; sourceTree = ""; }; - 53BD55A81533880300BCFB33 /* unchecked.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = unchecked.png; sourceTree = ""; }; - 53BD55A91533880300BCFB33 /* unchecked@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "unchecked@2x.png"; sourceTree = ""; }; - 53DA48A1152FA0D700A616D8 /* README */ = {isa = PBXFileReference; lastKnownFileType = text; path = README; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 536270EE152E0A55009732E1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 536270F6152E0A55009732E1 /* UIKit.framework in Frameworks */, - 536270F8152E0A55009732E1 /* Foundation.framework in Frameworks */, - 536270FA152E0A55009732E1 /* CoreGraphics.framework in Frameworks */, - 536270FC152E0A55009732E1 /* CoreData.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 536270E6152E0A55009732E1 = { - isa = PBXGroup; - children = ( - 53DA48A1152FA0D700A616D8 /* README */, - 536270FD152E0A55009732E1 /* TaskTimer */, - 536270F4152E0A55009732E1 /* Frameworks */, - 536270F2152E0A55009732E1 /* Products */, - ); - sourceTree = ""; - }; - 536270F2152E0A55009732E1 /* Products */ = { - isa = PBXGroup; - children = ( - 536270F1152E0A55009732E1 /* TaskTimer.app */, - ); - name = Products; - sourceTree = ""; - }; - 536270F4152E0A55009732E1 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 536270F5152E0A55009732E1 /* UIKit.framework */, - 536270F7152E0A55009732E1 /* Foundation.framework */, - 536270F9152E0A55009732E1 /* CoreGraphics.framework */, - 536270FB152E0A55009732E1 /* CoreData.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 536270FD152E0A55009732E1 /* TaskTimer */ = { - isa = PBXGroup; - children = ( - 532DD96A1530C9AD00ED5845 /* UYLAppDelegate.h */, - 532DD96B1530C9AD00ED5845 /* UYLAppDelegate.m */, - 53A72C4A153DEE61000AAB9C /* Categories */, - 53627123152E0B65009732E1 /* Model */, - 5362712C152E0BFF009732E1 /* View */, - 5362712D152E0C07009732E1 /* Controller */, - 53627146152E0C72009732E1 /* Images */, - 536270FE152E0A55009732E1 /* Supporting Files */, - ); - path = TaskTimer; - sourceTree = ""; - }; - 536270FE152E0A55009732E1 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 536270FF152E0A55009732E1 /* TaskTimer-Info.plist */, - 53627100152E0A55009732E1 /* InfoPlist.strings */, - 53627103152E0A55009732E1 /* main.m */, - 53627105152E0A55009732E1 /* TaskTimer-Prefix.pch */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 53627123152E0B65009732E1 /* Model */ = { - isa = PBXGroup; - children = ( - 53627129152E0BF1009732E1 /* TaskTimer.xcdatamodeld */, - 53627124152E0B87009732E1 /* Task.h */, - 53627125152E0B87009732E1 /* Task.m */, - ); - name = Model; - sourceTree = ""; - }; - 5362712C152E0BFF009732E1 /* View */ = { - isa = PBXGroup; - children = ( - 532DD96D1530CA6400ED5845 /* UYLTaskListViewController_iPad.xib */, - 532DD96F1530CA6400ED5845 /* UYLTaskListViewController_iPhone.xib */, - 532DD9711530CA6400ED5845 /* UYLTaskViewController_iPad.xib */, - 532DD9731530CA6400ED5845 /* UYLTaskViewController_iPhone.xib */, - 532DD9581530C8EC00ED5845 /* UYLCounterView.h */, - 532DD9591530C8EC00ED5845 /* UYLCounterView.m */, - ); - name = View; - sourceTree = ""; - }; - 5362712D152E0C07009732E1 /* Controller */ = { - isa = PBXGroup; - children = ( - 532DD95C1530C90300ED5845 /* UYLTaskListViewController.h */, - 532DD95D1530C90300ED5845 /* UYLTaskListViewController.m */, - 532DD95E1530C90300ED5845 /* UYLTaskViewController.h */, - 532DD95F1530C90300ED5845 /* UYLTaskViewController.m */, - ); - name = Controller; - sourceTree = ""; - }; - 53627146152E0C72009732E1 /* Images */ = { - isa = PBXGroup; - children = ( - 534644A4155F083D00B20849 /* redbutton.png */, - 53BD55A21533880300BCFB33 /* checked.png */, - 53BD55A31533880300BCFB33 /* checked@2x.png */, - 53BD55A41533880300BCFB33 /* start.png */, - 53BD55A51533880300BCFB33 /* start@2x.png */, - 53BD55A61533880300BCFB33 /* stop.png */, - 53BD55A71533880300BCFB33 /* stop@2x.png */, - 53BD55A81533880300BCFB33 /* unchecked.png */, - 53BD55A91533880300BCFB33 /* unchecked@2x.png */, - ); - name = Images; - sourceTree = ""; - }; - 53A72C4A153DEE61000AAB9C /* Categories */ = { - isa = PBXGroup; - children = ( - 539F94EF153AE6F0009CF03D /* NSNumber+UYLTimeFormatter.h */, - 539F94F0153AE6F0009CF03D /* NSNumber+UYLTimeFormatter.m */, - ); - name = Categories; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 536270F0152E0A55009732E1 /* TaskTimer */ = { - isa = PBXNativeTarget; - buildConfigurationList = 53627120152E0A55009732E1 /* Build configuration list for PBXNativeTarget "TaskTimer" */; - buildPhases = ( - 536270ED152E0A55009732E1 /* Sources */, - 536270EE152E0A55009732E1 /* Frameworks */, - 536270EF152E0A55009732E1 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = TaskTimer; - productName = TaskTimer; - productReference = 536270F1152E0A55009732E1 /* TaskTimer.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 536270E8152E0A55009732E1 /* Project object */ = { - isa = PBXProject; - attributes = { - CLASSPREFIX = UYL; - LastUpgradeCheck = 0430; - }; - buildConfigurationList = 536270EB152E0A55009732E1 /* Build configuration list for PBXProject "TaskTimer" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 536270E6152E0A55009732E1; - productRefGroup = 536270F2152E0A55009732E1 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 536270F0152E0A55009732E1 /* TaskTimer */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 536270EF152E0A55009732E1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 53627102152E0A55009732E1 /* InfoPlist.strings in Resources */, - 532DD9751530CA6400ED5845 /* UYLTaskListViewController_iPad.xib in Resources */, - 532DD9761530CA6400ED5845 /* UYLTaskListViewController_iPhone.xib in Resources */, - 532DD9771530CA6400ED5845 /* UYLTaskViewController_iPad.xib in Resources */, - 532DD9781530CA6400ED5845 /* UYLTaskViewController_iPhone.xib in Resources */, - 53BD55AA1533880300BCFB33 /* checked.png in Resources */, - 53BD55AB1533880300BCFB33 /* checked@2x.png in Resources */, - 53BD55AC1533880300BCFB33 /* start.png in Resources */, - 53BD55AD1533880300BCFB33 /* start@2x.png in Resources */, - 53BD55AE1533880300BCFB33 /* stop.png in Resources */, - 53BD55AF1533880300BCFB33 /* stop@2x.png in Resources */, - 53BD55B01533880300BCFB33 /* unchecked.png in Resources */, - 53BD55B11533880300BCFB33 /* unchecked@2x.png in Resources */, - 534644A5155F083D00B20849 /* redbutton.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 536270ED152E0A55009732E1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 53627104152E0A55009732E1 /* main.m in Sources */, - 53627127152E0B87009732E1 /* Task.m in Sources */, - 5362712B152E0BF1009732E1 /* TaskTimer.xcdatamodeld in Sources */, - 532DD95A1530C8EC00ED5845 /* UYLCounterView.m in Sources */, - 532DD9601530C90300ED5845 /* UYLTaskListViewController.m in Sources */, - 532DD9611530C90300ED5845 /* UYLTaskViewController.m in Sources */, - 532DD96C1530C9AD00ED5845 /* UYLAppDelegate.m in Sources */, - 539F94F1153AE6F0009CF03D /* NSNumber+UYLTimeFormatter.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 532DD96D1530CA6400ED5845 /* UYLTaskListViewController_iPad.xib */ = { - isa = PBXVariantGroup; - children = ( - 532DD96E1530CA6400ED5845 /* en */, - ); - name = UYLTaskListViewController_iPad.xib; - sourceTree = ""; - }; - 532DD96F1530CA6400ED5845 /* UYLTaskListViewController_iPhone.xib */ = { - isa = PBXVariantGroup; - children = ( - 532DD9701530CA6400ED5845 /* en */, - ); - name = UYLTaskListViewController_iPhone.xib; - sourceTree = ""; - }; - 532DD9711530CA6400ED5845 /* UYLTaskViewController_iPad.xib */ = { - isa = PBXVariantGroup; - children = ( - 532DD9721530CA6400ED5845 /* en */, - ); - name = UYLTaskViewController_iPad.xib; - sourceTree = ""; - }; - 532DD9731530CA6400ED5845 /* UYLTaskViewController_iPhone.xib */ = { - isa = PBXVariantGroup; - children = ( - 532DD9741530CA6400ED5845 /* en */, - ); - name = UYLTaskViewController_iPhone.xib; - sourceTree = ""; - }; - 53627100152E0A55009732E1 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 53627101152E0A55009732E1 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 5362711E152E0A55009732E1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - CLANG_ENABLE_OBJC_ARC = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.1; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 5362711F152E0A55009732E1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - CLANG_ENABLE_OBJC_ARC = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.1; - OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 53627121152E0A55009732E1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "TaskTimer/TaskTimer-Prefix.pch"; - INFOPLIST_FILE = "TaskTimer/TaskTimer-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - 53627122152E0A55009732E1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "TaskTimer/TaskTimer-Prefix.pch"; - INFOPLIST_FILE = "TaskTimer/TaskTimer-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 536270EB152E0A55009732E1 /* Build configuration list for PBXProject "TaskTimer" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5362711E152E0A55009732E1 /* Debug */, - 5362711F152E0A55009732E1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 53627120152E0A55009732E1 /* Build configuration list for PBXNativeTarget "TaskTimer" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 53627121152E0A55009732E1 /* Debug */, - 53627122152E0A55009732E1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCVersionGroup section */ - 53627129152E0BF1009732E1 /* TaskTimer.xcdatamodeld */ = { - isa = XCVersionGroup; - children = ( - 5362712A152E0BF1009732E1 /* Accessibile.xcdatamodel */, - ); - currentVersion = 5362712A152E0BF1009732E1 /* Accessibile.xcdatamodel */; - path = TaskTimer.xcdatamodeld; - sourceTree = ""; - versionGroupType = wrapper.xcdatamodel; - }; -/* End XCVersionGroup section */ - }; - rootObject = 536270E8152E0A55009732E1 /* Project object */; -} diff --git a/TaskTimer/TaskTimer/NSNumber+UYLTimeFormatter.h b/TaskTimer/TaskTimer/NSNumber+UYLTimeFormatter.h deleted file mode 100644 index 3c2cd73..0000000 --- a/TaskTimer/TaskTimer/NSNumber+UYLTimeFormatter.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// NSNumber+UYLTimeFormatter.h -// TaskTimer -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import - -@interface NSNumber (UYLTimeFormatter) - -- (NSString *)stringValueAsTime; - -@end diff --git a/TaskTimer/TaskTimer/NSNumber+UYLTimeFormatter.m b/TaskTimer/TaskTimer/NSNumber+UYLTimeFormatter.m deleted file mode 100644 index b5c8699..0000000 --- a/TaskTimer/TaskTimer/NSNumber+UYLTimeFormatter.m +++ /dev/null @@ -1,63 +0,0 @@ -// -// NSNumber+UYLTimeFormatter.m -// TaskTimer -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import "NSNumber+UYLTimeFormatter.h" - -@implementation NSNumber (UYLTimeFormatter) - -// Returns an NSString with a textual representation of the time expressed in -// minutes and seconds (e.g. "5 minutes and 10 seconds" - -- (NSString *)stringValueAsTime -{ - NSUInteger minutes = [self integerValue] / 60; - NSUInteger seconds = [self integerValue] % 60; - - NSString *secondsFormat = (seconds == 1) ? NSLocalizedString(@"second",nil) : - NSLocalizedString(@"seconds",nil); - NSString *minutesFormat = (minutes == 1) ? NSLocalizedString(@"minute",nil) : - NSLocalizedString(@"minutes",nil); - - NSString *text = nil; - if (minutes > 0) - { - text = [NSString stringWithFormat:@" %u %@ %u %@",minutes,minutesFormat,seconds,secondsFormat]; - } - else - { - text = [NSString stringWithFormat:@" %u %@",seconds,secondsFormat]; - } - - return text; -} - -@end diff --git a/TaskTimer/TaskTimer/Task.h b/TaskTimer/TaskTimer/Task.h deleted file mode 100644 index 59044a8..0000000 --- a/TaskTimer/TaskTimer/Task.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// Task.h -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import -#import - - -@interface Task : NSManagedObject - -@property (nonatomic, retain) NSNumber * complete; -@property (nonatomic, retain) NSDate * createdAt; -@property (nonatomic, retain) NSNumber * duration; -@property (nonatomic, retain) NSString * note; - -@end diff --git a/TaskTimer/TaskTimer/Task.m b/TaskTimer/TaskTimer/Task.m deleted file mode 100644 index da446c8..0000000 --- a/TaskTimer/TaskTimer/Task.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// Task.m -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import "Task.h" - - -@implementation Task - -@dynamic complete; -@dynamic createdAt; -@dynamic duration; -@dynamic note; - -@end diff --git a/TaskTimer/TaskTimer/TaskTimer-Info.plist b/TaskTimer/TaskTimer/TaskTimer-Info.plist deleted file mode 100644 index 3c50c87..0000000 --- a/TaskTimer/TaskTimer/TaskTimer-Info.plist +++ /dev/null @@ -1,46 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - com.useyourloaf.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - UIInterfaceOrientationPortraitUpsideDown - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/TaskTimer/TaskTimer/TaskTimer-Prefix.pch b/TaskTimer/TaskTimer/TaskTimer-Prefix.pch deleted file mode 100644 index 79c40be..0000000 --- a/TaskTimer/TaskTimer/TaskTimer-Prefix.pch +++ /dev/null @@ -1,15 +0,0 @@ -// -// Prefix header for all source files of the 'TaskTimer' target in the 'TaskTimer' project -// - -#import - -#ifndef __IPHONE_4_0 -#warning "This project uses features only available in iOS SDK 4.0 and later." -#endif - -#ifdef __OBJC__ - #import - #import - #import -#endif diff --git a/TaskTimer/TaskTimer/TaskTimer.xcdatamodeld/.xccurrentversion b/TaskTimer/TaskTimer/TaskTimer.xcdatamodeld/.xccurrentversion deleted file mode 100644 index 34639d4..0000000 --- a/TaskTimer/TaskTimer/TaskTimer.xcdatamodeld/.xccurrentversion +++ /dev/null @@ -1,8 +0,0 @@ - - - - - _XCCurrentVersionName - Accessibile.xcdatamodel - - diff --git a/TaskTimer/TaskTimer/TaskTimer.xcdatamodeld/Accessibile.xcdatamodel/contents b/TaskTimer/TaskTimer/TaskTimer.xcdatamodeld/Accessibile.xcdatamodel/contents deleted file mode 100644 index 0bd2cc0..0000000 --- a/TaskTimer/TaskTimer/TaskTimer.xcdatamodeld/Accessibile.xcdatamodel/contents +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/TaskTimer/TaskTimer/UYLAppDelegate.h b/TaskTimer/TaskTimer/UYLAppDelegate.h deleted file mode 100644 index 2f14c1f..0000000 --- a/TaskTimer/TaskTimer/UYLAppDelegate.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// UYLAppDelegate.h -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import - -@interface UYLAppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; -@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; -@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; - -@property (strong, nonatomic) UINavigationController *navigationController; -@property (strong, nonatomic) UISplitViewController *splitViewController; - -- (void)saveContext; -- (NSURL *)applicationDocumentsDirectory; - -@end diff --git a/TaskTimer/TaskTimer/UYLAppDelegate.m b/TaskTimer/TaskTimer/UYLAppDelegate.m deleted file mode 100644 index b0a54ba..0000000 --- a/TaskTimer/TaskTimer/UYLAppDelegate.m +++ /dev/null @@ -1,164 +0,0 @@ -// -// UYLAppDelegate.m -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import "UYLAppDelegate.h" -#import "UYLTaskListViewController.h" -#import "UYLTaskViewController.h" - -@implementation UYLAppDelegate - -@synthesize window = _window; -@synthesize managedObjectContext = __managedObjectContext; -@synthesize managedObjectModel = __managedObjectModel; -@synthesize persistentStoreCoordinator = __persistentStoreCoordinator; -@synthesize navigationController = _navigationController; -@synthesize splitViewController = _splitViewController; - -#pragma mark - -#pragma mark === Application Delegate Methods === -#pragma mark - - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - - if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) - { - UYLTaskListViewController *taskListViewController = [[UYLTaskListViewController alloc] initWithNibName:@"UYLTaskListViewController_iPhone" - bundle:nil]; - self.navigationController = [[UINavigationController alloc] initWithRootViewController:taskListViewController]; - self.window.rootViewController = self.navigationController; - taskListViewController.managedObjectContext = self.managedObjectContext; - } - else - { - UYLTaskListViewController *taskListViewController = [[UYLTaskListViewController alloc] initWithNibName:@"UYLTaskListViewController_iPad" - bundle:nil]; - UINavigationController *taskListNavigationController = [[UINavigationController alloc] initWithRootViewController:taskListViewController]; - UYLTaskViewController *taskViewController = [[UYLTaskViewController alloc] initWithNibName:@"UYLTaskViewController_iPad" bundle:nil]; - UINavigationController *taskNavigationController = [[UINavigationController alloc] initWithRootViewController:taskViewController]; - taskListViewController.detailViewController = taskViewController; - - self.splitViewController = [[UISplitViewController alloc] init]; - self.splitViewController.viewControllers = [NSArray arrayWithObjects:taskListNavigationController, taskNavigationController, nil]; - self.splitViewController.delegate = taskViewController; - - self.window.rootViewController = self.splitViewController; - taskListViewController.managedObjectContext = self.managedObjectContext; - } - [self.window makeKeyAndVisible]; - return YES; -} - -- (void)applicationWillTerminate:(UIApplication *)application -{ - [self saveContext]; -} - -- (void)applicationDidEnterBackground:(UIApplication *)application -{ - [self saveContext]; -} - -#pragma mark - -#pragma mark === Core Data Accessors === -#pragma mark - - -- (NSManagedObjectContext *)managedObjectContext -{ - if (__managedObjectContext != nil) - { - return __managedObjectContext; - } - - NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; - if (coordinator != nil) - { - __managedObjectContext = [[NSManagedObjectContext alloc] init]; - [__managedObjectContext setPersistentStoreCoordinator:coordinator]; - } - return __managedObjectContext; -} - -- (NSManagedObjectModel *)managedObjectModel -{ - if (__managedObjectModel != nil) - { - return __managedObjectModel; - } - NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"TaskTimer" withExtension:@"momd"]; - __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; - return __managedObjectModel; -} - -- (NSPersistentStoreCoordinator *)persistentStoreCoordinator -{ - if (__persistentStoreCoordinator != nil) - { - return __persistentStoreCoordinator; - } - - NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"TaskTimer.sqlite"]; - - NSError *error = nil; - __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; - if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) - { - NSLog(@"Unresolved error %@, %@", error, [error userInfo]); - } - - return __persistentStoreCoordinator; -} - -#pragma mark - -#pragma mark === Utility Methods === -#pragma mark - - -- (void)saveContext -{ - NSError *error = nil; - NSManagedObjectContext *managedObjectContext = self.managedObjectContext; - if (managedObjectContext != nil) - { - if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) - { - NSLog(@"Unresolved error %@, %@", error, [error userInfo]); - } - } -} - -- (NSURL *)applicationDocumentsDirectory -{ - return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; -} - -@end diff --git a/TaskTimer/TaskTimer/UYLCounterView.h b/TaskTimer/TaskTimer/UYLCounterView.h deleted file mode 100644 index 7fbd13e..0000000 --- a/TaskTimer/TaskTimer/UYLCounterView.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// UYLCounterView.h -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import - -@protocol UYLCounterViewDelegate - -@optional - -- (void)didStartCounter; -- (void)didStopCounter; - -@end - -@interface UYLCounterView : UIView - -@property (nonatomic, weak) id delegate; -@property (nonatomic, assign) NSUInteger secondsCounter; -@property (nonatomic, strong) NSMutableArray *accessibleElements; -@property (nonatomic, assign) BOOL counterEnabled; - -@end diff --git a/TaskTimer/TaskTimer/UYLCounterView.m b/TaskTimer/TaskTimer/UYLCounterView.m deleted file mode 100644 index 245d24a..0000000 --- a/TaskTimer/TaskTimer/UYLCounterView.m +++ /dev/null @@ -1,292 +0,0 @@ -// -// UYLCounterView.m -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import "UYLCounterView.h" -#import "NSNumber+UYLTimeFormatter.h" - -@interface UYLCounterView () - -@property (nonatomic, strong) UIButton *startButton; -@property (nonatomic, strong) UIButton *stopButton; - -- (void)setupView; - -@end - -@implementation UYLCounterView - -@synthesize delegate=_delegate; -@synthesize secondsCounter=_secondsCounter; -@synthesize accessibleElements=_accessibleElements; -@synthesize counterEnabled=_counterEnabled; -@synthesize startButton=_startButton; -@synthesize stopButton=_stopButton; - -#define UYLCOUNTERVIEW_LIMIT 3599 // Maximum seconds that can be displayed as mm:ss -#define UYLCOUNTERVIEW_MARGIN 10 -#define UYLCOUNTERVIEW_MINFONT 10 - -#define UYLCOUNTERVIEW_ELEMENTINDEX_STARTBUTTON 0 -#define UYLCOUNTERVIEW_ELEMENTINDEX_COUNTERTEXT 1 -#define UYLCOUNTERVIEW_ELEMENTINDEX_STOPBUTTON 2 - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) - { - [self setupView]; - } - return self; -} - -- (id)initWithCoder:(NSCoder *)aDecoder -{ - self = [super initWithCoder:aDecoder]; - if (self) - { - [self setupView]; - } - return self; -} - -- (void)setSecondsCounter:(NSUInteger)secondsCounter -{ - if (secondsCounter > UYLCOUNTERVIEW_LIMIT) - { - secondsCounter = UYLCOUNTERVIEW_LIMIT; - } - - _secondsCounter = secondsCounter; - - if (_accessibleElements) - { - UIAccessibilityElement *counterElement = [self.accessibleElements objectAtIndex:UYLCOUNTERVIEW_ELEMENTINDEX_COUNTERTEXT]; - counterElement.accessibilityValue = [[NSNumber numberWithInteger:secondsCounter] stringValueAsTime]; - } - - [self setNeedsDisplay]; -} - -- (void)setCounterEnabled:(BOOL)counterEnabled -{ - _counterEnabled = counterEnabled; - - if (counterEnabled == YES) - { - self.startButton.enabled = YES; - self.stopButton.enabled = NO; - } - else - { - self.startButton.enabled = NO; - self.stopButton.enabled = NO; - } -} -- (void)drawRect:(CGRect)rect -{ - NSUInteger minutes = self.secondsCounter / 60; - NSUInteger seconds = self.secondsCounter % 60; - - NSString *counterText = [NSString stringWithFormat:@"%02u:%02u", minutes, seconds]; - UIFont *font = [UIFont boldSystemFontOfSize:48]; - - CGFloat actualFontSize; - CGSize stringSize = [counterText sizeWithFont:font - minFontSize:UYLCOUNTERVIEW_MINFONT - actualFontSize:&actualFontSize - forWidth:self.bounds.size.width - lineBreakMode:UILineBreakModeTailTruncation]; - - - CGPoint point = CGPointMake((self.bounds.size.width - stringSize.width)/2, - (self.bounds.size.height - stringSize.height)/2); - - [counterText drawAtPoint:point - forWidth:stringSize.width - withFont:font - fontSize:actualFontSize - lineBreakMode:UILineBreakModeWordWrap - baselineAdjustment:UIBaselineAdjustmentAlignBaselines]; - -} - -#pragma mark - -#pragma mark === Action methods === -#pragma mark - - -- (void)startAction:(UIButton *)sender -{ - self.startButton.enabled = NO; - self.stopButton.enabled = YES; - - if (_accessibleElements) - { - UIAccessibilityElement *startElement = [self.accessibleElements objectAtIndex:UYLCOUNTERVIEW_ELEMENTINDEX_STARTBUTTON]; - startElement.accessibilityTraits = UIAccessibilityTraitButton | UIAccessibilityTraitNotEnabled; - - UIAccessibilityElement *stopElement = [self.accessibleElements objectAtIndex:UYLCOUNTERVIEW_ELEMENTINDEX_STOPBUTTON]; - stopElement.accessibilityTraits = UIAccessibilityTraitButton; - } - - if ([self.delegate respondsToSelector:@selector(didStartCounter)]) - { - [self.delegate didStartCounter]; - } -} - -- (void)stopAction:(UIButton *)sender -{ - self.counterEnabled = NO; - - if (_accessibleElements) - { - UIAccessibilityElement *stopElement = [self.accessibleElements objectAtIndex:UYLCOUNTERVIEW_ELEMENTINDEX_STOPBUTTON]; - stopElement.accessibilityTraits = UIAccessibilityTraitButton | UIAccessibilityTraitNotEnabled; - } - - if ([self.delegate respondsToSelector:@selector(didStopCounter)]) - { - [self.delegate didStopCounter]; - } -} - -#pragma mark - -#pragma mark === Accessibility Container methods === -#pragma mark - - -- (NSArray *)accessibleElements -{ - if (_accessibleElements != nil) - { - return _accessibleElements; - } - - _accessibleElements = [[NSMutableArray alloc] init]; - - // For the start and stop buttons we need to convert the button frame to the screen - // coord system when setting the accessibility frame. - - // start button - - UIAccessibilityElement *startElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self]; - startElement.accessibilityFrame = [self convertRect:self.startButton.frame toView:nil]; - startElement.accessibilityLabel = NSLocalizedString(@"Start", nil); - startElement.accessibilityTraits = UIAccessibilityTraitButton; - if (self.startButton.enabled == NO) startElement.accessibilityTraits |= UIAccessibilityTraitNotEnabled; - - [_accessibleElements addObject:startElement]; - - // The accessibilityFrame is returned in screen coordinates so it is first - // converted from screen to the local view coord system. - // The counter element frame is then calculated and then converted back - // to the screen coordinate system when setting the accessibility frame. - - CGRect frame = [self convertRect:self.accessibilityFrame fromView:nil]; - - UIAccessibilityElement *counterElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self]; - CGRect textFrame = CGRectInset(frame, UYLCOUNTERVIEW_MARGIN + self.startButton.bounds.size.width + UYLCOUNTERVIEW_MARGIN, UYLCOUNTERVIEW_MARGIN); - counterElement.accessibilityFrame = [self convertRect:textFrame toView:nil]; - counterElement.accessibilityLabel = NSLocalizedString(@"Duration", nil); - counterElement.accessibilityValue = [[NSNumber numberWithInteger:self.secondsCounter] stringValueAsTime]; - counterElement.accessibilityTraits = UIAccessibilityTraitUpdatesFrequently; - - [_accessibleElements addObject:counterElement]; - - // stop button - - UIAccessibilityElement *stopElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self]; - stopElement.accessibilityFrame = [self convertRect:self.stopButton.frame toView:nil]; - stopElement.accessibilityLabel = NSLocalizedString(@"Stop", nil); - stopElement.accessibilityTraits = UIAccessibilityTraitButton; - if (self.stopButton.enabled == NO) stopElement.accessibilityTraits |= UIAccessibilityTraitNotEnabled; - - [_accessibleElements addObject:stopElement]; - - return _accessibleElements; -} - -- (BOOL)isAccessibilityElement -{ - return NO; -} - -- (NSInteger)accessibilityElementCount -{ - return [[self accessibleElements] count]; -} - -- (id)accessibilityElementAtIndex:(NSInteger)index -{ - return [[self accessibleElements] objectAtIndex:index]; -} - -- (NSInteger)indexOfAccessibilityElement:(id)element -{ - return [[self accessibleElements] indexOfObject:element]; -} - -#pragma mark - -#pragma mark === Private methods === -#pragma mark - - -- (void)setupView -{ - UIImage *startImage = [UIImage imageNamed:@"start.png"]; - UIImage *stopImage = [UIImage imageNamed:@"stop.png"]; - - CGRect startFrame = CGRectMake(UYLCOUNTERVIEW_MARGIN, (self.bounds.size.height - startImage.size.height)/2, - startImage.size.height, startImage.size.width); - CGRect stopFrame = CGRectMake(self.bounds.size.width - UYLCOUNTERVIEW_MARGIN - stopImage.size.width, - (self.bounds.size.height - stopImage.size.height)/2, - stopImage.size.height, stopImage.size.width); - - self.startButton = [[UIButton alloc] initWithFrame:startFrame]; - self.stopButton = [[UIButton alloc] initWithFrame:stopFrame]; - - self.startButton.autoresizingMask = UIViewAutoresizingFlexibleRightMargin; - self.stopButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; - - [self.startButton setImage:startImage forState:UIControlStateNormal]; - [self.stopButton setImage:stopImage forState:UIControlStateNormal]; - - [self.startButton addTarget:self action:@selector(startAction:) forControlEvents:UIControlEventTouchUpInside]; - [self.stopButton addTarget:self action:@selector(stopAction:) forControlEvents:UIControlEventTouchUpInside]; - - self.startButton.enabled = NO; - self.stopButton.enabled = NO; - - [self addSubview:self.startButton]; - [self addSubview:self.stopButton]; -} - -@end diff --git a/TaskTimer/TaskTimer/UYLTaskListViewController.h b/TaskTimer/TaskTimer/UYLTaskListViewController.h deleted file mode 100644 index 53127fa..0000000 --- a/TaskTimer/TaskTimer/UYLTaskListViewController.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// UYLMasterViewController.h -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import -#import -#import "UYLTaskViewController.h" - -@interface UYLTaskListViewController : UITableViewController - -@property (strong, nonatomic) UYLTaskViewController *detailViewController; -@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController; -@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext; - -@end diff --git a/TaskTimer/TaskTimer/UYLTaskListViewController.m b/TaskTimer/TaskTimer/UYLTaskListViewController.m deleted file mode 100644 index 0505d63..0000000 --- a/TaskTimer/TaskTimer/UYLTaskListViewController.m +++ /dev/null @@ -1,247 +0,0 @@ -// -// UYLMasterViewController.m -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import "UYLTaskListViewController.h" -#import "Task.h" -#import "NSNumber+UYLTimeFormatter.h" - -@interface UYLTaskListViewController () -- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath; -@end - -@implementation UYLTaskListViewController - -@synthesize detailViewController = _detailViewController; -@synthesize fetchedResultsController = __fetchedResultsController; -@synthesize managedObjectContext = __managedObjectContext; - -#pragma mark - -#pragma mark === View Life Cycle Management === -#pragma mark - - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) - { - self.title = NSLocalizedString(@"Task List", nil); - if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) - { - self.clearsSelectionOnViewWillAppear = NO; - self.contentSizeForViewInPopover = CGSizeMake(320.0, 600.0); - } - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - self.navigationItem.leftBarButtonItem = self.editButtonItem; - - UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)]; - self.navigationItem.rightBarButtonItem = addButton; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return YES; -} - -#pragma mark - -#pragma mark === Table View Data Source Delegate Methods === -#pragma mark - - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return [[self.fetchedResultsController sections] count]; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - id sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; - return [sectionInfo numberOfObjects]; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *CellIdentifier = @"Cell"; - - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - if (cell == nil) - { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; - if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) - { - cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; - } - } - - [self configureCell:cell atIndexPath:indexPath]; - return cell; -} - -- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath -{ - return YES; -} - -- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath -{ - if (editingStyle == UITableViewCellEditingStyleDelete) - { - Task *task = [[self fetchedResultsController] objectAtIndexPath:indexPath]; - if ([self.detailViewController.task isEqual:task]) - { - self.detailViewController.task = nil; - } - - NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; - [context deleteObject:task]; - - NSError *error = nil; - if (![context save:&error]) - { - NSLog(@"Unresolved error %@, %@", error, [error userInfo]); - } - } -} - -#pragma mark - -#pragma mark === Table View Delegate Methods === -#pragma mark - - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - Task *task = [[self fetchedResultsController] objectAtIndexPath:indexPath]; - if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) - { - UYLTaskViewController *detailViewController = [[UYLTaskViewController alloc] initWithNibName:@"UYLTaskViewController_iPhone" - bundle:nil]; - detailViewController.task = task; - [self.navigationController pushViewController:detailViewController animated:YES]; - } - else - { - self.detailViewController.task = task; - } -} - -#pragma mark - -#pragma mark === Fetched Results Controller === -#pragma mark - - -- (NSFetchedResultsController *)fetchedResultsController -{ - if (__fetchedResultsController != nil) - { - return __fetchedResultsController; - } - - NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; - NSEntityDescription *entity = [NSEntityDescription entityForName:@"Task" inManagedObjectContext:self.managedObjectContext]; - [fetchRequest setEntity:entity]; - [fetchRequest setFetchBatchSize:20]; - - NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"createdAt" ascending:NO]; - NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil]; - [fetchRequest setSortDescriptors:sortDescriptors]; - - NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest - managedObjectContext:self.managedObjectContext - sectionNameKeyPath:nil - cacheName:@"Todo"]; - frc.delegate = self; - self.fetchedResultsController = frc; - - NSError *error = nil; - if (![self.fetchedResultsController performFetch:&error]) - { - NSLog(@"Unresolved error %@, %@", error, [error userInfo]); - } - - return __fetchedResultsController; -} - - - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller -{ - [self.tableView reloadData]; -} - -#pragma mark - -#pragma mark === Action methods === -#pragma mark - - -- (void)insertNewObject:(id)sender -{ - NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; - NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity]; - Task *task = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context]; - - task.note = @"New Task"; - task.createdAt = [NSDate date]; - - NSError *error = nil; - if (![context save:&error]) - { - NSLog(@"Unresolved error %@, %@", error, [error userInfo]); - } -} - -#pragma mark - -#pragma mark === Private methods === -#pragma mark - - -- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath -{ - Task *task = [self.fetchedResultsController objectAtIndexPath:indexPath]; - cell.textLabel.text = task.note; - cell.detailTextLabel.text = nil; - cell.imageView.image = [UIImage imageNamed:@"unchecked.png"]; - cell.accessibilityLabel = task.note; - - if ([task.complete boolValue]) - { - NSUInteger minutes = [task.duration integerValue] / 60; - NSUInteger seconds = [task.duration integerValue] % 60; - - cell.detailTextLabel.text = [NSString stringWithFormat:@"%02u:%02u", minutes, seconds]; - cell.imageView.image = [UIImage imageNamed:@"checked.png"]; - - NSString *durationText = [NSString stringWithFormat:@"%@ %@",task.note, - NSLocalizedString(@"completed in", nil)]; - durationText = [durationText stringByAppendingString:[task.duration stringValueAsTime]]; - cell.accessibilityLabel = durationText; - } -} - -@end diff --git a/TaskTimer/TaskTimer/UYLTaskViewController.h b/TaskTimer/TaskTimer/UYLTaskViewController.h deleted file mode 100644 index e73c2be..0000000 --- a/TaskTimer/TaskTimer/UYLTaskViewController.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// UYLDetailViewController.h -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import -#import "Task.h" -#import "UYLCounterView.h" - -@interface UYLTaskViewController : UIViewController - -@property (strong, nonatomic) Task *task; -@property (weak, nonatomic) IBOutlet UITextField *taskNote; -@property (weak, nonatomic) IBOutlet UYLCounterView *taskCounterView; - -@end diff --git a/TaskTimer/TaskTimer/UYLTaskViewController.m b/TaskTimer/TaskTimer/UYLTaskViewController.m deleted file mode 100644 index e956ad2..0000000 --- a/TaskTimer/TaskTimer/UYLTaskViewController.m +++ /dev/null @@ -1,299 +0,0 @@ -// -// UYLDetailViewController.m -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import "UYLTaskViewController.h" - -@interface UYLTaskViewController () - -@property (assign, nonatomic) BOOL running; -@property (strong, nonatomic) NSTimer *taskTimer; -@property (strong, nonatomic) UIPopoverController *masterPopoverController; -@property (weak, nonatomic) IBOutlet UIButton *taskResetButton; - -- (void)configureView; -- (void)saveContext; -- (IBAction)taskResetAction; -- (void)voiceOverStatusChanged; - -@end - -@implementation UYLTaskViewController - -@synthesize task=_task; -@synthesize taskNote=_taskNote; -@synthesize taskCounterView=_taskCounterView; -@synthesize taskResetButton=_taskResetButton; -@synthesize running=_running; -@synthesize taskTimer=_taskTimer; -@synthesize masterPopoverController = _masterPopoverController; - -#pragma mark - -#pragma mark === Accessors === -#pragma mark - - -- (void)setTask:(Task *)newTask -{ - if (_task != newTask) - { - _task = newTask; - - self.running = NO; - self.taskTimer = nil; - - // Update the view. - [self configureView]; - } - - if (self.masterPopoverController != nil) { - [self.masterPopoverController dismissPopoverAnimated:YES]; - } -} - -- (void)setTaskTimer:(NSTimer *)taskTimer -{ - [_taskTimer invalidate]; - _taskTimer = taskTimer; -} - -#pragma mark - -#pragma mark === View Life Cycle Management === -#pragma mark - - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) - { - self.title = NSLocalizedString(@"Task", nil); - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - self.taskCounterView.delegate = self; - [self configureView]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(voiceOverStatusChanged) - name:UIAccessibilityVoiceOverStatusChanged - object:nil]; -} - -- (void)viewDidUnload -{ - [super viewDidUnload]; - self.taskTimer = nil; - [self saveContext]; - - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [self becomeFirstResponder]; -} - -- (void)viewWillDisappear:(BOOL)animated -{ - [super viewWillDisappear:animated]; - self.taskTimer = nil; - [self saveContext]; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return YES; -} - -- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation -{ - // The accessibility elements should be recalculated when the orientation changes - self.taskCounterView.accessibleElements = nil; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -#pragma mark - -#pragma mark === Split View Delegate methods === -#pragma mark - - -- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation { - return NO; -} - -- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController -{ - barButtonItem.title = NSLocalizedString(@"Task List", nil); - [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES]; - self.masterPopoverController = popoverController; -} - -- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem -{ - // Called when the view is shown again in the split view, invalidating the button and popover controller. - [self.navigationItem setLeftBarButtonItem:nil animated:YES]; - self.masterPopoverController = nil; -} - -#pragma mark - -#pragma mark === Text delegate methods === -#pragma mark - - -- (BOOL)textFieldShouldReturn:(UITextField *)textField -{ - if (self.task) - { - self.task.note = textField.text; - } - [textField resignFirstResponder]; - return YES; -} - -#pragma mark - -#pragma mark === UIResponder Respond to motion events === -#pragma mark - - -- (BOOL)canBecomeFirstResponder -{ - return YES; -} - -- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event -{ - [self taskResetAction]; -} - -#pragma mark - -#pragma mark === UYLCounterViewDelegate methods === -#pragma mark - - -- (void)didStartCounter -{ - self.running = YES; - - // Create a timer that fires every second. - NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 - target:self - selector:@selector(timerTick:) - userInfo:nil - repeats:YES]; - self.taskTimer = timer; -} - -- (void)didStopCounter -{ - if (self.task) - { - self.task.complete = [NSNumber numberWithBool:YES]; - } - - self.running = NO; - self.taskTimer = nil; - [self saveContext]; -} - -- (void)timerTick:(NSTimer *)timer -{ - if (self.running && self.task) - { - NSUInteger duration = [self.task.duration integerValue]; - duration++; - - self.task.duration = [NSNumber numberWithInteger:duration]; - self.taskCounterView.secondsCounter = duration; - } -} - -#pragma mark - -#pragma mark === Private methods === -#pragma mark - - -- (void)configureView -{ - NSInteger duration = 0; - self.taskNote.enabled = NO; - self.taskCounterView.counterEnabled = NO; - self.taskNote.text = nil; - - if (self.task) - { - self.taskNote.enabled = YES; - self.taskNote.text = self.task.note; - duration = [self.task.duration integerValue]; - if ([self.task.complete boolValue] == NO) - { - self.taskCounterView.counterEnabled = YES; - } - } - self.taskCounterView.secondsCounter = duration; - self.taskResetButton.hidden = ! UIAccessibilityIsVoiceOverRunning(); -} - -- (void)saveContext -{ - NSError *error = nil; - NSManagedObjectContext *managedObjectContext = [self.task managedObjectContext]; - if (managedObjectContext != nil) - { - if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) - { - NSLog(@"Unresolved error %@, %@", error, [error userInfo]); - } - } -} - -- (IBAction)taskResetAction -{ - if (self.task) - { - self.running = NO; - self.taskTimer = nil; - - self.task.duration = [NSNumber numberWithInteger:0]; - self.task.complete = [NSNumber numberWithBool:NO]; - - self.taskCounterView.secondsCounter = 0; - self.taskCounterView.counterEnabled = YES; - } -} - -- (void)voiceOverStatusChanged -{ - self.taskResetButton.hidden = ! UIAccessibilityIsVoiceOverRunning(); -} - -@end diff --git a/TaskTimer/TaskTimer/checked.png b/TaskTimer/TaskTimer/checked.png deleted file mode 100644 index df7084dc9f6845b1f42013f2118460dae4ede262..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1790 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 v8_LW}d5@_B&>Vo3r&8}hSX40 - - - 1296 - 11D50 - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 1181 - - - IBProxyObject - IBUITableView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBIPadFramework - - - IBFirstResponder - IBIPadFramework - - - - 274 - {{0, 20}, {320, 832}} - - - - 3 - MQA - - YES - - 2 - - - IBUISplitViewMasterSimulatedSizeMetrics - - YES - - - - - - {320, 852} - {320, 768} - - - IBIPadFramework - Master - IBUISplitViewController - - IBUISplitViewControllerContentSizeLocation - IBUISplitViewControllerContentSizeLocationMaster - - - IBIPadFramework - YES - 1 - 0 - YES - 56 - 22 - 22 - - - - - - - view - - - - 3 - - - - dataSource - - - - 4 - - - - delegate - - - - 5 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 2 - - - - - - - UYLTaskListViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 5 - - - - - UYLTaskListViewController - UITableViewController - - IBProjectSource - ./Classes/UYLTaskListViewController.h - - - - - 0 - IBIPadFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - YES - 3 - 1181 - - diff --git a/TaskTimer/TaskTimer/en.lproj/UYLTaskListViewController_iPhone.xib b/TaskTimer/TaskTimer/en.lproj/UYLTaskListViewController_iPhone.xib deleted file mode 100644 index 0087cf4..0000000 --- a/TaskTimer/TaskTimer/en.lproj/UYLTaskListViewController_iPhone.xib +++ /dev/null @@ -1,143 +0,0 @@ - - - - 1296 - 11D50 - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 1181 - - - IBProxyObject - IBUITableView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - {{0, 20}, {320, 460}} - - - - 3 - MQA - - YES - - IBCocoaTouchFramework - YES - 1 - 0 - YES - 56 - 22 - 22 - - - - - - - view - - - - 3 - - - - dataSource - - - - 4 - - - - delegate - - - - 5 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 2 - - - - - - - UYLTaskListViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 5 - - - - - UYLTaskListViewController - UITableViewController - - IBProjectSource - ./Classes/UYLTaskListViewController.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - YES - 3 - 1181 - - diff --git a/TaskTimer/TaskTimer/en.lproj/UYLTaskViewController_iPad.xib b/TaskTimer/TaskTimer/en.lproj/UYLTaskViewController_iPad.xib deleted file mode 100644 index 0fc013c..0000000 --- a/TaskTimer/TaskTimer/en.lproj/UYLTaskViewController_iPad.xib +++ /dev/null @@ -1,331 +0,0 @@ - - - - 1296 - 11E53 - 2182 - 1138.47 - 569.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 1181 - - - IBUIButton - IBUIView - IBUITextField - IBProxyObject - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBIPadFramework - - - IBFirstResponder - IBIPadFramework - - - - 274 - - - - 290 - {{20, 95}, {728, 31}} - - - - _NS:9 - NO - YES - IBIPadFramework - 0 - - 3 - - 3 - MAA - - 2 - - - YES - 17 - - 2 - 9 - YES - IBCocoaTouchFramework - - 1 - - 1 - 14 - - - Helvetica - 14 - 16 - - - - - 290 - {{20, 176}, {728, 174}} - - - _NS:9 - - 3 - MC42NjY2NjY2NjY3AA - - 3 - IBIPadFramework - - - - -2147483355 - {{314, 462}, {140, 37}} - - - _NS:9 - NO - - Reset - - IBIPadFramework - 0 - 0 - Reset - - 3 - MQA - - - 1 - MSAxIDEAA - - - 3 - MC41AA - - - NSImage - redbutton.png - - - 2 - 2 - - - Helvetica-Bold - 18 - 16 - - - - {{0, 64}, {768, 960}} - - - - - NO - - 2 - - - NO - - IBIPadFramework - - - - - - - view - - - - 12 - - - - taskNote - - - - 69 - - - - taskCounterView - - - - 72 - - - - taskResetButton - - - - 87 - - - - delegate - - - - 68 - - - - taskResetAction - - - 7 - - 88 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 8 - - - - - - - - - - 67 - - - - - 70 - - - - - - 86 - - - - - - - UYLTaskViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UYLCounterView - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - - 88 - - - - - UYLCounterView - UIView - - IBProjectSource - ./Classes/UYLCounterView.h - - - - UYLTaskViewController - UIViewController - - taskResetAction - id - - - taskResetAction - - taskResetAction - id - - - - UYLCounterView - UITextField - UIButton - - - - taskCounterView - UYLCounterView - - - taskNote - UITextField - - - taskResetButton - UIButton - - - - IBProjectSource - ./Classes/UYLTaskViewController.h - - - - - 0 - IBIPadFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - YES - 3 - - redbutton.png - {140, 40} - - 1181 - - diff --git a/TaskTimer/TaskTimer/en.lproj/UYLTaskViewController_iPhone.xib b/TaskTimer/TaskTimer/en.lproj/UYLTaskViewController_iPhone.xib deleted file mode 100644 index d65f751..0000000 --- a/TaskTimer/TaskTimer/en.lproj/UYLTaskViewController_iPhone.xib +++ /dev/null @@ -1,334 +0,0 @@ - - - - 1296 - 11E53 - 2182 - 1138.47 - 569.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 1181 - - - IBUIButton - IBUIView - IBUITextField - IBProxyObject - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - - - 290 - {{20, 59}, {280, 60}} - - - - _NS:9 - - 3 - MC42NjY2NjY2NjY3AA - - 3 - IBCocoaTouchFramework - - - - 290 - {{20, 18}, {280, 31}} - - - - _NS:9 - NO - YES - IBCocoaTouchFramework - 0 - - 3 - Enter task description - - 3 - MAA - - 2 - - - YES - 17 - - 2 - 9 - YES - IBCocoaTouchFramework - - 1 - - 1 - 14 - - - Helvetica - 14 - 16 - - - - - -2147483355 - {{90, 140}, {140, 37}} - - - _NS:9 - NO - - Reset - - IBCocoaTouchFramework - 0 - 0 - Reset - - 3 - MQA - - - 1 - MSAxIDEAA - - - 3 - MC41AA - - - NSImage - redbutton.png - - - 2 - 2 - - - Helvetica-Bold - 18 - 16 - - - - {{0, 64}, {320, 416}} - - - - - 3 - MQA - - - - - NO - - IBCocoaTouchFramework - - - - - - - view - - - - 3 - - - - taskNote - - - - 20 - - - - taskCounterView - - - - 23 - - - - taskResetButton - - - - 39 - - - - delegate - - - - 22 - - - - taskResetAction - - - 7 - - 40 - - - - - - 0 - - - - - - 1 - - - - - - - - - - -1 - - - File's Owner - - - -2 - - - - - 17 - - - - - - 19 - - - - - 38 - - - - - - - UYLTaskViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UYLCounterView - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - - 40 - - - - - UYLCounterView - UIView - - IBProjectSource - ./Classes/UYLCounterView.h - - - - UYLTaskViewController - UIViewController - - taskResetAction - id - - - taskResetAction - - taskResetAction - id - - - - UYLCounterView - UITextField - UIButton - - - - taskCounterView - UYLCounterView - - - taskNote - UITextField - - - taskResetButton - UIButton - - - - IBProjectSource - ./Classes/UYLTaskViewController.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - YES - 3 - - redbutton.png - {140, 40} - - 1181 - - diff --git a/TaskTimer/TaskTimer/main.m b/TaskTimer/TaskTimer/main.m deleted file mode 100644 index a098b2a..0000000 --- a/TaskTimer/TaskTimer/main.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// main.m -// TaskTimer -// -// Created by Keith Harrison http://useyourloaf.com -// Copyright (c) 2012 Keith Harrison. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// Neither the name of Keith Harrison nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#import - -#import "UYLAppDelegate.h" - -int main(int argc, char *argv[]) -{ - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([UYLAppDelegate class])); - } -} diff --git a/TaskTimer/TaskTimer/redbutton.png b/TaskTimer/TaskTimer/redbutton.png deleted file mode 100644 index 5b99cd97c28a264f388e15a67e9723bfa10d3553..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2242 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 diff --git a/TaskTimer/TaskTimer/start@2x.png b/TaskTimer/TaskTimer/start@2x.png deleted file mode 100644 index 2e2bc5218486b53ea67ef7dc4eda6cbdf5478397..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2864 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 diff --git a/TaskTimer/TaskTimer/stop.png b/TaskTimer/TaskTimer/stop.png deleted file mode 100644 index 25d1c1102f34992286c860186f1b876cc41ea1a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2173 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 ZhiF@Y8|3ijF6*673}tC&QDNp2`yaCT6f*z- diff --git a/TaskTimer/TaskTimer/unchecked.png b/TaskTimer/TaskTimer/unchecked.png deleted file mode 100644 index f6f88e126a1d92060e63e0b9e807e71fe494a30e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1536 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%1|*NXY)xihVE&Nl>>S|f?5q$_l%JNFlghxL zF|jxFZvO2M5&O>km?dKN3pV!giFU6K4UXO^Ew%O-o9E=EFP)@zp1q;9VEBTyyC%o=Ipm#|1T~LTe+NBWu8+`xNWW6$ION)E3Mb@E8KJY`9br(Z z(0BMWb5`||LqAWNi@gqhuW+w(N7j$ll>z%Q&Q4L=ky})G&TduPoa|lZUAE2Qg7;Tl zcAEHH*esy+FYGsXr|a`9s!r_nV%2x<1@|u>JKa$&Q2*lAE0*(-5zErz zp8jjq?u+Lu7PzLnIpm35r_0_2#~j{WUw&+duH}Qribc^zvBrHOPX8t)vu*C!Iq`Fz z^V*g<(z9ltF1CMSw^eK5`77&IO-tP?>rx}pr)shw;V{oTtB4JZMk^+?^X!u?2n=Rs z_L&lJC1{F7=ki3p)VGyS8x9v9nZdi}`b<-|%<~Tg-?hlhE)i~hbNso2<|OBo89fa? z_f+yH9#-kTBv@2%d7Di4`J}ryzkIecxuE@6w)xD?d2aC{@7Gjcy0E_f%XhKt-xKF# zYR|7=KX90D%M9j^zt-#h-Jtzxqm$mA>dmiT3HjKp+`sbn%CA?r-mPA_wPWHh+pTT; zLp_r7(k5KAv2&ZyE`C}e?r>^N&4q&h%#~$5+f|d!T3r{;j8K2UzO-G{;BS&JmsbDvEJk8iTPJ_c|DUa$z6GK&t`kYo(f&IIS2M$z4~pV#rmcw zWX@! z_Olh7{39O8P*`z9z9|8>y;bpKhp8 z8yV>WRp=I1=9MH?=;jqGLkxkLj>|?L9+q}oPwjafLBZ?k;uzx5`S#jIUIqmo=7Z)*|EKyM zWpik>o2otkj;h1Xn#X1g2IU#EFF*C<>YvsD0XFW3^z|HE&z~{PI!uxCyrcRThvmzv{dUFZG3gy^ zb-#8vUh&{PbM{-W{}-2rtz6EmGS4X|+_qNkV`jsYmDcO{74EtH{GfT?@y@YR0cujmq_3Pe^7xo*x)Ae~4RVVg(vFbbbg8P?`o$ja>sDE+m70da^h-GPU zPye-Q_r>!S3tZFP9P-4j(`E01V-D}GFF&?J*Yd$*#iD4VSmQnsr+<@@**16VocKA< zd2P!a=~=T+7u!Fv+p4wj{FQa9rlszcb*Yi)Q#DzTaG2+vRm28HqZJd{dG^T`1O_uR z`%DSA5;R4kb9o|P>f6ev4TlSl%-~&feWs~f=J|($?^9V zwdYr`A2`gnWd`%dU+eY$ZqWX;(MfMl_2$>FgnVpP?q7L(<<~1*?^dte+A;B$?bf#a zp&rS3X%jBm*ttz;7eB2KcR01C=0d@L=E}03?W##isG9 zQ$?S0KiyMQ9zFebndgs?A7MWNfB5}~`yrX~a8g0!56>M+HOetPbFV&rp8WYub5-4nJa0`PlBg3pY5)2HCd6^**B@w}FfdWk9d zNvV1jxdlMg3=B3ERzPNMYDuC(MQ%=Bu~mhw5?F;5kPQ;nS5g2gDap1~itr6kaLzAE zRWQ*r(KAr8<5EyiuqjGOvkG!?gK7uzY?U%fN(!v>^~=l4^~#O)@{7{-4J|D#^$m>l zjf`}GDs+o0^GXscbn}XpA%?)raY-#sF3Kz@$;{7F0GXSZlwVq6tE2?72o50bOi6~@ zQ&3uz1GXh4SwA%=H8(Y{q*&ij&rlz3I8d)mO0rdPX;M~datYYoaO1!pa7s+qM-sNt z$5d^j4{{Nb3nAVIivs;`$7Q1r4@*0)r}n&#z~HU-ba4#HXncEXFIR&B55q&3n*ZT_ zlY?YjU#Q;MUi$jt{H13*R!BU!VcWRBhtu-9W9ZX$oi!6@p5G|3S*h)Ugi|s{uc8S7 z#^$yy|137NZK;}7C%toPlyQsN;-9&t(wmi%o%CD}uqUT|UX=ohYEM@`mvv4FO#sIH BxwZfR From f4ebe906e2bd94d16d671c2d5dc906ccf73eb7db Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Sat, 11 Jan 2020 20:11:22 +0000 Subject: [PATCH 43/56] Archive Stepper project --- .../Stepper.xcodeproj/project.pbxproj | 67 ++- .../Stepper/Base.lproj/UYLViewController.xib | 92 ++++ .../Stepper}/Stepper/Stepper-Info.plist | 2 +- .../Stepper}/Stepper/Stepper-Prefix.pch | 0 .../Stepper}/Stepper/UYLAppDelegate.h | 0 .../Stepper}/Stepper/UYLAppDelegate.m | 0 .../Stepper}/Stepper/UYLViewController.h | 0 .../Stepper}/Stepper/UYLViewController.m | 0 .../Stepper/en.lproj/InfoPlist.strings | 0 {Stepper => Archive/Stepper}/Stepper/main.m | 0 .../Stepper/en.lproj/UYLViewController.xib | 449 ------------------ 11 files changed, 152 insertions(+), 458 deletions(-) rename {Stepper => Archive/Stepper}/Stepper.xcodeproj/project.pbxproj (81%) create mode 100644 Archive/Stepper/Stepper/Base.lproj/UYLViewController.xib rename {Stepper => Archive/Stepper}/Stepper/Stepper-Info.plist (94%) rename {Stepper => Archive/Stepper}/Stepper/Stepper-Prefix.pch (100%) rename {Stepper => Archive/Stepper}/Stepper/UYLAppDelegate.h (100%) rename {Stepper => Archive/Stepper}/Stepper/UYLAppDelegate.m (100%) rename {Stepper => Archive/Stepper}/Stepper/UYLViewController.h (100%) rename {Stepper => Archive/Stepper}/Stepper/UYLViewController.m (100%) rename {Stepper => Archive/Stepper}/Stepper/en.lproj/InfoPlist.strings (100%) rename {Stepper => Archive/Stepper}/Stepper/main.m (100%) delete mode 100644 Stepper/Stepper/en.lproj/UYLViewController.xib diff --git a/Stepper/Stepper.xcodeproj/project.pbxproj b/Archive/Stepper/Stepper.xcodeproj/project.pbxproj similarity index 81% rename from Stepper/Stepper.xcodeproj/project.pbxproj rename to Archive/Stepper/Stepper.xcodeproj/project.pbxproj index 3056532..9e328cf 100644 --- a/Stepper/Stepper.xcodeproj/project.pbxproj +++ b/Archive/Stepper/Stepper.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 5334608F23CA627F00BE943E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UYLViewController.xib; sourceTree = ""; }; 53CA1FB714B3B08500432C8E /* Stepper.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Stepper.app; sourceTree = BUILT_PRODUCTS_DIR; }; 53CA1FBB14B3B08500432C8E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 53CA1FBD14B3B08500432C8E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -30,7 +31,6 @@ 53CA1FCB14B3B08500432C8E /* UYLAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLAppDelegate.m; sourceTree = ""; }; 53CA1FCD14B3B08500432C8E /* UYLViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UYLViewController.h; sourceTree = ""; }; 53CA1FCE14B3B08500432C8E /* UYLViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLViewController.m; sourceTree = ""; }; - 53CA1FD114B3B08500432C8E /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/UYLViewController.xib; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -124,14 +124,15 @@ 53CA1FAE14B3B08500432C8E /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0430; + LastUpgradeCheck = 1120; }; buildConfigurationList = 53CA1FB114B3B08500432C8E /* Build configuration list for PBXProject "Stepper" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = 53CA1FAC14B3B08500432C8E; productRefGroup = 53CA1FB814B3B08500432C8E /* Products */; @@ -180,7 +181,7 @@ 53CA1FD014B3B08500432C8E /* UYLViewController.xib */ = { isa = PBXVariantGroup; children = ( - 53CA1FD114B3B08500432C8E /* en */, + 5334608F23CA627F00BE943E /* Base */, ); name = UYLViewController.xib; sourceTree = ""; @@ -192,11 +193,31 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -204,10 +225,15 @@ ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; @@ -216,15 +242,38 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; @@ -238,6 +287,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Stepper/Stepper-Prefix.pch"; INFOPLIST_FILE = "Stepper/Stepper-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; @@ -250,6 +300,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Stepper/Stepper-Prefix.pch"; INFOPLIST_FILE = "Stepper/Stepper-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; diff --git a/Archive/Stepper/Stepper/Base.lproj/UYLViewController.xib b/Archive/Stepper/Stepper/Base.lproj/UYLViewController.xib new file mode 100644 index 0000000..e957a6e --- /dev/null +++ b/Archive/Stepper/Stepper/Base.lproj/UYLViewController.xib @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Stepper/Stepper/Stepper-Info.plist b/Archive/Stepper/Stepper/Stepper-Info.plist similarity index 94% rename from Stepper/Stepper/Stepper-Info.plist rename to Archive/Stepper/Stepper/Stepper-Info.plist index 82d3103..a5a6331 100644 --- a/Stepper/Stepper/Stepper-Info.plist +++ b/Archive/Stepper/Stepper/Stepper-Info.plist @@ -11,7 +11,7 @@ CFBundleIconFiles CFBundleIdentifier - com.useyourloaf.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/Stepper/Stepper/Stepper-Prefix.pch b/Archive/Stepper/Stepper/Stepper-Prefix.pch similarity index 100% rename from Stepper/Stepper/Stepper-Prefix.pch rename to Archive/Stepper/Stepper/Stepper-Prefix.pch diff --git a/Stepper/Stepper/UYLAppDelegate.h b/Archive/Stepper/Stepper/UYLAppDelegate.h similarity index 100% rename from Stepper/Stepper/UYLAppDelegate.h rename to Archive/Stepper/Stepper/UYLAppDelegate.h diff --git a/Stepper/Stepper/UYLAppDelegate.m b/Archive/Stepper/Stepper/UYLAppDelegate.m similarity index 100% rename from Stepper/Stepper/UYLAppDelegate.m rename to Archive/Stepper/Stepper/UYLAppDelegate.m diff --git a/Stepper/Stepper/UYLViewController.h b/Archive/Stepper/Stepper/UYLViewController.h similarity index 100% rename from Stepper/Stepper/UYLViewController.h rename to Archive/Stepper/Stepper/UYLViewController.h diff --git a/Stepper/Stepper/UYLViewController.m b/Archive/Stepper/Stepper/UYLViewController.m similarity index 100% rename from Stepper/Stepper/UYLViewController.m rename to Archive/Stepper/Stepper/UYLViewController.m diff --git a/Stepper/Stepper/en.lproj/InfoPlist.strings b/Archive/Stepper/Stepper/en.lproj/InfoPlist.strings similarity index 100% rename from Stepper/Stepper/en.lproj/InfoPlist.strings rename to Archive/Stepper/Stepper/en.lproj/InfoPlist.strings diff --git a/Stepper/Stepper/main.m b/Archive/Stepper/Stepper/main.m similarity index 100% rename from Stepper/Stepper/main.m rename to Archive/Stepper/Stepper/main.m diff --git a/Stepper/Stepper/en.lproj/UYLViewController.xib b/Stepper/Stepper/en.lproj/UYLViewController.xib deleted file mode 100644 index 61a93e4..0000000 --- a/Stepper/Stepper/en.lproj/UYLViewController.xib +++ /dev/null @@ -1,449 +0,0 @@ - - - - 1280 - 11C74 - 1938 - 1138.23 - 567.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 933 - - - IBUISwitch - IBUIStepper - IBUIView - IBUILabel - IBProxyObject - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - - - 292 - {{20, 20}, {280, 40}} - - - - _NS:328 - NO - YES - 7 - NO - IBCocoaTouchFramework - UIStepper - - 1 - MSAxIDAAA - - - 1 - 10 - 1 - - 2 - 24 - - - Helvetica-Bold - 24 - 16 - - - - - 292 - {{130, 68}, {60, 50}} - - - - _NS:328 - - 1 - MCAwIDAAA - - NO - YES - 7 - NO - IBCocoaTouchFramework - 000 - - 1 - MSAxIDEAA - - - 1 - 10 - 1 - - 2 - 30 - - - Helvetica-Bold - 30 - 16 - - - - - 268 - {{113, 149}, {94, 27}} - - - - _NS:992 - NO - YES - IBCocoaTouchFramework - 0 - 0 - 100 - - - - 292 - {{154, 216}, {94, 27}} - - - - _NS:606 - NO - IBCocoaTouchFramework - 0 - 0 - YES - - - - 292 - {{20, 219}, {141, 21}} - - - - _NS:328 - NO - YES - 7 - NO - IBCocoaTouchFramework - Autorepeat - - - 1 - 10 - 2 - - 1 - 17 - - - Helvetica - 17 - 16 - - - - - 292 - {{154, 277}, {94, 27}} - - - _NS:606 - NO - IBCocoaTouchFramework - 0 - 0 - YES - - - - 292 - {{20, 280}, {141, 21}} - - - - _NS:328 - NO - YES - 7 - NO - IBCocoaTouchFramework - Continuous - - - 1 - 10 - 2 - - - - - - 292 - {{154, 340}, {94, 27}} - - - _NS:606 - NO - IBCocoaTouchFramework - 0 - 0 - YES - - - - 292 - {{20, 340}, {141, 21}} - - - - _NS:328 - NO - YES - 7 - NO - IBCocoaTouchFramework - Value wraps - - - 1 - 10 - 2 - - - - - {{0, 20}, {320, 460}} - - - - - 1 - MCAwLjUwMTk2MDgxNCAxAA - - NO - - IBCocoaTouchFramework - - - - - - - view - - - - 7 - - - - counter - - - - 12 - - - - stepper - - - - 22 - - - - stepperChanged: - - - 13 - - 11 - - - - autorepeatChanged: - - - 13 - - 19 - - - - continuousChanged: - - - 13 - - 20 - - - - wrapChanged: - - - 13 - - 21 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 6 - - - - - - - - - - - - - - - - 8 - - - - - 9 - - - - - 10 - - - - - 13 - - - - - 14 - - - - - 15 - - - - - 16 - - - - - 17 - - - - - 18 - - - - - - - UYLViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 22 - - - - - UYLViewController - UIViewController - - UILabel - UIStepper - - - - counter - UILabel - - - stepper - UIStepper - - - - IBProjectSource - ./Classes/UYLViewController.h - - - - - 0 - IBCocoaTouchFramework - YES - 3 - 933 - - From 0fb9b36ace67a943973f25d75f85233dd0e47739 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Sat, 11 Jan 2020 20:19:27 +0000 Subject: [PATCH 44/56] Archive AlertView --- .../AlertView/en.lproj/UYLViewController.xib | 326 ------------------ .../AlertView.xcodeproj/project.pbxproj | 70 +++- .../AlertView}/AlertView/AlertView-Info.plist | 2 +- .../AlertView}/AlertView/AlertView-Prefix.pch | 0 .../Base.lproj/UYLViewController.xib | 89 +++++ .../AlertView}/AlertView/UYLAppDelegate.h | 0 .../AlertView}/AlertView/UYLAppDelegate.m | 0 .../AlertView}/AlertView/UYLViewController.h | 0 .../AlertView}/AlertView/UYLViewController.m | 0 .../AlertView/en.lproj/InfoPlist.strings | 0 .../AlertView}/AlertView/main.m | 0 11 files changed, 152 insertions(+), 335 deletions(-) delete mode 100644 AlertView/AlertView/en.lproj/UYLViewController.xib rename {AlertView => Archive/AlertView}/AlertView.xcodeproj/project.pbxproj (80%) rename {AlertView => Archive/AlertView}/AlertView/AlertView-Info.plist (94%) rename {AlertView => Archive/AlertView}/AlertView/AlertView-Prefix.pch (100%) create mode 100644 Archive/AlertView/AlertView/Base.lproj/UYLViewController.xib rename {AlertView => Archive/AlertView}/AlertView/UYLAppDelegate.h (100%) rename {AlertView => Archive/AlertView}/AlertView/UYLAppDelegate.m (100%) rename {AlertView => Archive/AlertView}/AlertView/UYLViewController.h (100%) rename {AlertView => Archive/AlertView}/AlertView/UYLViewController.m (100%) rename {AlertView => Archive/AlertView}/AlertView/en.lproj/InfoPlist.strings (100%) rename {AlertView => Archive/AlertView}/AlertView/main.m (100%) diff --git a/AlertView/AlertView/en.lproj/UYLViewController.xib b/AlertView/AlertView/en.lproj/UYLViewController.xib deleted file mode 100644 index 7de4aa1..0000000 --- a/AlertView/AlertView/en.lproj/UYLViewController.xib +++ /dev/null @@ -1,326 +0,0 @@ - - - - 1280 - 11C74 - 1938 - 1138.23 - 567.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 933 - - - IBUIButton - IBUIView - IBUILabel - IBProxyObject - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - - - 292 - {{20, 118}, {280, 37}} - - - _NS:225 - NO - IBCocoaTouchFramework - 0 - 0 - 1 - Default Style - - 3 - MQA - - - 1 - MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA - - - 3 - MC41AA - - - 2 - 15 - - - Helvetica-Bold - 15 - 16 - - - - - 292 - {{20, 190}, {280, 37}} - - - _NS:225 - NO - IBCocoaTouchFramework - 0 - 0 - 1 - Secure Text Input - - - 1 - MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA - - - - - - - - 292 - {{20, 262}, {280, 37}} - - - _NS:225 - NO - IBCocoaTouchFramework - 0 - 0 - 1 - Plain Text Input - - - 1 - MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA - - - - - - - - 292 - {{20, 336}, {280, 37}} - - - _NS:225 - NO - IBCocoaTouchFramework - 0 - 0 - 1 - Login and Password - - - 1 - MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA - - - - - - - - 292 - {{20, 20}, {280, 46}} - - - _NS:328 - NO - YES - 7 - NO - IBCocoaTouchFramework - UIAlertViewStyle - - 1 - MSAxIDAAA - - - 1 - 10 - 1 - - 1 - 20 - - - Helvetica - 20 - 16 - - - - {{0, 20}, {320, 460}} - - - - - 1 - MC41IDAgMC41AA - - NO - - IBCocoaTouchFramework - - - - - - - view - - - - 7 - - - - showDefaultAlertView: - - - 7 - - 13 - - - - showSecureTextAlertView: - - - 7 - - 14 - - - - showPlainTextAlertView: - - - 7 - - 15 - - - - showLoginPassAlertView: - - - 7 - - 16 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 6 - - - - - - - - - - - - 8 - - - - - 9 - - - - - 10 - - - - - 11 - - - - - 12 - - - - - - - UYLViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 16 - - - - - UYLViewController - UIViewController - - IBProjectSource - ./Classes/UYLViewController.h - - - - - 0 - IBCocoaTouchFramework - YES - 3 - 933 - - diff --git a/AlertView/AlertView.xcodeproj/project.pbxproj b/Archive/AlertView/AlertView.xcodeproj/project.pbxproj similarity index 80% rename from AlertView/AlertView.xcodeproj/project.pbxproj rename to Archive/AlertView/AlertView.xcodeproj/project.pbxproj index 3bef398..0af1f42 100644 --- a/AlertView/AlertView.xcodeproj/project.pbxproj +++ b/Archive/AlertView/AlertView.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 5334609223CA652200BE943E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UYLViewController.xib; sourceTree = ""; }; 534028B91497F89D002DB13A /* AlertView.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AlertView.app; sourceTree = BUILT_PRODUCTS_DIR; }; 534028BD1497F89D002DB13A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 534028BF1497F89D002DB13A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -30,7 +31,6 @@ 534028CD1497F89D002DB13A /* UYLAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLAppDelegate.m; sourceTree = ""; }; 534028CF1497F89D002DB13A /* UYLViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UYLViewController.h; sourceTree = ""; }; 534028D01497F89D002DB13A /* UYLViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLViewController.m; sourceTree = ""; }; - 534028D31497F89D002DB13A /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/UYLViewController.xib; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -124,14 +124,15 @@ 534028B01497F89D002DB13A /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0420; + LastUpgradeCheck = 1120; }; buildConfigurationList = 534028B31497F89D002DB13A /* Build configuration list for PBXProject "AlertView" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = 534028AE1497F89D002DB13A; productRefGroup = 534028BA1497F89D002DB13A /* Products */; @@ -180,7 +181,7 @@ 534028D21497F89D002DB13A /* UYLViewController.xib */ = { isa = PBXVariantGroup; children = ( - 534028D31497F89D002DB13A /* en */, + 5334609223CA652200BE943E /* Base */, ); name = UYLViewController.xib; sourceTree = ""; @@ -192,11 +193,31 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -204,10 +225,15 @@ ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; @@ -216,15 +242,38 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; @@ -234,9 +283,11 @@ 534028D81497F89D002DB13A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "AlertView/AlertView-Prefix.pch"; INFOPLIST_FILE = "AlertView/AlertView-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; @@ -245,9 +296,11 @@ 534028D91497F89D002DB13A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "AlertView/AlertView-Prefix.pch"; INFOPLIST_FILE = "AlertView/AlertView-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; @@ -272,6 +325,7 @@ 534028D91497F89D002DB13A /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/AlertView/AlertView/AlertView-Info.plist b/Archive/AlertView/AlertView/AlertView-Info.plist similarity index 94% rename from AlertView/AlertView/AlertView-Info.plist rename to Archive/AlertView/AlertView/AlertView-Info.plist index f5d7a12..5da589d 100644 --- a/AlertView/AlertView/AlertView-Info.plist +++ b/Archive/AlertView/AlertView/AlertView-Info.plist @@ -11,7 +11,7 @@ CFBundleIconFiles CFBundleIdentifier - com.useyourloaf.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/AlertView/AlertView/AlertView-Prefix.pch b/Archive/AlertView/AlertView/AlertView-Prefix.pch similarity index 100% rename from AlertView/AlertView/AlertView-Prefix.pch rename to Archive/AlertView/AlertView/AlertView-Prefix.pch diff --git a/Archive/AlertView/AlertView/Base.lproj/UYLViewController.xib b/Archive/AlertView/AlertView/Base.lproj/UYLViewController.xib new file mode 100644 index 0000000..154769b --- /dev/null +++ b/Archive/AlertView/AlertView/Base.lproj/UYLViewController.xib @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AlertView/AlertView/UYLAppDelegate.h b/Archive/AlertView/AlertView/UYLAppDelegate.h similarity index 100% rename from AlertView/AlertView/UYLAppDelegate.h rename to Archive/AlertView/AlertView/UYLAppDelegate.h diff --git a/AlertView/AlertView/UYLAppDelegate.m b/Archive/AlertView/AlertView/UYLAppDelegate.m similarity index 100% rename from AlertView/AlertView/UYLAppDelegate.m rename to Archive/AlertView/AlertView/UYLAppDelegate.m diff --git a/AlertView/AlertView/UYLViewController.h b/Archive/AlertView/AlertView/UYLViewController.h similarity index 100% rename from AlertView/AlertView/UYLViewController.h rename to Archive/AlertView/AlertView/UYLViewController.h diff --git a/AlertView/AlertView/UYLViewController.m b/Archive/AlertView/AlertView/UYLViewController.m similarity index 100% rename from AlertView/AlertView/UYLViewController.m rename to Archive/AlertView/AlertView/UYLViewController.m diff --git a/AlertView/AlertView/en.lproj/InfoPlist.strings b/Archive/AlertView/AlertView/en.lproj/InfoPlist.strings similarity index 100% rename from AlertView/AlertView/en.lproj/InfoPlist.strings rename to Archive/AlertView/AlertView/en.lproj/InfoPlist.strings diff --git a/AlertView/AlertView/main.m b/Archive/AlertView/AlertView/main.m similarity index 100% rename from AlertView/AlertView/main.m rename to Archive/AlertView/AlertView/main.m From ec53858b4005013a717e9620e44321596ac0221e Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Sat, 11 Jan 2020 20:24:37 +0000 Subject: [PATCH 45/56] Archive MasterSlide --- .../MasterSlide.xcodeproj/project.pbxproj | 81 +++- .../Base.lproj/UYLDetailViewController.xib | 80 ++++ .../Base.lproj/UYLMasterViewController.xib | 29 ++ .../MasterSlide/MasterSlide/MainWindow.xib | 55 +++ .../MasterSlide/MasterSlide-Info.plist | 6 +- .../MasterSlide/MasterSlide-Prefix.pch | 0 .../MasterSlide}/MasterSlide/UYLAppDelegate.h | 0 .../MasterSlide}/MasterSlide/UYLAppDelegate.m | 0 .../MasterSlide/UYLDetailViewController.h | 0 .../MasterSlide/UYLDetailViewController.m | 0 .../MasterSlide/UYLMasterViewController.h | 0 .../MasterSlide/UYLMasterViewController.m | 0 .../MasterSlide/en.lproj/InfoPlist.strings | 0 .../MasterSlide}/MasterSlide/main.m | 0 MasterSlide/MasterSlide/MainWindow.xib | 337 -------------- .../en.lproj/UYLDetailViewController.xib | 410 ------------------ .../en.lproj/UYLMasterViewController.xib | 140 ------ 17 files changed, 234 insertions(+), 904 deletions(-) rename {MasterSlide => Archive/MasterSlide}/MasterSlide.xcodeproj/project.pbxproj (81%) create mode 100644 Archive/MasterSlide/MasterSlide/Base.lproj/UYLDetailViewController.xib create mode 100644 Archive/MasterSlide/MasterSlide/Base.lproj/UYLMasterViewController.xib create mode 100644 Archive/MasterSlide/MasterSlide/MainWindow.xib rename {MasterSlide => Archive/MasterSlide}/MasterSlide/MasterSlide-Info.plist (95%) rename {MasterSlide => Archive/MasterSlide}/MasterSlide/MasterSlide-Prefix.pch (100%) rename {MasterSlide => Archive/MasterSlide}/MasterSlide/UYLAppDelegate.h (100%) rename {MasterSlide => Archive/MasterSlide}/MasterSlide/UYLAppDelegate.m (100%) rename {MasterSlide => Archive/MasterSlide}/MasterSlide/UYLDetailViewController.h (100%) rename {MasterSlide => Archive/MasterSlide}/MasterSlide/UYLDetailViewController.m (100%) rename {MasterSlide => Archive/MasterSlide}/MasterSlide/UYLMasterViewController.h (100%) rename {MasterSlide => Archive/MasterSlide}/MasterSlide/UYLMasterViewController.m (100%) rename {MasterSlide => Archive/MasterSlide}/MasterSlide/en.lproj/InfoPlist.strings (100%) rename {MasterSlide => Archive/MasterSlide}/MasterSlide/main.m (100%) delete mode 100644 MasterSlide/MasterSlide/MainWindow.xib delete mode 100644 MasterSlide/MasterSlide/en.lproj/UYLDetailViewController.xib delete mode 100644 MasterSlide/MasterSlide/en.lproj/UYLMasterViewController.xib diff --git a/MasterSlide/MasterSlide.xcodeproj/project.pbxproj b/Archive/MasterSlide/MasterSlide.xcodeproj/project.pbxproj similarity index 81% rename from MasterSlide/MasterSlide.xcodeproj/project.pbxproj rename to Archive/MasterSlide/MasterSlide.xcodeproj/project.pbxproj index 148bd98..8383db9 100644 --- a/MasterSlide/MasterSlide.xcodeproj/project.pbxproj +++ b/Archive/MasterSlide/MasterSlide.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -21,6 +21,8 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 5334609323CA65EF00BE943E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UYLMasterViewController.xib; sourceTree = ""; }; + 5334609423CA65F000BE943E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UYLDetailViewController.xib; sourceTree = ""; }; 53A7615E146C7E9600B4F8F6 /* masterslide.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = masterslide.app; sourceTree = BUILT_PRODUCTS_DIR; }; 53A76162146C7E9600B4F8F6 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 53A76164146C7E9600B4F8F6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -35,8 +37,6 @@ 53A76175146C7E9600B4F8F6 /* UYLMasterViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLMasterViewController.m; sourceTree = ""; }; 53A76177146C7E9600B4F8F6 /* UYLDetailViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UYLDetailViewController.h; sourceTree = ""; }; 53A76178146C7E9600B4F8F6 /* UYLDetailViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLDetailViewController.m; sourceTree = ""; }; - 53A7617B146C7E9700B4F8F6 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/UYLMasterViewController.xib; sourceTree = ""; }; - 53A7617E146C7E9700B4F8F6 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/UYLDetailViewController.xib; sourceTree = ""; }; 53FF8C18146F264400005E54 /* MainWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = ""; }; /* End PBXFileReference section */ @@ -151,14 +151,15 @@ 53A76155146C7E9600B4F8F6 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0420; + LastUpgradeCheck = 1120; }; - buildConfigurationList = 53A76158146C7E9600B4F8F6 /* Build configuration list for PBXProject "masterslide" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + buildConfigurationList = 53A76158146C7E9600B4F8F6 /* Build configuration list for PBXProject "MasterSlide" */; + compatibilityVersion = "Xcode 11.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = 53A76153146C7E9600B4F8F6; productRefGroup = 53A7615F146C7E9600B4F8F6 /* Products */; @@ -210,7 +211,7 @@ 53A7617A146C7E9700B4F8F6 /* UYLMasterViewController.xib */ = { isa = PBXVariantGroup; children = ( - 53A7617B146C7E9700B4F8F6 /* en */, + 5334609323CA65EF00BE943E /* Base */, ); name = UYLMasterViewController.xib; sourceTree = ""; @@ -218,7 +219,7 @@ 53A7617D146C7E9700B4F8F6 /* UYLDetailViewController.xib */ = { isa = PBXVariantGroup; children = ( - 53A7617E146C7E9700B4F8F6 /* en */, + 5334609423CA65F000BE943E /* Base */, ); name = UYLDetailViewController.xib; sourceTree = ""; @@ -230,11 +231,31 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -242,10 +263,15 @@ ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = 2; }; @@ -255,15 +281,38 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = 2; @@ -274,9 +323,11 @@ 53A76183146C7E9700B4F8F6 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "masterslide/masterslide-Prefix.pch"; INFOPLIST_FILE = "masterslide/masterslide-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; @@ -285,9 +336,11 @@ 53A76184146C7E9700B4F8F6 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "masterslide/masterslide-Prefix.pch"; INFOPLIST_FILE = "masterslide/masterslide-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; @@ -296,7 +349,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 53A76158146C7E9600B4F8F6 /* Build configuration list for PBXProject "masterslide" */ = { + 53A76158146C7E9600B4F8F6 /* Build configuration list for PBXProject "MasterSlide" */ = { isa = XCConfigurationList; buildConfigurations = ( 53A76180146C7E9700B4F8F6 /* Debug */, diff --git a/Archive/MasterSlide/MasterSlide/Base.lproj/UYLDetailViewController.xib b/Archive/MasterSlide/MasterSlide/Base.lproj/UYLDetailViewController.xib new file mode 100644 index 0000000..4f045c5 --- /dev/null +++ b/Archive/MasterSlide/MasterSlide/Base.lproj/UYLDetailViewController.xib @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Archive/MasterSlide/MasterSlide/Base.lproj/UYLMasterViewController.xib b/Archive/MasterSlide/MasterSlide/Base.lproj/UYLMasterViewController.xib new file mode 100644 index 0000000..77a8e58 --- /dev/null +++ b/Archive/MasterSlide/MasterSlide/Base.lproj/UYLMasterViewController.xib @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Archive/MasterSlide/MasterSlide/MainWindow.xib b/Archive/MasterSlide/MasterSlide/MainWindow.xib new file mode 100644 index 0000000..dc9f4e1 --- /dev/null +++ b/Archive/MasterSlide/MasterSlide/MainWindow.xib @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MasterSlide/MasterSlide/MasterSlide-Info.plist b/Archive/MasterSlide/MasterSlide/MasterSlide-Info.plist similarity index 95% rename from MasterSlide/MasterSlide/MasterSlide-Info.plist rename to Archive/MasterSlide/MasterSlide/MasterSlide-Info.plist index 410100c..7d691bc 100644 --- a/MasterSlide/MasterSlide/MasterSlide-Info.plist +++ b/Archive/MasterSlide/MasterSlide/MasterSlide-Info.plist @@ -11,7 +11,7 @@ CFBundleIconFiles CFBundleIdentifier - com.useyourloaf.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -26,6 +26,8 @@ 1.0 LSRequiresIPhoneOS + NSMainNibFile + MainWindow UIRequiredDeviceCapabilities armv7 @@ -43,7 +45,5 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - NSMainNibFile - MainWindow diff --git a/MasterSlide/MasterSlide/MasterSlide-Prefix.pch b/Archive/MasterSlide/MasterSlide/MasterSlide-Prefix.pch similarity index 100% rename from MasterSlide/MasterSlide/MasterSlide-Prefix.pch rename to Archive/MasterSlide/MasterSlide/MasterSlide-Prefix.pch diff --git a/MasterSlide/MasterSlide/UYLAppDelegate.h b/Archive/MasterSlide/MasterSlide/UYLAppDelegate.h similarity index 100% rename from MasterSlide/MasterSlide/UYLAppDelegate.h rename to Archive/MasterSlide/MasterSlide/UYLAppDelegate.h diff --git a/MasterSlide/MasterSlide/UYLAppDelegate.m b/Archive/MasterSlide/MasterSlide/UYLAppDelegate.m similarity index 100% rename from MasterSlide/MasterSlide/UYLAppDelegate.m rename to Archive/MasterSlide/MasterSlide/UYLAppDelegate.m diff --git a/MasterSlide/MasterSlide/UYLDetailViewController.h b/Archive/MasterSlide/MasterSlide/UYLDetailViewController.h similarity index 100% rename from MasterSlide/MasterSlide/UYLDetailViewController.h rename to Archive/MasterSlide/MasterSlide/UYLDetailViewController.h diff --git a/MasterSlide/MasterSlide/UYLDetailViewController.m b/Archive/MasterSlide/MasterSlide/UYLDetailViewController.m similarity index 100% rename from MasterSlide/MasterSlide/UYLDetailViewController.m rename to Archive/MasterSlide/MasterSlide/UYLDetailViewController.m diff --git a/MasterSlide/MasterSlide/UYLMasterViewController.h b/Archive/MasterSlide/MasterSlide/UYLMasterViewController.h similarity index 100% rename from MasterSlide/MasterSlide/UYLMasterViewController.h rename to Archive/MasterSlide/MasterSlide/UYLMasterViewController.h diff --git a/MasterSlide/MasterSlide/UYLMasterViewController.m b/Archive/MasterSlide/MasterSlide/UYLMasterViewController.m similarity index 100% rename from MasterSlide/MasterSlide/UYLMasterViewController.m rename to Archive/MasterSlide/MasterSlide/UYLMasterViewController.m diff --git a/MasterSlide/MasterSlide/en.lproj/InfoPlist.strings b/Archive/MasterSlide/MasterSlide/en.lproj/InfoPlist.strings similarity index 100% rename from MasterSlide/MasterSlide/en.lproj/InfoPlist.strings rename to Archive/MasterSlide/MasterSlide/en.lproj/InfoPlist.strings diff --git a/MasterSlide/MasterSlide/main.m b/Archive/MasterSlide/MasterSlide/main.m similarity index 100% rename from MasterSlide/MasterSlide/main.m rename to Archive/MasterSlide/MasterSlide/main.m diff --git a/MasterSlide/MasterSlide/MainWindow.xib b/MasterSlide/MasterSlide/MainWindow.xib deleted file mode 100644 index de12c87..0000000 --- a/MasterSlide/MasterSlide/MainWindow.xib +++ /dev/null @@ -1,337 +0,0 @@ - - - - 1280 - 11C74 - 1938 - 1138.23 - 567.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 933 - - - IBProxyObject - IBUINavigationController - IBUIViewController - IBUICustomObject - IBUISplitViewController - IBUIWindow - IBUITableViewController - IBUINavigationItem - IBUINavigationBar - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBIPadFramework - - - IBFirstResponder - IBIPadFramework - - - IBIPadFramework - - - - 1316 - - {768, 1024} - - - - - 1 - MSAxIDEAA - - NO - NO - - 2 - - IBIPadFramework - YES - - - - - 2 - - - 3 - 3 - - IBIPadFramework - YES - - - - 2 - - - 1 - 1 - - IBIPadFramework - NO - - - 256 - {0, 0} - _NS:839 - YES - YES - IBIPadFramework - - - - Master - - Master - IBIPadFramework - - - UYLMasterViewController - - 2 - - - 1 - 1 - - IBIPadFramework - NO - NO - - - - - Detail - - - UYLDetailViewController - - 1 - 1 - - IBIPadFramework - NO - - - - - - - - delegate - - - - 5 - - - - window - - - - 14 - - - - splitViewController - - - - 13 - - - - detailViewController - - - - 35 - - - - - - 0 - - - - - - 2 - - - - - -1 - - - File's Owner - - - 4 - - - App Delegate - - - -2 - - - - - 6 - - - - - - - - - 15 - - - - - - 8 - - - - - - - - - 10 - - - - - - - - 11 - - - - - 9 - - - - - - - UIApplication - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UYLMasterViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UYLDetailViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UYLAppDelegate - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 35 - - - - - UYLAppDelegate - UIResponder - - UISplitViewController - UIWindow - - - - splitViewController - UISplitViewController - - - window - UIWindow - - - - IBProjectSource - ./Classes/UYLAppDelegate.h - - - - UYLDetailViewController - UIViewController - - detailDescriptionLabel - UILabel - - - detailDescriptionLabel - - detailDescriptionLabel - UILabel - - - - IBProjectSource - ./Classes/UYLDetailViewController.h - - - - UYLMasterViewController - UITableViewController - - detailViewController - UYLDetailViewController - - - detailViewController - - detailViewController - UYLDetailViewController - - - - IBProjectSource - ./Classes/UYLMasterViewController.h - - - - - 0 - IBIPadFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - 3 - 933 - - diff --git a/MasterSlide/MasterSlide/en.lproj/UYLDetailViewController.xib b/MasterSlide/MasterSlide/en.lproj/UYLDetailViewController.xib deleted file mode 100644 index 0e8a58b..0000000 --- a/MasterSlide/MasterSlide/en.lproj/UYLDetailViewController.xib +++ /dev/null @@ -1,410 +0,0 @@ - - - - 1280 - 11C74 - 1938 - 1138.23 - 567.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 933 - - - IBUISwipeGestureRecognizer - IBUITapGestureRecognizer - IBUIToolbar - IBUIView - IBUILabel - IBProxyObject - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBIPadFramework - - - IBFirstResponder - IBIPadFramework - - - - 274 - - - - 290 - {768, 44} - - - - _NS:372 - NO - NO - IBIPadFramework - - - - - 292 - {{363, 11}, {42, 21}} - - - - _NS:345 - NO - YES - 7 - NO - IBIPadFramework - Detail - - 1 - MCAwIDAAA - - - 1 - 10 - - 1 - 17 - - - Helvetica - 17 - 16 - - - - - 274 - - - - 298 - {{20, 470}, {728, 21}} - - - - - 3 - MQA - - YES - - NO - IBIPadFramework - Select an item - - - 1 - 10 - 1 - - 1 - 4 - - - Helvetica - 14 - 16 - - - - {{0, 44}, {768, 960}} - - - _NS:212 - - 3 - MQA - - 2 - - - - IBIPadFramework - - - {{0, 20}, {768, 1004}} - - - - - YES - - - 2 - - - IBUISplitViewDetailSimulatedSizeMetrics - - YES - - - - - - {768, 1024} - {703, 768} - - - IBIPadFramework - Detail - IBUISplitViewController - - IBUISplitViewControllerContentSizeLocation - IBUISplitViewControllerContentSizeLocationDetail - - - IBIPadFramework - - - - 2 - - - - - - - - view - - - - 12 - - - - toolbar - - - - 72 - - - - detailTitle - - - - 74 - - - - detailDescriptionLabel - - - - 66 - - - - handleTap: - - - - 97 - - - - handleSwipeRight: - - - - 98 - - - - handleSwipeLeft: - - - - 102 - - - - gestureRecognizers - - - NSArray - YES - - 111 - - - - gestureRecognizers - - - NSArray - YES - - 112 - - - - gestureRecognizers - - - NSArray - YES - - 113 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 8 - - - - - - - - - - 67 - - - - - - 73 - - - - - 110 - - - - - - - - 45 - - - - - 79 - - - - - 81 - - - - - 75 - - - - - - - UYLDetailViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 113 - - - - - UYLDetailViewController - UIViewController - - UISwipeGestureRecognizer - UISwipeGestureRecognizer - UITapGestureRecognizer - - - - handleSwipeLeft: - UISwipeGestureRecognizer - - - handleSwipeRight: - UISwipeGestureRecognizer - - - handleTap: - UITapGestureRecognizer - - - - UILabel - UILabel - UIToolbar - - - - detailDescriptionLabel - UILabel - - - detailTitle - UILabel - - - toolbar - UIToolbar - - - - IBProjectSource - ./Classes/UYLDetailViewController.h - - - - - 0 - IBIPadFramework - YES - 3 - 933 - - diff --git a/MasterSlide/MasterSlide/en.lproj/UYLMasterViewController.xib b/MasterSlide/MasterSlide/en.lproj/UYLMasterViewController.xib deleted file mode 100644 index aac88df..0000000 --- a/MasterSlide/MasterSlide/en.lproj/UYLMasterViewController.xib +++ /dev/null @@ -1,140 +0,0 @@ - - - - 1280 - 11C74 - 1938 - 1138.23 - 567.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 933 - - - IBProxyObject - IBUITableView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBIPadFramework - - - IBFirstResponder - IBIPadFramework - - - - 274 - {320, 852} - - - - _NS:408 - - 3 - MQA - - YES - IBIPadFramework - YES - 1 - 0 - YES - 44 - 22 - 22 - - - - - - - view - - - - 11 - - - - delegate - - - - 10 - - - - dataSource - - - - 9 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 7 - - - - - - - UYLMasterViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 11 - - - - - UYLMasterViewController - UIViewController - - IBProjectSource - ./Classes/UYLMasterViewController.h - - - - - 0 - IBIPadFramework - YES - 3 - 933 - - From 42545b49221e9cde74294092b58a5ef226ba0372 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Sat, 11 Jan 2020 20:47:15 +0000 Subject: [PATCH 46/56] Archive SyncMe --- .../SyncMe}/SyncMe.xcodeproj/project.pbxproj | 73 ++++++++++++++++--- .../SyncMe/Base.lproj}/UYLViewController.xib | 0 .../SyncMe}/SyncMe/SyncMe-Info.plist | 2 +- .../SyncMe}/SyncMe/SyncMe-Prefix.pch | 0 .../SyncMe}/SyncMe/SyncMe.entitlements | 0 .../SyncMe}/SyncMe/UYLAppDelegate.h | 0 .../SyncMe}/SyncMe/UYLAppDelegate.m | 0 .../SyncMe}/SyncMe/UYLViewController.h | 0 .../SyncMe}/SyncMe/UYLViewController.m | 0 .../SyncMe}/SyncMe/en.lproj/InfoPlist.strings | 0 {SyncMe => Archive/SyncMe}/SyncMe/main.m | 0 11 files changed, 64 insertions(+), 11 deletions(-) rename {SyncMe => Archive/SyncMe}/SyncMe.xcodeproj/project.pbxproj (80%) rename {SyncMe/SyncMe/en.lproj => Archive/SyncMe/SyncMe/Base.lproj}/UYLViewController.xib (100%) rename {SyncMe => Archive/SyncMe}/SyncMe/SyncMe-Info.plist (94%) rename {SyncMe => Archive/SyncMe}/SyncMe/SyncMe-Prefix.pch (100%) rename {SyncMe => Archive/SyncMe}/SyncMe/SyncMe.entitlements (100%) rename {SyncMe => Archive/SyncMe}/SyncMe/UYLAppDelegate.h (100%) rename {SyncMe => Archive/SyncMe}/SyncMe/UYLAppDelegate.m (100%) rename {SyncMe => Archive/SyncMe}/SyncMe/UYLViewController.h (100%) rename {SyncMe => Archive/SyncMe}/SyncMe/UYLViewController.m (100%) rename {SyncMe => Archive/SyncMe}/SyncMe/en.lproj/InfoPlist.strings (100%) rename {SyncMe => Archive/SyncMe}/SyncMe/main.m (100%) diff --git a/SyncMe/SyncMe.xcodeproj/project.pbxproj b/Archive/SyncMe/SyncMe.xcodeproj/project.pbxproj similarity index 80% rename from SyncMe/SyncMe.xcodeproj/project.pbxproj rename to Archive/SyncMe/SyncMe.xcodeproj/project.pbxproj index b823bf1..df3f587 100644 --- a/SyncMe/SyncMe.xcodeproj/project.pbxproj +++ b/Archive/SyncMe/SyncMe.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -18,6 +18,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 5334609523CA6B2500BE943E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UYLViewController.xib; sourceTree = ""; }; 53DA6A481454A1C300368AB3 /* SyncMe.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SyncMe.app; sourceTree = BUILT_PRODUCTS_DIR; }; 53DA6A4C1454A1C300368AB3 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 53DA6A4E1454A1C300368AB3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -30,7 +31,6 @@ 53DA6A5C1454A1C300368AB3 /* UYLAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLAppDelegate.m; sourceTree = ""; }; 53DA6A5E1454A1C300368AB3 /* UYLViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UYLViewController.h; sourceTree = ""; }; 53DA6A5F1454A1C400368AB3 /* UYLViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UYLViewController.m; sourceTree = ""; }; - 53DA6A621454A1C400368AB3 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/UYLViewController.xib; sourceTree = ""; }; 53DA6A771454B39300368AB3 /* SyncMe.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = SyncMe.entitlements; sourceTree = ""; }; /* End PBXFileReference section */ @@ -126,14 +126,15 @@ 53DA6A3F1454A1C300368AB3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0420; + LastUpgradeCheck = 1120; }; buildConfigurationList = 53DA6A421454A1C300368AB3 /* Build configuration list for PBXProject "SyncMe" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + compatibilityVersion = "Xcode 11.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = 53DA6A3D1454A1C300368AB3; productRefGroup = 53DA6A491454A1C300368AB3 /* Products */; @@ -182,7 +183,7 @@ 53DA6A611454A1C400368AB3 /* UYLViewController.xib */ = { isa = PBXVariantGroup; children = ( - 53DA6A621454A1C400368AB3 /* en */, + 5334609523CA6B2500BE943E /* Base */, ); name = UYLViewController.xib; sourceTree = ""; @@ -194,11 +195,31 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -206,10 +227,15 @@ ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; @@ -218,15 +244,38 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; COPY_PHASE_STRIP = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; @@ -236,10 +285,12 @@ 53DA6A671454A1C400368AB3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = YES; CODE_SIGN_ENTITLEMENTS = SyncMe/SyncMe.entitlements; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "SyncMe/SyncMe-Prefix.pch"; INFOPLIST_FILE = "SyncMe/SyncMe-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; @@ -248,10 +299,12 @@ 53DA6A681454A1C400368AB3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = YES; CODE_SIGN_ENTITLEMENTS = SyncMe/SyncMe.entitlements; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "SyncMe/SyncMe-Prefix.pch"; INFOPLIST_FILE = "SyncMe/SyncMe-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; diff --git a/SyncMe/SyncMe/en.lproj/UYLViewController.xib b/Archive/SyncMe/SyncMe/Base.lproj/UYLViewController.xib similarity index 100% rename from SyncMe/SyncMe/en.lproj/UYLViewController.xib rename to Archive/SyncMe/SyncMe/Base.lproj/UYLViewController.xib diff --git a/SyncMe/SyncMe/SyncMe-Info.plist b/Archive/SyncMe/SyncMe/SyncMe-Info.plist similarity index 94% rename from SyncMe/SyncMe/SyncMe-Info.plist rename to Archive/SyncMe/SyncMe/SyncMe-Info.plist index f5d7a12..5da589d 100644 --- a/SyncMe/SyncMe/SyncMe-Info.plist +++ b/Archive/SyncMe/SyncMe/SyncMe-Info.plist @@ -11,7 +11,7 @@ CFBundleIconFiles CFBundleIdentifier - com.useyourloaf.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/SyncMe/SyncMe/SyncMe-Prefix.pch b/Archive/SyncMe/SyncMe/SyncMe-Prefix.pch similarity index 100% rename from SyncMe/SyncMe/SyncMe-Prefix.pch rename to Archive/SyncMe/SyncMe/SyncMe-Prefix.pch diff --git a/SyncMe/SyncMe/SyncMe.entitlements b/Archive/SyncMe/SyncMe/SyncMe.entitlements similarity index 100% rename from SyncMe/SyncMe/SyncMe.entitlements rename to Archive/SyncMe/SyncMe/SyncMe.entitlements diff --git a/SyncMe/SyncMe/UYLAppDelegate.h b/Archive/SyncMe/SyncMe/UYLAppDelegate.h similarity index 100% rename from SyncMe/SyncMe/UYLAppDelegate.h rename to Archive/SyncMe/SyncMe/UYLAppDelegate.h diff --git a/SyncMe/SyncMe/UYLAppDelegate.m b/Archive/SyncMe/SyncMe/UYLAppDelegate.m similarity index 100% rename from SyncMe/SyncMe/UYLAppDelegate.m rename to Archive/SyncMe/SyncMe/UYLAppDelegate.m diff --git a/SyncMe/SyncMe/UYLViewController.h b/Archive/SyncMe/SyncMe/UYLViewController.h similarity index 100% rename from SyncMe/SyncMe/UYLViewController.h rename to Archive/SyncMe/SyncMe/UYLViewController.h diff --git a/SyncMe/SyncMe/UYLViewController.m b/Archive/SyncMe/SyncMe/UYLViewController.m similarity index 100% rename from SyncMe/SyncMe/UYLViewController.m rename to Archive/SyncMe/SyncMe/UYLViewController.m diff --git a/SyncMe/SyncMe/en.lproj/InfoPlist.strings b/Archive/SyncMe/SyncMe/en.lproj/InfoPlist.strings similarity index 100% rename from SyncMe/SyncMe/en.lproj/InfoPlist.strings rename to Archive/SyncMe/SyncMe/en.lproj/InfoPlist.strings diff --git a/SyncMe/SyncMe/main.m b/Archive/SyncMe/SyncMe/main.m similarity index 100% rename from SyncMe/SyncMe/main.m rename to Archive/SyncMe/SyncMe/main.m From b2b756fddacbff93cb7b9ec0c9bc5f5f35224f7a Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Sat, 11 Jan 2020 21:05:45 +0000 Subject: [PATCH 47/56] Archive AirPrinter --- AirPrinter/AirPrinter/WebViewController.xib | 177 --------- AirPrinter/AirPrinter/en.lproj/MainWindow.xib | 331 ----------------- .../en.lproj/RootViewController.xib | 170 --------- .../iPad/en.lproj/MainWindow-iPad.xib | 349 ------------------ .../AirPrinter.xcodeproj/project.pbxproj | 44 ++- .../AirPrinter/AirPrinter-Info.plist | 2 +- .../AirPrinter/AirPrinter-Prefix.pch | 0 .../AirPrinter/AirPrinterAppDelegate.h | 0 .../AirPrinter/AirPrinterAppDelegate.m | 0 .../AirPrinter/Base.lproj/MainWindow.xib | 44 +++ .../Base.lproj/RootViewController.xib | 37 ++ .../AirPrinter/RootViewController.h | 0 .../AirPrinter/RootViewController.m | 0 .../AirPrinter/UYLGenericPrintPageRenderer.h | 0 .../AirPrinter/UYLGenericPrintPageRenderer.m | 0 .../AirPrinter/WebViewController.h | 0 .../AirPrinter/WebViewController.m | 0 .../AirPrinter/WebViewController.xib | 28 ++ .../AirPrinter/en.lproj/InfoPlist.strings | 0 .../iPad/Base.lproj/MainWindow-iPad.xib | 48 +++ .../AirPrinter}/AirPrinter/main.m | 0 21 files changed, 187 insertions(+), 1043 deletions(-) delete mode 100644 AirPrinter/AirPrinter/WebViewController.xib delete mode 100644 AirPrinter/AirPrinter/en.lproj/MainWindow.xib delete mode 100644 AirPrinter/AirPrinter/en.lproj/RootViewController.xib delete mode 100644 AirPrinter/AirPrinter/iPad/en.lproj/MainWindow-iPad.xib rename {AirPrinter => Archive/AirPrinter}/AirPrinter.xcodeproj/project.pbxproj (90%) rename {AirPrinter => Archive/AirPrinter}/AirPrinter/AirPrinter-Info.plist (94%) rename {AirPrinter => Archive/AirPrinter}/AirPrinter/AirPrinter-Prefix.pch (100%) rename {AirPrinter => Archive/AirPrinter}/AirPrinter/AirPrinterAppDelegate.h (100%) rename {AirPrinter => Archive/AirPrinter}/AirPrinter/AirPrinterAppDelegate.m (100%) create mode 100644 Archive/AirPrinter/AirPrinter/Base.lproj/MainWindow.xib create mode 100644 Archive/AirPrinter/AirPrinter/Base.lproj/RootViewController.xib rename {AirPrinter => Archive/AirPrinter}/AirPrinter/RootViewController.h (100%) rename {AirPrinter => Archive/AirPrinter}/AirPrinter/RootViewController.m (100%) rename {AirPrinter => Archive/AirPrinter}/AirPrinter/UYLGenericPrintPageRenderer.h (100%) rename {AirPrinter => Archive/AirPrinter}/AirPrinter/UYLGenericPrintPageRenderer.m (100%) rename {AirPrinter => Archive/AirPrinter}/AirPrinter/WebViewController.h (100%) rename {AirPrinter => Archive/AirPrinter}/AirPrinter/WebViewController.m (100%) create mode 100644 Archive/AirPrinter/AirPrinter/WebViewController.xib rename {AirPrinter => Archive/AirPrinter}/AirPrinter/en.lproj/InfoPlist.strings (100%) create mode 100644 Archive/AirPrinter/AirPrinter/iPad/Base.lproj/MainWindow-iPad.xib rename {AirPrinter => Archive/AirPrinter}/AirPrinter/main.m (100%) diff --git a/AirPrinter/AirPrinter/WebViewController.xib b/AirPrinter/AirPrinter/WebViewController.xib deleted file mode 100644 index b28d757..0000000 --- a/AirPrinter/AirPrinter/WebViewController.xib +++ /dev/null @@ -1,177 +0,0 @@ - - - - 1056 - 11A511 - 1617 - 1138 - 566.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 534 - - - YES - IBProxyObject - IBUIWebView - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 292 - {240, 128} - - - _NS:667 - - 1 - MSAxIDEAA - - IBCocoaTouchFramework - YES - - - - - YES - - - webView - - - - 5 - - - - delegate - - - - 6 - - - - view - - - - 7 - - - - - YES - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 4 - - - Web View - - - - - YES - - YES - -1.CustomClassName - -1.IBPluginDependency - -2.CustomClassName - -2.IBPluginDependency - 4.IBPluginDependency - - - YES - WebViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - - - - YES - - - - - 7 - - - - YES - - WebViewController - UIViewController - - webView - UIWebView - - - webView - - webView - UIWebView - - - - IBProjectSource - ./Classes/WebViewController.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - 3 - 534 - - diff --git a/AirPrinter/AirPrinter/en.lproj/MainWindow.xib b/AirPrinter/AirPrinter/en.lproj/MainWindow.xib deleted file mode 100644 index ba438d9..0000000 --- a/AirPrinter/AirPrinter/en.lproj/MainWindow.xib +++ /dev/null @@ -1,331 +0,0 @@ - - - - 1024 - 11A511 - 1617 - 1138 - 566.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 534 - - - YES - IBProxyObject - IBUINavigationController - IBUIViewController - IBUICustomObject - IBUIBarButtonItem - IBUIWindow - IBUINavigationBar - IBUINavigationItem - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - IBCocoaTouchFramework - - - - 1316 - - {320, 480} - - - - 1 - MSAxIDEAA - - NO - NO - - IBCocoaTouchFramework - YES - - - - - 1 - 1 - - IBCocoaTouchFramework - NO - - - 256 - {0, 0} - NO - YES - YES - IBCocoaTouchFramework - - - YES - - - - AirPrinter - - Home - IBCocoaTouchFramework - 1 - - IBCocoaTouchFramework - - - RootViewController - - - 1 - 1 - - IBCocoaTouchFramework - NO - - - - - - - YES - - - delegate - - - - 4 - - - - window - - - - 5 - - - - navigationController - - - - 15 - - - - - YES - - 0 - - - - - - 2 - - - YES - - - - - -1 - - - File's Owner - - - 3 - - - - - -2 - - - - - 9 - - - YES - - - - - - - 11 - - - - - 13 - - - YES - - - - - - 14 - - - YES - - - - - - 17 - - - - - - - YES - - YES - -1.CustomClassName - -1.IBPluginDependency - -2.CustomClassName - -2.IBPluginDependency - 11.IBPluginDependency - 13.CustomClassName - 13.IBPluginDependency - 14.IBPluginDependency - 17.IBPluginDependency - 2.IBAttributePlaceholdersKey - 2.IBPluginDependency - 3.CustomClassName - 3.IBPluginDependency - 9.IBPluginDependency - - - YES - UIApplication - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - RootViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - YES - - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - AirPrinterAppDelegate - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - - - - YES - - - - - 17 - - - - YES - - AirPrinterAppDelegate - NSObject - - YES - - YES - navigationController - window - - - YES - UINavigationController - UIWindow - - - - YES - - YES - navigationController - window - - - YES - - navigationController - UINavigationController - - - window - UIWindow - - - - - IBProjectSource - ./Classes/AirPrinterAppDelegate.h - - - - RootViewController - UIViewController - - IBProjectSource - ./Classes/RootViewController.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - 3 - 534 - - diff --git a/AirPrinter/AirPrinter/en.lproj/RootViewController.xib b/AirPrinter/AirPrinter/en.lproj/RootViewController.xib deleted file mode 100644 index 6768cbf..0000000 --- a/AirPrinter/AirPrinter/en.lproj/RootViewController.xib +++ /dev/null @@ -1,170 +0,0 @@ - - - - 784 - 11A511 - 1617 - 1138 - 566.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 534 - - - IBProxyObject - IBUIView - IBUITextField - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 292 - - - - 290 - {{20, 71}, {280, 31}} - - - - _NS:294 - NO - YES - IBCocoaTouchFramework - 0 - http://apple.com - 3 - Enter a web site URL - - 3 - MAA - - 2 - - - YES - 17 - - 1 - 3 - 1 - YES - IBCocoaTouchFramework - - 1 - - - {320, 460} - - - - _NS:180 - - 1 - MC41IDAgMC41AA - - IBCocoaTouchFramework - - - - - - - view - - - - 10 - - - - delegate - - - - 11 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 6 - - - - - - - - 8 - - - - - - - RootViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 11 - - - - - RootViewController - UIViewController - - IBProjectSource - ./Classes/RootViewController.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - YES - 3 - 534 - - diff --git a/AirPrinter/AirPrinter/iPad/en.lproj/MainWindow-iPad.xib b/AirPrinter/AirPrinter/iPad/en.lproj/MainWindow-iPad.xib deleted file mode 100644 index c56e8f8..0000000 --- a/AirPrinter/AirPrinter/iPad/en.lproj/MainWindow-iPad.xib +++ /dev/null @@ -1,349 +0,0 @@ - - - - 1056 - 11A511 - 1617 - 1138 - 566.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 534 - - - YES - IBProxyObject - IBUINavigationController - IBUIViewController - IBUICustomObject - IBUIBarButtonItem - IBUIWindow - IBUINavigationBar - IBUINavigationItem - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - - - YES - - IBFilesOwner - IBIPadFramework - - - IBFirstResponder - IBIPadFramework - - - IBIPadFramework - - - - 1316 - - {768, 1024} - - - - - 1 - MSAxIDEAA - - NO - NO - - 2 - - IBIPadFramework - YES - - - - - 1 - 1 - - IBIPadFramework - NO - - - 256 - {0, 0} - NO - YES - YES - IBIPadFramework - - - YES - - - - AirPrinter - - Home - IBIPadFramework - 1 - - IBIPadFramework - - - RootViewController - - - 1 - 1 - - IBIPadFramework - NO - - - - - - - YES - - - delegate - - - - 4 - - - - window - - - - 5 - - - - navigationController - - - - 15 - - - - - YES - - 0 - - - - - - 2 - - - YES - - - - - -1 - - - File's Owner - - - 3 - - - - - -2 - - - - - 9 - - - YES - - - - - - - 11 - - - - - 13 - - - YES - - - - - - 14 - - - YES - - - - - - 17 - - - - - - - YES - - YES - -1.CustomClassName - -1.IBPluginDependency - -2.CustomClassName - -2.IBPluginDependency - 11.IBPluginDependency - 13.CustomClassName - 13.IBLastUsedUIStatusBarStylesToTargetRuntimesMap - 13.IBPluginDependency - 14.IBPluginDependency - 17.IBPluginDependency - 2.IBAttributePlaceholdersKey - 2.IBLastUsedUIStatusBarStylesToTargetRuntimesMap - 2.IBPluginDependency - 3.CustomClassName - 3.IBPluginDependency - 9.IBLastUsedUIStatusBarStylesToTargetRuntimesMap - 9.IBPluginDependency - - - YES - UIApplication - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - RootViewController - - IBCocoaTouchFramework - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - YES - - - - - IBCocoaTouchFramework - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - AirPrinterAppDelegate - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - IBCocoaTouchFramework - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - - - - YES - - - - - 17 - - - - YES - - AirPrinterAppDelegate - NSObject - - YES - - YES - navigationController - window - - - YES - UINavigationController - UIWindow - - - - YES - - YES - navigationController - window - - - YES - - navigationController - UINavigationController - - - window - UIWindow - - - - - IBProjectSource - ./Classes/AirPrinterAppDelegate.h - - - - RootViewController - UIViewController - - IBProjectSource - ./Classes/RootViewController.h - - - - - 0 - IBIPadFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - 3 - 534 - - diff --git a/AirPrinter/AirPrinter.xcodeproj/project.pbxproj b/Archive/AirPrinter/AirPrinter.xcodeproj/project.pbxproj similarity index 90% rename from AirPrinter/AirPrinter.xcodeproj/project.pbxproj rename to Archive/AirPrinter/AirPrinter.xcodeproj/project.pbxproj index 687d0f6..d1e10dd 100644 --- a/AirPrinter/AirPrinter.xcodeproj/project.pbxproj +++ b/Archive/AirPrinter/AirPrinter.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -29,6 +29,9 @@ 5310096E13E73E49008FC50D /* WebViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WebViewController.xib; sourceTree = ""; }; 5310097613E74913008FC50D /* UYLGenericPrintPageRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UYLGenericPrintPageRenderer.h; sourceTree = ""; }; 5310097713E74913008FC50D /* UYLGenericPrintPageRenderer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UYLGenericPrintPageRenderer.m; sourceTree = ""; }; + 5334609623CA6FC800BE943E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainWindow.xib; sourceTree = ""; }; + 5334609723CA6FC900BE943E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/RootViewController.xib; sourceTree = ""; }; + 5334609823CA6FC900BE943E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "iPad/Base.lproj/MainWindow-iPad.xib"; sourceTree = ""; }; 5336C32213E46620007FB510 /* AirPrinter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AirPrinter.app; sourceTree = BUILT_PRODUCTS_DIR; }; 5336C32613E46620007FB510 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 5336C32813E46620007FB510 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -39,11 +42,8 @@ 5336C33413E46620007FB510 /* AirPrinter-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "AirPrinter-Prefix.pch"; sourceTree = ""; }; 5336C33513E46620007FB510 /* AirPrinterAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AirPrinterAppDelegate.h; sourceTree = ""; }; 5336C33613E46620007FB510 /* AirPrinterAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AirPrinterAppDelegate.m; sourceTree = ""; }; - 5336C33913E46620007FB510 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainWindow.xib; sourceTree = ""; }; 5336C33B13E46620007FB510 /* RootViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RootViewController.h; sourceTree = ""; }; 5336C33C13E46620007FB510 /* RootViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RootViewController.m; sourceTree = ""; }; - 5336C33F13E46620007FB510 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/RootViewController.xib; sourceTree = ""; }; - 5336C34813E4663E007FB510 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = "iPad/en.lproj/MainWindow-iPad.xib"; sourceTree = ""; }; 53B8321B14069CB300E052A4 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -186,12 +186,16 @@ /* Begin PBXProject section */ 5336C31913E46620007FB510 /* Project object */ = { isa = PBXProject; + attributes = { + LastUpgradeCheck = 1120; + }; buildConfigurationList = 5336C31C13E46620007FB510 /* Build configuration list for PBXProject "AirPrinter" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + compatibilityVersion = "Xcode 11.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = 5336C31713E46620007FB510; productRefGroup = 5336C32313E46620007FB510 /* Products */; @@ -245,7 +249,7 @@ 5336C33813E46620007FB510 /* MainWindow.xib */ = { isa = PBXVariantGroup; children = ( - 5336C33913E46620007FB510 /* en */, + 5334609623CA6FC800BE943E /* Base */, ); name = MainWindow.xib; sourceTree = ""; @@ -253,7 +257,7 @@ 5336C33E13E46620007FB510 /* RootViewController.xib */ = { isa = PBXVariantGroup; children = ( - 5336C33F13E46620007FB510 /* en */, + 5334609723CA6FC900BE943E /* Base */, ); name = RootViewController.xib; sourceTree = ""; @@ -261,7 +265,7 @@ 5336C34713E4663E007FB510 /* MainWindow-iPad.xib */ = { isa = PBXVariantGroup; children = ( - 5336C34813E4663E007FB510 /* en */, + 5334609823CA6FC900BE943E /* Base */, ); name = "MainWindow-iPad.xib"; sourceTree = ""; @@ -273,9 +277,10 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; @@ -288,7 +293,8 @@ GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = "-DUYL_DEBUG"; SDKROOT = iphoneos; }; @@ -298,7 +304,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -306,7 +312,7 @@ GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; @@ -316,10 +322,14 @@ 5336C34413E46620007FB510 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = YES; + DEVELOPMENT_TEAM = LCC2J94N44; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "AirPrinter/AirPrinter-Prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; INFOPLIST_FILE = "AirPrinter/AirPrinter-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = app; @@ -329,10 +339,14 @@ 5336C34513E46620007FB510 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = YES; + DEVELOPMENT_TEAM = LCC2J94N44; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "AirPrinter/AirPrinter-Prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; INFOPLIST_FILE = "AirPrinter/AirPrinter-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.useyourloaf.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = app; diff --git a/AirPrinter/AirPrinter/AirPrinter-Info.plist b/Archive/AirPrinter/AirPrinter/AirPrinter-Info.plist similarity index 94% rename from AirPrinter/AirPrinter/AirPrinter-Info.plist rename to Archive/AirPrinter/AirPrinter/AirPrinter-Info.plist index 3070946..cd79178 100644 --- a/AirPrinter/AirPrinter/AirPrinter-Info.plist +++ b/Archive/AirPrinter/AirPrinter/AirPrinter-Info.plist @@ -11,7 +11,7 @@ CFBundleIconFile CFBundleIdentifier - com.useyourloaf.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/AirPrinter/AirPrinter/AirPrinter-Prefix.pch b/Archive/AirPrinter/AirPrinter/AirPrinter-Prefix.pch similarity index 100% rename from AirPrinter/AirPrinter/AirPrinter-Prefix.pch rename to Archive/AirPrinter/AirPrinter/AirPrinter-Prefix.pch diff --git a/AirPrinter/AirPrinter/AirPrinterAppDelegate.h b/Archive/AirPrinter/AirPrinter/AirPrinterAppDelegate.h similarity index 100% rename from AirPrinter/AirPrinter/AirPrinterAppDelegate.h rename to Archive/AirPrinter/AirPrinter/AirPrinterAppDelegate.h diff --git a/AirPrinter/AirPrinter/AirPrinterAppDelegate.m b/Archive/AirPrinter/AirPrinter/AirPrinterAppDelegate.m similarity index 100% rename from AirPrinter/AirPrinter/AirPrinterAppDelegate.m rename to Archive/AirPrinter/AirPrinter/AirPrinterAppDelegate.m diff --git a/Archive/AirPrinter/AirPrinter/Base.lproj/MainWindow.xib b/Archive/AirPrinter/AirPrinter/Base.lproj/MainWindow.xib new file mode 100644 index 0000000..a6f7cfc --- /dev/null +++ b/Archive/AirPrinter/AirPrinter/Base.lproj/MainWindow.xib @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Archive/AirPrinter/AirPrinter/Base.lproj/RootViewController.xib b/Archive/AirPrinter/AirPrinter/Base.lproj/RootViewController.xib new file mode 100644 index 0000000..ea17a5e --- /dev/null +++ b/Archive/AirPrinter/AirPrinter/Base.lproj/RootViewController.xib @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AirPrinter/AirPrinter/RootViewController.h b/Archive/AirPrinter/AirPrinter/RootViewController.h similarity index 100% rename from AirPrinter/AirPrinter/RootViewController.h rename to Archive/AirPrinter/AirPrinter/RootViewController.h diff --git a/AirPrinter/AirPrinter/RootViewController.m b/Archive/AirPrinter/AirPrinter/RootViewController.m similarity index 100% rename from AirPrinter/AirPrinter/RootViewController.m rename to Archive/AirPrinter/AirPrinter/RootViewController.m diff --git a/AirPrinter/AirPrinter/UYLGenericPrintPageRenderer.h b/Archive/AirPrinter/AirPrinter/UYLGenericPrintPageRenderer.h similarity index 100% rename from AirPrinter/AirPrinter/UYLGenericPrintPageRenderer.h rename to Archive/AirPrinter/AirPrinter/UYLGenericPrintPageRenderer.h diff --git a/AirPrinter/AirPrinter/UYLGenericPrintPageRenderer.m b/Archive/AirPrinter/AirPrinter/UYLGenericPrintPageRenderer.m similarity index 100% rename from AirPrinter/AirPrinter/UYLGenericPrintPageRenderer.m rename to Archive/AirPrinter/AirPrinter/UYLGenericPrintPageRenderer.m diff --git a/AirPrinter/AirPrinter/WebViewController.h b/Archive/AirPrinter/AirPrinter/WebViewController.h similarity index 100% rename from AirPrinter/AirPrinter/WebViewController.h rename to Archive/AirPrinter/AirPrinter/WebViewController.h diff --git a/AirPrinter/AirPrinter/WebViewController.m b/Archive/AirPrinter/AirPrinter/WebViewController.m similarity index 100% rename from AirPrinter/AirPrinter/WebViewController.m rename to Archive/AirPrinter/AirPrinter/WebViewController.m diff --git a/Archive/AirPrinter/AirPrinter/WebViewController.xib b/Archive/AirPrinter/AirPrinter/WebViewController.xib new file mode 100644 index 0000000..58e917e --- /dev/null +++ b/Archive/AirPrinter/AirPrinter/WebViewController.xib @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AirPrinter/AirPrinter/en.lproj/InfoPlist.strings b/Archive/AirPrinter/AirPrinter/en.lproj/InfoPlist.strings similarity index 100% rename from AirPrinter/AirPrinter/en.lproj/InfoPlist.strings rename to Archive/AirPrinter/AirPrinter/en.lproj/InfoPlist.strings diff --git a/Archive/AirPrinter/AirPrinter/iPad/Base.lproj/MainWindow-iPad.xib b/Archive/AirPrinter/AirPrinter/iPad/Base.lproj/MainWindow-iPad.xib new file mode 100644 index 0000000..52816fd --- /dev/null +++ b/Archive/AirPrinter/AirPrinter/iPad/Base.lproj/MainWindow-iPad.xib @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AirPrinter/AirPrinter/main.m b/Archive/AirPrinter/AirPrinter/main.m similarity index 100% rename from AirPrinter/AirPrinter/main.m rename to Archive/AirPrinter/AirPrinter/main.m From a8308cf1ce3b3b6798311b840dfe1ec6a1888792 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Sun, 12 Jan 2020 21:05:45 +0000 Subject: [PATCH 48/56] Archive TCNibLoad --- .../TCNibLoad}/Classes/NewViewController.h | 0 .../TCNibLoad}/Classes/NewViewController.m | 0 .../TCNibLoad}/Classes/OldViewController.h | 0 .../TCNibLoad}/Classes/OldViewController.m | 0 .../TCNibLoad/Classes/OldViewController.xib | 28 + .../TCNibLoad}/Classes/TCNibLoadAppDelegate.h | 0 .../TCNibLoad}/Classes/TCNibLoadAppDelegate.m | 0 Archive/TCNibLoad/LabelCell.xib | 50 ++ Archive/TCNibLoad/MainWindow.xib | 49 ++ .../TCNibLoad}/TCNibLoad-Info.plist | 2 +- .../TCNibLoad.xcodeproj/project.pbxproj | 89 ++- .../TCNibLoad}/TCNibLoad_Prefix.pch | 0 {TCNibLoad => Archive/TCNibLoad}/main.m | 0 TCNibLoad/Classes/OldViewController.xib | 173 ----- TCNibLoad/LabelCell.xib | 445 ------------- TCNibLoad/MainWindow.xib | 614 ------------------ 16 files changed, 202 insertions(+), 1248 deletions(-) rename {TCNibLoad => Archive/TCNibLoad}/Classes/NewViewController.h (100%) rename {TCNibLoad => Archive/TCNibLoad}/Classes/NewViewController.m (100%) rename {TCNibLoad => Archive/TCNibLoad}/Classes/OldViewController.h (100%) rename {TCNibLoad => Archive/TCNibLoad}/Classes/OldViewController.m (100%) create mode 100644 Archive/TCNibLoad/Classes/OldViewController.xib rename {TCNibLoad => Archive/TCNibLoad}/Classes/TCNibLoadAppDelegate.h (100%) rename {TCNibLoad => Archive/TCNibLoad}/Classes/TCNibLoadAppDelegate.m (100%) create mode 100644 Archive/TCNibLoad/LabelCell.xib create mode 100644 Archive/TCNibLoad/MainWindow.xib rename {TCNibLoad => Archive/TCNibLoad}/TCNibLoad-Info.plist (92%) rename {TCNibLoad => Archive/TCNibLoad}/TCNibLoad.xcodeproj/project.pbxproj (80%) rename {TCNibLoad => Archive/TCNibLoad}/TCNibLoad_Prefix.pch (100%) rename {TCNibLoad => Archive/TCNibLoad}/main.m (100%) delete mode 100644 TCNibLoad/Classes/OldViewController.xib delete mode 100644 TCNibLoad/LabelCell.xib delete mode 100644 TCNibLoad/MainWindow.xib diff --git a/TCNibLoad/Classes/NewViewController.h b/Archive/TCNibLoad/Classes/NewViewController.h similarity index 100% rename from TCNibLoad/Classes/NewViewController.h rename to Archive/TCNibLoad/Classes/NewViewController.h diff --git a/TCNibLoad/Classes/NewViewController.m b/Archive/TCNibLoad/Classes/NewViewController.m similarity index 100% rename from TCNibLoad/Classes/NewViewController.m rename to Archive/TCNibLoad/Classes/NewViewController.m diff --git a/TCNibLoad/Classes/OldViewController.h b/Archive/TCNibLoad/Classes/OldViewController.h similarity index 100% rename from TCNibLoad/Classes/OldViewController.h rename to Archive/TCNibLoad/Classes/OldViewController.h diff --git a/TCNibLoad/Classes/OldViewController.m b/Archive/TCNibLoad/Classes/OldViewController.m similarity index 100% rename from TCNibLoad/Classes/OldViewController.m rename to Archive/TCNibLoad/Classes/OldViewController.m diff --git a/Archive/TCNibLoad/Classes/OldViewController.xib b/Archive/TCNibLoad/Classes/OldViewController.xib new file mode 100644 index 0000000..331aaf2 --- /dev/null +++ b/Archive/TCNibLoad/Classes/OldViewController.xib @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TCNibLoad/Classes/TCNibLoadAppDelegate.h b/Archive/TCNibLoad/Classes/TCNibLoadAppDelegate.h similarity index 100% rename from TCNibLoad/Classes/TCNibLoadAppDelegate.h rename to Archive/TCNibLoad/Classes/TCNibLoadAppDelegate.h diff --git a/TCNibLoad/Classes/TCNibLoadAppDelegate.m b/Archive/TCNibLoad/Classes/TCNibLoadAppDelegate.m similarity index 100% rename from TCNibLoad/Classes/TCNibLoadAppDelegate.m rename to Archive/TCNibLoad/Classes/TCNibLoadAppDelegate.m diff --git a/Archive/TCNibLoad/LabelCell.xib b/Archive/TCNibLoad/LabelCell.xib new file mode 100644 index 0000000..3b87b28 --- /dev/null +++ b/Archive/TCNibLoad/LabelCell.xib @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Archive/TCNibLoad/MainWindow.xib b/Archive/TCNibLoad/MainWindow.xib new file mode 100644 index 0000000..36be6bd --- /dev/null +++ b/Archive/TCNibLoad/MainWindow.xib @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TCNibLoad/TCNibLoad-Info.plist b/Archive/TCNibLoad/TCNibLoad-Info.plist similarity index 92% rename from TCNibLoad/TCNibLoad-Info.plist rename to Archive/TCNibLoad/TCNibLoad-Info.plist index 3289444..276e6f6 100644 --- a/TCNibLoad/TCNibLoad-Info.plist +++ b/Archive/TCNibLoad/TCNibLoad-Info.plist @@ -11,7 +11,7 @@ CFBundleIconFile CFBundleIdentifier - com.yourcompany.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/TCNibLoad/TCNibLoad.xcodeproj/project.pbxproj b/Archive/TCNibLoad/TCNibLoad.xcodeproj/project.pbxproj similarity index 80% rename from TCNibLoad/TCNibLoad.xcodeproj/project.pbxproj rename to Archive/TCNibLoad/TCNibLoad.xcodeproj/project.pbxproj index e814942..f00f8fe 100644 --- a/TCNibLoad/TCNibLoad.xcodeproj/project.pbxproj +++ b/Archive/TCNibLoad/TCNibLoad.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 45; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -140,15 +140,16 @@ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; + attributes = { + LastUpgradeCheck = 1120; + }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "TCNibLoad" */; - compatibilityVersion = "Xcode 3.1"; - developmentRegion = English; + compatibilityVersion = "Xcode 11.0"; + developmentRegion = en; hasScannedForEncodings = 1; knownRegions = ( - English, - Japanese, - French, - German, + Base, + en, ); mainGroup = 29B97314FDCFA39411CA2CEA /* TCNibLoad */; projectDirPath = ""; @@ -191,16 +192,22 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Don't Code Sign"; + CLANG_ENABLE_OBJC_WEAK = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; + DEVELOPMENT_TEAM = LCC2J94N44; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = TCNibLoad_Prefix.pch; INFOPLIST_FILE = "TCNibLoad-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 3.1.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.TCNibLoad; PRODUCT_NAME = TCNibLoad; "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Debug; }; @@ -208,14 +215,20 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Don't Code Sign"; + CLANG_ENABLE_OBJC_WEAK = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = YES; + DEVELOPMENT_TEAM = LCC2J94N44; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = TCNibLoad_Prefix.pch; INFOPLIST_FILE = "TCNibLoad-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 3.1.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.TCNibLoad; PRODUCT_NAME = TCNibLoad; "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; VALIDATE_PRODUCT = YES; }; name = Release; @@ -223,12 +236,36 @@ C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = c99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - PREBINDING = NO; + ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; @@ -236,13 +273,35 @@ C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = c99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; - PREBINDING = NO; SDKROOT = iphoneos; }; name = Release; diff --git a/TCNibLoad/TCNibLoad_Prefix.pch b/Archive/TCNibLoad/TCNibLoad_Prefix.pch similarity index 100% rename from TCNibLoad/TCNibLoad_Prefix.pch rename to Archive/TCNibLoad/TCNibLoad_Prefix.pch diff --git a/TCNibLoad/main.m b/Archive/TCNibLoad/main.m similarity index 100% rename from TCNibLoad/main.m rename to Archive/TCNibLoad/main.m diff --git a/TCNibLoad/Classes/OldViewController.xib b/TCNibLoad/Classes/OldViewController.xib deleted file mode 100644 index feaf2e1..0000000 --- a/TCNibLoad/Classes/OldViewController.xib +++ /dev/null @@ -1,173 +0,0 @@ - - - - 784 - 10B500 - 732 - 1038.2 - 437.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 62 - - - YES - - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - YES - - - - YES - - IBFilesOwner - - - IBFirstResponder - - - - 274 - {320, 460} - - - 3 - MQA - - NO - YES - NO - - NO - 1 - 0 - YES - 44 - 22 - 22 - - - - - YES - - - view - - - - 5 - - - - dataSource - - - - 6 - - - - delegate - - - - 7 - - - - - YES - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 4 - - - - - - - YES - - YES - -1.CustomClassName - -2.CustomClassName - 4.IBEditorWindowLastContentRect - 4.IBPluginDependency - - - YES - OldViewController - UIResponder - {{329, 504}, {320, 480}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - YES - - - - - YES - - - YES - - - - 7 - - - - YES - - OldViewController - UIViewController - - IBProjectSource - OldViewController.h - - - - - 0 - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - - 3 - 3.1 - - diff --git a/TCNibLoad/LabelCell.xib b/TCNibLoad/LabelCell.xib deleted file mode 100644 index 7ad96df..0000000 --- a/TCNibLoad/LabelCell.xib +++ /dev/null @@ -1,445 +0,0 @@ - - - - 1056 - 10J567 - 823 - 1038.35 - 462.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 132 - - - - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 292 - - - - 256 - - - - 292 - {{20, 9}, {135, 21}} - - NO - YES - 7 - 101 - NO - IBCocoaTouchFramework - Label 1 - - 1 - MCAwIDAAA - - - 3 - MQA - - 1 - 10 - - - - 289 - {{163, 3}, {137, 21}} - - NO - YES - 7 - 102 - NO - IBCocoaTouchFramework - Label 2 - - Helvetica-Oblique - 12 - 16 - - - 1 - MCAwIDEAA - - - 1 - 10 - - - - 289 - {{163, 20}, {137, 16}} - - NO - YES - 7 - 103 - NO - IBCocoaTouchFramework - Label 3 - - Helvetica-Bold - 12 - 16 - - - 1 - MSAwIDAAA - - - 1 - 10 - - - {320, 44} - - - 3 - MCAwAA - - NO - YES - 4 - YES - IBCocoaTouchFramework - - - {320, 44} - - - 1 - MSAxIDEAA - - IBCocoaTouchFramework - 1 - - - LabelCell - - - - - - - labelCell - - - - 12 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 3 - - - - - - - - - - 4 - - - - - 10 - - - - - 11 - - - - - - - OldViewController - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - P4AAAL+AAABDIwAAwgAAAA - - {{125, 502}, {320, 44}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - P4AAAL+AAABBoAAAwgAAAA - - - - - - - 12 - - - - - OldViewController - UITableViewController - - labelCell - UITableViewCell - - - labelCell - - labelCell - UITableViewCell - - - - IBProjectSource - Classes/OldViewController.h - - - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSError.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFileManager.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueObserving.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyedArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObject.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSRunLoop.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSThread.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURL.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLConnection.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIAccessibility.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UINibLoading.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIResponder.h - - - - UILabel - UIView - - IBFrameworkSource - UIKit.framework/Headers/UILabel.h - - - - UIResponder - NSObject - - - - UISearchBar - UIView - - IBFrameworkSource - UIKit.framework/Headers/UISearchBar.h - - - - UISearchDisplayController - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UISearchDisplayController.h - - - - UITableViewCell - UIView - - IBFrameworkSource - UIKit.framework/Headers/UITableViewCell.h - - - - UITableViewController - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UITableViewController.h - - - - UIView - - IBFrameworkSource - UIKit.framework/Headers/UIPrintFormatter.h - - - - UIView - - IBFrameworkSource - UIKit.framework/Headers/UITextField.h - - - - UIView - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIView.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UINavigationController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UIPopoverController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UISplitViewController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UITabBarController.h - - - - UIViewController - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIViewController.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - YES - TCNibLoad.xcodeproj - 3 - 132 - - diff --git a/TCNibLoad/MainWindow.xib b/TCNibLoad/MainWindow.xib deleted file mode 100644 index d8f4852..0000000 --- a/TCNibLoad/MainWindow.xib +++ /dev/null @@ -1,614 +0,0 @@ - - - - 1056 - 10J567 - 823 - 1038.35 - 462.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 132 - - - YES - - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - YES - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - IBCocoaTouchFramework - - - - 1316 - - {320, 480} - - 1 - MSAxIDEAA - - NO - NO - - IBCocoaTouchFramework - YES - - - - - - 1 - - IBCocoaTouchFramework - NO - - - NSBundle - IBCocoaTouchFramework - - - - OldViewController - - 1 - - IBCocoaTouchFramework - NO - - - YES - - - - UINib - IBCocoaTouchFramework - - - - OldViewController - - 1 - - IBCocoaTouchFramework - NO - - - - - 266 - {{129, 330}, {163, 49}} - - 3 - MCAwAA - - NO - IBCocoaTouchFramework - - - - - - YES - - - window - - - - 9 - - - - delegate - - - - 99 - - - - tabBarController - - - - 113 - - - - - YES - - 0 - - - - - - 2 - - - YES - - - - - -1 - - - File's Owner - - - 3 - - - - - 106 - - - YES - - - - - - - - 107 - - - - - 108 - - - YES - - - - NSBundle - - - 109 - - - YES - - - - UINib - - - 110 - - - - - 111 - - - - - -2 - - - - - - - YES - - YES - -1.CustomClassName - -2.CustomClassName - 106.IBEditorWindowLastContentRect - 106.IBPluginDependency - 107.IBPluginDependency - 108.CustomClassName - 108.IBPluginDependency - 109.CustomClassName - 109.IBPluginDependency - 110.IBPluginDependency - 111.IBPluginDependency - 2.IBAttributePlaceholdersKey - 2.IBEditorWindowLastContentRect - 2.IBPluginDependency - 3.CustomClassName - 3.IBPluginDependency - - - YES - UIApplication - UIResponder - {{1125, 676}, {320, 480}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - OldViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - NewViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - YES - - - YES - - - {{229, 373}, {320, 480}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - TCNibLoadAppDelegate - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - YES - - - - - YES - - - YES - - - - 124 - - - - YES - - NewViewController - OldViewController - - IBProjectSource - Classes/NewViewController.h - - - - OldViewController - UITableViewController - - labelCell - UITableViewCell - - - labelCell - - labelCell - UITableViewCell - - - - IBProjectSource - Classes/OldViewController.h - - - - TCNibLoadAppDelegate - NSObject - - YES - - YES - tabBarController - window - - - YES - UITabBarController - UIWindow - - - - YES - - YES - tabBarController - window - - - YES - - tabBarController - UITabBarController - - - window - UIWindow - - - - - IBProjectSource - Classes/TCNibLoadAppDelegate.h - - - - UIWindow - UIView - - IBUserSource - - - - - - YES - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSError.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFileManager.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueObserving.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyedArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObject.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSRunLoop.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSThread.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURL.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLConnection.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIAccessibility.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UINibLoading.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIResponder.h - - - - UIApplication - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIApplication.h - - - - UIBarItem - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIBarItem.h - - - - UIResponder - NSObject - - - - UISearchBar - UIView - - IBFrameworkSource - UIKit.framework/Headers/UISearchBar.h - - - - UISearchDisplayController - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UISearchDisplayController.h - - - - UITabBar - UIView - - IBFrameworkSource - UIKit.framework/Headers/UITabBar.h - - - - UITabBarController - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UITabBarController.h - - - - UITabBarItem - UIBarItem - - IBFrameworkSource - UIKit.framework/Headers/UITabBarItem.h - - - - UITableViewCell - UIView - - IBFrameworkSource - UIKit.framework/Headers/UITableViewCell.h - - - - UITableViewController - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UITableViewController.h - - - - UIView - - IBFrameworkSource - UIKit.framework/Headers/UIPrintFormatter.h - - - - UIView - - IBFrameworkSource - UIKit.framework/Headers/UITextField.h - - - - UIView - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIView.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UINavigationController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UIPopoverController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UISplitViewController.h - - - - UIViewController - - - - UIViewController - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIViewController.h - - - - UIWindow - UIView - - IBFrameworkSource - UIKit.framework/Headers/UIWindow.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - TCNibLoad.xcodeproj - 3 - 132 - - From 2f3c6e217fff8dc154b4b3f17670516643dabf44 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Mon, 13 Jan 2020 10:06:13 +0000 Subject: [PATCH 49/56] Archive RemindMe --- .../RemindMe}/Base.lproj/Localizable.strings | 0 .../RemindMe}/Base.lproj/Main.storyboard | 34 +++++++++---------- .../RemindMe}/Classes/AppDelegate.h | 0 .../RemindMe}/Classes/AppDelegate.m | 0 .../Classes/RemindMeViewController.h | 0 .../Classes/RemindMeViewController.m | 0 {RemindMe => Archive/RemindMe}/Info.plist | 0 .../RemindMe}/LaunchScreen.storyboard | 0 {RemindMe => Archive/RemindMe}/README.md | 4 +-- .../RemindMe.xcodeproj/project.pbxproj | 29 +++++++++++----- .../AppIcon.appiconset/Contents.json | 0 .../RemindMe/Images.xcassets/Contents.json | 0 {RemindMe => Archive/RemindMe}/main.m | 0 13 files changed, 40 insertions(+), 27 deletions(-) rename {RemindMe => Archive/RemindMe}/Base.lproj/Localizable.strings (100%) rename {RemindMe => Archive/RemindMe}/Base.lproj/Main.storyboard (76%) rename {RemindMe => Archive/RemindMe}/Classes/AppDelegate.h (100%) rename {RemindMe => Archive/RemindMe}/Classes/AppDelegate.m (100%) rename {RemindMe => Archive/RemindMe}/Classes/RemindMeViewController.h (100%) rename {RemindMe => Archive/RemindMe}/Classes/RemindMeViewController.m (100%) rename {RemindMe => Archive/RemindMe}/Info.plist (100%) rename {RemindMe => Archive/RemindMe}/LaunchScreen.storyboard (100%) rename {RemindMe => Archive/RemindMe}/README.md (61%) rename {RemindMe => Archive/RemindMe}/RemindMe.xcodeproj/project.pbxproj (93%) rename {RemindMe => Archive/RemindMe}/RemindMe/Images.xcassets/AppIcon.appiconset/Contents.json (100%) rename {RemindMe => Archive/RemindMe}/RemindMe/Images.xcassets/Contents.json (100%) rename {RemindMe => Archive/RemindMe}/main.m (100%) diff --git a/RemindMe/Base.lproj/Localizable.strings b/Archive/RemindMe/Base.lproj/Localizable.strings similarity index 100% rename from RemindMe/Base.lproj/Localizable.strings rename to Archive/RemindMe/Base.lproj/Localizable.strings diff --git a/RemindMe/Base.lproj/Main.storyboard b/Archive/RemindMe/Base.lproj/Main.storyboard similarity index 76% rename from RemindMe/Base.lproj/Main.storyboard rename to Archive/RemindMe/Base.lproj/Main.storyboard index 9994924..d10e6fb 100644 --- a/RemindMe/Base.lproj/Main.storyboard +++ b/Archive/RemindMe/Base.lproj/Main.storyboard @@ -1,9 +1,9 @@ - - + + + - - + @@ -19,24 +19,25 @@ - - + + + - diff --git a/RemindMe/Classes/AppDelegate.h b/Archive/RemindMe/Classes/AppDelegate.h similarity index 100% rename from RemindMe/Classes/AppDelegate.h rename to Archive/RemindMe/Classes/AppDelegate.h diff --git a/RemindMe/Classes/AppDelegate.m b/Archive/RemindMe/Classes/AppDelegate.m similarity index 100% rename from RemindMe/Classes/AppDelegate.m rename to Archive/RemindMe/Classes/AppDelegate.m diff --git a/RemindMe/Classes/RemindMeViewController.h b/Archive/RemindMe/Classes/RemindMeViewController.h similarity index 100% rename from RemindMe/Classes/RemindMeViewController.h rename to Archive/RemindMe/Classes/RemindMeViewController.h diff --git a/RemindMe/Classes/RemindMeViewController.m b/Archive/RemindMe/Classes/RemindMeViewController.m similarity index 100% rename from RemindMe/Classes/RemindMeViewController.m rename to Archive/RemindMe/Classes/RemindMeViewController.m diff --git a/RemindMe/Info.plist b/Archive/RemindMe/Info.plist similarity index 100% rename from RemindMe/Info.plist rename to Archive/RemindMe/Info.plist diff --git a/RemindMe/LaunchScreen.storyboard b/Archive/RemindMe/LaunchScreen.storyboard similarity index 100% rename from RemindMe/LaunchScreen.storyboard rename to Archive/RemindMe/LaunchScreen.storyboard diff --git a/RemindMe/README.md b/Archive/RemindMe/README.md similarity index 61% rename from RemindMe/README.md rename to Archive/RemindMe/README.md index 4292e86..fe0054d 100644 --- a/RemindMe/README.md +++ b/Archive/RemindMe/README.md @@ -8,5 +8,5 @@ The RemindMe App is a demonstration on how to schedule local notifications using The original posts were written for iOS 4 a long time ago: -+ [Repeating an iOS local notification](http://useyourloaf.com/blog/repeating-an-ios-local-notification/) -+ [Add Local Notification with iOS 4](http://useyourloaf.com/blog/adding-local-notifications-with-ios-4/) ++ [Repeating an iOS local notification](https://useyourloaf.com/blog/repeating-an-ios-local-notification/) ++ [Add Local Notification with iOS 4](https://useyourloaf.com/blog/adding-local-notifications-with-ios-4/) diff --git a/RemindMe/RemindMe.xcodeproj/project.pbxproj b/Archive/RemindMe/RemindMe.xcodeproj/project.pbxproj similarity index 93% rename from RemindMe/RemindMe.xcodeproj/project.pbxproj rename to Archive/RemindMe/RemindMe.xcodeproj/project.pbxproj index 745043b..f12800f 100755 --- a/RemindMe/RemindMe.xcodeproj/project.pbxproj +++ b/Archive/RemindMe/RemindMe.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 47; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -119,7 +119,7 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0820; + LastUpgradeCheck = 1120; ORGANIZATIONNAME = "Keith Harrison"; TargetAttributes = { 1D6058900D05DD3D006BFB54 = { @@ -129,15 +129,12 @@ }; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "RemindMe" */; - compatibilityVersion = "Xcode 6.3"; - developmentRegion = English; + compatibilityVersion = "Xcode 11.0"; + developmentRegion = en; hasScannedForEncodings = 1; knownRegions = ( - English, - Japanese, - French, - German, Base, + en, ); mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; projectDirPath = ""; @@ -238,12 +235,20 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -270,12 +275,20 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; diff --git a/RemindMe/RemindMe/Images.xcassets/AppIcon.appiconset/Contents.json b/Archive/RemindMe/RemindMe/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from RemindMe/RemindMe/Images.xcassets/AppIcon.appiconset/Contents.json rename to Archive/RemindMe/RemindMe/Images.xcassets/AppIcon.appiconset/Contents.json diff --git a/RemindMe/RemindMe/Images.xcassets/Contents.json b/Archive/RemindMe/RemindMe/Images.xcassets/Contents.json similarity index 100% rename from RemindMe/RemindMe/Images.xcassets/Contents.json rename to Archive/RemindMe/RemindMe/Images.xcassets/Contents.json diff --git a/RemindMe/main.m b/Archive/RemindMe/main.m similarity index 100% rename from RemindMe/main.m rename to Archive/RemindMe/main.m From dc642091dd6c9ea8497797ae6ebeed7ee8848d4e Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Mon, 24 Feb 2020 16:10:04 +0000 Subject: [PATCH 50/56] Update to add support for dark mode - requires iOS 13 --- .../DynamicWebKit.xcodeproj/project.pbxproj | 42 ++++++++++++---- .../DynamicWebKit/Base.lproj/Main.storyboard | 19 ++++---- DynamicWebKit/DynamicWebKit/HTML/001-dark.png | Bin 0 -> 38737 bytes .../DynamicWebKit/HTML/001-dark@2x.png | Bin 0 -> 40763 bytes DynamicWebKit/DynamicWebKit/HTML/001.png | Bin 0 -> 28730 bytes DynamicWebKit/DynamicWebKit/HTML/001@2x.png | Bin 0 -> 41062 bytes DynamicWebKit/DynamicWebKit/HTML/default.html | 21 ++++++++ .../DynamicWebKit/HTML/stylesheet.css | 40 ++++++++++++++++ ...ontroler.swift => WebViewController.swift} | 45 +++++++----------- DynamicWebKit/DynamicWebKit/readme.html | 16 ------- DynamicWebKit/DynamicWebKit/stylesheet.css | 18 ------- DynamicWebKit/README.md | 7 ++- 12 files changed, 127 insertions(+), 81 deletions(-) create mode 100644 DynamicWebKit/DynamicWebKit/HTML/001-dark.png create mode 100644 DynamicWebKit/DynamicWebKit/HTML/001-dark@2x.png create mode 100644 DynamicWebKit/DynamicWebKit/HTML/001.png create mode 100644 DynamicWebKit/DynamicWebKit/HTML/001@2x.png create mode 100644 DynamicWebKit/DynamicWebKit/HTML/default.html create mode 100644 DynamicWebKit/DynamicWebKit/HTML/stylesheet.css rename DynamicWebKit/DynamicWebKit/{HTMLViewControler.swift => WebViewController.swift} (65%) delete mode 100644 DynamicWebKit/DynamicWebKit/readme.html delete mode 100644 DynamicWebKit/DynamicWebKit/stylesheet.css diff --git a/DynamicWebKit/DynamicWebKit.xcodeproj/project.pbxproj b/DynamicWebKit/DynamicWebKit.xcodeproj/project.pbxproj index f0255cc..995fc45 100644 --- a/DynamicWebKit/DynamicWebKit.xcodeproj/project.pbxproj +++ b/DynamicWebKit/DynamicWebKit.xcodeproj/project.pbxproj @@ -8,25 +8,33 @@ /* Begin PBXBuildFile section */ 53A2B53B1F94DBE500095FAD /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53A2B53A1F94DBE500095FAD /* AppDelegate.swift */; }; - 53A2B53D1F94DBE500095FAD /* HTMLViewControler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53A2B53C1F94DBE500095FAD /* HTMLViewControler.swift */; }; + 53A2B53D1F94DBE500095FAD /* WebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53A2B53C1F94DBE500095FAD /* WebViewController.swift */; }; 53A2B5401F94DBE500095FAD /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 53A2B53E1F94DBE500095FAD /* Main.storyboard */; }; 53A2B5421F94DBE500095FAD /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 53A2B5411F94DBE500095FAD /* Assets.xcassets */; }; 53A2B5451F94DBE500095FAD /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 53A2B5431F94DBE500095FAD /* LaunchScreen.storyboard */; }; - 53A2B54D1F94DC9700095FAD /* readme.html in Resources */ = {isa = PBXBuildFile; fileRef = 53A2B54C1F94DC9700095FAD /* readme.html */; }; + 53A2B54D1F94DC9700095FAD /* default.html in Resources */ = {isa = PBXBuildFile; fileRef = 53A2B54C1F94DC9700095FAD /* default.html */; }; 53A2B54F1F94DD8200095FAD /* stylesheet.css in Resources */ = {isa = PBXBuildFile; fileRef = 53A2B54E1F94DD8200095FAD /* stylesheet.css */; }; + 53E34E032403D85700EE575E /* 001-dark.png in Resources */ = {isa = PBXBuildFile; fileRef = 53E34E022403D67600EE575E /* 001-dark.png */; }; + 53E34E042403D85A00EE575E /* 001-dark@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53E34DFF2403D67600EE575E /* 001-dark@2x.png */; }; + 53E34E052403D85E00EE575E /* 001.png in Resources */ = {isa = PBXBuildFile; fileRef = 53E34E012403D67600EE575E /* 001.png */; }; + 53E34E062403D86100EE575E /* 001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 53E34E002403D67600EE575E /* 001@2x.png */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 53A2B5371F94DBE500095FAD /* DynamicWebKit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DynamicWebKit.app; sourceTree = BUILT_PRODUCTS_DIR; }; 53A2B53A1F94DBE500095FAD /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 53A2B53C1F94DBE500095FAD /* HTMLViewControler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTMLViewControler.swift; sourceTree = ""; }; + 53A2B53C1F94DBE500095FAD /* WebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewController.swift; sourceTree = ""; }; 53A2B53F1F94DBE500095FAD /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 53A2B5411F94DBE500095FAD /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 53A2B5441F94DBE500095FAD /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 53A2B5461F94DBE500095FAD /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 53A2B54C1F94DC9700095FAD /* readme.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = readme.html; sourceTree = ""; }; + 53A2B54C1F94DC9700095FAD /* default.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = default.html; sourceTree = ""; }; 53A2B54E1F94DD8200095FAD /* stylesheet.css */ = {isa = PBXFileReference; lastKnownFileType = text.css; path = stylesheet.css; sourceTree = ""; }; 53A2B5501F94F14800095FAD /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 53E34DFF2403D67600EE575E /* 001-dark@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "001-dark@2x.png"; sourceTree = ""; }; + 53E34E002403D67600EE575E /* 001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "001@2x.png"; sourceTree = ""; }; + 53E34E012403D67600EE575E /* 001.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = 001.png; sourceTree = ""; }; + 53E34E022403D67600EE575E /* 001-dark.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "001-dark.png"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -61,9 +69,8 @@ isa = PBXGroup; children = ( 53A2B53A1F94DBE500095FAD /* AppDelegate.swift */, - 53A2B53C1F94DBE500095FAD /* HTMLViewControler.swift */, - 53A2B54C1F94DC9700095FAD /* readme.html */, - 53A2B54E1F94DD8200095FAD /* stylesheet.css */, + 53A2B53C1F94DBE500095FAD /* WebViewController.swift */, + 53E34DFE2403D58400EE575E /* HTML */, 53A2B53E1F94DBE500095FAD /* Main.storyboard */, 53A2B5411F94DBE500095FAD /* Assets.xcassets */, 53A2B5431F94DBE500095FAD /* LaunchScreen.storyboard */, @@ -72,6 +79,19 @@ path = DynamicWebKit; sourceTree = ""; }; + 53E34DFE2403D58400EE575E /* HTML */ = { + isa = PBXGroup; + children = ( + 53A2B54C1F94DC9700095FAD /* default.html */, + 53E34E022403D67600EE575E /* 001-dark.png */, + 53E34DFF2403D67600EE575E /* 001-dark@2x.png */, + 53E34E012403D67600EE575E /* 001.png */, + 53E34E002403D67600EE575E /* 001@2x.png */, + 53A2B54E1F94DD8200095FAD /* stylesheet.css */, + ); + path = HTML; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -132,10 +152,14 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 53A2B54D1F94DC9700095FAD /* readme.html in Resources */, + 53E34E042403D85A00EE575E /* 001-dark@2x.png in Resources */, + 53A2B54D1F94DC9700095FAD /* default.html in Resources */, 53A2B54F1F94DD8200095FAD /* stylesheet.css in Resources */, + 53E34E052403D85E00EE575E /* 001.png in Resources */, 53A2B5451F94DBE500095FAD /* LaunchScreen.storyboard in Resources */, + 53E34E032403D85700EE575E /* 001-dark.png in Resources */, 53A2B5421F94DBE500095FAD /* Assets.xcassets in Resources */, + 53E34E062403D86100EE575E /* 001@2x.png in Resources */, 53A2B5401F94DBE500095FAD /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -147,7 +171,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 53A2B53D1F94DBE500095FAD /* HTMLViewControler.swift in Sources */, + 53A2B53D1F94DBE500095FAD /* WebViewController.swift in Sources */, 53A2B53B1F94DBE500095FAD /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/DynamicWebKit/DynamicWebKit/Base.lproj/Main.storyboard b/DynamicWebKit/DynamicWebKit/Base.lproj/Main.storyboard index afb9d6c..c0a6762 100644 --- a/DynamicWebKit/DynamicWebKit/Base.lproj/Main.storyboard +++ b/DynamicWebKit/DynamicWebKit/Base.lproj/Main.storyboard @@ -1,29 +1,28 @@ - - - - + + - + + - + - + - + - + @@ -31,7 +30,7 @@ - + diff --git a/DynamicWebKit/DynamicWebKit/HTML/001-dark.png b/DynamicWebKit/DynamicWebKit/HTML/001-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..98e7b46dffce023f88021d1e974c6a3be2ea20af GIT binary patch literal 38737 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 Hy8~e`3+=#T69b!arT}jigH@ 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 Rz-?A{RE4p|{s+@2bFKgY literal 0 HcmV?d00001 diff --git a/DynamicWebKit/DynamicWebKit/HTML/001-dark@2x.png b/DynamicWebKit/DynamicWebKit/HTML/001-dark@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..867a616280402b913597f99707428d3290a857e4 GIT binary patch literal 40763 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 Ap8x;= literal 0 HcmV?d00001 diff --git a/DynamicWebKit/DynamicWebKit/HTML/default.html b/DynamicWebKit/DynamicWebKit/HTML/default.html new file mode 100644 index 0000000..96c14f7 --- /dev/null +++ b/DynamicWebKit/DynamicWebKit/HTML/default.html @@ -0,0 +1,21 @@ + + + + + + +User Guide + + +

Dynamic Type With WebKit

+

Getting Started

+

An example of using dynamic type fonts with HTML content displayed in a WKWebView. Changing the text size in Settings should also change the text in this web view.

+

Handling Images

+

An example of an image with a dark mode variation

+ + +Xcode source editor + +
+ + diff --git a/DynamicWebKit/DynamicWebKit/HTML/stylesheet.css b/DynamicWebKit/DynamicWebKit/HTML/stylesheet.css new file mode 100644 index 0000000..00998a7 --- /dev/null +++ b/DynamicWebKit/DynamicWebKit/HTML/stylesheet.css @@ -0,0 +1,40 @@ +:root { + color-scheme: light dark; + --title-color: red; + --subhead-color: green; + --link-color: blue; +} + +@media screen and (prefers-color-scheme: dark) { + :root { + --title-color: #ff8080; + --subhead-color: #80ff80; + --link-color: #93d5ff; + } +} + +body { + font: -apple-system-body; +} + +h1 { + font: -apple-system-headline; + color: var(--title-color); +} + +h2 { + font: -apple-system-subheadline; + color: var(--subhead-color); +} + +footer { + font: -apple-system-footnote; +} + +a { + color: var(--link-color); +} + +img { + max-width: 100%; +} diff --git a/DynamicWebKit/DynamicWebKit/HTMLViewControler.swift b/DynamicWebKit/DynamicWebKit/WebViewController.swift similarity index 65% rename from DynamicWebKit/DynamicWebKit/HTMLViewControler.swift rename to DynamicWebKit/DynamicWebKit/WebViewController.swift index 779671d..90b5382 100644 --- a/DynamicWebKit/DynamicWebKit/HTMLViewControler.swift +++ b/DynamicWebKit/DynamicWebKit/WebViewController.swift @@ -1,5 +1,5 @@ // Created by Keith Harrison https://useyourloaf.com -// Copyright (c) 2017 Keith Harrison. All rights reserved. +// Copyright (c) 2017-2020 Keith Harrison. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: @@ -30,43 +30,34 @@ import UIKit import WebKit -final class HTMLViewControler: UIViewController { - private lazy var webview: WKWebView = { +final class WebViewController: UIViewController { + var html: String = "default" { + didSet { + loadHTML(html) + } + } + + private lazy var webView: WKWebView = { let preferences = WKPreferences() preferences.javaScriptEnabled = false let configuration = WKWebViewConfiguration() configuration.preferences = preferences - let webview = WKWebView(frame: .zero, configuration: configuration) - webview.translatesAutoresizingMaskIntoConstraints = false - return webview + return WKWebView(frame: .zero, configuration: configuration) }() - override func viewDidLoad() { - super.viewDidLoad() - setupViews() - loadHTML("readme.html") - + override func loadView() { + view = webView + loadHTML(html) NotificationCenter.default.addObserver(self, selector: #selector(contentSizeDidChange(_:)), name: UIContentSizeCategory.didChangeNotification, object: nil) } - private func setupViews() { - view.addSubview(webview) - NSLayoutConstraint.activate([ - webview.leadingAnchor.constraint(equalTo: view.leadingAnchor), - webview.trailingAnchor.constraint(equalTo: view.trailingAnchor), - webview.topAnchor.constraint(equalTo: view.topAnchor), - webview.bottomAnchor.constraint(equalTo: view.bottomAnchor) - ]) + @objc private func contentSizeDidChange(_ notification: Notification) { + webView.reload() } - private func loadHTML(_ file: String) { - if let baseURL = Bundle.main.resourceURL { - let fileURL = baseURL.appendingPathComponent(file) - webview.loadFileURL(fileURL, allowingReadAccessTo: fileURL) + private func loadHTML(_ name: String) { + if let url = Bundle.main.url(forResource: name, withExtension: "html") { + webView.loadFileURL(url, allowingReadAccessTo: url) } } - - @objc private func contentSizeDidChange(_ notification: Notification) { - webview.reload() - } } diff --git a/DynamicWebKit/DynamicWebKit/readme.html b/DynamicWebKit/DynamicWebKit/readme.html deleted file mode 100644 index 5055016..0000000 --- a/DynamicWebKit/DynamicWebKit/readme.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - -

Dynamic Type With WebKit

-

Getting Started

-

An example of using dynamic type fonts with HTML content displayed in a WKWebView.

-

Changing the text size in Settings should also change the text in this web view.

- - - - diff --git a/DynamicWebKit/DynamicWebKit/stylesheet.css b/DynamicWebKit/DynamicWebKit/stylesheet.css deleted file mode 100644 index 59ff130..0000000 --- a/DynamicWebKit/DynamicWebKit/stylesheet.css +++ /dev/null @@ -1,18 +0,0 @@ -body { - font: -apple-system-body; -} - -h1 { - font: -apple-system-headline; - color: red; -} - -h2 { - font: -apple-system-subheadline; - color: blue; -} - -.footnote { - font: -apple-system-footnote; - color: green; -} diff --git a/DynamicWebKit/README.md b/DynamicWebKit/README.md index 188df97..6c6df29 100644 --- a/DynamicWebKit/README.md +++ b/DynamicWebKit/README.md @@ -2,8 +2,13 @@ An example of how to use the Apple system fonts in a CSS stylesheet so static HTML content in a web view respects the user's choice of content size. +## Adding Support For Dark Mode + +I've updated this project to support dark mode (requires iOS 13). + ## Further Details -For further details see the following blog post: +For further details see the following blog posts: + [Using Dynamic Type With Web Views](https://useyourloaf.com/blog/using-dynamic-type-with-web-views/) ++ [Supporting Dark Mode In Web Views](https://useyourloaf.com/blog/supporting-dark-mode-in-web-views/) From 6626ba274749496e50f146c63acdef80ef1d8ab3 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Mon, 24 Feb 2020 16:27:30 +0000 Subject: [PATCH 51/56] Update link --- DynamicWebKit/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DynamicWebKit/README.md b/DynamicWebKit/README.md index 6c6df29..3f59978 100644 --- a/DynamicWebKit/README.md +++ b/DynamicWebKit/README.md @@ -11,4 +11,4 @@ I've updated this project to support dark mode (requires iOS 13). For further details see the following blog posts: + [Using Dynamic Type With Web Views](https://useyourloaf.com/blog/using-dynamic-type-with-web-views/) -+ [Supporting Dark Mode In Web Views](https://useyourloaf.com/blog/supporting-dark-mode-in-web-views/) ++ [Supporting Dark Mode In WkWebView](https://useyourloaf.com/blog/supporting-dark-mode-in-wkwebview/) From ce946861b94fe775c25ae00b50cc95b85b4c0ce9 Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Mon, 9 Mar 2020 16:50:36 +0000 Subject: [PATCH 52/56] Update for dark mode --- .../Container-SB/Container/Base.lproj/Main.storyboard | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Container/Container-SB/Container/Base.lproj/Main.storyboard b/Container/Container-SB/Container/Base.lproj/Main.storyboard index ed85341..e5bdbfe 100644 --- a/Container/Container-SB/Container/Base.lproj/Main.storyboard +++ b/Container/Container-SB/Container/Base.lproj/Main.storyboard @@ -1,9 +1,9 @@ - + - + @@ -35,7 +35,7 @@
- + @@ -78,7 +78,7 @@ - + @@ -117,7 +117,7 @@ - + @@ -149,7 +149,6 @@ - From c9790b09f0b100fc08f5161b47cb364d1fce35bb Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Mon, 9 Mar 2020 16:50:54 +0000 Subject: [PATCH 53/56] Add DarkTheme --- DarkTheme/DarkTheme.xcodeproj/project.pbxproj | 357 ++++++++++++++++++ DarkTheme/DarkTheme/AppDelegate.swift | 34 ++ .../AppIcon.appiconset/Contents.json | 98 +++++ .../DarkTheme/Assets.xcassets/Contents.json | 6 + .../Dynamic Colors/Contents.json | 6 + .../defaultBackground.colorset/Contents.json | 78 ++++ .../groupedBackground.colorset/Contents.json | 38 ++ .../Base.lproj/LaunchScreen.storyboard | 25 ++ .../DarkTheme/Base.lproj/Main.storyboard | 187 +++++++++ DarkTheme/DarkTheme/Info.plist | 74 ++++ DarkTheme/DarkTheme/SceneDelegate.swift | 39 ++ DarkTheme/DarkTheme/Settings.swift | 42 +++ DarkTheme/DarkTheme/TextViewController.swift | 48 +++ DarkTheme/DarkTheme/Theme.swift | 49 +++ .../DarkTheme/ThemeTableViewController.swift | 67 ++++ DarkTheme/README.md | 5 + 16 files changed, 1153 insertions(+) create mode 100644 DarkTheme/DarkTheme.xcodeproj/project.pbxproj create mode 100644 DarkTheme/DarkTheme/AppDelegate.swift create mode 100644 DarkTheme/DarkTheme/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 DarkTheme/DarkTheme/Assets.xcassets/Contents.json create mode 100644 DarkTheme/DarkTheme/Assets.xcassets/Dynamic Colors/Contents.json create mode 100644 DarkTheme/DarkTheme/Assets.xcassets/Dynamic Colors/defaultBackground.colorset/Contents.json create mode 100644 DarkTheme/DarkTheme/Assets.xcassets/Dynamic Colors/groupedBackground.colorset/Contents.json create mode 100644 DarkTheme/DarkTheme/Base.lproj/LaunchScreen.storyboard create mode 100644 DarkTheme/DarkTheme/Base.lproj/Main.storyboard create mode 100644 DarkTheme/DarkTheme/Info.plist create mode 100644 DarkTheme/DarkTheme/SceneDelegate.swift create mode 100644 DarkTheme/DarkTheme/Settings.swift create mode 100644 DarkTheme/DarkTheme/TextViewController.swift create mode 100644 DarkTheme/DarkTheme/Theme.swift create mode 100644 DarkTheme/DarkTheme/ThemeTableViewController.swift create mode 100644 DarkTheme/README.md diff --git a/DarkTheme/DarkTheme.xcodeproj/project.pbxproj b/DarkTheme/DarkTheme.xcodeproj/project.pbxproj new file mode 100644 index 0000000..6940263 --- /dev/null +++ b/DarkTheme/DarkTheme.xcodeproj/project.pbxproj @@ -0,0 +1,357 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 535DFF62241589FD00DF6476 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 535DFF61241589FD00DF6476 /* AppDelegate.swift */; }; + 535DFF64241589FD00DF6476 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 535DFF63241589FD00DF6476 /* SceneDelegate.swift */; }; + 535DFF6B241589FD00DF6476 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 535DFF69241589FD00DF6476 /* Main.storyboard */; }; + 535DFF6D24158A0100DF6476 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 535DFF6C24158A0100DF6476 /* Assets.xcassets */; }; + 535DFF7024158A0100DF6476 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 535DFF6E24158A0100DF6476 /* LaunchScreen.storyboard */; }; + 535DFF7824158B3E00DF6476 /* ThemeTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 535DFF7724158B3E00DF6476 /* ThemeTableViewController.swift */; }; + 535DFF7A24158B8E00DF6476 /* TextViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 535DFF7924158B8E00DF6476 /* TextViewController.swift */; }; + 535DFF7C241597CA00DF6476 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 535DFF7B241597CA00DF6476 /* Theme.swift */; }; + 535DFF7E2415996900DF6476 /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 535DFF7D2415996900DF6476 /* Settings.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 535DFF5E241589FD00DF6476 /* DarkTheme.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DarkTheme.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 535DFF61241589FD00DF6476 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 535DFF63241589FD00DF6476 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 535DFF6A241589FD00DF6476 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 535DFF6C24158A0100DF6476 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 535DFF6F24158A0100DF6476 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 535DFF7124158A0100DF6476 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 535DFF7724158B3E00DF6476 /* ThemeTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeTableViewController.swift; sourceTree = ""; }; + 535DFF7924158B8E00DF6476 /* TextViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextViewController.swift; sourceTree = ""; }; + 535DFF7B241597CA00DF6476 /* Theme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = ""; }; + 535DFF7D2415996900DF6476 /* Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = ""; }; + 535DFF7F2416A58B00DF6476 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 535DFF5B241589FD00DF6476 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 535DFF55241589FD00DF6476 = { + isa = PBXGroup; + children = ( + 535DFF7F2416A58B00DF6476 /* README.md */, + 535DFF60241589FD00DF6476 /* DarkTheme */, + 535DFF5F241589FD00DF6476 /* Products */, + ); + sourceTree = ""; + }; + 535DFF5F241589FD00DF6476 /* Products */ = { + isa = PBXGroup; + children = ( + 535DFF5E241589FD00DF6476 /* DarkTheme.app */, + ); + name = Products; + sourceTree = ""; + }; + 535DFF60241589FD00DF6476 /* DarkTheme */ = { + isa = PBXGroup; + children = ( + 535DFF7724158B3E00DF6476 /* ThemeTableViewController.swift */, + 535DFF7B241597CA00DF6476 /* Theme.swift */, + 535DFF7D2415996900DF6476 /* Settings.swift */, + 535DFF7924158B8E00DF6476 /* TextViewController.swift */, + 535DFF61241589FD00DF6476 /* AppDelegate.swift */, + 535DFF63241589FD00DF6476 /* SceneDelegate.swift */, + 535DFF69241589FD00DF6476 /* Main.storyboard */, + 535DFF6C24158A0100DF6476 /* Assets.xcassets */, + 535DFF6E24158A0100DF6476 /* LaunchScreen.storyboard */, + 535DFF7124158A0100DF6476 /* Info.plist */, + ); + path = DarkTheme; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 535DFF5D241589FD00DF6476 /* DarkTheme */ = { + isa = PBXNativeTarget; + buildConfigurationList = 535DFF7424158A0100DF6476 /* Build configuration list for PBXNativeTarget "DarkTheme" */; + buildPhases = ( + 535DFF5A241589FD00DF6476 /* Sources */, + 535DFF5B241589FD00DF6476 /* Frameworks */, + 535DFF5C241589FD00DF6476 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = DarkTheme; + productName = DarkTheme; + productReference = 535DFF5E241589FD00DF6476 /* DarkTheme.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 535DFF56241589FD00DF6476 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1140; + LastUpgradeCheck = 1140; + ORGANIZATIONNAME = "Keith Harrison"; + TargetAttributes = { + 535DFF5D241589FD00DF6476 = { + CreatedOnToolsVersion = 11.4; + }; + }; + }; + buildConfigurationList = 535DFF59241589FD00DF6476 /* Build configuration list for PBXProject "DarkTheme" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 535DFF55241589FD00DF6476; + productRefGroup = 535DFF5F241589FD00DF6476 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 535DFF5D241589FD00DF6476 /* DarkTheme */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 535DFF5C241589FD00DF6476 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 535DFF7024158A0100DF6476 /* LaunchScreen.storyboard in Resources */, + 535DFF6D24158A0100DF6476 /* Assets.xcassets in Resources */, + 535DFF6B241589FD00DF6476 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 535DFF5A241589FD00DF6476 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 535DFF7E2415996900DF6476 /* Settings.swift in Sources */, + 535DFF7824158B3E00DF6476 /* ThemeTableViewController.swift in Sources */, + 535DFF62241589FD00DF6476 /* AppDelegate.swift in Sources */, + 535DFF7C241597CA00DF6476 /* Theme.swift in Sources */, + 535DFF64241589FD00DF6476 /* SceneDelegate.swift in Sources */, + 535DFF7A24158B8E00DF6476 /* TextViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 535DFF69241589FD00DF6476 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 535DFF6A241589FD00DF6476 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 535DFF6E24158A0100DF6476 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 535DFF6F24158A0100DF6476 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 535DFF7224158A0100DF6476 /* 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; + 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 = 13.4; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 535DFF7324158A0100DF6476 /* 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; + 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 = 13.4; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 535DFF7524158A0100DF6476 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = LCC2J94N44; + INFOPLIST_FILE = DarkTheme/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.DarkTheme; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 535DFF7624158A0100DF6476 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = LCC2J94N44; + INFOPLIST_FILE = DarkTheme/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.DarkTheme; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 535DFF59241589FD00DF6476 /* Build configuration list for PBXProject "DarkTheme" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 535DFF7224158A0100DF6476 /* Debug */, + 535DFF7324158A0100DF6476 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 535DFF7424158A0100DF6476 /* Build configuration list for PBXNativeTarget "DarkTheme" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 535DFF7524158A0100DF6476 /* Debug */, + 535DFF7624158A0100DF6476 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 535DFF56241589FD00DF6476 /* Project object */; +} diff --git a/DarkTheme/DarkTheme/AppDelegate.swift b/DarkTheme/DarkTheme/AppDelegate.swift new file mode 100644 index 0000000..2d32c08 --- /dev/null +++ b/DarkTheme/DarkTheme/AppDelegate.swift @@ -0,0 +1,34 @@ +// Created by Keith Harrison https://useyourloaf.com +// Copyright © 2020 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { +} diff --git a/DarkTheme/DarkTheme/Assets.xcassets/AppIcon.appiconset/Contents.json b/DarkTheme/DarkTheme/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/DarkTheme/DarkTheme/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DarkTheme/DarkTheme/Assets.xcassets/Contents.json b/DarkTheme/DarkTheme/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/DarkTheme/DarkTheme/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DarkTheme/DarkTheme/Assets.xcassets/Dynamic Colors/Contents.json b/DarkTheme/DarkTheme/Assets.xcassets/Dynamic Colors/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/DarkTheme/DarkTheme/Assets.xcassets/Dynamic Colors/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DarkTheme/DarkTheme/Assets.xcassets/Dynamic Colors/defaultBackground.colorset/Contents.json b/DarkTheme/DarkTheme/Assets.xcassets/Dynamic Colors/defaultBackground.colorset/Contents.json new file mode 100644 index 0000000..de36eae --- /dev/null +++ b/DarkTheme/DarkTheme/Assets.xcassets/Dynamic Colors/defaultBackground.colorset/Contents.json @@ -0,0 +1,78 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF0", + "green" : "0xF0", + "red" : "0xF0" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x33", + "green" : "0x33", + "red" : "0x33" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFF" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + }, + { + "appearance" : "contrast", + "value" : "high" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x00", + "green" : "0x00", + "red" : "0x00" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DarkTheme/DarkTheme/Assets.xcassets/Dynamic Colors/groupedBackground.colorset/Contents.json b/DarkTheme/DarkTheme/Assets.xcassets/Dynamic Colors/groupedBackground.colorset/Contents.json new file mode 100644 index 0000000..3d85e7f --- /dev/null +++ b/DarkTheme/DarkTheme/Assets.xcassets/Dynamic Colors/groupedBackground.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF7", + "green" : "0xF2", + "red" : "0xF2" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x00", + "green" : "0x00", + "red" : "0x00" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DarkTheme/DarkTheme/Base.lproj/LaunchScreen.storyboard b/DarkTheme/DarkTheme/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/DarkTheme/DarkTheme/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DarkTheme/DarkTheme/Base.lproj/Main.storyboard b/DarkTheme/DarkTheme/Base.lproj/Main.storyboard new file mode 100644 index 0000000..e93a726 --- /dev/null +++ b/DarkTheme/DarkTheme/Base.lproj/Main.storyboard @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DarkTheme/DarkTheme/Info.plist b/DarkTheme/DarkTheme/Info.plist new file mode 100644 index 0000000..e7f6f58 --- /dev/null +++ b/DarkTheme/DarkTheme/Info.plist @@ -0,0 +1,74 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UIStatusBarTintParameters + + UINavigationBar + + Style + UIBarStyleDefault + Translucent + + + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/DarkTheme/DarkTheme/SceneDelegate.swift b/DarkTheme/DarkTheme/SceneDelegate.swift new file mode 100644 index 0000000..f5dc8a3 --- /dev/null +++ b/DarkTheme/DarkTheme/SceneDelegate.swift @@ -0,0 +1,39 @@ +// Created by Keith Harrison https://useyourloaf.com +// Copyright © 2020 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + var window: UIWindow? + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + let defaults = UserDefaults.standard + window?.overrideUserInterfaceStyle = defaults.theme.userInterfaceStyle + } +} diff --git a/DarkTheme/DarkTheme/Settings.swift b/DarkTheme/DarkTheme/Settings.swift new file mode 100644 index 0000000..6c54941 --- /dev/null +++ b/DarkTheme/DarkTheme/Settings.swift @@ -0,0 +1,42 @@ +// Created by Keith Harrison https://useyourloaf.com +// Copyright © 2020 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +import Foundation + +extension UserDefaults { + var theme: Theme { + get { + register(defaults: [#function: Theme.device.rawValue]) + return Theme(rawValue: integer(forKey: #function)) ?? .device + } + set { + set(newValue.rawValue, forKey: #function) + } + } +} diff --git a/DarkTheme/DarkTheme/TextViewController.swift b/DarkTheme/DarkTheme/TextViewController.swift new file mode 100644 index 0000000..d42d839 --- /dev/null +++ b/DarkTheme/DarkTheme/TextViewController.swift @@ -0,0 +1,48 @@ +// Created by Keith Harrison https://useyourloaf.com +// Copyright © 2020 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +import UIKit + +final class TextViewController: UIViewController { + var text: String? { + didSet { + textView?.text = text + } + } + + @IBOutlet private var textView: UITextView? + + override func viewDidLoad() { + super.viewDidLoad() + text = """ + “Here's to the crazy ones. The misfits. The rebels. The troublemakers. The round pegs in the square holes. The ones who see things differently. They're not fond of rules. And they have no respect for the status quo. You can quote them, disagree with them, glorify or vilify them. About the only thing you can't do is ignore them. Because they change things. They push the human race forward. And while some may see them as the crazy ones, we see genius. Because the people who are crazy enough to think they can change the world, are the ones who do.” + ― Rob Siltanen + """ + } +} diff --git a/DarkTheme/DarkTheme/Theme.swift b/DarkTheme/DarkTheme/Theme.swift new file mode 100644 index 0000000..0aaa910 --- /dev/null +++ b/DarkTheme/DarkTheme/Theme.swift @@ -0,0 +1,49 @@ +// Created by Keith Harrison https://useyourloaf.com +// Copyright © 2020 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +import UIKit + +enum Theme: Int { + case device + case light + case dark +} + +extension Theme { + var userInterfaceStyle: UIUserInterfaceStyle { + switch self { + case .device: + return .unspecified + case .light: + return .light + case .dark: + return .dark + } + } +} diff --git a/DarkTheme/DarkTheme/ThemeTableViewController.swift b/DarkTheme/DarkTheme/ThemeTableViewController.swift new file mode 100644 index 0000000..438ad54 --- /dev/null +++ b/DarkTheme/DarkTheme/ThemeTableViewController.swift @@ -0,0 +1,67 @@ +// Created by Keith Harrison https://useyourloaf.com +// Copyright © 2020 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +import UIKit + +final class ThemeTableViewController: UITableViewController { + var defaults = UserDefaults.standard + private var theme: Theme { + get { + return defaults.theme + } + set { + defaults.theme = newValue + configureStyle(for: newValue) + } + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + configureCell(for: theme, checked: true) + } + + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + if indexPath.row != theme.rawValue { + configureCell(for: theme, checked: false) + theme = Theme(rawValue: indexPath.row) ?? .device + configureCell(for: theme, checked: true) + } + + tableView.deselectRow(at: indexPath, animated: true) + } + + private func configureCell(for theme: Theme, checked: Bool) { + let cell = tableView.cellForRow(at: IndexPath(row: theme.rawValue, section: 0)) + cell?.accessoryType = checked ? .checkmark : .none + } + + private func configureStyle(for theme: Theme) { + view.window?.overrideUserInterfaceStyle = theme.userInterfaceStyle + } +} diff --git a/DarkTheme/README.md b/DarkTheme/README.md new file mode 100644 index 0000000..180e52d --- /dev/null +++ b/DarkTheme/README.md @@ -0,0 +1,5 @@ +# Overriding Dark Mode + +An example of using `overrideUserInterfaceStyle` (iOS 13) to control the appearance of an App. See the following post for more details: + ++ [Overriding Dark Mode](https://useyourloaf.com/blog/overriding-dark-mode/) From e27f9b43930756a6fdb41d61f3e38aa8d31d61bd Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Mon, 23 Mar 2020 17:00:47 +0000 Subject: [PATCH 54/56] Add Validate project --- Validate/README.md | 7 + Validate/Validate.xcodeproj/project.pbxproj | 353 ++++++++++++++++++ Validate/Validate/AdaptiveScroll.swift | 67 ++++ Validate/Validate/AppDelegate.swift | 34 ++ .../AppIcon.appiconset/Contents.json | 98 +++++ .../Validate/Assets.xcassets/Contents.json | 6 + .../disabledButton.imageset/Contents.json | 29 ++ .../disabledButton.imageset/grey.pdf | Bin 0 -> 7689 bytes .../selectedSubmit.imageset/Contents.json | 29 ++ .../selectedSubmit.imageset/greensel.pdf | Bin 0 -> 12271 bytes .../submitButton.imageset/Contents.json | 29 ++ .../submitButton.imageset/green.pdf | Bin 0 -> 12238 bytes .../Base.lproj/LaunchScreen.storyboard | 25 ++ Validate/Validate/Base.lproj/Main.storyboard | 208 +++++++++++ Validate/Validate/Info.plist | 64 ++++ Validate/Validate/SceneDelegate.swift | 34 ++ Validate/Validate/String+Blank.swift | 46 +++ Validate/Validate/TermsViewController.swift | 97 +++++ 18 files changed, 1126 insertions(+) create mode 100644 Validate/README.md create mode 100644 Validate/Validate.xcodeproj/project.pbxproj create mode 100644 Validate/Validate/AdaptiveScroll.swift create mode 100644 Validate/Validate/AppDelegate.swift create mode 100644 Validate/Validate/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Validate/Validate/Assets.xcassets/Contents.json create mode 100644 Validate/Validate/Assets.xcassets/disabledButton.imageset/Contents.json create mode 100644 Validate/Validate/Assets.xcassets/disabledButton.imageset/grey.pdf create mode 100644 Validate/Validate/Assets.xcassets/selectedSubmit.imageset/Contents.json create mode 100644 Validate/Validate/Assets.xcassets/selectedSubmit.imageset/greensel.pdf create mode 100644 Validate/Validate/Assets.xcassets/submitButton.imageset/Contents.json create mode 100644 Validate/Validate/Assets.xcassets/submitButton.imageset/green.pdf create mode 100644 Validate/Validate/Base.lproj/LaunchScreen.storyboard create mode 100644 Validate/Validate/Base.lproj/Main.storyboard create mode 100644 Validate/Validate/Info.plist create mode 100644 Validate/Validate/SceneDelegate.swift create mode 100644 Validate/Validate/String+Blank.swift create mode 100644 Validate/Validate/TermsViewController.swift diff --git a/Validate/README.md b/Validate/README.md new file mode 100644 index 0000000..5a9c105 --- /dev/null +++ b/Validate/README.md @@ -0,0 +1,7 @@ +# Getting Started with Combine + +A gentle introduction to using Combine to validate user input. + +See the following blog post for more details: + ++ [Getting Started with Combine](https://useyourloaf.com/blog/getting-started-with-combine/) diff --git a/Validate/Validate.xcodeproj/project.pbxproj b/Validate/Validate.xcodeproj/project.pbxproj new file mode 100644 index 0000000..34e8923 --- /dev/null +++ b/Validate/Validate.xcodeproj/project.pbxproj @@ -0,0 +1,353 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 532A2F1D2425823D00A0005F /* String+Blank.swift in Sources */ = {isa = PBXBuildFile; fileRef = 532A2F1C2425823D00A0005F /* String+Blank.swift */; }; + 5385DF762427C259001E63E0 /* AdaptiveScroll.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5385DF752427C259001E63E0 /* AdaptiveScroll.swift */; }; + 539CD53024250D75000E2699 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 539CD52F24250D75000E2699 /* AppDelegate.swift */; }; + 539CD53224250D75000E2699 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 539CD53124250D75000E2699 /* SceneDelegate.swift */; }; + 539CD53724250D75000E2699 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 539CD53524250D75000E2699 /* Main.storyboard */; }; + 539CD53924250D76000E2699 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 539CD53824250D76000E2699 /* Assets.xcassets */; }; + 539CD53C24250D76000E2699 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 539CD53A24250D76000E2699 /* LaunchScreen.storyboard */; }; + 539CD5442425109F000E2699 /* TermsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 539CD5432425109F000E2699 /* TermsViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 532A2F1C2425823D00A0005F /* String+Blank.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Blank.swift"; sourceTree = ""; }; + 5385DF752427C259001E63E0 /* AdaptiveScroll.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveScroll.swift; sourceTree = ""; }; + 539CD52C24250D75000E2699 /* Validate.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Validate.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 539CD52F24250D75000E2699 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 539CD53124250D75000E2699 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 539CD53624250D75000E2699 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 539CD53824250D76000E2699 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 539CD53B24250D76000E2699 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 539CD53D24250D76000E2699 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 539CD5432425109F000E2699 /* TermsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TermsViewController.swift; sourceTree = ""; }; + 53D7D6D52429223700ACD670 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 539CD52924250D75000E2699 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 539CD52324250D75000E2699 = { + isa = PBXGroup; + children = ( + 53D7D6D52429223700ACD670 /* README.md */, + 539CD52E24250D75000E2699 /* Validate */, + 539CD52D24250D75000E2699 /* Products */, + ); + sourceTree = ""; + }; + 539CD52D24250D75000E2699 /* Products */ = { + isa = PBXGroup; + children = ( + 539CD52C24250D75000E2699 /* Validate.app */, + ); + name = Products; + sourceTree = ""; + }; + 539CD52E24250D75000E2699 /* Validate */ = { + isa = PBXGroup; + children = ( + 539CD5432425109F000E2699 /* TermsViewController.swift */, + 5385DF752427C259001E63E0 /* AdaptiveScroll.swift */, + 532A2F1C2425823D00A0005F /* String+Blank.swift */, + 539CD52F24250D75000E2699 /* AppDelegate.swift */, + 539CD53124250D75000E2699 /* SceneDelegate.swift */, + 539CD53524250D75000E2699 /* Main.storyboard */, + 539CD53824250D76000E2699 /* Assets.xcassets */, + 539CD53A24250D76000E2699 /* LaunchScreen.storyboard */, + 539CD53D24250D76000E2699 /* Info.plist */, + ); + path = Validate; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 539CD52B24250D75000E2699 /* Validate */ = { + isa = PBXNativeTarget; + buildConfigurationList = 539CD54024250D76000E2699 /* Build configuration list for PBXNativeTarget "Validate" */; + buildPhases = ( + 539CD52824250D75000E2699 /* Sources */, + 539CD52924250D75000E2699 /* Frameworks */, + 539CD52A24250D75000E2699 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Validate; + productName = Validate; + productReference = 539CD52C24250D75000E2699 /* Validate.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 539CD52424250D75000E2699 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1140; + LastUpgradeCheck = 1140; + ORGANIZATIONNAME = "Keith Harrison"; + TargetAttributes = { + 539CD52B24250D75000E2699 = { + CreatedOnToolsVersion = 11.4; + }; + }; + }; + buildConfigurationList = 539CD52724250D75000E2699 /* Build configuration list for PBXProject "Validate" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 539CD52324250D75000E2699; + productRefGroup = 539CD52D24250D75000E2699 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 539CD52B24250D75000E2699 /* Validate */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 539CD52A24250D75000E2699 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 539CD53C24250D76000E2699 /* LaunchScreen.storyboard in Resources */, + 539CD53924250D76000E2699 /* Assets.xcassets in Resources */, + 539CD53724250D75000E2699 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 539CD52824250D75000E2699 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 539CD53024250D75000E2699 /* AppDelegate.swift in Sources */, + 5385DF762427C259001E63E0 /* AdaptiveScroll.swift in Sources */, + 539CD5442425109F000E2699 /* TermsViewController.swift in Sources */, + 539CD53224250D75000E2699 /* SceneDelegate.swift in Sources */, + 532A2F1D2425823D00A0005F /* String+Blank.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 539CD53524250D75000E2699 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 539CD53624250D75000E2699 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 539CD53A24250D76000E2699 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 539CD53B24250D76000E2699 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 539CD53E24250D76000E2699 /* 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; + 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 = 13.4; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 539CD53F24250D76000E2699 /* 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; + 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 = 13.4; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 539CD54124250D76000E2699 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = LCC2J94N44; + INFOPLIST_FILE = Validate/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.Validate; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 539CD54224250D76000E2699 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = LCC2J94N44; + INFOPLIST_FILE = Validate/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.Validate; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 539CD52724250D75000E2699 /* Build configuration list for PBXProject "Validate" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 539CD53E24250D76000E2699 /* Debug */, + 539CD53F24250D76000E2699 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 539CD54024250D76000E2699 /* Build configuration list for PBXNativeTarget "Validate" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 539CD54124250D76000E2699 /* Debug */, + 539CD54224250D76000E2699 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 539CD52424250D75000E2699 /* Project object */; +} diff --git a/Validate/Validate/AdaptiveScroll.swift b/Validate/Validate/AdaptiveScroll.swift new file mode 100644 index 0000000..5f43115 --- /dev/null +++ b/Validate/Validate/AdaptiveScroll.swift @@ -0,0 +1,67 @@ +// Created by Keith Harrison https://useyourloaf.com +// Copyright © 2020 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +import UIKit + +final class AdaptiveScrollView: UIScrollView { + override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + setup() + } + + private func setup() { + NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow(_:)), name: UIResponder.keyboardDidShowNotification, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil) + } + + @objc private func keyboardDidShow(_ notification: Notification) { + guard let userInfo = notification.userInfo, + let keyboardFrame = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { + return + } + + let keyboardSize = keyboardFrame.cgRectValue.size + let contentInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: keyboardSize.height, right: 0.0) + adjustContentInsets(contentInsets) + } + + @objc private func keyboardWillHide(_ notification: Notification) { + adjustContentInsets(.zero) + } + + private func adjustContentInsets(_ contentInsets: UIEdgeInsets) { + contentInset = contentInsets + scrollIndicatorInsets = contentInsets + } +} diff --git a/Validate/Validate/AppDelegate.swift b/Validate/Validate/AppDelegate.swift new file mode 100644 index 0000000..2d32c08 --- /dev/null +++ b/Validate/Validate/AppDelegate.swift @@ -0,0 +1,34 @@ +// Created by Keith Harrison https://useyourloaf.com +// Copyright © 2020 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { +} diff --git a/Validate/Validate/Assets.xcassets/AppIcon.appiconset/Contents.json b/Validate/Validate/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/Validate/Validate/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Validate/Validate/Assets.xcassets/Contents.json b/Validate/Validate/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Validate/Validate/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Validate/Validate/Assets.xcassets/disabledButton.imageset/Contents.json b/Validate/Validate/Assets.xcassets/disabledButton.imageset/Contents.json new file mode 100644 index 0000000..bf86622 --- /dev/null +++ b/Validate/Validate/Assets.xcassets/disabledButton.imageset/Contents.json @@ -0,0 +1,29 @@ +{ + "images" : [ + { + "filename" : "grey.pdf", + "idiom" : "universal", + "resizing" : { + "cap-insets" : { + "bottom" : 10, + "left" : 10, + "right" : 10, + "top" : 10 + }, + "center" : { + "height" : 1, + "mode" : "tile", + "width" : 1 + }, + "mode" : "9-part" + } + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Validate/Validate/Assets.xcassets/disabledButton.imageset/grey.pdf b/Validate/Validate/Assets.xcassets/disabledButton.imageset/grey.pdf new file mode 100644 index 0000000000000000000000000000000000000000..759973b2f12146afac9a32f9ae382c65be74f251 GIT binary patch literal 7689 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 literal 0 HcmV?d00001 diff --git a/Validate/Validate/Assets.xcassets/selectedSubmit.imageset/Contents.json b/Validate/Validate/Assets.xcassets/selectedSubmit.imageset/Contents.json new file mode 100644 index 0000000..a9f61c7 --- /dev/null +++ b/Validate/Validate/Assets.xcassets/selectedSubmit.imageset/Contents.json @@ -0,0 +1,29 @@ +{ + "images" : [ + { + "filename" : "greensel.pdf", + "idiom" : "universal", + "resizing" : { + "cap-insets" : { + "bottom" : 10, + "left" : 10, + "right" : 10, + "top" : 10 + }, + "center" : { + "height" : 1, + "mode" : "tile", + "width" : 1 + }, + "mode" : "9-part" + } + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Validate/Validate/Assets.xcassets/selectedSubmit.imageset/greensel.pdf b/Validate/Validate/Assets.xcassets/selectedSubmit.imageset/greensel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7b4ae44f61f121313936f54e33e4ec7b1683a58a GIT binary patch literal 12271 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 literal 0 HcmV?d00001 diff --git a/Validate/Validate/Assets.xcassets/submitButton.imageset/Contents.json b/Validate/Validate/Assets.xcassets/submitButton.imageset/Contents.json new file mode 100644 index 0000000..fec438a --- /dev/null +++ b/Validate/Validate/Assets.xcassets/submitButton.imageset/Contents.json @@ -0,0 +1,29 @@ +{ + "images" : [ + { + "filename" : "green.pdf", + "idiom" : "universal", + "resizing" : { + "cap-insets" : { + "bottom" : 12, + "left" : 10, + "right" : 10, + "top" : 12 + }, + "center" : { + "height" : 1, + "mode" : "tile", + "width" : 1 + }, + "mode" : "9-part" + } + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Validate/Validate/Assets.xcassets/submitButton.imageset/green.pdf b/Validate/Validate/Assets.xcassets/submitButton.imageset/green.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b3fa12c24fd4dd1bf4fdc3bbfbe0807c05b03373 GIT binary patch literal 12238 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 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Validate/Validate/Base.lproj/Main.storyboard b/Validate/Validate/Base.lproj/Main.storyboard new file mode 100644 index 0000000..e09401b --- /dev/null +++ b/Validate/Validate/Base.lproj/Main.storyboard @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + You must accept these terms and conditions before continuing: + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus nec posuere nulla, sit amet fermentum tellus. Pellentesque bibendum eros sed mi ultricies hendrerit quis id mi. Curabitur quis sodales eros. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Validate/Validate/Info.plist b/Validate/Validate/Info.plist new file mode 100644 index 0000000..2a3483c --- /dev/null +++ b/Validate/Validate/Info.plist @@ -0,0 +1,64 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/Validate/Validate/SceneDelegate.swift b/Validate/Validate/SceneDelegate.swift new file mode 100644 index 0000000..d6c5aaa --- /dev/null +++ b/Validate/Validate/SceneDelegate.swift @@ -0,0 +1,34 @@ +// Created by Keith Harrison https://useyourloaf.com +// Copyright © 2020 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +import UIKit + +final class SceneDelegate: UIResponder, UIWindowSceneDelegate { + var window: UIWindow? +} diff --git a/Validate/Validate/String+Blank.swift b/Validate/Validate/String+Blank.swift new file mode 100644 index 0000000..22fb8f3 --- /dev/null +++ b/Validate/Validate/String+Blank.swift @@ -0,0 +1,46 @@ +// Created by Keith Harrison https://useyourloaf.com +// Copyright © 2020 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +import Foundation + +extension String { + /// A Boolean value indicating whether a String is blank. + /// The string is blank if it is empty or only contains whitespace. + var isBlank: Bool { + return allSatisfy { $0.isWhitespace } + } +} + +extension Optional where Wrapped == String { + /// A Boolean value indicating whether an Optional String is blank. + /// The optional string is blank if it is nil, empty or only contains whitespace. + var isBlank: Bool { + return self?.isBlank ?? true + } +} diff --git a/Validate/Validate/TermsViewController.swift b/Validate/Validate/TermsViewController.swift new file mode 100644 index 0000000..aac2772 --- /dev/null +++ b/Validate/Validate/TermsViewController.swift @@ -0,0 +1,97 @@ +// Created by Keith Harrison https://useyourloaf.com +// Copyright © 2020 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +import Combine +import UIKit + +final class TermsViewController: UIViewController { + @IBOutlet private var termsSwitch: UISwitch! + @IBOutlet private var privacySwitch: UISwitch! + @IBOutlet private var nameField: UITextField! + @IBOutlet private var submitButton: UIButton! + + @Published private var acceptedTerms: Bool = false + @Published private var acceptedPrivacy: Bool = false + @Published private var name: String = "" + + private var stream: AnyCancellable? + + override func viewDidLoad() { + super.viewDidLoad() + stream = validToSubmit + .receive(on: RunLoop.main) + .assign(to: \.isEnabled, on: submitButton) + } + + @IBAction private func acceptTerms(_ sender: UISwitch) { + acceptedTerms = sender.isOn + } + + @IBAction private func acceptPrivacy(_ sender: UISwitch) { + acceptedPrivacy = sender.isOn + } + + @IBAction private func nameChanged(_ sender: UITextField) { + name = sender.text ?? "" + } + + @IBAction private func submitAction(_ sender: UIButton) { + print("Submit... \(name)") + } + + private var validToSubmit: AnyPublisher { + return Publishers.CombineLatest3($acceptedTerms, $acceptedPrivacy, $name) + .map { terms, privacy, name in + terms && privacy && !name.isBlank + }.eraseToAnyPublisher() + } + + // A longer approach just for fun: + // + // private var validName: AnyPublisher { + // return $name.map { name in + // guard !name.isBlank && name.count > 2 else { return nil } + // return name + // }.eraseToAnyPublisher() + // } + // + // private var acceptedAll: AnyPublisher { + // return Publishers.CombineLatest($acceptedTerms, $acceptedPrivacy) + // .map { terms, privacy in + // terms && privacy + // }.eraseToAnyPublisher() + // } + // + // private var validToSubmit: AnyPublisher { + // return Publishers.CombineLatest(acceptedAll, validName) + // .map { terms, name in + // terms && name != nil + // }.eraseToAnyPublisher() + // } +} From e2dac291135888611cd618407ca7f08177448f3e Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Mon, 6 Apr 2020 17:01:37 +0100 Subject: [PATCH 55/56] Add Xcode preview support See https://useyourloaf.com/blog/xcode-previews-for-view-controllers/ --- Validate/README.md | 4 ++ Validate/Validate.xcodeproj/project.pbxproj | 4 ++ Validate/Validate/Base.lproj/Main.storyboard | 14 ++-- Validate/Validate/TermsViewController.swift | 20 +++++- .../TermsViewControllerPreviews.swift | 71 +++++++++++++++++++ 5 files changed, 107 insertions(+), 6 deletions(-) create mode 100644 Validate/Validate/TermsViewControllerPreviews.swift diff --git a/Validate/README.md b/Validate/README.md index 5a9c105..4329027 100644 --- a/Validate/README.md +++ b/Validate/README.md @@ -5,3 +5,7 @@ A gentle introduction to using Combine to validate user input. See the following blog post for more details: + [Getting Started with Combine](https://useyourloaf.com/blog/getting-started-with-combine/) + +For details on using Xcode previews with UIKit view controllers see: + ++ [Xcode Previews for View Controllers](https:/useyourloaf.com/blog/xcode-previews-for-view-controllers/) diff --git a/Validate/Validate.xcodeproj/project.pbxproj b/Validate/Validate.xcodeproj/project.pbxproj index 34e8923..f2273c2 100644 --- a/Validate/Validate.xcodeproj/project.pbxproj +++ b/Validate/Validate.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXBuildFile section */ 532A2F1D2425823D00A0005F /* String+Blank.swift in Sources */ = {isa = PBXBuildFile; fileRef = 532A2F1C2425823D00A0005F /* String+Blank.swift */; }; + 5371387A243202D6006CB01D /* TermsViewControllerPreviews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53713879243202D6006CB01D /* TermsViewControllerPreviews.swift */; }; 5385DF762427C259001E63E0 /* AdaptiveScroll.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5385DF752427C259001E63E0 /* AdaptiveScroll.swift */; }; 539CD53024250D75000E2699 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 539CD52F24250D75000E2699 /* AppDelegate.swift */; }; 539CD53224250D75000E2699 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 539CD53124250D75000E2699 /* SceneDelegate.swift */; }; @@ -19,6 +20,7 @@ /* Begin PBXFileReference section */ 532A2F1C2425823D00A0005F /* String+Blank.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Blank.swift"; sourceTree = ""; }; + 53713879243202D6006CB01D /* TermsViewControllerPreviews.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TermsViewControllerPreviews.swift; sourceTree = ""; }; 5385DF752427C259001E63E0 /* AdaptiveScroll.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveScroll.swift; sourceTree = ""; }; 539CD52C24250D75000E2699 /* Validate.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Validate.app; sourceTree = BUILT_PRODUCTS_DIR; }; 539CD52F24250D75000E2699 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -63,6 +65,7 @@ isa = PBXGroup; children = ( 539CD5432425109F000E2699 /* TermsViewController.swift */, + 53713879243202D6006CB01D /* TermsViewControllerPreviews.swift */, 5385DF752427C259001E63E0 /* AdaptiveScroll.swift */, 532A2F1C2425823D00A0005F /* String+Blank.swift */, 539CD52F24250D75000E2699 /* AppDelegate.swift */, @@ -147,6 +150,7 @@ buildActionMask = 2147483647; files = ( 539CD53024250D75000E2699 /* AppDelegate.swift in Sources */, + 5371387A243202D6006CB01D /* TermsViewControllerPreviews.swift in Sources */, 5385DF762427C259001E63E0 /* AdaptiveScroll.swift in Sources */, 539CD5442425109F000E2699 /* TermsViewController.swift in Sources */, 539CD53224250D75000E2699 /* SceneDelegate.swift in Sources */, diff --git a/Validate/Validate/Base.lproj/Main.storyboard b/Validate/Validate/Base.lproj/Main.storyboard index e09401b..9b9f35e 100644 --- a/Validate/Validate/Base.lproj/Main.storyboard +++ b/Validate/Validate/Base.lproj/Main.storyboard @@ -1,8 +1,8 @@ - + - + @@ -34,7 +34,7 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus nec posuere nul - + @@ -58,10 +59,10 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus nec posuere nul - + - + @@ -104,6 +106,7 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus nec posuere nul + @@ -128,6 +131,7 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus nec posuere nul + diff --git a/Validate/Validate/TermsViewController.swift b/Validate/Validate/TermsViewController.swift index aac2772..3ca2409 100644 --- a/Validate/Validate/TermsViewController.swift +++ b/Validate/Validate/TermsViewController.swift @@ -63,13 +63,14 @@ final class TermsViewController: UIViewController { @IBAction private func submitAction(_ sender: UIButton) { print("Submit... \(name)") + print(view.value(forKey: "_autolayoutTrace")!) } private var validToSubmit: AnyPublisher { return Publishers.CombineLatest3($acceptedTerms, $acceptedPrivacy, $name) .map { terms, privacy, name in terms && privacy && !name.isBlank - }.eraseToAnyPublisher() + }.eraseToAnyPublisher() } // A longer approach just for fun: @@ -95,3 +96,20 @@ final class TermsViewController: UIViewController { // }.eraseToAnyPublisher() // } } + +#if DEBUG +import SwiftUI + +extension TermsViewController: UIViewControllerRepresentable { + func makeUIViewController(context: Context) -> TermsViewController { + let storyboard = UIStoryboard(name: "Main", bundle: nil) + guard let viewController = storyboard.instantiateViewController(identifier: "TermsViewController") as? TermsViewController else { + fatalError("Cannot load from storyboard") + } + return viewController + } + + func updateUIViewController(_ uiViewController: TermsViewController, context: Context) { + } +} +#endif diff --git a/Validate/Validate/TermsViewControllerPreviews.swift b/Validate/Validate/TermsViewControllerPreviews.swift new file mode 100644 index 0000000..d32af21 --- /dev/null +++ b/Validate/Validate/TermsViewControllerPreviews.swift @@ -0,0 +1,71 @@ +// Created by Keith Harrison https://useyourloaf.com +// Copyright © 2020 Keith Harrison. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +#if DEBUG +import SwiftUI + +let devices = [ + "iPhone SE", + "iPhone 11", + "iPad Pro (11-inch) (2nd generation)" +] + +let sizeCategories: [ContentSizeCategory] = [ + .extraSmall, + .extraExtraExtraLarge, + .accessibilityExtraExtraExtraLarge +] + +struct TermsViewControllerPreviews: PreviewProvider { + static var previews: some View { + Group { + TermsViewController() + .previewDisplayName("Default") + + ForEach(devices, id: \.self) { name in + TermsViewController() + .previewDevice(PreviewDevice(rawValue: name)) + .previewDisplayName(name) + } + + ForEach(ColorScheme.allCases, id: \.self) { scheme in + TermsViewController() + .environment(\.colorScheme, scheme) + .previewDisplayName("\(scheme)") + } + + ForEach(sizeCategories, id: \.self) { size in + TermsViewController() + .environment(\.sizeCategory, size) + .previewDisplayName("\(size)") + } + } + } +} +#endif From c58ddb2bbb4c90f182412e3d826cd31e99a4ec3e Mon Sep 17 00:00:00 2001 From: Dan VanWinkle Date: Mon, 13 Apr 2020 17:57:01 -0400 Subject: [PATCH 56/56] =?UTF-8?q?=F0=9F=93=9D=20Updating=20name=20of=20fon?= =?UTF-8?q?t=20to=20reflect=20Google=20Fonts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ScaledFont/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ScaledFont/README.md b/ScaledFont/README.md index 616776f..d54fccd 100644 --- a/ScaledFont/README.md +++ b/ScaledFont/README.md @@ -2,11 +2,11 @@ ## Using Dynamic Type With Custom Fonts -An example of using custom fonts with dynamic type making use of the `UIFontMetrics` class introduced with iOS 11. It provides examples using the Noteworthy font which is built-in to iOS and the NotoSerif font which was downloaded from google fonts: +An example of using custom fonts with dynamic type making use of the `UIFontMetrics` class introduced with iOS 11. It provides examples using the Noteworthy font which is built-in to iOS and the Noto Serif font which was downloaded from google fonts: -+ [Noto Sans](https://fonts.google.com/specimen/Noto+Serif?selection.family=Noto+Serif) ++ [Noto Serif](https://fonts.google.com/specimen/Noto+Serif?selection.family=Noto+Serif) -*Refer to LICENSE.txt if you plan on using NotoSans in a shipping application.* +*Refer to LICENSE.txt if you plan on using Noto Serif in a shipping application.* **This project requires iOS 11**