Summary#
로컬 expo prebuild + Gradle/Xcode 빌드 경로는 eas.json의 EAS Build 프로필 설정, 특히 channel, 을 네이티브 expo-updates 요청 헤더(expo-channel-name)로 자동 변환해 주입한다고 가정하면 안 된다. OTA 채널을 로컬 빌드 산출물에 고정해야 한다면 app.json/app.config.*의 updates.requestHeaders에 expo-channel-name을 명시하거나 프로파일별 dynamic config/plugin으로 생성하고, 빌드 후 AAB/IPA 내부에 실제 헤더가 들어갔는지 검증해야 한다.
Key Points#
- 증상: Play Store/프로덕션 바이너리가 의도한 OTA 채널을 받지 못하거나,
u.expo.dev요청에서channel-name: Required류 오류가 발생하거나, preview/master/production 채널 매핑이 예상과 다르게 동작한다. - 근본 원인:
eas build클라우드 파이프라인의eas.json처리와 로컬expo prebuild+ 네이티브 빌드의 설정 처리 경로가 다르다. 로컬 prebuild는 EAS Build 프로필의channel값을 자동으로updates.requestHeaders.expo-channel-name에 변환하지 않는다. - 정확한 구분:
updates.requestHeaders는 Expo app config(app.json,app.config.js/ts) 설정으로 보는 것이 정확하다.eas.json의channel은 EAS Build/Update 워크플로우에서 쓰이는 빌드 프로필 설정이다. - 해결:
app.json/app.config.*에updates.requestHeaders = { "expo-channel-name": "production" }처럼 현재 채널을 명시한다. 여러 프로필을 쓰면 환경변수 기반 dynamic config나 config plugin으로 production/preview/master 값을 분기한다. - 검증 루틴: 빌드 산출물(AAB/IPA)을 unzip하거나 네이티브 설정 파일을 확인해 Android의
UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY,expo-client-config.json, manifest/plist 등에expo-channel-name이 포함되는지 grep/assert한다. - 운영 지시자: 클라이언트 런타임 로그나 OTA 검사 결과에서 의도한 channel이 보이지 않거나
channel-name: Required가 나오면, 먼저 네이티브 바이너리에 request header가 baking 되었는지 확인한다.
Reuse#
Expo EAS Update를 사용하면서 로컬에서 expo prebuild 후 Gradle/Xcode로 AAB/IPA를 만드는 앱은 모두 이 체크를 적용해야 한다. EAS Build만 사용하는 경우와 로컬 native build 경로는 설정 주입 경로가 다르므로, 둘을 혼동하지 않는다. CI/CD에는 AAB/IPA 헤더 검증 단계를 추가하는 것이 가장 안전하다.
Related Vault Evidence#
personal_vault/shared/reference/Claim Expo Prebuild Ignores EAS Request Headers.md: 로컬expo prebuild가eas.json의 EAS Build 프로필 설정, 특히channel, 을 네이티브expo-updates요청 헤더로 자동 주입하지 않는다고 정리한다.personal_vault/projects/personal/ichimozzi/ota_channel_header_bug.md: IchiMozzi v45 로컬 빌드에서UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY가 누락되어channel-name: Required가 발생했고,app.json의updates.requestHeaders에expo-channel-name을 명시해 해결한 사고 기록이다.
Sagwan Revalidation 2026-05-09T12:04:48Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 자동 주입하지 않는 주의점은 여전히 유효함
Sagwan Revalidation 2026-05-10T12:10:37Z#
- verdict:
ok - note: 로컬 prebuild는 eas.json channel 주입을 보장하지 않아 내용 유효.
Sagwan Revalidation 2026-05-11T12:34:54Z#
- verdict:
ok - note: 로컬 prebuild는 eas.json channel을 자동 베이크하지 않는다는 핵심은 유효함
Sagwan Revalidation 2026-05-12T12:49:05Z#
- verdict:
ok - note: 로컬 prebuild는 eas.json channel을 자동 주입하지 않는다는 핵심이 여전히 유효함
Sagwan Revalidation 2026-05-13T13:04:33Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 자동 주입하지 않는 핵심 주장은 유효.
Sagwan Revalidation 2026-05-14T13:37:47Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 자동 주입하지 않는 주장은 여전히 유효함
Sagwan Revalidation 2026-05-15T14:08:53Z#
- verdict:
ok - note: 로컬 prebuild는 eas.json channel 주입을 보장하지 않는다는 요지가 유효함
Sagwan Revalidation 2026-05-16T14:33:28Z#
- verdict:
ok - note: 로컬 prebuild와 EAS Build의 channel 주입 차이는 여전히 유효하다.
Sagwan Revalidation 2026-05-17T15:02:11Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 자동 주입하지 않는 주의점은 여전히 유효함
Sagwan Revalidation 2026-05-18T15:25:00Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 자동 주입하지 않는 점은 여전히 유효함
Sagwan Revalidation 2026-05-19T15:51:56Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 자동 주입하지 않는 주장은 여전히 유효함
Sagwan Revalidation 2026-05-20T16:19:50Z#
- verdict:
ok - note: 로컬 prebuild는 여전히 eas.json channel 주입을 보장하지 않는다.
Sagwan Revalidation 2026-05-21T16:50:12Z#
- verdict:
ok - note: 로컬 prebuild는 여전히 eas.json channel을 자동 주입하지 않아 유효함.
Sagwan Revalidation 2026-05-22T16:51:10Z#
- verdict:
ok - note: 로컬 prebuild는 eas.json channel 자동 주입 경로가 아니므로 여전히 유효함.
Sagwan Revalidation 2026-05-23T17:41:50Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 주입하지 않는 경고는 여전히 유효함
Sagwan Revalidation 2026-05-24T17:59:55Z#
- verdict:
ok - note: 로컬 prebuild는 eas.json channel을 자동 주입하지 않는다는 요지가 유효함
Sagwan Revalidation 2026-05-25T18:31:03Z#
- verdict:
ok - note: 로컬 prebuild는 여전히 eas.json channel 주입을 보장하지 않는다.
Sagwan Revalidation 2026-05-26T19:10:21Z#
- verdict:
ok - note: 로컬 prebuild의 eas.json channel 미주입 주의는 여전히 유효함
Sagwan Revalidation 2026-05-27T19:33:26Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 자동 주입하지 않는 주의점은 여전히 유효함
Sagwan Revalidation 2026-05-28T20:10:27Z#
- verdict:
ok - note: 로컬 prebuild와 EAS Build의 channel 주입 차이는 여전히 유효하다.
Sagwan Revalidation 2026-05-29T20:48:14Z#
- verdict:
ok - note: EAS Build channel과 로컬 prebuild 주입 경로 구분은 여전히 유효함
Sagwan Revalidation 2026-05-30T20:54:48Z#
- verdict:
ok - note: EAS channel과 로컬 prebuild 주입 경로 구분은 여전히 유효하다.
Sagwan Revalidation 2026-06-01T02:58:43Z#
- verdict:
ok - note: 로컬 네이티브 빌드는 여전히 EAS Build channel 자동 주입에 의존하면 안 됨
Sagwan Revalidation 2026-06-02T03:35:33Z#
- verdict:
ok - note: 로컬 prebuild는 eas.json channel을 헤더로 굽지 않으므로 여전히 유효.
Sagwan Revalidation 2026-06-03T04:15:06Z#
- verdict:
ok - note: 로컬 prebuild 경로의 채널 헤더 수동 주입·검증 권고는 여전히 유효함
Sagwan Revalidation 2026-06-04T04:51:43Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 주입하지 않는 핵심 주장은 유효함
Sagwan Revalidation 2026-06-05T05:17:55Z#
- verdict:
ok - note: 로컬 prebuild 경로의 channel 헤더 수동 주입·검증 지침은 여전히 유효함
Sagwan Revalidation 2026-06-06T05:26:31Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 자동 주입하지 않는 주의점은 여전히 유효하다.
Sagwan Revalidation 2026-06-07T06:01:27Z#
- verdict:
ok - note: 로컬 prebuild와 EAS Build의 channel 주입 차이는 여전히 유효하다.
Sagwan Revalidation 2026-06-08T06:25:39Z#
- verdict:
ok - note: 로컬 native 빌드와 EAS Build 채널 주입 차이는 여전히 유효하다.
Sagwan Revalidation 2026-06-09T06:27:48Z#
- verdict:
ok - note: 로컬 native build와 EAS Build의 channel 주입 차이 설명은 여전히 유효함
Sagwan Revalidation 2026-06-10T10:31:39Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 자동 주입하지 않는 주의점은 여전히 유효함
Sagwan Revalidation 2026-06-11T11:24:46Z#
- verdict:
ok - note: 로컬 prebuild와 EAS Build channel 주입 차이는 여전히 유효하다.
Sagwan Revalidation 2026-06-12T11:56:31Z#
- verdict:
ok - note: [chatgpt HTTP 401] {
Sagwan Revalidation 2026-06-13T11:57:00Z#
- verdict:
ok - note: 로컬 prebuild는 eas.json channel 자동 주입 보장이 없어 여전히 유효.
Sagwan Revalidation 2026-06-14T12:12:09Z#
- verdict:
ok - note: 로컬 prebuild 경로의 channel 미주입 주의는 여전히 유효하다.
Sagwan Revalidation 2026-06-15T13:02:27Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 주입하지 않는 구분은 여전히 유효함
Sagwan Revalidation 2026-06-16T13:39:48Z#
- verdict:
ok - note: 로컬 prebuild와 EAS Build의 채널 주입 차이는 여전히 유효하다.
Sagwan Revalidation 2026-06-17T14:04:23Z#
- verdict:
ok - note: 핵심 구분과 requestHeaders 검증 권장은 현재 Expo OTA 관행과 맞다.
Sagwan Revalidation 2026-06-18T14:08:20Z#
- verdict:
ok - note: 로컬 native build가 eas.json channel을 자동 주입하지 않는 주장은 여전히 유효.
Sagwan Revalidation 2026-06-19T15:45:27Z#
- verdict:
ok - note: expo prebuild 경로의 eas.json channel 미주입 경고는 여전히 유효하다.
Sagwan Revalidation 2026-06-20T15:47:35Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 자동 주입하지 않는 요지는 여전히 유효함
Sagwan Revalidation 2026-06-21T16:55:49Z#
- verdict:
ok - note: 로컬 prebuild는 eas.json channel을 자동 주입하지 않아 여전히 유효함
Sagwan Revalidation 2026-06-22T17:02:28Z#
- verdict:
ok - note: [chatgpt HTTP 401] {
Sagwan Revalidation 2026-06-23T17:30:08Z#
- verdict:
ok - note: [chatgpt HTTP 401] {
Sagwan Revalidation 2026-06-24T18:48:17Z#
- verdict:
ok - note: [chatgpt HTTP 401] {
Sagwan Revalidation 2026-06-25T19:12:50Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 자동 주입하지 않는 경고는 여전히 유효함
Sagwan Revalidation 2026-06-27T00:12:33Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 주입하지 않는다는 핵심은 유효함
Sagwan Revalidation 2026-06-28T02:06:39Z#
- verdict:
ok - note: 로컬 네이티브 빌드와 EAS Build의 channel 주입 차이는 여전히 유효함
Sagwan Revalidation 2026-06-29T02:35:41Z#
- verdict:
ok - note: EAS Build channel과 로컬 prebuild 주입 차이는 여전히 유효하다.
Sagwan Revalidation 2026-06-30T02:39:49Z#
- verdict:
ok - note: 로컬 prebuild는 eas.json channel을 주입하지 않는다는 핵심이 여전히 맞다
Sagwan Revalidation 2026-07-01T09:36:44Z#
- verdict:
ok - note: 로컬 native build와 EAS Build channel 주입 차이는 여전히 유효하다.
Sagwan Revalidation 2026-07-02T21:11:03Z#
- verdict:
ok - note: 로컬 prebuild 경로의 channel 헤더 수동 주입·검증 지침은 여전히 유효함
Sagwan Revalidation 2026-07-04T09:01:10Z#
- verdict:
ok - note: 로컬 prebuild와 EAS Build channel 주입 차이는 여전히 유효하다.
Sagwan Revalidation 2026-07-05T11:43:47Z#
- verdict:
ok - note: 로컬 prebuild는 eas.json channel 자동 주입을 기대하면 안 된다는 요지가 유효하다
Sagwan Revalidation 2026-07-06T17:34:36Z#
- verdict:
ok - note: 로컬 prebuild와 EAS Build의 channel 주입 차이는 여전히 유효함
Sagwan Revalidation 2026-07-08T00:49:38Z#
- verdict:
ok - note: EAS channel과 로컬 prebuild 주입 차이는 여전히 유효한 주의점이다.
Sagwan Revalidation 2026-07-09T22:17:06Z#
- verdict:
ok - note: 로컬 native 빌드는 eas.json channel 자동 주입이 아니므로 여전히 유효함
Sagwan Revalidation 2026-07-11T15:34:08Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 자동 주입하지 않는 주지는 유효함
Sagwan Revalidation 2026-07-13T10:30:52Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 자동 주입하지 않는 주장은 여전히 유효함
Sagwan Revalidation 2026-07-15T08:57:50Z#
- verdict:
ok - note: 로컬 prebuild 경로의 channel 헤더 수동 고정 주장은 여전히 유효함
Sagwan Revalidation 2026-07-17T10:07:08Z#
- verdict:
ok - note: 로컬 prebuild가 eas.json channel을 자동 주입하지 않는 주장은 여전히 유효함
Sagwan Revalidation 2026-07-19T11:10:19Z#
- verdict:
ok - note: 로컬 prebuild 경로의 channel 헤더 수동 주입 주장은 여전히 유효함
Sagwan Revalidation 2026-07-21T12:55:21Z#
- verdict:
ok - note: 로컬 prebuild는 eas.json channel을 자동 주입하지 않는 점이 여전히 유효함