일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- url
- initializer
- interpace
- Class
- 스위프트
- type
- property
- struct
- Protocol
- UIKit
- Git
- delegate
- init
- Swift
- Terminal
- tuist
- IOS
- initalizer
- 이니셜라이저
- 디자인패턴
- String
- extension
- Method
- enum
- optional
- instance
- Unicode
- Foundation
- Xcode
- 코딩테스트
- Today
- Total
아리의 iOS 탐구생활
[Xcode Cloud] Tuist로 만든 프로젝트에 Xcode Cloud 적용하는 법 본문
YAPP 동아리 Dev. Camp 1차때 팀원들과 함께 해결한 문제이다.
# 문제 상황
- Tuist로 프로젝트 생성을 하였다.
- 생성을 하니, .xcworkspace 파일이 자동으로 생성된 .gitignore에 포함되어있었다. 아마 충돌을 대비해서 추가해둔 것 같다.
- 이후 Xcode Cloud 적용을 위해서 빌드를 시도했는데, .xcworkspace를 찾을 수 없다는 에러가 났다.
Swift Package Dependencies
Workspace Fitfty.xcworkspace does not exist at Fitfty/Fitfty.xcworkspace
이 문제를 해결하기 위해서 .gitignore에 등록되어있는 .xcworkspace를 제거하자니 매우 찝찝하였다.
협업 시 충돌 피하자고 등록해둔 것 같은데, Xcode Cloud의 에러를 해결하자고 제거하는 것은 용납할 수 없었다.
내 생각엔 분명 방법이 있을 것 같았다. 그래서 다른 방법이 있나 한번 고민해보고 찾아보았다.
# 나의 추측
아마 github 레파지토리를 클론 받아온 후 빌드를 시도하는 것이기 때문에 .gitignore에 등록되어있는 .xcworkspace 파일을 찾을 수 없는 상황인 것 같았다. 그래서 빌드를 시도하기 이전에 따로 스크립트를 추가하여 추가적인 명령어를 실행할 수는 없을까 고민해보았다.
만약 추가적인 명령어를 따로 실행할 수 있다면, tuist generate 명령어를 통해 .xcworkspace를 생성한 후 빌드를 돌리면 된다고 생각했다.
애플 공식문서를 뒤져보니 빌드 중간 중간에 스크립트를 추가할 수 있는 방법이 자세히 나와있었다.
# 해결 방법
몇번의 에러를 겪어 삽질을 한 결과, 스크립트를 실행하기 위해 먼저 ci_scripts라는 디렉토리에 접근을 하게 된다.
tuist의 xcworkspace를 실행하려면 해당 디렉토리를 나와서 tuist generate 명령어를 실행해줘야한다.
cd .. 명령어로 해당 디렉토리를 나오게 해주었지만 디렉토리를 상대경로로 접근하는 방법은 없을까... 고민하다가, 특별한 방법은 찾지 못해서 대신 주석을 달아 어떤 명령어인지 명시해주기로 타협했다.
ci_post_clone.sh 파일 내용
#!/bin/sh
# swiftlint 다운로드
brew install swiftlint
# ci_scripts 디렉토리를 나와 프로젝트 경로인 Fitfty로 진입
# Fitfty 디렉토리로 경로 이동 -> /Volumes/workspace/repository/Fitfty
cd ..
# fetch를 통해 라이브러리 다운로드
.tuist-bin/tuist fetch
# generate를 통해 .xcworkspace 받아오기
.tuist-bin/tuist generate
이렇게 스크립트를 추가해주니 정상적으로 xcworkspace를 생성하고 찾을 수 있어 빌드를 성공할 수 있었다...!!
그리고 .tuist-bin 파일을 통해 fetch와 generate를 시도해서 그런지 따로 brew로 tuist를 설치하는 명령어는 필요하지 않다.
이 문제에 대한 래퍼런스가 많지는 않아서 해결하는데 좀 고생했다... 우리처럼 고생하지 않았으면 해서 해결방안을 올려본다!
.tuist-bin/tuist ... 명령어를 사용하기 이전에 tuist bundle 이라는 명령어를 통해 .tuist-bin 디렉토리를 생성해준 다음 레파지토리로 변경사항을 push하고 나서 위 작업을 해줘야 한다.
# 별거아닌 팁
Xcode Cloud 빌드 실패시 로그를 확인해볼 수 있다.
빌드 숫자 부분을 클릭
화살표를 눌러 메뉴를 열고 로그로 진입.
빌드에 대한 자세한 로그를 확인해볼 수 있다.
(근데 가끔 불친절함...ㅋ)
# Tuist로 만든 프로젝트 테스트 빌드는 어떻게 해결할까?
Scheme를 일반 프로젝트가 아니라 Workspace가 붙어있는 Scheme로 설정해주어야 정상적으로 테스트를 동작한다.
구글링 키워드
xcode cloud ci scripts brew
# Reference
'Swift > 문제해결' 카테고리의 다른 글
[iOS/Tuist] Objective-C 코드가 포함된 라이브러리 의존성 주입시 발생하는 문제 (3) | 2023.02.27 |
---|---|
[URLRequst] 네트워크 요청 시 캐시 제어 하는 방법 (1) | 2022.09.23 |
Swift의 String index는 왜 정수가 아니지? 왜 구하기 어려울까? (1) | 2021.09.13 |
Cannot use mutating member on immutable value: function call returns immutable value (0) | 2021.09.13 |
atomically는 프로그래밍에서 무슨 뜻일까... (0) | 2021.09.13 |