2024年12月時点でのReact Native開発環境の構築手順

毎回React Nativeの環境構築に苦労するので、2024年現時点でしっくりした環境構築の方法を残しておく。 立ち上げるアプリの環境 "expo": "~52.0.11", "react-native": "0.76.3", "eslint": "^8.57.0", "eslint-config-expo": "~8.0.1", Expoでアプリを立ち上げる npx create-expo-app@latest でプロジェクトを作成すると、 Creating an Expo project using the default template. To choose from all available templates pass in the --template arg: $ npx create-expo-app --template To choose from all available examples pass in the --example arg: $ npx create-expo-app --example √ What is your app named? ... my-app ✔ Downloaded and extracted project files. のようにデフォルトで作成される。 しばらくすると ✅ Your project is ready!...

投稿日 · 2024-12-01 · 更新日 · 2024-12-01 · 3 分 · nove-b

React Nativeでセキュアな環境にTokenを保存する

要はブラウザ委のストレージのような機能をアプリでどう再現するかを調べてみた。 iOSでは KeyChain、Androidでは KeyStoreという安全に重要情報を保存できる場所が用意されているらしい。 Expo Cliではreact-native-keychainが使えない。 で、React Nativeではreact-native-keychainというプラグインで実現できるらしいが、Expo Cliでは使えないらしい。これは落とし穴だった。結構な時間を溶かした。 expo-secure-storeを使用しよう 公式サイト npx expo install expo-secure-store でインストールする。 app.jsonに下記を追加する。 { "expo": { "plugins": [ [ "expo-secure-store", { "faceIDPermission": "Allow $(PRODUCT_NAME) to access your Face ID biometric data." } ] ] } } 実装 ログインボタンを押したときにアクセストークンを保存する。 <Button title="Log in" onPress={async () => { try { // ログイン処理 // トークンを保存してメイン画面に遷移 await SecureStore.setItemAsync("accessToken", "userToken"); navigation.navigate("Main"); } catch (error) { console.error("SecureStore error: ", error); } }} /> 遷移先のページでチェックする。...

投稿日 · 2024-06-10 · 更新日 · 2024-07-07 · 1 分 · nove-b

Expoのバージョンがシミュレーション用のスマホアプリとずれたのでアップグレードする

2年前からreact nativeでアプリを作成している。 が、いろいろ(他のアプリ作ったり、仕事が忙しくなったり)あり放置気味で、重い腰を上げるかと「完成」を今年の目標に入れた。 GoでApi作成し、結合しようかと思ったところスマホのExpoアプリで開発中のアプリが開けなくなっていた。 原因はExpoのバージョンがずれていたこと。 スマホのアプリのアップデートを自動にしているので、どうやら開発側とずれてしまっていたらしい。 スマホアプリのバージョンを落としてもいいのだけれど、開発側のアップデートをすることにした。 Expo SDK のアップグレード まんま上記の通り実行すれば問題ない。 npm install expo@latest npx expo install --fix これで無事に開発を続行することができるようになった。

投稿日 · 2024-06-03 · 更新日 · 2024-07-07 · 1 分 · nove-b

Goで作成したローカルサーバーにReact NativeからアクセスしようとしたらTypeError: Network request failedになった

API作成が一段落した Goの勉強でAPIを作成してきたが、やっと一段落した。 そこでアプリ側から叩こうとした結果、エラーが出たので原因を理由を調査してみた。 Goで立ち上げたサーバ http://localhost:8081/api/v1/endpoint のローカルIPアドレス http://172.19.176.1:8081/api/v1/endpoint にReact Nativeで作成したアプリからアクセスしてみる。 ネットワークリクエストが失敗しました 結果、 TypeError: Network request failed というエラーが出力された。 ファイアーウォールが関係している? 【react-native】シュミレータでAPIアクセスを行う際にnetwork errorの記事を参照するに、CORSかしらって思ったけど、アプリでCORSはちょっと違う気がする。 アプリにドメイン存在しないので、どのドメインを許可すればいいのっていうことになる。 で、色々調査していると、ファイアーウォールが関係している気がしてきた。 Windows向けプログラムに搭載されているファイアウォール(パーソナルファイアウォール)機能は、ネットワークプリンターや他のコンピューターとの通信を遮断する場合があります。その場合は、該当する通信を許可するルールを作成することで、通信ができるようになります。 https://eset-support.canon-its.jp/faq/show/235?site_domain=default ポートを開放すればいける感じかもしれないけど、せっかくだしサーバーにあげてみることにした。 どうせいずれあげる必要があるしね。

投稿日 · 2024-05-04 · 更新日 · 2024-07-07 · 1 分 · nove-b

React NativeでStackNavigatorを使用し一覧から詳細への遷移を実装する

過去にBottom Tabs Navigatorを作成したので、今回は、Stack Navigatorを導入する。 実装に期待する動きは、 タブ移動が可能 タブ移動後に詳細ページへの遷移が可能 上記の通りなので、Bottom Tabs NavigatorとStack Navigatorを併用する必要がある。 その前提で進めていく。 必要なパッケージをインストールする npm install @react-navigation/stack npm install react-native-gesture-handler インストール後、必要なファイルを作成する。 実装していく mkdir src mkdir src/stack touch src/screens/SampleStackScreen.tsx SampleStackScreen.tsxは下記の通りになる。 import React from 'react' import Sample from '../screens/Sample' import { createStackNavigator } from '@react-navigation/stack' import SampleDetail from '../screens/SampleDetail' const Stack = createStackNavigator() const SampleStackScreen = () => { return ( <Stack.Navigator screenOptions={{ headerShown: false }}> <Stack.Screen name="Sample" component={Sample} /> <Stack.Screen name="SampleDetail" component={SampleDetail} /> </Stack....

投稿日 · 2023-10-28 · 更新日 · 2024-06-07 · 2 分 · nove-b