From ab4c82d0b0ccfcbd8e3c63ac7ef441ba90b4c21c Mon Sep 17 00:00:00 2001 From: RyuJongJin <266630912+RyuJongJin@users.noreply.github.com> Date: Tue, 20 Oct 2026 22:48:48 +0900 Subject: [PATCH] =?UTF-8?q?WIP=20=ED=8C=90=20=EB=B2=88=ED=98=B8=20?= =?UTF-8?q?=EA=B2=80=EC=82=AC=20(=EA=B4=80=EB=A6=AC=EC=9E=90=20=EC=A7=80?= =?UTF-8?q?=EC=8B=9C=2010/20,=2015=20=EC=A0=9C=EC=95=88):=20check=5Fapk=20?= =?UTF-8?q?-=20versionCode=20=3D=20=ED=8C=90=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EB=82=A0=EC=A7=9C=20(261018)=20=C3=97=201000=20+=20=EC=88=9C?= =?UTF-8?q?=EB=B2=88,=20=EC=8B=9C=ED=97=98=ED=8C=90=EC=9D=80=20=EC=88=9C?= =?UTF-8?q?=EB=B2=88=20>=3D=20900=20(987=20=EC=9D=84=20--build-number=2026?= =?UTF-8?q?1018987=20=EB=A1=9C=20=EB=B9=8C=EB=93=9C=ED=95=B4=20522036987?= =?UTF-8?q?=20=EC=9D=B4=20=ED=86=B5=EA=B3=BC=ED=95=98=EB=8D=98=20=EA=B2=83?= =?UTF-8?q?)=20=C2=B7=20check=5Fwindows=5Fbuild=20-=20=EC=8B=9C=ED=97=98?= =?UTF-8?q?=ED=8C=90=20=EB=B2=88=ED=98=B8=EC=9D=98=20=EB=82=A0=EC=A7=9C?= =?UTF-8?q?=EB=8A=94=20=ED=8C=90=20=EC=9D=B4=EB=A6=84=20=EB=82=A0=EC=A7=9C?= =?UTF-8?q?=20(=EB=B9=8C=EB=93=9C=ED=95=9C=20=EB=82=A0=20=EC=95=84?= =?UTF-8?q?=EB=8B=98,=20d3=20=ED=8C=90=EB=8B=A8:=20APK=20=EC=99=80=20?= =?UTF-8?q?=EA=B0=99=EC=9D=80=20=EB=B2=88=ED=98=B8=20=C2=B7=20compareVersi?= =?UTF-8?q?ons=20=EA=B0=80=20+=20=EB=92=A4=20=EB=B2=88=ED=98=B8=20?= =?UTF-8?q?=EC=A0=84=EC=B2=B4=EB=A5=BC=20=EA=B2=AC=EC=A4=98=20261020985=20?= =?UTF-8?q?=EA=B0=80=20261018987=20=EB=B3=B4=EB=8B=A4=20=EC=83=88=EA=B2=83?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B3=B4=EC=9E=84)=20=C2=B7=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8:=20987=20=ED=86=B5=EA=B3=BC,=20985=20=C2=B7=20988=20W?= =?UTF-8?q?indows=20(261020xxx)=20=EC=8B=A4=ED=8C=A8,=20=EC=A0=95=EC=8B=9D?= =?UTF-8?q?=20=ED=8C=90=20001=20-Release=20=ED=86=B5=EA=B3=BC=20(=EA=B2=80?= =?UTF-8?q?=ED=86=A0=20=EB=8C=80=EA=B8=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- tool/check_apk.ps1 | 15 +++++++++++++++ tool/check_windows_build.ps1 | 12 +++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/tool/check_apk.ps1 b/tool/check_apk.ps1 index feb5825..0a1994f 100644 --- a/tool/check_apk.ps1 +++ b/tool/check_apk.ps1 @@ -8,6 +8,10 @@ # 새 버전 확인도 "최신과 같음" 이 된다. 시험판은 flutter build apk --build-number 9xx 로 빌드한다. 정식 판 APK 는 -Release. # - 순번 900 이상의 v 태그 (시험판 Pre-release, 예: v2026.10.18_977) 는 정식 판으로 보지 않는다 (관리자 지시 10/19, 28 지적: # 시험판에 태그를 단 뒤 같은 APK 를 다시 검사하면 "정식 판 번호와 같음" 으로 거짓 실패). 정식 판 (-Release) 인데 순번이 900 이상이면 실패. +# - versionCode 의 모양 (관리자 지시 10/20, 15 제안): versionCode = 판 이름 날짜 (2026.10.18 → 261018) × 1000 + 순번 (000~999). +# 987 을 --build-number 261018987 로 빌드해 versionCode 522036987 (날짜가 두 번 더해짐) 이 나왔는데 통과했다 - 사용자 기기에 깔리면 +# 그 뒤의 정식 판 (261018xxx) 이 "낮은 버전" 이라 업데이트가 막힌다. build.gradle.kts 가 날짜를 붙이므로 APK 의 --build-number 는 순번만 (예 987). +# 정식 판 (-Release) 은 순번 < 900, 시험판은 순번 >= 900. # 사용: powershell -ExecutionPolicy Bypass -File tool\check_apk.ps1 -Apk build\app\outputs\flutter-apk\app-release.apk [-Release] param( [Parameter(Mandatory = $true)][string]$Apk, @@ -74,6 +78,17 @@ $same = @(foreach ($t in $tags) { if ($t -match '^v(\d+)\.(\d+)\.(\d+)_(\d+)$' -and [long]$Matches[4] -lt 900 -and ([long]$Matches[1] % 100) * 10000000 + [long]$Matches[2] * 100000 + [long]$Matches[3] * 1000 + [long]$Matches[4] -eq $code) { $t } }) +# versionCode 의 모양: 판 이름의 날짜 × 1000 + 순번 (build.gradle.kts 와 같은 셈) +if ($vname -match '^(\d+)\.(\d+)\.(\d+)') { + $day = ([long]$Matches[1] % 100) * 10000 + [long]$Matches[2] * 100 + [long]$Matches[3] + if ([math]::Floor($code / 1000) -ne $day) { + $bad += "versionCode $code 가 판 이름 $vname 의 날짜 ($day × 1000 + 순번) 와 맞지 않음 - APK 는 --build-number 에 순번만 (예 987, 날짜를 붙이지 않음)" + } elseif (-not $Release -and ($code % 1000) -lt 900) { + $bad += "시험판인데 versionCode $code ($vname) 의 순번이 $($code % 1000) - 시험판은 --build-number 9xx (정식 판이면 -Release)" + } +} else { + $bad += "판 이름을 읽지 못함: '$vname' (년.월.일 이어야 함)" +} if ($Release -and ($code % 1000) -ge 900) { $bad += "정식 판 (-Release) 인데 versionCode $code ($vname) 의 순번이 $($code % 1000) - 시험판 번호입니다 (정식 판은 --build-number 없이, pubspec 의 +순번)" } diff --git a/tool/check_windows_build.ps1 b/tool/check_windows_build.ps1 index dba3e5b..8536f9a 100644 --- a/tool/check_windows_build.ps1 +++ b/tool/check_windows_build.ps1 @@ -5,6 +5,10 @@ # - 정식 판 (-Release): 번호가 1000 보다 작아야 한다 (시험 번호가 정식 zip 에 들어가지 않게). # - 정식 판 (-Release) 의 순번이 900 이상이면 실패 (900 이상은 시험판 순번 - check_apk.ps1 과 같은 규칙, 관리자 지시 10/19). # 이 검사는 git 태그를 보지 않으므로 시험판 태그를 단 뒤 다시 검사해도 거짓 실패가 없다. +# - 시험판 번호의 날짜는 판 이름 (pubspec) 의 날짜 (관리자 지시 10/20, d3 판단): 2026.10.18+261018987 은 맞고 +261020985 (빌드한 날) 는 실패. +# 근거: ① APK versionCode (판 이름 날짜 × 1000 + 순번) 와 같은 번호가 되어 두 판을 같은 이름으로 견줄 수 있다. +# ② 앱의 판 견주기 (compareVersions) 는 + 뒤 번호 전체를 견준다 - 날짜가 섞이면 같은 판 이름에서 985 (261020985) 가 +# 987 (261018987) 보다 새것으로 보인다. 순번은 900 이상 (시험판). # 사용: powershell -ExecutionPolicy Bypass -File tool\check_windows_build.ps1 -Dir <배포 폴더 (Lib 가 있는 곳)> [-Release] param( [Parameter(Mandatory = $true)][string]$Dir, @@ -21,6 +25,12 @@ if ($Release) { if ($build -ge 900) { throw "정식 판인데 시험 번호입니다: $ver (화면 v$shown). --build-number 없이 (pubspec 의 +순번) 빌드하세요" } } elseif ($build -lt 1000) { throw ("시험판인데 정식 판 번호입니다: $ver (화면 v$shown - 정식 판과 같게 보임).`n" + - "flutter build windows --release --build-number <년월일><순번 3자리> (예: 261012972) 로 다시 빌드하세요") + "flutter build windows --release --build-number <판 이름 날짜 6자리><순번 3자리> (예: 261012972) 로 다시 빌드하세요") +} else { + $day = ([long]$Matches[1] % 100) * 10000 + [long]$Matches[2] * 100 + [long]$Matches[3] + if ([math]::Floor($build / 1000) -ne $day -or ($build % 1000) -lt 900) { + throw ("시험판 번호가 판 이름과 맞지 않습니다: $ver - 번호는 판 이름의 날짜 ($day) + 순번 900~999 여야 합니다 (빌드한 날이 아님).`n" + + "flutter build windows --release --build-number $day<순번 3자리> (예: ${day}987) 로 다시 빌드하세요") + } } "통과: $ver (화면 v$shown) · $(if ($Release) { '정식 판' } else { '시험판 - 정식 판 번호와 다름' })"