React Native codepush

슈크림·2023년 3월 26일
2
post-thumbnail

목표는 Staging과 Production을 설정 하는 것

설정 시작!

1. 우선 공식 문서에 나와있는데로 설정

2. 해당 프로젝트에서 설정해주어야 할 것이 있다.

설정을 끝냈으면 android/app 경로로 앱 서명키를 생성한다.

release모드와 staging모두 같은 keystore를 사용한다. 브랜치마다 따로 생성할 필요 없음

android/app에 밑의 command를 입력한다.

keytool -genkey -v -keystore <내가 원하는 이름>.keystore -alias <내가 원하는 이름> -keyalg RSA -keysize 2048 -validity 10000

android/gradle.properties에 추가

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****

문제는 build gradle설정이 어려웠음

(참고로 buldtype에 CodePushDeploymentKey를 적으면 string.xml에 안써도됨!)


signingConfigs {
        debug {
            storeFile file('debug.keystore')
            storePassword 'android'
            keyAlias 'androiddebugkey'
            keyPassword 'android'
        }

   ++        release {
            if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
                storeFile file(MYAPP_UPLOAD_STORE_FILE)
                storePassword MYAPP_UPLOAD_STORE_PASSWORD
                keyAlias MYAPP_UPLOAD_KEY_ALIAS
                keyPassword MYAPP_UPLOAD_KEY_PASSWORD
            }
        }
    }

buildTypes {
        debug {
            signingConfig signingConfigs.debug
// staging 키로 이 코드를 넣어주지 않으면 개발할때 빌드가 안됨
            resValue "string", "CodePushDeploymentKey", "rxQKsUZ1ArWksRXj6NsAe6MG-lAlSDdg_1NtB"
        }
   ++   release {
            // Caution! In production, you need to generate your own keystore file.
            // see https://reactnative.dev/docs/signed-apk-android.
            signingConfig signingConfigs.release
            minifyEnabled enableProguardInReleaseBuilds
            resValue "string", "CodePushDeploymentKey", "kQCmZujLyVa7VhKAxUv_MtwOyw38Kc4X5QXK5"
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        }
 ++  releaseStaging {
          initWith release
      matchingFallbacks = ['release']
       signingConfig signingConfigs.release
            minifyEnabled enableProguardInReleaseBuilds
            resValue "string", "CodePushDeploymentKey", "rxQKsUZ1ArWksRXj6NsAe6MG-lAlSDdg_1NtB"
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
   }
    }

3. staging, release, apk파일을 만들어서 테스트 하기

주의해야 할 점은 code push는 개발모드에서 작동하지 않는다. 꼭 apk파일을 추출한 후 테스트해봐야 한다.

staging, release 각각 apk를 만들려면

/android 경로에 밑의 커맨드를 입력.

만약 unsigned apk가 나오면 잘못된거임!!! 꼭 확인!!!

//staging
gradlew assembleReleaseStaging

// release
gradlew assembleRelease

추출한 apk를 실행하려면

/// release모드에서는
react-native run-android --variant=release 실행 
/// staging에서는
react-native run-android --variant=staging

staging은 기기에 설치가 안돼서 직접 apk를 드라이브에 옮긴다음 다운받아서 설치했음,

코드푸쉬 버전 업그레이드 문제

코드푸쉬를 사용하다 보면 메이저 혹은 마이너 업그레이드를 시켜서 플레이스토어에 버전을 업그레이드 하여 출시할 때가 있다. 이때는 업그레이드 된 버전의 프로덕션 어플에 직전 코드푸쉬가 영향을 주면 안된다. 이때 버전에 영향을 안 미치고 어떻게 출시하는지 알아보자.

(build.gradle)
"versionName": "1.0.1",
(package.json)
"codepush:android": "appcenter codepush release-react -a myapp -d Production --sourcemap-output --output-dir ./build -m -t 1.0",

버전 규칙

1. 코드푸쉬로 수정할 수 있는 부분은 소수점 세번째 자리로 올리기

"versionName": "1.0.1",

2. 두 번째 자리를 올리면 플레이스토어에 배포해야함.

"versionName": "1.1.0"

3. 첫 번째 자리수는 앱 내에서 엄청난 변화가 생겼을 때

"versionName": "2.0.0",

versionName 버전과 코드푸쉬 타겟버전은 두번째 자리까지 매치됨. 만약 version3.5.0 이고 build -m -t 3.4",이면 영향을 미치지 않음. 첫번째 자리와 두번째 자리까지 맞아야 영향을 미침

"versionName": "3.5.0",

build -m -t "3.5",

즉!

build.gradle에 version name과 코드푸쉬 타켓 버전(t n.n)에서 첫번째 두번째 자릿수까지 맞아야 코드푸쉬가 적용된다.

만약 플레이스토어에 배포할 일이 있고 코드푸쉬에 영향을 안받으려면 version name을 바꾸고 플레이스토어에 올려야함. 그 후 변경사항이 있으면 코드푸쉬 타겟버전을 바꿔서 올려야함. 만약 안 바꾸면 그 version name이 낮은 앱과 코드푸쉬가 충돌이 날 수 있기 때문에 유의해야함.

profile
프론트엔드 개발자입니다.

0개의 댓글