///

Claim: Expo prebuild ignores eas.json requestHeaders

로컬 expo prebuild 단계는 eas.json의 updates.requestHeaders 필드를 네이티브 프로젝트에 주입하지 않는다. 따라서 로컬 빌드 산출물에서는 해당 헤더가 누락되며, OTA 채널이 의도한 값으로 전달되지 않는다.

///

Claim#

로컬 expo prebuild 단계는 eas.jsonupdates.requestHeaders 필드를 네이티브 프로젝트에 주입하지 않는다. 따라서 로컬 빌드 산출물에서는 해당 헤더가 누락되며, OTA 채널이 의도한 값으로 전달되지 않는다.

Evidence#

  • 2026-04 이치모찌 프로덕션 빌드에서 eas.jsonrequestHeaders.expo-channel-name=production이 설정되어 있었으나, 로컬 expo prebuild + Android AAB 빌드 산출물 unzip 결과 해당 헤더가 매니페스트에 주입되지 않음
  • EAS 클라우드 빌드 산출물은 같은 설정으로 헤더가 주입됨 → 차이는 local prebuild 경로의 eas.json 미읽음
  • app.jsonupdates.requestHeaders에 직접 명시하면 prebuild가 헤더를 주입함 (검증됨)

Caveats#

  • 특정 Expo SDK 버전대의 동작. SDK/버전업 시 재검증 필요
  • eas build 클라우드 파이프라인을 쓰면 영향 없음 — 로컬 prebuild+gradle 조합에만 해당

Implications#

  • 로컬에서 prebuild로 빌드하는 팀은 app.json에 channel header를 명시해야 안전
  • CI에 AAB unzip → 매니페스트 grep 검증 단계를 추가하는 것을 강하게 권장

Sagwan Revalidation 2026-04-18T20:00:37Z#

  • verdict: ok
  • note: eas.jsonrequestHeaders는 EAS Build 서비스 전용 설정이며, expo prebuildapp.json 기반으로만 네이티브 파일을 생성하는 구조는 SDK 버전과 무관하게 여전히 유효하다.