Files
fanuzu/app/BUILD.md
T

4.2 KiB

빌드 환경 — 실측 기록 (2026-08-31)

이 조합으로 릴리스 APK·AAB 가 실제로 나오는 것을 확인했다. 버전 조합이 어긋나면 Gradle 이 조용히 실패하지 않고 명확히 죽으므로 아래를 그대로 맞춘다.

구성 값 비고
Flutter 3.47.2 fvm 으로 고정 — app/.fvmrc
JDK Temurin 17 ~/.jdks/jdk-17.0.20.1+1/Contents/Home
Gradle 8.14 android/gradle/wrapper/gradle-wrapper.properties
AGP 8.11.1 android/settings.gradle.kts
Android SDK /opt/homebrew/share/android-commandlinetools brew install --cask android-commandlinetools
build-tools 35.0.1
platform android-34 · android-36 빌드가 34 를 추가로 받는다

JDK 를 17 로 못 박은 이유

Android Studio 번들 JBR 은 JDK 25 이고 Gradle 8.14 와 비호환이다. 그대로 빌드하면 Gradle build failed due to Java/Gradle incompatibility 로 죽는다. Gradle 을 9.1+ 로 올리는 선택지도 있으나 AGP 8.11.1 과의 조합을 다시 검증해야 하므로, Flutter 권장인 JDK 17 을 쓰는 쪽을 택했다.

fvm flutter config --jdk-dir ~/.jdks/jdk-17.0.20.1+1/Contents/Home

brew install --cask temurin@17 은 sudo 를 요구한다. sudo 없이 쓰려면 Adoptium tar.gz 를 ~/.jdks/ 에 풀면 된다.

빌드

export ANDROID_HOME=/opt/homebrew/share/android-commandlinetools
cd app
fvm flutter build apk --release        # build/app/outputs/flutter-apk/app-release.apk
fvm flutter build appbundle --release  # build/app/outputs/bundle/release/app-release.aab

서명

android/key.properties 가 없으면 릴리스 빌드가 의도적으로 실패한다 (android/app/build.gradle.kts). 디버그 키로 조용히 서명된 산출물이 Play 에서 거부되는 것을 막기 위한 것이다.

키스토어는 ~/.fanuzu-signing/fanuzu-upload.p12 (PKCS12 · 별칭 fanuzu-upload). 저장소에 넣지 않는다 — android/.gitignore 가 key.properties 를, 루트 .gitignore 가 *.p12 *.jks 를 막는다.

서명 확인:

apksigner verify --print-certs build/app/outputs/flutter-apk/app-release.apk
# Signer #1 certificate DN: CN=FANUZU, OU=Development, O=Sweech Co Ltd, L=Daegu, C=KR
# Signer #1 certificate SHA-256 digest: 5e83f4c9cd35357b11561a5b82c47d300af8c31e33d80d94bc32a4f10f46dee7

알려진 어긋남 — minSdk

문서(2주차_플러그인_선검증리포트 · 별첨 1)는 Android 10(API 29) 을 하한으로 적었으나 현재 빌드는 API 24 로 나간다. 하한을 29 로 올리는 것은 위치 퀘스트의 geofence_foreground_service 인데 아직 넣지 않았다. 6주차 위치 퀘스트 구현 시점에 29 로 올라간다. 그때 기준 단말 2종 충족을 다시 확인해 빌드 노트에 적는다.


iOS

2026-08-31 실증 — flutter build ios --release --no-codesign 통과.

구성 값
Xcode 27.0 (~/Downloads/Xcode-beta.app)
CocoaPods 1.17.0 (brew install cocoapods)
산출물 build/ios/iphoneos/Runner.app · 21.7MB · arm64
bundle id kr.co.sweech.fancake · 0.1.0(1) · label FANUZU
MinimumOSVersion 15.0 — 문서(별첨 1 · 2주차 선검증)와 일치

xcode-select --switch 는 sudo 를 요구하므로 DEVELOPER_DIR 로 우회한다.

export DEVELOPER_DIR=~/Downloads/Xcode-beta.app/Contents/Developer
fvm flutter build ios --release --no-codesign

서명은 Apple Developer 계정이 있어야 한다. 계정 없이 여기까지는 확인되므로, TestFlight 제출에 남은 것은 서명과 업로드뿐이다.

정리해야 할 것 — CocoaPods / SwiftPM 이중 상태

빌드 중 Flutter 가 경고한다.

All plugins found for ios are Swift Packages, but your project still has CocoaPods integration. … Removing CocoaPods integration will improve the project's build time.

iOS 플러그인이 전부 Swift Package 로 옮겨졌는데 프로젝트에 CocoaPods 통합이 남아 있다. 동작에는 지장이 없으나 빌드 시간이 늘고 구성이 이중이다. pod deintegrate 와 Debug.xcconfig · Release.xcconfig 의 Pods include 제거가 필요하다. 11주차 최적화 구간에서 정리한다.