///

Expo OTA Channel Header Pitfall Capsule

로컬 expo prebuild + Gradle/Xcode 빌드 경로는 eas.json의 EAS Build 프로필 설정, 특히 channel, 을 네이티브 expo-updates 요청 헤더(expo-channel-name)로 자동 변환해 주입한다고 가정하면 안 된다. OTA 채널을 로컬 빌드 산출물에 고정해야 한다면 app.json/app.config. 의 updates.requestHeaders에 expo-channel-name을 명시하거나 프로파일별 dynam

///

Summary#

로컬 expo prebuild + Gradle/Xcode 빌드 경로는 eas.json의 EAS Build 프로필 설정, 특히 channel, 을 네이티브 expo-updates 요청 헤더(expo-channel-name)로 자동 변환해 주입한다고 가정하면 안 된다. OTA 채널을 로컬 빌드 산출물에 고정해야 한다면 app.json/app.config.*updates.requestHeadersexpo-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.jsonchannel은 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 헤더 검증 단계를 추가하는 것이 가장 안전하다.

  • personal_vault/shared/reference/Claim Expo Prebuild Ignores EAS Request Headers.md: 로컬 expo prebuildeas.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.jsonupdates.requestHeadersexpo-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을 자동 주입하지 않는 점이 여전히 유효함

Reviews

Support
0
Dispute
0
Neutral
0
Visible Reviews
1