본문 바로가기
일지/헬키

헬키 개발일지 7. 2024 06 26 React Native + Expo 앱 배포 방법 정리

by 리나그(ReenAG) 2024. 6. 27.
728x90
반응형

 결국 앱을 배포하는 때가 머지 않은 것 같다. 그래서 어떻게 하는게 좋은지 알아가보면서 정리하려고 한다. 우리 팀의 앱은 React Native기반이고, 거기에 expo를 올려둔 상황이다. expo는 React를 이용해서 앱을 Android, iOS, Web등에 올리는 프레임워크를 제공한다. 생각하건데 macbook이 없어도 iOS앱을 개발할 수 있는 몇 안되는 방법 중에 1개일 것이다.(추천한다고는 못하겠지만.)

 

지금 내가 파악한 빌드 방법은 크게 이렇다.

1. react native의 자체적인 빌드 기능을 이용한다.

expo를 이용하지 않는 방법이라고 할 수 있겠다. 지금은 Web으로 더 이상 개발을 진행하지 않고 있고, (어느 정도 해보니까 같이 들고 가는게 거의 불가능한 수준이라는 것을 webpack config를 짜면서 알아냈다. 다만 차후에 연구를 진행해야할 듯?)

 

프로세스는 대략 이러하다.

1. npx react-native eject

2. android 및 ios 프로젝트 생성

3. 각각의 폴더를 android studio / Xcode로 연다.

4. native app만들 때랑 같은 방법으로 최종 빌드.

 

이 방법의 장점이라고 한다면 일반적인 native빌드와 비슷한 과정을 거칠 수 있기 때문에 각 환경에 맞게끔 더 수정을 해줄 수 있다는 점이다. 궁극적으로 native모듈을 이용해서 빌드 해볼 일이 있다고? 그럼 이렇게 해야한다.

 

반대로 단점도 비슷하다. android와 iOS앱을 빌드 해 본적이 없다면 오히려 개발 부채로 작용할 수 있다는 점이다.

 

그래도 여기있는 공식문서가 도움이 될 것이다.

https://reactnative.dev/docs/publishing-to-app-store

 

Publishing to Apple App Store · React Native

The publishing process is the same as any other native iOS app, with some additional considerations to take into account.

reactnative.dev

https://reactnative.dev/docs/signed-apk-android

 

Publishing to Google Play Store · React Native

Android requires that all apps be digitally signed with a certificate before they can be installed. In order to distribute your Android application via Google Play store it needs to be signed with a release key that then needs to be used for all future upd

reactnative.dev

여기서 

"android": "npx expo run:android",
"android:build": "npx react-native build-android --mode=release",
"ios": "npx expo run:ios",
"ios:build": "npx react-native bundle --minify --entry-file='index.js' --bundle-output='./ios/main.jsbundle' --assets-dest='./ios' --dev=false --platform='ios'",

 

요로한 명령어 들을 이용하면 aab파일들을 만들어 볼 수 도 있고, ios에서 이용가능한 번들과 asset도 만들어서 Xcode에서 빌드가 가능하다. 다만 우리 팀은 eas update의 기능을 원하기 때문에 2번으로 연구가 진행될 것이다. 실제로 전편에서 iOS로 진행한 release빌드는 여전히 제대로 작동하지 않고 있다. 뭐 eas build를 쓴다고 크게 달라지지는 않겠지만. 

 

그렇다고 이 방법을 아예 안쓸 수는 없다. 언급 안한 막강한 장점 중 1개는 stuido / Xcode가 있음으로써 디버깅할 수 있는 것이 정말 많이 생기기 때문이다. 특히 xcode로 일단 물리적인 기기에 올려볼 수 있는 것은 매우 좋았다. 예네들이 제대로 돌아간다면 아래의 eas build도 앵간하면 잘 돌아가기 때문에 실질적으로 개발 할 때는 이러한 빌드 방법을 자주 이용하고 있다.

 

2. expo eas build

온라인으로 코드를 올려서 expo서버에서 빌드하는 방식이다. 이 방법은 반드시 apple developer 계정이 필요하다. 이 방법을 채택한다면 굳이 project파일을 prebuild하지 않아도 좋으나 난 그건 아닌듯 해서 그냥 했다.

#for expo + react-native
npx expo prebuild
#build everything
eas build --platform all [--local]

 

--local 옵션을 붙이지 않는 경우는 eas 서버에서 구동이되고, 붙이는 경우는 말 그대로 로컬에서 빌드가 된다. 로컬에서 빌드하는 경우는 그냥 빌드 터지면 검사하라고 있는 옵션인듯?

우선은 android 빌드를 먼저 했다. (ios는 개발자 계정이 필요한데 아직 도착을 안했음...)

잘 되는 듯? 우선 publish까지는 문제가 없을 것 같다. 그 앱이 제대로 동작하는지는 모르겠지만, 적어도 배포 방법은 확보를 어느정도 했다고 생각하려고 한다.

728x90
반응형