From f43da400a1998df50d8f1619175419a245ffbe07 Mon Sep 17 00:00:00 2001 From: David Jennes Date: Sat, 22 Jul 2017 01:50:50 +0200 Subject: [PATCH] update playground files --- .../Contents.swift | 85 ++++++------- .../Contents.swift | 65 ++++++---- .../Contents.swift | 40 ------ .../timeline.xctimeline | 36 ------ .../Contents.swift | 117 ++++++++---------- .../Contents.swift | 71 +++++------ .../Contents.swift | 81 ++++++++++++ SwiftGen.playground/Resources/Assets.car | Bin 699604 -> 697832 bytes .../Resources/Localizable.strings | Bin 706 -> 722 bytes .../30h-14-fok-view-rJE-c0-6Bp.nib | Bin 1792 -> 1790 bytes .../Wizard.storyboardc/Accept-CGU.nib | Bin 900 -> 900 bytes .../Wizard.storyboardc/CreateAccount.nib | Bin 1334 -> 1334 bytes .../Resources/Wizard.storyboardc/Info.plist | Bin 293 -> 293 bytes .../Wizard.storyboardc/Preferences.nib | Bin 967 -> 931 bytes .../Wizard.storyboardc/Validate_Password.nib | Bin 910 -> 910 bytes .../Wizard.storyboardc/designable.storyboard | 33 ++--- .../rJ7-m2-Mn7-view-wtR-sc-VB5.nib | Bin 2627 -> 2627 bytes .../txY-Mc-CKa-view-wQH-MG-v6Y.nib | Bin 2734 -> 2737 bytes .../w6o-YQ-YLg-view-N1u-m6-6Oc.nib | Bin 1790 -> 1791 bytes SwiftGen.playground/contents.xcplayground | 6 +- 20 files changed, 261 insertions(+), 273 deletions(-) delete mode 100644 SwiftGen.playground/Pages/Images-Demo.xcplaygroundpage/Contents.swift delete mode 100644 SwiftGen.playground/Pages/Images-Demo.xcplaygroundpage/timeline.xctimeline create mode 100644 SwiftGen.playground/Pages/XCAssets-Demo.xcplaygroundpage/Contents.swift diff --git a/SwiftGen.playground/Pages/Colors-Demo.xcplaygroundpage/Contents.swift b/SwiftGen.playground/Pages/Colors-Demo.xcplaygroundpage/Contents.swift index 5c7b13e8..62dc7406 100644 --- a/SwiftGen.playground/Pages/Colors-Demo.xcplaygroundpage/Contents.swift +++ b/SwiftGen.playground/Pages/Colors-Demo.xcplaygroundpage/Contents.swift @@ -1,62 +1,49 @@ //: #### Other pages //: -//: * [Demo for `swiftgen strings`](Strings-Demo) -//: * [Demo for `swiftgen images`](Images-Demo) -//: * [Demo for `swiftgen storyboards`](Storyboards-Demo) //: * Demo for `swiftgen colors` //: * [Demo for `swiftgen fonts`](Fonts-Demo) +//: * [Demo for `swiftgen storyboards`](Storyboards-Demo) +//: * [Demo for `swiftgen strings`](Strings-Demo) +//: * [Demo for `swiftgen xcassets`](XCAssets-Demo) //: #### Example of code generated by swiftgen-colors import UIKit.UIColor +typealias Color = UIColor -extension UIColor { - convenience init(rgbaValue: UInt32) { - let red = CGFloat((rgbaValue >> 24) & 0xff) / 255.0 - let green = CGFloat((rgbaValue >> 16) & 0xff) / 255.0 - let blue = CGFloat((rgbaValue >> 8) & 0xff) / 255.0 - let alpha = CGFloat((rgbaValue ) & 0xff) / 255.0 - - self.init(red: red, green: green, blue: blue, alpha: alpha) - } +extension Color { + convenience init(rgbaValue: UInt32) { + let red = CGFloat((rgbaValue >> 24) & 0xff) / 255.0 + let green = CGFloat((rgbaValue >> 16) & 0xff) / 255.0 + let blue = CGFloat((rgbaValue >> 8) & 0xff) / 255.0 + let alpha = CGFloat((rgbaValue ) & 0xff) / 255.0 + + self.init(red: red, green: green, blue: blue, alpha: alpha) + } } -enum ColorName { - /// - /// Alpha: 100%
(0x339666ff) - case articleBody - /// - /// Alpha: 100%
(0xff66ccff) - case articleFootnote - /// - /// Alpha: 100%
(0x33fe66ff) - case articleTitle - /// - /// Alpha: 100%
(0xff66ccff) - case cyanColor - /// - /// Alpha: 80%
(0xffffffcc) - case translucent - - var rgbaValue: UInt32 { - switch self { - case .articleBody: return 0x339666ff - case .articleFootnote: return 0xff66ccff - case .articleTitle: return 0x33fe66ff - case .cyanColor: return 0xff66ccff - case .translucent: return 0xffffffcc - } - } - - var color: UIColor { - return UIColor(named: self) - } +struct ColorName { + let rgbaValue: UInt32 + var color: Color { return Color(named: self) } + + /// + /// Alpha: 100%
(0x339666ff) + static let articleBody = ColorName(rgbaValue: 0x339666ff) + /// + /// Alpha: 100%
(0xff66ccff) + static let articleFootnote = ColorName(rgbaValue: 0xff66ccff) + /// + /// Alpha: 100%
(0x33fe66ff) + static let articleTitle = ColorName(rgbaValue: 0x33fe66ff) + /// + /// Alpha: 80%
(0xffffffcc) + static let `private` = ColorName(rgbaValue: 0xffffffcc) } -extension UIColor { - convenience init(named name: ColorName) { - self.init(rgbaValue: name.rgbaValue) - } +extension Color { + convenience init(named color: ColorName) { + self.init(rgbaValue: color.rgbaValue) + } } //: #### Usage Example @@ -64,7 +51,7 @@ extension UIColor { UIColor(named: .articleTitle) ColorName.articleBody.color UIColor(named: .articleBody) -UIColor(named: .translucent) -/* Only possible if you used `enumBuilder.build(generateStringInit: true)` to generate the enum */ -//let orange = UIColor(hexString: "#ffcc88") +UIColor(named: .private) + +/* convenience initializer */ let lightGreen = UIColor(rgbaValue: 0x00ff88ff) diff --git a/SwiftGen.playground/Pages/Fonts-Demo.xcplaygroundpage/Contents.swift b/SwiftGen.playground/Pages/Fonts-Demo.xcplaygroundpage/Contents.swift index 6fe21d68..60279d65 100644 --- a/SwiftGen.playground/Pages/Fonts-Demo.xcplaygroundpage/Contents.swift +++ b/SwiftGen.playground/Pages/Fonts-Demo.xcplaygroundpage/Contents.swift @@ -1,43 +1,66 @@ //: #### Other pages -//: * [Demo for `swiftgen strings`](Colors-Demo) -//: * [Demo for `swiftgen images`](Images-Demo) -//: * [Demo for `swiftgen storyboards`](Storyboards-Demo) +//: //: * [Demo for `swiftgen colors`](Colors-Demo) //: * Demo for `swiftgen fonts` +//: * [Demo for `swiftgen storyboards`](Storyboards-Demo) +//: * [Demo for `swiftgen strings`](Strings-Demo) +//: * [Demo for `swiftgen xcassets`](XCAssets-Demo) //: #### Example of code generated by swiftgen-fonts import UIKit.UIFont +typealias Font = UIFont -protocol FontConvertible { - func font(size: CGFloat) -> UIFont! +struct FontConvertible { + let name: String + let family: String + let path: String + + func font(size: CGFloat) -> Font! { + return Font(font: self, size: size) + } + + func register() { + let bundle = Bundle(for: BundleToken.self) + + guard let url = bundle.url(forResource: path, withExtension: nil) else { + return + } + + var errorRef: Unmanaged? + CTFontManagerRegisterFontsForURL(url as CFURL, .process, &errorRef) + } } -extension FontConvertible where Self: RawRepresentable, Self.RawValue == String { - func font(size: CGFloat) -> UIFont! { - return UIFont(font: self, size: size) +extension Font { + convenience init!(font: FontConvertible, size: CGFloat) { + #if os(iOS) || os(tvOS) || os(watchOS) + if UIFont.fontNames(forFamilyName: font.family).isEmpty { + font.register() } -} + #elseif os(OSX) + if NSFontManager.shared().availableMembers(ofFontFamily: font.family) == nil { + font.register() + } + #endif -extension UIFont { - convenience init! - (font: FontType, size: CGFloat) - where FontType: RawRepresentable, FontType.RawValue == String { - self.init(name: font.rawValue, size: size) - } + self.init(name: font.name, size: size) + } } struct FontFamily { - enum Helvetica: String, FontConvertible { - case regular = "Helvetica" - case bold = "Helvetica-Bold" + enum Helvetica { + static let regular = FontConvertible(name: "Helvetica", family: "Helvetica", path: "Helvetica.ttf") + static let bold = FontConvertible(name: "Helvetica-Bold", family: "Helvetica", path: "Helvetica-Bold.ttf") } - enum HelveticaNeue: String, FontConvertible { - case regular = "HelveticaNeue" - case bold = "HelveticaNeue-Bold" + enum HelveticaNeue { + static let regular = FontConvertible(name: "HelveticaNeue", family: "HelveticaNeue", path: "HelveticaNeue.ttf") + static let bold = FontConvertible(name: "HelveticaNeue-Bold", family: "HelveticaNeue", path: "HelveticaNeue-Bold.ttf") } } +private final class BundleToken {} + //: #### Usage Example // Using the UIFont constructor… let helvetica = UIFont(font: FontFamily.Helvetica.regular, size: 20.0) diff --git a/SwiftGen.playground/Pages/Images-Demo.xcplaygroundpage/Contents.swift b/SwiftGen.playground/Pages/Images-Demo.xcplaygroundpage/Contents.swift deleted file mode 100644 index 07650518..00000000 --- a/SwiftGen.playground/Pages/Images-Demo.xcplaygroundpage/Contents.swift +++ /dev/null @@ -1,40 +0,0 @@ -//: #### Other pages -//: -//: * [Demo for `swiftgen strings`](Strings-Demo) -//: * Demo for `swiftgen images` -//: * [Demo for `swiftgen storyboards`](Storyboards-Demo) -//: * [Demo for `swiftgen colors`](Colors-Demo) -//: * [Demo for `swiftgen fonts`](Fonts-Demo) - -//: #### Example of code generated by swiftgen-assets - -// Generated using SwiftGen, by O.Halligon — https://github.com/SwiftGen/SwiftGen - -import UIKit - -enum Asset: String { - case exoticBanana = "Exotic/Banana" - case exoticMango = "Exotic/Mango" - case lemon = "Lemon" - case roundApricot = "Round/Apricot" - case roundOrange = "Round/Orange" - case roundApple = "Round/Apple" - case roundDoubleCherry = "Round/Double/Cherry" - case roundTomato = "Round/Tomato" - - var image: UIImage { - return UIImage(asset: self) - } -} - -extension UIImage { - convenience init!(asset: Asset) { - self.init(named: asset.rawValue) - } -} - -//: #### Usage Example - -let image = UIImage(asset: .exoticBanana) - -Asset.roundTomato.image diff --git a/SwiftGen.playground/Pages/Images-Demo.xcplaygroundpage/timeline.xctimeline b/SwiftGen.playground/Pages/Images-Demo.xcplaygroundpage/timeline.xctimeline deleted file mode 100644 index eaf0a4c8..00000000 --- a/SwiftGen.playground/Pages/Images-Demo.xcplaygroundpage/timeline.xctimeline +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/SwiftGen.playground/Pages/Storyboards-Demo.xcplaygroundpage/Contents.swift b/SwiftGen.playground/Pages/Storyboards-Demo.xcplaygroundpage/Contents.swift index 9fe1a90d..4b142cce 100644 --- a/SwiftGen.playground/Pages/Storyboards-Demo.xcplaygroundpage/Contents.swift +++ b/SwiftGen.playground/Pages/Storyboards-Demo.xcplaygroundpage/Contents.swift @@ -1,107 +1,92 @@ //: #### Other pages //: -//: * [Demo for `swiftgen strings`](Strings-Demo) -//: * [Demo for `swiftgen images`](Images-Demo) -//: * Demo for `swiftgen storyboards` //: * [Demo for `swiftgen colors`](Colors-Demo) //: * [Demo for `swiftgen fonts`](Fonts-Demo) +//: * Demo for `swiftgen storyboards` +//: * [Demo for `swiftgen strings`](Strings-Demo) +//: * [Demo for `swiftgen xcassets`](XCAssets-Demo) class CreateAccViewController: UIViewController {} -//: #### Example of code generated by swiftgen-storyboard +//: #### Example of code generated by swiftgen-storyboards // Generated using SwiftGen, by O.Halligon — https://github.com/SwiftGen/SwiftGen import Foundation import UIKit -protocol StoryboardSceneType { +protocol StoryboardType { static var storyboardName: String { get } } -extension StoryboardSceneType { - static func storyboard() -> UIStoryboard { - return UIStoryboard(name: self.storyboardName, bundle: nil) - } - - static func initialViewController() -> UIViewController { - guard let vc = storyboard().instantiateInitialViewController() else { - fatalError("Failed to instantiate initialViewController for \(self.storyboardName)") - } - return vc - } +extension StoryboardType { + static var storyboard: UIStoryboard { + return UIStoryboard(name: self.storyboardName, bundle: Bundle(for: BundleToken.self)) + } } -extension StoryboardSceneType where Self: RawRepresentable, Self.RawValue == String { - func viewController() -> UIViewController { - return Self.storyboard().instantiateViewController(withIdentifier: self.rawValue) - } - static func viewController(identifier: Self) -> UIViewController { - return identifier.viewController() - } +struct SceneType { + let storyboard: StoryboardType.Type + let identifier: String + + var controller: T { + guard let controller = storyboard.storyboard.instantiateViewController(withIdentifier: identifier) as? T else { + fatalError("Controller '\(identifier)' is not of the expected class \(T.self).") + } + return controller + } } -protocol StoryboardSegueType: RawRepresentable { } +struct InitialSceneType { + let storyboard: StoryboardType.Type + + var controller: T { + guard let controller = storyboard.storyboard.instantiateInitialViewController() as? T else { + fatalError("Controller is not of the expected class \(T.self).") + } + return controller + } +} + +protocol SegueType: RawRepresentable { } extension UIViewController { - func perform(segue: S, sender: Any? = nil) where S.RawValue == String { - performSegue(withIdentifier: segue.rawValue, sender: sender) - } + func perform(segue: S, sender: Any? = nil) where S.RawValue == String { + performSegue(withIdentifier: segue.rawValue, sender: sender) + } } struct StoryboardScene { - enum Wizard: String, StoryboardSceneType { + enum Wizard: StoryboardType { static let storyboardName = "Wizard" - static func initialViewController() -> CreateAccViewController { - guard let vc = storyboard().instantiateInitialViewController() as? CreateAccViewController else { - fatalError("Failed to instantiate initialViewController for \(self.storyboardName)") - } - return vc - } + static let initialScene = InitialSceneType(storyboard: Wizard.self) - case acceptCGUScene = "Accept-CGU" - static func instantiateAcceptCGU() -> UIViewController { - return StoryboardScene.Wizard.acceptCGUScene.viewController() - } + static let acceptCGU = SceneType(storyboard: Wizard.self, identifier: "Accept-CGU") - case createAccountScene = "CreateAccount" - static func instantiateCreateAccount() -> CreateAccViewController { - guard let vc = StoryboardScene.Wizard.createAccountScene.viewController() as? CreateAccViewController - else { - fatalError("ViewController 'CreateAccount' is not of the expected class CreateAccViewController.") - } - return vc - } - - case preferencesScene = "Preferences" - static func instantiatePreferences() -> UITableViewController { - guard let vc = StoryboardScene.Wizard.preferencesScene.viewController() as? UITableViewController - else { - fatalError("ViewController 'Preferences' is not of the expected class UITableViewController.") - } - return vc - } - - case validatePasswordScene = "Validate_Password" - static func instantiateValidatePassword() -> UIViewController { - return StoryboardScene.Wizard.validatePasswordScene.viewController() - } + static let createAccount = SceneType(storyboard: Wizard.self, identifier: "CreateAccount") + + static let preferences = SceneType(storyboard: Wizard.self, identifier: "Preferences") + + static let validatePassword = SceneType(storyboard: Wizard.self, identifier: "Validate_Password") } } struct StoryboardSegue { - enum Wizard: String, StoryboardSegueType { + enum Wizard: String, SegueType { case showPassword = "ShowPassword" } } +private final class BundleToken {} + //: #### Usage Example -let createAccountVC = StoryboardScene.Wizard.createAccountScene.viewController() +let createAccountVC = StoryboardScene.Wizard.createAccount.controller +type(of: createAccountVC) createAccountVC.title -let validateVC = StoryboardScene.Wizard.validatePasswordScene.viewController() +let validateVC = StoryboardScene.Wizard.validatePassword.controller validateVC.title let segue = StoryboardSegue.Wizard.showPassword @@ -120,10 +105,10 @@ you can easily switch or directly compare the passed in `segue` with the corresp segues for a specific storyboard. *******************************************************************************/ //override func prepareForSegue(_ segue: UIStoryboardSegue, sender sender: AnyObject?) { -// switch UIStoryboard.Segue.Message(rawValue: segue.identifier)! { -// case .Custom: +// switch UIStoryboard.Segue.Message(rawValue: segue.identifier ?? "")! { +// case .custom: // // Prepare for your custom segue transition -// case .NonCustom: +// case .nonCustom: // // Pass in information to the destination View Controller // } //} diff --git a/SwiftGen.playground/Pages/Strings-Demo.xcplaygroundpage/Contents.swift b/SwiftGen.playground/Pages/Strings-Demo.xcplaygroundpage/Contents.swift index 1f48daf9..cb92974d 100644 --- a/SwiftGen.playground/Pages/Strings-Demo.xcplaygroundpage/Contents.swift +++ b/SwiftGen.playground/Pages/Strings-Demo.xcplaygroundpage/Contents.swift @@ -1,62 +1,47 @@ //: #### Other pages //: -//: * Demo for `swiftgen strings` -//: * [Demo for `swiftgen images`](Images-Demo) -//: * [Demo for `swiftgen storyboards`](Storyboards-Demo) //: * [Demo for `swiftgen colors`](Colors-Demo) //: * [Demo for `swiftgen fonts`](Fonts-Demo) +//: * [Demo for `swiftgen storyboards`](Storyboards-Demo) +//: * Demo for `swiftgen strings` +//: * [Demo for `swiftgen xcassets`](XCAssets-Demo) -//: #### Example of code generated by swiftgen-l10n +//: #### Example of code generated by swiftgen-strings // Generated using SwiftGen, by O.Halligon — https://github.com/SwiftGen/SwiftGen import Foundation enum L10n { - case alertMessage - case alertTitle - case applesCount(Int) - case bananasOwner(Int, String) - case greetings(String, Int) - case objectOwnership(Int, String, String) -} -// swiftlint:enable type_body_length - -extension L10n: CustomStringConvertible { - var description: String { return self.string } - - var string: String { - switch self { - case .alertMessage: - return L10n.tr(key: "alert_message") - case .alertTitle: - return L10n.tr(key: "alert_title") - case .applesCount(let p0): - return L10n.tr(key: "apples.count", p0) - case .bananasOwner(let p0, let p1): - return L10n.tr(key: "bananas.owner", p0, p1) - case .greetings(let p0, let p1): - return L10n.tr(key: "greetings", p0, p1) - case .objectOwnership(let p0, let p1, let p2): - return L10n.tr(key: "ObjectOwnership", p0, p1, p2) - } - } - - private static func tr(key: String, _ args: CVarArg...) -> String { - let format = NSLocalizedString(key, comment: "") - return String(format: format, locale: Locale.current, arguments: args) - } + static let alertMessage = L10n.tr("Localizable", "alert_message") + static let alertTitle = L10n.tr("Localizable", "alert_title") + static func applesCount(_ p1: Int) -> String { + return L10n.tr("Localizable", "apples.count", p1) + } + static func bananasOwner(_ p1: Int, _ p2: String) -> String { + return L10n.tr("Localizable", "bananas.owner", p1, p2) + } + static func `private`(_ p1: String, _ p2: Int) -> String { + return L10n.tr("Localizable", "private", p1, p2) + } + static func objectOwnership(_ p1: Int, _ p2: String, _ p3: String) -> String { + return L10n.tr("Localizable", "ObjectOwnership", p1, p2, p3) + } } -func tr(_ key: L10n) -> String { - return key.string +extension L10n { + fileprivate static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String { + let format = NSLocalizedString(key, tableName: table, bundle: Bundle(for: BundleToken.self), comment: "") + return String(format: format, locale: Locale.current, arguments: args) + } } +private final class BundleToken {} //: #### Usage example -let alertTitle = tr(.alertTitle) -let hello1 = tr(.greetings("David", 29)) -let hello2 = L10n.greetings("Olivier", 32) // Prints as a string in the console because it's CustomStringConvertible +let alertTitle = L10n.alertTitle +let hello1 = L10n.private("David", 29) +let hello2 = L10n.private("Olivier", 32) // Prints as a string in the console because it's CustomStringConvertible // note the inversion of parameters' order due to usage of %1$d, %2$@ and %1$@ in Localizable.strings -tr(.objectOwnership(3, "Apples", "John")) +L10n.objectOwnership(3, "Apples", "John") diff --git a/SwiftGen.playground/Pages/XCAssets-Demo.xcplaygroundpage/Contents.swift b/SwiftGen.playground/Pages/XCAssets-Demo.xcplaygroundpage/Contents.swift new file mode 100644 index 00000000..5b4d72f1 --- /dev/null +++ b/SwiftGen.playground/Pages/XCAssets-Demo.xcplaygroundpage/Contents.swift @@ -0,0 +1,81 @@ +//: #### Other pages +//: +//: * [Demo for `swiftgen colors`](Colors-Demo) +//: * [Demo for `swiftgen fonts`](Fonts-Demo) +//: * [Demo for `swiftgen storyboards`](Storyboards-Demo) +//: * [Demo for `swiftgen strings`](Strings-Demo) +//: * Demo for `swiftgen xcassets` + +//: #### Example of code generated by swiftgen-xcassets + +// Generated using SwiftGen, by O.Halligon — https://github.com/SwiftGen/SwiftGen + +import UIKit +typealias Image = UIImage + +struct AssetType: ExpressibleByStringLiteral { + fileprivate var value: String + + var image: Image { + let bundle = Bundle(for: BundleToken.self) + #if os(iOS) || os(tvOS) + let image = Image(named: value, in: bundle, compatibleWith: nil) + #elseif os(OSX) + let image = bundle.image(forResource: value) + #elseif os(watchOS) + let image = Image(named: value) + #endif + guard let result = image else { fatalError("Unable to load image \(value).") } + return result + } + + init(stringLiteral value: String) { + self.value = value + } + + init(extendedGraphemeClusterLiteral value: String) { + self.init(stringLiteral: value) + } + + init(unicodeScalarLiteral value: String) { + self.init(stringLiteral: value) + } +} + +enum Asset { + enum Exotic { + static let banana: AssetType = "Exotic/Banana" + static let mango: AssetType = "Exotic/Mango" + } + static let `private`: AssetType = "private" + enum Round { + static let apricot: AssetType = "Round/Apricot" + static let orange: AssetType = "Round/Orange" + enum Red { + static let apple: AssetType = "Round/Apple" + enum Double { + static let cherry: AssetType = "Round/Double/Cherry" + } + static let tomato: AssetType = "Round/Tomato" + } + } +} + +extension Image { + convenience init!(asset: AssetType) { + #if os(iOS) || os(tvOS) + let bundle = Bundle(for: BundleToken.self) + self.init(named: asset.value, in: bundle, compatibleWith: nil) + #elseif os(OSX) || os(watchOS) + self.init(named: asset.value) + #endif + } +} + +private final class BundleToken {} + +//: #### Usage Example + +let image = UIImage(asset: Asset.Exotic.banana) + +Asset.Round.Red.tomato.image diff --git a/SwiftGen.playground/Resources/Assets.car b/SwiftGen.playground/Resources/Assets.car index 69a21e56e5c6f39cdad0e987b83c1e0da0e55fe6..92e21d96c5be3bb7a89ba1aa4d4505b2f0555dc3 100644 GIT binary patch delta 1187 zcmd6m-Ahwp9LIm>oVl|db8F4{lGU_k>NMY51&M8KBQV{pWA*}-Nn!6PtBa8+1Q~&E zonW{K1Sygdij32RwYyk#m2}fZOQMU+DDYz7MbP)z4jT0j^uYIgp6~ZL=Q-zj&hL5u z!TI&Av(OW0-XFTybCQTSsD`AGej-~JxB>peQ@3u8yT$9W9%I;qgf)X=;Y%{=YAfrd z(V}+cHg6Z|D(gmz64~cmRUf}k?|n0VeD-qG^-0(h^x2gMg1yDS=Er5Z<)N1gZG?&- z_O|tq1KI?wh4P`zP%%^p*`ak%f!aMLO`Db1R;xZevGUp4q=v?%CuSwv(V%oW?zUX& zIen!g#1=*Z-rYt#JtGSxy`l4`&aza5RzYTHHDrO<9`KN)5oviFo}+6)ry6u}{&{i2 zl?s%gvuq%4<<+=V__9k(dRNk^IZ>UOGel!zxOF8>$by=Xb$4Vj7G6%(hm$&6Lagau zNfrk(3P!|UWjPsW%+srldE(BvIFn4JYH-{*wV=8OrQHI*1OFg~t;jr3Mx?`clY#qd zuPcbk+3ISDToa&^$eRQ!iCV*86;U__ZXxQ&JycGl^n%qy$r)6@w2;p>hP6V7Z5(?M z%Q)pnS*{J8|8<1b&cENr!ao`p5hK#p;v8d>?~p&Ruh}hQu*Bj!DEnHxKJT$+pX~O! zWjE5&NJm8S_hq3<7hu>zRRqhyS-1)IPnIzkJNNV>QNJe`@JBuVmX@$56plnZv1qH` z-xUkC9t%a-OgaocO+0-}7TPdnHxIYldJ-d}$-n#ZxonN&YHDKS{EN(03hV{UKsitW zR00-&Ejq6->v8yPm`)?W6Q|-Qn1wafLo|qfmN@E)B50*E}lP_NO4@%zl*X+j=7bb@X#*3CcU(B`NF?%iRBCmajFY3;DQ1&(B ziHVEJ0e>O$0;}sE_!qmUey82T_P^RJZtQ)@Yc@1YH#y}dCwJg3PAt*&K*65AWa8yZ zCf)bP6~|OR9BB-Yy=EaFS8Qujg@45Zf@jA6dyfC{)FEIimkqXy1Q4q5F4Q zO6P1SEfkD}mjpdUoZWu>ZvC~zHo zjHrJK+(tCD1`ZHiVYN0yl)VgYC(7l)j}hHp#r?6YlRlpnODzuASSe)Dl$Dd#XT=&; z2$gdFKe*TpvmHx7pY1#y!1{u8V^*{kGfSIPn-P8HYGZfwxme%H-f$dYTBPSQVkPI7 zCNp9zg*9=oBpw2@YXNtp!>;KTFiO0mQ`7xm1N1YR9s=)yeo50aU^aeU)9-_=(6Xj) zgV}svYx)PGlw$Z*H8?RjyI`H{W8$82hVh;JxO*p6eFOoRuK!fk^_Y<9qra)T0l}Ge zVH_Lp>L>1QC-K&dqIv5gabbaU@edTOi+@5XE`F2rOY9BG!P7*WK{BL2Q?w!d1yQD* zgz6GS3)ME_Zk?r)Ej6K%tr_ChR>`=i1~e{Wh3+kr__~^q_=cL0_$K^%J&AKs%u@+I qqijMkccu%5W)gF+Y0LsM{gcY??9=#3ji)sJNaGF0vVC40w*Cn-d7v!- diff --git a/SwiftGen.playground/Resources/Localizable.strings b/SwiftGen.playground/Resources/Localizable.strings index 6c7cddc340a35c759ab7747c22285a94d2d412b1..79fb563e4d70f5ee33e8ae124e199e936356bdd7 100644 GIT binary patch delta 141 zcmX@adWm(y3`W0+f8{3bk+jmw%hxMPP0Y!u)GNuzEY<^}l+@IMn8bpDoYZ2yw(ep^ZP|?dEe8r>JB6t(( zw<3JUYwyGG1CKuP=#$W2l=xb&|Ip!2E`P~jS3Q_0U-PCWy*Y2HTDkFb?R&qU)!kx6 z;(d0ISYyLPZurn}(Xh+<$=?Jk0c)F`ptAz24OWV)SjQ!7;9Xp1GzdHbSZ8B&(Cj!d zLdh7}T)<7hO)((og^#V+vSUwy=rCd`oeT&HlD}Rex6)NppfEP z-#4qnj_&1Tok>QEB<}x@PnuaI8>RQInWYJK0`|7?D6rdLr-dXwZnkz2@fTSlh z0D9;g$pFk(0ujh?F_LSczaiXbuGo@MD~PrO|CJxT4&wk9r zFJj?q;D6`d4_^7{c{|+yC8FO!v@7@?=YMzvTzDquYvcJF&g6tM?MxQ7>pR_}{nYmb z9wM&dF=7P=h+OlL=DcPD4^zAf*#xppw$b&?h^uV0e1w8e@Hp`)3)uqOg8n+HT^_e1 zOB7pXb!6?(Cic-K!qY^bNzBqI@r>sAPK-=|29hQFx~2VD0<4AI^fdrhD+6n?hJLMr znSj~Sg#nl~Fq=%ZP^l6JHP30PMWoJ4+w2!rnrfSL_M?ull)xsc<(u$qPmBAyA{2uu*7}JQql*9NgXs2Fj5DN8W_sJw%b+$R+Ft`jzrh7 om#Ayv9ySO zR4+olqIyI5j^PK2PyBMvb7!Vu7%5of2o^{QOXN^{qrKK9)~LQ)bK1;5>bi_4R_5Ex zWv347Ry{Z1Uc1dWLY~4Ql*kCm*>`@eqRbe|RL8m-!>WD*nU(UD%fuS)*f#3~>(%|n z|Fa0olnC{v2&U;V%xZJw70imZmhb{X-m~9HWdenh24goS{fjWhir$PpAqdpHaS`ct!Q5 z!gr}Yg#5(lOMJVxmBylB7#XaRQ&=Y@SmZ=I(>`idJ+TVkW-hyN*r4gT0rz@6#*0pM z>mFg5hC)~)BdC)p)X2ojTF0jj_k%0u_dU1Ecnb3rl-s6d)MNhTz-2tKMDwhz>apGt z!wNOUU~0>Ki8VR0ZPpKVsf`Lh@c8h~>+o(03k_=cfAj%>@-bA%95%=iEd5Sw(iy{C nu~XgNL#R>}>Z>FDj67_&{{GfT!i(z@#||9N?eJl7P&@wt>auCg diff --git a/SwiftGen.playground/Resources/Wizard.storyboardc/CreateAccount.nib b/SwiftGen.playground/Resources/Wizard.storyboardc/CreateAccount.nib index 10cf1f93499e45b81fe6da50df5ad01869377201..849cf9c7c13cabf70eb0702e3e07924cdb2fda36 100644 GIT binary patch delta 574 zcmZwDTTc@~6bJC7rLr7U?ueHret|yn0e}S32Lpi=eKSitN|SYm?5;FC!RgGjTilk? z<>CVoH4zdLOpLLK*Z48~HhN|-MiXCtJDHtx&OfIMU1(3;uh;9cg<=&kh!d1AQNBWaE#w=Nr>M?q@&eUcrQTQ72i)!o`4QzOl%G+4LHsJ@cYGKB z=wV})Wwl|1+yfw6FhTAbkBmD;gqw6B~G9}09$q#FPL delta 615 zcmZ|LTWi!n6ae6DyQ}edziYK1h>wFHD8A}~T1#oYw9*$PW=FabGbI_D_NhHPlig&S zt=o-O5EO5q76j|14~jp)f8fvY%!nX@FW*Tf=SHVrb&5Je-A1*9N#4{w z#6q=JTaBkmKgZ++>X)cr;o@th-=Kbr>K)>m!uLvlK)sIYBkE76KV$MG(O)t7)=0kV z_55ew&B0Qs)P+st3Jj6Uu#J3ReQa%8Q>QyIJXz;)RRl5=zR$zdDI$*t{NK}dBt8U*nWk4JUB6y)CBHT9 zMo}!nnrZD26=wF=sq;k6O|emrRYzPlOCz)R$|W{>kz)YDs%jT}X*O!~-d>)O(0S|LHV6&c0%tSKe?!9r}_4u^#scClV x`W%}dW0&uoO`T?yzDoZ8eWp&wq@0laoac%Afi$URsV45Fn87})Ll$f0{1;DFvHAc2 diff --git a/SwiftGen.playground/Resources/Wizard.storyboardc/Info.plist b/SwiftGen.playground/Resources/Wizard.storyboardc/Info.plist index a923b335f7c3f55406b6d6104800593fc2022657..209ef2a87ef665d660c61c53a4d1143b4cfff3ec 100644 GIT binary patch delta 89 zcmZ3=w3KPWbnz(1;)&~&jB!ZCIv1rTmZSpp<(KA_ X2rzQ+o2OJYPhYfd&xPBQnHiM;#G4^( delta 89 zcmZ3=w3KPWbn)nbqSUn1qSU^UhASD&LbnwSSg6+nx5(c5OvzuF+W{eUP z1Z4%)U(u<5t2cA#*5Q2~%zN|werJB7gJ^d?Gf4_a87vjh(#kS%##KmD~vE)U3z+}XS zQN>}!F=PuykX^w1l9fJt6 zsjMB4c7cAA+}ti#sGT}9sMUcO9(s`ujH}^&E}8jrOIPwmdTdtk3mE81NTzp`T%dQQ qkY!i*seNi1xD@C?EN#&vYEh#|ZE+ErgW7p^HI-XEpgSTPwtoTr)N_mg delta 474 zcmZ{gPfG$p7{+%s)29DLgi)R9Xha~@vBW?EwakKUX;Un1v$C@xo^p0}b^VvhT99?I zpe}ufj(v~%0DXntoqLD(_r5dpJ`WG`8vF`&7BVxEBoU|x)Q>DlLFh+*NwUjTv&u|| znKf3fbJpU#!>lgnJ;v`Dd*J+$S$)QznDuP)0js=N{Eb=fHvi~e-)s)DiI|Gdbeh2` z&KrtGQsh{{#S=wUcM1h~>17j1B^M`o?Hudz>w;0*$EEJ~s=Fw!%sI)-TCQYZ>WZzH zMhMQkTk^6?<@BwWxq~KvP2}aZ&={~TcqiBrY@<=QZ=*@UVW1sw&Xg9D4D{q z5o&r)DyFF-@mw0AIyE%Cl+(`ibI;UE;2=-oAoy^g&;9f*ZP(BcoVq9kte|ON6~v9S TjxVr|NgmVx)T%G+uKVd9Ay0u< diff --git a/SwiftGen.playground/Resources/Wizard.storyboardc/Validate_Password.nib b/SwiftGen.playground/Resources/Wizard.storyboardc/Validate_Password.nib index c7432eaf9eb48741af0b86d9b6eb771a3cb10f96..d1bfdccd5c82b3eace1cb101f9e29be76f5d23c9 100644 GIT binary patch delta 401 zcmZ|JOH0E*5C`zIH8vgJdJ`1<5aQVfLJw6@?6t&Z4}p-CO`!DDOtRaTP2041@dXOL zj($TYd-LGsw=6UBpBb0O<>~%`?4jx_Or^{)o+avD$p=gxQ9hx3M)i`&SB&41%q zCZ8z3F#1OM<24GMqG1?QSR_ZVL`qmAhuX3BPMca;-S%9^4q4;E4uTdJjxq;OqV55# zYge@v*@XqN51V8LTVxLkWNLNwu!B&cZv>ruGS(^or=`{~2)StAa9cPN*w8`qpvinz zcUkM0`=Q{T$3$w4sz;};$Aa^g&qSVRQu6>-^vEkV zy3u9d(CLUvHy<;c^Z(4mg}5-n z2|ft>Wb}*BZxT$cMy9udQdr;)gt72Z$mB>F*EP#DG!Hc@n(H|!yQA8+k-4OQUSEA zH9quVh1-FAI?ZmjnH)la-$Pgw!C|>{W?IO-YT5`hnSd-Jc@bIW&H}SrC~8935a-z> zfpsBp|KEy~)YXxV>ijFmPMT!la8fH*|DJ19EKNtZj%6U6fWoWBey#kwY - + + + + + - - + + @@ -14,18 +17,18 @@ - + - + @@ -45,9 +48,9 @@ - + - + @@ -63,9 +66,9 @@ - + - + @@ -77,15 +80,15 @@ - + - + - + - + diff --git a/SwiftGen.playground/Resources/Wizard.storyboardc/rJ7-m2-Mn7-view-wtR-sc-VB5.nib b/SwiftGen.playground/Resources/Wizard.storyboardc/rJ7-m2-Mn7-view-wtR-sc-VB5.nib index 7b23ffaca11331babb0369d4df3529acbe5ebc04..4915dfeecd0cec4e3364acab66a29427a21bfe7d 100644 GIT binary patch delta 733 zcmZvaPiqrF7{)hE#@&5u{MSV5Sv@G`(1L;oD<~+U&|)okU7Aq~Yg3Zcf~S2mv)#!i zY10g8S`}Hx*?gbGGVkR0` zS*x%nvJDJdjJ1(%V%WiWORz3t57`^!ea;6Vdynh`@{b|zApeT^4TJBj`lA`{u`j{? z$o&(RWes3VaRZJk29Q;Z47UxdhJ84u^i3F7T!)NeA5IzNv{AG!YpHAJ!w5rxSj8|# ztYK6~))1@h)#znd=`zu8M4!35k;v}+N$n*(SJ}4Uh+@NV&2ZbWYA75rQ>2e?QQsF% z{qD`%3qCDPuPoAH9Y&N-I87}UOXUZ&v{YEk>w}c;hP0iYE%)s)nYKaxvM;2DLeIW* zS&|q=)x8*!hQ!b|&KUGF21jvdO55iqK?xPoA^}0dEh~hC64uS_nj5(t_t016l+&Gk zOWv6(?B5C4;ob$|phMxHOEE{}sZXDHWvX6>Igl2dlvmx09&=vLEtSee>OGtBy?Oey z;H&v_%P$`0rsr~x=$($qkU4SQD|@qr<>EZm6?E4e&KQ~ym8LhyL2r{o+E8s-{&dEt zn8Tkh&=qa`?Sdy^~u1(p*_UOLMY<9Ay zCT6g)5UaJe0kzgz)T3YzMFqh>!T-eBktkZc{9xYu-kbTp*-7jqnyHJ-2N2-aSgqdV z9gnSm`;4(QVC&#^8GixdC9qe(H#pk@?=4ieE9@P>dk8)V?<3=%Ja3n=F92U*%l+O* zj~Is0B}nlBIiTp00YzVPNwcQO@bcB!QrV%_?W}F(=ycJ}QztofE0sKVJ$WXTX_Lch zaFq-yE|MX|28k+G@k(4mY)Gcf?kOp#%cr#79k z%5;^)RAEsI8@*=Mp*J(swiyocR@u5zyyN7Q()>p$5W|z=(!}_flbbHg(TM8H&HfXk z6`zSb*_!Y+z<&+iCiri-JR2F_9*lmDB>UCaBSI7xH1BIJY1T9) z3J6yHfW+mGSo%hIQ3bV-ivV%M@N|d`ExBjSDArlr~9jLQ6BFVI%(RP^^DZ4St5vC*W!^>DzZrOEjj>PRH8=w-F%N|}v6mEZ8l zSoja2J5J)7p7fK6vrpE$KFh#O(>xh(m-f|6i5hM+9Dx^L`rKRTolJq4@kwp1}r&VYrP?; z7yEhFU3=q@%`R=F)(&5ZAQ%!zA%b3zI6ze)aR7Qkf?F@#IB)<7-b`46Kv?o`=FR7S z{_pK{!=(nhDf5sJ@-O}$_z78xZGSBxZq@`7jDj&%%8!hJRY9L%s45jc?v4CebQ9q7KY@N#C=VI}zJ2A5szrWVQ9X{$y+H z$JRuA*A(M6=18zif|K-Q&Hp~Gh1XP-eT*Do?d!!2-1)1Fzb#8TW>`ITbm`bn(NG`i z?^2SQsw5J!+N-48zQFdz4{-iB){gv@{z*^KX|iOL1u!%**-r!AnJ=+_kshN*NzE`@ zi-D(vmI?K2rgMbO+x&L!xXQPar%Pry5=r4Rr-T(b5-5|vtVltH1m;L!!S;+D>g
  • vHhoPjbavk^)qFY;$ zXBb8P!B!&+ye9D1)^VAT-gaYQLfmZ1Xa>kP=<`{T-t_6-`qH z`1LJ#iMQun^WJ>Uhqw~`pI~2+o%}tG80(T7j&x)GBJrQ)9h#=b_YG>YE;(Jje6&YC zIGBj3(RA$KYghec;-3|DGhfW^KfxA;l^n+J>@?fr?yWVK7l2nlG}NUe6qOXS(NO0g f3QoE&YQJu@Ux&PKCftVPccrcRai!Ua6?rn-2)F$(r({s+f z=RfD3d#U?kx3ebu69C+#=bj(nIePE!0`PK{X_@6I#4=(9?djsw$%1!Kn)cw~6*;)4ZB@uj9uzEa!Wp`~%MXXxn!z=dNkrw~7zS_$y97GTh(r z`0oYhkAnTDRq~-_?%-ImSE8Bg!IHBMO?N%w@eOF$eQ3E`5Z$fx3?LeV6x)VqZ^xp$ zgM34Xxp%R2>F2+E*>$A5%%389yqjoqg?K^Im2@P}vj%^WA`QMla*#L+Fwd8gG0$Hk z&dG#4_^RM*%Cs8z7r=j=Z>4CR&2h0P51m!$th2Kn4}FG`E%ir6qoFbNX!<-e6!W7A z^@u37j4}-h^whRM-r+o+&$!OaG&IANoqZLnB*48fAqB!U*>Dc{{4=zS76q9xM07LTj?u$E41lV9;p zihs_ZCKiQBzy6^s0B6_@8T#(AQ*0KbaD%@@oCWVz;O+4aGEeeXh@Y@i>>RrYD`xns z^w$!KTTNqCU`_e`HDC+CTDn$IQiHFT+)QjMZykZ?Rth%V?`m$o# z%W{(!B$rD*`4Nkcv;Fz4qY&-+ni^DKGn~^}>d%+_buvu8k@#QR8_H+l$jI0z9a+?? zuw_!i5?S{d;+$-09{g4CH)X3^Gh3%&JRMD@(z+U(d@ml`uO8CkG#bIdv7^CbdxEM-aKcMN8Z?$y< zst{<(dsKtK0tDK3$55+q@)8N(SG-2@a-G$R@s(c+r!E#cc&mvZ4qI5YX7s)O@5PmH{pNPAKK F!QWW|Q#k+t diff --git a/SwiftGen.playground/Resources/Wizard.storyboardc/w6o-YQ-YLg-view-N1u-m6-6Oc.nib b/SwiftGen.playground/Resources/Wizard.storyboardc/w6o-YQ-YLg-view-N1u-m6-6Oc.nib index fc50517544a8682919b3a6ce30dff02054035dab..cb86aae9658aa57f22b880d701d123f56918056c 100644 GIT binary patch delta 757 zcmZvaJ#5oJ6vtm`Ut$gdrIhbd!NSA}17e{_ND-n)pms$mc(4@W$}v<-$=P?l#x1JB z6-jAn8Qen31WX+e0~-wKCGV{*n#2uR7Wn7CYd73&^J#H z;&lNaUL!~Ab94Z20TC2G69grS`xH}6LH8ol_e1KoMX~rNwg>mDx0Zmms#GLsZO}So zMb$Nr8#|=`%4Y5gN-;yw zUd8Pydpe!6V%9E9R81$deRFgFFOHArkM+(phA*AJ?w0ZII_)^+n=#8DiOaa2<F Df>OMI delta 776 zcmZvaO=uHA6vtn?JIOj4Kk8T2w%|oC9=zzmn+i&xRi$y)`Z{EC}_x}GkyT4*OP=-$T_Mbi?kof6c-g|6`#idYd#znN&%ITqjF(Gv;pr zEYs~6cogS>1sX%TM9^K`bsMgN4l4Hdbdy7B8{C4RTaf;1?bt<%!EL$+8HiNKJ?LAa zTXBmT>t*+LQphS|&bHE* lp~?b3=zTajlgZ~!=dB47s`&m)K9|Hl@3?IzXZ**J;omqW#5w=~ diff --git a/SwiftGen.playground/contents.xcplayground b/SwiftGen.playground/contents.xcplayground index 8445721f..705f0662 100644 --- a/SwiftGen.playground/contents.xcplayground +++ b/SwiftGen.playground/contents.xcplayground @@ -1,10 +1,10 @@ - - - + + + \ No newline at end of file