DataStore error on Android | RN 안드로이드 DataStore 에러

최수민·2022년 11월 1일
0
post-thumbnail

AWS Amplify 는 다양한 기능들을 제공한다.
이중에서 DataStore 는 GraphQL API 를 사용하여, amplify server 와 query 를 가능하게 해준다.

그러나, React Native 에서 정상적으로 동작하지 않는 버그를 확인하였다.
오직, Android 플랫폼에서만 발생하였다.

현재 나의 개발환경은 다음과 같다.

"react": "18.0.0",
"react-native": "0.69.5",
"expo": "~46.0.3",
"aws-amplify": "^4.3.41",
"aws-amplify-react-native": "^6.0.8",

원인: hermes 와 amplify 의 간섭

hermes 는 open-soure 로 개발된 React Native (RN) 를 위한 JS 최적화 엔진이다. hermes 를 활성화하면, 앱 실행시간과 앱 사이즈, 그리고 메모리 사용량이 효과적으로 단축된다. RN 0.70 부터는 default 엔진으로 추가적인 configuration 없이, 사용가능하다.
https://reactnative.dev/docs/hermes

hermes 와 amplify 의 간섭이 있다는 글을 확인하였다.
https://github.com/facebook/hermes/issues/227
https://github.com/aws-amplify/amplify-js/issues/8176

해결법: @azure/core-asynciterator-polyfill 설치

  • 패키지 설치
    yarn add @azure/core-asynciterator-polyfill

  • DataStore 를 사용하는 파일 최상단에 import 추가
    import '@azure/core-asynciterator-polyfill'

이후, 에러가 해결되었다.
Android 에서도 DataStore 가 정상작동한다.

https://stackoverflow.com/questions/69331287/aws-datastore-not-saving-users-in-the-database-on-android/71652908#71652908

Error logs

[Unhandled promise rejection: TypeError: Symbol.asyncIterator is not defined.]
at node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/tslib/tslib.js:222:41 in __asyncValues
at node_modules/@aws-amplify/datastore/lib-esm/storage/adapter/AsyncStorageAdapter.js:162:62 in __generator$argument_1
at node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/tslib/tslib.js:141:21 in step
at node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/tslib/tslib.js:122:60 in <anonymous>
at node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/tslib/tslib.js:112:51 in fulfilled
at /Users/kudo/01_Work/Repos/expo/expo/android/versioned-react-native/ReactAndroid/hermes-engine/.cxx/MinSizeRel/6d3b5k69/arm64-v8a/lib/InternalBytecode/InternalBytecode.js:53:15 in tryCallOne
at /Users/kudo/01_Work/Repos/expo/expo/android/versioned-react-native/ReactAndroid/hermes-engine/.cxx/MinSizeRel/6d3b5k69/arm64-v8a/lib/InternalBytecode/InternalBytecode.js:139:26 in anonymous
- ... 8 more stack frames from framework internals
profile
🇳🇿🇰🇷

0개의 댓글