때는 뉴빗 버전 1.0.0 개발을 완료하고 앱 스토어 심사를 준비 중이던 어느 날 ... 개발 완료하면 배포는 금방 끝날 줄 알았지 ㅠ
처음에는 앱스토어 배포가 처음이라 CI/CD 환경을 구축할 생각 자체를 못 하고 Xcode에서 Archive를 하려고 했다. 그런데 의문의 오류가 발생하면서 Xcode 앱이 자꾸만 터지고 ... 에러 문구를 아무리 구글링해도 비슷한 오류를 겪은 사례를 발견할 수가 없었다 ...
그렇게 다른 빌드 방법을 찾다가 Xcode Cloud를 알게 됐다. 간단히 말해, 개발자가 코드 변경사항을 Github 등의 저장소에 푸시하면 자동으로 앱을 빌드할 수 있는 시스템으로 이름에서부터 알 수 있듯이 Xcode와 긴밀하게 통합되어 있고, Apple의 생태계 내에서 원활하게 작동하도록 설계되었다고 한다.
비슷한 툴인 Fastlane을 사용해볼까 하다가 아래와 같은 이유로 Xcode Cloud를 사용해보기로 했다.
1. Apple에서 제공하는 서비스이다
2. 월 25시간까지 무료로 이용 가능한데, 이 이유로 나중에 회사에서는 Xcode Cloud를 안 쓸 것 같다
develop 브랜치에서 작업을 해왔으니, 배포는 main 브랜치에서 하면 되겠다 ~ 싶어 푸시 트리거로 사용할 브랜치를 main으로 설정하고 가벼운 마음으로 push를 했는데 ? 될리가 없다. (한 번에 될 줄 알고 풀리퀘스트 내용 열심히 적은 나)

에러 내용을 보니 프로젝트 파일이 없다는 건데 ... 당연하다 🙂 뉴빗은 Tuist를 사용해서 프로젝트 파일을 동적으로 관리하기 때문에 Github 저장소에는 파일이 없다 ... 프로젝트 파일이 없는데 어떻게 빌드를 하니 ... ㅠ

짜잔 ~ 이렇게 하시면 됩니다. 애플 공식 문서에 친절하게 CI 스크립트에 대한 설명이 나와있다. 나의 경우 의존성 설치, 인증서 및 프로비저닝 파일 복호화, 프로젝트 파일 생성 등의 일을 해야 했기에 Post-clone 시점이 아쥬 적합했다. 애플 짱짱 공식 문서 짱짱
방법도 간단하다 !
- 프로젝트 최상단에 ci_scripts 디렉토리를 생성한다.
- 빌드 스크립트를 작성한다. 파일 이름은 다음과 같다:
- Post-clone : ci_post_clone.sh
- Pre-Xcodebuild : ci_pre_xcodebuild.sh
- Post-Xcodebuild : ci_post_xcodebuild.sh
- 빌드 스크립트에 실행 권한을 부여해준다.
chmod +x $filename.sh
내가 작성한 ci_post_clone.sh 파일이다.
#!/bin/bash
# ✅ 프로젝트 최상단 폴더로 이동
cd ..
# ✅ Tuist 설치
bash <(curl -Ls https://install.tuist.io)
tuist install 3.36.2
# ✅ MASTER_KEY 환경 변수의 값을 master.key 파일에 저장
echo "$MASTER_KEY" > Tuist/master.key
# ✅ 의존성 설치, 인증서 및 프로비저닝 프로파일 복호화, xcworkspace 생성
tuist clean
tuist fetch
tuist signing decrypt
tuist generate
- 스크립트를 실행하는 시점의 경로는 ci_scripts 디렉토리이므로, tuist 명령어를 실행하기 위해 프로젝트 최상단으로 이동을 꼭 해주어야 한다 !
- 나의 경우 tuist 버전 3.36.2를 사용했기 때문에 따로 버전을 지정하여 설치하는 과정을 추가했다.
- Github 저장소에 나의 인증서와 프로비저링 프로파일이 공개되면 안 되기 때문에 암호화를 해서 올려놓은 상태이다. 따라서 Xcode cloud 서버 내에서 이를 복호화하기 위해 필요한 키를 Workflow Environment에 세팅해놓았다.

- 인증서와 프로비저닝 프로파일을 복호화하여 xcworkspace를 생성하면 빌드 스크립트가 할 일은 완료 !

헤헤 성공 ...
나중에 알게 된 사실이지만 ... 처음에 Xcode Archive를 통한 빌드가 실패했던 이유는 앱 이름을 NewsHabit이 아닌 뉴빗으로 설정하고 싶어서 변경하다가 BundleDisplayName뿐만 아니라 BundleName까지 한글로 설정해서 ..; 이러니 구글링을 해도 안 나오지 ... 😅 그래도 덕분에(?) CI/CD 환경을 구축해보는 좋은 경험이었다 ...
'iOS 🍎 Swift' 카테고리의 다른 글
Xcode 메모리 누수 체크하기 (2) | 2024.08.05 |
---|---|
Github OAuth 앱 스토어 심사 (iOS에서 URL을 여는 방법) (8) | 2024.07.18 |
iOS 민감한 정보 숨기기 (0) | 2024.07.18 |
타겟 간 같은 Realm 저장소 사용하기 (feat. Tuist) (0) | 2024.07.18 |
iOS/Swift 토스트 메시지 🍞 (2) | 2024.07.16 |
때는 뉴빗 버전 1.0.0 개발을 완료하고 앱 스토어 심사를 준비 중이던 어느 날 ... 개발 완료하면 배포는 금방 끝날 줄 알았지 ㅠ
처음에는 앱스토어 배포가 처음이라 CI/CD 환경을 구축할 생각 자체를 못 하고 Xcode에서 Archive를 하려고 했다. 그런데 의문의 오류가 발생하면서 Xcode 앱이 자꾸만 터지고 ... 에러 문구를 아무리 구글링해도 비슷한 오류를 겪은 사례를 발견할 수가 없었다 ...
그렇게 다른 빌드 방법을 찾다가 Xcode Cloud를 알게 됐다. 간단히 말해, 개발자가 코드 변경사항을 Github 등의 저장소에 푸시하면 자동으로 앱을 빌드할 수 있는 시스템으로 이름에서부터 알 수 있듯이 Xcode와 긴밀하게 통합되어 있고, Apple의 생태계 내에서 원활하게 작동하도록 설계되었다고 한다.
비슷한 툴인 Fastlane을 사용해볼까 하다가 아래와 같은 이유로 Xcode Cloud를 사용해보기로 했다.
1. Apple에서 제공하는 서비스이다
2. 월 25시간까지 무료로 이용 가능한데, 이 이유로 나중에 회사에서는 Xcode Cloud를 안 쓸 것 같다
develop 브랜치에서 작업을 해왔으니, 배포는 main 브랜치에서 하면 되겠다 ~ 싶어 푸시 트리거로 사용할 브랜치를 main으로 설정하고 가벼운 마음으로 push를 했는데 ? 될리가 없다. (한 번에 될 줄 알고 풀리퀘스트 내용 열심히 적은 나)

에러 내용을 보니 프로젝트 파일이 없다는 건데 ... 당연하다 🙂 뉴빗은 Tuist를 사용해서 프로젝트 파일을 동적으로 관리하기 때문에 Github 저장소에는 파일이 없다 ... 프로젝트 파일이 없는데 어떻게 빌드를 하니 ... ㅠ

짜잔 ~ 이렇게 하시면 됩니다. 애플 공식 문서에 친절하게 CI 스크립트에 대한 설명이 나와있다. 나의 경우 의존성 설치, 인증서 및 프로비저닝 파일 복호화, 프로젝트 파일 생성 등의 일을 해야 했기에 Post-clone 시점이 아쥬 적합했다. 애플 짱짱 공식 문서 짱짱
방법도 간단하다 !
- 프로젝트 최상단에 ci_scripts 디렉토리를 생성한다.
- 빌드 스크립트를 작성한다. 파일 이름은 다음과 같다:
- Post-clone : ci_post_clone.sh
- Pre-Xcodebuild : ci_pre_xcodebuild.sh
- Post-Xcodebuild : ci_post_xcodebuild.sh
- 빌드 스크립트에 실행 권한을 부여해준다.
chmod +x $filename.sh
내가 작성한 ci_post_clone.sh 파일이다.
#!/bin/bash
# ✅ 프로젝트 최상단 폴더로 이동
cd ..
# ✅ Tuist 설치
bash <(curl -Ls https://install.tuist.io)
tuist install 3.36.2
# ✅ MASTER_KEY 환경 변수의 값을 master.key 파일에 저장
echo "$MASTER_KEY" > Tuist/master.key
# ✅ 의존성 설치, 인증서 및 프로비저닝 프로파일 복호화, xcworkspace 생성
tuist clean
tuist fetch
tuist signing decrypt
tuist generate
- 스크립트를 실행하는 시점의 경로는 ci_scripts 디렉토리이므로, tuist 명령어를 실행하기 위해 프로젝트 최상단으로 이동을 꼭 해주어야 한다 !
- 나의 경우 tuist 버전 3.36.2를 사용했기 때문에 따로 버전을 지정하여 설치하는 과정을 추가했다.
- Github 저장소에 나의 인증서와 프로비저링 프로파일이 공개되면 안 되기 때문에 암호화를 해서 올려놓은 상태이다. 따라서 Xcode cloud 서버 내에서 이를 복호화하기 위해 필요한 키를 Workflow Environment에 세팅해놓았다.

- 인증서와 프로비저닝 프로파일을 복호화하여 xcworkspace를 생성하면 빌드 스크립트가 할 일은 완료 !

헤헤 성공 ...
나중에 알게 된 사실이지만 ... 처음에 Xcode Archive를 통한 빌드가 실패했던 이유는 앱 이름을 NewsHabit이 아닌 뉴빗으로 설정하고 싶어서 변경하다가 BundleDisplayName뿐만 아니라 BundleName까지 한글로 설정해서 ..; 이러니 구글링을 해도 안 나오지 ... 😅 그래도 덕분에(?) CI/CD 환경을 구축해보는 좋은 경험이었다 ...
'iOS 🍎 Swift' 카테고리의 다른 글
Xcode 메모리 누수 체크하기 (2) | 2024.08.05 |
---|---|
Github OAuth 앱 스토어 심사 (iOS에서 URL을 여는 방법) (8) | 2024.07.18 |
iOS 민감한 정보 숨기기 (0) | 2024.07.18 |
타겟 간 같은 Realm 저장소 사용하기 (feat. Tuist) (0) | 2024.07.18 |
iOS/Swift 토스트 메시지 🍞 (2) | 2024.07.16 |