diff --git a/AutocompleteTextField.xcodeproj/project.pbxproj b/AutocompleteTextField.xcodeproj/project.pbxproj index 5e18c8f..c5d428c 100644 --- a/AutocompleteTextField.xcodeproj/project.pbxproj +++ b/AutocompleteTextField.xcodeproj/project.pbxproj @@ -227,18 +227,19 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0820; - LastUpgradeCheck = 0820; + LastUpgradeCheck = 1110; ORGANIZATIONNAME = Mozilla; TargetAttributes = { D31083311EAA7BF500ECF778 = { CreatedOnToolsVersion = 8.2.1; DevelopmentTeam = 43AQ936H96; - LastSwiftMigration = 0820; + LastSwiftMigration = 1110; ProvisioningStyle = Automatic; }; D310834F1EAA7C3600ECF778 = { CreatedOnToolsVersion = 8.2.1; DevelopmentTeam = 43AQ936H96; + LastSwiftMigration = 1110; ProvisioningStyle = Automatic; }; D370686F1EAE68B2000D6BA7 = { @@ -364,20 +365,29 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -407,7 +417,7 @@ SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -418,20 +428,29 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -453,7 +472,7 @@ MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; diff --git a/AutocompleteTextField.xcodeproj/xcshareddata/xcschemes/AutocompleteTextField.xcscheme b/AutocompleteTextField.xcodeproj/xcshareddata/xcschemes/AutocompleteTextField.xcscheme index a27545c..c483306 100644 --- a/AutocompleteTextField.xcodeproj/xcshareddata/xcschemes/AutocompleteTextField.xcscheme +++ b/AutocompleteTextField.xcodeproj/xcshareddata/xcschemes/AutocompleteTextField.xcscheme @@ -1,6 +1,6 @@ + + + + @@ -39,17 +48,6 @@ - - - - - - - - Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { return true } } diff --git a/Example/DomainCompletionSource.swift b/Example/DomainCompletionSource.swift index eec34f9..50c1a51 100644 --- a/Example/DomainCompletionSource.swift +++ b/Example/DomainCompletionSource.swift @@ -28,7 +28,7 @@ class DomainCompletionSource: AutocompleteTextFieldCompletionSource { // We don't actually want to match the top-level domain ("com", "org", etc.) by itself, so // so make sure the result includes at least one ".". let range = domainWithDotPrefix.index(range.lowerBound, offsetBy: 1) - let matchedDomain: String = domainWithDotPrefix.substring(from: range) + let matchedDomain: String = String(domainWithDotPrefix[range...]) if matchedDomain.contains(".") { return matchedDomain + "/" } diff --git a/Source/AutocompleteTextField.swift b/Source/AutocompleteTextField.swift index e7ba6f7..6c8512e 100644 --- a/Source/AutocompleteTextField.swift +++ b/Source/AutocompleteTextField.swift @@ -145,7 +145,7 @@ open class AutocompleteTextField: UITextField, UITextFieldDelegate { guard !completion.isEmpty, completion.lowercased().hasPrefix(text.lowercased()) else { return } // Add the completion suffix to the current text and highlight it. - let completion = completion.substring(from: completion.index(completion.startIndex, offsetBy: text.characters.count)) + let completion = String(completion[completion.index(completion.startIndex, offsetBy: text.count)...]) let attributed = NSMutableAttributedString(string: text + completion) let range = NSMakeRange((text as NSString).length, (completion as NSString).length) attributed.addAttribute(NSAttributedString.Key.backgroundColor, value: highlightColor, range: range) diff --git a/Tests/AutocompleteTextFieldUITests.swift b/Tests/AutocompleteTextFieldUITests.swift index c428c44..2cbbab4 100644 --- a/Tests/AutocompleteTextFieldUITests.swift +++ b/Tests/AutocompleteTextFieldUITests.swift @@ -22,26 +22,26 @@ class AutocompleteTextFieldUITests: XCTestCase { field.typeText("w") XCTAssertEqual(field.value! as! String, "www.google.com/") - field.typeText(XCUIKeyboardKeyDelete) + field.typeText(XCUIKeyboardKey.delete.rawValue) XCTAssertEqual(field.value! as! String, "w") field.typeText("ww.yah") XCTAssertEqual(field.value! as! String, "www.yahoo.com/") - field.typeText(XCUIKeyboardKeyDelete) + field.typeText(XCUIKeyboardKey.delete.rawValue) XCTAssertEqual(field.value! as! String, "www.yah") - field.typeText(XCUIKeyboardKeyDelete) + field.typeText(XCUIKeyboardKey.delete.rawValue) XCTAssertEqual(field.value! as! String, "www.ya") - field.typeText(XCUIKeyboardKeyDelete) - field.typeText(XCUIKeyboardKeyDelete) - field.typeText(XCUIKeyboardKeyDelete) - field.typeText(XCUIKeyboardKeyDelete) - field.typeText(XCUIKeyboardKeyDelete) - field.typeText(XCUIKeyboardKeyDelete) + field.typeText(XCUIKeyboardKey.delete.rawValue) + field.typeText(XCUIKeyboardKey.delete.rawValue) + field.typeText(XCUIKeyboardKey.delete.rawValue) + field.typeText(XCUIKeyboardKey.delete.rawValue) + field.typeText(XCUIKeyboardKey.delete.rawValue) + field.typeText(XCUIKeyboardKey.delete.rawValue) XCTAssertEqual(field.value! as! String, "") field.typeText("g") XCTAssertEqual(field.value! as! String, "google.com/") field.typeText("z") XCTAssertEqual(field.value! as! String, "gz") - field.typeText(XCUIKeyboardKeyDelete) + field.typeText(XCUIKeyboardKey.delete.rawValue) XCTAssertEqual(field.value! as! String, "g") field.typeText("o") XCTAssertEqual(field.value! as! String, "google.com/")