Я не вижу ни одного родного модуля iOS в JS
У меня есть некоторый опыт работы с React, но я новичок в React Native. Я немного поигрался, но застрял, когда попытался написать основной нативный модуль для iOS. Я пробовал и со Swift, и с Objective C. (У меня есть некоторый базовый опыт работы со Swift, но Objective C совершенно новый для меня)
Некоторый контекст:
- Проект создан с
react-native-cli 2.0.1
- я использую
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
.
Я также перезапустил приложение в симуляторе.