Я не вижу ни одного родного модуля iOS в JS

У меня есть некоторый опыт работы с React, но я новичок в React Native. Я немного поигрался, но застрял, когда попытался написать основной нативный модуль для iOS. Я пробовал и со Swift, и с Objective C. (У меня есть некоторый базовый опыт работы со Swift, но Objective C совершенно новый для меня)

Некоторый контекст:

  1. Проект создан с react-native-cli 2.0.1
  2. я использую XCode 9.1

Вот класс.swift

import Foundation

@objc(Something)
class Something: NSObject {

  @objc
  func printSomething() -> Void {
    print("Something")
  }
}

Вот файл моста

#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>

@interface RCT_EXTERN_MODULE(Something, NSObject)

RCT_EXTERN_METHOD(printSomething)

@end

И Project-Brigding-Header.h

//
//  Use this file to import your target's public headers that you would like to expose to Swift.
//

#import <React/RCTBridgeModule.h>

Мой файл App.js

...
import { NativeModules } from 'react-native';
...
type Props = {};
export default class App extends Component<Props> {
  componentDidMount() {
    console.log('NativeModules: ', NativeModules);
  }
...
}

Здесь проблема. Выходные данные console.log() говорят, что NativeModules - пустой объект:

2018-02-22 18:19:04.590 [info][tid:com.facebook.react.JavaScript] 'NativeModules', {}
2018-02-22 18:19:04.589970+0200 velimo_app_rn[14748:400982] 'NativeModules', {}

Я не понимаю, что я делаю не так. Я прочитал почти все, что смог найти, только по теме, но не вижу, что я делаю неправильно. Если у вас есть предложения, пожалуйста, дайте мне знать. Спасибо!

1 ответ

Решение

Решение состояло в том, чтобы зарегистрировать имя модуля console.log(NativeModules.Something), а не весь объект NativeModules. Это не было ничего плохого в моей настройке.

Если вы внесли изменения в собственный код iOS, вам необходимо пересобрать проект, повторно запустив npx react-native run-ios и перезапустите сервер npx react-native start.

Я также перезапустил приложение в симуляторе.

Другие вопросы по тегам