Как безопасно хранить значения в связке ключей iOS в многоплатформенном приложении Kotlin (KMP)? toNSData() не распознанIOS

Программируем под IOS
Anonymous
Как безопасно хранить значения в связке ключей iOS в многоплатформенном приложении Kotlin (KMP)? toNSData() не распознан

Сообщение Anonymous »

Я создаю многоплатформенное приложение Kotlin (KMP) и хочу безопасно хранить конфиденциальные значения, такие как токены аутентификации, на iOS с помощью Keychain (вместо NSUserDefaults). Я нашел этот код на Medium, но он не компилируется, поскольку toNSData() не распознается:

Код: Выделить всё

// iosMain
import platform.Security.*
import kotlinx.cinterop.*

class SecureStorageIOS : SecureStorage {
override fun save(key: String, value: String) {
val data = value.encodeToByteArray().toNSData()
val query = mapOf(
kSecClass to kSecClassGenericPassword,
kSecAttrAccount to key,
kSecValueData to data
)
SecItemAdd(query, null)
}

override fun get(key: String): String? {
val query = mapOf(
kSecClass to kSecClassGenericPassword,
kSecAttrAccount to key,
kSecReturnData to kCFBooleanTrue!!,
kSecMatchLimit to kSecMatchLimitOne
)
memScoped {
val result = nativeHeap.alloc()
val status = SecItemCopyMatching(query, result.ptr)
if (status == errSecSuccess) {
val nsData = result.value as NSData
return nsData.toByteArray().decodeToString()
}
}
return null
}
}
Проблема в том, что toNSData() не существует в Kotlin/Native. Я также получаю ошибки типа при использовании SecItemAdd, поскольку он ожидает CFDictionaryRef, а не карту Kotlin.
Мои вопросы:
  • Как правильно преобразовать ByteArray в NSData в
    Kotlin/Native?
  • Есть ли более простой или рекомендуемый способ использования Keychain в KMP для
    безопасности хранилище?


Подробнее здесь: https://stackoverflow.com/questions/798 ... rm-kmp-app

Вернуться в «IOS»