Swift 4 - multiple-argument function types causing Parameter Error
Closed this issue · 1 comments
Even though the project compiles within Swift 4, I suspect that there are some underlying issues causing unexpected behavior when writing/reading from the keychain.
In a project that uses Locksmith, calling try Locksmith.saveData(data:forUserAccount:inService:)
is throwing a param
error.
From my investigations into why this might be occurring the source of the error is in Locksmith.swift line 559-565. I suspect it may be being caused by the use of $0 to pass a closure parameter value into another closure. If I understand correctly Swift 4.0 does introduce some changes to this syntax?
public extension CreateableSecureStorable {
var performCreateRequestClosure: PerformRequestClosureType {
return { (requestReference: CFDictionary, result: inout AnyObject?) in
return withUnsafeMutablePointer(to: &result) { SecItemAdd(requestReference, UnsafeMutablePointer($0)) }
}
}
}
Thanks
@matthewpalmer Ah! A colleague of mine investigated further and we've discovered this is the cause of the issue I was experiencing, not actually Locksmith itself.
For reference, Xcode 9 requires Unit Tests to be connected to an App Target as Host in order to access the keychain https://stackoverflow.com/questions/46299406/reading-from-keychain-xcode-9-simulators-returns-nothing