QA / release모드 변경

2023. 5. 3. 16:58개발/최적화

원인

  • firebase crashlytics에서 qa 버전, release 버전이 혼용되어 사용중임…
  • 보기 불편..
  • qa만 따로 모아서 보고싶음

 

 

해결 방안

  1. firebase 콘솔에서 앱 추가해줌
  2. 패키지명 설정 (나중에 빌드시에 이걸로 되는거 감안해서 크게 다르지 않은걸로 설정)
  3. service-json받음 -> 나는 원래 파일이 .app내에 있어서 거기 위치시켜줌
  4. .env 업데이트 (패키지명 변경으로 앱 아이디도 변경됨)
RELEASE_APP_ID = "릴리즈앱의 아이디(in fb project)"
QA_APP_ID = "QA앱의 아이디(in fb project)"

FIREBASE_TOKEN = "FB토큰"

GOOGLE_DRIVE_FOLDER_ID = "업로드할 구글 드라이브 폴더의 id"

SIGNING_KEY_ALIAS = "KEY_ALIAS"
SIGNING_KEY_PASSWORD = "KEY_PASSWORD"

SIGNING_STORE_PASSWORD = "STORE_PASSWORD"
SIGNING_STORE_FILE_PATH = "D:/파일경로"

WEBHOOK_URL = "슬랙 알림용 webhook url"

 

 

5. fastfile 업데이트

# 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 "Lane for distribution"
    lane :qa do
        gradle(task: 'clean')
        gradle(
          task: "assemble",
          build_type: "qa",
 	  properties: {
         	"android.injected.signing.store.file" => ENV['SIGNING_STORE_FILE_PATH'],  
         	"android.injected.signing.store.password" => ENV['SIGNING_STORE_PASSWORD'],
         	"android.injected.signing.key.alias" => ENV['SIGNING_KEY_ALIAS'],
         	"android.injected.signing.key.password" => ENV['SIGNING_KEY_PASSWORD'],
       		}
        )
        firebase_app_distribution(
            app:  ENV['APP_ID_QA'],
       	    testers: "테스터메일",
            firebase_cli_token:  ENV['FIREBASE_TOKEN'],
            release_notes: "- ver.4_QA",
       	    debug: true,
	    )
        beta()
      send_slack_message(msg: "🚀 Successfully distributed a new beta build ✨")
     end
    lane :send_slack_message do |options|
    slack(
      message: options[:msg],
      slack_url: ENV['WEBHOOK_URL'],
    )
 end

desc "release"
 lane :release do
        gradle(task: 'clean')
        gradle(
          task: "assemble",
          build_type: "release",
 	  properties: {
         	"android.injected.signing.store.file" => ENV['SIGNING_STORE_FILE_PATH'],
         	"android.injected.signing.store.password" => ENV['SIGNING_STORE_PASSWORD'],
         	"android.injected.signing.key.alias" => ENV['SIGNING_KEY_ALIAS'],
         	"android.injected.signing.key.password" => ENV['SIGNING_KEY_PASSWORD'],
       		}
        )
      send_slack_message(msg: "🚀 Successfully made a new release version ✨")
     end

desc "Upload file to google drive"
private_lane :upload_drive do |options|   
  file_path = lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]

	  upload_to_google_drive(
	  drive_keyfile: './드라이브 키파일.json',
	  service_account: true,
	  folder_id: ENV['GOOGLE_DRIVE_FOLDER_ID'],
	  upload_files: [''+file_path+''])
	end

lane :beta do
  upload_drive()
    #used to get the url of the uploaded file
    file_upload_path=lane_context[SharedValues::GDRIVE_UPLOADED_FILE_URLS][0]
    sh "echo Link to apk :" + file_upload_path
    # sh "your_script.sh"
    # You can also use other beta testing services here
	end
end

 

→ 보면 알겠지만 qa는 app tester배포, 드라이브 업로드, 슬랙 알림 세 개 같이 함

→ release모드는 release파일 생성, 슬랙 알림만 ( 기획팀에서 qa시에 준 파일로 그냥 스마트탭에 배포하는 경우가 있음 )

 

 

6. gradle file build variation 설정

buildTypes {
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }

        release {
            debuggable false
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }

        qa {
            applicationIdSuffix ".qa"
            debuggable false
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }