묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결React Native with Expo: 제로초에게 제대로 배우기
알림 수신 상태 변경
제로초님 안녕하세요! 유저가 알림 허용을 해서 granted 상태가 되고 백엔드 서버에 pushToken까지 보내놓은 상태에서, 유저가 알림을 다시 off 했을때, 서버에서도 알림 상태를 off로 만들려면 이 상태를 DB에 저장해놨던 pushToken을 삭제하는 방식으로 관리하나요??
-
미해결아바타 커뮤니티앱 만들기 (React Native Expo)
[5-2] 글 목록 무한스크롤 구현하기 with InfiniteQuery 10:40/ useScrollTop(ref) 사용관련
18번째 줄에서 useEffect 같은 훅에서 호출한 게 아닌데 useScrollToTop()은 어떻게 트리거되어 동작하는지 궁금합니다. 6번째 줄에서 useScrollToTop() 훅은 "@react-navigation/native"에서 가져오고 있는데, "expo-router"와 같이 사용해도 되나요?
-
미해결React Native with Expo: 제로초에게 제대로 배우기
eas build:configure 안되는데, "git"이 반드시 설치되어 있어야 하나요?
eas build:configure 안되는데, "git"이 반드시 설치되어 있어야 하나요?
-
미해결React Native with Expo: 제로초에게 제대로 배우기
암호화 복호화 관련 질문
제로초님 안녕하세요..!! 백엔드쪽 요구사항에 따라서 데이터 요청 시 암호화, 받을 때 복호화 로직을 추가해야되는데, 백엔드측과 컨벤션을 맞추기 위해 AES-GCM 알고리즘을 사용해야 하는 상황입니다. expo-crypto 에는 해당 알고리즘을 지원하지 않는 거 같아서 강의에서 알려주신 https://reactnative.directory/ 를 통해서 지원하는 라이브러리를 찾아보는 중인데, 웹에서 사용하는 crypto-js 도 나와있어서 expo 환경에서도 사용할 수 있는건지 헷갈리네요. crypto-js의 공식문서를 읽어보니, NodeJS의 기본 Crypto 모듈 사용하라고하는데, react native에는 없어서 다른 대체 라이브러리가 있을까요? 또한 위 사이트에서 검색 가능한 라이브러리라면, development build 앱 또는 배포된 앱 환경에서는 모두 호환 가능하다고 보면 될까요?
-
해결됨React Native with Expo: 제로초에게 제대로 배우기
혹시 해당 강의 보면서 테스트용으로 사용할 맥북을 구매할 예정인데 어느정도 스펙 이상으로 사야 할지 의견 받아볼수있을까요?
혹시 해당 강의 보면서 테스트용으로 사용할 맥북을 구매할 예정인데 어느정도 스펙 이상으로 사야 할지 의견 받아볼수있을까요?
-
미해결React Native with Expo: 제로초에게 제대로 배우기
[TypeError: Cannot read property 'find' of undefined] 문제
제로초님 안녕하세요!! 강의에 나온대로 top tabs 적용중인데, withLayoutContext에 제네릭 타입까지 강의와 같이 적용하려고 했으나import type { TabNavigationState, ParamListBase } from '@react-navigation/native';위 코드에서 '"@react-navigation/native"' 모듈에 내보낸 멤버 'ParamListBase'이(가) 없습니다.ts(2305)ParamListBase를 불러오지 못해서 우선 타입스크립트 적용하지 않고 아래 코드와 같이 테스트했습니다.import { withLayoutContext } from 'expo-router'; import { createMaterialTopTabNavigator } from '@react-navigation/material-top-tabs'; import { Text, View } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; const { Navigator } = createMaterialTopTabNavigator(); export const MaterialTopTabs = withLayoutContext(Navigator); const GitCallbackLayout = () => { const insets = useSafeAreaInsets(); return ( <View style={{ paddingTop: insets.top }}> <Text>Callback Layout</Text> <MaterialTopTabs> <MaterialTopTabs.Screen name="index" options={{ title: 'GitHub' }} /> <MaterialTopTabs.Screen name="gitlab" options={{ title: 'GitLab' }} /> <MaterialTopTabs.Screen name="bitbucket" options={{ title: 'Bitbucket' }} /> <MaterialTopTabs.Screen name="devops" options={{ title: 'DevOps' }} /> </MaterialTopTabs> </View> ); }; export default GitCallbackLayout; 폴더 구조는 아래와 같고 index, gitlab, devops, bitbucket 컴포넌트는 모두 default export 돼있는 상태입니다.이 상태에서 페이지에 /settings/manage-git/verify 경로로 접근하면 ERROR [TypeError: Cannot read property 'find' of undefined] Code: _layout.tsx 31 | <View style={{ paddingTop: insets.top }}> 32 | <Text>Callback Layout</Text> > 33 | <MaterialTopTabs> | ^ 34 | <MaterialTopTabs.Screen name="index" options={{ title: 'GitHub' }} /> 35 | <MaterialTopTabs.Screen name="gitlab" options={{ title: 'GitLab' }} /> 36 | <MaterialTopTabs.Screen name="bitbucket" options={{ title: 'Bitbucket' }} />이렇게 에러가 나는 상황인데,, 계속 해결이 안되네요ㅠ 어떤 문제인지 아시면 도움 부탁드려요
-
미해결React Native with Expo: 제로초에게 제대로 배우기
.env 수정 후 eas update
제로초님 안녕하세요현재 게시돼있는 앱의 버전은 1.0.5버전이고, 간단한 css 수정 작업 후에 eas update로 production 채널에 업데이트를 했습니다. 이 때 .env 파일에 임시로 dev 버전 base url을 적용했었는데, 변경하는걸 까먹고 그대로 eas update를 해버려서 앱에서 업데이트를 받으니까 api가 dev 버전으로 변경돼서 다시 .env 파일을 기존 production용 base url로 변경 후 production 채널에 eas update로 배포했는데, 여전히 dev 버전 url로 나오고 있는 상황입니다. 어떻게 다시 잘못된 base url을 고칠 수 있는지 조언 주시면 감사하겠습니다..
-
해결됨웹 개발자의 연봉을 올려주는 하이브리드앱 with Expo 프레임워크
강의자료는 어디에 있나요?
강의자료는 어디에 있나요?[02-05] 헤더 옵션 심화 하는데 이미지 첨부하는 자료또는 강의에서 진행하는 소스코드를 어디서 받을 수 있는지 알려주세요.
-
미해결아바타 커뮤니티앱 만들기 (React Native Expo)
클라이언트 사이드에서 세션 관련 질문
서버쪽 코드의 .env 파일을 보면 JWT이 기본적으로 20분으로 설정되어 있는 것을 보았습니다. 예를 들어 JWT이 만료가 되고 이어서 진행을 하게 된다면, AuthRoute에 해당되는 경로들을 클라이언트에서는 여전히 접근이 가능하지만 서버에서 400번대를 응답합니다. 일반적으로 앱을 사용했던 경험을 생각하면 앱의 세션은 웹에 비해서 매우 길거나 백엔드에 대한 지식은 충분하지 않아 모르겠지만, 백엔드에서 새로 접속시 연장을 하는 등의 방법이 생각 나는데요 이런 경우에 클라이언트에서는 어떻게 처리를 해야하는지 아니면 실무적으로는 어떻게 처리하는 지 궁금합니다. 혹시라도 추가로 검색해서 공부할 수 있는 키워드가 있다면 알려주실 수 있을까요?
-
미해결React Native with Expo: 제로초에게 제대로 배우기
기기에서는 네트워크 에러가 납니다.
로컬에서는 분명히 문제 없이 DB에 접속이 되는데 빌드를 해서 apk파일을 만들어서 안드로이드 기기에 설치를 하면 network error가 나네요 app.json 파일에 "android": { "usesCleartextTraffic": true,이렇게 설정을 했는데도 네트워크 오류가 나는데 이것 말고 더 수정해야하는 내용이 있을까요?환경 설정은https://inf.run/6wYbc여기와 동일합니다.
-
미해결아바타 커뮤니티앱 만들기 (React Native Expo)
Android 에뮬레이터 환경설정 및 실행 (for Mac) 에러 문의
강사님, npx expo start를 입력후, a를 선택하면, 아래와 같이 에러 메시지가 나옵니다. 아래 이미지와 같이 pixel 9 pro가 정상적으로 설치되어 있는데, 뭐가 잘못된건지 모르겠어서 문의드립니다.ㅠ› Opening on Android...CommandError: No Android connected device found, and no emulators could be started automatically.Connect a device or create an emulator (https://docs.expo.dev/workflow/android-studio-emulator).Then follow the instructions here to enable USB debugging:https://developer.android.com/studio/run/device.html#developer-device-options. If you are using Genymotion go to Settings -> ADB, select "Use custom Android SDK tools", and point it at your Android SDK directory.
-
미해결React Native with Expo: 제로초에게 제대로 배우기
빌드 문의드립니다.
npm ls react ─┬ @expo/vector-icons@15.0.2│ └── react@19.1.0 deduped├─┬ @react-native-community/datetimepicker@8.4.4│ └── react@19.1.0 deduped├─┬ @react-navigation/bottom-tabs@7.4.9│ └── react@19.1.0 deduped├─┬ @react-navigation/elements@2.6.5│ ├── react@19.1.0 deduped│ ├─┬ use-latest-callback@0.2.6│ │ └── react@19.1.0 deduped│ └─┬ use-sync-external-store@1.6.0│ └── react@19.1.0 deduped├─┬ @react-navigation/native@7.1.18│ ├─┬ @react-navigation/core@7.12.4│ │ └── react@19.1.0 deduped│ └── react@19.1.0 deduped├─┬ expo-font@14.0.9│ └── react@19.1.0 deduped├─┬ expo-image@3.0.9│ └── react@19.1.0 deduped├─┬ expo-linking@8.0.8│ └── react@19.1.0 deduped├─┬ expo-router@6.0.12│ ├─┬ @expo/metro-runtime@6.1.2│ │ └── react@19.1.0 deduped│ ├─┬ @radix-ui/react-slot@1.2.0│ │ ├─┬ @radix-ui/react-compose-refs@1.1.2│ │ │ └── react@19.1.0 deduped│ │ └── react@19.1.0 deduped│ ├─┬ @radix-ui/react-tabs@1.1.13│ │ ├─┬ @radix-ui/react-context@1.1.2│ │ │ └── react@19.1.0 deduped│ │ ├─┬ @radix-ui/react-direction@1.1.1│ │ │ └── react@19.1.0 deduped│ │ ├─┬ @radix-ui/react-id@1.1.1│ │ │ ├─┬ @radix-ui/react-use-layout-effect@1.1.1│ │ │ │ └── react@19.1.0 deduped│ │ │ └── react@19.1.0 deduped│ │ ├─┬ @radix-ui/react-presence@1.1.5│ │ │ └── react@19.1.0 deduped│ │ ├─┬ @radix-ui/react-primitive@2.1.3│ │ │ ├─┬ @radix-ui/react-slot@1.2.3│ │ │ │ └── react@19.1.0 deduped│ │ │ └── react@19.1.0 deduped│ │ ├─┬ @radix-ui/react-roving-focus@1.1.11│ │ │ ├─┬ @radix-ui/react-collection@1.1.7│ │ │ │ ├─┬ @radix-ui/react-slot@1.2.3│ │ │ │ │ └── react@19.1.0 deduped│ │ │ │ └── react@19.1.0 deduped│ │ │ ├─┬ @radix-ui/react-use-callback-ref@1.1.1│ │ │ │ └── react@19.1.0 deduped│ │ │ └── react@19.1.0 deduped│ │ ├─┬ @radix-ui/react-use-controllable-state@1.2.2│ │ │ ├─┬ @radix-ui/react-use-effect-event@0.0.2│ │ │ │ └── react@19.1.0 deduped│ │ │ └── react@19.1.0 deduped│ │ └── react@19.1.0 deduped│ ├─┬ @react-navigation/native-stack@7.3.28│ │ └── react@19.1.0 deduped│ ├─┬ react-native-is-edge-to-edge@1.2.1│ │ └── react@19.1.0 deduped│ ├── react@19.1.0 deduped│ └─┬ vaul@1.1.2│ ├─┬ @radix-ui/react-dialog@1.1.15│ │ ├─┬ @radix-ui/react-dismissable-layer@1.1.11│ │ │ ├─┬ @radix-ui/react-use-escape-keydown@1.1.1│ │ │ │ └── react@19.1.0 deduped│ │ │ └── react@19.1.0 deduped│ │ ├─┬ @radix-ui/react-focus-guards@1.1.3│ │ │ └── react@19.1.0 deduped│ │ ├─┬ @radix-ui/react-focus-scope@1.1.7│ │ │ └── react@19.1.0 deduped│ │ ├─┬ @radix-ui/react-portal@1.1.9│ │ │ └── react@19.1.0 deduped│ │ ├─┬ @radix-ui/react-presence@1.1.5│ │ │ └── react@19.1.0 deduped│ │ ├─┬ @radix-ui/react-primitive@2.1.3│ │ │ └── react@19.1.0 deduped│ │ ├─┬ @radix-ui/react-slot@1.2.3│ │ │ └── react@19.1.0 deduped│ │ ├─┬ react-remove-scroll@2.7.1│ │ │ ├─┬ react-remove-scroll-bar@2.3.8│ │ │ │ └── react@19.1.0 deduped│ │ │ ├─┬ react-style-singleton@2.2.3│ │ │ │ └── react@19.1.0 deduped│ │ │ ├── react@19.1.0 deduped│ │ │ ├─┬ use-callback-ref@1.3.3│ │ │ │ └── react@19.1.0 deduped│ │ │ └─┬ use-sidecar@1.1.3│ │ │ └── react@19.1.0 deduped│ │ └── react@19.1.0 deduped│ └── react@19.1.0 deduped├─┬ expo-status-bar@3.0.8│ └── react@19.1.0 deduped├─┬ expo@54.0.13│ ├─┬ @expo/devtools@0.1.7│ │ └── react@19.1.0 deduped│ ├─┬ expo-asset@12.0.9│ │ └── react@19.1.0 deduped│ ├─┬ expo-keep-awake@15.0.7│ │ └── react@19.1.0 deduped│ ├─┬ expo-modules-core@3.0.21│ │ └── react@19.1.0 deduped│ └── react@19.1.0 deduped├─┬ react-dom@19.1.0│ └── react@19.1.0 deduped├─┬ react-native-gesture-handler@2.28.0│ └── react@19.1.0 deduped├─┬ react-native-reanimated@4.1.3│ └── react@19.1.0 deduped├─┬ react-native-safe-area-context@5.6.1│ └── react@19.1.0 deduped├─┬ react-native-screens@4.16.0│ ├─┬ react-freeze@1.0.4│ │ └── react@19.1.0 deduped│ └── react@19.1.0 deduped├─┬ react-native-web@0.21.1│ └── react@19.1.0 deduped├─┬ react-native-webview@13.15.0│ └── react@19.1.0 deduped├─┬ react-native-worklets@0.5.1│ └── react@19.1.0 deduped├─┬ react-native@0.81.4│ ├─┬ @react-native/virtualized-lists@0.81.4│ │ └── react@19.1.0 deduped│ └── react@19.1.0 deduped├── react@19.1.0└─┬ tosspayments-react-native@1.0.7 ├─┬ react-native-webview@11.26.1 │ └── react@19.1.0 deduped └── react@19.1.0 dedupednpm ls react-native├─┬ @expo/vector-icons@15.0.2│ └── react-native@0.81.4 deduped├─┬ @react-native-community/datetimepicker@8.4.4│ └── react-native@0.81.4 deduped├─┬ @react-navigation/bottom-tabs@7.4.9│ └── react-native@0.81.4 deduped├─┬ @react-navigation/elements@2.6.5│ └── react-native@0.81.4 deduped├─┬ @react-navigation/native@7.1.18│ └── react-native@0.81.4 deduped├─┬ @types/react-native@0.72.8│ └─┬ @react-native/virtualized-lists@0.72.8│ └── react-native@0.81.4 deduped├─┬ expo-constants@18.0.9│ └── react-native@0.81.4 deduped├─┬ expo-file-system@19.0.17│ └── react-native@0.81.4 deduped├─┬ expo-font@14.0.9│ └── react-native@0.81.4 deduped├─┬ expo-image@3.0.9│ └── react-native@0.81.4 deduped├─┬ expo-linking@8.0.8│ └── react-native@0.81.4 deduped├─┬ expo-router@6.0.12│ ├─┬ @expo/metro-runtime@6.1.2│ │ └── react-native@0.81.4 deduped│ ├─┬ @react-navigation/native-stack@7.3.28│ │ └── react-native@0.81.4 deduped│ ├─┬ react-native-is-edge-to-edge@1.2.1│ │ └── react-native@0.81.4 deduped│ └── react-native@0.81.4 deduped├─┬ expo-status-bar@3.0.8│ └── react-native@0.81.4 deduped├─┬ expo-symbols@1.0.7│ └── react-native@0.81.4 deduped├─┬ expo-system-ui@6.0.7│ └── react-native@0.81.4 deduped├─┬ expo-web-browser@15.0.8│ └── react-native@0.81.4 deduped├─┬ expo@54.0.13│ ├─┬ @expo/cli@54.0.11│ │ └── react-native@0.81.4 deduped│ ├─┬ @expo/devtools@0.1.7│ │ └── react-native@0.81.4 deduped│ ├─┬ expo-asset@12.0.9│ │ └── react-native@0.81.4 deduped│ ├─┬ expo-modules-core@3.0.21│ │ └── react-native@0.81.4 deduped│ └── react-native@0.81.4 deduped├─┬ react-native-daum-postcode@1.0.11│ └── react-native@0.81.4 deduped├─┬ react-native-gesture-handler@2.28.0│ └── react-native@0.81.4 deduped├─┬ react-native-reanimated@4.1.3│ └── react-native@0.81.4 deduped├─┬ react-native-safe-area-context@5.6.1│ └── react-native@0.81.4 deduped├─┬ react-native-screens@4.16.0│ └── react-native@0.81.4 deduped├─┬ react-native-webview@13.15.0│ └── react-native@0.81.4 deduped├─┬ react-native-worklets@0.5.1│ └── react-native@0.81.4 deduped├─┬ react-native@0.81.4│ └─┬ @react-native/virtualized-lists@0.81.4│ └── react-native@0.81.4 deduped└─┬ tosspayments-react-native@1.0.7 ├─┬ react-native-send-intent@1.3.0 │ └── react-native@0.81.4 deduped ├─┬ react-native-webview@11.26.1 │ └── react-native@0.81.4 deduped └── react-native@0.81.4 dedupednpm ls expo├─┬ @react-native-community/datetimepicker@8.4.4│ └── expo@54.0.13 deduped├─┬ expo-constants@18.0.9│ └── expo@54.0.13 deduped├─┬ expo-dev-client@6.0.15│ ├─┬ expo-dev-launcher@6.0.15│ │ └── expo@54.0.13 deduped│ ├─┬ expo-dev-menu-interface@2.0.0│ │ └── expo@54.0.13 deduped│ ├─┬ expo-dev-menu@7.0.14│ │ └── expo@54.0.13 deduped│ ├─┬ expo-manifests@1.0.8│ │ └── expo@54.0.13 deduped│ ├─┬ expo-updates-interface@2.0.0│ │ └── expo@54.0.13 deduped│ └── expo@54.0.13 deduped├─┬ expo-file-system@19.0.17│ └── expo@54.0.13 deduped├─┬ expo-font@14.0.9│ └── expo@54.0.13 deduped├─┬ expo-haptics@15.0.7│ └── expo@54.0.13 deduped├─┬ expo-image-manipulator@14.0.7│ ├─┬ expo-image-loader@6.0.0│ │ └── expo@54.0.13 deduped│ └── expo@54.0.13 deduped├─┬ expo-image-picker@17.0.8│ └── expo@54.0.13 deduped├─┬ expo-image@3.0.9│ └── expo@54.0.13 deduped├─┬ expo-router@6.0.12│ ├─┬ @expo/metro-runtime@6.1.2│ │ └── expo@54.0.13 deduped│ └── expo@54.0.13 deduped├─┬ expo-secure-store@15.0.7│ └── expo@54.0.13 deduped├─┬ expo-splash-screen@31.0.10│ ├─┬ @expo/prebuild-config@54.0.5│ │ └── expo@54.0.13 deduped│ └── expo@54.0.13 deduped├─┬ expo-symbols@1.0.7│ └── expo@54.0.13 deduped├─┬ expo-system-ui@6.0.7│ └── expo@54.0.13 deduped├─┬ expo-web-browser@15.0.8│ └── expo@54.0.13 deduped└─┬ expo@54.0.13 ├─┬ @expo/cli@54.0.11 │ └── expo@54.0.13 deduped ├─┬ @expo/metro-config@54.0.6 │ └── expo@54.0.13 deduped ├─┬ babel-preset-expo@54.0.4 │ └── expo@54.0.13 deduped ├─┬ expo-asset@12.0.9 │ └── expo@54.0.13 deduped └─┬ expo-keep-awake@15.0.7 └── expo@54.0.13 deduped버전을 알려주시면 질문자분과 동일한 환경에서 답변 드릴 수 있습니다. npx expo run:android 로 apk파일을 만들었는데 안드로이드 기기에서 파일을 실행하면 expo go가 설치가 되서 실행이 됩니다.apk 파일을 받아서 설치하면 바로 앱이 실행되게 할 수 있는 파일을 만들어서 다른 장소에 있는 기기에서 테스트를 하려면 어떻게 해야할까요?
-
미해결React Native with Expo: 제로초에게 제대로 배우기
앱이 꺼져있을 때 푸시 알림 질문
제로초님 안녕하세요 추가적으로 질문이 있습니다.앱이 완전히 종료된 상태에서 푸시 알림을 보내려면, 백엔드단에서 직접 push 알림을 전송하는 방법밖에는 없을까요??예를 들어 각 유저마다 존재하는 작업량 분석 데이터가 변경됐을때 푸시 알림을 보낸다고 하면, 앱이 완전히 꺼져있는 상태에서는 프론트단에서는 해당 이벤트를 감지할 방법이 떠오르지 않는데, 제 생각이 맞는건지 궁금합니다..!!
-
미해결React Native with Expo: 제로초에게 제대로 배우기
ios push key
제로초님 안녕하세요 IOS 푸시 알림을 위해 확인해보니 eas 대시보드의 Credentials탭에 아직 push key가 존재하지 않아서eas credentials -p ios -> production -> Push Notifications: Manage your Apple Push Notifications Key -> Set up your project to use Push Notifications -> Generate a new Apple Push Notifications service key? Yes 를 통해 생성하고 Credentials에서 생성된 거 까지 확인했습니다. eas build 한달 15번 빌드 횟수를 차감시키지 않기 위해서 XCode에서 직접 development build하려고하는데, 로컬에서 빌드 시에 push key가 적용되게 하려면 어떻게 해야될까요..??
-
미해결아바타 커뮤니티앱 만들기 (React Native Expo)
[5-13] useLikePost 쿼리 구현 중 Tanstack Query 관련 질문
optimistic-updates#updating-a-single-todo 문서를 보면 useMutation - onError의 모든 parameter err, newPost (variables), onMutationResult, context와 onSettle의 모든 parameter를 사용해서 구현하는데, client를 queryClient를 가져와서 쓰는 강의 중 예제와, 문서 내의 내용으로 구현한 아래의 주석처리된 구현은 어떤 차이가 있을까요? onError: (err, newPost, context) => { queryClient.setQueryData( [queryKeys.POST, queryKeys.GET_POST, context?.newPost?.id], context?.previousPost, ); }, // onError: (err, newPost, onMutationResult, context) => { // context.client.setQueryData( // [ // queryKeys.POST, // queryKeys.GET_POST, // onMutationResult?.previousPost?.id, // ], // onMutationResult?.previousPost, // ); // }, onSettled: (data, error, variables, context) => { queryClient.invalidateQueries({ queryKey: [queryKeys.POST, queryKeys.GET_POST, variables], }); queryClient.invalidateQueries({ queryKey: [queryKeys.POST, queryKeys.GET_POSTS], }); }, // onSettled: (data, error, variables, onMutationResult, context) => { // context.client.invalidateQueries({ // queryKey: [queryKeys.POST, queryKeys.GET_POST, variables], // }); // context.client.invalidateQueries({ // queryKey: [queryKeys.POST, queryKeys.GET_POSTS], // }); // },a
-
미해결React Native with Expo: 제로초에게 제대로 배우기
Expo-blur unimplement 오류
npx expo install expo-blur 실행 후 <BlurView> 컴포넌트를 사용하려고 하는데 런타임에서는 에러가 안지만 화면에서 위같이 unimplement 에러가 납니다. tsconfig를 수정해야 해결된다고 찾긴 했는데 { "extends": "expo/tsconfig.base", "compilerOptions": { "strict": true, "paths": { "@/*": [ "./*" ] } }, "include": [ "**/*.ts", "**/*.tsx", ".expo/types/**/*.ts", "expo-env.d.ts" ] } 아래는 제 루트 tsconfig.json 파일입니다.어떻게 수정하면 될까요?
-
미해결React Native with Expo: 제로초에게 제대로 배우기
안드로이드 애니메이션 관련 질문
// app.config.ts const config: ExpoConfig = { .... android: { adaptiveIcon: { backgroundColor: '#000000', foregroundImage: './src/assets/images/aline-black.png', }, ... }, splash: { image: './src/assets/images/aline-black.png', imageWidth: 200, resizeMode: 'contain', backgroundColor: '#000000', }, plugins: [ [ 'expo-splash-screen', { image: './src/assets/images/aline-black.png', imageWidth: 200, resizeMode: 'contain', backgroundColor: '#000000', }, ], ... ] }프로덕션 빌드된 앱에서 테스트 해보니까 애니메이션 이미지를 원형으로 지정하지 않았는데도,안드로이드에서는 첫번째 사진처럼 원형으로 보이다가 제가 지정한 이미지인 두번째 사진으로 넘어가고 나서 스플래쉬가 사라지는데, 원형으로 나오는 이 기본 동작을 막을 방법이 없을까요?
-
미해결React Native with Expo: 제로초에게 제대로 배우기
안드로이드 공개 테스트 앱 관련 질문
제로초님 안녕하세요! 질문이 많네요 위 사진과 같이 공개 테스트 앱을 출시 완료했고, 기기 카탈로그에서도 제가 테스트하는 안드로이드 기기가 지원됨을 확인했습니다. 그런데 Android에서 참여, 웹에서 참여 링크 두개다 접속하면,구글 플레이 스토어 앱이 열리면서 위 사진과 같이 "항목을 찾을 수 없습니다." 라는 메시지만 나오고 앱을 다운로드 할 수 없는 상황입니다 ㅠ해결방법을 아신다면 알려주시면 감사하겠습니다!
-
미해결React Native with Expo: 제로초에게 제대로 배우기
TextInput secureTextEntry 문제
"expo": "54.0.13", "react-native": "0.81.4", "react": "19.1.0", "react-dom": "19.1.0",const Input = ({ ... secureTextEntry, }: InputProps) => { return ( <> <View className="relative"> <TextInput ... secureTextEntry={secureTextEntry} /> {passwordShowButton && passwordShowButton} </View> ... </> ); }; export default Input; 안녕하세요 제로초님. 현재 앱 배포를 위해 구글 플레이 콘솔에 앱을 제출하고 공개 테스트를 통해 실제 기기에서 테스트해보는 중입니다. 안드로이드 휴대폰을 쓰는 직원분께서 버그를 제보하셨는데, 로그인 form 비밀번호 input에서 비밀번호 가림 상태일 때만(TextInput의 secureTextEntry 가 true 일 때) 점이 표시되지 않고 공백을 입력한 것처럼 아무것도 표시되지 않는 현상이 발생합니다. 비밀번호 표시 상태에서는 텍스트가 정상적으로 보입니다.eas 빌드 제한때문에 로컬에서 직접 ./gradlew app:bundleRelease을 통해서 .aab 파일로 빌드해서 구글 플레이 콘솔에 제출했습니다. 테스트를 위해 pixel7 애뮬레이터 환경에서 ./gradlew assembleRelease 빌드로 .apk 파일을 생성하고 테스트해봤을때는 비밀번호 가림 상태에서도 정상적으로 점으로 표시가 됩니다. 혹시 어떤 문제인지 아신다면 도움 부탁드립니다ㅠ!!
-
미해결React Native with Expo: 제로초에게 제대로 배우기
서비스 어카운트 키 선택 질문
제로초님 안녕하세요 eas credentials 실행하고 What do you want to do? ❯ Set up a Google Service Account Key for Push Notifications (FCM V1) ❯ [Choose an existing key]누르면 eas submit을 위해 생성했던 서비스 어카운트 키만 나오는데, 이걸 선택해도 되는건가요? 현재 제 구글 클라우드 콘솔에 프로젝트는 eas submit을 위해 생성했던 프로젝트 하나, 파이어베이스 프로젝트를 생성해서 생긴 프로젝트 하나 이렇게 총 두개가 있는 상황이고, eas submit용 프로젝트를 먼저 생성했었습니다.