관리 메뉴

김종권의 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:45

1. fastlane이란?

2. Bundler란? cocoapod 동기화 방법?

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생성

아래부터는 `Kimp_certificate`로 설명

 

 

match준비 - certificate, provisioning profile 

* certificate, provisioning profile 개념 및 구체적인 설명: ios-development.tistory.com/246?category=936128

  • match 파일 생성
$ fastlane match init

1번 선택 후 private한 certificate & profile 정보를 기록할 깃주소 입력
생성된 파일 확인: fastlane/Matchfile
Matchfile 내용 (입력하지 않고 디폴트로 둘 것)

  • Apple Developer사이트에서 App Identifiers 입력

debug용 AppIDs를 등록하는 화면

  • 위와같이 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

삭제된 Certificates
삭제된 profiles

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

Passphrase는 다른 기기에서 해당 git에서 match로 profile정보 땡겨올때 공유하는 비밀번호

  • Apple Developer사이트와 git에 업데이트된 profile 정보 확인

apple developer에 업데이트 완료
git에 업데이트 완료

  • sync하여 git에 올라간 정보를 xcode에 땡겨오기
$ ./set_dev_env.sh

git에서 땡겨온 Provisioning Profile 선택 및 확인

renew_codesign와 sync_codesign 사용 목적

  • renew
    - 프로젝트 세팅 최초에 apple developer과 git에 certficate와 profile 정보 push

    - firebase를 통해 배포할 때, 새로운 사람의 Devices가 추가될 경우 (apple developer - Devices에서 추가) profile 갱신
  • sync
    - 기기가 다른 경우, 다른쪽 기기에서 xcode 작업 시 certificate & profile 동기화
    - 협업할 경우에도 사람들끼리의 동기화
Comments