Flutter 앱에 Shorebird OTA(Over-The-Air) 업데이트를 적용하려고 했다. 패치를 배포하고 테스트 디바이스에서 확인했는데, "This app reports version 1.0.0+1, but the binary is different from the version 1.0.0+1 that was submitted to Shorebird" 라는 오류가 발생했다.
분명히 같은 버전인데 왜 바이너리가 다르다고 하는 걸까?
shorebird release android 명령으로 생성, 서버에 바이너리 "지문(fingerprint)" 저장shorebird patch android 명령으로 생성, 해당 Release 버전 앱에만 적용1. flutter build appbundle → Play Store 배포 (빌드 A)
2. 시간 경과 후 shorebird release android (빌드 B)
3. shorebird patch android
4. 테스트 디바이스에서 패치 다운로드 시도
5. 실패 ❌
[ShorebirdService] Update status: UpdateStatus.outdated
[ShorebirdService] Downloading update...
updater::network: [shorebird] Sending patch check request: PatchCheckRequest {
app_id: "196f2538-1d47-47af-bb9f-4df97ced7743",
channel: "stable",
release_version: "1.0.0+1",
platform: "android",
arch: "aarch64"
}
updater::updater: [shorebird] Patch check response: PatchCheckResponse {
patch_available: true,
patch: Some(Patch { number: 1, hash: "1cc07ad13c..." })
}
updater::network: [shorebird] Downloading patch from: https://cdn.shorebird.cloud/...
updater::network: [shorebird] Wrote patch to: ".../downloads/1"
updater::updater: [shorebird] Patch successfully applied to ".../downloads/1.full"
[ShorebirdService] Update failed: [ShorebirdUpdater] UpdateException:
This app reports version 1.0.0+1, but the binary is different from
the version 1.0.0+1 that was submitted to Shorebird. (unknown)
원인: Play Store 배포 빌드 ≠ Shorebird Release 빌드
↓
중간: 패치 다운로드는 성공하지만 바이너리 검증 실패
↓
결과: UpdateException 발생, 패치 적용 안됨
1. shorebird release android
→ "Would you like to continue? (y/N)" → y 입력
2. 생성된 AAB를 Play Store에 배포
→ build/app/outputs/bundle/release/app-release.aab
3. 사용자가 Play Store에서 설치
4. 코드 수정 후 패치 배포
→ shorebird patch android
5. 사용자 앱 재시작 시 OTA 적용 ✅
Release = OTA의 기준점 (반드시 이 빌드를 스토어에 배포)
Patch = Release 기준의 차이점만 전송
바이너리 지문 = 빌드마다 고유, 일치해야 패치 적용
별도 빌드 → 스토어 배포 = OTA 불가능 ❌
Shorebird Release → 스토어 배포 = OTA 가능 ✅