diff --git a/WooCommerce/Classes/AppDelegate.swift b/WooCommerce/Classes/AppDelegate.swift
index f94809ecd11..6e6d91fe5c0 100644
--- a/WooCommerce/Classes/AppDelegate.swift
+++ b/WooCommerce/Classes/AppDelegate.swift
@@ -1,10 +1,13 @@
import UIKit
import CoreData
+
import CocoaLumberjack
+import WordPressUI
import WordPressKit
import WordPressAuthenticator
+
// MARK: - Woo's App Delegate!
//
@UIApplicationMain
@@ -30,7 +33,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
// Setup the Interface!
setupMainWindow()
- setupInterfaceAppearance()
+ setupComponentsAppearance()
// Setup Components
setupAuthenticationManager()
@@ -88,9 +91,16 @@ private extension AppDelegate {
window?.makeKeyAndVisible()
}
+ /// Sets up all of the component(s) Appearance.
+ ///
+ func setupComponentsAppearance() {
+ setupWooAppearance()
+ setupFancyButtonAppearance()
+ }
+
/// Sets up WooCommerce's UIAppearance.
///
- func setupInterfaceAppearance() {
+ func setupWooAppearance() {
UINavigationBar.appearance().barTintColor = StyleManager.wooCommerceBrandColor
UINavigationBar.appearance().titleTextAttributes = [.foregroundColor: UIColor.white]
UINavigationBar.appearance().isTranslucent = false
@@ -98,6 +108,19 @@ private extension AppDelegate {
UIApplication.shared.statusBarStyle = .lightContent
}
+ /// Sets up FancyButton's UIAppearance.
+ ///
+ func setupFancyButtonAppearance() {
+ let appearance = FancyButton.appearance()
+ appearance.titleFont = UIFont.font(forStyle: .headline, weight: .bold)
+ appearance.primaryNormalBackgroundColor = StyleManager.buttonPrimaryColor
+ appearance.primaryNormalBorderColor = StyleManager.buttonPrimaryHighlightedColor
+ appearance.primaryHighlightBackgroundColor = StyleManager.buttonPrimaryHighlightedColor
+ appearance.primaryHighlightBorderColor = StyleManager.buttonPrimaryHighlightedColor
+ appearance.disabledBorderColor = StyleManager.buttonPrimaryHighlightedColor
+ appearance.disabledBackgroundColor = StyleManager.buttonPrimaryHighlightedColor
+ }
+
/// Sets up the WordPress Authenticator.
///
func setupAuthenticationManager() {
@@ -135,7 +158,7 @@ private extension AppDelegate {
fatalError()
}
- authenticationManager.showLogin(from: rootViewController)
+ authenticationManager.displayAuthentication(from: rootViewController)
}
/// Indicates if there's a default WordPress.com account.
diff --git a/WooCommerce/Classes/Authentication/AuthenticationManager.swift b/WooCommerce/Classes/Authentication/AuthenticationManager.swift
index d2335e7a946..55cc2445ad2 100644
--- a/WooCommerce/Classes/Authentication/AuthenticationManager.swift
+++ b/WooCommerce/Classes/Authentication/AuthenticationManager.swift
@@ -1,5 +1,6 @@
import Foundation
import WordPressAuthenticator
+import WordPressUI
@@ -13,7 +14,7 @@ class AuthenticationManager {
let configuration = WordPressAuthenticatorConfiguration(wpcomClientId: ApiCredentials.dotcomAppId,
wpcomSecret: ApiCredentials.dotcomSecret,
wpcomScheme: ApiCredentials.dotcomAuthScheme,
- wpcomTermsOfServiceURL: Constants.termsOfServiceURL,
+ wpcomTermsOfServiceURL: WooConstants.termsOfServiceUrl,
googleLoginClientId: ApiCredentials.googleClientId,
googleLoginServerClientId: ApiCredentials.googleServerId,
googleLoginScheme: ApiCredentials.googleAuthScheme,
@@ -26,12 +27,10 @@ class AuthenticationManager {
/// Displays the Login Flow using the specified UIViewController as presenter.
///
- func showLogin(from presenter: UIViewController) {
- let loginViewController = WordPressAuthenticator.signinForWordPress()
- loginViewController.restrictToWPCom = true
- loginViewController.offerSignupOption = false
+ func displayAuthentication(from presenter: UIViewController) {
+ let prologueViewController = LoginPrologueViewController()
+ let navigationController = LoginNavigationController(rootViewController: prologueViewController)
- let navigationController = LoginNavigationController(rootViewController: loginViewController)
presenter.present(navigationController, animated: true, completion: nil)
}
@@ -169,16 +168,3 @@ extension AuthenticationManager: WordPressAuthenticatorDelegate {
// TODO: Integrate Tracks
}
}
-
-
-/// Nested Types
-///
-extension AuthenticationManager {
-
- struct Constants {
-
- /// Terms of Service Website. Displayed by the Authenticator (when / if needed).
- ///
- static let termsOfServiceURL = "https://wordpress.com/tos/"
- }
-}
diff --git a/WooCommerce/Classes/Authentication/Prologue/LoginPrologueViewController.swift b/WooCommerce/Classes/Authentication/Prologue/LoginPrologueViewController.swift
new file mode 100644
index 00000000000..234aef81335
--- /dev/null
+++ b/WooCommerce/Classes/Authentication/Prologue/LoginPrologueViewController.swift
@@ -0,0 +1,154 @@
+import Foundation
+import UIKit
+import SafariServices
+import WordPressAuthenticator
+
+
+/// Displays the WooCommerce Prologue UI.
+///
+class LoginPrologueViewController: UIViewController {
+
+ /// White-Background View, to be placed surrounding the bottom area.
+ ///
+ @IBOutlet var backgroundView: UIView!
+
+ /// Label to be displayed at the top of the Prologue.
+ ///
+ @IBOutlet var upperLabel: UILabel!
+
+ /// Disclaimer Label
+ ///
+ @IBOutlet var disclaimerTextView: UITextView!
+
+ /// Jetpack Logo ImageVIew
+ ///
+ @IBOutlet var jetpackImageView: UIImageView!
+
+ /// Default Action Button.
+ ///
+ @IBOutlet var loginButton: UIButton!
+
+
+ // MARK: - Overridden Properties
+
+ override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
+ return .portrait
+ }
+
+
+ // MARK: - Overridden Methods
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+
+ setupMainView()
+ setupBackgroundView()
+ setupJetpackImage()
+ setupDisclaimerLabel()
+ setupUpperLabel()
+ setupLoginButton()
+ }
+
+ override func viewWillAppear(_ animated: Bool) {
+ super.viewWillAppear(animated)
+ navigationController?.setNavigationBarHidden(true, animated: animated)
+ }
+}
+
+
+// MARK: - Initialization Methods
+//
+private extension LoginPrologueViewController {
+
+ func setupMainView() {
+ view.backgroundColor = StyleManager.wooCommerceBrandColor
+ }
+
+ func setupBackgroundView() {
+ backgroundView.layer.masksToBounds = false
+ backgroundView.layer.shadowOpacity = 0.2
+ }
+
+ func setupUpperLabel() {
+ upperLabel.text = NSLocalizedString("Check your WooCommerce store on the go, fulfill your orders and get notifications of new sales.", comment: "Login Prologue Legend")
+ upperLabel.font = UIFont.font(forStyle: .subheadline, weight: .bold)
+ upperLabel.textColor = .white
+ }
+
+ func setupJetpackImage() {
+ jetpackImageView.image = UIImage.jetpackLogoImage.imageWithTintColor(.jetpackGreen)
+ }
+
+ func setupDisclaimerLabel() {
+ disclaimerTextView.attributedText = disclaimerAttributedText
+ disclaimerTextView.textContainerInset = .zero
+ }
+
+ func setupLoginButton() {
+ let title = NSLocalizedString("Log in with Jetpack", comment: "Authentication Login Button")
+ loginButton.setTitle(title, for: .normal)
+ loginButton.backgroundColor = .clear
+ }
+}
+
+
+// MARK: - UITextViewDeletgate Conformance
+//
+extension LoginPrologueViewController: UITextViewDelegate {
+
+ func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
+ displaySafariViewController(at: URL)
+ return false
+ }
+}
+
+
+// MARK: - Action Handlers
+//
+extension LoginPrologueViewController {
+
+ /// Opens SafariViewController at the specified URL.
+ ///
+ func displaySafariViewController(at url: URL) {
+ let safariViewController = SafariViewController(url: url)
+ safariViewController.modalPresentationStyle = .pageSheet
+ present(safariViewController, animated: true, completion: nil)
+ }
+
+ /// Proceeds with the Login Flow.
+ ///
+ @IBAction func loginWasPressed() {
+ let loginViewController = WordPressAuthenticator.signinForWordPress()
+ loginViewController.restrictToWPCom = true
+ loginViewController.offerSignupOption = false
+
+ navigationController?.pushViewController(loginViewController, animated: true)
+ navigationController?.setNavigationBarHidden(false, animated: true)
+ }
+}
+
+
+// MARK: - Private Methods
+//
+private extension LoginPrologueViewController {
+
+ /// Returns the Disclaimer Attributed Text (which contains a link to the Jetpack Setup URL).
+ ///
+ var disclaimerAttributedText: NSAttributedString {
+ let disclaimerText = NSLocalizedString("This app requires Jetpack to be able to connect to your WooCommerce Store.\nFor configuration instructions, ", comment: "Login Disclaimer Text")
+ let disclaimerAttributes: [NSAttributedStringKey: Any] = [
+ .font: UIFont.font(forStyle: .caption1, weight: .thin),
+ .foregroundColor: UIColor.black
+ ]
+
+ let readText = NSLocalizedString("read here.", comment: "Login Disclaimer Linked Text")
+ var readAttributes = disclaimerAttributes
+ readAttributes[.link] = URL(string: WooConstants.jetpackSetupUrl)
+
+ let readAttrText = NSMutableAttributedString(string: readText, attributes: readAttributes)
+ let disclaimerAttrText = NSMutableAttributedString(string: disclaimerText, attributes: disclaimerAttributes)
+ disclaimerAttrText.append(readAttrText)
+
+ return disclaimerAttrText
+ }
+}
diff --git a/WooCommerce/Classes/Authentication/Prologue/LoginPrologueViewController.xib b/WooCommerce/Classes/Authentication/Prologue/LoginPrologueViewController.xib
new file mode 100644
index 00000000000..d1966264bdf
--- /dev/null
+++ b/WooCommerce/Classes/Authentication/Prologue/LoginPrologueViewController.xib
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ L1
+L2
+L3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/WooCommerce/Classes/Extensions/UIColor+Woo.swift b/WooCommerce/Classes/Extensions/UIColor+Woo.swift
new file mode 100644
index 00000000000..cf8a4537724
--- /dev/null
+++ b/WooCommerce/Classes/Extensions/UIColor+Woo.swift
@@ -0,0 +1,14 @@
+import Foundation
+import UIKit
+
+
+/// WooCommerce Color Constants
+///
+extension UIColor {
+
+ /// Returns Jetpack Green Color
+ ///
+ static var jetpackGreen: UIColor {
+ return UIColor(red: 83.0/255.0, green: 186.0/255.0, blue: 68.0/255.0, alpha: 1.0)
+ }
+}
diff --git a/WooCommerce/Classes/Extensions/UIFont+Helpers.swift b/WooCommerce/Classes/Extensions/UIFont+Helpers.swift
index bde6913fc98..09e7bd297f3 100644
--- a/WooCommerce/Classes/Extensions/UIFont+Helpers.swift
+++ b/WooCommerce/Classes/Extensions/UIFont+Helpers.swift
@@ -1,5 +1,8 @@
import UIKit
+
+/// WooCommerce UIFont Constants
+///
extension UIFont {
static var largeTitle: UIFont {
return .preferredFont(forTextStyle: .largeTitle)
@@ -45,3 +48,26 @@ extension UIFont {
return .preferredFont(forTextStyle: .caption2)
}
}
+
+
+/// WooCommerce UIFont Helpers
+///
+extension UIFont {
+
+ /// Returns a UIFont instance for the specified Style + Weight.
+ ///
+ class func font(forStyle style: UIFontTextStyle, weight: UIFont.Weight) -> UIFont {
+ let targetSize = pointSize(for: style)
+ return UIFont.systemFont(ofSize: targetSize, weight: weight)
+ }
+
+ /// Returns the System's Point Size for the specified Style.
+ ///
+ private class func pointSize(for style: UIFontTextStyle) -> CGFloat {
+ let descriptor = UIFontDescriptor.preferredFontDescriptor(withTextStyle: style)
+ let initialFont = UIFont(descriptor: descriptor, size: CGFloat(0.0))
+ let scaledFont = UIFontMetrics(forTextStyle: style).scaledFont(for: initialFont)
+
+ return scaledFont.pointSize
+ }
+}
diff --git a/WooCommerce/Classes/Extensions/UIImage+Woo.swift b/WooCommerce/Classes/Extensions/UIImage+Woo.swift
new file mode 100644
index 00000000000..b76dc6c02ee
--- /dev/null
+++ b/WooCommerce/Classes/Extensions/UIImage+Woo.swift
@@ -0,0 +1,14 @@
+import Foundation
+import UIKit
+
+
+/// WooCommerce UIImage Assets
+///
+extension UIImage {
+
+ /// Jetpack Logo Image
+ ///
+ static var jetpackLogoImage: UIImage {
+ return UIImage(named: "icon-jetpack-gray")!
+ }
+}
diff --git a/WooCommerce/Classes/Styles/PaddedLabel.swift b/WooCommerce/Classes/Styles/PaddedLabel.swift
index 0b366ccb83f..4ea12158530 100644
--- a/WooCommerce/Classes/Styles/PaddedLabel.swift
+++ b/WooCommerce/Classes/Styles/PaddedLabel.swift
@@ -10,7 +10,7 @@ import UIKit
@IBInspectable var textInsets = Constants.defaultInsets
- // MARK: - Overriden Methods
+ // MARK: - Overridden Methods
override func drawText(in rect: CGRect) {
super.drawText(in: UIEdgeInsetsInsetRect(rect, textInsets))
diff --git a/WooCommerce/Classes/Styles/Style.swift b/WooCommerce/Classes/Styles/Style.swift
index 3f58e789aa0..db1c5614449 100644
--- a/WooCommerce/Classes/Styles/Style.swift
+++ b/WooCommerce/Classes/Styles/Style.swift
@@ -15,6 +15,8 @@ protocol Style {
var statusNotIdentifiedBoldColor: UIColor { get }
var defaultTextColor: UIColor { get }
var sectionTitleColor: UIColor { get }
+ var buttonPrimaryColor: UIColor { get }
+ var buttonPrimaryHighlightedColor: UIColor { get }
}
// MARK: - WooCommerce's Default Style
@@ -31,6 +33,8 @@ class DefaultStyle: Style {
let statusNotIdentifiedBoldColor = UIColor(red: 226.0/255.0, green: 226.0/255.0, blue: 226.0/255.0, alpha: 1.0)
let defaultTextColor = UIColor.black
let sectionTitleColor = UIColor.darkGray
+ let buttonPrimaryColor = UIColor(red: 0x96/255.0, green: 0x58/255.0, blue: 0x8A/255.0, alpha: 0xFF/255.0)
+ let buttonPrimaryHighlightedColor = UIColor(red: 0x6E/255.0, green: 0x29/255.0, blue: 0x67/255.0, alpha: 0xFF/255.0)
}
@@ -94,4 +98,12 @@ class StyleManager {
static var sectionTitleColor: UIColor {
return active.sectionTitleColor
}
+
+ static var buttonPrimaryColor: UIColor {
+ return active.buttonPrimaryColor
+ }
+
+ static var buttonPrimaryHighlightedColor: UIColor {
+ return active.buttonPrimaryHighlightedColor
+ }
}
diff --git a/WooCommerce/Classes/System/WooConstants.swift b/WooCommerce/Classes/System/WooConstants.swift
new file mode 100644
index 00000000000..f961211a0c2
--- /dev/null
+++ b/WooCommerce/Classes/System/WooConstants.swift
@@ -0,0 +1,19 @@
+import Foundation
+
+
+/// WooCommerce Constants
+///
+struct WooConstants {
+
+ /// Private: No-OP!
+ ///
+ private init() {}
+
+ /// Jetpack Setup URL
+ ///
+ static let jetpackSetupUrl = "https://jetpack.com/support/getting-started-with-jetpack/"
+
+ /// Terms of Service Website. Displayed by the Authenticator (when / if needed).
+ ///
+ static let termsOfServiceUrl = "https://wordpress.com/tos/"
+}
diff --git a/WooCommerce/Classes/Tools/SafariViewController.swift b/WooCommerce/Classes/Tools/SafariViewController.swift
new file mode 100644
index 00000000000..f040c11c76f
--- /dev/null
+++ b/WooCommerce/Classes/Tools/SafariViewController.swift
@@ -0,0 +1,32 @@
+import Foundation
+import SafariServices
+
+
+/// WooCommerce SafariViewController: Allows us to control the StatusBar Style
+///
+class SafariViewController: SFSafariViewController {
+
+ /// Preserves the StatusBar Style present, prior to when this ViewController gets displayed.
+ ///
+ private var previousStatusBarStyle: UIStatusBarStyle?
+
+ /// StatusBarStyle to be applied
+ ///
+ var statusBarStyle: UIStatusBarStyle = .default
+
+
+ // MARK: - Overridden Methods
+
+ override open func viewWillAppear(_ animated: Bool) {
+ super.viewWillAppear(animated)
+
+ previousStatusBarStyle = UIApplication.shared.statusBarStyle
+ UIApplication.shared.statusBarStyle = statusBarStyle
+ }
+
+ override open func viewWillDisappear(_ animated: Bool) {
+ super.viewWillDisappear(animated)
+
+ UIApplication.shared.statusBarStyle = previousStatusBarStyle ?? .lightContent
+ }
+}
diff --git a/WooCommerce/Resources/Base.lproj/LaunchScreen.storyboard b/WooCommerce/Resources/Base.lproj/LaunchScreen.storyboard
index 90e0b926f31..1920cd2a970 100644
--- a/WooCommerce/Resources/Base.lproj/LaunchScreen.storyboard
+++ b/WooCommerce/Resources/Base.lproj/LaunchScreen.storyboard
@@ -1,11 +1,10 @@
-
+
-
-
+
@@ -20,6 +19,10 @@
+
+
+
+
diff --git a/WooCommerce/Resources/Images.xcassets/Contents.json b/WooCommerce/Resources/Images.xcassets/Contents.json
new file mode 100644
index 00000000000..da4a164c918
--- /dev/null
+++ b/WooCommerce/Resources/Images.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/WooCommerce/Resources/Images.xcassets/icon-jetpack-gray.imageset/Contents.json b/WooCommerce/Resources/Images.xcassets/icon-jetpack-gray.imageset/Contents.json
new file mode 100644
index 00000000000..d7356eb26c2
--- /dev/null
+++ b/WooCommerce/Resources/Images.xcassets/icon-jetpack-gray.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "icon-jetpack-gray.pdf"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/WooCommerce/Resources/Images.xcassets/icon-jetpack-gray.imageset/icon-jetpack-gray.pdf b/WooCommerce/Resources/Images.xcassets/icon-jetpack-gray.imageset/icon-jetpack-gray.pdf
new file mode 100644
index 00000000000..581669c8bce
Binary files /dev/null and b/WooCommerce/Resources/Images.xcassets/icon-jetpack-gray.imageset/icon-jetpack-gray.pdf differ
diff --git a/WooCommerce/Resources/Images.xcassets/prologue-hands.imageset/Contents.json b/WooCommerce/Resources/Images.xcassets/prologue-hands.imageset/Contents.json
new file mode 100644
index 00000000000..fa033c3b6d6
--- /dev/null
+++ b/WooCommerce/Resources/Images.xcassets/prologue-hands.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "illustration-hands.pdf"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/WooCommerce/Resources/Images.xcassets/prologue-hands.imageset/illustration-hands.pdf b/WooCommerce/Resources/Images.xcassets/prologue-hands.imageset/illustration-hands.pdf
new file mode 100644
index 00000000000..95fd44601a8
Binary files /dev/null and b/WooCommerce/Resources/Images.xcassets/prologue-hands.imageset/illustration-hands.pdf differ
diff --git a/WooCommerce/WooCommerce.xcodeproj/project.pbxproj b/WooCommerce/WooCommerce.xcodeproj/project.pbxproj
index 7f89d4d07fd..26f0f0ba4af 100644
--- a/WooCommerce/WooCommerce.xcodeproj/project.pbxproj
+++ b/WooCommerce/WooCommerce.xcodeproj/project.pbxproj
@@ -42,6 +42,13 @@
B56DB3D42049BFAA00D4AA8E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B56DB3D32049BFAA00D4AA8E /* Assets.xcassets */; };
B56DB3D72049BFAA00D4AA8E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B56DB3D52049BFAA00D4AA8E /* LaunchScreen.storyboard */; };
B5A8F8A920B84D3F00D211DE /* ApiCredentials.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A8F8A720B84D3F00D211DE /* ApiCredentials.swift */; };
+ B5A8F8AD20B88D9900D211DE /* LoginPrologueViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A8F8AC20B88D9900D211DE /* LoginPrologueViewController.swift */; };
+ B5A8F8AF20B88DCC00D211DE /* LoginPrologueViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5A8F8AE20B88DCC00D211DE /* LoginPrologueViewController.xib */; };
+ B5BE368E20BED80B00BE0A8C /* SafariViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BE368D20BED80B00BE0A8C /* SafariViewController.swift */; };
+ B5D1AFB420BC445A00DB0E8C /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B5D1AFB320BC445900DB0E8C /* Images.xcassets */; };
+ B5D1AFB820BC510200DB0E8C /* UIImage+Woo.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D1AFB720BC510200DB0E8C /* UIImage+Woo.swift */; };
+ B5D1AFBA20BC515600DB0E8C /* UIColor+Woo.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D1AFB920BC515600DB0E8C /* UIColor+Woo.swift */; };
+ B5D1AFC020BC67C200DB0E8C /* WooConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D1AFBF20BC67C200DB0E8C /* WooConstants.swift */; };
B5EE26C020A5EE6600468622 /* Storage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5EE26BF20A5EE6600468622 /* Storage.framework */; };
B5EE26C120A5EE8100468622 /* Storage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5EE26BF20A5EE6600468622 /* Storage.framework */; };
B5EE26C220A5EE8100468622 /* Storage.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B5EE26BF20A5EE6600468622 /* Storage.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
@@ -143,6 +150,13 @@
B56DB3E32049BFAA00D4AA8E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
B5A8F8A720B84D3F00D211DE /* ApiCredentials.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ApiCredentials.swift; path = DerivedSources/ApiCredentials.swift; sourceTree = SOURCE_ROOT; };
B5A8F8A820B84D3F00D211DE /* InfoPlist.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = InfoPlist.h; path = DerivedSources/InfoPlist.h; sourceTree = SOURCE_ROOT; };
+ B5A8F8AC20B88D9900D211DE /* LoginPrologueViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginPrologueViewController.swift; sourceTree = ""; };
+ B5A8F8AE20B88DCC00D211DE /* LoginPrologueViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = LoginPrologueViewController.xib; sourceTree = ""; };
+ B5BE368D20BED80B00BE0A8C /* SafariViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariViewController.swift; sourceTree = ""; };
+ B5D1AFB320BC445900DB0E8C /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
+ B5D1AFB720BC510200DB0E8C /* UIImage+Woo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Woo.swift"; sourceTree = ""; };
+ B5D1AFB920BC515600DB0E8C /* UIColor+Woo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Woo.swift"; sourceTree = ""; };
+ B5D1AFBF20BC67C200DB0E8C /* WooConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WooConstants.swift; sourceTree = ""; };
B5EE26BF20A5EE6600468622 /* Storage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Storage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
CE17C2E020ACA06800AFBD20 /* BillingDetailsTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BillingDetailsTableViewCell.swift; sourceTree = ""; };
CE17C2E120ACA06800AFBD20 /* BillingDetailsTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BillingDetailsTableViewCell.xib; sourceTree = ""; };
@@ -244,6 +258,7 @@
B55D4C0420B6026700D7A50F /* Authentication */ = {
isa = PBXGroup;
children = (
+ B5A8F8AB20B88D8400D211DE /* Prologue */,
B55D4C0520B6027100D7A50F /* AuthenticationManager.swift */,
);
path = Authentication;
@@ -253,6 +268,7 @@
isa = PBXGroup;
children = (
B55D4C2620B717C000D7A50F /* UserAgent.swift */,
+ B5BE368D20BED80B00BE0A8C /* SafariViewController.swift */,
);
path = Tools;
sourceTree = "";
@@ -311,6 +327,7 @@
B55D4C0420B6026700D7A50F /* Authentication */,
CE1CCB4C20572444000EE3AC /* Extensions */,
CE1CCB3E2056F204000EE3AC /* Styles */,
+ B5D1AFBE20BC67B500DB0E8C /* System */,
B509112B2049CFDF007D25DC /* Model */,
CE85535B209B5B6A00938BDC /* ViewModels */,
B56DB3EF2049C06D00D4AA8E /* ViewRelated */,
@@ -323,10 +340,11 @@
isa = PBXGroup;
children = (
B56DB3D32049BFAA00D4AA8E /* Assets.xcassets */,
+ B5D1AFB320BC445900DB0E8C /* Images.xcassets */,
+ CE1CCB4620570A6B000EE3AC /* en.lproj */,
B56DB3D82049BFAA00D4AA8E /* Info.plist */,
B56DB3D52049BFAA00D4AA8E /* LaunchScreen.storyboard */,
B56DB3D02049BFAA00D4AA8E /* WooCommerce.xcdatamodeld */,
- CE1CCB4620570A6B000EE3AC /* en.lproj */,
CEE005FF2077CA5A0079161F /* fake data */,
);
path = Resources;
@@ -341,6 +359,23 @@
path = DerivedSources;
sourceTree = "";
};
+ B5A8F8AB20B88D8400D211DE /* Prologue */ = {
+ isa = PBXGroup;
+ children = (
+ B5A8F8AC20B88D9900D211DE /* LoginPrologueViewController.swift */,
+ B5A8F8AE20B88DCC00D211DE /* LoginPrologueViewController.xib */,
+ );
+ path = Prologue;
+ sourceTree = "";
+ };
+ B5D1AFBE20BC67B500DB0E8C /* System */ = {
+ isa = PBXGroup;
+ children = (
+ B5D1AFBF20BC67C200DB0E8C /* WooConstants.swift */,
+ );
+ path = System;
+ sourceTree = "";
+ };
CE1CCB3E2056F204000EE3AC /* Styles */ = {
isa = PBXGroup;
children = (
@@ -366,8 +401,10 @@
children = (
CE4296B820A5E9E400B2AFBD /* CNContact+Helpers.swift */,
CE1F51262064345B00C6C810 /* UIColor+Helpers.swift */,
+ B5D1AFB920BC515600DB0E8C /* UIColor+Woo.swift */,
CE1F512820697F0100C6C810 /* UIFont+Helpers.swift */,
CE1F51242064179A00C6C810 /* UILabel+Helpers.swift */,
+ B5D1AFB720BC510200DB0E8C /* UIImage+Woo.swift */,
);
path = Extensions;
sourceTree = "";
@@ -518,6 +555,7 @@
buildActionMask = 2147483647;
files = (
B56DB3D72049BFAA00D4AA8E /* LaunchScreen.storyboard in Resources */,
+ B5A8F8AF20B88DCC00D211DE /* LoginPrologueViewController.xib in Resources */,
CED6021E20B35FDF0032C639 /* NoResultsTableViewCell.xib in Resources */,
B557DA1620979904005962F4 /* CustomerNoteTableViewCell.xib in Resources */,
B56DB3D42049BFAA00D4AA8E /* Assets.xcassets in Resources */,
@@ -525,6 +563,7 @@
B559EBAF20A0BF8F00836CD4 /* README.md in Resources */,
CEE005F82077C9690079161F /* order-list.json in Resources */,
CEE005FC2077CA030079161F /* order-949.json in Resources */,
+ B5D1AFB420BC445A00DB0E8C /* Images.xcassets in Resources */,
CEE005F62076C4040079161F /* Orders.storyboard in Resources */,
CE855367209BA6A700938BDC /* ShowHideSectionFooter.xib in Resources */,
CEE005FE2077CA2F0079161F /* order-937.json in Resources */,
@@ -674,12 +713,14 @@
CE85535D209B5BB700938BDC /* OrderDetailsViewModel.swift in Sources */,
CE263DE6206ACD220015A693 /* NotificationsViewController.swift in Sources */,
B50911312049E27A007D25DC /* OrdersViewController.swift in Sources */,
+ B5A8F8AD20B88D9900D211DE /* LoginPrologueViewController.swift in Sources */,
B5A8F8A920B84D3F00D211DE /* ApiCredentials.swift in Sources */,
CE17C2E220ACA06800AFBD20 /* BillingDetailsTableViewCell.swift in Sources */,
B55D4C2720B717C000D7A50F /* UserAgent.swift in Sources */,
CE1CCB402056F21C000EE3AC /* Style.swift in Sources */,
B50911322049E27A007D25DC /* SettingsViewController.swift in Sources */,
B55D4C0620B6027200D7A50F /* AuthenticationManager.swift in Sources */,
+ B5BE368E20BED80B00BE0A8C /* SafariViewController.swift in Sources */,
CE855364209BA6A700938BDC /* ShowHideSectionFooter.swift in Sources */,
B56DB3CA2049BFAA00D4AA8E /* AppDelegate.swift in Sources */,
CE1F512B206985DF00C6C810 /* PaddedLabel.swift in Sources */,
@@ -687,6 +728,7 @@
CE855366209BA6A700938BDC /* CustomerInfoTableViewCell.swift in Sources */,
CE1F51252064179A00C6C810 /* UILabel+Helpers.swift in Sources */,
B50911302049E27A007D25DC /* DashboardViewController.swift in Sources */,
+ B5D1AFB820BC510200DB0E8C /* UIImage+Woo.swift in Sources */,
CEE006082077D14C0079161F /* OrderDetailsViewController.swift in Sources */,
CE34DA2520A1ECD6005D8523 /* ContactViewModel.swift in Sources */,
CE4296B920A5E9E400B2AFBD /* CNContact+Helpers.swift in Sources */,
@@ -696,7 +738,9 @@
CE263DE8206ACE3E0015A693 /* MainTabBarController.swift in Sources */,
B56DB3D22049BFAA00D4AA8E /* WooCommerce.xcdatamodeld in Sources */,
B50911342049E493007D25DC /* Order.swift in Sources */,
+ B5D1AFBA20BC515600DB0E8C /* UIColor+Woo.swift in Sources */,
CE1CCB4B20570B1F000EE3AC /* OrderListCell.swift in Sources */,
+ B5D1AFC020BC67C200DB0E8C /* WooConstants.swift in Sources */,
CE1F512920697F0100C6C810 /* UIFont+Helpers.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;