[CI] Swift Github Action 적용기
이번에 PR을 날리면 자동으로 빌드를 돌려서 develop이 박살나는지 확인해주는 CI를 적용해보았다.
적용해보면서 겪은 문제들과, 구글링해도 나오지 않던 바보같은 실수를 다른사람들은 하지 않았으면 하는 마음에 작성해본다.
우선은 특정 브랜치를 생성해서 진행한 게 아니라 develop 브랜치에서 진행했다.
그 이유는 develop에 들어갈 때 적용이 되는데,
새로 브랜치를 만들면 CI 추가 작업하고(한번에 된다는 보장이 없음. 분명 실수를 하기 때문에), develop에 PR날리고, 그 PR이 develop에 merge가 되어야 그 때부터 테스트를 할 수 있기 때문에 번거로워서 develop에서 작업했다.
우리팀 규칙으론 develop에서 작업은 원칙적으로 금지였지만, CI관련 작업이었고, 현재 앱 심사 제출해놓고 살짝 뜬 기간이 있어서 후딱 설정했다.
Github Respository에서 Action 탭에 들어간다.
자동으로 현재 Repository에 맞는 언어를 추천해준다.
난 현재 Swift로 개발중이기 때문에 Swift를 선택한다.
Configure 버튼을 누른다.
위와 같은 yml 파일이 뜰 것이다.
느낌적으로 위에서부터 훑어보면
현재 프로젝트 Repository 이름 / .github / workflow / swift.yml
swift.yml 에서 swift는 이름을 마음대로 설정해줘도 상관없다.
난 Build로 이름을 지어줬다. (본인 원하는대로 하면 된다)
여기서의 언어는 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: Maddori.Apple Swift-Builder
on:
push:
branches: [ develop, main ]
pull_request:
branches: [ develop, release, hotfix, feature ]
jobs:
build:
runs-on: macos-latest
steps:
- name: 👻Checkout Source Code👻
uses: actions/checkout@v2
- name: MaddoriApple Build Tests
run: |
xcodebuild build -project ./Maddori.Apple/Maddori.Apple.xcodeproj -scheme Maddori.Apple -destination "platform=iOS Simulator,name=iPhone 13,OS=latest"
xcpretty --color --simple
위에서 부터 보면 on이 트리거가 되는 부분인데 push와 pull_request가 생성되었을 때 작동하는 트리거이다.
현재 push는 develop, main 브랜치에 적용해뒀고, pr은 develop, release, hotfix, feature 브랜치에 적용해 두었다.
jobs 부분은 돌아가는 빌드의 내용이다.
runs-on은 최신 mac os 버전으로 돌린다는 의미고,
steps은
테스트?? 가 되는 부분이다.
난 develop이 무사히 빌드가 되는지 확인하고 싶었다.
그래서 눈여겨 봐야할 코드 부분이
xcodebuild build -project ./Maddori.Apple/Maddori.Apple.xcodeproj -scheme Maddori.Apple -destination "platform=iOS Simulator,name=iPhone 13,OS=latest"
이 부분이다.
난 이 부분에서 여러번 막혀서
9번 만에 이유를 깨닫고 성공했다..
CI를 적용하는 다른 블로그를 보면
예시1)
run: |
xcodebuild clean test -project example.xcodeproj -scheme example -destination "platform=iOS Simulator,name=iPhone 11"
예시2)
xcodebuild clean test -project example/example.xcodeproj -scheme example -destination 'platform=iOS Simulator,name=iPhone 11 Pro,OS=14.4'
이런식으로 clean test 라고 적혀있다.
내가 막힌 부분
test 가 적히면 test코드를 만들어 줘야한다.
그래서 다른사람들 프로젝트를 보면
이렇게 테스트 코드를 작성해져있다.
나는 이 부분에서 계속 막혀서
이 에러를 계속 만났다.
아무리 구글링 해봐도 해당 에러를 알려주는 부분이 없었다.
그래서 위의 프로젝트를 직접 다운 받아보고 scheme을 보니까 각각의 scheme이 있었다.
(3가지의 Scheme이 있었음)
위의
run: |
xcodebuild clean test -project example.xcodeproj -scheme example -destination "platform=iOS Simulator,name=iPhone 11"
위의 test라는게 example라는 scheme의 테스트를 진행한다는 얘기였는데
우리의 프로젝트에는 하나밖에 없었다.
그래서 계속

이런 내용을 보게 되었고, 난 테스트 코드를 만들지 않았기 때문에 이게 내 얘기구나라는걸 바로 알게되었다.
그래서 clean test 코드가 있던 부분을 없애고
xcodebuild build -project ./Maddori.Apple/Maddori.Apple.xcodeproj -scheme Maddori.Apple -destination "platform=iOS Simulator,name=iPhone 13,OS=latest"
build 를 추가했다.
그러니 매우 잘 됐다.
내가 놓친 핵심
다른 블로그 글들을 참고는 했지만, 완벽히 똑같이 따라하지 않고 내 입맛대로 하려다보니 문제가 발생했다.
처음 적용해보는 문제였기 때문에, 왜 안되는지 이유를 찾기가 어려웠다.
나같이 여러 블로그들 같이 보면서 적용해보는 사람이라면 충분히 겪을만한 문제인 것 같다.
Test코드를 만들어 뒀다면 test를 적어도 되지만, 그냥 빌드를 확인하고 싶은거라면 build로 적길 바란다.
추가적으로 실수할 수 있는 부분들
xcodebuild: error: ‘./Maddori.Apple.xcodeproj’ does not exist.
이런 에러가 뜬다면
xcodebuild build -project ./Maddori.Apple/Maddori.Apple.xcodeproj -scheme Maddori.Apple -destination "platform=iOS Simulator,name=iPhone 13,OS=latest"
이 부분을 자세히 보면 좋을 것 같다.
이렇게 한 번 더 들어가서 .xcodeproj를 적은 이유는 간단하다
요기 안에 들어가서
xcodeproj 파일이 있기 때문이다
한 마디로 한 뎁스가 더 있기 때문이다.
그래서 한 뎁스를 더 적어준다면 해결된다.
github : https://github.com/DeveloperAcademy-POSTECH/MacC-Team-Maddori.Apple