티스토리 뷰
사이드 프로젝트 팀에서 신규 프로젝트 기획이 진행중이다.
오랜만에 찾아온 신규 프로젝트를 위해 개발 환경 세팅을 진행했다.
사이드 프로젝트인 만큼
그동안 못해봤던 기술들을 새로 적용해보고 경험해보고 싶었다.
그중 우선적으로 적용하기로 한 것은 두가지다.
1. Tuist 4 +
- 그동안 사용했던 Tuist 는 3.3이였나.. 버전에 머물러 있었다.
- 회사에서 사용하는 Tuist 는 메이저 버전을 올리기가 쉽지 않았다.
- 4.0 에서 큰 변화가 있었다고 들었는데 아직 못해봤음.
- 그러던 사이 벌써 4.29 까지 출시했음. 나 말고 모든게 빠른듯.
- tuist test 도 있는데 한번 돌려보기로..
2. Github Action
- CI/CD로 Xcode Cloud 를 사용했었기 때문에 경험해보지 못했었음
- public 레포에서는 무료라던데, 이번에 잘 사용해보자.
Tuist 4로 프로젝트 뼈대를 구축해보니, 아직까지 느끼기엔 편했다.
mise 로 설치, 환경을 관리해주는 것도 편했고.
특히, Manifest 가 매번 새로 생성되지 않는 점이 굉장히 생산성에 유리해졌다.
그리고 여러가지 측면에서 기존 대비 편리함을 느꼇었다!
이 포스팅은 Github Action 에 대한 내용이니 Tuist 내용은 줄이고,
Github Action 활용 계획
Github Action 은 Github 내의 액션을 트리거로써,
미리 입력해둔 작업(주로 테스트 / 배포)을 클라우드에서 실행할 수 있다.
나는 Github Action 을 이용해 다음과 같은 간단한 환경 구축을 계획하고 있다. ( 아직 테스트만 했음 ㅋㅋ )
develop 브런치로 Pull Request 가 생성되면 test 수행
develop 브런치에 commit이 생성되면(merge) dev / prod 앱 각각 테스트플라이트에 배포
시간이 있는 지금 타이밍에 이렇게 환경을 구축해두면 편하게 개발할 수 있을 것 같고,
상상속의 존재였던 TDD 흉내도 좀 내보고 싶었다.
로컬 테스트 환경 구축
클라우드에서 진행되는 Github Action 의 커맨드는 당연히 내 머신에서도 문제없이 진행되어야 한다.
먼저 간단한 테스트코드를 만들었고, Test 모듈과 Scheme 을 만들어서 테스트 환경을 구축해보았다.
import XCTest
@testable import CoreKit
final class CoreKitTest: XCTestCase {
override func setUpWithError() throws {
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDownWithError() throws {
// Put teardown code here. This method is called after the invocation of each test method in the class.
}
func testExample() throws {
ThisIsCoreKit.something()
let result = ThisIsCoreKit.testFunctionSample() // int 0 을 리턴함
XCTAssertEqual(0, result)
}
}
위 코드처럼 테스트코드 딱 하나 있는 테스트타겟을 scheme 에 담아 테스트를 진행할 예정이다.
기존 클라우드에서 테스트를 돌릴 때는 fastlane 을 사용했었는데,
이번 github action 에서는 xcodebuild 커맨드를 사용할지 혹은 그대로 fastlane 을 구축할지 고민이였다.
그런데 Tuist Test 라는 것이 있었다.
우연히 발견했는데 원래 있었던건지? Tuist 4 에 추가된건지는 모르겠다.
그래서 무지성으로 돌려봤는데, 난 아무것도 안했는데 테스트 바로 성공해버림.
이건 삘이다! 싶어서 바로 이걸로 테스트 환경을 구축해보았음
Github Action 테스트 환경 구축
고민이였다. 나는 mise 로 tuist 최신버전을 설치했는데 클라우드에서도 동일하게 해야하는건가?
찾아보니 mise 가 이러한 빌드 환경을 동일하게 구축할 수 있는 툴이였다.
기존 tuist 에서는 .tuist-version 파일에 tuist 버전을 명기해두었는데,
mise 를 이용해 설치하면 아래처럼 mise 가 관리하는 tool 의 버전이 작성된다.
그리고, mise install 을 이용해 해당 tool 에 맞는 버전을 자동으로 설치해주더라. 상당히 편리해짐
그래서 워크플로우를 짤때도 mise로 구축한 환경을 이용하면 더이상 버전을 신경쓰지 않아도 된다.
그렇게 구축한 워크플로우는 다음과 같다. 찾아보니 Tuist 가 만들어둔 워크플로우 샘플이 있어서 참고했다.
name: unitTest
on:
push:
branches: [ "develop" ]
pull_request:
branches: [ "develop" ]
jobs:
run-unitTest:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Install Mise
run: |
curl https://mise.run | sh
mise install
- name: Install Tuist dependencies
run: mise x -- tuist install
- name: Run tests
run: mise x -- tuist test Weave2-UnitTest --no-selective-testing
워크플로우는 간단하다.
1. mise 설치
2. depencencies 설치
3. 테스트 수행
물론 아직까지 테스트코드 하나이기도 하고, 개발이 진행되면 워크플로우는 수정될수도 있지만 잘 작동된다.
테스트가 실패하도록 코드를 수정해 Pull Request를 생성하면
의도한대로 테스트가 실패하는 것도 확인할 수 있다. - PR#1
처음 예상했던 것 보다 쉽게 Github Action 을 구축을 했다.
이렇게 바닐라 상태에서 개발 환경 설정을 먼저 해두니 깔끔하고 빨리 작업을 하고 싶은 느낌이다.
추후 배포까지 작업한다면 fastlane 을 넣어주는게 나을수도 ?!
'iOS' 카테고리의 다른 글
[iOS] demical keyboard type 에서 소수점이 comma로 나온다 (소수점 표기법) (0) | 2024.10.03 |
---|---|
[iOS] Open API Generator 로 네트워크 코드 자동생성(1) (2) | 2024.09.04 |
[iOS] Dateformatter 가 고장나서 이상했던 경험 (0) | 2024.08.07 |
[iOS] 단일타겟 프로젝트를 멀티모듈로 바꾸었다. (1) | 2024.05.16 |
[iOS] SwiftUI에서 커스텀 Alert 만들기(Animation도) (0) | 2024.05.01 |
- Total
- Today
- Yesterday
- watch connectivity
- 소수점
- Xcode15
- open-api-generator
- musicplayer
- 토큰
- retry
- easy cue
- IOS
- watchOS
- demical
- 2024년
- auth
- locale
- Swift
- flo
- Xcode
- 애플워치
- SwiftUI
- keyboardtype
- 회고
- OAS
- AVFoundation
- KVO
- openapi-generator
- 애플워치 데이터 전송
- TextField
- avplayer
- DateFormatter
- swift날짜
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |