본문 바로가기

IOS Swift

Fastlane Match로 Signing 하기(feat. iOS)

목차

  1. Git private repo 생성
  2. certificate와 provisioning profile 생성 후 Git에 올리기
  3. 배포 자동화할 프로젝트로 돌아가서 Fastfile 수정
  4. 새로 온 팀원 시점: Match를 이용해 배포 자동화 하기

 

제가 원래 수동방법으로 하고 있다가 Match로 바꾼건데 그러면 프로젝트 폴더에 .p12, .cer, .mobileprovision 파일이 있을겁니다.

삭제해주고 시작했습니다.

1. Git private repo 생성


certificate와 provisioning profile을 올려놓을 repo 하나를 만듭니다.

 

2. Certificate와 provisioning profile 생성 후 Git에 올리기


해당 repo를 clone 하고 해당 위치에서 

fastlane match init

명령어를 입력해줍니다.

git을 이용했으니까 1을 입력해줍니다.

그리고 생성한 레포지토리의 url 을 입력합니다.

그럼 이렇게 Matchfile이 생성됩니다. 파란색이라 잘 안 보이네요. 🥺

그리고 Match file을 수정해 줍시다.

app_identifier과 username을 변경해주었습니다.

 

그리고 예전에 만들어놓은 certificate와 provisioning profile을 제거 해주는 작업을 해줄 겁니다.

// 개발용 인증서 제거
fastlane match nuke development
// 배포용 인증서 제거
fastlane match nuke distribution

이렇게 따로 처리해주지 않으면 계속 쌓이기만 한다고 합니다.

 

이어서 새로운 certificate와 provisioning profile을 생성하기 위해 다음 두 개를 차례로 입력합니다.

fastlane match appstore
fastlane match development

하다 보면 이런 문구가 뜨는데 다른 팀원이 해당 매치를 사용할 수 있도록 적절한 비밀번호를 입력합니다.

그리고 Apple ID랑 비밀번호 입력까지 해주다 보면 완료가 됩니다.

그럼 이렇게 Git private repo에 certificate와 provisioning profile이 생성됩니다.

이제 팀원들은 Git에 올라와 있는 certificate와 provisioning profile을 이용할 수 있습니다.

 git private repo에서 해야 할 기본적인 것은 끝났고 작업 중인 프로젝트로 갑시다.

 

3. Fastfile 파일 수정


Signing 방법을 변경했으니 작업중인 프로젝트의 Fastfile을 수정해주어야 합니다.

원래 버전

default_platform(:ios)

  desc "build app and upload to testflight"
  lane :beta do
    // Signing 3가지 방법 중 cert, sign 방법
    get_certificates
    get_provisioning_profile
    increment_build_number(
        build_number: latest_testflight_build_number + 1
    )
    build_app(
	scheme: "VideoConverter"
	)
    upload_to_testflight
    slack(
      message: "Testflight 배포 성공",
      slack_url: "https://hooks.slack.com/services/T74H5245A/B03C8PK6HT6/SDA4iR...~예시"
    )
  end

platform :ios do

  error do |lane, exception, options|
    slack(
      message: "에러 발생 : #{exception}",
      success: false,
      slack_url: "https://hooks.slack.com/services/T74H5245A/B03C8PK6HT6/SDA4iR...~예시"
      )
  end
end

 

수정된 버전

default_platform(:ios)

  desc "build app and upload to testflight"
  lane :beta do
    match(type: "appstore")
    clear_derived_data
    increment_build_number(
        build_number: latest_testflight_build_number + 1
    )
    gym(
     clean: true,
     export_method: "app-store"
    )
    upload_to_testflight
    slack(
      message: "Testflight 배포 성공",
      slack_url: "https://hooks.slack.com/services/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"
    )
end

platform :ios do

  error do |lane, exception, options|
    slack(
      message: "에러 발생 : #{exception}",
      success: false,
      slack_url: "https://hooks.slack.com/services/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"
)
  end
end

 

수정된 부분만 따로 놓고 보겠습니다.

  desc "build app and upload to testflight"
  lane :beta do
    // 자동으로 최신 signing certificates 가져오기 위한 명령어
    match(type: "appstore")
    // Derived 제거 관련의 경우, 가끔 빌드시 문제가 생길시 여기 파일을 지워주면 해결되는 경우가 많다. 빌드 할 때마다 생성되므로 삭제해도 OK
    clear_derived_data
    increment_build_number(
        build_number: latest_testflight_build_number + 1
    )
    // gym: 빌드 및 패키징
    gym(
     clean: true,
     export_method: "app-store"
    )
    upload_to_testflight
    slack(
      message: "Testflight 배포 성공",
      slack_url: "https://hooks.slack.com/services/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"
    )
end

 

 

 

4. 새로 온 팀원 시점: Match를 이용해 배포 자동화 하기


작업중인 프로젝트에서 아래 두 명령어를 입력하여 certificate와 provisioning profile을 가져옵니다.

fastlane match appstore --readonly 

fastlane match development --readonly

그리고 아까 Fastfile에서 fastlane beta라고 치면 자동으로 TestFlight에 올라가도록 명령어들을 적어줬었죠!

fastlane beta를 쳐주면 뭐 입력해 달란 거 해주면 알아서 TestFlight에 척척척 올라갑니다.



잘 올라가네요. 구웃

 


참고

Certification - Apple이 만든 하드웨어에 Apple의 승인을 받은 소프트웨어만 설치할 수 있도록 하기 위한 인증서

provisioning profile - App ID, Devices, Certificates 정보가 있어 iOS 디바이스와 연결해주는 역할

  • Apple의 인증을 받은 개발자들(Certificate)이 +
  • 어떤 디바이스(Devices)에 +
  • 어떤 앱(App ID)
  • 을 등록할건지 모여있는 파일
반응형

'IOS Swift' 카테고리의 다른 글

Swift 텍스트필드 키보드 내리기  (0) 2022.07.10
iOS 앱 버전 코드로 확인하기 - Swift  (0) 2022.06.29
Fastlane 배포 자동화 적용(feat. iOS)  (0) 2022.04.21
RxSwift 정리  (0) 2022.03.30
iOS - 이벤트 처리 흐름  (0) 2022.02.11