Convert to Swift 4

- Will fix all warnings next.
This commit is contained in:
Yishi Lin 2017-09-23 16:29:03 +08:00
parent 7640d55317
commit 774f05eae0
17 changed files with 77 additions and 49 deletions

View file

@ -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";
}; };

View file

@ -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"

View file

@ -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)
} }

View file

@ -81,7 +81,7 @@ class AboutRepositoryTableViewController: BasicStaticTableViewController {
} }
} }
func setNeedRefresh() { @objc func setNeedRefresh() {
needRefresh = true needRefresh = true
} }
} }

View file

@ -84,7 +84,7 @@ class AdvancedSettingsTableViewController: UITableViewController {
} }
} }
func encryptInASCIIArmoredAction(_ sender: Any?) { @objc func encryptInASCIIArmoredAction(_ sender: Any?) {
SharedDefaults[.encryptInArmored] = encryptInASCIIArmoredSwitch.isOn SharedDefaults[.encryptInArmored] = encryptInASCIIArmoredSwitch.isOn
} }

View file

@ -42,7 +42,7 @@ class CommitLogsTableViewController: UITableViewController {
return cell return cell
} }
func updateCommitLogs() { @objc func updateCommitLogs() {
commits = getCommitLogs() commits = getCommitLogs()
tableView.reloadData() tableView.reloadData()
} }

View file

@ -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)
} }

View file

@ -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),

View file

@ -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)

View file

@ -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()
} }

View file

@ -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),

View file

@ -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)) {

View file

@ -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()
} }

View file

@ -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()
} }

View file

@ -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)
} }
} }

View file

@ -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
} }

View file

@ -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
} }