cchanmi
[iOS] Github Action 도입기 - build & test 본문
Smeem 프로젝트를 1년 6개월 동안 진행하면서 반복적인 빌드, 테스트 코드 후 통과 과정, 배포에 많은 시간이 소요됨을 느꼈습니다.
이러한 반복적인 과정들을 통해 불편함을 겪었고 해당 내용들을 자동화하면 어떨까?라는 생각이 들어서 Github Action을 통해 CI/CD를
이번 포스팅에서는 빌드와 테스트 코드 통과 과정을 자동화하는 내용을 작성하려고 합니다.
목표는 develop 브랜치로 push 하면 build와 테스트를 실행시키는 것이었습니다.
그렇다면 원하는 명령어의 workflow를 작성해 주어야 하는데... yml 문법은 들여쓰기가 문법이기 때문에 이를 유의하여 작성해 주어야 합니다.
# This workflow will build a Swift project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-swift
name: Swift
on:
push:
branches: [ "develop" ]
pull_request:
branches: [ "develop" ]
jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Set Xcode version
run: sudo xcode-select -switch /Applications/Xcode_16.app
- name: Resolve Dependencies
run: xcodebuild -resolvePackageDependencies
working-directory: ./Smeem-iOS
- name: Create Debug.xcconfig
run: echo "${{ secrets.DEBUG_CONFIG }}" > ./Smeem-iOS/Debug.xcconfig
- name: Build
run: xcodebuild clean test -project Smeem-iOS/Smeem-iOS.xcodeproj -scheme Smeem-Dev -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2'
smeem 프로젝트 같은 경우는 xcode 버전, 의존성, local로 들고 있는 config 파일들을 추가로 설정해 주어야 했기 때문에 해당 내용들이 추가되어 있습니다.
각자 본인 프로젝트에 맞는 설정을 입력하시면 될 것 같습니다.
xcodebuild는 xcode 프로젝트 및 workspace의 build, query, analyze, test, archive 작업을 수행할 수 있는 command입니다.
- name: ... 명령어는 Github Action이 실행될 때 분단을 나눠는 역할을 해 줍니다. 예를 들어 위에서의 yml 파일을 작성하고 이를 빌드한다면
이런 형태로 실행이 되며, 진행 상황이나 에러가 발생했을 때도 디버깅이 유용해서 - name: 문법으로 나눠서 하는 방법을 추천드립니다.
저는 xcodebuild를 통해 build, test를 자동화하기 위해 해당 명령어를 작성해 주었습니다.
- name: Build
run: xcodebuild clean test -project Smeem-iOS/Smeem-iOS.xcodeproj -scheme Smeem-Dev -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2'
차례대로 살펴보면
- clean -> build products 및 intermediate 파일을 build root에서 제거
- text -> 빌드가 성공적으로 진행된 후에 scheme과 destination을 지정하여 테스트 진행
이후로는 프로젝트 확장명을 입력하고
-project Smeem-iOS/Smeem-iOS.xcodeproj
그에 따른 스킴을 설정하고,
만약 본인 프로젝트가 dev, release로 나누어져 있다면 해당 상황에 맞는 스킴을 입력해야 합니다.
-scheme Smeem-Dev
그리고 destination을 통한 플랫폼, 기기명과 OS 버전을 명시해 주면 됩니다.
-destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2'
에러에 관한 내용은 다른 포스팅 글로 기록해 두겠습니다.
'iOS' 카테고리의 다른 글
[iOS] SwiftUI의 Property Wrapper (0) | 2024.12.10 |
---|---|
[iOS] Github Action 도입기 - build & test 과정에서 겪은 error 모음 (1) | 2024.12.01 |
[RxSwift] RxSwift의 메모리 누수에 대해서 (1) | 2024.09.08 |
[iOS] UIKit+Combine 환경에서 CollectionView Cell 바인딩 문제 해결 (1) | 2024.09.07 |
[iOS] RxSwift 정리 (1) | 2024.09.04 |