create-react-app 처럼 react native의 앱 종류 중 하나이다. 가장 큰 장점은 안드로이드, ios 공용 웹앱 리액트앱을 만들 수 있다. 그리고 리액트 네이티브 SDK가 관리를 위해 점점 작아진 반면 Expo SDK에는 많은 모듈이 있다. Expo go를 이용하면 만든 앱을 자기 핸드폰에서 테스트해 볼 수 있다. Over the Air Update라는 기능이 있는데 이는 앱스토어를 스킵하고 앱을 업데이트 할 수 있다. 앱 스토어에 가서 새로운 앱을 다운받을 필요가 없다.
하지만 Xcode나 Android Studio에 접근할 때 안좋다. react-native 100%로 된 앱은 별로 없기 때문에 이럴때는 접근을 위해 다 새로 다운을 받아야한다. 그리고 블루투스 기능과 같이 Expo SDK에 없는 기능을 사용하고 싶을 때는 보통은 검색해서 native library를 github등에서 찾아 install할 수 있지만 Expo SDK에서는 불가능하다. 그럴때는 react native CLI를 사용해야한다. 그리고 앱 크기도 큰 편이다. 사용하지 않는 기능까지 혹시 필요할까봐 다 최종 번들에 넣어버리기 때문이다.
Expo는 ‘꺼내오기(Eject)’가 가능하다. 보든 웹팩 파일 등 노출하는 것이다. 이를 이용하면 Expo의 기능과 react-native의 기능 모두를 사용할 수 있다. Eject를 하는 순간, xcode나 Android 파일 그리고 모든 것들이 노출되고, Expo SDK등도 사용할 수 있다. 그리고 필요없는 API를 삭제해 최종 파일의 크기가 큰 것도 해결할 수 있다.
Managed Workflow로 시작하고 Eject를 하면 Expo와 react-native의 좋은 점을 둘 다 사용할 수 있다. 그리고 Bear Workflow로 마무리한다. Expo Go앱은 Expo SDK로만 사용가능하기 때문에 Expo SDK에 포함되지 않는 기능은 Expo go앱에 포함시키지 않도록 해야한다. Expo를 Eject했더라도 어떤 네이티브 코드도 Expo에서 돌리지 않도록 주의해야한다.