지난 과정에 이어서, 이번엔 '본인 확인, 테스트 버전 앱 번들 빌드'를 등록할 차례입니다.
개발자 본인 확인 인증
앱을 출시하기 전까지 꼭 본인확인을 마쳐야 합니다.
그런데 PASS앱을 통하는 본인확인이 아니라, '주소지 증빙 서류'를 필요로 합니다.
저는 주민등록등본(초본)을 스캔해서 보냈습니다.
주소 형식이 알맞지 않을 경우, 수정된 주소를 추천합니다.
수정한 후 제출하면, 며칠 내로 개발자 인증을 해준다고 합니다.
만약 인증과정에 문제가 생길 경우, 메일로 안내를 해줍니다.
비공개 테스트
플레이스토어는 앱 출시 전에 꼭 '비공개 테스트'를 진행해야 합니다.
알파 테스트 버전을 생성한 후, 앱 번들파일(aab)을 제출해야합니다.
지금부터 이 파일을 만들기 위해 필요한 과정들을 밟아보겠습니다.
앱 이름 지정하기
android/app/src/main/AndroidManifest.xml
android:label에 앱 이름을 적어줍니다.
android/app/build.gradle
사진의 applicationId 부분에 "com.개발자이름.앱이름"을 적어줍니다.
앱 버전 & 앱 권한
pubspec.yaml
버전 이름을 적어줍니다.
android/app/src/main/AndroidManifest.xml
앱이 필요로 하는 권한을 지정합니다.
굿위시는 사진을 불러오기 때문에, 'READ_EXTERNAL_STORAGE' 권한을 가져왔습니다.
앱 키 스토어(keystore) 만들기
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
위 코드를 입력하면, 키스토어를 제작하기 위한 과정을 밟을 수 있습니다.
개발자 정보에 대한 여러 문답이 이뤄지고, 끝나면 keystore 파일이 생성됩니다.
key.jks 파일을 android/app 폴더에 넣습니다.
그리고 key.properties 파일이 없다면 생성한 후
storePassword=키 생성할 때 입력한 암호
keyPassword=키 생성할 때 입력한 암호
keyAlias=key
storeFile=./key.jks
위 형식으로 파일을 작성합니다.
이제 android/app/build.gradle 파일로 이동합니다.
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('app/key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
위 코드들을 추가합니다.
앱 번들 빌드 오류 : flutterRoot 변수
flutter build appbundle
앱번들 빌드를 하려고 하면,
오류문구가 뜨는데, 'flutterRoot'가 무엇인지 모르겠다는 이유로 뜹니다.
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
이 코드 바로 위에,
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
위 코드를 입력해서 flutterRoot를 지정합니다.
그리고 다시 앱번들 빌드를 하면, 오류없이 작동합니다.
1차 제출 실패 : 출시 모드로 앱 번들 빌드하기
빌드한 aab 파일을 제출합니다.
그런데 오류가 뜹니다.
디버그 모드가 아니라 출시 모드로 빌드한 앱 번들을 가져오라는 뜻입니다.
android/app/build.gradle
buildTypes에 signingConfig의 debug를 release로 변경합니다.
빌드를 하려고 하니,
:app:validateSignReleaseBundle에 관련된 문제가 발생합니다.
디버그 모드에서 출시 모드로 바꾸면서, 아까 생성한 KeyStore 파일을 불러와야 합니다. 그런데 그 파일이 잘 안 불러와지면 해당 오류가 발생합니다.
아까 keystore는 생성해놨기 때문에, 경로가 잘 지정됐는지를 살펴봐야 합니다.
android/app/build.gradle
keystorePropertiesFile의 경로가 잘못됐습니다.
key.properties파일은 android/app 폴더에 저장해놨기 때문에,
def keystorePropertiesFile = rootProject.file('app/key.properties')
경로를 위처럼 수정합니다.
이제 빌드가 잘 됩니다.
추천 사항 : proguard-rules.pro
android/app/proguard-rules.pro
플러터 앱의 코드를 난독화하는 장치입니다.
위 파일을 생성한 후, 빌드를 하는 것을 추천드립니다.
proguard-rules.pro를 작성한 후, android/app/build.gradle파일의 buildTypes 코드 안에
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'app/proguard-rules.pro'
위 내용을 추가합니다.
* 예전엔 useProguard라는 함수를 사용했는데, 지금은 사용하지 않습니다. 만약 옛날에 사용된 코드를 긁어오셨다면, useProguard에서 오류가 발생합니다.
다시 앱 번들 파일을 빌드합니다.
2차 제출 실패 : 국가/지역 설정과 API 타겟 SDK 지정
이제 앱 번들을 제출하면,
번들 파일에 등록된 정보가 자동으로 입력되고, 추가로 출시 설명을 적으라고 합니다.
다 적은 후 제출을 하면,
이번엔 두 가지 오류가 떴습니다.
1. 국가/지역 설정 문제
2. API 수준 문제
국가 선택
비공개 테스트 탭에서 국가를 선택할 수 있습니다.
모든 국가 선택한 다음 '확인'하면 끝입니다.
API SDK 버전 문제
현재 안드로이드 SDK API의 수준이 33인데, 34로 높이라는 경고를 합니다.
이건, 앱을 제작하는 동안 안드로이드 새 버전이 출시되면서 발생한 문제입니다.
flutter upgrade로 플러터 버전을 업데이트 한 후, 앱 번들을 다시 빌드하면 문제가 해결됩니다.
3차 제출 실패 : 이미 사용된 버전 코드
이제는 정말 끝난 줄 알았지만, 버전 코드 오류가 떴습니다.
아까 API 레벨을 높인 후 다시 앱 번들 빌드를 하고 제출을 하면, 제출한 앱 번들마다 버전 코드를 다르게 하라는 오류가 뜹니다.
버전 코드는 앱의 버전과는 다른 것입니다.
버전 코드 : 플레이스토어에 제출한 앱 번들 파일의 순서
앱 버전 : 스토어에 정식 출시한 앱 버전
android/app/build.gradle
defaultConfig에 versionCode를 지정할 수 있는 항목이 있습니다. 여기에서 숫자를 +1 합니다.
그리고 다시 앱 번들 빌드를 한 후, 제출합니다.
제출 성공?
버전 코드, 타겟 SDK까지 잘 적용된 모습입니다.
이제 앱 안정성 검사로 넘어가나 싶은데,
4차 제출 실패 : 광고 ID 선언
마지막 관문으로 '불완전한 광고 ID 선언' 문제가 떴습니다.
'선언 작성' 링크로 가면
앱의 광고 ID 사용 여부를 확인합니다.
굿위시는 광고 ID를 사용하지 않기 때문에 '아니요'를 체크하고 넘어갑니다.
본인인증 완료 & 제출 완료
앱 번들 제작이 완료됐습니다.
맨 처음에 했던 '개발자 본인 인증'이 완료되면
이제 정식으로 앱을 검토받을 수 있습니다.
앱을 제출하고 하루정도 기다리면,
게시 완료라고 뜹니다.
하지만 여기서 플레이스토어 출시가 끝난 게 아닙니다. 큰 관문이 하나 더 남았습니다.
남은 관문 : 테스터 모집하기
해당 앱은 정식 출시가 된 게 아니라, '테스트가 허용'된 상태일 뿐입니다.
이제 정식으로 테스터를 구해서, 플레이스토어를 통해 테스트를 진행해야 합니다.
이 과정은 다음 글에서 알아보겠습니다.
끝.
'개발일지 > GoodWishes' 카테고리의 다른 글
[굿위시 업데이트] 1. 플러터 앱에 구글 드라이브 백업과 복원 기능 구현하기 (0) | 2024.11.26 |
---|---|
[굿위시 제작기] 19. 구글 플레이스토어 출시과정 - 테스터 20명 모집하고 14일 기다리기 / 최종 스토어 출시 (0) | 2024.11.17 |
[굿위시 제작기] 17. 구글 플레이스토어 출시과정 - 스토어 기본 정보 등록 (0) | 2024.11.15 |
[굿위시 제작기] 16. 구글 플레이스토어 출시과정 - 회원가입과 앱 콘텐츠 정보 등록 (6) | 2024.11.14 |
[굿위시 제작기] 15. 프로필 페이지 제작하기 (0) | 2024.11.08 |