dispatch_once(&nativeComponentToken, ^{
thirdPartyComponents = @{
@"RNDateTimePicker": NSClassFromString(@"RNDateTimePickerComponentView"),
@"RNCPicker": NSClassFromString(@"RNCPickerComponentView"),
@"RNMapsGoogleMapView": NSClassFromString(@"RNMapsGoogleMapView"),
@"RNMapsGooglePolygon": NSClassFromString(@"RNMapsGooglePolygonView"),
};
});
Приложение аварийно завершает работу со следующим исключением:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[2]'
Что я проверил:
Проверил, что имена компонентов написаны правильно.
Проверил, правильно ли связаны классы и существуют ли они в базе кода.
Наблюдение:
Из трассировки стека и выделенной строки в Xcode видно, что NSClassFromString возвращает ноль для одного или нескольких компонентов строки.
Вопросы:
Как проверить, какой класс возвращает ноль и вызывает сбой?
Как лучше всего условно регистрировать только доступные компоненты, чтобы избежать этого исключения NSInvalidArgumentException?
Есть ли более безопасный способ регистрации сторонних компонентов в RCTThirdPartyComponentsProvider.mm?
Любой идеи или предложения будут оценены по достоинству. Спасибо!
Среда:
Версия React Native: 0.79.2
Версия Xcode: 16.4
Платформа: iOS
Устройство: iphone 11 pro max (iOS: 18.5)

Код файла AppDelegate.swift
import UIKit
import React
import React_RCTAppDelegate
import ReactAppDependencyProvider
import Firebase
import GoogleMaps
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var reactNativeDelegate: ReactNativeDelegate?
var reactNativeFactory: RCTReactNativeFactory?
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
) -> Bool {
FirebaseApp.configure()
// Initialize Google Maps
GMSServices.provideAPIKey("google_key")
let delegate = ReactNativeDelegate()
let factory = RCTReactNativeFactory(delegate: delegate)
delegate.dependencyProvider = RCTAppDependencyProvider()
reactNativeDelegate = delegate
reactNativeFactory = factory
window = UIWindow(frame: UIScreen.main.bounds)
factory.startReactNative(
withModuleName: "KnotHr",
in: window,
launchOptions: launchOptions
)
return true
}
}
class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate {
override func sourceURL(for bridge: RCTBridge) -> URL? {
self.bundleURL()
}
override func bundleURL() -> URL? {
#if DEBUG
RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index")
#else
Bundle.main.url(forResource: "main", withExtension: "jsbundle")
#endif
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... ary-during
Мобильная версия