Skip to content

Latest commit

 

History

History
198 lines (133 loc) · 5.51 KB

V1_MIGRATION_GUIDE.md

File metadata and controls

198 lines (133 loc) · 5.51 KB

v1 Migration Guide

SimpleKeychain v1 includes a few significant changes:

  • Improved error handling.
  • Support for custom attributes.
  • Support for sharing items with other devices through iCloud synchronization.

As expected with a major release, SimpleKeychain v1 contains breaking changes. Please review this guide thorougly to understand the changes required to migrate your application to v1.


Table of Contents

Supported Languages

Swift

The minimum supported Swift version is now 5.5.

Objective-C

SimpleKeychain no longer supports Objective-C.

Supported Platform Versions

The deployment targets for each platform were raised to:

  • iOS 12.0
  • macOS 10.15
  • tvOS 12.0
  • watchOS 6.2

Types Removed

  • The A0SimpleKeychainError enum was removed in favor of the new SimpleKeychainError enum.
  • The A0SimpleKeychainItemAccessible enum was removed in favor of the new Accessibility enum.
  • The A0ErrorDomain macro was removed.
  • The A0LocalAuthenticationCapable macro was removed.

Properties removed

SimpleKeychain Struct

defaultAccessiblity

The property defaultAccessiblity was removed in favor of the new accessibility initalizer parameter.

Before / After
// Before
let simpleKeychain = A0SimpleKeychain()
simpleKeychain.defaultAccessiblity = .whenPasscodeSetThisDeviceOnly

// After
let simpleKeychain = SimpleKeychain(accessibility: .whenPasscodeSetThisDeviceOnly)

useAccessControl

The property useAccessControl was removed in favor of the new accessControlFlags initializer parameter.

Before / After
// Before
let simpleKeychain = A0SimpleKeychain()
simpleKeychain.useAccessControl = true

// After
let simpleKeychain = SimpleKeychain(accessControlFlags: .userPresence)

localAuthenticationContext

The property localAuthenticationContext was removed in favor of the new context initializer parameter. This means that SimpleKeychain will no longer create an LAContext instance, and instead one must be provided through the initializer.

Before / After
// Before
let simpleKeychain = A0SimpleKeychain()
let context = simpleKeychain.localAuthenticationContext

// After
let context = LAContext()
let simpleKeychain = SimpleKeychain(context: context)

No longer public

The following properties are no longer public:

  • service
  • accessGroup

Methods Removed

SimpleKeychain Struct

setTouchIDAuthenticationAllowableReuseDuration(_:)

The setTouchIDAuthenticationAllowableReuseDuration(_:) method was removed. Configure that through an LAContext instance instead.

Before / After
// Before
let simpleKeychain = A0SimpleKeychain()
simpleKeychain.setTouchIDAuthenticationAllowableReuseDuration(10)

// After
let context = LAContext()
context.touchIDAuthenticationAllowableReuseDuration = 10
let simpleKeychain = SimpleKeychain(context: context)

No replacement

The following methods were removed and have no replacement:

  • publicRSAKeyData(forTag:)
  • generateRSAKeyPair(withLength:publicKeyTag:privateKeyTag:)
  • dataForRSAKey(withTag:)
  • keyRefOfRSAKey(withTag:)
  • deleteRSAKey(withTag:)
  • hasRSAKey(withTag:)

Types Changed

A0SimpleKeychain was renamed to SimpleKeychain, and was changed from class to struct.

Method Signatures Changed

SimpleKeychain Struct

All the methods now throw a SimpleKeychainError upon failure.

Methods renamed

Old New
setString(forKey:) set(_:forKey:)
setData(forKey:) set(_:forKey:)
hasValue(forKey:) hasItem(forKey:)
deleteEntry(forKey:) deleteItem(forKey:)
clearAll() deleteAll()

Parameters removed

promptMessage

The promptMessage parameter was removed from the following methods, as kSecUseOperationPrompt is deprecated:

  • string(forKey:)
  • data(forKey:)
  • set(_:forKey:)

Configure the message through an LAContext instance instead, using the LAContext.localizedReason property.

error

The error parameter was removed from the data(forKey:) method, as it now throws a SimpleKeychainError.

Behavior Changes

SimpleKeychain Struct

  • kSecUseAuthenticationUI is no longer used. Configure whether the user should be prompted for authentication through an LAContext instance instead, using the LAContext.interactionNotAllowed property.
  • The hasItem(forKey:) method no longer retuns false whenever any error occurs. Now it only returns false when the error is errSecItemNotFound.

Go up ⤴