Swift集成FaceTec SDK生产环境初始化崩溃问题求助
FaceTec SDK初始化崩溃:boost::property_tree::ini_parser_error 排查方案
崩溃报错libc++abi: terminating due to uncaught exception of type boost::wrapexcept<boost::property_tree::ini_parser::ini_parser_error>说明FaceTec SDK内部解析INI格式文件时失败,找不到预期的=字符,问题根源集中在SDK初始化传入的参数格式错误,以下是具体排查步骤:
1. 优先验证productionKeyJson的合法性
- 初始化前打印
productionKeyJson完整内容,确认:- 是标准合法的JSON字符串,无语法错误(比如缺失引号、逗号,或多余换行/空格)
- 符合FaceTec生产密钥格式要求(官方生产密钥是包含
key、expiry等字段的结构化JSON,而非INI格式)
- 检查
AppConfig.shared.productionKeyDetails?.toJsonString()的转换逻辑,确认模型转JSON时未丢失字段或产生格式异常
2. 检查设备标识符与加密密钥格式
- 确认
deviceKeyIdentifier是FaceTec分配的合法标识符,无多余空格、换行或特殊字符 - 确认
faceScanEncryptionKey为正确公钥格式(通常是Base64编码或PEM格式字符串),无格式损坏(比如缺少-----BEGIN PUBLIC KEY-----/-----END PUBLIC KEY-----标记,或存在无关换行)
3. 调试临时文件内容(模拟器环境)
错误中提到的临时文件是SDK生成的解析源,在模拟器上复现崩溃后:
- 通过Xcode的
Window > Devices and Simulators找到对应App的沙盒路径 - 进入
tmp目录查看报错中指定的文件内容,直接定位SDK解析的错误数据
4. 与后端确认配置一致性
- 确认后端返回的生产密钥是FaceTec官方提供的JSON格式密钥,而非INI格式
- 核对
deviceKeyIdentifier是否与后端及FaceTec服务端配置的标识符完全一致
调试代码建议
在初始化前添加参数打印,直观排查格式问题:
static func initializeFaceTecSDKFromAutogeneratedConfig(completion: @escaping (Bool) -> ()) { guard let productionKeyJson = AppConfig.shared.productionKeyDetails?.toJsonString() else { print("Error: Production key is missing to initialize the SDK.") completion(false) return } let deviceKeyIdentifier = AppConfig.shared.DeviceKI let faceScanEncryptionKey = AppConfig.shared.publicKey // 添加调试打印 print("=== FaceTec Init Params ===") print("Production Key: \(productionKeyJson)") print("Device Key ID: \(deviceKeyIdentifier)") print("Encryption Key: \(faceScanEncryptionKey)") if deviceKeyIdentifier.isEmpty || faceScanEncryptionKey.isEmpty { print("Error: Missing device configuration or encryption key to initialize the SDK.") completion(false) return } FaceTec.sdk.initializeInProductionMode( productionKeyText: productionKeyJson, deviceKeyIdentifier: deviceKeyIdentifier, faceScanEncryptionKey: faceScanEncryptionKey, completion: { success in print(success ? "FaceTec SDK initialized in production mode" : "FaceTec SDK initialization failed.") completion(success) } ) }
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

