LoginSignup
0
0

More than 1 year has passed since last update.

React Native の Native Modlues を作るも、今は re-architecture の作業期間中で時期が悪かったというのを共有したい

Last updated at Posted at 2022-06-20

React Native と聞くと、全てを JavaScript や TypeScript で作っていると思うかもしれませんが、ネイティブ特有の機能を Native Modules として、Swift や Kotlin で作ることができます。今回、久々に Native Modules を作ったら、色々変わっていたのと、一部で開発に詰まってしまったので、共有したいと思います。

Native Modules を作る

公式ドキュメント Native Modules NPM Package Setup に従って操作すれば、できます。

npx create-react-native-library {作りたいモジュール名}

とタイプして対話型 UI で情報を入力したら、雛形が完成します。簡単ですね。これは callstack の react-native-builder-bob を呼んでいます。

次に yarn をすると、必要なライブラリや cocoapods のインストールがされ、開発が開始できます。src/index.ts で React Native 側のコードを書いています。そのコードを書き終えると、再び yarn すると、TypeScript がトランスコンパイルされてます。

その後は、example ファイルの iosandroid のプロジェクトを開き、ネイティブ側のコードを書いています。

一通りの開発が終われば、GitHub などに挙げて

yarn add https://github.com/****/****.git

とタイプすれば Native Modlues を導入できます。また npm に登録すれば、モジュール名で導入できるようになります。

ここからが本題です

Native Modules の動作確認でクラッシュしないのを確認して、開発プロジェクトに導入したところ、特定の操作でクラッシュしました。なぜだ・・・。

調べたところ、Native Modules の example の React Native が 0.63 であり、導入したプロジェクトが 0.68 のため、React-Core が提供する RCTEventEmitter.msendEvent(withName:body:) の内部実装が変更されていました。ネイティブから React Native にイベントを送信するときに、クラッシュしました。

RCTCallableJSModules is not set. This is probably because you've explicitly synthesized the RCTCallableJSModules in {モジュール名}, even though it's inherited from RCTEventEmitter.

修正対応するため、すぐに Native Modules の example の React Native を 0.68 にアップデートしました。0.68 は新しいアーキテクチャに対応するため、多くの変更があるのでアップデートは大変でした。

その後、いろいろと RCTCallableJSModules 関連を見ましたが、分からない。残念ながら時間的に今日は諦めました。またの時間に、他の有名どころのライブラリのコードなどを見漁って、調べようと思います。

もし解決法を知っている方がいたら、教えてもらえると幸いです。

まとめ

React Native は年に数回、とても面倒に感じることがあるのですが、まさに今です。Native Modules の公式ドキュメントにも書いているのですが、今はアーキテクチャの開発期間中の真盛りなので、Native Modules の開発はすこし大変そうです(私の理解力が足りないだけ)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0