Skip to content

Commit

Permalink
Swift3 support (#42)
Browse files Browse the repository at this point in the history
* Upgrade for Swift3

* Fix for iOS10.3
  • Loading branch information
ziogaschr authored Apr 5, 2017
1 parent ba70b2c commit 9d4d6d6
Show file tree
Hide file tree
Showing 20 changed files with 239 additions and 221 deletions.
25 changes: 22 additions & 3 deletions PasscodeLock.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -452,24 +452,28 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0700;
LastUpgradeCheck = 0700;
LastUpgradeCheck = 0810;
ORGANIZATIONNAME = "Yanko Dimitrov";
TargetAttributes = {
C99EAF3E1B90B05700D61E1B = {
CreatedOnToolsVersion = 7.0;
LastSwiftMigration = 0810;
};
C99EAF481B90B05700D61E1B = {
CreatedOnToolsVersion = 7.0;
};
C9D3DF0F1B91AD11008561EB = {
CreatedOnToolsVersion = 7.0;
LastSwiftMigration = 0810;
};
C9D3DF221B91AD11008561EB = {
CreatedOnToolsVersion = 7.0;
LastSwiftMigration = 0810;
TestTargetID = C9D3DF0F1B91AD11008561EB;
};
C9D3DF2D1B91AD12008561EB = {
CreatedOnToolsVersion = 7.0;
LastSwiftMigration = 0810;
TestTargetID = C9D3DF0F1B91AD11008561EB;
};
};
Expand Down Expand Up @@ -682,8 +686,10 @@
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
Expand Down Expand Up @@ -730,8 +736,10 @@
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
Expand All @@ -751,6 +759,7 @@
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
Expand All @@ -762,6 +771,7 @@
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
Expand All @@ -773,13 +783,15 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 3.0;
};
name = Debug;
};
C99EAF551B90B05800D61E1B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
Expand All @@ -790,6 +802,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.yankodimitrov.PasscodeLock;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_VERSION = 3.0;
};
name = Release;
};
Expand Down Expand Up @@ -821,27 +834,29 @@
C9D3DF361B91AD12008561EB /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
INFOPLIST_FILE = PasscodeLockDemo/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.yankodimitrov.PasscodeLockDemo;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
C9D3DF371B91AD12008561EB /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
INFOPLIST_FILE = PasscodeLockDemo/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.yankodimitrov.PasscodeLockDemo;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
Expand All @@ -855,6 +870,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.yankodimitrov.PasscodeLockDemoTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/PasscodeLockDemo.app/PasscodeLockDemo";
};
name = Debug;
Expand All @@ -868,6 +884,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.yankodimitrov.PasscodeLockDemoTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/PasscodeLockDemo.app/PasscodeLockDemo";
};
name = Release;
Expand All @@ -880,6 +897,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.yankodimitrov.PasscodeLockDemoUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
TEST_TARGET_NAME = PasscodeLockDemo;
USES_XCTRUNNER = YES;
};
Expand All @@ -893,6 +911,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.yankodimitrov.PasscodeLockDemoUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
TEST_TARGET_NAME = PasscodeLockDemo;
USES_XCTRUNNER = YES;
};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
LastUpgradeVersion = "0810"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
Expand Down
10 changes: 5 additions & 5 deletions PasscodeLock/Functions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,19 @@

import Foundation

func localizedStringFor(key: String, comment: String) -> String {
func localizedStringFor(_ key: String, comment: String) -> String {

let name = "PasscodeLock"
let bundle = bundleForResource(name, ofType: "strings")

return NSLocalizedString(key, tableName: name, bundle: bundle, comment: comment)
}

func bundleForResource(name: String, ofType type: String) -> NSBundle {
func bundleForResource(_ name: String, ofType type: String) -> Bundle {

if(NSBundle.mainBundle().pathForResource(name, ofType: type) != nil) {
return NSBundle.mainBundle()
if(Bundle.main.path(forResource: name, ofType: type) != nil) {
return Bundle.main
}

return NSBundle(forClass: PasscodeLock.self)
return Bundle(for: PasscodeLock.self)
}
2 changes: 1 addition & 1 deletion PasscodeLock/PasscodeLock/ChangePasscodeState.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ struct ChangePasscodeState: PasscodeLockStateType {
description = localizedStringFor("PasscodeLockChangeDescription", comment: "Change passcode description")
}

func acceptPasscode(passcode: [String], fromLock lock: PasscodeLockType) {
func acceptPasscode(_ passcode: [String], fromLock lock: PasscodeLockType) {

guard let currentPasscode = lock.repository.passcode else {
return
Expand Down
4 changes: 2 additions & 2 deletions PasscodeLock/PasscodeLock/ConfirmPasscodeState.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ struct ConfirmPasscodeState: PasscodeLockStateType {
let isCancellableAction = true
var isTouchIDAllowed = false

private var passcodeToConfirm: [String]
fileprivate var passcodeToConfirm: [String]

init(passcode: [String]) {

Expand All @@ -24,7 +24,7 @@ struct ConfirmPasscodeState: PasscodeLockStateType {
description = localizedStringFor("PasscodeLockConfirmDescription", comment: "Confirm passcode description")
}

func acceptPasscode(passcode: [String], fromLock lock: PasscodeLockType) {
func acceptPasscode(_ passcode: [String], fromLock lock: PasscodeLockType) {

if passcode == passcodeToConfirm {

Expand Down
9 changes: 4 additions & 5 deletions PasscodeLock/PasscodeLock/EnterPasscodeState.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ struct EnterPasscodeState: PasscodeLockStateType {
}
}


private var isNotificationSent = false

init(allowCancellation: Bool = false) {
Expand All @@ -37,7 +36,7 @@ struct EnterPasscodeState: PasscodeLockStateType {
description = localizedStringFor("PasscodeLockEnterDescription", comment: "Enter passcode description")
}

mutating func acceptPasscode(passcode: [String], fromLock lock: PasscodeLockType) {
mutating func acceptPasscode(_ passcode: [String], fromLock lock: PasscodeLockType) {

guard let currentPasscode = lock.repository.passcode else {
return
Expand All @@ -64,13 +63,13 @@ struct EnterPasscodeState: PasscodeLockStateType {
EnterPasscodeState.incorrectPasscodeAttempts = incorrectPasscodeAttempts
}

private mutating func postNotification() {
fileprivate mutating func postNotification() {

guard !isNotificationSent else { return }

let center = NSNotificationCenter.defaultCenter()
let center = NotificationCenter.default

center.postNotificationName(PasscodeLockIncorrectPasscodeNotification, object: nil)
center.post(name: Notification.Name(rawValue: PasscodeLockIncorrectPasscodeNotification), object: nil)

isNotificationSent = true
}
Expand Down
36 changes: 18 additions & 18 deletions PasscodeLock/PasscodeLock/PasscodeLock.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,25 @@
import Foundation
import LocalAuthentication

public class PasscodeLock: PasscodeLockType {
open class PasscodeLock: PasscodeLockType {

public weak var delegate: PasscodeLockTypeDelegate?
public let configuration: PasscodeLockConfigurationType
open weak var delegate: PasscodeLockTypeDelegate?
open let configuration: PasscodeLockConfigurationType

public var repository: PasscodeRepositoryType {
open var repository: PasscodeRepositoryType {
return configuration.repository
}

public var state: PasscodeLockStateType {
open var state: PasscodeLockStateType {
return lockState
}

public var isTouchIDAllowed: Bool {
open var isTouchIDAllowed: Bool {
return isTouchIDEnabled() && configuration.isTouchIDAllowed && lockState.isTouchIDAllowed
}

private var lockState: PasscodeLockStateType
private lazy var passcode = [String]()
fileprivate var lockState: PasscodeLockStateType
fileprivate lazy var passcode = [String]()

public init(state: PasscodeLockStateType, configuration: PasscodeLockConfigurationType) {

Expand All @@ -37,33 +37,33 @@ public class PasscodeLock: PasscodeLockType {
self.configuration = configuration
}

public func addSign(sign: String) {
open func addSign(_ sign: String) {

passcode.append(sign)
delegate?.passcodeLock(self, addedSignAtIndex: passcode.count - 1)

if passcode.count >= configuration.passcodeLength {

lockState.acceptPasscode(passcode, fromLock: self)
passcode.removeAll(keepCapacity: true)
passcode.removeAll(keepingCapacity: true)
}
}

public func removeSign() {
open func removeSign() {

guard passcode.count > 0 else { return }

passcode.removeLast()
delegate?.passcodeLock(self, removedSignAtIndex: passcode.count)
}

public func changeStateTo(state: PasscodeLockStateType) {
open func changeStateTo(_ state: PasscodeLockStateType) {

lockState = state
delegate?.passcodeLockDidChangeState(self)
}

public func authenticateWithBiometrics() {
open func authenticateWithBiometrics() {

guard isTouchIDAllowed else { return }

Expand All @@ -77,16 +77,16 @@ public class PasscodeLock: PasscodeLockType {

context.localizedFallbackTitle = localizedStringFor("PasscodeLockTouchIDButton", comment: "TouchID authentication fallback button")

context.evaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, localizedReason: reason) {
context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason) {
success, error in

self.handleTouchIDResult(success)
}
}

private func handleTouchIDResult(success: Bool) {
fileprivate func handleTouchIDResult(_ success: Bool) {

dispatch_async(dispatch_get_main_queue()) {
DispatchQueue.main.async {

if success {
EnterPasscodeState.incorrectPasscodeAttempts = 0
Expand All @@ -95,10 +95,10 @@ public class PasscodeLock: PasscodeLockType {
}
}

private func isTouchIDEnabled() -> Bool {
fileprivate func isTouchIDEnabled() -> Bool {

let context = LAContext()

return context.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, error: nil)
return context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil)
}
}
2 changes: 1 addition & 1 deletion PasscodeLock/PasscodeLock/SetPasscodeState.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ struct SetPasscodeState: PasscodeLockStateType {
description = localizedStringFor("PasscodeLockSetDescription", comment: "Set passcode description")
}

func acceptPasscode(passcode: [String], fromLock lock: PasscodeLockType) {
func acceptPasscode(_ passcode: [String], fromLock lock: PasscodeLockType) {

let nextState = ConfirmPasscodeState(passcode: passcode)

Expand Down
Loading

0 comments on commit 9d4d6d6

Please sign in to comment.