我正在开发具有本机依赖项的 ReactNative 应用程序。特别是我正在尝试链接专有库的 iOS xcframework。我可以构建一个应用程序并初始化 SDK,但过了一会儿,应用程序崩溃了,因为 SDK 尝试发送分析但失败了。
错误信息:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unacceptable type of value for attribute: property = "data"; desired type = Dictionary; given type = _TtGCs26_SwiftDeferredNSDictionarySSSS_$; value = {
"app_type" = MEP;
"application_bundle_id" = "xxx";
"application_installer_id" = "com.apple.dt.Xcode";
"application_name" = xxx;
"application_version" = "999.999.999";
"client_id" = "xxx";
country = xxx;
"device_platform" = "iPhone16,1|iOS|17.2";
"external_app_id" = "xxx";
"mep_analytics_sdk_version" = "1.1.1";
}.'
回溯顶部:
Last Exception Backtrace:
0 CoreFoundation 0x110ee6751 __exceptionPreprocess + 226
1 libobjc.A.dylib 0x116290904 objc_exception_throw + 48
2 CoreData 0x10f367a7c _PFManagedObject_coerceValueForKeyWithDescription + 2175
3 CoreData 0x10f36f51b _sharedIMPL_setvfk_core + 177
4 CoreData 0x10f3737e3 _sharedIMPL_copying_setvfk_core + 54
5 XxxAnalytics 0x1137d94f5 specialized Client.__allocating_init(entity:insertInto:id:data:) + 229
6 XxxAnalytics 0x1137e5a13 closure #1 in AnalyticsStorageManager.add(_:) + 355
7 XxxAnalytics 0x1137daedc thunk for @callee_guaranteed () -> () + 12
8 XxxAnalytics 0x1137daefe thunk for @escaping @callee_guaranteed () -> () + 14
9 CoreData
其中 XxxAnalytics 是我链接的专有库。
调查: 当我将库链接到新的 ReactNative 应用程序(使用
npx [email protected] init TestProj
创建)时,一切正常。但是当我将它与生产应用程序链接时它崩溃了。看起来问题出在构建设置中,但我不知道具体在哪里。
生产应用程序不使用 ReactNative 自动链接。
在 Swift 源 中,我发现
SwiftDeferredNSDictionary
是 Swift-ObjC 桥接实现。所以我可以假设在某些情况下字典是在 Swift 中形成的并且一切正常,但在其他情况下它是在 ObjC 中形成的并且它破坏了它。
问题:哪些构建设置可能会导致此类错误?
此问题是由 ReactNative navigation lib 引起的。该库包含一个
Dictionary
接口,它会与 Swift Dictionary
产生名称冲突。重命名此接口可以解决该问题。