Update version to 1.1.8 and fix version code to 9 in Android build files
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,6 +1,6 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
#*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
@@ -3,8 +3,10 @@ apply plugin: 'com.android.application'
|
||||
// 버전 정보를 properties 파일에서 동적으로 로드
|
||||
android {
|
||||
namespace "com.lovable.zellyfinance"
|
||||
compileSdk rootProject.ext.compileSdkVersion
|
||||
compileSdkVersion rootProject.ext.compileSdkVersion
|
||||
defaultConfig {
|
||||
versionCode = 9
|
||||
versionName = "1.1.8"
|
||||
applicationId "com.lovable.zellyfinance"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
@@ -50,7 +52,7 @@ android {
|
||||
|
||||
// 로드된 값이 유효한지 확인하고, 유효하지 않으면 기본값 사용
|
||||
def versionName = defaultVersionName
|
||||
def versionCode = defaultVersionCode
|
||||
def versionCode = 9
|
||||
def buildNumber = defaultBuildNumber
|
||||
|
||||
if (versionProps['versionName'] && !versionProps['versionName'].toString().trim().isEmpty()) {
|
||||
@@ -61,14 +63,17 @@ android {
|
||||
|
||||
if (versionProps['versionCode'] && !versionProps['versionCode'].toString().trim().isEmpty()) {
|
||||
try {
|
||||
// 버전 코드는 고정값 8을 사용하므로 properties에서 읽지 않음
|
||||
/*
|
||||
versionCode = versionProps['versionCode'].toString().toInteger()
|
||||
if (versionCode <= 0) {
|
||||
println "유효하지 않은 versionCode(0 이하), 기본값 사용: ${defaultVersionCode}"
|
||||
versionCode = defaultVersionCode
|
||||
}
|
||||
*/
|
||||
} catch (Exception e) {
|
||||
println "versionCode 변환 오류, 기본값 사용: ${e.message}"
|
||||
versionCode = defaultVersionCode
|
||||
// versionCode = defaultVersionCode
|
||||
}
|
||||
} else {
|
||||
println "유효하지 않은 versionCode, 기본값 사용: ${defaultVersionCode}"
|
||||
@@ -92,9 +97,14 @@ android {
|
||||
// 최종 로그 출력
|
||||
println "최종 버전 정보: versionName=${versionName}, versionCode=${versionCode}, buildNumber=${buildNumber}"
|
||||
|
||||
// 앱 빌드 속성 설정 - 문법 오류 수정
|
||||
versionName = versionName
|
||||
versionCode = versionCode
|
||||
versionCode = 8
|
||||
|
||||
// 앱 빌드 속성 설정
|
||||
// 버전 코드는 이미 고정값 8로 설정됨
|
||||
// versionCode = versionCode.toInteger()
|
||||
versionName = "${versionName}"
|
||||
|
||||
// 이 부분이 중요합니다 - 이 속성들이 안드로이드 매니페스트에 자동으로 병합됩니다
|
||||
|
||||
// BuildConfig 필드 설정
|
||||
buildConfigField "String", "VERSION_NAME", "\"${versionName}\""
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:versionCode="9"
|
||||
android:versionName="1.1.8">
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
buildNumber=8
|
||||
versionCode=8
|
||||
# Zellyy Finance 앱 버전 정보
|
||||
# 마지막 업데이트: 2025-04-05 19:45:54
|
||||
buildNumber=9
|
||||
versionCode=9
|
||||
versionName=1.1.8
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
{
|
||||
"versionCode": 8,
|
||||
"versionCode": 9,
|
||||
"versionName": "1.1.8",
|
||||
"buildNumber": 8,
|
||||
"buildNumber": 9,
|
||||
"buildDate": "2025-04-05 19:45:54",
|
||||
"buildType": "release-aab",
|
||||
"notes": "사용자가 수정한 버전 정보입니다. 이 파일을 편집하여 앱 버전 정보를 변경할 수 있습니다."
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
buildNumber=8
|
||||
versionCode=8
|
||||
# Zellyy Finance 앱 버전 정보
|
||||
# 마지막 업데이트: 2025-04-05 19:45:54
|
||||
buildNumber=9
|
||||
versionCode=9
|
||||
versionName=1.1.8
|
||||
|
||||
284
app_build.log
Normal file
284
app_build.log
Normal file
@@ -0,0 +1,284 @@
|
||||
===== 빌드 시작: Sat Apr 5 19:45:45 KST 2025 =====
|
||||
[1;33m1. 웹 앱 빌드 중...[0m
|
||||
실행 명령어: npm run build
|
||||
|
||||
> vite_react_shadcn_ts@0.0.0 build
|
||||
> vite build
|
||||
|
||||
vite v5.4.10 building for production...
|
||||
transforming...
|
||||
✓ 3636 modules transformed.
|
||||
rendering chunks...
|
||||
computing gzip size...
|
||||
dist/index.html 0.72 kB │ gzip: 0.46 kB
|
||||
dist/assets/index-BgIUBQkk.css 74.73 kB │ gzip: 12.82 kB
|
||||
dist/assets/browser-Q2e0CuoM.js 0.30 kB │ gzip: 0.25 kB
|
||||
dist/assets/index-ukZ_MYNA.js 1,155.73 kB │ gzip: 335.16 kB
|
||||
|
||||
(!) Some chunks are larger than 500 kB after minification. Consider:
|
||||
- Using dynamic import() to code-split the application
|
||||
- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks
|
||||
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.
|
||||
✓ built in 3.88s
|
||||
[0;32m웹 앱 빌드 완료[0m
|
||||
[1;33m2. Capacitor에 웹 코드 동기화 중...[0m
|
||||
실행 명령어: npx cap sync android
|
||||
✔ Copying web assets from dist to android/app/src/main/assets/public in 5.47ms
|
||||
✔ Creating capacitor.config.json in android/app/src/main/assets in 1.94ms
|
||||
✔ copy android in 30.43ms
|
||||
✔ Updating Android plugins in 6.52ms
|
||||
[info] Found 2 Capacitor plugins for android:
|
||||
@capacitor/keyboard@7.0.0
|
||||
@capacitor/splash-screen@7.0.0
|
||||
✔ update android in 88.42ms
|
||||
[info] Sync finished in 0.152s
|
||||
[0;32mCapacitor 동기화 완료[0m
|
||||
[1;33m3. 안드로이드 빌드 시작 (release-aab)...[0m
|
||||
실행 명령어: ./gradlew bundleRelease
|
||||
|
||||
> Configure project :app
|
||||
WARNING: The option setting 'android.defaults.buildfeatures.buildconfig=true' is deprecated.
|
||||
The current default is 'false'.
|
||||
It will be removed in version 10.0 of the Android Gradle plugin.
|
||||
To keep using this feature, add the following to your module-level build.gradle files:
|
||||
android.buildFeatures.buildConfig = true
|
||||
or from Android Studio, click: `Refactor` > `Migrate BuildConfig to Gradle Build Files`.
|
||||
버전 정보 로드: versionName=1.1.8, versionCode=9, buildNumber=9
|
||||
최종 버전 정보: versionName=1.1.8, versionCode=9, buildNumber=9
|
||||
WARNING: Using flatDir should be avoided because it doesn't support any meta-data formats.
|
||||
|
||||
> Configure project :capacitor-cordova-android-plugins
|
||||
WARNING: Using flatDir should be avoided because it doesn't support any meta-data formats.
|
||||
|
||||
> Task :app:preBuild UP-TO-DATE
|
||||
> Task :app:preReleaseBuild UP-TO-DATE
|
||||
> Task :app:generateReleaseResValues
|
||||
> Task :capacitor-android:preBuild UP-TO-DATE
|
||||
> Task :capacitor-android:preReleaseBuild UP-TO-DATE
|
||||
> Task :capacitor-android:generateReleaseResValues
|
||||
> Task :capacitor-android:generateReleaseResources
|
||||
> Task :capacitor-android:packageReleaseResources
|
||||
> Task :capacitor-cordova-android-plugins:preBuild UP-TO-DATE
|
||||
> Task :capacitor-cordova-android-plugins:preReleaseBuild UP-TO-DATE
|
||||
> Task :capacitor-cordova-android-plugins:generateReleaseResValues
|
||||
> Task :capacitor-cordova-android-plugins:generateReleaseResources
|
||||
> Task :capacitor-cordova-android-plugins:packageReleaseResources
|
||||
> Task :capacitor-keyboard:preBuild UP-TO-DATE
|
||||
> Task :capacitor-keyboard:preReleaseBuild UP-TO-DATE
|
||||
> Task :capacitor-keyboard:generateReleaseResValues
|
||||
> Task :capacitor-keyboard:generateReleaseResources
|
||||
> Task :capacitor-keyboard:packageReleaseResources
|
||||
> Task :capacitor-splash-screen:preBuild UP-TO-DATE
|
||||
> Task :capacitor-splash-screen:preReleaseBuild UP-TO-DATE
|
||||
> Task :capacitor-splash-screen:generateReleaseResValues
|
||||
> Task :capacitor-splash-screen:generateReleaseResources
|
||||
> Task :capacitor-splash-screen:packageReleaseResources
|
||||
> Task :app:mapReleaseSourceSetPaths
|
||||
> Task :app:generateReleaseResources
|
||||
> Task :app:createReleaseCompatibleScreenManifests
|
||||
> Task :app:extractDeepLinksRelease
|
||||
> Task :capacitor-android:extractDeepLinksRelease
|
||||
> Task :capacitor-cordova-android-plugins:extractDeepLinksRelease
|
||||
> Task :capacitor-keyboard:extractDeepLinksRelease
|
||||
> Task :capacitor-cordova-android-plugins:processReleaseManifest
|
||||
> Task :capacitor-splash-screen:extractDeepLinksRelease
|
||||
> Task :capacitor-android:processReleaseManifest
|
||||
> Task :capacitor-keyboard:processReleaseManifest
|
||||
> Task :capacitor-splash-screen:writeReleaseAarMetadata
|
||||
> Task :capacitor-keyboard:writeReleaseAarMetadata
|
||||
> Task :capacitor-android:writeReleaseAarMetadata
|
||||
> Task :capacitor-cordova-android-plugins:writeReleaseAarMetadata
|
||||
> Task :capacitor-splash-screen:processReleaseManifest
|
||||
> Task :capacitor-cordova-android-plugins:compileReleaseLibraryResources
|
||||
> Task :capacitor-cordova-android-plugins:parseReleaseLocalResources
|
||||
> Task :app:checkReleaseAarMetadata
|
||||
> Task :capacitor-keyboard:compileReleaseLibraryResources
|
||||
> Task :capacitor-android:parseReleaseLocalResources
|
||||
> Task :capacitor-android:compileReleaseLibraryResources
|
||||
> Task :app:processReleaseMainManifest
|
||||
> Task :app:processReleaseManifest
|
||||
> Task :app:processApplicationManifestReleaseForBundle
|
||||
> Task :app:processReleaseManifestForPackage
|
||||
> Task :capacitor-android:generateReleaseRFile
|
||||
> Task :app:extractReleaseVersionControlInfo
|
||||
> Task :capacitor-android:generateReleaseBuildConfig
|
||||
> Task :capacitor-cordova-android-plugins:generateReleaseRFile
|
||||
> Task :capacitor-android:javaPreCompileRelease
|
||||
> Task :capacitor-splash-screen:parseReleaseLocalResources
|
||||
> Task :capacitor-keyboard:parseReleaseLocalResources
|
||||
> Task :capacitor-splash-screen:compileReleaseLibraryResources
|
||||
> Task :app:mergeReleaseResources
|
||||
|
||||
> Task :capacitor-android:compileReleaseJavaWithJavac
|
||||
Note: /Users/hansoo./Dev/zellyy-finance/node_modules/@capacitor/android/capacitor/src/main/java/com/getcapacitor/Bridge.java uses or overrides a deprecated API.
|
||||
Note: Recompile with -Xlint:deprecation for details.
|
||||
Note: Some input files use unchecked or unsafe operations.
|
||||
Note: Recompile with -Xlint:unchecked for details.
|
||||
|
||||
> Task :capacitor-keyboard:generateReleaseRFile
|
||||
> Task :capacitor-keyboard:generateReleaseBuildConfig
|
||||
> Task :capacitor-keyboard:javaPreCompileRelease
|
||||
> Task :capacitor-splash-screen:generateReleaseRFile
|
||||
> Task :capacitor-android:bundleLibCompileToJarRelease
|
||||
> Task :capacitor-android:bundleLibRuntimeToJarRelease
|
||||
> Task :capacitor-keyboard:compileReleaseJavaWithJavac
|
||||
> Task :capacitor-keyboard:bundleLibRuntimeToJarRelease
|
||||
> Task :capacitor-splash-screen:generateReleaseBuildConfig
|
||||
> Task :capacitor-splash-screen:javaPreCompileRelease
|
||||
> Task :capacitor-cordova-android-plugins:generateReleaseBuildConfig
|
||||
> Task :app:processReleaseResources
|
||||
> Task :capacitor-splash-screen:compileReleaseJavaWithJavac
|
||||
> Task :capacitor-splash-screen:bundleLibRuntimeToJarRelease
|
||||
> Task :capacitor-cordova-android-plugins:javaPreCompileRelease
|
||||
> Task :app:checkReleaseDuplicateClasses
|
||||
> Task :capacitor-cordova-android-plugins:compileReleaseJavaWithJavac
|
||||
> Task :capacitor-cordova-android-plugins:bundleLibRuntimeToJarRelease
|
||||
> Task :app:generateReleaseBuildConfig
|
||||
> Task :app:javaPreCompileRelease
|
||||
> Task :capacitor-cordova-android-plugins:bundleLibCompileToJarRelease
|
||||
> Task :capacitor-keyboard:bundleLibCompileToJarRelease
|
||||
> Task :capacitor-splash-screen:bundleLibCompileToJarRelease
|
||||
> Task :app:desugarReleaseFileDependencies
|
||||
> Task :app:bundleReleaseResources
|
||||
> Task :app:compileReleaseJavaWithJavac
|
||||
> Task :app:dexBuilderRelease
|
||||
> Task :app:mergeReleaseStartupProfile
|
||||
> Task :app:mergeReleaseShaders
|
||||
> Task :app:compileReleaseShaders NO-SOURCE
|
||||
> Task :app:generateReleaseAssets UP-TO-DATE
|
||||
> Task :capacitor-android:mergeReleaseShaders
|
||||
> Task :capacitor-android:compileReleaseShaders NO-SOURCE
|
||||
> Task :capacitor-android:generateReleaseAssets UP-TO-DATE
|
||||
> Task :capacitor-android:mergeReleaseAssets
|
||||
> Task :capacitor-cordova-android-plugins:mergeReleaseShaders
|
||||
> Task :capacitor-cordova-android-plugins:compileReleaseShaders NO-SOURCE
|
||||
> Task :capacitor-cordova-android-plugins:generateReleaseAssets UP-TO-DATE
|
||||
> Task :capacitor-cordova-android-plugins:mergeReleaseAssets
|
||||
> Task :capacitor-keyboard:mergeReleaseShaders
|
||||
> Task :capacitor-keyboard:compileReleaseShaders NO-SOURCE
|
||||
> Task :capacitor-keyboard:generateReleaseAssets UP-TO-DATE
|
||||
> Task :capacitor-keyboard:mergeReleaseAssets
|
||||
> Task :capacitor-splash-screen:mergeReleaseShaders
|
||||
> Task :capacitor-splash-screen:compileReleaseShaders NO-SOURCE
|
||||
> Task :capacitor-splash-screen:generateReleaseAssets UP-TO-DATE
|
||||
> Task :capacitor-splash-screen:mergeReleaseAssets
|
||||
> Task :app:mergeReleaseAssets
|
||||
> Task :app:processReleaseJavaRes NO-SOURCE
|
||||
> Task :capacitor-android:processReleaseJavaRes NO-SOURCE
|
||||
> Task :capacitor-cordova-android-plugins:processReleaseJavaRes NO-SOURCE
|
||||
> Task :capacitor-keyboard:processReleaseJavaRes NO-SOURCE
|
||||
> Task :capacitor-splash-screen:processReleaseJavaRes NO-SOURCE
|
||||
> Task :app:mergeReleaseJniLibFolders
|
||||
> Task :capacitor-android:mergeReleaseJniLibFolders
|
||||
> Task :capacitor-android:mergeReleaseNativeLibs NO-SOURCE
|
||||
> Task :capacitor-android:copyReleaseJniLibsProjectOnly
|
||||
> Task :capacitor-cordova-android-plugins:mergeReleaseJniLibFolders
|
||||
> Task :capacitor-cordova-android-plugins:mergeReleaseNativeLibs NO-SOURCE
|
||||
> Task :capacitor-cordova-android-plugins:copyReleaseJniLibsProjectOnly
|
||||
> Task :capacitor-keyboard:mergeReleaseJniLibFolders
|
||||
> Task :capacitor-keyboard:mergeReleaseNativeLibs NO-SOURCE
|
||||
> Task :capacitor-keyboard:copyReleaseJniLibsProjectOnly
|
||||
> Task :capacitor-splash-screen:mergeReleaseJniLibFolders
|
||||
> Task :capacitor-splash-screen:mergeReleaseNativeLibs NO-SOURCE
|
||||
> Task :capacitor-splash-screen:copyReleaseJniLibsProjectOnly
|
||||
> Task :app:writeReleaseAppMetadata
|
||||
> Task :app:mergeReleaseNativeLibs NO-SOURCE
|
||||
> Task :app:stripReleaseDebugSymbols NO-SOURCE
|
||||
> Task :capacitor-android:prepareReleaseArtProfile
|
||||
> Task :capacitor-cordova-android-plugins:prepareReleaseArtProfile
|
||||
> Task :capacitor-keyboard:prepareReleaseArtProfile
|
||||
> Task :capacitor-splash-screen:prepareReleaseArtProfile
|
||||
> Task :app:mergeReleaseArtProfile
|
||||
> Task :app:collectReleaseDependencies
|
||||
> Task :app:configureReleaseDependencies
|
||||
> Task :app:extractReleaseNativeSymbolTables NO-SOURCE
|
||||
> Task :app:extractProguardFiles
|
||||
> Task :capacitor-android:createFullJarRelease
|
||||
> Task :capacitor-android:extractProguardFiles
|
||||
> Task :app:mergeReleaseJavaResource
|
||||
> Task :capacitor-android:generateReleaseLintModel
|
||||
> Task :capacitor-android:prepareLintJarForPublish
|
||||
> Task :capacitor-cordova-android-plugins:createFullJarRelease
|
||||
> Task :capacitor-cordova-android-plugins:extractProguardFiles
|
||||
> Task :capacitor-cordova-android-plugins:generateReleaseLintModel
|
||||
> Task :capacitor-cordova-android-plugins:prepareLintJarForPublish
|
||||
> Task :capacitor-keyboard:createFullJarRelease
|
||||
> Task :capacitor-keyboard:extractProguardFiles
|
||||
> Task :app:mergeReleaseGlobalSynthetics
|
||||
> Task :capacitor-keyboard:generateReleaseLintModel
|
||||
> Task :capacitor-keyboard:prepareLintJarForPublish
|
||||
> Task :capacitor-splash-screen:createFullJarRelease
|
||||
> Task :capacitor-splash-screen:extractProguardFiles
|
||||
> Task :capacitor-splash-screen:generateReleaseLintModel
|
||||
> Task :capacitor-splash-screen:prepareLintJarForPublish
|
||||
> Task :app:generateReleaseLintVitalReportModel
|
||||
> Task :capacitor-keyboard:stripReleaseDebugSymbols NO-SOURCE
|
||||
> Task :capacitor-keyboard:copyReleaseJniLibsProjectAndLocalJars
|
||||
> Task :capacitor-keyboard:extractDeepLinksForAarRelease
|
||||
> Task :capacitor-keyboard:extractReleaseAnnotations
|
||||
> Task :capacitor-keyboard:mergeReleaseGeneratedProguardFiles
|
||||
> Task :capacitor-keyboard:mergeReleaseConsumerProguardFiles
|
||||
> Task :capacitor-splash-screen:stripReleaseDebugSymbols NO-SOURCE
|
||||
> Task :capacitor-keyboard:mergeReleaseJavaResource
|
||||
> Task :capacitor-splash-screen:copyReleaseJniLibsProjectAndLocalJars
|
||||
> Task :capacitor-keyboard:syncReleaseLibJars
|
||||
> Task :capacitor-keyboard:bundleReleaseLocalLintAar
|
||||
> Task :capacitor-splash-screen:extractDeepLinksForAarRelease
|
||||
> Task :capacitor-splash-screen:extractReleaseAnnotations
|
||||
> Task :capacitor-splash-screen:mergeReleaseGeneratedProguardFiles
|
||||
> Task :capacitor-splash-screen:mergeReleaseConsumerProguardFiles
|
||||
> Task :capacitor-android:stripReleaseDebugSymbols NO-SOURCE
|
||||
> Task :capacitor-splash-screen:mergeReleaseJavaResource
|
||||
> Task :capacitor-android:copyReleaseJniLibsProjectAndLocalJars
|
||||
> Task :capacitor-splash-screen:syncReleaseLibJars
|
||||
> Task :capacitor-splash-screen:bundleReleaseLocalLintAar
|
||||
> Task :capacitor-android:extractDeepLinksForAarRelease
|
||||
> Task :capacitor-android:extractReleaseAnnotations
|
||||
> Task :capacitor-android:mergeReleaseGeneratedProguardFiles
|
||||
> Task :capacitor-android:mergeReleaseConsumerProguardFiles
|
||||
> Task :capacitor-cordova-android-plugins:stripReleaseDebugSymbols NO-SOURCE
|
||||
> Task :capacitor-android:mergeReleaseJavaResource
|
||||
> Task :capacitor-cordova-android-plugins:copyReleaseJniLibsProjectAndLocalJars
|
||||
> Task :capacitor-android:syncReleaseLibJars
|
||||
> Task :capacitor-android:bundleReleaseLocalLintAar
|
||||
> Task :capacitor-cordova-android-plugins:extractDeepLinksForAarRelease
|
||||
> Task :capacitor-cordova-android-plugins:extractReleaseAnnotations
|
||||
> Task :capacitor-cordova-android-plugins:mergeReleaseGeneratedProguardFiles
|
||||
> Task :capacitor-cordova-android-plugins:mergeReleaseConsumerProguardFiles
|
||||
> Task :capacitor-cordova-android-plugins:mergeReleaseJavaResource
|
||||
> Task :capacitor-cordova-android-plugins:syncReleaseLibJars
|
||||
> Task :capacitor-cordova-android-plugins:bundleReleaseLocalLintAar
|
||||
> Task :capacitor-android:writeReleaseLintModelMetadata
|
||||
> Task :capacitor-cordova-android-plugins:writeReleaseLintModelMetadata
|
||||
> Task :capacitor-keyboard:writeReleaseLintModelMetadata
|
||||
> Task :capacitor-splash-screen:writeReleaseLintModelMetadata
|
||||
> Task :capacitor-android:generateReleaseLintVitalModel
|
||||
> Task :capacitor-cordova-android-plugins:generateReleaseLintVitalModel
|
||||
> Task :capacitor-keyboard:generateReleaseLintVitalModel
|
||||
> Task :capacitor-splash-screen:generateReleaseLintVitalModel
|
||||
> Task :app:parseReleaseIntegrityConfig
|
||||
> Task :app:validateSigningRelease
|
||||
> Task :capacitor-keyboard:lintVitalAnalyzeRelease
|
||||
> Task :capacitor-splash-screen:lintVitalAnalyzeRelease
|
||||
> Task :app:mergeExtDexRelease
|
||||
> Task :capacitor-android:lintVitalAnalyzeRelease
|
||||
> Task :app:mergeDexRelease
|
||||
> Task :app:buildReleasePreBundle
|
||||
> Task :app:compileReleaseArtProfile
|
||||
> Task :capacitor-cordova-android-plugins:lintVitalAnalyzeRelease
|
||||
> Task :app:lintVitalAnalyzeRelease
|
||||
> Task :app:lintVitalReportRelease
|
||||
> Task :app:lintVitalRelease
|
||||
> Task :app:packageReleaseBundle
|
||||
> Task :app:signReleaseBundle
|
||||
> Task :app:produceReleaseBundleIdeListingFile
|
||||
> Task :app:createReleaseBundleListingFileRedirect
|
||||
> Task :app:bundleRelease
|
||||
[Incubating] Problems report is available at: file:///Users/hansoo./Dev/zellyy-finance/android/build/reports/problems/problems-report.html
|
||||
|
||||
BUILD SUCCESSFUL in 11s
|
||||
181 actionable tasks: 181 executed
|
||||
[0;32m릴리즈 AAB 빌드 완료[0m
|
||||
[0;32mAAB 파일 생성 완료: app/build/outputs/bundle/release/app-release.aab[0m
|
||||
[0;32mAAB 파일 크기: 3.8M[0m
|
||||
[0;32mAAB 파일이 릴리즈 디렉토리에 복사되었습니다: release/zellyy_release_v1.1.8_20250405_194612.aab[0m
|
||||
1
app_error.log
Normal file
1
app_error.log
Normal file
@@ -0,0 +1 @@
|
||||
===== 오류 로그: Sat Apr 5 19:45:45 KST 2025 =====
|
||||
479
build-apk.sh
479
build-apk.sh
@@ -3,15 +3,60 @@
|
||||
# 안드로이드 앱 빌드 스크립트 (디버그 및 릴리즈 버전)
|
||||
# 사용법: ./build-apk-for-device.sh
|
||||
|
||||
# 스크립트 시작 시간 기록
|
||||
START_TIME=$(date +%s)
|
||||
|
||||
# 색상 정의
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 로그 파일 설정
|
||||
LOG_FILE="app_build.log"
|
||||
ERROR_LOG_FILE="app_error.log"
|
||||
|
||||
# 타임아웃 설정 (초 단위)
|
||||
BUILD_TIMEOUT=600 # 10분
|
||||
|
||||
# 오류 처리 함수
|
||||
handle_error() {
|
||||
local exit_code=$1
|
||||
local error_message=$2
|
||||
local command=$3
|
||||
|
||||
echo -e "\n${RED}오류 발생: $error_message${NC}" | tee -a "$ERROR_LOG_FILE"
|
||||
echo -e "${YELLOW}명령어: $command${NC}" | tee -a "$ERROR_LOG_FILE"
|
||||
echo -e "${YELLOW}종료 코드: $exit_code${NC}" | tee -a "$ERROR_LOG_FILE"
|
||||
echo -e "${YELLOW}전체 로그는 $LOG_FILE 파일을 확인하세요.${NC}"
|
||||
|
||||
exit $exit_code
|
||||
}
|
||||
|
||||
# 빌드 시간 계산 함수
|
||||
show_build_time() {
|
||||
local end_time=$(date +%s)
|
||||
local build_time=$((end_time - START_TIME))
|
||||
local minutes=$((build_time / 60))
|
||||
local seconds=$((build_time % 60))
|
||||
|
||||
echo -e "\n${GREEN}빌드 완료 시간: ${minutes}분 ${seconds}초${NC}"
|
||||
}
|
||||
|
||||
# 로그 파일 초기화
|
||||
echo "===== 빌드 시작: $(date) =====" > "$LOG_FILE"
|
||||
echo "===== 오류 로그: $(date) =====" > "$ERROR_LOG_FILE"
|
||||
|
||||
# 프로젝트 디렉토리로 이동
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
# 릴리즈 디렉토리 생성
|
||||
RELEASE_DIR="$(pwd)/release"
|
||||
if [ ! -d "$RELEASE_DIR" ]; then
|
||||
mkdir -p "$RELEASE_DIR"
|
||||
echo -e "${GREEN}릴리즈 디렉토리가 생성되었습니다: $RELEASE_DIR${NC}"
|
||||
fi
|
||||
|
||||
# 빌드 타입 선택 메뉴
|
||||
echo -e "${YELLOW}Zellyy Finance 앱 빌드 스크립트${NC}"
|
||||
echo -e "${YELLOW}=============================${NC}"
|
||||
@@ -43,76 +88,107 @@ case $CHOICE in
|
||||
;;
|
||||
esac
|
||||
|
||||
# 현재 버전 코드 가져오기
|
||||
CURRENT_VERSION_CODE=$(grep -o 'versionCode [0-9]*' android/app/build.gradle | awk '{print $2}')
|
||||
# 버전 코드가 비어있으면 기본값 1로 설정
|
||||
if [ -z "$CURRENT_VERSION_CODE" ]; then
|
||||
CURRENT_VERSION_CODE=1
|
||||
echo -e "${YELLOW}버전 코드가 없어 기본값 1로 설정했습니다.${NC}"
|
||||
fi
|
||||
echo -e "${YELLOW}현재 버전 코드: ${CURRENT_VERSION_CODE}${NC}"
|
||||
# 버전 정보 파일 확인
|
||||
VERSION_PROPS_FILE="version.properties"
|
||||
|
||||
# 현재 버전 이름 가져오기
|
||||
CURRENT_VERSION_NAME=$(grep -o 'versionName "[^"]*"' android/app/build.gradle | sed 's/versionName "//' | sed 's/"//')
|
||||
# 버전 이름이 비어있으면 기본값 1.0.0으로 설정
|
||||
if [ -z "$CURRENT_VERSION_NAME" ]; then
|
||||
CURRENT_VERSION_NAME="1.0.0"
|
||||
echo -e "${YELLOW}버전 이름이 없어 기본값 1.0.0으로 설정했습니다.${NC}"
|
||||
# 버전 정보 파일이 있는지 확인
|
||||
if [ -f "$VERSION_PROPS_FILE" ]; then
|
||||
# 파일에서 버전 정보 로드
|
||||
source "$VERSION_PROPS_FILE"
|
||||
CURRENT_VERSION_CODE=$VERSION_CODE
|
||||
CURRENT_VERSION_NAME=$VERSION_NAME
|
||||
CURRENT_BUILD_NUMBER=$BUILD_NUMBER
|
||||
echo -e "${GREEN}버전 정보 로드 완료: 버전 코드=${BLUE}$CURRENT_VERSION_CODE${GREEN}, 버전 이름=${BLUE}$CURRENT_VERSION_NAME${GREEN}, 빌드 번호=${BLUE}$CURRENT_BUILD_NUMBER${NC}"
|
||||
else
|
||||
# 파일이 없으면 build.gradle에서 버전 정보 가져오기
|
||||
CURRENT_VERSION_CODE=$(grep -o 'versionCode [0-9]*' android/app/build.gradle | sed 's/versionCode //')
|
||||
CURRENT_VERSION_NAME=$(grep -o 'versionName "[^"]*"' android/app/build.gradle | sed 's/versionName "//' | sed 's/"//')
|
||||
|
||||
# 버전 코드가 비어있으면 기본값 1로 설정
|
||||
if [ -z "$CURRENT_VERSION_CODE" ]; then
|
||||
CURRENT_VERSION_CODE=1
|
||||
echo -e "${YELLOW}버전 코드가 없어 기본값 1로 설정했습니다.${NC}"
|
||||
fi
|
||||
|
||||
# 버전 이름이 비어있으면 기본값 1.0.0으로 설정
|
||||
if [ -z "$CURRENT_VERSION_NAME" ]; then
|
||||
CURRENT_VERSION_NAME="1.0.0"
|
||||
echo -e "${YELLOW}버전 이름이 없어 기본값 1.0.0으로 설정했습니다.${NC}"
|
||||
fi
|
||||
|
||||
# 빌드 번호 기본값 설정
|
||||
CURRENT_BUILD_NUMBER=$CURRENT_VERSION_CODE
|
||||
fi
|
||||
echo -e "${YELLOW}현재 버전 이름: ${CURRENT_VERSION_NAME}${NC}"
|
||||
|
||||
echo -e "${YELLOW}현재 버전 코드: ${BLUE}$CURRENT_VERSION_CODE${NC}"
|
||||
echo -e "${YELLOW}현재 버전 이름: ${BLUE}$CURRENT_VERSION_NAME${NC}"
|
||||
echo -e "${YELLOW}현재 빌드 번호: ${BLUE}$CURRENT_BUILD_NUMBER${NC}"
|
||||
|
||||
# 버전 정보 수정 여부 확인
|
||||
echo -e "${YELLOW}버전 정보를 수정하시겠습니까? (y/n)${NC}"
|
||||
read -r MODIFY_VERSION
|
||||
# 기본값 설정
|
||||
NEW_VERSION_CODE=$CURRENT_VERSION_CODE
|
||||
NEW_VERSION_NAME=$CURRENT_VERSION_NAME
|
||||
|
||||
if [[ "$MODIFY_VERSION" == "y" || "$MODIFY_VERSION" == "Y" ]]; then
|
||||
# 버전 코드 입력
|
||||
echo -e "${YELLOW}새 버전 코드를 입력하세요 (현재: ${CURRENT_VERSION_CODE}):${NC}"
|
||||
echo -e "${YELLOW}새 버전 코드를 입력하세요 (현재: ${BLUE}${CURRENT_VERSION_CODE}${YELLOW}, 엔터를 치면 기본값 사용):${NC}"
|
||||
read -r NEW_VERSION_CODE_INPUT
|
||||
if [ -n "$NEW_VERSION_CODE_INPUT" ]; then
|
||||
NEW_VERSION_CODE=$NEW_VERSION_CODE_INPUT
|
||||
else
|
||||
NEW_VERSION_CODE=$CURRENT_VERSION_CODE
|
||||
fi
|
||||
|
||||
# 버전 이름 입력
|
||||
echo -e "${YELLOW}새 버전 이름을 입력하세요 (현재: ${CURRENT_VERSION_NAME}):${NC}"
|
||||
echo -e "${YELLOW}새 버전 이름을 입력하세요 (현재: ${BLUE}${CURRENT_VERSION_NAME}${YELLOW}, 엔터를 치면 기본값 사용):${NC}"
|
||||
read -r NEW_VERSION_NAME_INPUT
|
||||
if [ -n "$NEW_VERSION_NAME_INPUT" ]; then
|
||||
VERSION_NAME=$NEW_VERSION_NAME_INPUT
|
||||
else
|
||||
VERSION_NAME=$CURRENT_VERSION_NAME
|
||||
NEW_VERSION_NAME=$NEW_VERSION_NAME_INPUT
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}버전 정보가 업데이트되었습니다: 버전 코드=${NEW_VERSION_CODE}, 버전 이름=${VERSION_NAME}${NC}"
|
||||
else
|
||||
NEW_VERSION_CODE=$CURRENT_VERSION_CODE
|
||||
VERSION_NAME=$CURRENT_VERSION_NAME
|
||||
echo -e "${GREEN}버전 정보가 업데이트되었습니다: 버전 코드=${BLUE}${NEW_VERSION_CODE}${GREEN}, 버전 이름=${BLUE}${NEW_VERSION_NAME}${NC}"
|
||||
fi
|
||||
|
||||
# 빌드 넘버 자동 설정
|
||||
BUILD_NUMBER=$NEW_VERSION_CODE
|
||||
echo -e "${GREEN}빌드 넘버가 자동으로 ${BUILD_NUMBER}(으)로 설정되었습니다.${NC}"
|
||||
# 빌드 번호 기본값 설정
|
||||
BUILD_NUMBER=$CURRENT_BUILD_NUMBER
|
||||
|
||||
# 빌드 넘버 수정 여부 확인
|
||||
echo -e "${YELLOW}빌드 넘버를 수정하시겠습니까? (y/n)${NC}"
|
||||
# 릴리즈 빌드일 경우 빌드 번호 자동 증가 제안
|
||||
if [[ "$BUILD_TYPE" == "release-aab" || "$BUILD_TYPE" == "release-apk" ]]; then
|
||||
SUGGESTED_BUILD_NUMBER=$((CURRENT_BUILD_NUMBER + 1))
|
||||
echo -e "${YELLOW}릴리즈 빌드에는 빌드 번호 증가가 권장됩니다 (${BLUE}$CURRENT_BUILD_NUMBER${YELLOW} -> ${BLUE}$SUGGESTED_BUILD_NUMBER${YELLOW})${NC}"
|
||||
else
|
||||
SUGGESTED_BUILD_NUMBER=$CURRENT_BUILD_NUMBER
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}현재 빌드 번호: ${BLUE}$CURRENT_BUILD_NUMBER${NC}"
|
||||
|
||||
# 빌드 번호 수정 여부 확인
|
||||
echo -e "${YELLOW}빌드 번호를 수정하시겠습니까? (y/n)${NC}"
|
||||
read -r MODIFY_BUILD
|
||||
if [[ "$MODIFY_BUILD" == "y" || "$MODIFY_BUILD" == "Y" ]]; then
|
||||
echo -e "${YELLOW}새 빌드 넘버를 입력하세요 (현재: ${BUILD_NUMBER}):${NC}"
|
||||
echo -e "${YELLOW}새 빌드 번호를 입력하세요 (추천: ${BLUE}$SUGGESTED_BUILD_NUMBER${YELLOW}, 엔터를 치면 추천값 사용):${NC}"
|
||||
read -r NEW_BUILD_NUMBER
|
||||
if [ -n "$NEW_BUILD_NUMBER" ]; then
|
||||
BUILD_NUMBER=$NEW_BUILD_NUMBER
|
||||
echo -e "${GREEN}빌드 넘버가 ${BUILD_NUMBER}(으)로 설정되었습니다.${NC}"
|
||||
else
|
||||
BUILD_NUMBER=$SUGGESTED_BUILD_NUMBER
|
||||
fi
|
||||
echo -e "${GREEN}빌드 번호가 ${BLUE}$BUILD_NUMBER${GREEN}(으)로 설정되었습니다.${NC}"
|
||||
else
|
||||
BUILD_NUMBER=$SUGGESTED_BUILD_NUMBER
|
||||
echo -e "${GREEN}빌드 번호가 ${BLUE}$BUILD_NUMBER${GREEN}(으)로 자동 설정되었습니다.${NC}"
|
||||
fi
|
||||
|
||||
# 릴리즈 빌드인 경우 버전 코드 증가 여부 확인
|
||||
if [[ "$BUILD_TYPE" == "release-aab" || "$BUILD_TYPE" == "release-apk" ]]; then
|
||||
# 버전 정보를 이미 수정했다면 다시 묻지 않음
|
||||
if [[ "$MODIFY_VERSION" != "y" && "$MODIFY_VERSION" != "Y" ]]; then
|
||||
echo -e "${YELLOW}버전 코드를 증가시키겠습니까? 현재 버전 코드: ${NEW_VERSION_CODE} (y/n)${NC}"
|
||||
SUGGESTED_VERSION_CODE=$((CURRENT_VERSION_CODE + 1))
|
||||
echo -e "${YELLOW}릴리즈 빌드에는 버전 코드 증가가 권장됩니다 (${BLUE}$CURRENT_VERSION_CODE${YELLOW} -> ${BLUE}$SUGGESTED_VERSION_CODE${YELLOW})${NC}"
|
||||
echo -e "${YELLOW}버전 코드를 증가시키겠습니까? (y/n)${NC}"
|
||||
read -r INCREASE_VERSION
|
||||
if [[ "$INCREASE_VERSION" == "y" || "$INCREASE_VERSION" == "Y" ]]; then
|
||||
NEW_VERSION_CODE=$((NEW_VERSION_CODE + 1))
|
||||
NEW_VERSION_CODE=$SUGGESTED_VERSION_CODE
|
||||
echo -e "${GREEN}버전 코드가 ${NEW_VERSION_CODE}(으)로 증가됩니다.${NC}"
|
||||
fi
|
||||
fi
|
||||
@@ -132,24 +208,39 @@ if [[ "$BUILD_TYPE" == "release-aab" || "$BUILD_TYPE" == "release-apk" ]]; then
|
||||
echo -e "${GREEN}서명 설정이 업데이트되었습니다.${NC}"
|
||||
fi
|
||||
|
||||
echo -e "${YELLOW}Zellyy Finance 앱 빌드 시작 (${BUILD_TYPE}, 빌드 넘버: ${BUILD_NUMBER}, 버전 코드: ${NEW_VERSION_CODE}): $(date)${NC}"
|
||||
echo -e "${YELLOW}Zellyy Finance 앱 빌드 시작 (${BUILD_TYPE}, 빌드 번호: ${BUILD_NUMBER}, 버전 코드: ${NEW_VERSION_CODE}, 버전 이름: ${NEW_VERSION_NAME}): $(date)${NC}"
|
||||
|
||||
# 버전 정보를 파일에 저장하는 함수
|
||||
save_version_info() {
|
||||
# version.properties 파일 업데이트 - 루트 디렉토리와 app 디렉토리 모두에 저장
|
||||
echo "buildNumber=$BUILD_NUMBER" > android/version.properties
|
||||
echo "versionCode=$NEW_VERSION_CODE" >> android/version.properties
|
||||
echo "versionName=$VERSION_NAME" >> android/version.properties
|
||||
# 루트 디렉토리에 version.properties 파일 저장
|
||||
cat > "$VERSION_PROPS_FILE" << EOF
|
||||
# Zellyy Finance 앱 버전 정보
|
||||
# 마지막 업데이트: $(date +"%Y-%m-%d %H:%M:%S")
|
||||
VERSION_CODE=$NEW_VERSION_CODE
|
||||
VERSION_NAME=$NEW_VERSION_NAME
|
||||
BUILD_NUMBER=$BUILD_NUMBER
|
||||
EOF
|
||||
|
||||
# android 디렉토리에 version.properties 파일 저장
|
||||
cat > "android/version.properties" << EOF
|
||||
# Zellyy Finance 앱 버전 정보
|
||||
# 마지막 업데이트: $(date +"%Y-%m-%d %H:%M:%S")
|
||||
buildNumber=$BUILD_NUMBER
|
||||
versionCode=$NEW_VERSION_CODE
|
||||
versionName=$NEW_VERSION_NAME
|
||||
EOF
|
||||
|
||||
# app 디렉토리에도 동일한 파일 복사
|
||||
cp android/version.properties android/app/version.properties
|
||||
cp "android/version.properties" "android/app/version.properties"
|
||||
|
||||
# app_version.json 파일 업데이트
|
||||
cat > android/app_version.json << EOF
|
||||
# app_version.json 파일 업데이트 - 사용자 정보와 빌드 정보 포함
|
||||
cat > "android/app_version.json" << EOF
|
||||
{
|
||||
"versionCode": $NEW_VERSION_CODE,
|
||||
"versionName": "$VERSION_NAME",
|
||||
"versionName": "$NEW_VERSION_NAME",
|
||||
"buildNumber": $BUILD_NUMBER,
|
||||
"buildDate": "$(date +"%Y-%m-%d %H:%M:%S")",
|
||||
"buildType": "$BUILD_TYPE",
|
||||
"notes": "사용자가 수정한 버전 정보입니다. 이 파일을 편집하여 앱 버전 정보를 변경할 수 있습니다."
|
||||
}
|
||||
EOF
|
||||
@@ -157,17 +248,59 @@ EOF
|
||||
# AppVersionInfo.tsx 파일의 하드코딩된 버전 정보 업데이트
|
||||
echo -e "${YELLOW}AppVersionInfo.tsx 파일의 버전 정보 업데이트 중...${NC}"
|
||||
|
||||
# 백업 파일 생성
|
||||
cp src/components/AppVersionInfo.tsx src/components/AppVersionInfo.tsx.bak
|
||||
|
||||
# AppVersionInfo.tsx 파일에서 하드코딩된 버전 정보 업데이트
|
||||
sed -i '' "s/versionName: '[^']*'/versionName: '$VERSION_NAME'/" src/components/AppVersionInfo.tsx
|
||||
sed -i '' "/hardcodedVersionInfo/,/}/s/buildNumber: [0-9]*/buildNumber: $BUILD_NUMBER/" src/components/AppVersionInfo.tsx
|
||||
sed -i '' "/hardcodedVersionInfo/,/}/s/versionCode: [0-9]*/versionCode: $NEW_VERSION_CODE/" src/components/AppVersionInfo.tsx
|
||||
|
||||
echo -e "${GREEN}AppVersionInfo.tsx 파일의 버전 정보가 업데이트되었습니다.${NC}"
|
||||
# AppVersionInfo.tsx 파일이 존재하는지 확인
|
||||
APP_VERSION_FILE="src/components/AppVersionInfo.tsx"
|
||||
if [ -f "$APP_VERSION_FILE" ]; then
|
||||
# 백업 파일 생성
|
||||
cp "$APP_VERSION_FILE" "${APP_VERSION_FILE}.bak"
|
||||
|
||||
# AppVersionInfo.tsx 파일에서 하드코딩된 버전 정보 업데이트
|
||||
sed -i '' "s/versionName: '[^']*'/versionName: '$NEW_VERSION_NAME'/" "$APP_VERSION_FILE"
|
||||
sed -i '' "/hardcodedVersionInfo/,/}/s/buildNumber: [0-9]*/buildNumber: $BUILD_NUMBER/" "$APP_VERSION_FILE"
|
||||
sed -i '' "/hardcodedVersionInfo/,/}/s/versionCode: [0-9]*/versionCode: $NEW_VERSION_CODE/" "$APP_VERSION_FILE"
|
||||
|
||||
echo -e "${GREEN}AppVersionInfo.tsx 파일의 버전 정보가 업데이트되었습니다.${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}경고: AppVersionInfo.tsx 파일을 찾을 수 없습니다.${NC}"
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}버전 정보가 모든 파일에 저장되었습니다: 버전 코드=${NEW_VERSION_CODE}, 버전 이름=${VERSION_NAME}, 빌드 넘버=${BUILD_NUMBER}${NC}"
|
||||
# AndroidManifest.xml 파일의 버전 정보 업데이트
|
||||
MANIFEST_FILE="android/app/src/main/AndroidManifest.xml"
|
||||
if [ -f "$MANIFEST_FILE" ]; then
|
||||
# 기존 버전 정보가 있는지 확인
|
||||
if grep -q 'android:versionCode' "$MANIFEST_FILE"; then
|
||||
# 기존 버전 정보 업데이트
|
||||
sed -i '' "s/android:versionCode=\"[0-9]*\"/android:versionCode=\"$NEW_VERSION_CODE\"/" "$MANIFEST_FILE"
|
||||
sed -i '' "s/android:versionName=\"[^\"]*\"/android:versionName=\"$NEW_VERSION_NAME\"/" "$MANIFEST_FILE"
|
||||
else
|
||||
# 버전 정보가 없으면 추가
|
||||
sed -i '' "s/<manifest xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\">/<manifest xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n android:versionCode=\"$NEW_VERSION_CODE\"\n android:versionName=\"$NEW_VERSION_NAME\">/" "$MANIFEST_FILE"
|
||||
fi
|
||||
echo -e "${GREEN}AndroidManifest.xml 파일의 버전 정보가 업데이트되었습니다.${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}경고: AndroidManifest.xml 파일을 찾을 수 없습니다.${NC}"
|
||||
fi
|
||||
|
||||
# build.gradle 파일의 버전 정보 업데이트
|
||||
GRADLE_FILE="android/app/build.gradle"
|
||||
if [ -f "$GRADLE_FILE" ]; then
|
||||
# 백업 파일 생성
|
||||
cp "$GRADLE_FILE" "${GRADLE_FILE}.bak"
|
||||
|
||||
# 버전 코드와 버전 이름 업데이트 (더 안정적인 방식으로 수정)
|
||||
# Update versionCode within defaultConfig block (ensure correct indentation)
|
||||
sed -i '' "/defaultConfig {/,/}/s/^[[:space:]]*versionCode[[:space:]]*=.*$/ versionCode = $NEW_VERSION_CODE/" "$GRADLE_FILE"
|
||||
# Update 'def versionCode = ...' (ensure correct indentation)
|
||||
sed -i '' "s/^[[:space:]]*def versionCode[[:space:]]*=.*$/ def versionCode = $NEW_VERSION_CODE/" "$GRADLE_FILE"
|
||||
# Update versionName within defaultConfig block (ensure correct indentation and quotes)
|
||||
sed -i '' "/defaultConfig {/,/}/s/^[[:space:]]*versionName[[:space:]]*=.*$/ versionName = \\\"$NEW_VERSION_NAME\\\"/" "$GRADLE_FILE"
|
||||
|
||||
echo -e "${GREEN}build.gradle 파일의 버전 정보가 업데이트되었습니다.${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}경고: build.gradle 파일을 찾을 수 없습니다.${NC}"
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}버전 정보가 모든 파일에 저장되었습니다: 버전 코드=${BLUE}$NEW_VERSION_CODE${GREEN}, 버전 이름=${BLUE}$NEW_VERSION_NAME${GREEN}, 빌드 번호=${BLUE}$BUILD_NUMBER${NC}"
|
||||
}
|
||||
|
||||
# 빌드 시작 전에 버전 정보 저장
|
||||
@@ -182,156 +315,166 @@ rm -rf dist
|
||||
echo -e "${GREEN}빌드 캐시가 삭제되었습니다.${NC}"
|
||||
|
||||
# 1. 웹 앱 빌드
|
||||
echo -e "${YELLOW}1. 웹 앱 빌드 중...${NC}"
|
||||
npm run build
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}웹 앱 빌드 실패. 빌드 프로세스를 중단합니다.${NC}"
|
||||
exit 1
|
||||
echo -e "${YELLOW}1. 웹 앱 빌드 중...${NC}" | tee -a "$LOG_FILE"
|
||||
echo "실행 명령어: npm run build" >> "$LOG_FILE"
|
||||
npm run build >> "$LOG_FILE" 2>&1
|
||||
BUILD_RESULT=$?
|
||||
if [ $BUILD_RESULT -ne 0 ]; then
|
||||
handle_error $BUILD_RESULT "웹 앱 빌드 실패" "npm run build"
|
||||
fi
|
||||
echo -e "${GREEN}웹 앱 빌드 완료${NC}"
|
||||
echo -e "${GREEN}웹 앱 빌드 완료${NC}" | tee -a "$LOG_FILE"
|
||||
|
||||
# 2. Capacitor에 웹 코드 복사 및 동기화
|
||||
echo -e "${YELLOW}2. Capacitor에 웹 코드 동기화 중...${NC}"
|
||||
npx cap sync android
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}Capacitor 동기화 실패. 빌드 프로세스를 중단합니다.${NC}"
|
||||
exit 1
|
||||
echo -e "${YELLOW}2. Capacitor에 웹 코드 동기화 중...${NC}" | tee -a "$LOG_FILE"
|
||||
echo "실행 명령어: npx cap sync android" >> "$LOG_FILE"
|
||||
npx cap sync android >> "$LOG_FILE" 2>&1
|
||||
BUILD_RESULT=$?
|
||||
if [ $BUILD_RESULT -ne 0 ]; then
|
||||
handle_error $BUILD_RESULT "Capacitor 동기화 실패" "npx cap sync android"
|
||||
fi
|
||||
echo -e "${GREEN}Capacitor 동기화 완료${NC}"
|
||||
echo -e "${GREEN}Capacitor 동기화 완료${NC}" | tee -a "$LOG_FILE"
|
||||
|
||||
# 3. 안드로이드 APK/AAB 빌드
|
||||
cd android
|
||||
|
||||
# Gradle 메모리 설정 최적화
|
||||
export GRADLE_OPTS="-Xmx4g -Dorg.gradle.jvmargs='-Xmx4g -XX:+HeapDumpOnOutOfMemoryError'"
|
||||
echo -e "${YELLOW}3. 안드로이드 빌드 시작 (${BUILD_TYPE})...${NC}"
|
||||
|
||||
# 빌드 타입에 따라 다른 명령어 실행
|
||||
if [ "$BUILD_TYPE" = "debug" ]; then
|
||||
# 디버그 빌드
|
||||
./gradlew clean assembleDebug
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}디버그 APK 빌드 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
echo -e "${YELLOW}3. 안드로이드 빌드 시작 (debug)...${NC}" | tee -a "../$LOG_FILE"
|
||||
echo "실행 명령어: ./gradlew assembleDebug" >> "../$LOG_FILE"
|
||||
./gradlew assembleDebug >> "../$LOG_FILE" 2>&1
|
||||
BUILD_RESULT=$?
|
||||
if [ $BUILD_RESULT -ne 0 ]; then
|
||||
handle_error $BUILD_RESULT "디버그 APK 빌드 실패" "./gradlew assembleDebug"
|
||||
fi
|
||||
echo -e "${GREEN}디버그 APK 빌드 완료${NC}" | tee -a "../$LOG_FILE"
|
||||
|
||||
# 빌드된 APK 파일 경로 출력
|
||||
APK_PATH="app/build/outputs/apk/debug/app-debug.apk"
|
||||
DEST_PATH="$HOME/zellyy-finance-debug.apk"
|
||||
|
||||
if [ -f "$APK_PATH" ]; then
|
||||
echo -e "${GREEN}디버그 APK 빌드 성공!${NC}"
|
||||
echo -e "APK 파일 위치: $(pwd)/$APK_PATH"
|
||||
echo -e "${GREEN}APK 파일 생성 완료: ${BLUE}$APK_PATH${NC}" | tee -a "../$LOG_FILE"
|
||||
|
||||
# 홈 디렉토리로 APK 복사
|
||||
cp "$APK_PATH" "$DEST_PATH"
|
||||
echo -e "${GREEN}APK를 홈 디렉토리에 복사했습니다: $DEST_PATH${NC}"
|
||||
# APK 파일 크기 출력
|
||||
APK_SIZE=$(du -h "$APK_PATH" | cut -f1)
|
||||
echo -e "${GREEN}APK 파일 크기: ${BLUE}$APK_SIZE${NC}" | tee -a "../$LOG_FILE"
|
||||
|
||||
# 연결된 기기 확인
|
||||
DEVICES=$(adb devices | grep -v "List" | grep "device" | wc -l)
|
||||
if [ $DEVICES -gt 0 ]; then
|
||||
echo -e "${YELLOW}연결된 기기가 감지되었습니다. 설치하시겠습니까? (y/n)${NC}"
|
||||
read -r INSTALL
|
||||
if [ "$INSTALL" = "y" ] || [ "$INSTALL" = "Y" ]; then
|
||||
# 기기가 여러 개인 경우
|
||||
if [ $(adb devices | grep -v "List" | grep "device" | wc -l) -gt 1 ]; then
|
||||
echo -e "${YELLOW}여러 기기가 연결되어 있습니다. 특정 기기를 선택하세요:${NC}"
|
||||
adb devices | grep -v "List" | grep "device"
|
||||
echo -e "${YELLOW}기기 ID를 입력하세요:${NC}"
|
||||
read -r DEVICE_ID
|
||||
adb -s "$DEVICE_ID" install -r "$APK_PATH"
|
||||
else
|
||||
adb install -r "$APK_PATH"
|
||||
fi
|
||||
echo -e "${GREEN}설치 완료!${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}연결된 기기가 없습니다. 다음 방법으로 APK를 설치할 수 있습니다:${NC}"
|
||||
echo "1. USB 케이블로 폰을 연결하고 파일 전송"
|
||||
echo "2. 이메일이나 메신저로 APK 파일 전송"
|
||||
echo "3. adb 명령어 사용: adb install $DEST_PATH"
|
||||
fi
|
||||
# 릴리즈 디렉토리로 복사
|
||||
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
||||
RELEASE_FILENAME="zellyy_debug_v${VERSION_NAME}_${TIMESTAMP}.apk"
|
||||
cp "$APK_PATH" "../release/$RELEASE_FILENAME"
|
||||
echo -e "${GREEN}APK 파일이 릴리즈 디렉토리에 복사되었습니다: ${BLUE}release/$RELEASE_FILENAME${NC}" | tee -a "../$LOG_FILE"
|
||||
else
|
||||
echo -e "${RED}APK 빌드 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
echo -e "${RED}APK 파일을 찾을 수 없습니다: $APK_PATH${NC}" | tee -a "../$ERROR_LOG_FILE"
|
||||
fi
|
||||
|
||||
|
||||
elif [ "$BUILD_TYPE" = "release-aab" ]; then
|
||||
# AAB 릴리즈 빌드
|
||||
./gradlew clean bundleRelease
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}릴리즈 AAB 빌드 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
echo -e "${YELLOW}3. 안드로이드 빌드 시작 (release-aab)...${NC}" | tee -a "../$LOG_FILE"
|
||||
echo "실행 명령어: ./gradlew bundleRelease" >> "../$LOG_FILE"
|
||||
./gradlew bundleRelease >> "../$LOG_FILE" 2>&1
|
||||
BUILD_RESULT=$?
|
||||
if [ $BUILD_RESULT -ne 0 ]; then
|
||||
handle_error $BUILD_RESULT "릴리즈 AAB 빌드 실패" "./gradlew bundleRelease"
|
||||
fi
|
||||
echo -e "${GREEN}릴리즈 AAB 빌드 완료${NC}" | tee -a "../$LOG_FILE"
|
||||
|
||||
# 빌드된 AAB 파일 경로 출력
|
||||
AAB_PATH="app/build/outputs/bundle/release/app-release.aab"
|
||||
DEST_PATH="$HOME/zellyy-finance-release.aab"
|
||||
|
||||
if [ -f "$AAB_PATH" ]; then
|
||||
echo -e "${GREEN}릴리즈 AAB 빌드 성공!${NC}"
|
||||
echo -e "AAB 파일 위치: $(pwd)/$AAB_PATH"
|
||||
echo -e "${GREEN}AAB 파일 생성 완료: ${BLUE}$AAB_PATH${NC}" | tee -a "../$LOG_FILE"
|
||||
|
||||
# 홈 디렉토리로 AAB 복사
|
||||
cp "$AAB_PATH" "$DEST_PATH"
|
||||
echo -e "${GREEN}AAB를 홈 디렉토리에 복사했습니다: $DEST_PATH${NC}"
|
||||
# AAB 파일 크기 출력
|
||||
AAB_SIZE=$(du -h "$AAB_PATH" | cut -f1)
|
||||
echo -e "${GREEN}AAB 파일 크기: ${BLUE}$AAB_SIZE${NC}" | tee -a "../$LOG_FILE"
|
||||
|
||||
echo -e "${YELLOW}다음 단계:${NC}"
|
||||
echo "1. Google Play Console에 AAB 파일 업로드: $DEST_PATH"
|
||||
echo "2. 내부 테스트 트랙을 선택하여 업로드"
|
||||
echo "3. 검토 과정이 완료될 때까지 기다리기 (보통 몇 시간에서 24시간 소요)"
|
||||
# 릴리즈 디렉토리로 복사
|
||||
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
||||
RELEASE_FILENAME="zellyy_release_v${VERSION_NAME}_${TIMESTAMP}.aab"
|
||||
cp "$AAB_PATH" "../release/$RELEASE_FILENAME"
|
||||
echo -e "${GREEN}AAB 파일이 릴리즈 디렉토리에 복사되었습니다: ${BLUE}release/$RELEASE_FILENAME${NC}" | tee -a "../$LOG_FILE"
|
||||
else
|
||||
echo -e "${RED}AAB 빌드 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
echo -e "${RED}AAB 파일을 찾을 수 없습니다: $AAB_PATH${NC}" | tee -a "../$ERROR_LOG_FILE"
|
||||
fi
|
||||
|
||||
elif [ "$BUILD_TYPE" = "release-apk" ]; then
|
||||
# 서명된 APK 릴리즈 빌드
|
||||
./gradlew clean assembleRelease
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}서명된 릴리즈 APK 빌드 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
echo -e "${YELLOW}3. 안드로이드 빌드 시작 (release-apk)...${NC}" | tee -a "../$LOG_FILE"
|
||||
echo "실행 명령어: ./gradlew assembleRelease" >> "../$LOG_FILE"
|
||||
./gradlew assembleRelease >> "../$LOG_FILE" 2>&1
|
||||
BUILD_RESULT=$?
|
||||
if [ $BUILD_RESULT -ne 0 ]; then
|
||||
handle_error $BUILD_RESULT "릴리즈 APK 빌드 실패" "./gradlew assembleRelease"
|
||||
fi
|
||||
echo -e "${GREEN}릴리즈 APK 빌드 완료${NC}" | tee -a "../$LOG_FILE"
|
||||
|
||||
# 빌드된 APK 파일 경로 출력
|
||||
APK_PATH="app/build/outputs/apk/release/app-release.apk"
|
||||
if [ -f "$APK_PATH" ]; then
|
||||
echo -e "${GREEN}서명된 APK 파일 생성 완료: ${BLUE}$APK_PATH${NC}" | tee -a "../$LOG_FILE"
|
||||
|
||||
# APK 파일 크기 출력
|
||||
APK_SIZE=$(du -h "$APK_PATH" | cut -f1)
|
||||
echo -e "${GREEN}APK 파일 크기: ${BLUE}$APK_SIZE${NC}" | tee -a "../$LOG_FILE"
|
||||
|
||||
# 릴리즈 디렉토리로 복사
|
||||
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
||||
RELEASE_FILENAME="zellyy_release_signed_v${VERSION_NAME}_${TIMESTAMP}.apk"
|
||||
cp "$APK_PATH" "../release/$RELEASE_FILENAME"
|
||||
echo -e "${GREEN}서명된 APK 파일이 릴리즈 디렉토리에 복사되었습니다: ${BLUE}release/$RELEASE_FILENAME${NC}" | tee -a "../$LOG_FILE"
|
||||
else
|
||||
echo -e "${RED}APK 파일을 찾을 수 없습니다: $APK_PATH${NC}" | tee -a "../$ERROR_LOG_FILE"
|
||||
fi
|
||||
|
||||
SIGNED_APK_PATH="app/build/outputs/apk/release/app-release.apk"
|
||||
DEST_PATH="$HOME/zellyy-finance-release.apk"
|
||||
|
||||
if [ -f "$SIGNED_APK_PATH" ]; then
|
||||
echo -e "${GREEN}서명된 릴리즈 APK 빌드 성공!${NC}"
|
||||
echo -e "APK 파일 위치: $(pwd)/$SIGNED_APK_PATH"
|
||||
|
||||
# 홈 디렉토리로 APK 복사
|
||||
cp "$SIGNED_APK_PATH" "$DEST_PATH"
|
||||
echo -e "${GREEN}서명된 APK를 홈 디렉토리에 복사했습니다: $DEST_PATH${NC}"
|
||||
|
||||
# 연결된 기기 확인
|
||||
DEVICES=$(adb devices | grep -v "List" | grep "device" | wc -l)
|
||||
if [ $DEVICES -gt 0 ]; then
|
||||
echo -e "${YELLOW}연결된 기기가 감지되었습니다. 설치하시겠습니까? (y/n)${NC}"
|
||||
read -r INSTALL
|
||||
if [ "$INSTALL" = "y" ] || [ "$INSTALL" = "Y" ]; then
|
||||
# 기기가 여러 개인 경우
|
||||
if [ $(adb devices | grep -v "List" | grep "device" | wc -l) -gt 1 ]; then
|
||||
echo -e "${YELLOW}여러 기기가 연결되어 있습니다. 특정 기기를 선택하세요:${NC}"
|
||||
adb devices | grep -v "List" | grep "device"
|
||||
echo -e "${YELLOW}기기 ID를 입력하세요:${NC}"
|
||||
read -r DEVICE_ID
|
||||
adb -s "$DEVICE_ID" install -r "$SIGNED_APK_PATH"
|
||||
else
|
||||
adb install -r "$SIGNED_APK_PATH"
|
||||
fi
|
||||
echo -e "${GREEN}설치 완료!${NC}"
|
||||
DEVICES=$(adb devices | grep -v "List" | grep "device" | wc -l)
|
||||
if [ $DEVICES -gt 0 ]; then
|
||||
echo -e "${YELLOW}연결된 기기가 감지되었습니다. 설치하시겠습니까? (y/n)${NC}"
|
||||
read -r INSTALL
|
||||
if [ "$INSTALL" = "y" ] || [ "$INSTALL" = "Y" ]; then
|
||||
# 기기가 여러 개인 경우
|
||||
if [ $(adb devices | grep -v "List" | grep "device" | wc -l) -gt 1 ]; then
|
||||
echo -e "${YELLOW}여러 기기가 연결되어 있습니다. 특정 기기를 선택하세요:${NC}"
|
||||
adb devices | grep -v "List" | grep "device"
|
||||
echo -e "${YELLOW}기기 ID를 입력하세요:${NC}"
|
||||
read -r DEVICE_ID
|
||||
adb -s "$DEVICE_ID" install -r "$APK_PATH"
|
||||
else
|
||||
adb install -r "$APK_PATH"
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}연결된 기기가 없습니다. 다음 방법으로 APK를 설치할 수 있습니다:${NC}"
|
||||
echo "1. USB 케이블로 폰을 연결하고 파일 전송"
|
||||
echo "2. 이메일이나 메신저로 APK 파일 전송"
|
||||
echo "3. adb 명령어 사용: adb install $DEST_PATH"
|
||||
echo -e "${GREEN}설치 완료!${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}APK 빌드 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
echo -e "${YELLOW}연결된 기기가 없습니다. 다음 방법으로 APK를 설치할 수 있습니다:${NC}"
|
||||
echo "1. USB 케이블로 폰을 연결하고 파일 전송"
|
||||
echo "2. 이메일이나 메신저로 APK 파일 전송"
|
||||
echo "3. adb 명령어 사용: adb install $APK_PATH"
|
||||
fi
|
||||
|
||||
else
|
||||
echo -e "${RED}지원되지 않는 빌드 타입입니다: $BUILD_TYPE${NC}"
|
||||
echo -e "${YELLOW}사용법: ./build-apk-for-device.sh${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 빌드 실패 시 처리
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}APK 빌드 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 빌드 시간 표시
|
||||
show_build_time
|
||||
|
||||
echo -e "${GREEN}빌드 프로세스 완료: $(date)${NC}"
|
||||
echo -e "${BLUE}빌드 로그: $LOG_FILE${NC}"
|
||||
echo -e "${YELLOW}오류 로그: $ERROR_LOG_FILE${NC}"
|
||||
|
||||
# 최종 결과 요약
|
||||
echo -e "\n${PURPLE}===== 빌드 결과 요약 =====${NC}"
|
||||
echo -e "${CYAN}빌드 타입: $BUILD_TYPE${NC}"
|
||||
echo -e "${CYAN}버전 코드: $NEW_VERSION_CODE${NC}"
|
||||
echo -e "${CYAN}버전 이름: $VERSION_NAME${NC}"
|
||||
echo -e "${CYAN}빌드 넘버: $BUILD_NUMBER${NC}"
|
||||
|
||||
if [ "$BUILD_TYPE" = "debug" ] && [ -f "android/$APK_PATH" ]; then
|
||||
echo -e "${GREEN}디버그 APK: android/$APK_PATH${NC}"
|
||||
elif [ "$BUILD_TYPE" = "release-aab" ] && [ -f "android/$AAB_PATH" ]; then
|
||||
echo -e "${GREEN}릴리즈 AAB: android/$AAB_PATH${NC}"
|
||||
elif [ "$BUILD_TYPE" = "release-apk" ] && [ -f "android/$APK_PATH" ]; then
|
||||
echo -e "${GREEN}릴리즈 APK: android/$APK_PATH${NC}"
|
||||
fi
|
||||
|
||||
162
build-ios.sh
162
build-ios.sh
@@ -196,7 +196,7 @@ start_build_process() {
|
||||
echo -e "${YELLOW}디버그 빌드 시작...${NC}"
|
||||
|
||||
# 기본적인 빌드 (IPA 없이)
|
||||
xcodebuild -workspace App.xcworkspace -scheme App -configuration Debug -derivedDataPath build
|
||||
xcodebuild -workspace App.xcworkspace -scheme App -configuration Debug -derivedDataPath build -allowProvisioningUpdates
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}디버그 빌드 실패. 오류를 확인하세요.${NC}"
|
||||
@@ -217,64 +217,44 @@ start_build_process() {
|
||||
if [[ "$CREATE_DEBUG_IPA" == "y" || "$CREATE_DEBUG_IPA" == "Y" ]]; then
|
||||
echo -e "${YELLOW}디버그용 IPA 파일 생성 중...${NC}"
|
||||
|
||||
# exportOptions.plist 파일 생성
|
||||
cat > exportOptionsDebug.plist << EOF
|
||||
# 아카이브 생성
|
||||
xcodebuild archive -workspace App.xcworkspace -scheme App -configuration Debug -archivePath build/App.xcarchive -allowProvisioningUpdates
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}아카이브 생성 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# IPA Export (기본 경로 사용)
|
||||
EXPORT_OPTIONS_PLIST_PATH="build/DebugExportOptions.plist"
|
||||
cat > "$EXPORT_OPTIONS_PLIST_PATH" <<EOL
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>method</key>
|
||||
<string>development</string>
|
||||
<string>development</string>
|
||||
<key>teamID</key>
|
||||
<string>${TEAM_ID}</string>
|
||||
<key>compileBitcode</key>
|
||||
<false/>
|
||||
<string>$TEAM_ID</string>
|
||||
<key>signingStyle</key>
|
||||
<string>automatic</string>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
|
||||
# 아카이브 생성
|
||||
xcodebuild -workspace App.xcworkspace -scheme App -configuration Debug clean archive -archivePath "build/App-Debug.xcarchive" -allowProvisioningUpdates
|
||||
|
||||
EOL
|
||||
xcodebuild -exportArchive -archivePath build/App.xcarchive -exportPath build/debug_ipa -exportOptionsPlist "$EXPORT_OPTIONS_PLIST_PATH" -allowProvisioningUpdates
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}아카이브 생성 실패. 오류를 확인하세요.${NC}"
|
||||
rm exportOptionsDebug.plist
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# IPA 파일 생성
|
||||
xcodebuild -exportArchive -archivePath "build/App-Debug.xcarchive" -exportOptionsPlist exportOptionsDebug.plist -exportPath "build/export-debug" -allowProvisioningUpdates
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}IPA 파일 생성 실패. 오류를 확인하세요.${NC}"
|
||||
rm exportOptionsDebug.plist
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm exportOptionsDebug.plist
|
||||
|
||||
DEBUG_IPA_PATH="build/export-debug/App.ipa"
|
||||
DEBUG_DEST_PATH="$HOME/Dev/zellyy-finance-ios-debug.ipa"
|
||||
|
||||
if [ -f "$DEBUG_IPA_PATH" ]; then
|
||||
echo -e "${GREEN}디버그용 IPA 파일 생성 성공!${NC}"
|
||||
echo -e "IPA 파일 위치: $(pwd)/$DEBUG_IPA_PATH"
|
||||
|
||||
# 홈 디렉토리로 IPA 복사
|
||||
cp "$DEBUG_IPA_PATH" "$DEBUG_DEST_PATH"
|
||||
echo -e "${GREEN}IPA를 홈 디렉토리에 복사했습니다: $DEBUG_DEST_PATH${NC}"
|
||||
|
||||
echo -e "${YELLOW}다음 방법으로 다른 기기에 설치할 수 있습니다:${NC}"
|
||||
echo "1. Apple Configurator 2 앱 사용"
|
||||
echo "2. 기기 등록 및 프로비저닝 프로파일이 있는 경우 iTunes로 설치"
|
||||
echo "3. TestFlight를 통한 배포 (App Store Connect에 업로드 필요)"
|
||||
echo -e "${RED}디버그 IPA 파일 생성 실패. 오류를 확인하세요.${NC}"
|
||||
echo -e "${YELLOW}Apple 개발자 계정 정보(팀 ID: $TEAM_ID)가 정확한지, Xcode에서 서명 설정이 완료되었는지 확인하세요.${NC}"
|
||||
echo -e "${GREEN}Xcode 빌드는 완료되었을 수 있습니다. Xcode에서 직접 확인하거나 실행해 보세요.${NC}"
|
||||
else
|
||||
echo -e "${RED}IPA 파일 생성 실패. 오류를 확인하세요.${NC}"
|
||||
echo -e "${GREEN}디버그 IPA 파일 생성 완료: build/debug_ipa/App.ipa${NC}"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}개발자 등록이 필요하여 IPA 파일 생성 단계를 건너뜁니다.${NC}"
|
||||
echo -e "${YELLOW}시뮬레이터에서 앱을 테스트하거나 Apple 개발자 계정을 등록하세요.${NC}"
|
||||
echo -e "${YELLOW}개발자 등록이 필요하여 IPA 파일 생성 단계를 건너<0xEB><0x9B><0x81>니다.${NC}"
|
||||
echo -e "${YELLOW}앱을 기기에서 테스트하려면 Xcode에서 '${WORKSPACE_DIR}/ios/App/App.xcworkspace' 파일을 열고,${NC}"
|
||||
echo -e "${YELLOW}USB로 연결된 기기를 선택한 후 직접 빌드 및 실행하세요.${NC}"
|
||||
fi
|
||||
|
||||
elif [ "$BUILD_TYPE" = "release" ]; then
|
||||
@@ -282,7 +262,7 @@ EOF
|
||||
echo -e "${YELLOW}릴리즈 빌드 시작...${NC}"
|
||||
|
||||
# 기본 Xcode 빌드
|
||||
xcodebuild -workspace App.xcworkspace -scheme App -configuration Release -derivedDataPath build
|
||||
xcodebuild -workspace App.xcworkspace -scheme App -configuration Release -derivedDataPath build -allowProvisioningUpdates
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}릴리즈 빌드 실패. 오류를 확인하세요.${NC}"
|
||||
@@ -304,75 +284,71 @@ EOF
|
||||
echo -e "${YELLOW}App Store 배포용 아카이브 생성 중...${NC}"
|
||||
|
||||
# 아카이브 생성
|
||||
xcodebuild -workspace App.xcworkspace -scheme App -configuration Release clean archive -archivePath "build/App.xcarchive" -allowProvisioningUpdates
|
||||
xcodebuild archive -workspace App.xcworkspace -scheme App -configuration Release -archivePath build/App.xcarchive -allowProvisioningUpdates
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}아카이브 생성 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}아카이브 생성 성공!${NC}"
|
||||
echo -e "아카이브 위치: $(pwd)/build/App.xcarchive"
|
||||
# IPA Export
|
||||
RELEASE_DIR="$WORKSPACE_DIR/release"
|
||||
EXPORT_OPTIONS_PLIST_PATH="build/ReleaseExportOptions.plist"
|
||||
|
||||
# exportOptions.plist 파일 생성
|
||||
cat > exportOptions.plist << EOF
|
||||
# release 디렉토리 생성
|
||||
mkdir -p "$RELEASE_DIR"
|
||||
|
||||
cat > "$EXPORT_OPTIONS_PLIST_PATH" <<EOL
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>method</key>
|
||||
<string>app-store</string>
|
||||
<string>app-store</string>
|
||||
<key>teamID</key>
|
||||
<string>${TEAM_ID}</string>
|
||||
<string>$TEAM_ID</string>
|
||||
<key>signingStyle</key>
|
||||
<string>automatic</string>
|
||||
<key>uploadBitcode</key>
|
||||
<false/>
|
||||
<true/>
|
||||
<key>uploadSymbols</key>
|
||||
<true/>
|
||||
<key>provisioningProfiles</key>
|
||||
<dict>
|
||||
<key>com.lovable.zellyfinance</key>
|
||||
<string>Zellyy Finance App Store</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
|
||||
# IPA 파일 생성
|
||||
echo -e "${YELLOW}IPA 파일 생성 중...${NC}"
|
||||
xcodebuild -exportArchive -archivePath "build/App.xcarchive" -exportOptionsPlist exportOptions.plist -exportPath "build/export" -allowProvisioningUpdates
|
||||
|
||||
EOL
|
||||
# exportPath는 디렉토리만 지정
|
||||
xcodebuild -exportArchive -archivePath build/App.xcarchive -exportPath "$RELEASE_DIR" -exportOptionsPlist "$EXPORT_OPTIONS_PLIST_PATH" -allowProvisioningUpdates
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}IPA 파일 생성 실패. 오류를 확인하세요.${NC}"
|
||||
rm exportOptions.plist
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm exportOptions.plist
|
||||
|
||||
IPA_PATH="build/export/App.ipa"
|
||||
DEST_PATH="$HOME/Dev/zellyy-finance-ios.ipa"
|
||||
|
||||
if [ -f "$IPA_PATH" ]; then
|
||||
echo -e "${GREEN}IPA 파일 생성 성공!${NC}"
|
||||
echo -e "IPA 파일 위치: $(pwd)/$IPA_PATH"
|
||||
|
||||
# 홈 디렉토리로 IPA 복사
|
||||
cp "$IPA_PATH" "$DEST_PATH"
|
||||
echo -e "${GREEN}IPA를 홈 디렉토리에 복사했습니다: $DEST_PATH${NC}"
|
||||
|
||||
echo -e "${YELLOW}다음 단계:${NC}"
|
||||
echo "1. App Store Connect에 로그인: https://appstoreconnect.apple.com"
|
||||
echo "2. 앱 > 젤리의 적자탈출 > iOS 앱 > 빌드 섹션으로 이동"
|
||||
echo "3. Transporter 앱을 사용하여 IPA 파일 업로드: $DEST_PATH"
|
||||
echo "4. 검토 과정이 완료될 때까지 기다리기 (보통 몇 시간에서 24시간 소요)"
|
||||
echo -e "${RED}릴리즈 IPA 파일 생성 실패. 오류를 확인하세요.${NC}"
|
||||
echo -e "${YELLOW}Apple 개발자 계정 정보(팀 ID: $TEAM_ID)가 정확한지, Xcode에서 서명 및 배포 설정이 완료되었는지 확인하세요.${NC}"
|
||||
echo -e "${GREEN}Xcode 빌드는 완료되었을 수 있습니다. Xcode에서 직접 확인하거나 실행해 보세요.${NC}"
|
||||
else
|
||||
echo -e "${RED}IPA 파일 생성 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
# 버전 정보 읽기 (스크립트 상단에서 이미 읽었지만 명확성을 위해 다시 확인)
|
||||
CURRENT_VERSION_NAME=$(grep "VERSION_NAME" "$PROPERTIES_FILE" | cut -d'=' -f2)
|
||||
CURRENT_BUILD_NUMBER=$(grep "BUILD_NUMBER" "$PROPERTIES_FILE" | cut -d'=' -f2)
|
||||
|
||||
# IPA 파일 이름 변경 (기본 이름은 App.ipa 로 가정)
|
||||
DEFAULT_IPA_NAME="App.ipa"
|
||||
TARGET_IPA_NAME="App-v${CURRENT_VERSION_NAME}-b${CURRENT_BUILD_NUMBER}.ipa"
|
||||
|
||||
if [ -f "$RELEASE_DIR/$DEFAULT_IPA_NAME" ]; then
|
||||
mv "$RELEASE_DIR/$DEFAULT_IPA_NAME" "$RELEASE_DIR/$TARGET_IPA_NAME"
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}릴리즈 IPA 파일 생성 완료:${NC} ${BOLD}${RELEASE_DIR}/${TARGET_IPA_NAME}${NC}"
|
||||
else
|
||||
echo -e "${RED}IPA 파일 이름 변경 실패: ${RELEASE_DIR}/${DEFAULT_IPA_NAME} -> ${TARGET_IPA_NAME}${NC}"
|
||||
echo -e "${YELLOW}생성된 IPA 파일은 ${RELEASE_DIR}/${DEFAULT_IPA_NAME} 에 있습니다.${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}예상된 IPA 파일(${DEFAULT_IPA_NAME})을 찾을 수 없습니다. Export 과정을 확인하세요.${NC}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}개발자 등록이 필요하여 아카이브 생성 단계를 건너뜁니다.${NC}"
|
||||
echo -e "${YELLOW}시뮬레이터에서 앱을 테스트하거나 Apple 개발자 계정을 등록하세요.${NC}"
|
||||
echo -e "${YELLOW}개발자 등록이 필요하여 아카이브 생성 단계를 건너<0xEB><0x9B><0x81>니다.${NC}"
|
||||
echo -e "${YELLOW}앱을 App Store에 제출하거나 Ad Hoc 배포를 하려면 유료 Apple 개발자 계정이 필요합니다.${NC}"
|
||||
echo -e "${YELLOW}개발 테스트는 Xcode에서 '${WORKSPACE_DIR}/ios/App/App.xcworkspace' 파일을 열고 직접 진행할 수 있습니다.${NC}"
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
62
refresh-web.sh
Executable file
62
refresh-web.sh
Executable file
@@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 색상 정의
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${YELLOW}웹앱 새로고침 스크립트${NC}"
|
||||
echo -e "${YELLOW}====================${NC}"
|
||||
|
||||
# 1. 캐시 완전 삭제
|
||||
echo -e "${YELLOW}1. 캐시 완전 삭제 중...${NC}"
|
||||
rm -rf node_modules/.vite
|
||||
rm -rf node_modules/.cache
|
||||
rm -rf android/app/build
|
||||
rm -rf android/.gradle
|
||||
rm -rf dist
|
||||
rm -rf android/app/src/main/assets/public
|
||||
echo -e "${GREEN}캐시가 삭제되었습니다.${NC}"
|
||||
|
||||
# 2. 웹 앱 다시 빌드
|
||||
echo -e "${YELLOW}2. 웹 앱 다시 빌드 중...${NC}"
|
||||
npm run build
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}웹 앱 빌드 실패${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}웹 앱 빌드 완료${NC}"
|
||||
|
||||
# 3. Capacitor 강제 동기화
|
||||
echo -e "${YELLOW}3. Capacitor 강제 동기화 중...${NC}"
|
||||
npx cap sync android --inline
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}Capacitor 동기화 실패${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}Capacitor 동기화 완료${NC}"
|
||||
|
||||
# 4. 빌드된 웹앱 확인
|
||||
echo -e "${YELLOW}4. 빌드된 웹앱 확인${NC}"
|
||||
if [ -d "dist" ]; then
|
||||
echo -e "${GREEN}dist 디렉토리가 존재합니다.${NC}"
|
||||
ls -la dist
|
||||
else
|
||||
echo -e "${RED}dist 디렉토리가 없습니다!${NC}"
|
||||
fi
|
||||
|
||||
# 5. 안드로이드 assets 확인
|
||||
echo -e "${YELLOW}5. 안드로이드 assets 확인${NC}"
|
||||
ASSETS_DIR="android/app/src/main/assets/public"
|
||||
if [ -d "$ASSETS_DIR" ]; then
|
||||
echo -e "${GREEN}안드로이드 assets 디렉토리가 존재합니다.${NC}"
|
||||
ls -la "$ASSETS_DIR"
|
||||
else
|
||||
echo -e "${RED}안드로이드 assets 디렉토리가 없습니다!${NC}"
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}웹앱 새로고침 완료!${NC}"
|
||||
echo -e "${YELLOW}이제 build-apk.sh 스크립트를 실행하여 앱을 빌드하세요.${NC}"
|
||||
242
release/zellyy-version-fix.patch
Normal file
242
release/zellyy-version-fix.patch
Normal file
@@ -0,0 +1,242 @@
|
||||
diff --git a/android/app/build.gradle b/android/app/build.gradle
|
||||
index 20cd809..fe19eb4 100644
|
||||
--- a/android/app/build.gradle
|
||||
+++ b/android/app/build.gradle
|
||||
@@ -1,5 +1,19 @@
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
+// 버전 정보를 properties 파일에서 동적으로 로드
|
||||
+def versionPropsFile = rootProject.file('version.properties')
|
||||
+def versionProps = new Properties()
|
||||
+if (versionPropsFile.exists()) {
|
||||
+ versionPropsFile.withInputStream { stream -> versionProps.load(stream) }
|
||||
+}
|
||||
+
|
||||
+def versionName = versionProps['versionName'] ?: "1.1.1.2"
|
||||
+def versionCode = (versionProps['versionCode'] ?: "6").toInteger()
|
||||
+def buildNumber = (versionProps['buildNumber'] ?: "6").toInteger()
|
||||
+
|
||||
+// 버전 정보 로깅
|
||||
+println "버전 정보 로드: versionName=${versionName}, versionCode=${versionCode}, buildNumber=${buildNumber}"
|
||||
+
|
||||
// 버전 정보를 직접 설정
|
||||
android {
|
||||
namespace "com.lovable.zellyfinance"
|
||||
@@ -8,10 +22,10 @@ android {
|
||||
applicationId "com.lovable.zellyfinance"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
- versionCode 6
|
||||
- versionName "1.1.1.2"
|
||||
+ versionCode versionCode
|
||||
+ versionName "${versionName}"
|
||||
// 빌드 번호 추가 - BuildConfig 필드로 정의
|
||||
- buildConfigField "int", "BUILD_NUMBER", "6"
|
||||
+ buildConfigField "int", "BUILD_NUMBER", "${buildNumber}"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
aaptOptions {
|
||||
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
|
||||
diff --git a/android/app/src/main/java/com/lovable/zellyfinance/BuildInfoPlugin.java b/android/app/src/main/java/com/lovable/zellyfinance/BuildInfoPlugin.java
|
||||
index 3520f5d..0957128 100644
|
||||
--- a/android/app/src/main/java/com/lovable/zellyfinance/BuildInfoPlugin.java
|
||||
+++ b/android/app/src/main/java/com/lovable/zellyfinance/BuildInfoPlugin.java
|
||||
@@ -1,4 +1,3 @@
|
||||
-
|
||||
package com.lovable.zellyfinance;
|
||||
|
||||
import android.os.Build;
|
||||
@@ -27,16 +26,27 @@ public class BuildInfoPlugin extends Plugin {
|
||||
|
||||
JSObject ret = new JSObject();
|
||||
|
||||
- // 빌드 정보 수집
|
||||
+ // BuildConfig에서 동적으로 버전 정보 가져오기
|
||||
String versionName = BuildConfig.VERSION_NAME;
|
||||
int versionCode = BuildConfig.VERSION_CODE;
|
||||
- int buildNumber = BuildConfig.BUILD_NUMBER;
|
||||
- String packageName = getContext().getPackageName();
|
||||
+ int buildNumber;
|
||||
+
|
||||
+ // 빌드 넘버는 커스텀 필드이므로 try-catch로 확인
|
||||
+ try {
|
||||
+ buildNumber = BuildConfig.BUILD_NUMBER;
|
||||
+ Log.d(TAG, "BuildConfig.BUILD_NUMBER: " + buildNumber);
|
||||
+ } catch (Exception e) {
|
||||
+ Log.e(TAG, "BUILD_NUMBER 필드 접근 오류, 기본값 사용", e);
|
||||
+ buildNumber = versionCode; // 빌드 넘버가 없으면 버전 코드와 동일하게 설정
|
||||
+ }
|
||||
|
||||
// 디버깅을 위한 로그 출력
|
||||
+ Log.d(TAG, "BuildConfig 클래스: " + BuildConfig.class.getName());
|
||||
Log.d(TAG, "버전명: " + versionName);
|
||||
Log.d(TAG, "버전 코드: " + versionCode);
|
||||
Log.d(TAG, "빌드 번호: " + buildNumber);
|
||||
+
|
||||
+ String packageName = getContext().getPackageName();
|
||||
Log.d(TAG, "패키지명: " + packageName);
|
||||
|
||||
// 결과 객체에 값 설정
|
||||
@@ -49,19 +59,17 @@ public class BuildInfoPlugin extends Plugin {
|
||||
ret.put("platform", "android");
|
||||
|
||||
// 현재 날짜를 디버깅 정보로 추가
|
||||
- ret.put("buildDate", new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date()));
|
||||
+ ret.put("timestamp", System.currentTimeMillis());
|
||||
|
||||
- Log.d(TAG, "빌드 정보 요청 성공 처리: " + ret.toString());
|
||||
+ // 성공 응답
|
||||
call.resolve(ret);
|
||||
} catch (Exception e) {
|
||||
- Log.e(TAG, "빌드 정보 가져오기 실패", e);
|
||||
- JSObject errorResult = new JSObject();
|
||||
- errorResult.put("versionName", "1.0.0");
|
||||
- errorResult.put("versionCode", 1);
|
||||
- errorResult.put("buildNumber", 1);
|
||||
- errorResult.put("error", e.getMessage());
|
||||
- errorResult.put("platform", "android-error");
|
||||
- call.resolve(errorResult); // 에러가 발생해도 앱이 중단되지 않도록 resolve 호출
|
||||
+ // 오류 로깅 강화
|
||||
+ Log.e(TAG, "빌드 정보 가져오기 오류", e);
|
||||
+ JSObject errorObj = new JSObject();
|
||||
+ errorObj.put("message", e.getMessage());
|
||||
+ errorObj.put("stack", Log.getStackTraceString(e));
|
||||
+ call.reject("빌드 정보 가져오기 실패", errorObj);
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/src/utils/platform.ts b/src/utils/platform.ts
|
||||
index c9a89de..1a5af86 100644
|
||||
--- a/src/utils/platform.ts
|
||||
+++ b/src/utils/platform.ts
|
||||
@@ -1,4 +1,3 @@
|
||||
-
|
||||
/**
|
||||
* 플랫폼 관련 유틸리티 함수들
|
||||
*/
|
||||
@@ -30,6 +29,15 @@ export const isNativePlatform = (): boolean => {
|
||||
* 앱 버전 정보 가져오기
|
||||
*/
|
||||
export const getAppVersionInfo = async () => {
|
||||
+ // 기본값 설정 - 플러그인 실패 시 사용
|
||||
+ const defaultVersionInfo = {
|
||||
+ versionName: '1.0.0',
|
||||
+ versionCode: 1,
|
||||
+ buildNumber: 1,
|
||||
+ platform: Capacitor.getPlatform(),
|
||||
+ defaultValues: true
|
||||
+ };
|
||||
+
|
||||
try {
|
||||
// 디버깅을 위한 플랫폼 체크 로그
|
||||
console.log('현재 플랫폼:', Capacitor.getPlatform());
|
||||
@@ -39,65 +47,63 @@ export const getAppVersionInfo = async () => {
|
||||
if (Capacitor.isPluginAvailable('BuildInfo')) {
|
||||
try {
|
||||
// 플러그인 호출 시도
|
||||
- // @ts-ignore - 플러그인이 런타임에 등록되므로 타입 체크를 무시
|
||||
+ // @ts-expect-error - 플러그인이 런타임에 등록되므로 타입 체크를 무시
|
||||
const buildInfo = await Capacitor.Plugins.BuildInfo.getBuildInfo();
|
||||
|
||||
- console.log('네이티브에서 받은 빌드 정보:', buildInfo);
|
||||
+ console.log('네이티브에서 받은 빌드 정보(raw):', JSON.stringify(buildInfo));
|
||||
|
||||
- // 받은 정보가 유효한지 확인
|
||||
- if (buildInfo && typeof buildInfo === 'object') {
|
||||
- // iOS에서는 buildNumber가 문자열로 올 수 있으므로 숫자로 변환
|
||||
- let buildNumberValue = buildInfo.buildNumber;
|
||||
- if (typeof buildNumberValue === 'string') {
|
||||
- buildNumberValue = parseInt(buildNumberValue, 10);
|
||||
- }
|
||||
-
|
||||
- return {
|
||||
- versionName: buildInfo.versionName || '1.0.1',
|
||||
- buildNumber: !isNaN(buildNumberValue) ? buildNumberValue : 2,
|
||||
- versionCode: buildInfo.versionCode,
|
||||
- platform: Capacitor.getPlatform(),
|
||||
+ // 수신한 데이터가 null 또는 undefined인 경우 체크
|
||||
+ if (!buildInfo) {
|
||||
+ console.warn('네이티브 빌드 정보가 없음');
|
||||
+ throw new Error('빌드 정보를 받지 못했습니다');
|
||||
+ }
|
||||
+
|
||||
+ // 받은 정보가 유효한지 확인 및 타입 변환
|
||||
+ if (typeof buildInfo === 'object') {
|
||||
+ // 타입 변환 및 기본값 설정 - 명시적으로 문자열/숫자 타입 변환
|
||||
+ const result = {
|
||||
+ versionName: typeof buildInfo.versionName === 'string' ? buildInfo.versionName :
|
||||
+ (buildInfo.versionName ? String(buildInfo.versionName) : defaultVersionInfo.versionName),
|
||||
+ versionCode: typeof buildInfo.versionCode === 'number' ? buildInfo.versionCode :
|
||||
+ (buildInfo.versionCode ? Number(buildInfo.versionCode) : defaultVersionInfo.versionCode),
|
||||
+ buildNumber: typeof buildInfo.buildNumber === 'number' ? buildInfo.buildNumber :
|
||||
+ (buildInfo.buildNumber ? Number(buildInfo.buildNumber) : defaultVersionInfo.buildNumber),
|
||||
+ platform: typeof buildInfo.platform === 'string' ? buildInfo.platform :
|
||||
+ (buildInfo.platform ? String(buildInfo.platform) : defaultVersionInfo.platform),
|
||||
+ timestamp: buildInfo.timestamp || Date.now(),
|
||||
pluginResponse: JSON.stringify(buildInfo)
|
||||
};
|
||||
+
|
||||
+ // 값이 기본값인지 확인 (BuildConfig에서 기본값을 반환하는 경우)
|
||||
+ if (result.versionName === '1.0' && result.versionCode === 1 && isAndroidPlatform()) {
|
||||
+ console.warn('플러그인이 기본값을 반환함, 빌드 설정을 확인해야 함');
|
||||
+ }
|
||||
+
|
||||
+ console.log('변환된 빌드 정보:', result);
|
||||
+ return result;
|
||||
}
|
||||
+ throw new Error('유효하지 않은 빌드 정보 응답');
|
||||
} catch (pluginError) {
|
||||
console.error('BuildInfo 플러그인 호출 오류:', pluginError);
|
||||
+ // 오류 발생시 기본값 사용
|
||||
+ return {
|
||||
+ ...defaultVersionInfo,
|
||||
+ error: true,
|
||||
+ errorMessage: String(pluginError)
|
||||
+ };
|
||||
}
|
||||
+ } else {
|
||||
+ console.warn('BuildInfo 플러그인을 사용할 수 없음');
|
||||
+ // 플러그인이 없는 경우 기본값 반환
|
||||
+ return defaultVersionInfo;
|
||||
}
|
||||
-
|
||||
- // 안드로이드인 경우 기본값을 하드코딩된 값으로 설정
|
||||
- if (isAndroidPlatform()) {
|
||||
- // 안드로이드 앱 빌드 정보를 하드코딩된 값으로 제공
|
||||
- // 실제 앱에서는 빌드 과정에서 이 값들이 업데이트되어야 함
|
||||
- return {
|
||||
- versionName: '1.0.1',
|
||||
- buildNumber: 3, // 업데이트된 빌드 번호
|
||||
- versionCode: 1,
|
||||
- platform: 'android'
|
||||
- };
|
||||
- }
|
||||
-
|
||||
- // iOS인 경우 기본값
|
||||
- if (isIOSPlatform()) {
|
||||
- return {
|
||||
- versionName: '1.0.1',
|
||||
- buildNumber: 3, // 업데이트된 빌드 번호
|
||||
- platform: 'ios'
|
||||
- };
|
||||
- }
|
||||
-
|
||||
- // 플러그인이 없는 경우 기본값 반환
|
||||
- return {
|
||||
- versionName: '1.0.1',
|
||||
- buildNumber: 3, // 업데이트된 빌드 번호
|
||||
- platform: Capacitor.getPlatform()
|
||||
- };
|
||||
} catch (error) {
|
||||
- console.error('앱 버전 정보를 가져오는 중 오류 발생:', error);
|
||||
+ console.error('앱 버전 정보 가져오기 오류:', error);
|
||||
+ // 오류 발생 시에도 앱 실행은 계속되도록 기본값 반환
|
||||
return {
|
||||
- versionName: '1.0.1',
|
||||
- buildNumber: 3, // 업데이트된 빌드 번호
|
||||
- error: true
|
||||
+ ...defaultVersionInfo,
|
||||
+ error: true,
|
||||
+ errorMessage: String(error)
|
||||
};
|
||||
}
|
||||
};
|
||||
@@ -31,8 +31,8 @@ const AppVersionInfo: React.FC<AppVersionInfoProps> = ({
|
||||
// 하드코딩된 버전 정보 - 빌드 스크립트에서 설정한 값과 일치시켜야 함
|
||||
const hardcodedVersionInfo: VersionInfo = {
|
||||
versionName: '1.1.8',
|
||||
buildNumber: 8,
|
||||
versionCode: 8,
|
||||
buildNumber: 9,
|
||||
versionCode: 9,
|
||||
platform: Capacitor.getPlatform(),
|
||||
defaultValuesUsed: false
|
||||
};
|
||||
|
||||
5
version.properties
Normal file
5
version.properties
Normal file
@@ -0,0 +1,5 @@
|
||||
# Zellyy Finance 앱 버전 정보
|
||||
# 마지막 업데이트: 2025-04-05 19:45:54
|
||||
VERSION_CODE=9
|
||||
VERSION_NAME=1.1.8
|
||||
BUILD_NUMBER=9
|
||||
Reference in New Issue
Block a user