From dc642091dd6c9ea8497797ae6ebeed7ee8848d4e Mon Sep 17 00:00:00 2001 From: Keith Harrison Date: Mon, 24 Feb 2020 16:10:04 +0000 Subject: [PATCH 1/7] 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 2/7] 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 3/7] 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 4/7] 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 5/7] 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 zcmeHNc|25a+ec#?DzX&$)k&eU%#Nw-dla&7F&I0;*o!P#A|-od38j=ZvSyb^H5HP| zo+w+EkR|UKOC`OZ=lA@c_j&(n%*UK_pL@B^_qwm^zBV2;S$RQ(5DLmuKQK8kd~53Z z^ZEuT8h`@?Qyb{9V*pGA?_lX-1z^CYQvgif+Rg<}1b^*tE_hkI8NnP6h>Js=U5I#` zJ=BBpX>60jZUke{_!(%W@1r+yUH4e!{MZ$r%RCE=5T;JN5z;BsT`6(slDu$F?Z?ck zb!ui#%wHoW89HAwWW$6U#48r=Emu_B`ttPE^MNmI6Weu2stXIZ#Ei~4NOZodav1X& z^YQL{IlTRhx;)=Y53d8kmQ#wu;o(6!DY%fN2ZYdA|CotDdj_EPyEdxSTUoqaZJ4L`!=-EQYpR5EnO5H!S1sVkF`aey zRm6J->CrLs?mo=eQjNDXI%9r0C0ki}&oik&tkp7ZTUuglbCbYzp9v4fW1)8>lFVk1P14pb&T4p~48h)!;6UcD=x??dWp^B?SdV?e#CJ_OyfxlDKML z$}KdEyWl4O=;HHsMr;lR<>t*vhJuWasOb8pS>ebpfPp(}n%=S-7EVpSb7l=GqUa07HJ|}vsq9UiLNO(#Ot>XRQ zc+~jNP|qPpC4%g;=%PzH+$_B*)E_a?*%SLaP~v>G5&G00_MD+hqY_V13#eUs7Hy?b~4)2B}@UNoX7pu9q^Mb*c27KY5zsSWNlO$+NE6t1eM$Y$74 zR8-Vxa_pie|54pj;6TFwldnVHeIn;d4HBb{7WSWqF}T^cHg zD7|@kFo)R8SF@Lki|enydV_<5OLQ{w5qjU|=H}kNhbS2P?_!P!0@@$P(N7wmKdGwf zNsFcCnBCuT#=x`sI4c}U+l;1^q@*RfBN7tDSv1AG+vq3TY`*mM zQN?*sQe8SOPi@F=zuV=00;`Xw=U0>>WwGR_LbCFSdy8#tZMguoVVZ5jeBA8B)gm$v zy|T5-OG`^DD;v};ZjjL1!ykU|5pg|x_HEb~f<^1&IB>glcXlq(pUR84oP}_+e_FRa zl(b9@A?l$v3;K!(lf_y@bmb}eaz)|(D(Y(@_%}rz`9svf%YR4I*Uq$mBY{*bt75i`+>c39Q}&a+8g}Wky<;h{v)JjRqg*Hq>$*} zogRpF3*!e;$n~b5JPhQTS@4gL`fd>^ztp# z9|jE`skC~DN>}7RcTR~jmK80~`!esgB3hh^7J8lH$JdcPFENj$xvYg@u(LC+FX!|N0?+K`FMQqL;yTM(Lvo8xZyN{9%h|MG{bvna7EjLeGfIq35+=jvg zmbr$#a(!K?ocOlVe@HgtfXvo!PW=gHc6Z0-txv~V8&b9&WIP+pAv^Bs^L@0_v{0%nlzr3IMdGZgb-4j7}(j?9oM5%)OR8*)Y_pX z>Wg9EHAFI_)acSx_@h&m(=A?xFCRx+9`19D8hB;@g*kTM$gHbp{wK@RqtR9oLj2gip&MWLYnV9+19cNt+Mb6g8UH9Iax4%(jwBQ8N$QCBn z6Ri;C@r`D9m_zF~%wG2lkfO-%%w9LherEQXwfi@jy-_9qcbPpJo4<`>ADv7udYi*8 znLdZbWz`3JMTJKk5A8o7=q+$z@zx&MXxjd?3j$0mvP@^LP|*MQO7c=Rre|TC2Ndtl zSVeY>@7EA~$;sfj%cv!ddU9U)ZGPmf*_)ap=n3ZvLs{?c`yDxxRLZ)0?0*9!8K4!Z zL3}r3SB&ppG&XY0!T6g%ZZ!P=%RpYOfCj*s0@|+vZrpR{*=I7?WiPM`Yo{r&PJM$B zlU);l@`n+J;;!H%PMOnC=r&T{@o4N}z8INyhgpkFY1$+IAYs8ty7hJOR}z0uW}=8U zaGX$};z=Rk(0YzT)2Q6Wlm^Eg$I>=bxoBv&3u4FAOPAoYdg z)?WPCci!GfKA4p;pMT_Y@sS5@M;rI_96i^tWtu_|vRIHO>BQmbD^w_8DJIFl8W%x3 zB;8D$siKVZzCqtlX*9Gij2J)}19xMIrI*x+c*n+~HzA{A=}npM|Ag*0d?WLN%p)Z7 z$4UFMzqZP#AATlG`UC(|b;A?wz!Ttyi?`xxuJd}+7&9CI7eZr&MSdQ!zGKK@wmM?X z&Gb~Uc6I?^8ZMr8tA6e3)7ASQKB9&d&Ya*55@TWEyy8_O;20?U7x#JH9bDNupyy5Y zRKY(X1O_gQ#-PF88$8t&Pj=&L{KrILSBW}>Gq-ki20+#DV;h66ElAC&wWgoQLt)^e zNMXz-^2pBh|1o+08Z$7E0RF*+FmN~uD~$S;C=~e})`?nk?@?PQDFra<@vnlNNwMyl8XfGxqzaLW=R3Foo@vfA^uWubifj<|5G7wVs-OT~H(6?V zR^~(6=9<-%3c=iFa;yyJ{Y~5HCz;e5YSd-r20FuR>BqA%Q(Xy5kMz1b28-J}EXTdu z%P7=VH)B6EO-0xH)geC!_9$Ysdm>6k;vAOw;`)alG$SIrW}#JU}Ohm8*3n@bspKK~fE`^7L4yd(q-6G?fx424)Yo zw9F-{P{3K^jh_tirrL!dVwtSs*dhG z=QNhY8qX|fP4JG8lBL3u^}6jwvS1bL6f+0(ul-d}8KXr}XipQUab(2KnKH#zh<`|AA;q8YxGD%c8{a&(pnWuBr-a{rB{mdZZXn}U zhO+FFCyd+TNajnkOw0Y%SnH=vbpnYg)jKBwhqTm(qUi%dtjYtA`RQH}GKU8EwDtPz z66T}jIG1G0YUOH7;T?!oD^a3tB#2SS?B8<0LE;RR_pkvI0@_&lz$!Z;*Et+{=G)-> zUIxQZhh7yaZjBE!jN#@)o-_fD^zHz=8mb*vXkD&D(SAa3Dgl$NT)rsBEnNUbfUhFc zme?&qid5E;kb6?%uPLBXh}V>E=WQG*TK&#Ehn(~mcBCA!WK*@zpwr`P22J_bosI*+~|dwuU!(X z*ER_^G02O{-|`waa+GV^qiT*mF2{2vy9|*Im>fv)_V%!H-{HEgy}T114-R*+j{9$~ zasF)TwXYKD!{xK5JA7|L72g$leTc39_IqVUKY{2TaR3L-ZaTB1Ha zoZdTBF-?!>!5a)59N-$@94L5vil!EBGKV_FaWgC`tUN4y3jLv!)K7XVoNIl0`N5%> zuZJBDd&O|aSj14qgx^uoBDAr#CEc;VquL6$;kCipbl5Dk3EjO!xS*rzDY1kOrM4o)r3ICKMsBf%k|DPbUC5dEmoN}u6AM1Mek@cwCd zO#IjrO$(lai`dlcoY7l?FT`(j-WAI>yIr7bnSQe18H-V*kb#I)v0<@>yR@n@Oc!RH zt3IA8uAY*ea-&M2%E0Gw^>g5j$wjGaHMdhkQ>$>vxb$AL{dXenzBrt&pMJDK)U3!U zbV9t}fHyBBNhwn4Qqu{I*R5TeCS{~T5~J-0D_-1RvB0Q+hTyQkUcEzl)VlVCpYrDG-qa`98ku=N3bN@pD|nXC`Qd(c zreL>Q)u{K;1f#r8_VSbEq?v6q+zY%52wJgVkKl@Jv#(v;4weUaw=oY7^_D!F2kFOuzo{{F4*y zmj>PH?dv;Vi*+oOEbwnv-X5WF@lo`xs6kE=!|4lgxjGR#xy6yQrsFo_x5ST#hlpPi zXQ_0nyz32{!!1!Qxy^S@wSOL*Z(mS_h(faHhoCng@(^uWaRwy)4r*6OT@7VTx&L0+ zOXCBEt?X3Ni!yG3$LKMPMr`xWyMzSLS-c~jC0ZWmJlr9IrgE|}_2r7;jV~J&E?#0+ zW_OowQg|rWrf@>;tX!O&a-6P!Ucr0$F#RwfLyUdzZnm=r+=!X8FFTck`$zhq{bNEX z!`On6H^ln`na!k}E52R5{$JT9QS}bXjFCtV9I_p`KU%mWI<%?q2fonYH^%x3l?sZuz z;8Px}KVkkb{XXHnL-SuvQ%wu!FcuhhSIbJbZ$XPSm@(UJ*@3Te4BwWXbT_Ig>-|zW z9BvQTD|UQtmT$g<-`(vH+SRIlT|KYT#HwKYLxXgww0dua;4_15b`R~?>_$5+3bJk9 z#&Ms1@x`>cFSJjU=UwD*x1P7o*Ul$10izW+XKpUI_qfryzw7*1Hl-VHs&~5Mc}|Z} z_P~?Lw8`RfosmjyoPm?ccI$BS@IvJ6dlkoXZ4}yWeY)|bCc3p}e%^A+7ixR;~v=jk9XD*;4ioaqoJw>PW+BpUSE%eT;o%M-?X`ND6@pHy_o8 zyS5!|Z5O#M5-nVNDY7BI-{}!ysppH#S(dvW)lliBa}d#e*onSJb9={=8IN^%hI-%m z$hVX-Q}kRvR6q6AyH_DaH-xRvs+{fq=-ZO?*R#I_C9W-dO^40ICloxkR3=3{V@te- zO>sXrDcuk_aWQ0P@DUvs@v_4AFOzcea=M!R;&M+>yP)x?JGVy7A(c~XJ4+Q_8y!!T7Y%Ulz9(aUQXJ*6;p96K*-LG6?G~98(<9g0O-Kb7EW?9J zWMIoNUvpLKs7aY5e)&TAPYT%zq_D4HooDi=AAW8Qi)-l*tUC0qXg21>-IR0g3l)~8 zP4%B`Ukt}f9PheaiJgBnV?Ss<^uER2dOYJ+XxH6Ji5b78)CIHYM-d-KROeJru}2n{;_HQ*tCCa+W$|R_It$sC!2O9j!ZUm zHyE|6B||@q+MnXIYXNt#0L}S-DPkiBrCq^FDFgshwl;SLgVSr%{S?DT{hSwFol*wp zg0mx7u9nj|uh-FO7t9BkyPAPzx+pS{~onpBww3MbVqaqJJ|V z29Dk|9|qhzo907dHn)k0Y-&Scke~zl3oUT?rZrHA%`}5qq2G+%%wIH$?D%e61Kdzx zo@Qg4C>%^N{o01uG#|)I^4{Js76HeKY-&Tm(Z8;XKx|$E+|T56;l}w82+U9Xa3SKX z?eN5v8hH)tGoTz{0oW-50W8cVs~k}3lpHJw + + + + + + + + + + + + + + + + + + + + + + + + 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 6/7] 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 7/7] =?UTF-8?q?=F0=9F=93=9D=20Updating=20name=20of=20font?= =?UTF-8?q?=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**