Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 리팩토링
- UITextView
- clean architecture
- 리펙터링
- combine
- HIG
- UICollectionView
- collectionview
- 클린 코드
- ribs
- uitableview
- Human interface guide
- 스위프트
- MVVM
- swiftUI
- SWIFT
- map
- swift documentation
- ios
- Clean Code
- Xcode
- Observable
- tableView
- RxCocoa
- 리펙토링
- uiscrollview
- Refactoring
- Protocol
- rxswift
- 애니메이션
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[fastlane] 3. match (configuration 설정, certificate, provisioning profile정보 apple developer, git 업로드, 동기화) 본문
iOS 앱 배포와 출시
[fastlane] 3. match (configuration 설정, certificate, provisioning profile정보 apple developer, git 업로드, 동기화)
jake-kim 2020. 12. 3. 01:451. fastlane이란?
3. fastlane match (certificate, provisioning profile 정보를 git에 저장)
4. fastlane build_app (빌드, Firebase에 배포)
5. fastlane 앱 스토어에 배포 (App Store Connect)
6. fastlane register devices, 디바이스 정보(UDID, Name) Apple Developer에 등록 방법 (register_devices)
*7. fastlane 총 정리 및 phase별 configuration 설정, 환경변수 설정
*8. fastlane과 Bitrise를 이용한 자동 배포 구축 방법
cf) fastlane 환경 변수 (.env.default) 사용하여 가장 단순한 match 사용 방법
certificate와 provisioning profile동기화의 장점
- 맥장비, 팀원에 종속적이지 않게 동일한 환경 구현
- certificate같은 경우 private key가 존재하는데 이 키를 바꾸면 기존에 쓰던 사람이 못쓰는 경우를 막을 수 있는 장점
동기화 원리
- private git 레퍼지토리를 만들어서, master 한명이 certificate(with private key)/provisioning profile을 관리
- fastlane의 match 사용
프로젝트 Configuration설정
- Debug / Alpha / Beta / Release로 세팅 (Alpha, Beta 추가)
- Bundle Id 세팅: Alpha, Debug, Release의 bundle ID 설정
- 번들ID를 나누는 이유?
- 빌드 셋팅들을 다르게 할 수 있기 때문 (카톡 개발 시 실제 서비스가 되고 있는 서버에서 하면 위험하므로, debug 빌드셋팅에서 개발) - Automatically manage signing 체크 해제 - 각각의 certificate와 provisioning profile을 채워주고 fastlane설정하여 실행
- 모든 프레임워크 안에도(Domain, CommonExtension, Pods) alpha, beta 추가 (안할경우 빌드 오류 발생)
fastlane match 사용하여 자동화
Git SSH key 생성하여 git에 연동
- SSH키 생성 (이미 존재하면 설정 x)
$ ssh-keygen -t rsa -b 4096 -C "youtEmail@example.com"
- SSH 복사
$ pbcopy < ~/.ssh/id_rsa.pub
- SSH 붙여넣기
- git에 private repo생성
match준비 - certificate, provisioning profile
* certificate, provisioning profile 개념 및 구체적인 설명: ios-development.tistory.com/246?category=936128
- match 파일 생성
$ fastlane match init
- Apple Developer사이트에서 App Identifiers 입력
- 위와같이 alpha, beta, release(appstore)모두 작성
- 기존에 존재하는 certificates, profiles 모두 삭제 (app id를 불문하고 모두 삭제되는 작업)
// development certificate를 포함하여 이와 관련된 profile 모두삭제(debug)
$ fastlane match nuke development
// distribution certificate를 포함하여 이와 관련된 profile 모두삭제(adhoc, appstore)
$ fastlane match nuke distribution
apple developer와 git에 certificate & profile 정보 push
- Appfile에 입력할 정보: fastfile에서 사용할 lane의 bundleID 세팅
- fastfile을 실행하기 전에 Appfile을 참조하는데, 밑의 for_lane과 이름이 같은 fastfile에 bundleID 세팅
# 디폴트 값 정의 (밑의 for_lane과 일치하지 않는 fastfile의 함수 lane들은 해당 값 적용)
# default 번들 ID
app_identifier("com.jake.Kimp.alpha")
# Your Apple email address
apple_id("palatable7@naver.com")
# Developer Portal Team ID
team_id("SS7U83UJNK")
# fastfile에 가기전에 app_identifier가 설정
for_platform :ios do
# debug, alpha: 위에서 정한 default 번들 ID를 사용
# beta
for_lane :renew_codesign_beta do
app_identifier 'com.jake.Kimp.beta'
end
for_lane :sync_codesign_beta do
app_identifier 'com.jake.Kimp.beta'
end
# release
for_lane :renew_codesign_release do
app_identifier 'com.jake.Kimp'
end
for_lane :sync_codesign_release do
app_identifier 'com.jake.Kimp'
end
end
- fastfile에 사용할 match명령어 기입
- apple developer, git에 새로 push (덮어씌우기): renew_codesign(type:)
- git에서 가져오기: sync_codesign(type:)
- FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD의 value값: appleid.apple.com/account/manage 사이트에서 암호 생성 클릭하여 생성
default_platform(:ios)
ENV["FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD"] = "lqgm-basd-vvdl-bdmi"
platform :ios do
# match 갱신 - git에 push (certificate, profile visioning)
private_lane :renew_codesign do|options|
match(type:options[:type], force_for_new_devices: true)
end
lane :renew_codesign_debug do
renew_codesign(type:"development")
end
lane :renew_codesign_alpha do
renew_codesign(type:"adhoc")
end
lane :renew_codesign_beta do
renew_codesign(type:"adhoc")
end
lane :renew_codesign_release do
renew_codesign(type:"appstore")
end
# match 로드 (certificate, profile visioning)
private_lane :sync_codesign do|options|
match(type:options[:type], readonly: true)
end
lane :sync_codesign_debug do
sync_codesign(type:"development")
end
lane :sync_codesign_alpha do
sync_codesign(type:"adhoc")
end
lane :sync_codesign_beta do
sync_codesign(type:"adhoc")
end
lane :sync_codesign_release do
sync_codesign(type:"appstore")
end
end
- .sh를 만들어서 편리하게 사용 (두 파일 모두 $ chmod u+x 파일이름 으로 접근권한 변경 필요)
- renew_dev_env.sh: app developer와 git저장소에 push (새로 갱신)
- set_dev_env.sh: git으로부터 땡겨오는 기능
(renew_dev_env.sh)
#!/bin/sh
bundle install
bundle exec fastlane renew_codesign_debug
bundle exec fastlane renew_codesign_alpha
bundle exec fastlane renew_codesign_beta
bundle exec fastlane renew_codesign_release
(set_dev_env.sh)
#!/bin/sh
bundle install
bundle exec fastlane sync_codesign_debug
bundle exec fastlane sync_codesign_alpha
bundle exec fastlane sync_codesign_beta
bundle exec fastlane sync_codesign_release
- renew하여 apple developer와 git에 갱신
$ ./renew_dev_env.sh
- 중간에 passphrase 입력: passphase입력하라는게 두 번 나오는데, 첫번째는 enter, 두번째는 패스워드를 입력해야 success
- Apple Developer사이트와 git에 업데이트된 profile 정보 확인
- sync하여 git에 올라간 정보를 xcode에 땡겨오기
$ ./set_dev_env.sh
renew_codesign와 sync_codesign 사용 목적
- renew
- 프로젝트 세팅 최초에 apple developer과 git에 certficate와 profile 정보 push
- firebase를 통해 배포할 때, 새로운 사람의 Devices가 추가될 경우 (apple developer - Devices에서 추가) profile 갱신 - sync
- 기기가 다른 경우, 다른쪽 기기에서 xcode 작업 시 certificate & profile 동기화
- 협업할 경우에도 사람들끼리의 동기화
'iOS 앱 배포와 출시' 카테고리의 다른 글
[iOS - Crashlytics] Firebase Crashlytics 사용방법 (0) | 2020.12.15 |
---|---|
[fastlane] 4. build_app (빌드, 배포, firebase에 배포, firebase_app_distribution, 빌드 번호 증가) (0) | 2020.12.12 |
[fastlane] 1. fastlane이란 (0) | 2020.12.03 |
[fastlane] 2. cocoapods, pod install 동기화 (Bundler, Bundle, gem, ruby) (0) | 2020.12.01 |
[iOS 앱 배포 하기] Xcode에서 ipa 파일 추출 방법 (adhoc, app store) (0) | 2020.11.30 |
Comments