fastlane을 적용하여 앱스토어에 앱 배포하기
2개로 나누어 튜토리얼을 작성할 예정입니다.
1에서는 앱을 최초 배포에 대한 튜토리얼을, 2에서는 앱 업데이트에 대한 튜토리얼에 대한 내용을 다룰 예정입니다.
튜토리얼
우선 fastlane이 setup되어있는 상태라고 가정하고 튜토리얼을 작성할 예정입니다. fastlane이 해당 프로젝트에 setup되지 않은 분은 fastlane을 적용한 QA 프로세스 자동화 게시물의 초반부분을 참고해주세요!
appIdentifier을 등록
우선 앱의 identifier을 itunesConnect와 developer Potal에 등록하기 위한 코드를 작성합니다.
여기서 사용하는 produce
는 새로운 iOS앱을 iTunesConnect와 dev Potal에 등록하는데 사용하는 툴입니다.
최초에 앱을 등록하는데도 사용할 수 있지만, 앱에 대한 정보를 변경하고자 할 때도 사용합니다.
예를 들어, 앱은 homekit, gamecenter, in-app 등의 여러가지 서비스 중 어떤 서비스를 지원하는지 선택이 가능합니다. 또한, 앱그룹도 생성할 수 있습니다. 더 자세한 설명은 https://docs.fastlane.tools/actions/produce/ 을 참조해주세요.
// homekit과 healthkit을 enable 합니다.
fastlane produce enable_services --homekit --healthkit
// 해당 appid에 대해 서비스를 중지합니다.
fastlane produce disable_services --[appid]
dev Potal 혹은 iTunesConnect 둘중 하나에만 등록되어있어 fail할까 걱정하지 않아도 됩니다. 만약 동일한 app identifier가 존재한다면 둘중 없는 곳에만 새로 생성하여 주니까요.
# fastfile에서 작성
lane :first_release do
produce(
username: 'dev@gmail.com',
app_identifier: 'com.test.todaydo.ios',
app_name: 'TodayDo',
language: 'Korean',
app_version: '1.0')
end
metadata iTunesConnect에 올리기
메타데이터와 스크린샷, 바이너리들을 아이튠즈커넥트에 올리기위해 Deliver라는 액션을 사용해봅시다.
스크린샷은 디자인팀에서 전달받아 등록한다는 가정에서 진행하겠습니다.
우선 deliver 셋팅을 하기 위해 커맨드를 입력합니다.
fastlane deliver init
그럼 해당 /fastlane 폴더 내에 metadata폴더, screenshots폴더, Deliverfile파일이 생성되었습니다.
해당 폴더명이나 파일명은 iTunesConnect에 나오는 각각의 입력창에 맞는 네이밍을 가지고 있어, 어떤 메타데이터인지 파악이 가능합니다.
TIP
개인적으로 이 폴더 내의 텍스트 파일들에 영어 텍스트로 작성해야 되는 부분이 있어, 최초에 앱 정보들을 입력할 때는 itunesConnect에서 작성하는 것을 추천합니다.
그리고 해당 내용을 다운로드 하여 앱 릴리즈 노트(release notes)만 수정하는 방향으로 진행하는 것을 추천합니다.
fastlane deliver download_metadata
빌드하여 iTunesConnect에 업로드하기
앱스토어 제출용 빌드를 만들기 위해 우선 CodeSigning을 동기화합니다. 기존에 팀원들과 인증서를 동기화 하기 위해 match를 사용하고 있다면, 해당 Match파일에 작성된 url에서 최신의 인증서로 업데이트합니다. (참고 : http://littleshark.tistory.com/35)
sync_code_signing(type: "appstore")
그리고 빌드를 진행합니다.
build_app(scheme: "TodayDo")
그리고 해당 빌드파일과 metadata를 itunesconnect에 업로드합니다.
deliver(
# 메타데이터와 빌드파일을 업로드 후 자동으로 제출 유무
submit_for_review: true,
force: true,
# 자동으로 출시 여부에 대한 옵션입니
automatic_release: false,
# 만약 메타 데이터만 itunesConnect에 업로드하고싶다면, 아래의 옵션을 true로 두어 .ipa 파일이 업로드 되지 않도록 합니다.
skip_binary_upload: false,
# 메타데이터의 filePath를 입력
metadata_path: "./metadata",
# itunesConnect에서 스크린샷을 올렸다면 자동으로 fastlane deliver download_metadata 을 실행했을 때 디렉토리가 자동으로 생상되어 굳이 작성할 필요가 없습니다.
# 만약 앱스토어용 스크린샷을 메타파일에서 폴더를 따로 생성해서 자동으로 인지하지 못하는 디렉토리에 있다면 filePath를 적어줍니다.
screenshots_path: "./screenshots",
# 앱 버전을 생성하거나 수정합니다.
app_version: "1.0",
skip_app_version_update: false,
# 메타 데이터를 업로드 하지 않는가에 대한 옵션입니다. 스크린샷은 메타데이터와 별개로 업로드 됩니다.
skip_metadata: false,
# 심사 시, IDFA(애플 광고 식별자)에 대한 정보입니다.
submission_information: {
add_id_info_limits_tracking: true,
add_id_info_serves_ads: true,
add_id_info_tracks_action: true,
add_id_info_tracks_install: true,
add_id_info_uses_idfa: true,
content_rights_has_rights: true,
content_rights_contains_third_party_content: true,
export_compliance_platform: 'ios',
export_compliance_compliance_required: false,
export_compliance_encryption_updated: false,
export_compliance_app_type: nil,
export_compliance_uses_encryption: false,
export_compliance_is_exempt: false,
export_compliance_contains_third_party_cryptography: false,
export_compliance_contains_proprietary_cryptography: false,
export_compliance_available_on_french_store: false
}
)
기다리기.........
# 전체 코드
lane :first_release do
sync_code_signing(type: "appstore")
produce(
username: 'dev@gmail.com',
app_identifier: 'com.test.todaydo.ios',
app_name: 'TodayDo',
language: 'Korean',
app_version: '1.0')
build_app(scheme: "TodayDo")
deliver(
# 메타데이터와 빌드파일을 업로드 후 자동으로 제출 유무
submit_for_review: true,
force: true,
# 자동으로 출시 여부에 대한 옵션입니
automatic_release: false,
# 만약 메타 데이터만 itunesConnect에 업로드하고싶다면, 아래의 옵션을 true로 두어 .ipa 파일이 업로드 되지 않도록 합니다.
skip_binary_upload: false,
# 메타데이터의 filePath를 입력
metadata_path: "./metadata",
# itunesConnect에서 스크린샷을 올렸다면 자동으로 fastlane deliver download_metadata 을 실행했을 때 디렉토리가 자동으로 생상되어 굳이 작성할 필요가 없습니다.
# 만약 앱스토어용 스크린샷을 메타파일에서 폴더를 따로 생성해서 자동으로 인지하지 못하는 디렉토리에 있다면 filePath를 적어줍니다.
screenshots_path: "./screenshots",
# 앱 버전을 생성하거나 수정합니다.
app_version: "1.0",
skip_app_version_update: false,
# 메타 데이터를 업로드 하지 않는가에 대한 옵션입니다. 스크린샷은 메타데이터와 별개로 업로드 됩니다.
skip_metadata: false,
# 심사 시, IDFA(애플 광고 식별자)에 대한 정보입니다.
submission_information: {
add_id_info_limits_tracking: true,
add_id_info_serves_ads: true,
add_id_info_tracks_action: true,
add_id_info_tracks_install: true,
add_id_info_uses_idfa: true,
content_rights_has_rights: true,
content_rights_contains_third_party_content: true,
export_compliance_platform: 'ios',
export_compliance_compliance_required: false,
export_compliance_encryption_updated: false,
export_compliance_app_type: nil,
export_compliance_uses_encryption: false,
export_compliance_is_exempt: false,
export_compliance_contains_third_party_cryptography: false,
export_compliance_contains_proprietary_cryptography: false,
export_compliance_available_on_french_store: false
}
)
end
위와같은 과정으로 새로운 앱을 제출하는데 모든 과정 lane을 작성해두었습니다.
이제 저는 fastlane first_release
만 터미널에 작성하고 티타임을 즐기다 오면 자동으로 심사 제출에 성공할 것입니다!
(빌드 제출후 애플 내에서 처리하는 과정이 20-30분정도 소요되거든요 ㅜ.ㅜ)
'개발 > swift' 카테고리의 다른 글
TDD in iOS (#1 - UnitTest) (1) | 2018.05.31 |
---|---|
fastlane을 적용하여 앱스토어에 앱 배포하기(업데이트) #2 (0) | 2018.05.29 |
fastlane을 적용하여 팀원간 인증서 동기화 하기 (0) | 2018.05.29 |
fastlane을 적용한 QA 프로세스 자동화 (0) | 2018.05.29 |
Cocoapods Private 라이브러리에 관한 튜토리얼 (2) | 2018.05.29 |
댓글