Sure, Why not?

Tuist 4에서 사라진 Signing, Fastlane Match으로 세팅 본문

⚙️

Tuist 4에서 사라진 Signing, Fastlane Match으로 세팅

joho2022 2025. 5. 25. 06:10

 

 

Xcode의 Automatically manage signing 기능은

인증서와 프로비저닝 파일을 팀 ID에 따라 매번 자동으로 매칭해줬기 때문에,

사이닝 과정에 깊이 고민할 일이 없었는데,

 

Tuist처럼 CLI 기반 도구를 사용할 경우,

이러한 과정이 자동으로 이뤄지지 않기 때문에

서명과 허가를 위한 정적 파일을 명시적으로 준비해야 한다는 사실을 깨닫게 되었다.

 

Signing은 신뢰할 수 있는 개발자에 의해 만들어졌다는 것을 증명하는 서명이고,

Provisioning은 어떤 기기에서 실행될 수 있는지를 정의하는 허가이다.

 

결국 애플이 앱의 신뢰성과 보안을 위해 이러한 과정을 거친다.

 


 

 .cer, .p12 파일 추출

.cer는 공개키 역할을 하고,

.p12는 개인키 역할을 하는 파일이다.

 

두 개의 파일을 통해 검증과 증명을 수행한다.

그래서 Tuist Signing을 적용하기 위해 두 개의 파일을 추출해서 정적으로 제공해줘야 한다.

 

 

1. Certificates  다운로드

 

로그인 - Apple

 

idmsa.apple.com

Certificates 항목에서 인증서를 확인해야 한다.

 

인증서를 생성하는 방법은

1. 키체인 접근 -> 인증서 지원 -> 인증 기관에서 인증서 요청 선택

 

개발자 계정 이메일과 보여질 이름을 기재하고,

디스크에 저장됨을 체크한다.

 

해당 CSR 파일이 생성된다.

 

 

해당 파일을 가지고 certificates항목에서

개발용이나 배포용 인증서를 만들면 된다.

 

그리고 해당 인증서들을 다운로드해준다.

다운로드 된 모습

 

 

2. Certificates 암호 없이 .p12 파일 생성하기

해당 파일 -> 다음으로 열기 -> 키체인 접근

 

 

그리고 키체인 접근에서 해당 인증서를 .p12로 내보낸다.

이때 파일이름은 .cer와 .p12는 동일해야 하고

암호는 공백으로 확인을 해준다.

 

 

 

 

지금까지 결과

 


Provisioning 파일 생성하기

 

핸드폰 UUID를 등록하여 빌드하는 정보를 관리할 수 있다.

 

 

Profiles에 들어가서,

iOS App Development 타입으로 개발용 프로비저닝 파일,

Ad Hoc 타입으로 배포용 프로비저닝 파일을 각각 생성한다.

 

 

그리고 Tuist가 적용할 수 있도록 파일의 이름을

 

Target이름.Configuration.mobileprovision

 

으로 수정한다.

 


 

Tuist 디렉토리 하위에 Signing 생성하여 위치시키기

 

 


 

master.key 파일 생성

해당 인증서들을 보안강화하기 위해 암호화 작업이 필요하다.

 

1. Tuist 경로에서 openssl rand -base64 32  입력

2. 암호화 발급되면 echo "암호화abcd=" > master.key 입력

 

master.key가 생긴 모습

 

 

 

그리고 gitignore작업도 해놓는다.

 

# Signing
Signing/
master.key

 

 

그런데,

지금까지는 과정은 Tuist4 아래있는 버전에서

Tuist/Signing을 통한 Tuist Signing기능으로 수동 사이닝 세팅이 가능하다.

 

중요한 건 Tuist4에서는 안됨


Tuist 4에서는 Signing 기능이 Drop

 

 

Eliminate signing capabilities by pepicrft · Pull Request #5716 · tuist/tuist

Short description 📝 To reduce the support and maintenance surface in Tuist and ensure we bring the focus back to Tuist core project generation, we are removing Tuist's signing capabilities. Enc...

github.com

 

Tuist 4에서는 Signing 기능이 드랍되었다.

그래서 fastlane에서 사이닝 세팅을 해줘야 한다.

 

 


Fastlane?

iOS, Android 등 배포 자동화 도구.

 

설치

$xcode-select --install

 

$brew install fastlane

 

 

1. match 용 Git 레포 만들기

 

 

 

2. fastlane match init

$fastlane match init

저장소는 1 git 그리고 해당 레포 url를 입력한다.

 

개발용과 배포용을 나눈 앱번들 ID를 설정했다.

 


Fastlane match

match는 인증서와 프로비저닝 파일을  Git 레포와 같은 저장소에 통합 관리하면서, Singing 과정을 표준화해주는 방식

 

 

생성해주기 전

기존에 잘못 만들어진 인증서나 프로비저닝 파일을 깨끗하게 지우는 것을 권장해서 정리를 해줬다.

 

fastlane match nuke development // 개발
fastlane match nuke distribution // 배포

 

중간에 개발자 계정과 개발자 계정 로그인된 애플기기에 6자리 인증 필요시 입력한다.

 

정리된 모습

 

 

 


1. 인증서, 프로비저닝 생성

$fastlane match development
$fastlane match appstore

 

 

 

GitHub와 Apple Developer 계정 양쪽에서 인증서와 프로비저닝 프로파일이 정상적으로 생성된 것을 확인할 수 있었다.

신기 ㅇ_ㅇ

 

 

2. 생성된 것들을 가져오기

$fastlane match appstore --readonly
$fastlane match development --readonly

 

 

3. 키체인에 등록된 인증서 확인

$security find-identity -v -p codesigning

위와 같이 커맨드로 확인가능

 

or

 

키체인 접근 -> 내 인증서 확인가능

 


 

Tuist 생성 시, 환경별 서명 자동화 설정

,
settings: .settings(
    base: [
        "CODE_SIGN_STYLE": "Manual", // 수동 서명 
        "DEVELOPMENT_TEAM": "MVHA5LVM49" // 개발자 계정의 팀 ID
    ],
    configurations: [
        .debug(
            name: "Debug",
            settings: [
                "ASSETCATALOG_COMPILER_APPICON_NAME": "DevAppIcon",
                "PRODUCT_BUNDLE_IDENTIFIER": "io.hogeunjo.InvestMate.dev",
                "PROVISIONING_PROFILE_SPECIFIER": "match Development io.hogeunjo.InvestMate.dev",
                "CODE_SIGN_IDENTITY": "Apple Development: HoGeun Jo (89N845W6M8)" // 인증서 식별자
            ]
        ),
        .release(
            name: "Release",
            settings: [
                "PRODUCT_BUNDLE_IDENTIFIER": "io.hogeunjo.InvestMate",
                "PROVISIONING_PROFILE_SPECIFIER": "match AppStore io.hogeunjo.InvestMate",
                "CODE_SIGN_IDENTITY": "Apple Distribution: HoGeun Jo (MVHA5LVM49)" // 인증서 식별자
            ]
        )
    ]
)

 

 

 

이제 Tuist 설정을 바탕으로 generate 하게 되면

서명이 들어가 있는 모습을 확인할 수 있었는데

 

아래와 같은 경고가 나타났다.

 

 

이 부분 많이 삽질했는데.. 많이 어이없었다.

 

 

Provisioning profile doesn't inclu… | Apple Developer Forums

1 more way to try for those manual sign, in my case , I strictly aim for "Distribution" only, so what you can try here: open your ../your-prj.xcodeproj/project.pbxproj using VSCODE (or any text/code editor).manually search for following and forcefully chan

developer.apple.com

-> Xcode 껐다 키니깐 정상적으로 됐음 ;;;; 

 

 


결과

 

개발용과 배포용 버전을 분리해서 작업할 수 있게 되었다.

 

 


 

지금까지 Automatically manage signing에 익숙해서,

서명관련 설정하는게 낯설었다.

 

그래도 애플이 앱을 어떻게 인증하고 분리하는지 체감이 되었고,

 

 

 

언젠가 해보고 싶었던 개발용과 배포용 환경 분리를

이번 개인 프로젝트에서 처음 시도해본 덕분에,

다음에 또 적용할 일이 생기면 훨씬 수월하게 해낼 수 있을 것 같다.