Flutter에서 제공하는 문서 fastlane
구글 API 에 권한이 없어 생긴 이슈이다.
Play Store Console - 설정 - API 엑세스에 들어가서 서비스계정을 하나 생성하였다.
서비스계정을 생성할때는 서비스계정 - 서비스계정 만들기에서 생성가능
정확히 어떤 계정권한이 필요한지 몰라 권한은 "소유자" 로 주었다.
생성후 Google Play Console 에서 새로고침으로 서비스계정이 생성된것을 확인할수있었다.
Play Console 관리에서 계정권한에 권한을 준다.
앱권한에는 어떤 앱에 권한을 줄건지, 계정권한에는 출시권한이 있는지 확인
fastlane supply init
to setup supply이전 fastlane에서 permission 오류로인해 메타데이터를 못가져와 생긴 오류로, permission 문제를 해결했다면 fastlane supply init으로 메타데이터를 불러올수 있다.
fastlane supply init
명령어로 메타데이터를 불러오면된다.
if releases.size > 1
rbenv로 루비버전을 fastlane문서에있는 2.7.2 버전으로 맞춰주었다.
그래도 동일한 오류가 발생
ruby 버전에 대한 문제보단 다른 문제가 있는것같다.
def fetch_track_and_release!(track, version_code, status = nil)
tracks = client.tracks(track)
return nil, nil if tracks.empty?
track = tracks.first
releases = track.releases
releases = releases.select { |r| r.status == status } if status
releases = releases.select { |r| (r.version_codes || []).map(&:to_s).include?(version_code.to_s) } if version_code
if releases.size > 1
UI.user_error!("More than one release found in this track. Please specify with the :version_code option to select a release.")
end
return track, releases.first
end
문제가 발생한 코드다.
버전코드가 동일해서 생긴것 같아 pubspec의 버전을 하나 올리고 pub get을 실행한 후 재시도하였다.
성공적으로 넘어갔다
2023-09-18 기준최근 발생되는 오류중 하나로 확인된다.
upload_to_play_store(
track: 'internal',
skip_upload_metadata: true,
skip_upload_images: true,
skip_upload_screenshots: true,
)
옵션을 추가하면 된다는 이야기가 있어서 추가하였다.
성공적으로 스킵하였다.
추가사항:
위에 옵션뿐만아니라 애초에 Google Play Store에서 간혈적으로 발생하는것으로 확인된다.
fastlane 2.215.1
버전에서 해당 문제를 해결하기위해 SUPPLY_UPLOAD_MAX_RETRIES
라는 환경변수를 추가했다
upload_to_play_store(
...
skip_upload_changelogs: true,
)
skip_upload_changelogs를 추가하여 스킵함
flutter에서 output은 flutter 폴더의 build안에 생성이 된다.
그래서 aab파일의 경로를 다시 잡아줘야한다.
upload_to_play_store(
track: 'internal',
aab: '../build/app/outputs/bundle/release/app-release.aab',
skip_upload_metadata: true,
skip_upload_images: true,
skip_upload_screenshots: true,
skip_upload_changelogs: true,
skip_upload_apk: true,
)
안드로이드 버전코드가 play store에 올라간 버전코드보다 낮은경우 발생한다
pubspec 버전코드를 플레이스토에어 올라간 버전보다 하나 올려서 배포를 시도했다.
그래도 실패함.
build.gradle에서 버전코드를 어떻게 가져오는지 확인해보았다.
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
local.properties 에서 가져오는것을 확인할수 있다.
그러나 local.properties 파일을 확인했을때 옛날 데이터로 되어있었다.
fastlane의 gradle로는 flutter pubspec 버전으로 변경이 되지 않았던것.
lane :beta do
# gradle(task: "clean bundleRelease")
sh "flutter build appbundle"
upload_to_play_store(
track: 'internal',
aab: '../build/app/outputs/bundle/release/app-release.aab',
skip_upload_metadata: true,
skip_upload_images: true,
skip_upload_screenshots: true,
skip_upload_changelogs: true,
skip_upload_apk: true,
)
sh 로 build를 하도록 수정하였다.