Expo를 이용한 앱을 스토어에 등록 하려고 블로그와 인터넷 글들을 보니 명확하지 않고, 오히려 헷갈리는 부분들이 많다고 느껴졌다.
그래서 Expo 공식 문서를 보며 개발한 앱을 배포하기 위한 절차를 정리 및 진행해본다.
개발한 앱을 배포하는것은 개발에서 중요한 단계이다. Expo 문서를 정리하면서 어떻게 앱을 배포하는지 알아본다.
native build
를 생성한다.ios와 안드로이드를 위한 standalone 바이너리를 생성한다.
iOS 앱을 빌드하기 위해서는 애플 개발자 계정
이 필요하다. 그러나 안드로이드 앱을 빌드하기 위해서는 꼭 필요하지는 않다.
그러나 스토어에 올리기 위해서는 계정이 필요하다.
Expo CLI는 엑스포 앱을 빌드하고 개발하기 위한 툴이다.
yarn global add expo-cli
{
"expo": {
"name": "Your App Name",
"icon": "./path/to/your/app-icon.png",
"version": "1.0.0",
"slug": "your-app-slug",
"ios": {
"bundleIdentifier": "com.yourcompany.yourappname",
"buildNumber": "1.0.0"
},
"android": {
"package": "com.yourcompany.yourappname",
"versionCode": 1
}
}
}
bundleIdentifier
와 Android package
항목은 DNS를 거꾸로 한것과 같다. 하지만 꼭 도메인과 관련이 있어야하지는 않는다. name
, icon
,version
들을 채운다.slug
는 나의 앱 자바스크립트 들이 배포될 이름이다. 그 예로 expo.io/@community/native-component-list, community은 나의 사용자 이름. native-component-list가 slug.ios.buildNumber
와 android.versionCode
는 나의 앱의 다른 바이너리를 구별한다. 각 빌드가 스토어에 올라갈때 숫자가 증가 하도록 작성한다. 추가로 app.json
에 넣는것을 원한다면 app.json과 app.config.js 설정
을 살펴본다.
expo build:android 또는
expo build:ios
위 명령어를 사용하여 빌드를 시작한다. 그냥 expo build
를 사용하면 publish 까지 된다고 한다.
만약 iOS credential들에 매우 익숙하지 않다면, expo가 모든 나의 credential들을 관리하는것이 가장 좋은 방법이다.
엑스포는 일반적인 앱스토어 배포 뿐만 아니라 엔터프라이즈 배포도 지원한다.
이와 같은 경우 credential을 오버라이드 하기 때문에 iOS credential에 익숙한 경우에 사용하는것이 좋다
만약 내가 푸시알람인증서를 사용하고 푸시알람키로 전환하고자 한다면 빌드할때 --clear-puch-cert
를 사용한다.
Turtle Status 사이트 에서 보거나 expo.io/builds/some-unique-id
를 통해서 얼마나 빌드가 진행되는지 확인 할 수 있다.
expo build:status
에서도 확인 가능하다. 빌드가 끝나면 .apk
,.aab
, .ipa
파일들을 확인하고 다운 받을 수 있다.
Transpoter
를 이용한 방법대부분의 경우 Expo CLI를 이용해 앱을 배포하여 업데이트 하는 경우, 나의 유저들은 새로운 JS 를 다운로드 할것이다.
JS업데이트를 통해 원활한 유저 경험을 제공할 수 있으나 2가지 경우에 대해서는 앱을 새로 빌드하여 native binary들을 다시 제출해야한다.
앱의 변경을 추적하기 위해서는 앱의 app.json 안에 versionCode
와 buildNumber
를 업데이트 해야한다.
https://docs.expo.io/distribution/introduction/
https://docs.expo.io/distribution/building-standalone-apps/
궁금한게있어서 질문드립니다. 보통 rn을 현업에서 사용한다면 expo를 사용하나요 ? rn cli를 사용하나요 ? expo bareworkflow 사용시, 간편로그인(카,네,구)이나 푸시메시지 사용할수있나요?