eas는 expo application service
이다.
엑스포플랫폼에서 build, update, submit 등을 지원해주는 클라우드 서비스이다.
eas build는 네이티브 의존성이 추가되거나 변경될때, 보통 패키지가 추가되서 ota로는 진행이 되지 않을때가 일반적이긴한데, 빌드시 정적값으로 세팅되는 영역이 수정될때도 빌드가 일어나야한다.
eas update는 자바스크립트 코드나, 에셋이 변경될때이다.
그런데 헷갈리거나 애매할 때가 있다. 그럴때는 로컬에서 기존 client 앱으로 로컬 빌드를 해보면 안다. 보통 빌드실패하거나 적용되지 않는 설정들은 보통 앱이 처음 빌드될때 고정적으로 사용되는 영역이라고 인지하면 되고 그경우 빌드를 진행한다고 알면 된다.
배포과정에서 환경변수를 사용할때가 애매하게 헷갈렸다.
누구나 헷갈리수 있다. 나도 나중에 보면 헷갈릴지도
app.config.js
이영역은 네이티브 영역과 런타임영역이 혼재되어 있다.
✅ 적용되는 것들
JavaScript/TypeScript 코드
React Native 컴포넌트
스타일 (CSS/nativewind)
이미지, 폰트 등 에셋
app.json/app.config.js의 일부 설정
❌ 적용되지 않는 것들
네이티브 코드 변경
앱 아이콘
스플래시 스크린
앱 이름
권한 설정
네이티브 의존성
적용되지 않는 것들은 모두 자바스크립트 번들영역의 바깥영역 즉 네이티브영역이라고 생각하면 된다. 하지만 적용되는 영역은 런타임에 자바스크립트에서 접근가능한 설정이라서 ota에 반영이 된다.
빌드시와 업데이트시의 환경변수 바인딩 방식이 엄청 다름!!!!!
✅ 업데이트시:
업데이트시에는 일반적인 방법으로 커스텀한 환경변수를 일일히 다 넘겨도 아무 문제 없음. 다 받음
env:
NODE_OPTIONS: '--max_old_space_size=4096'
OTA_VERSION: ${{ env.OTA_VERSION }}
run: eas update --branch ${{ env.BRANCH_NAME }} --auto
아마도
eas update --environment production
이런식으로 애초에 옵션자체가 cli에 제공되기 때문인듯
그런데
✅ 빌드시:
빌드시에는
run: |
eas build --platform ${{ github.event.inputs.platform }} --profile ${{ github.event.inputs.profile }} --non-interactive
env:
EXPO_HERMES_DOWNLOAD_URL: ${{ env.EXPO_HERMES_DOWNLOAD_URL }}
저런 예약어 말고는 안됨!!!! 삽질 오지게 함.
--help 명령어로 보면 옵션도 없음..
유일한 방법은 eas.json
에서 env 에 원하는 커스텀 환경변수를 세팅하는 방법밖에는 없고 동적으로 하려면 빌드시에 eas.json 파일을 동적으로 처리해주는 방법밖에는 없음.
jq --arg 속성1 "${{ env.속성1 }}" --arg 속성2 "${{ secrets.속성2 }}" '
.build["${{ github.event.inputs.profile }}"].env.속성1 = $속성1 |
.build["${{ github.event.inputs.profile }}"].env.속성2 = $속성2
' eas.json > eas.tmp.json && mv eas.tmp.json eas.json
✅ 더 큰충격은
까보면 충격임. 더이상은 말안함. 환경변수는 클라이언트에서 쉽게 쓰려고 하는건 도찐개찐임....