Convert to Swift 4
- Will fix all warnings next.
This commit is contained in:
parent
7640d55317
commit
774f05eae0
17 changed files with 77 additions and 49 deletions
|
|
@ -693,22 +693,24 @@
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 0830;
|
LastSwiftUpdateCheck = 0830;
|
||||||
LastUpgradeCheck = 0820;
|
LastUpgradeCheck = 0900;
|
||||||
ORGANIZATIONNAME = "Bob Sun";
|
ORGANIZATIONNAME = "Bob Sun";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
A26075771EEC6F34005DB03E = {
|
A26075771EEC6F34005DB03E = {
|
||||||
CreatedOnToolsVersion = 8.3.3;
|
CreatedOnToolsVersion = 8.3.3;
|
||||||
LastSwiftMigration = 0830;
|
LastSwiftMigration = 0900;
|
||||||
ProvisioningStyle = Manual;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
A260757F1EEC6F34005DB03E = {
|
A260757F1EEC6F34005DB03E = {
|
||||||
CreatedOnToolsVersion = 8.3.3;
|
CreatedOnToolsVersion = 8.3.3;
|
||||||
|
LastSwiftMigration = 0900;
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Automatic;
|
||||||
TestTargetID = DC917BD21E2E8231000FDF54;
|
TestTargetID = DC917BD21E2E8231000FDF54;
|
||||||
};
|
};
|
||||||
A26700231EEC466A00176B8A = {
|
A26700231EEC466A00176B8A = {
|
||||||
CreatedOnToolsVersion = 8.3.3;
|
CreatedOnToolsVersion = 8.3.3;
|
||||||
DevelopmentTeam = 4WDM8E95VU;
|
DevelopmentTeam = 4WDM8E95VU;
|
||||||
|
LastSwiftMigration = 0900;
|
||||||
ProvisioningStyle = Manual;
|
ProvisioningStyle = Manual;
|
||||||
SystemCapabilities = {
|
SystemCapabilities = {
|
||||||
com.apple.ApplicationGroups.iOS = {
|
com.apple.ApplicationGroups.iOS = {
|
||||||
|
|
@ -722,12 +724,14 @@
|
||||||
DC13B14D1E8640810097803F = {
|
DC13B14D1E8640810097803F = {
|
||||||
CreatedOnToolsVersion = 8.3;
|
CreatedOnToolsVersion = 8.3;
|
||||||
DevelopmentTeam = 4WDM8E95VU;
|
DevelopmentTeam = 4WDM8E95VU;
|
||||||
|
LastSwiftMigration = 0900;
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Automatic;
|
||||||
TestTargetID = DC917BD21E2E8231000FDF54;
|
TestTargetID = DC917BD21E2E8231000FDF54;
|
||||||
};
|
};
|
||||||
DC917BD21E2E8231000FDF54 = {
|
DC917BD21E2E8231000FDF54 = {
|
||||||
CreatedOnToolsVersion = 8.2.1;
|
CreatedOnToolsVersion = 8.2.1;
|
||||||
DevelopmentTeam = 4WDM8E95VU;
|
DevelopmentTeam = 4WDM8E95VU;
|
||||||
|
LastSwiftMigration = 0900;
|
||||||
ProvisioningStyle = Manual;
|
ProvisioningStyle = Manual;
|
||||||
SystemCapabilities = {
|
SystemCapabilities = {
|
||||||
com.apple.ApplicationGroups.iOS = {
|
com.apple.ApplicationGroups.iOS = {
|
||||||
|
|
@ -1173,7 +1177,8 @@
|
||||||
SWIFT_INCLUDE_PATHS = "";
|
SWIFT_INCLUDE_PATHS = "";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "";
|
SWIFT_OBJC_BRIDGING_HEADER = "";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
VERSION_INFO_PREFIX = "";
|
VERSION_INFO_PREFIX = "";
|
||||||
|
|
@ -1216,7 +1221,8 @@
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_INCLUDE_PATHS = "";
|
SWIFT_INCLUDE_PATHS = "";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "";
|
SWIFT_OBJC_BRIDGING_HEADER = "";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
VERSION_INFO_PREFIX = "";
|
VERSION_INFO_PREFIX = "";
|
||||||
|
|
@ -1238,7 +1244,8 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passKitTests";
|
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passKitTests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/pass.app/pass";
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/pass.app/pass";
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
|
|
@ -1258,7 +1265,8 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passKitTests";
|
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passKitTests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/pass.app/pass";
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/pass.app/pass";
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
|
@ -1290,7 +1298,8 @@
|
||||||
PROVISIONING_PROFILE = "d25c9029-bca6-4b2d-b04e-4abc9d232740";
|
PROVISIONING_PROFILE = "d25c9029-bca6-4b2d-b04e-4abc9d232740";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "match Development me.mssun.passforios.find-login-action-extension";
|
PROVISIONING_PROFILE_SPECIFIER = "match Development me.mssun.passforios.find-login-action-extension";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
|
@ -1321,7 +1330,8 @@
|
||||||
PROVISIONING_PROFILE = "cbd86628-6f3e-40f3-b518-20d2330db545";
|
PROVISIONING_PROFILE = "cbd86628-6f3e-40f3-b518-20d2330db545";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "match AppStore me.mssun.passforios.find-login-action-extension";
|
PROVISIONING_PROFILE_SPECIFIER = "match AppStore me.mssun.passforios.find-login-action-extension";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|
@ -1336,7 +1346,8 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passTests";
|
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passTests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/pass.app/pass";
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/pass.app/pass";
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
|
|
@ -1352,7 +1363,8 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passTests";
|
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passTests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/pass.app/pass";
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/pass.app/pass";
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
|
@ -1366,7 +1378,9 @@
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
|
@ -1374,7 +1388,11 @@
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
|
@ -1416,7 +1434,9 @@
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
|
@ -1424,7 +1444,11 @@
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
|
@ -1480,7 +1504,8 @@
|
||||||
PROVISIONING_PROFILE = "2e72f4af-b935-4970-9cd3-44d4cc24b646";
|
PROVISIONING_PROFILE = "2e72f4af-b935-4970-9cd3-44d4cc24b646";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "match Development me.mssun.passforios";
|
PROVISIONING_PROFILE_SPECIFIER = "match Development me.mssun.passforios";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "pass/Helpers/Objective-CBridgingHeader.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "pass/Helpers/Objective-CBridgingHeader.h";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
};
|
};
|
||||||
|
|
@ -1516,7 +1541,8 @@
|
||||||
PROVISIONING_PROFILE = "ee6e841d-ef77-4f00-b534-d7f1fd25dc1d";
|
PROVISIONING_PROFILE = "ee6e841d-ef77-4f00-b534-d7f1fd25dc1d";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "match AppStore me.mssun.passforios";
|
PROVISIONING_PROFILE_SPECIFIER = "match AppStore me.mssun.passforios";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "pass/Helpers/Objective-CBridgingHeader.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "pass/Helpers/Objective-CBridgingHeader.h";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = On;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0830"
|
LastUpgradeVersion = "0900"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
language = ""
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
<Testables>
|
<Testables>
|
||||||
<TestableReference
|
<TestableReference
|
||||||
|
|
@ -65,6 +66,7 @@
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
language = ""
|
||||||
launchStyle = "0"
|
launchStyle = "0"
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
return .all
|
return .all
|
||||||
}
|
}
|
||||||
|
|
||||||
func postSearchNotification() {
|
@objc func postSearchNotification() {
|
||||||
NotificationCenter.default.post(name: .passwordSearch, object: nil)
|
NotificationCenter.default.post(name: .passwordSearch, object: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ class AboutRepositoryTableViewController: BasicStaticTableViewController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func setNeedRefresh() {
|
@objc func setNeedRefresh() {
|
||||||
needRefresh = true
|
needRefresh = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,7 @@ class AdvancedSettingsTableViewController: UITableViewController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func encryptInASCIIArmoredAction(_ sender: Any?) {
|
@objc func encryptInASCIIArmoredAction(_ sender: Any?) {
|
||||||
SharedDefaults[.encryptInArmored] = encryptInASCIIArmoredSwitch.isOn
|
SharedDefaults[.encryptInArmored] = encryptInASCIIArmoredSwitch.isOn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ class CommitLogsTableViewController: UITableViewController {
|
||||||
return cell
|
return cell
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateCommitLogs() {
|
@objc func updateCommitLogs() {
|
||||||
commits = getCommitLogs()
|
commits = getCommitLogs()
|
||||||
tableView.reloadData()
|
tableView.reloadData()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -153,37 +153,37 @@ class GeneralSettingsTableViewController: BasicStaticTableViewController {
|
||||||
self.present(optionMenu, animated: true, completion: nil)
|
self.present(optionMenu, animated: true, completion: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func tapHideUnknownSwitchDetailButton(_ sender: Any?) {
|
@objc func tapHideUnknownSwitchDetailButton(_ sender: Any?) {
|
||||||
let alertMessage = "Only \"key: value\" format in additional fields is supported. Unsupported fields will be given \"unknown\" keys. Turn on this switch to hide unsupported fields."
|
let alertMessage = "Only \"key: value\" format in additional fields is supported. Unsupported fields will be given \"unknown\" keys. Turn on this switch to hide unsupported fields."
|
||||||
let alertTitle = "Hide Unknown Fields"
|
let alertTitle = "Hide Unknown Fields"
|
||||||
Utils.alert(title: alertTitle, message: alertMessage, controller: self, completion: nil)
|
Utils.alert(title: alertTitle, message: alertMessage, controller: self, completion: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func tapHideOTPSwitchDetailButton(_ sender: Any?) {
|
@objc func tapHideOTPSwitchDetailButton(_ sender: Any?) {
|
||||||
let keywordsString = Password.otpKeywords.joined(separator: ",")
|
let keywordsString = Password.otpKeywords.joined(separator: ",")
|
||||||
let alertMessage = "Turn on this switch to hide the fields related to one time passwords (i.e., \(keywordsString))."
|
let alertMessage = "Turn on this switch to hide the fields related to one time passwords (i.e., \(keywordsString))."
|
||||||
let alertTitle = "Hide One Time Password Fields"
|
let alertTitle = "Hide One Time Password Fields"
|
||||||
Utils.alert(title: alertTitle, message: alertMessage, controller: self, completion: nil)
|
Utils.alert(title: alertTitle, message: alertMessage, controller: self, completion: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func hideUnknownSwitchAction(_ sender: Any?) {
|
@objc func hideUnknownSwitchAction(_ sender: Any?) {
|
||||||
SharedDefaults[.isHideUnknownOn] = hideUnknownSwitch.isOn
|
SharedDefaults[.isHideUnknownOn] = hideUnknownSwitch.isOn
|
||||||
NotificationCenter.default.post(name: .passwordDetailDisplaySettingChanged, object: nil)
|
NotificationCenter.default.post(name: .passwordDetailDisplaySettingChanged, object: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func hideOTPSwitchAction(_ sender: Any?) {
|
@objc func hideOTPSwitchAction(_ sender: Any?) {
|
||||||
SharedDefaults[.isHideOTPOn] = hideOTPSwitch.isOn
|
SharedDefaults[.isHideOTPOn] = hideOTPSwitch.isOn
|
||||||
NotificationCenter.default.post(name: .passwordDetailDisplaySettingChanged, object: nil)
|
NotificationCenter.default.post(name: .passwordDetailDisplaySettingChanged, object: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func rememberPassphraseSwitchAction(_ sender: Any?) {
|
@objc func rememberPassphraseSwitchAction(_ sender: Any?) {
|
||||||
SharedDefaults[.isRememberPassphraseOn] = rememberPassphraseSwitch.isOn
|
SharedDefaults[.isRememberPassphraseOn] = rememberPassphraseSwitch.isOn
|
||||||
if rememberPassphraseSwitch.isOn == false {
|
if rememberPassphraseSwitch.isOn == false {
|
||||||
passwordStore.pgpKeyPassphrase = nil
|
passwordStore.pgpKeyPassphrase = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func showFolderSwitchAction(_ sender: Any?) {
|
@objc func showFolderSwitchAction(_ sender: Any?) {
|
||||||
SharedDefaults[.isShowFolderOn] = showFolderSwitch.isOn
|
SharedDefaults[.isShowFolderOn] = showFolderSwitch.isOn
|
||||||
NotificationCenter.default.post(name: .passwordDisplaySettingChanged, object: nil)
|
NotificationCenter.default.post(name: .passwordDisplaySettingChanged, object: nil)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ class OTPScannerController: QRScannerController {
|
||||||
var scannedOTP: String?
|
var scannedOTP: String?
|
||||||
|
|
||||||
// MARK: - AVCaptureMetadataOutputObjectsDelegate Methods
|
// MARK: - AVCaptureMetadataOutputObjectsDelegate Methods
|
||||||
override func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) {
|
func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) {
|
||||||
|
|
||||||
if let metadataObj = metadataObjects.first as? AVMetadataMachineReadableCodeObject,
|
if let metadataObj = metadataObjects.first as? AVMetadataMachineReadableCodeObject,
|
||||||
supportedCodeTypes.contains(metadataObj.type),
|
supportedCodeTypes.contains(metadataObj.type),
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ class OpenSourceComponentsTableViewController: BasicStaticTableViewController {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
}
|
}
|
||||||
|
|
||||||
func actOnDetailDisclosureButton(_ sender: Any?) {
|
@objc func actOnDetailDisclosureButton(_ sender: Any?) {
|
||||||
if let link = sender as? String {
|
if let link = sender as? String {
|
||||||
let svc = SFSafariViewController(url: URL(string: link)!, entersReaderIfAvailable: false)
|
let svc = SFSafariViewController(url: URL(string: link)!, entersReaderIfAvailable: false)
|
||||||
self.present(svc, animated: true, completion: nil)
|
self.present(svc, animated: true, completion: nil)
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import SVProgressHUD
|
||||||
import passKit
|
import passKit
|
||||||
|
|
||||||
fileprivate class PasswordsTableEntry : NSObject {
|
fileprivate class PasswordsTableEntry : NSObject {
|
||||||
var title: String
|
@objc var title: String
|
||||||
var isDir: Bool
|
var isDir: Bool
|
||||||
var passwordEntity: PasswordEntity?
|
var passwordEntity: PasswordEntity?
|
||||||
init(title: String, isDir: Bool, passwordEntity: PasswordEntity?) {
|
init(title: String, isDir: Bool, passwordEntity: PasswordEntity?) {
|
||||||
|
|
@ -293,7 +293,7 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func backAction(_ sender: Any?) {
|
@objc func backAction(_ sender: Any?) {
|
||||||
guard SharedDefaults[.isShowFolderOn] else { return }
|
guard SharedDefaults[.isShowFolderOn] else { return }
|
||||||
var anim: CATransition? = transitionFromLeft
|
var anim: CATransition? = transitionFromLeft
|
||||||
if parentPasswordEntity == nil {
|
if parentPasswordEntity == nil {
|
||||||
|
|
@ -302,7 +302,7 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV
|
||||||
reloadTableView(parent: parentPasswordEntity?.parent, anim: anim)
|
reloadTableView(parent: parentPasswordEntity?.parent, anim: anim)
|
||||||
}
|
}
|
||||||
|
|
||||||
func longPressAction(_ gesture: UILongPressGestureRecognizer) {
|
@objc func longPressAction(_ gesture: UILongPressGestureRecognizer) {
|
||||||
if gesture.state == UIGestureRecognizerState.began {
|
if gesture.state == UIGestureRecognizerState.began {
|
||||||
let touchPoint = gesture.location(in: tableView)
|
let touchPoint = gesture.location(in: tableView)
|
||||||
if let indexPath = tableView.indexPathForRow(at: touchPoint) {
|
if let indexPath = tableView.indexPathForRow(at: touchPoint) {
|
||||||
|
|
@ -412,7 +412,7 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV
|
||||||
sections = newSections.filter {$0.entries.count > 0}
|
sections = newSections.filter {$0.entries.count > 0}
|
||||||
}
|
}
|
||||||
|
|
||||||
func actOnSearchNotification() {
|
@objc func actOnSearchNotification() {
|
||||||
searchController.searchBar.becomeFirstResponder()
|
searchController.searchBar.becomeFirstResponder()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -507,7 +507,7 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV
|
||||||
reloadTableView(data: passwordsTableEntries, anim: anim)
|
reloadTableView(data: passwordsTableEntries, anim: anim)
|
||||||
}
|
}
|
||||||
|
|
||||||
func actOnReloadTableViewRelatedNotification() {
|
@objc func actOnReloadTableViewRelatedNotification() {
|
||||||
DispatchQueue.main.async { [weak weakSelf = self] in
|
DispatchQueue.main.async { [weak weakSelf = self] in
|
||||||
guard let strongSelf = weakSelf else { return }
|
guard let strongSelf = weakSelf else { return }
|
||||||
strongSelf.initPasswordsTableEntries(parent: nil)
|
strongSelf.initPasswordsTableEntries(parent: nil)
|
||||||
|
|
@ -515,7 +515,7 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleRefresh(_ syncControl: UIRefreshControl) {
|
@objc func handleRefresh(_ syncControl: UIRefreshControl) {
|
||||||
syncPasswords()
|
syncPasswords()
|
||||||
syncControl.endRefreshing()
|
syncControl.endRefreshing()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ class QRScannerController: UIViewController, AVCaptureMetadataOutputObjectsDeleg
|
||||||
var videoPreviewLayer: AVCaptureVideoPreviewLayer?
|
var videoPreviewLayer: AVCaptureVideoPreviewLayer?
|
||||||
var qrCodeFrameView: UIView?
|
var qrCodeFrameView: UIView?
|
||||||
|
|
||||||
let supportedCodeTypes = [AVMetadataObjectTypeQRCode]
|
let supportedCodeTypes = [AVMetadataObject.ObjectType.qr]
|
||||||
|
|
||||||
var delegate: QRScannerControllerDelegate?
|
var delegate: QRScannerControllerDelegate?
|
||||||
|
|
||||||
|
|
@ -32,11 +32,11 @@ class QRScannerController: UIViewController, AVCaptureMetadataOutputObjectsDeleg
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
|
|
||||||
// Get an instance of the AVCaptureDevice class to initialize a device object and provide the video as the media type parameter.
|
// Get an instance of the AVCaptureDevice class to initialize a device object and provide the video as the media type parameter.
|
||||||
let captureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
|
let captureDevice = AVCaptureDevice.default(for: AVMediaType.video)
|
||||||
|
|
||||||
do {
|
do {
|
||||||
// Get an instance of the AVCaptureDeviceInput class using the previous device object.
|
// Get an instance of the AVCaptureDeviceInput class using the previous device object.
|
||||||
let input = try AVCaptureDeviceInput(device: captureDevice)
|
let input = try AVCaptureDeviceInput(device: captureDevice!)
|
||||||
|
|
||||||
// Initialize the captureSession object.
|
// Initialize the captureSession object.
|
||||||
captureSession = AVCaptureSession()
|
captureSession = AVCaptureSession()
|
||||||
|
|
@ -53,8 +53,8 @@ class QRScannerController: UIViewController, AVCaptureMetadataOutputObjectsDeleg
|
||||||
captureMetadataOutput.metadataObjectTypes = supportedCodeTypes
|
captureMetadataOutput.metadataObjectTypes = supportedCodeTypes
|
||||||
|
|
||||||
// Initialize the video preview layer and add it as a sublayer to the viewPreview view's layer.
|
// Initialize the video preview layer and add it as a sublayer to the viewPreview view's layer.
|
||||||
videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
|
videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession!)
|
||||||
videoPreviewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
|
videoPreviewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill
|
||||||
videoPreviewLayer?.frame = view.layer.bounds
|
videoPreviewLayer?.frame = view.layer.bounds
|
||||||
view.layer.addSublayer(videoPreviewLayer!)
|
view.layer.addSublayer(videoPreviewLayer!)
|
||||||
|
|
||||||
|
|
@ -90,7 +90,7 @@ class QRScannerController: UIViewController, AVCaptureMetadataOutputObjectsDeleg
|
||||||
|
|
||||||
// MARK: - AVCaptureMetadataOutputObjectsDelegate Methods
|
// MARK: - AVCaptureMetadataOutputObjectsDelegate Methods
|
||||||
|
|
||||||
func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) {
|
func metadataOutput(captureOutput: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
|
||||||
|
|
||||||
if let metadataObj = metadataObjects.first as? AVMetadataMachineReadableCodeObject,
|
if let metadataObj = metadataObjects.first as? AVMetadataMachineReadableCodeObject,
|
||||||
supportedCodeTypes.contains(metadataObj.type),
|
supportedCodeTypes.contains(metadataObj.type),
|
||||||
|
|
|
||||||
|
|
@ -191,7 +191,7 @@ class SettingsTableViewController: UITableViewController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func actOnPasswordStoreErasedNotification() {
|
@objc func actOnPasswordStoreErasedNotification() {
|
||||||
setPGPKeyTableViewCellDetailText()
|
setPGPKeyTableViewCellDetailText()
|
||||||
setPasswordRepositoryTableViewCellDetailText()
|
setPasswordRepositoryTableViewCellDetailText()
|
||||||
setPasscodeLockTouchIDCells()
|
setPasscodeLockTouchIDCells()
|
||||||
|
|
@ -213,7 +213,7 @@ class SettingsTableViewController: UITableViewController {
|
||||||
tableView.deselectRow(at: indexPath, animated: true)
|
tableView.deselectRow(at: indexPath, animated: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func touchIDSwitchAction(uiSwitch: UISwitch) {
|
@objc func touchIDSwitchAction(uiSwitch: UISwitch) {
|
||||||
if !passcodeLockConfig.repository.hasPasscode || !isTouchIDEnabled() {
|
if !passcodeLockConfig.repository.hasPasscode || !isTouchIDEnabled() {
|
||||||
// switch off
|
// switch off
|
||||||
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(500)) {
|
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(500)) {
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ class LabelTableViewCell: UITableViewCell {
|
||||||
SecurePasteboard.shared.copy(textToCopy: cellData?.content)
|
SecurePasteboard.shared.copy(textToCopy: cellData?.content)
|
||||||
}
|
}
|
||||||
|
|
||||||
func revealPassword(_ sender: Any?) {
|
@objc func revealPassword(_ sender: Any?) {
|
||||||
let plainPassword = cellData?.content ?? ""
|
let plainPassword = cellData?.content ?? ""
|
||||||
if type == .password {
|
if type == .password {
|
||||||
contentLabel.attributedText = Utils.attributedPassword(plainPassword: plainPassword)
|
contentLabel.attributedText = Utils.attributedPassword(plainPassword: plainPassword)
|
||||||
|
|
@ -115,7 +115,7 @@ class LabelTableViewCell: UITableViewCell {
|
||||||
passwordDisplayButton?.setImage(#imageLiteral(resourceName: "Invisible"), for: .normal)
|
passwordDisplayButton?.setImage(#imageLiteral(resourceName: "Invisible"), for: .normal)
|
||||||
}
|
}
|
||||||
|
|
||||||
func concealPassword(_ sender: Any?) {
|
@objc func concealPassword(_ sender: Any?) {
|
||||||
if type == .password {
|
if type == .password {
|
||||||
if cellData?.content.isEmpty == false {
|
if cellData?.content.isEmpty == false {
|
||||||
contentLabel.text = Globals.passwordDots
|
contentLabel.text = Globals.passwordDots
|
||||||
|
|
@ -129,7 +129,7 @@ class LabelTableViewCell: UITableViewCell {
|
||||||
passwordDisplayButton?.setImage(#imageLiteral(resourceName: "Visible"), for: .normal)
|
passwordDisplayButton?.setImage(#imageLiteral(resourceName: "Visible"), for: .normal)
|
||||||
}
|
}
|
||||||
|
|
||||||
func reversePasswordDisplay(_ sender: Any?) {
|
@objc func reversePasswordDisplay(_ sender: Any?) {
|
||||||
if isReveal {
|
if isReveal {
|
||||||
// conceal
|
// conceal
|
||||||
concealPassword(sender)
|
concealPassword(sender)
|
||||||
|
|
@ -139,12 +139,12 @@ class LabelTableViewCell: UITableViewCell {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func openLink(_ sender: Any?) {
|
@objc func openLink(_ sender: Any?) {
|
||||||
// if isURLCell, passwordTableView should not be nil
|
// if isURLCell, passwordTableView should not be nil
|
||||||
delegatePasswordTableView!.openLink()
|
delegatePasswordTableView!.openLink()
|
||||||
}
|
}
|
||||||
|
|
||||||
func getNextHOTP(_ sender: Any?) {
|
@objc func getNextHOTP(_ sender: Any?) {
|
||||||
// if isHOTPCell, passwordTableView should not be nil
|
// if isHOTPCell, passwordTableView should not be nil
|
||||||
delegatePasswordTableView!.getNextHOTP()
|
delegatePasswordTableView!.getNextHOTP()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ class TitleTextFieldTableViewCell: UITableViewCell {
|
||||||
titleLabel.addGestureRecognizer(tapGestureRecognizer)
|
titleLabel.addGestureRecognizer(tapGestureRecognizer)
|
||||||
}
|
}
|
||||||
|
|
||||||
func tap(_ sender: Any?) {
|
@objc func tap(_ sender: Any?) {
|
||||||
contentTextField.becomeFirstResponder()
|
contentTextField.becomeFirstResponder()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ class PasscodeLockViewControllerForExtension: PasscodeLockViewController {
|
||||||
cancelButton?.removeTarget(nil, action: nil, for: .allEvents)
|
cancelButton?.removeTarget(nil, action: nil, for: .allEvents)
|
||||||
cancelButton?.addTarget(self, action: #selector(cancelExtension), for: .touchUpInside)
|
cancelButton?.addTarget(self, action: #selector(cancelExtension), for: .touchUpInside)
|
||||||
}
|
}
|
||||||
func cancelExtension() {
|
@objc func cancelExtension() {
|
||||||
originalExtensionContest?.completeRequest(returningItems: [], completionHandler: nil)
|
originalExtensionContest?.completeRequest(returningItems: [], completionHandler: nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ public class Utils {
|
||||||
} else if !NSCharacterSet.letters.contains(element) {
|
} else if !NSCharacterSet.letters.contains(element) {
|
||||||
charColor = Globals.blue
|
charColor = Globals.blue
|
||||||
}
|
}
|
||||||
attributedPassword.addAttribute(NSForegroundColorAttributeName, value: charColor, range: NSRange(location: index, length: 1))
|
attributedPassword.addAttribute(NSAttributedStringKey.foregroundColor, value: charColor, range: NSRange(location: index, length: 1))
|
||||||
}
|
}
|
||||||
return attributedPassword
|
return attributedPassword
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -727,7 +727,7 @@ public class PasswordStore {
|
||||||
let privateMOC = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
|
let privateMOC = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
|
||||||
privateMOC.parent = context
|
privateMOC.parent = context
|
||||||
privateMOC.perform {
|
privateMOC.perform {
|
||||||
passwordEntity.image = NSData(data: image)
|
passwordEntity.image = NSData(data: image) as Data
|
||||||
do {
|
do {
|
||||||
try privateMOC.save()
|
try privateMOC.save()
|
||||||
self.context.performAndWait {
|
self.context.performAndWait {
|
||||||
|
|
@ -843,7 +843,7 @@ public class PasswordStore {
|
||||||
throw AppError.PGPPublicKeyNotExistError
|
throw AppError.PGPPublicKeyNotExistError
|
||||||
}
|
}
|
||||||
let plainData = password.getPlainData()
|
let plainData = password.getPlainData()
|
||||||
let encryptedData = try pgp.encryptData(plainData, using: publicKey, armored: SharedDefaults[.encryptInArmored])
|
let encryptedData = try pgp.encryptData(plainData, using: Array(publicKey), armored: SharedDefaults[.encryptInArmored])
|
||||||
return encryptedData
|
return encryptedData
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue