Patryk Drozd
04/15/2025, 8:58 AMthows
with kotlin.
Swift
@objcMembers public class AESCryptoBridge: NSObject {
public func test() throws {
throw CryptoError.invalidData
}
}
On Kotlin I have access to NSError but I have no idea how to use is. Is there any resource that will explain me how to work with?
AESCryptoBridge().testAndReturnError("I have no idea how to use NSError Pointer here")
I found this code but alloc is deprecated if I am correct
val errorPointer: CPointer<ObjCObjectVar<NSError?>> = alloc<ObjCObjectVar<NSError?>>().ptr
Update: I found the solution 🙂
val error = memScoped {
allocPointerTo<ObjCObjectVar<NSError?>>()
}
AESCryptoBridge().testAndReturnError(error.value)
Landry Norris
04/16/2025, 5:34 PMPatryk Drozd
04/17/2025, 9:29 AMmemScoped {
val error = allocPointerTo<ObjCObjectVar<NSError?>>()
SwiftCryptoBridge().initializeMACKeyWithKeyAlias(keyAlias.alias, error.value)
if (error.value != null) {
throw IllegalStateException("initializeMACKey Failed for $keyAlias with error: $error")
} else {
print("initializeMACKey Successful for: $keyAlias")
}
}
Landry Norris
04/17/2025, 6:12 PMPatryk Drozd
04/29/2025, 12:56 PMpublic func verifyChain(derCertificates: [Data]) throws {
print("<-- Before Swift Throws")
throw CertificateManagerError.invalidCertificateData
print("<-- After Swift Throws")
}
And here Kotlin
actual override fun verifyChain(certs: List<Certificate>): Result<Unit> = memScoped {
if (certs.isEmpty()) {
return Result.failure(IllegalStateException("Certificate list is empty!"))
}
val dataCertificates = certs.map { (it.asPlatformCert() as ByteArray).toNSData() }
val error = allocPointerTo<ObjCObjectVar<NSError?>>()
Log.d("tag", "Enter Swift")
certificateManager.verifyChainWithDerCertificates(
dataCertificates,
error.value,
)
Log.d("tag", "Leaved Swift")
if (error.value != null) {
return Result.failure(IllegalStateException("Verify Chain Failed with error: $error."))
}
Log.d("tag", "Error value before return ${error.value}")
return Result.success(Unit)
}
Somehow everything passed with this in my logs
Debug: (🛠️) AGENT-tag: Enter Swift
Debug: (🛠️) AGENT-tag: Leaved Swift
Debug: (🛠️) AGENT-tag: Error value before return null
<-- Before Swift Throws
BUILD SUCCESSFUL in 10s
Kotlin Code didn't waited for Swift to finish. so I didn't received NSError pointer when I needed.
Do you have maybe idea how to fix it?