首页 > 解决方案 > React Native iOS 14 仅尝试从 objects[0] #29970 插入 nil 对象

问题描述

这是我只在 iOS 14 设备上遇到的问题。

描述

我的项目在 iOS 13 上运行良好,在我尝试在 iOS 14 上运行后,我总是在 xcode 中遇到错误

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]:尝试从对象 [0] 插入 nil 对象”

反应原生版本:

System:
    OS: macOS 11.0
    CPU: (4) x64 Intel(R) Core(TM) i3-8100B CPU @ 3.60GHz
    Memory: 65.82 MB / 8.00 GB
    Shell: 5.8 - /bin/zsh
  Binaries:
    Node: 10.16.1 - ~/.nvm/versions/node/v10.16.1/bin/node
    Yarn: 1.22.4 - /usr/local/bin/yarn
    npm: 6.9.0 - ~/.nvm/versions/node/v10.16.1/bin/npm
    Watchman: 4.9.0 - /usr/local/bin/watchman
  Managers:
    CocoaPods: 1.9.3 - /usr/local/bin/pod
  SDKs:
    iOS SDK:
      Platforms: iOS 14.0, DriverKit 20.0, macOS 11.0, tvOS 14.0, watchOS 7.0
    Android SDK: Not Found
  IDEs:
    Android Studio: Not Found
    Xcode: 12.0/12A8189h - /usr/bin/xcodebuild
  Languages:
    Java: 1.8.0_252 - /usr/bin/javac
    Python: 2.7.16 - /usr/bin/python
  npmPackages:
    @react-native-community/cli: Not Found
    react: 16.13.1 => 16.13.1 
    react-native: 0.63.2 => 0.63.2 
    react-native-macos: Not Found
  npmGlobalPackages:
    *react-native*: Not Found

豆荚:

require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
require_relative '../node_modules/react-native/scripts/react_native_pods'

platform :ios, '10.0'

target 'MYAPP' do
  config = use_native_modules!
  use_react_native!(:path => config["reactNativePath"])

  target 'MYAPPTests' do
    inherit! :search_paths
    # Pods for testing
  end

  use_native_modules!
end

日志:

2020-09-17 15:23:46.876152+0300 MYAPP[4143:493632] <Warning>: Please set a value for FacebookAutoLogAppEventsEnabled. Set the flag to TRUE if you want to collect app install, app launch and in-app purchase events automatically. To request user consent before collecting data, set the flag value to FALSE, then change to TRUE once user consent is received. Learn more: https://developers.facebook.com/docs/app-events/getting-started-app-events-ios#disable-auto-events.
    2020-09-17 15:23:46.877416+0300 MYAPP[4143:493632] <Warning>: You haven't set a value for FacebookAdvertiserIDCollectionEnabled. Set the flag to TRUE if you want to collect Advertiser ID for better advertising and analytics results.
2020-09-17 15:24:47.234399+0300 MYAPP[4143:493866] Task <3B7D3C61-B3E5-4E92-B884-E98B86FF97E9>.<1> finished with error [-1001] Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={_kCFStreamErrorCodeKey=-2102, NSUnderlyingError=0x2822729d0 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <3B7D3C61-B3E5-4E92-B884-E98B86FF97E9>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <3B7D3C61-B3E5-4E92-B884-E98B86FF97E9>.<1>"
), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=http://192.168.0.105:8081/status, NSErrorFailingURLKey=http://192.168.0.105:8081/status, _kCFStreamErrorDomainKey=4}
2020-09-17 15:24:47.256281+0300 MYAPP[4143:493632] [native] Running application MYAPP ({
initialProps =     {
};
rootTag = 1;
})
2020-09-17 15:24:47.268978+0300 MYAPP[4143:493881] 6.25.0 - [Firebase/Core][I-COR000003] The default Firebase app has not yet been configured. Add `[FIRApp configure];` (`FirebaseApp.configure()` in Swift) to your application initialization. Read more: .
2020-09-17 15:24:47.312992+0300 MYAPP[4143:493866] 6.25.0 - [Firebase/Messaging][I-FCM001000] FIRMessaging Remote Notifications proxy enabled, will swizzle remote notification receiver handlers. If you'd prefer to manually integrate Firebase Messaging, add "FirebaseAppDelegateProxyEnabled" to your Info.plist, and set it to NO. Follow the instructions at:
https://firebase.google.com/docs/cloud-messaging/ios/client#method_swizzling_in_firebase_messaging
to ensure proper integration.
2020-09-17 15:24:47.317115+0300 MYAPP[4143:493866] 6.25.0 - [Firebase/Analytics][I-ACS031025] Analytics screen reporting is enabled. Call +[FIRAnalytics setScreenName:setScreenClass:] to set the screen name or override the default screen class name. To disable screen reporting, set the flag FirebaseScreenReportingEnabled to NO (boolean) in the Info.plist
2020-09-17 15:24:47.340982+0300 MYAPP[4143:493866] 6.25.0 - [Firebase/Analytics][I-ACS023007] Analytics v.60501000 started
2020-09-17 15:24:47.341770+0300 MYAPP[4143:493866] 6.25.0 - [Firebase/Analytics][I-ACS023008] To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see)
2020-09-17 15:24:47.410764+0300 MYAPP[4143:493992] [Client] Updating selectors after delegate removal failed with: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service on pid 88 named com.apple.commcenter.coretelephony.xpc was invalidated from this process." UserInfo={NSDebugDescription=The connection to service on pid 88 named com.apple.commcenter.coretelephony.xpc was invalidated from this process.}
2020-09-17 15:24:47.429141+0300 MYAPP[4143:493632] FBSDKLog: fb-messenger-share-api is missing from your Info.plist under LSApplicationQueriesSchemes and is required for iOS 9.0
2020-09-17 15:24:47.429431+0300 MYAPP[4143:493632] FBSDKLog: fbauth2 is missing from your Info.plist under LSApplicationQueriesSchemes and is required for iOS 9.0
2020-09-17 15:24:47.431858+0300 MYAPP[4143:493881] [tcp] tcp_input [C2.1:3] flags=[R] seq=2910663435, ack=0, win=0 state=CLOSED rcv_nxt=2910663435, snd_una=2084476413
2020-09-17 15:24:47.432180+0300 MYAPP[4143:493881] [tcp] tcp_input [C2.1:3] flags=[R] seq=2910663435, ack=0, win=0 state=CLOSED rcv_nxt=2910663435, snd_una=2084476413
2020-09-17 15:24:47.436111+0300 MYAPP[4143:493632] FBSDKLog: starting with Graph API v2.4, GET requests for /195739114824780/model_asset should contain an explicit "fields" parameter
2020-09-17 15:24:47.471741+0300 MYAPP[4143:493881] [tcp] tcp_input [C1.1:3] flags=[R] seq=2629399053, ack=0, win=0 state=CLOSED rcv_nxt=2629399053, snd_una=3107602082
2020-09-17 15:24:47.471909+0300 MYAPP[4143:493881] [tcp] tcp_input [C1.1:3] flags=[R] seq=2629399053, ack=0, win=0 state=CLOSED rcv_nxt=2629399053, snd_una=3107602082
2020-09-17 15:24:47.572210+0300 MYAPP[4143:494213] 6.25.0 - [Firebase/Analytics][I-ACS800023] No pending snapshot to activate. SDK name: app_measurement
2020-09-17 15:25:07.703378+0300 MYAPP[4143:494224] [tcp] tcp_output [C14.1:3] flags=[R.] seq=912352729, ack=2533363381, win=4096 state=CLOSED rcv_nxt=2533363381, snd_una=912352729
2020-09-17 15:25:07.705428+0300 MYAPP[4143:494224] Connection 14: received failure notification
2020-09-17 15:25:07.705746+0300 MYAPP[4143:494224] Connection 14: failed to connect 3:-9816, reason -1
2020-09-17 15:25:07.705837+0300 MYAPP[4143:494224] Connection 14: encountered error(3:-9816)
2020-09-17 15:25:18.335269+0300 MYAPP[4143:494219] [tcp] tcp_output [C15.1:3] flags=[R.] seq=2353633686, ack=248484103, win=4096 state=CLOSED rcv_nxt=248484103, snd_una=2353633686
2020-09-17 15:25:18.338275+0300 MYAPP[4143:494219] Connection 15: received failure notification
2020-09-17 15:25:18.339071+0300 MYAPP[4143:494219] Connection 15: failed to connect 3:-9816, reason -1
2020-09-17 15:25:18.340516+0300 MYAPP[4143:494219] Connection 15: encountered error(3:-9816)
2020-09-17 15:25:18.416619+0300 MYAPP[4143:494224] [boringssl] boringssl_context_handle_fatal_alert(1763) [C17.1:2][0x10720d610] read alert, level: fatal, description: inappropriate fallback
2020-09-17 15:25:18.418166+0300 MYAPP[4143:494224] [boringssl] boringssl_session_handshake_incomplete(90) [C17.1:2][0x10720d610] SSL library error
2020-09-17 15:25:18.418648+0300 MYAPP[4143:494224] [boringssl] boringssl_session_handshake_error_print(41) [C17.1:2][0x10720d610] Error: 4360096920:error:1000043e:SSL routines:OPENSSL_internal:TLSV1_ALERT_INAPPROPRIATE_FALLBACK:/Library/Caches/com.apple.xbs/Sources/boringssl/boringssl-351.0.1/ssl/tls_record.cc:592:SSL alert number 86
2020-09-17 15:25:18.419022+0300 MYAPP[4143:494224] [boringssl] nw_protocol_boringssl_handshake_negotiate_proceed(761) [C17.1:2][0x10720d610] handshake failed at state 12288: not completed
2020-09-17 15:25:18.423447+0300 MYAPP[4143:494224] Connection 17: received failure notification
2020-09-17 15:25:18.424619+0300 MYAPP[4143:494224] Connection 17: failed to connect 3:-9860, reason -1
2020-09-17 15:25:18.424861+0300 MYAPP[4143:494224] Connection 17: encountered error(3:-9860)
2020-09-17 15:25:18.427595+0300 MYAPP[4143:494224] Task <145461A1-5355-49F3-B990-A63ADD61AEBF>.<1> HTTP load failed, 0/0 bytes (error code: -1200 [3:-9860])
2020-09-17 15:25:48.269210+0300 MYAPP[4143:494224] Task <E0E85B74-2BA3-4904-AF29-40B7B2C0B08B>.<2> finished with error [-1001] Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={_kCFStreamErrorCodeKey=-2102, NSUnderlyingError=0x282277b10 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <E0E85B74-2BA3-4904-AF29-40B7B2C0B08B>.<2>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <E0E85B74-2BA3-4904-AF29-40B7B2C0B08B>.<2>"
), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=http://192.168.0.105:8081/status, NSErrorFailingURLKey=http://192.168.0.105:8081/status, _kCFStreamErrorDomainKey=4}
2020-09-17 15:25:48.317358+0300 MYAPP[4143:494412] [connection] nw_socket_handle_socket_event [C18.1:1] Socket SO_ERROR [61: Connection refused]
2020-09-17 15:25:48.320763+0300 MYAPP[4143:494412] [connection] nw_socket_handle_socket_event [C18.2:1] Socket SO_ERROR [61: Connection refused]
2020-09-17 15:25:48.321604+0300 MYAPP[4143:494239] [connection] nw_connection_get_connected_socket [C18] Client called nw_connection_get_connected_socket on unconnected nw_connection
2020-09-17 15:25:48.321674+0300 MYAPP[4143:494239] TCP Conn 0x281b3c420 Failed : error 0:61 [61]
2020-09-17 15:25:48.346472+0300 MYAPP[4143:494555] 6.25.0 - [Firebase/Messaging][I-FCM012002] Error in application:didFailToRegisterForRemoteNotificationsWithError: (null)
2020-09-17 15:25:48.355030+0300 MYAPP[4143:493632] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]'
*** First throw call stack:
(0x19c40a5ac 0x1b048442c 0x19c4794cc 0x19c485608 0x19c2fec8c 0x19c2f1840 0x1009e3350 0x10070c4c4 0x10094c264 0x103aa3b68 0x103aa55f0 0x103ab4890 0x19c3871e4 0x19c3813b4 0x19c3804bc 0x1b2e05820 0x19ed24734 0x19ed29e10 0x10070c994 0x19c047e60)
libc++abi.dylib: terminating with uncaught exception of type NSException

标签: iosswiftfirebasereact-native

解决方案


您的应用名称中是否有任何非 ASCII 字符?iOS 14 应用程序中出现了这个新问题,在其中询问具有任何非 ASCII 字符的 iOS 14 应用程序的权限会使应用程序崩溃

react-native-firebase repo 中报告的问题:https ://github.com/invertase/react-native-firebase/issues/4093

解决此问题的方法是将产品名称更改为 ASCII 字符。正如这里提到的

此时的解决方法是仅在您的文件中使用简单的 ASCII 字符,Product Name并使用您希望在Display Name

Product Name可以在 Xcode 项目 -> Build Settings->中设置Packaging)不是用户可见的实体。

您可以将Display Name(aka Bundle Display Namein Info.plist) 更改为您希望在应用程序图标下显示的字符串,以及显示的通知。

为了进行此名称更改,您可能需要先删除应用程序,然后安装新版本。

如果您的应用已本地化为多种语言,您仍然可以通过本地化Display Name.

对于 RN 应用程序,Bundle Display NameinInfo.plist默认设置为$(PRODUCT_NAME). 您可以将其更改为您需要的任何字符串,包括非 ASCII 字符


推荐阅读