지난 6월 6일에는 새로운 Expo SDK가 릴리즈 됐다. 가장 첫 문장이 웹을 지원하는(지금은 베타 버전) SDK라는 것이다. 되게 좋을듯. 또 TypeScript 정의, React Native 0.59.8을 기반으로 한다는 점 (Hooks를 지원함, 그리고 글에는 없지만 아마 이전 SDK가 react-redux 6.x 버전과 호환되던 것을 보완할 것 같다. 안써봤지만 최신 버전의 react-redux와 호환이 가능할 것으로 보임)
SDK 30 버전 이하는 지원하지 않는다는 내용은 빼버렸습니다. SDK 30 이하를 사용하시는 분들은 참고하세요.
Expo CLI, SDK를 지원하는 내장 웹이다. Expo 프로젝트를 tri-platform (아마 웹, iOS, Android)로 만들어줄 신기능이란다. 이 기능은 react-native-web
을 기반으로 돌아간다고 한다. 현재 모든 모듈이 제대로 돌아가는 건 아니고 여기에서 돌아가고 있는 모듈, 실험적 모듈, 네이티브에서만 돌아가는 것으로 나눠진 리스트를 확인할 수 있다. 예시 및 정보들은 여기에서 확인할 수 있다. 어떻게 생겼는지 한 번 볼려면 아래 코드를 실행하면 된다.
npm i -g expo-cli
expo init test && cd test
expo start -w
Expo CLI가 custom Expo client를 만들 수 있다. (development, testing에서 사용) 지금 Expo app에서는 없어진 Background Location이 포함되어 있다. 이 workflow는 Apple Developer account와 사파리를 통해 기기에 앱을 설치할수 있게 해주는 ad-hoc provisioning profiles 기능을 요구한다.
자세한 방법은 여기서 확인 가능하다.
Expo의 새로운 유료 서비스이다. 이번 버전에서 Teams / Priority Builds를 소개했다.
안드로이드에서 단일 모듈 설치하는 것이 훨씬 쉬워졌다고 한다. 그냥 npm
으로 설치한 다음 rebuild하면 된다고 한다. 잘 안쓰고 있는 부분이기도 하고 모르는 내용들이 있어서 이 정도로 정리한다.
import { FileSystem } from 'expo';
처럼 expo에서 모듈을 임포트하는 것을 deprecating했다. 대신 개별적인 패키지를 설치하고 그 패키지에서 가져와야 한다. 새로운 expo install
이라는 명령어로 모듈들을 설치할 수 있는데, 이 명령은 npm install
/ yarn add
를 감싸고 있고 현재 SDK 버전과 호환이 되는 모듈 버전으로 설치를 하도록 해준다. 위에서 든 예시로 FileSystem
을 설치하려면 다음으로 실행해야 한다.
expo install expo-file-system;
SDK 33부터는, Expo의 모듈들(Expo-authored Modules)이 모두 타입스크립트로 바뀐다.App.tsx
, tsconfig.json
을 제공하는 프로젝트 템플릿 옵션도 만들었다. 이름은 blank (TypeScript)
가 될듯
리액트 훅이 지원된다.
iOS Expo Client에서는 Background Location을 제거했다(App Store의 가이드라인 때문이라는듯). 다시 말하자면, 앱에서 Background Location을 사용할 계획이면 Custom iOS Expo client build 또는 standalone app(Expo를 뺀) 또는 안드로이드 Expo client가 필요하다.
Crypto
Random
Sharing
: 다른 앱과 미디어, 파일을 공유할 때 사용되는 함수를 제공함VideoThumbnails
: 비디오 파일에서 이미지 썸네일을 만들게 해줌 Haptics
와 BackgroundFetch
가 원래는 iOS에서만 작동했는데 이제는 안드로이드에서도 쓸 수 있음
Brightness
, ScreenOrientation
, KeepAwake
, WebView
가 새로 작성되었다. 웹뷰 잘 만들었다고 소문난 react-native-webview
를 가져다 쓴 거라고 한다.
RN 버전이 0.59.8로 변경되었다.
react-native
0.57.1 to 0.59.8react-native-gesture-handler
1.0.12 to 1.2.1react-native-reanimated
1.0.0-alpha.11 to 1.0.1react-native-screens
1.0.0-alpha.19 to 1.0.0-alpha.22react-native-maps
0.22.1 to 0.24.2@expo/vector-icons
9.0.0 to 10.0.1lottie-react-native
2.5.0 to 2.6.1react-native-svg
8.0.10 to 9.4.0react-native-view-shot
2.5.0 to 2.6.0react-native-webview
5.8.1@react-native-community/netinfo
2.0.10resizeMode
옵션에서, cover
과 contain
동작 방식을 서로 바꿨다MediaView
와 TriggerView
를 삭제했다. AdMediaView
, AdTriggerView
로 변경해야 한다.Haptic
의 이름을 Haptics
로 바꿨다. 그리고 모든 함수 이름에 Async를 앞에 달았다IntentLauncherAndroid
를 IntentLauncher
로 바꿨다. 그리고 startActivityAsync
의 signature를 설정 옵션을 더 달게 변경했다.WebBrowser.openBrowserAsync
가 커스텀 탭을 열때 resolved된다. (그 전에는 닫을때 resolved 된듯)@unimodules/core
에 UMAppDelegateWrapper
를 달았다. unimodule과 AppDelegate 콜백 사이 통합을 쉽게 해준다.expolib_v1
을 사용하는 라이브러리들을 Expo Kit에서 모두 제거했다.devKernel
, prodKernel
을 제거했다. SDK 32.0.0에서 33.0.0으로 업그레이드 하는 방법이다.
1. Expo CLI 서버 닫기
2. app.json
에서 sdkVersion
을 33.0.0으로 변경
3. package.json
에서 의존성을 아래와 같이 변경
- react-native to "https://github.com/expo/react-native/archive/sdk-33.0.0.tar.gz"
- expo to "^33.0.0"
- react to "16.8.3" — (this exact version)
- react-navigation to "^3.11.0" (if you use it — this is also optional, you don’t have to update it to use the newest SDK. If you choose to, make sure you read the changelog for breaking changes.)
- jest-expo to "^33.0.0" (if you use it)
- sentry-expo to "~1.13.0" (if you use it)
4. node_modules
를 삭제하고 npm install
or yarn
5. expo start -c
6. Expo app을 업데이트 (시뮬레이터에서는 expo-cli가 알아서 해줌)
7. breaking되는 부분 확인
8. expo를 직접 import 하는 것 변경 (expo-codemod 사용할 수 있음)
9. web support를 달고 싶으면 여기에서 확인
방법은 여기에서 확인 가능함