From f8bca758dc3b85dec25e5ce39af7955859ba1cd2 Mon Sep 17 00:00:00 2001 From: Yishi Lin Date: Fri, 6 Oct 2017 21:45:03 +0800 Subject: [PATCH 01/42] Version bump --- pass/Info.plist | 2 +- passExtension/Info.plist | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pass/Info.plist b/pass/Info.plist index 0cd043c..a64e4c0 100644 --- a/pass/Info.plist +++ b/pass/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.2.9 + 0.2.10 CFBundleURLTypes diff --git a/passExtension/Info.plist b/passExtension/Info.plist index f96e05e..4648406 100644 --- a/passExtension/Info.plist +++ b/passExtension/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 0.2.9 + 0.2.10 CFBundleVersion 1 NSExtension From 3b8c6117aab36f3fc08f8d1fb0a6b4aecb1e2537 Mon Sep 17 00:00:00 2001 From: Bob Sun Date: Fri, 6 Oct 2017 22:06:52 -0700 Subject: [PATCH 02/42] Update xcodeproj file for cocoapods --- pass.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pass.xcodeproj/project.pbxproj b/pass.xcodeproj/project.pbxproj index d011204..0febf93 100644 --- a/pass.xcodeproj/project.pbxproj +++ b/pass.xcodeproj/project.pbxproj @@ -874,10 +874,12 @@ inputPaths = ( "${SRCROOT}/Pods/Target Support Files/Pods-passKitTests/Pods-passKitTests-frameworks.sh", "${PODS_ROOT}/ObjectivePGP/Frameworks/ios/ObjectivePGP.framework", + "${PODS_ROOT}/ObjectivePGP/Frameworks/ios/ObjectivePGP.framework.dSYM", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjectivePGP.framework", + "${DWARF_DSYM_FOLDER_PATH}/ObjectivePGP.framework.dSYM", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -910,10 +912,12 @@ inputPaths = ( "${SRCROOT}/Pods/Target Support Files/Pods-pass/Pods-pass-frameworks.sh", "${PODS_ROOT}/ObjectivePGP/Frameworks/ios/ObjectivePGP.framework", + "${PODS_ROOT}/ObjectivePGP/Frameworks/ios/ObjectivePGP.framework.dSYM", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjectivePGP.framework", + "${DWARF_DSYM_FOLDER_PATH}/ObjectivePGP.framework.dSYM", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; From d5353ba4d1b068ce60b8c3029feb335103892385 Mon Sep 17 00:00:00 2001 From: Bob Sun Date: Fri, 6 Oct 2017 22:15:53 -0700 Subject: [PATCH 03/42] Change Swift 3 @objc Inference from On to Default to kill warnings --- pass.xcodeproj/project.pbxproj | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pass.xcodeproj/project.pbxproj b/pass.xcodeproj/project.pbxproj index 0febf93..24f7730 100644 --- a/pass.xcodeproj/project.pbxproj +++ b/pass.xcodeproj/project.pbxproj @@ -1200,7 +1200,7 @@ SWIFT_INCLUDE_PATHS = ""; SWIFT_OBJC_BRIDGING_HEADER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -1245,7 +1245,7 @@ SKIP_INSTALL = YES; SWIFT_INCLUDE_PATHS = ""; SWIFT_OBJC_BRIDGING_HEADER = ""; - SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -1268,7 +1268,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passKitTests"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/pass.app/pass"; }; @@ -1289,7 +1289,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passKitTests"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/pass.app/pass"; }; @@ -1323,7 +1323,7 @@ PROVISIONING_PROFILE = "d25c9029-bca6-4b2d-b04e-4abc9d232740"; PROVISIONING_PROFILE_SPECIFIER = "match Development me.mssun.passforios.find-login-action-extension"; SKIP_INSTALL = YES; - SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.0; }; name = Debug; @@ -1356,7 +1356,7 @@ PROVISIONING_PROFILE = "cbd86628-6f3e-40f3-b518-20d2330db545"; PROVISIONING_PROFILE_SPECIFIER = "match AppStore me.mssun.passforios.find-login-action-extension"; SKIP_INSTALL = YES; - SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.0; }; name = Release; @@ -1372,7 +1372,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passTests"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/pass.app/pass"; }; @@ -1389,7 +1389,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passTests"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/pass.app/pass"; }; @@ -1448,7 +1448,7 @@ SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; }; name = Debug; }; @@ -1497,7 +1497,7 @@ PRODUCT_BUNDLE_IDENTIFIER = me.mssun.passforios; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; VALIDATE_PRODUCT = YES; }; name = Release; @@ -1533,7 +1533,7 @@ PROVISIONING_PROFILE = "2e72f4af-b935-4970-9cd3-44d4cc24b646"; PROVISIONING_PROFILE_SPECIFIER = "match Development me.mssun.passforios"; SWIFT_OBJC_BRIDGING_HEADER = "pass/Helpers/Objective-CBridgingHeader.h"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -1571,7 +1571,7 @@ PROVISIONING_PROFILE = "ee6e841d-ef77-4f00-b534-d7f1fd25dc1d"; PROVISIONING_PROFILE_SPECIFIER = "match AppStore me.mssun.passforios"; SWIFT_OBJC_BRIDGING_HEADER = "pass/Helpers/Objective-CBridgingHeader.h"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; From c57ae4f88e128a17b848de2ea051fcafee074b9a Mon Sep 17 00:00:00 2001 From: Bob Sun Date: Sat, 7 Oct 2017 00:24:30 -0700 Subject: [PATCH 04/42] Use iOS 11 design language --- pass/Base.lproj/Main.storyboard | 4 +- .../Controllers/PasswordsViewController.swift | 38 ++++++++++++++----- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/pass/Base.lproj/Main.storyboard b/pass/Base.lproj/Main.storyboard index a70105f..413a892 100644 --- a/pass/Base.lproj/Main.storyboard +++ b/pass/Base.lproj/Main.storyboard @@ -776,8 +776,8 @@ - - + + diff --git a/pass/Controllers/PasswordsViewController.swift b/pass/Controllers/PasswordsViewController.swift index b7ca354..7706157 100644 --- a/pass/Controllers/PasswordsViewController.swift +++ b/pass/Controllers/PasswordsViewController.swift @@ -39,7 +39,6 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV uiSearchController.searchResultsUpdater = self uiSearchController.dimsBackgroundDuringPresentation = false uiSearchController.searchBar.isTranslucent = false - uiSearchController.searchBar.backgroundColor = UIColor.gray uiSearchController.searchBar.sizeToFit() return uiSearchController }() @@ -48,10 +47,13 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV syncControl.addTarget(self, action: #selector(handleRefresh(_:)), for: UIControlEvents.valueChanged) return syncControl }() - private lazy var searchBarView: UIView = { - let uiView = UIView(frame: CGRect(x: 0, y: 64, width: self.view.bounds.width, height: 56)) - uiView.addSubview(self.searchController.searchBar) - return uiView + private lazy var searchBarView: UIView? = { + guard #available(iOS 11, *) else { + let uiView = UIView(frame: CGRect(x: 0, y: 64, width: self.view.bounds.width, height: 56)) + uiView.addSubview(self.searchController.searchBar) + return uiView + } + return nil }() private lazy var backUIBarButtonItem: UIBarButtonItem = { let backUIBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(self.backAction(_:))) @@ -188,18 +190,28 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV } else { searchController.searchBar.scopeButtonTitles = nil } + if #available(iOS 11.0, *) { + navigationItem.hidesSearchBarWhenScrolling = true + } } override func viewDidLoad() { super.viewDidLoad() - tabBarController!.delegate = self searchController.searchBar.delegate = self tableView.delegate = self tableView.dataSource = self - tableView.contentInset = UIEdgeInsetsMake(56, 0, 0, 0) definesPresentationContext = true - view.addSubview(searchBarView) + if #available(iOS 11.0, *) { + navigationItem.searchController = searchController + navigationController?.navigationBar.prefersLargeTitles = true + navigationItem.largeTitleDisplayMode = .automatic + navigationItem.hidesSearchBarWhenScrolling = true + } else { + // Fallback on earlier versions + tableView.contentInset = UIEdgeInsetsMake(56, 0, 0, 0) + view.addSubview(searchBarView!) + } tableView.refreshControl = syncControl SVProgressHUD.setDefaultMaskType(.black) tableView.register(UINib(nibName: "PasswordWithFolderTableViewCell", bundle: nil), forCellReuseIdentifier: "passwordWithFolderTableViewCell") @@ -219,12 +231,18 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV if let path = tableView.indexPathForSelectedRow { tableView.deselectRow(at: path, animated: false) } + if #available(iOS 11.0, *) { + navigationItem.hidesSearchBarWhenScrolling = false + } } override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() - searchBarView.frame = CGRect(x: 0, y: navigationController!.navigationBar.bounds.size.height + UIApplication.shared.statusBarFrame.height, width: UIScreen.main.bounds.width, height: 56) - searchController.searchBar.sizeToFit() + guard #available(iOS 11, *) else { + searchBarView?.frame = CGRect(x: 0, y: navigationController!.navigationBar.bounds.size.height + UIApplication.shared.statusBarFrame.height, width: UIScreen.main.bounds.width, height: 56) + searchController.searchBar.sizeToFit() + return + } } func numberOfSections(in tableView: UITableView) -> Int { From 5c7ccc5b3742c7ff2462feb6302f54e27ec11bc1 Mon Sep 17 00:00:00 2001 From: Bob Sun Date: Sat, 7 Oct 2017 10:42:09 -0700 Subject: [PATCH 05/42] Never use large titles in password details --- pass/Controllers/PasswordDetailTableViewController.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pass/Controllers/PasswordDetailTableViewController.swift b/pass/Controllers/PasswordDetailTableViewController.swift index 14d9a4a..41d5f80 100644 --- a/pass/Controllers/PasswordDetailTableViewController.swift +++ b/pass/Controllers/PasswordDetailTableViewController.swift @@ -89,6 +89,9 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni tableView.addSubview(indicator) editUIBarButtonItem.isEnabled = false navigationItem.rightBarButtonItem = editUIBarButtonItem + if #available(iOS 11.0, *) { + navigationItem.largeTitleDisplayMode = .never + } if let imageData = passwordEntity?.image { let image = UIImage(data: imageData as Data) From 3f3360259af167ac704faa34ba20edadeb42df4d Mon Sep 17 00:00:00 2001 From: Bob Sun Date: Sat, 7 Oct 2017 19:58:46 -0700 Subject: [PATCH 06/42] Optimize the top margin of raw password --- pass/Base.lproj/Main.storyboard | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pass/Base.lproj/Main.storyboard b/pass/Base.lproj/Main.storyboard index 413a892..19d4523 100644 --- a/pass/Base.lproj/Main.storyboard +++ b/pass/Base.lproj/Main.storyboard @@ -838,7 +838,7 @@ - + K7PBbkoaJf6mLyVX3EBU username: passforios-demo@email.com @@ -853,8 +853,8 @@ Phone Support PIN #: 84719 - + @@ -1805,7 +1805,7 @@ Cgo - + From be76987758f64666d9c1b8cf05486778c03668e7 Mon Sep 17 00:00:00 2001 From: Bob Sun Date: Sat, 7 Oct 2017 20:51:13 -0700 Subject: [PATCH 07/42] Fix UI constraint warning --- pass/Base.lproj/Main.storyboard | 2 +- pass/Views/FillPasswordTableViewCell.xib | 17 +++++++---------- pass/Views/LabelTableViewCell.xib | 11 +++++------ pass/Views/TextFieldTableViewCell.xib | 8 ++++---- pass/Views/TextViewTableViewCell.xib | 13 +++++++++---- 5 files changed, 26 insertions(+), 25 deletions(-) diff --git a/pass/Base.lproj/Main.storyboard b/pass/Base.lproj/Main.storyboard index 19d4523..1cd7a3c 100644 --- a/pass/Base.lproj/Main.storyboard +++ b/pass/Base.lproj/Main.storyboard @@ -1806,6 +1806,6 @@ Cgo - + diff --git a/pass/Views/FillPasswordTableViewCell.xib b/pass/Views/FillPasswordTableViewCell.xib index 715a3d3..2ebed2b 100644 --- a/pass/Views/FillPasswordTableViewCell.xib +++ b/pass/Views/FillPasswordTableViewCell.xib @@ -1,11 +1,11 @@ - + - + @@ -16,17 +16,14 @@ - + - + - - - - + @@ -35,7 +32,7 @@