From ce0a916b40b07f39455152bc566b239299d706a7 Mon Sep 17 00:00:00 2001 From: LEE SEOK GYU <54509842+likppi10@users.noreply.github.com> Date: Sat, 26 Aug 2023 16:58:16 +0900 Subject: [PATCH] cd setting (#89) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fastlane 추가 android-cd 추가 google-sevice.json 교체 gradle에 task(릴리즈 aab 생성) 추가 * version up to v1.0.1-alpha01 versioncode 3 * version up to v1.0.2 변경사항이 존재할 유효한 버전이므로 alpha 삭제 * version up to v1.0.2 release-note 작성 * cd 파일 수정 --- .github/workflows/android-cd.yml | 73 ++++++ Gemfile | 6 + Gemfile.lock | 223 ++++++++++++++++++ app/google-services.json | 37 +++ .../src/main/kotlin/internal/constants.kt | 4 +- build.gradle.kts | 6 + fastlane/Appfile | 2 + fastlane/Fastfile | 72 ++++++ fastlane/GoogleCloudPlatform.json | 13 + fastlane/Pluginfile | 5 + fastlane/README.md | 56 +++++ fastlane/release-notes.txt | 9 + fastlane/report.xml | 23 ++ 13 files changed, 527 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/android-cd.yml create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 fastlane/Appfile create mode 100644 fastlane/Fastfile create mode 100644 fastlane/GoogleCloudPlatform.json create mode 100644 fastlane/Pluginfile create mode 100644 fastlane/README.md create mode 100644 fastlane/release-notes.txt create mode 100644 fastlane/report.xml diff --git a/.github/workflows/android-cd.yml b/.github/workflows/android-cd.yml new file mode 100644 index 00000000..396ef4a0 --- /dev/null +++ b/.github/workflows/android-cd.yml @@ -0,0 +1,73 @@ +name: Android CD + +env: + GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx4g -Dorg.gradle.daemon=false" + GRADLE_BUILD_ACTION_CACHE_DEBUG_ENABLED: true + +on: + push: + branches: [ main ] + +jobs: + cd-build: + runs-on: macos-latest + + steps: + - uses: actions/checkout@v3 + + - name: Setup JDK 17 + uses: actions/setup-java@v3 + with: + distribution: zulu + java-version: 17 + + - name: Setup Android SDK + uses: android-actions/setup-android@v2 + + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + with: + gradle-home-cache-cleanup: true + + - name: Generate secrets.properties + run: | + echo "SERVER_BASE_URL=${{ secrets.SERVER_BASE_URL }}" >> secrets.properties + + # 아래 cd 부분에 추가하고 싶지만, jks 파일을 디코딩 해줘야 아래 run 빌드가 잘 작동할 것이라 생각해서 여기에 추가함 + - name: Decode Keystore + id: decode_keystore + uses: timheuer/base64-to-file@v1 + with: + fileName: '/app/bandalart.jks' + encodedString: ${{secrets.APP_RELEASE_KEY_STORE_BASE_64}} + + - name: Generate keystore.properties + run: | + echo "STORE_FILE=${{ secrets.STORE_FILE }}" >> keystore.properties + echo "STORE_PASSWORD=${{ secrets.STORE_PASSWORD }}" >> keystore.properties + echo "KEY_ALIAS=${{ secrets.KEY_ALIAS }}" >> keystore.properties + echo "KEY_PASSWORD=${{ secrets.KEY_PASSWORD }}" >> keystore.properties + + - name: Code style checks + run: ./gradlew ktlintCheck detekt + + - name: Run build + run: ./gradlew buildDebug --stacktrace + + # 이 위까지는 만일 핫픽스로 급한 경우에 바로 main에 push 할 경우가 생길 수 있으므로 ci 보존 + + # Fastlane 위한 Ruby Setting + - uses: ruby/setup-ruby@v1 + with: + ruby-version: 2.7.2 + bundler-cache: true + + # Fastlane Setting + - name: Set Up fastlane And Publish Google Play + uses: maierj/fastlane-action@v2.2.0 + with: + lane: 'productionDeploy' + env: + SIGNING_KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + SIGNING_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + SIGNING_STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }} diff --git a/Gemfile b/Gemfile new file mode 100644 index 00000000..cdd3a6b3 --- /dev/null +++ b/Gemfile @@ -0,0 +1,6 @@ +source "https://rubygems.org" + +gem "fastlane" + +plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') +eval_gemfile(plugins_path) if File.exist?(plugins_path) diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 00000000..7a155cab --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,223 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.6) + rexml + addressable (2.8.5) + public_suffix (>= 2.0.2, < 6.0) + artifactory (3.0.15) + atomos (0.1.3) + aws-eventstream (1.2.0) + aws-partitions (1.810.0) + aws-sdk-core (3.181.0) + aws-eventstream (~> 1, >= 1.0.2) + aws-partitions (~> 1, >= 1.651.0) + aws-sigv4 (~> 1.5) + jmespath (~> 1, >= 1.6.1) + aws-sdk-kms (1.71.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3 (1.133.0) + aws-sdk-core (~> 3, >= 3.181.0) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.6) + aws-sigv4 (1.6.0) + aws-eventstream (~> 1, >= 1.0.2) + babosa (1.0.4) + claide (1.1.0) + colored (1.2) + colored2 (3.1.2) + commander (4.6.0) + highline (~> 2.0.0) + declarative (0.0.20) + digest-crc (0.6.5) + rake (>= 12.0.0, < 14.0.0) + domain_name (0.5.20190701) + unf (>= 0.0.5, < 1.0.0) + dotenv (2.8.1) + emoji_regex (3.2.3) + excon (0.102.0) + faraday (1.10.3) + faraday-em_http (~> 1.0) + faraday-em_synchrony (~> 1.0) + faraday-excon (~> 1.1) + faraday-httpclient (~> 1.0) + faraday-multipart (~> 1.0) + faraday-net_http (~> 1.0) + faraday-net_http_persistent (~> 1.0) + faraday-patron (~> 1.0) + faraday-rack (~> 1.0) + faraday-retry (~> 1.0) + ruby2_keywords (>= 0.0.4) + faraday-cookie_jar (0.0.7) + faraday (>= 0.8.0) + http-cookie (~> 1.0.0) + faraday-em_http (1.0.0) + faraday-em_synchrony (1.0.0) + faraday-excon (1.1.0) + faraday-httpclient (1.0.1) + faraday-multipart (1.0.4) + multipart-post (~> 2) + faraday-net_http (1.0.1) + faraday-net_http_persistent (1.2.0) + faraday-patron (1.0.0) + faraday-rack (1.0.0) + faraday-retry (1.0.3) + faraday_middleware (1.2.0) + faraday (~> 1.0) + fastimage (2.2.7) + fastlane (2.214.0) + CFPropertyList (>= 2.3, < 4.0.0) + addressable (>= 2.8, < 3.0.0) + artifactory (~> 3.0) + aws-sdk-s3 (~> 1.0) + babosa (>= 1.0.3, < 2.0.0) + bundler (>= 1.12.0, < 3.0.0) + colored + commander (~> 4.6) + dotenv (>= 2.1.1, < 3.0.0) + emoji_regex (>= 0.1, < 4.0) + excon (>= 0.71.0, < 1.0.0) + faraday (~> 1.0) + faraday-cookie_jar (~> 0.0.6) + faraday_middleware (~> 1.0) + fastimage (>= 2.1.0, < 3.0.0) + gh_inspector (>= 1.1.2, < 2.0.0) + google-apis-androidpublisher_v3 (~> 0.3) + google-apis-playcustomapp_v1 (~> 0.1) + google-cloud-storage (~> 1.31) + highline (~> 2.0) + json (< 3.0.0) + jwt (>= 2.1.0, < 3) + mini_magick (>= 4.9.4, < 5.0.0) + multipart-post (>= 2.0.0, < 3.0.0) + naturally (~> 2.2) + optparse (~> 0.1.1) + plist (>= 3.1.0, < 4.0.0) + rubyzip (>= 2.0.0, < 3.0.0) + security (= 0.1.3) + simctl (~> 1.6.3) + terminal-notifier (>= 2.0.0, < 3.0.0) + terminal-table (>= 1.4.5, < 2.0.0) + tty-screen (>= 0.6.3, < 1.0.0) + tty-spinner (>= 0.8.0, < 1.0.0) + word_wrap (~> 1.0.0) + xcodeproj (>= 1.13.0, < 2.0.0) + xcpretty (~> 0.3.0) + xcpretty-travis-formatter (>= 0.0.3) + fastlane-plugin-firebase_app_distribution (0.7.2) + google-apis-firebaseappdistribution_v1 (~> 0.3.0) + gh_inspector (1.1.3) + google-apis-androidpublisher_v3 (0.48.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-core (0.11.1) + addressable (~> 2.5, >= 2.5.1) + googleauth (>= 0.16.2, < 2.a) + httpclient (>= 2.8.1, < 3.a) + mini_mime (~> 1.0) + representable (~> 3.0) + retriable (>= 2.0, < 4.a) + rexml + webrick + google-apis-firebaseappdistribution_v1 (0.3.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-iamcredentials_v1 (0.17.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-playcustomapp_v1 (0.13.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-storage_v1 (0.19.0) + google-apis-core (>= 0.9.0, < 2.a) + google-cloud-core (1.6.0) + google-cloud-env (~> 1.0) + google-cloud-errors (~> 1.0) + google-cloud-env (1.6.0) + faraday (>= 0.17.3, < 3.0) + google-cloud-errors (1.3.1) + google-cloud-storage (1.44.0) + addressable (~> 2.8) + digest-crc (~> 0.4) + google-apis-iamcredentials_v1 (~> 0.1) + google-apis-storage_v1 (~> 0.19.0) + google-cloud-core (~> 1.6) + googleauth (>= 0.16.2, < 2.a) + mini_mime (~> 1.0) + googleauth (1.7.0) + faraday (>= 0.17.3, < 3.a) + jwt (>= 1.4, < 3.0) + memoist (~> 0.16) + multi_json (~> 1.11) + os (>= 0.9, < 2.0) + signet (>= 0.16, < 2.a) + highline (2.0.3) + http-cookie (1.0.5) + domain_name (~> 0.5) + httpclient (2.8.3) + jmespath (1.6.2) + json (2.6.3) + jwt (2.7.1) + memoist (0.16.2) + mini_magick (4.12.0) + mini_mime (1.1.5) + multi_json (1.15.0) + multipart-post (2.3.0) + nanaimo (0.3.0) + naturally (2.2.1) + optparse (0.1.1) + os (1.1.4) + plist (3.7.0) + public_suffix (5.0.3) + rake (13.0.6) + representable (3.2.0) + declarative (< 0.1.0) + trailblazer-option (>= 0.1.1, < 0.2.0) + uber (< 0.2.0) + retriable (3.1.2) + rexml (3.2.6) + rouge (2.0.7) + ruby2_keywords (0.0.5) + rubyzip (2.3.2) + security (0.1.3) + signet (0.17.0) + addressable (~> 2.8) + faraday (>= 0.17.5, < 3.a) + jwt (>= 1.5, < 3.0) + multi_json (~> 1.10) + simctl (1.6.10) + CFPropertyList + naturally + terminal-notifier (2.0.0) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + trailblazer-option (0.1.2) + tty-cursor (0.7.1) + tty-screen (0.8.1) + tty-spinner (0.9.3) + tty-cursor (~> 0.7) + uber (0.1.0) + unf (0.1.4) + unf_ext + unf_ext (0.0.8.2) + unicode-display_width (1.8.0) + webrick (1.8.1) + word_wrap (1.0.0) + xcodeproj (1.22.0) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.3.0) + rexml (~> 3.2.4) + xcpretty (0.3.0) + rouge (~> 2.0.7) + xcpretty-travis-formatter (1.0.1) + xcpretty (~> 0.2, >= 0.0.7) + +PLATFORMS + arm64-darwin-22 + +DEPENDENCIES + fastlane + fastlane-plugin-firebase_app_distribution + +BUNDLED WITH + 2.4.10 diff --git a/app/google-services.json b/app/google-services.json index 74d6421e..17446899 100644 --- a/app/google-services.json +++ b/app/google-services.json @@ -41,6 +41,43 @@ ] } } + }, + { + "client_info": { + "mobilesdk_app_id": "1:197590766195:android:61e8f68629de40aa179006", + "android_client_info": { + "package_name": "com.nexters.bandalart.android.dev" + } + }, + "oauth_client": [ + { + "client_id": "197590766195-0eviun3t4blk2hutntp17qd6njt2v14u.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.nexters.bandalart.android.dev", + "certificate_hash": "f815bf3587470a6d12ccc191569e579132a87a68" + } + }, + { + "client_id": "197590766195-qikbkeakavvvd0qvucr4j78siktfv647.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyAzAhCCMGscA_wEWQNEi_d-NxiuJSmJg_E" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "197590766195-qikbkeakavvvd0qvucr4j78siktfv647.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } } ], "configuration_version": "1" diff --git a/build-logic/src/main/kotlin/internal/constants.kt b/build-logic/src/main/kotlin/internal/constants.kt index 2209e294..07548e43 100644 --- a/build-logic/src/main/kotlin/internal/constants.kt +++ b/build-logic/src/main/kotlin/internal/constants.kt @@ -4,8 +4,8 @@ internal object ApplicationConstants { const val MinSdk = 24 const val TargetSdk = 34 const val CompileSdk = 34 - const val VersionCode = 2 - const val VersionName = "1.0.1" + const val VersionCode = 3 + const val VersionName = "1.0.2" val JavaVersion = org.gradle.api.JavaVersion.VERSION_17 const val JavaVersionAsInt = 17 } diff --git a/build.gradle.kts b/build.gradle.kts index bf80e18a..723d5161 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -67,3 +67,9 @@ allprojects { tasks.register("cleanAll", type = Delete::class) { allprojects.map(Project::getBuildDir).forEach(::delete) } + +tasks.register("release") { + dependsOn(tasks["clean"]) + dependsOn(tasks["bundleRelease"]) + mustRunAfter(tasks["clean"]) +} diff --git a/fastlane/Appfile b/fastlane/Appfile new file mode 100644 index 00000000..87a065d3 --- /dev/null +++ b/fastlane/Appfile @@ -0,0 +1,2 @@ +json_key_file("/fastlane/GoogleCloudPlatform.json") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one +package_name("com.nexters.bandalart.android.dev") # e.g. com.krausefx.app diff --git a/fastlane/Fastfile b/fastlane/Fastfile new file mode 100644 index 00000000..37edaba9 --- /dev/null +++ b/fastlane/Fastfile @@ -0,0 +1,72 @@ +# This file contains the fastlane.tools configuration +# You can find the documentation at https://docs.fastlane.tools +# +# For a list of all available actions, check out +# +# https://docs.fastlane.tools/actions +# +# For a list of all available plugins, check out +# +# https://docs.fastlane.tools/plugins/available-plugins +# + +# Uncomment the line if you want fastlane to automatically update itself +# update_fastlane + +default_platform(:android) + +platform :android do + desc "Runs all the tests" + lane :test do + gradle(task: "test") + end + + desc "Submit a new Beta Build to Crashlytics Beta" + lane :beta do + gradle(task: "clean assembleRelease") + crashlytics + + # sh "your_script.sh" + # You can also use other beta testing services here + end + + desc "Deploy a new version to the Google Play" + lane :deploy do + gradle(task: "clean assembleRelease") + upload_to_play_store + end + + desc "Lane for distribution" + lane :stagingDeploy do + + gradle(task: "clean assembleDebug") + + firebase_app_distribution( + app: "1:197590766195:android:61e8f68629de40aa179006", + groups: "bandalart-android", + release_notes_file: "fastlane/release-notes.txt", + firebase_cli_token: "1//0eV3oUhnwn9XXCgYIARAAGA4SNwF-L9IruXeQwoAxHUkWvTnm2Jye7iYRU2HMCVDxZ1ZXrH__kmW9_UrWnRke28rDL7FFT3m-Nvg", + debug: false + ) + end + + desc "Deploy a new version to the Google Play (ProductionType)" + lane :productionDeploy do + gradle(task: "release") + + # 특정 폴더에 .aab 파일 찾고 나서 앞에 .. -> . 치환 처리 + filePath = Dir['../app/build/outputs/bundle/release/*.aab'].last + artifactPath = filePath.sub("..",".") + puts artifactPath + + upload_to_play_store( + track: "production", + aab: artifactPath, + skip_upload_metadata: true, + skip_upload_images: true, + skip_upload_screenshots: true, + skip_upload_apk: true, + release_status: "completed" + ) + end +end diff --git a/fastlane/GoogleCloudPlatform.json b/fastlane/GoogleCloudPlatform.json new file mode 100644 index 00000000..58dcf7e1 --- /dev/null +++ b/fastlane/GoogleCloudPlatform.json @@ -0,0 +1,13 @@ +{ + "type": "service_account", + "project_id": "pc-api-6620708183089692188-844", + "private_key_id": "90b78797bf65d387eac576fcaca4671be85f8eee", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCzPQaA25mKgobN\nPjjcSi7HWSfx+5QsflZnRJkd3OlNxrp8PhgdVZ6WHInEhT2yb8JjbxGVl5UQ1ISE\nItqF0hMO2ah65qKQMgDoXzNF6vZdmUUupeokyn7NtIAq/bSUqRlin49LJs5yCWvk\njx5j56RrspzjTHzQR1YSDlq0fDaHcvsc0cZqL5PTnOCcqJnSacEVcOH2JdV5OgZE\nX0HwdXoCG2Qmpo98StXRAqWTUXzxmZP/8uBREO3BsQ4LsNwgKCWfTzA0qg0ey7D4\ni7cQvNaHCt87urYDw5nBKfZNtRBqI17mESn22P4MDjxuOPw5UmUxpeoggtd7Hnqs\nqcUC4odtAgMBAAECggEACrRYURXMY7NL7bILn0xm4sz2T8NgpA+fhWdZZakt3dFC\njez/b7EPWZO2vp/egWufRmT5vd9hrbGjgGi8eEWFkdt57m0bxFTYLQiSfVh9AjYH\nJbQO+ceGLy7agLbKNB6tP3CcFDbrGXBqmynY/Mp2zV/Lct+8jIvWHhnxXNoWP5yK\nu2VB17uCzKkwVy6RXa45rm7ekD4HrJpglWGZbTrRFsVs5TJ/DPIv0ZE6134sgtgV\n2qXhNQbAaZ8AIbe9ntjkKsbF56RCYJgDeFxlq/ZTOvA8zUZHH+eF28S6C/tVElcs\n6hPkLglGt7lxP4PtEBInUMUnhFv4nM5Lx9yIbDtcQQKBgQDe9+FZABnbNNZjZqDR\nYWIiMReoAHXSXGrhVzJABJLa4jI0kIWLPDduMnnESo2Csw72scL1IjIjyTFWR4JG\nIWaO/xeeHqokz67UDHv35EtsZCADb8T2McXUd0Ul5avXQ4A8np9Gd0YPV+eqF6rA\n0jk0ejjAHjYUiUJRe9bNTfO+JQKBgQDNyq3kyAzsBK3Us0oRriVbWYU+uiEKIo/A\n3ufBPu9rnIqhWkG0GUY9pQG5VtOsvJsNGiQnsKORTfU0HzxdUJyAik9Vfh2ZxAiV\nNl8l1n/bVlyNNdjxx1pmwfD94f5tf0/a54GzO7fFsaees+D/nyMsE+FOiZfqRLxV\nyZew4x+tqQKBgQDE2Kz/iSJKr+wyV5HVKJedvh+3d6iNboABr5yyfhc03Qwb8hek\nZCY/yJpOHM+wOusUCr4m8ui3RVGkbX9q8OP9jOJJ+6KU2zHrDZaItOmNqRvGTO/j\ntu+D80R9/7VlV7eoTRYq/PRCaYYiWcCreS190gW2PzXZjZCaJa3vFUoCbQKBgAlh\n8EO6CzzHidVkxz+/HNzpW/XcLp1zrfIxN4fMAsZ5QKjSoKRBcr5kw4tbthLuFnOm\neXeFyi9ZypAxzGLExh3mMG/JbDgShAGplPT4rqOlcFrP1bBQUoLU3NP2dc8wOsfU\nPkmZs2tECkxmDyAYdVYRIfietVps/9k5c70Q3eThAoGAQqdBqxf1uNsZk1X1PSfo\nMbxu5bVzqubaKH5UKkcXHRelkI9OCk5sD339y0yj1TFRIsxDilL54U7bd5mSKJQz\n3osCid4ld0Lk/EgVGccQHe5+J3LFlhaVJh00aVRSTYMvV7NNipBO4Qna7YWXRPdT\ndB1TKFVKT1zV4mlcjA3Ff74=\n-----END PRIVATE KEY-----\n", + "client_email": "bandalart@pc-api-6620708183089692188-844.iam.gserviceaccount.com", + "client_id": "115475687891962717679", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/bandalart%40pc-api-6620708183089692188-844.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" +} diff --git a/fastlane/Pluginfile b/fastlane/Pluginfile new file mode 100644 index 00000000..b18539bc --- /dev/null +++ b/fastlane/Pluginfile @@ -0,0 +1,5 @@ +# Autogenerated by fastlane +# +# Ensure this file is checked in to source control! + +gem 'fastlane-plugin-firebase_app_distribution' diff --git a/fastlane/README.md b/fastlane/README.md new file mode 100644 index 00000000..fe4dfb61 --- /dev/null +++ b/fastlane/README.md @@ -0,0 +1,56 @@ +fastlane documentation +---- + +# Installation + +Make sure you have the latest version of the Xcode command line tools installed: + +```sh +xcode-select --install +``` + +For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane) + +# Available Actions + +## Android + +### android test + +```sh +[bundle exec] fastlane android test +``` + +Runs all the tests + +### android beta + +```sh +[bundle exec] fastlane android beta +``` + +Submit a new Beta Build to Crashlytics Beta + +### android deploy + +```sh +[bundle exec] fastlane android deploy +``` + +Deploy a new version to the Google Play + +### android stagingDeploy + +```sh +[bundle exec] fastlane android stagingDeploy +``` + +Lane for distribution + +---- + +This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run. + +More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools). + +The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools). diff --git a/fastlane/release-notes.txt b/fastlane/release-notes.txt new file mode 100644 index 00000000..c26570dc --- /dev/null +++ b/fastlane/release-notes.txt @@ -0,0 +1,9 @@ +반다라트 v1.0.2 업데이트 노트 + +반다라트는 바쁜 현대인들이 이루고자 하는 목표 계획을 도와주는 부담 없는 만다라트 계획표 서비스입니다. + +● 앱 실행 시 첫 등장하는 스플래시 화면이 더욱 반다라트스러운 예쁜 이미지로 바뀌었어요! + +● 그 외에도 사용자분들을 위해 지속적으로 버그를 수집하고 해결하고 있으니, 리뷰로 피드백을 주시면 적극 반영할게요! + +더 보람차고, 더 알찬 삶을 돕는 서비스가 될 수 있도록 노력할게요! 😄 diff --git a/fastlane/report.xml b/fastlane/report.xml new file mode 100644 index 00000000..012903a2 --- /dev/null +++ b/fastlane/report.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + +