🍎 iOS/iOS 심화 & 응용

[iOS] Xcode Cloud를 활용하여 iOS CI/CD 환경 구축하기 (feat. CI/CD Tool들 특징)

dev_zoe 2024. 3. 31. 23:41
반응형

1. iOS CI/CD 툴 선택 기준

1) Github와 연동되는가

2) Slack을 통해 팀에게 알릴 수 있는 Webhook 기능을 제공하는가

3) Test를 진행할 수 있는 환경인가

4) 소요되는 비용

 

2. iOS CI/CD Tools 특징

보통 Xcode cloud, Github Actions, Fastlane, Bitrise를 사용하는 것으로 보인다.

여기서 어떤 툴을 사용해야할지 선택해야하니 .. 다른 분들의 적용기들을 참고해서 대략적인 특징을 정리해보았다.

 

1) Github Actions

현재 회사 개발팀에서 활용하고 있는 배포 자동화 툴이다.

 

장점

- 아무래도 Github 자동화툴이니까 Github 내에서 심플하게 자동화 workflow 구축 가능하다는 점이 장점

- Github에서 다양한 Template 제공하기 때문에 다양하게 커스텀 가능

- 많은 클라우드 모니터링 서비스 등의 인프라와의 Integration을 다양하게 지원한다는 점

 

단점

- 스크립트로 인한 설정 -> 초기 러닝커브가 존재함

 

2) Xcode cloud

https://developer.apple.com/kr/xcode-cloud/

Apple이 공식적으로 제공하는 Xcode 내장 CI/CD 서비스

 

장점

- GUI 환경으로 환경을 구축할 수 있기에 스크립트를 공부하지 않아도 된다는 장점 + 초기 도입 리소스가 적게 들어감

- iOS 개발자 계정에 가입되어있는 팀은 월 25시간까지 무료 제공

 

단점

- 출시한지 얼마 안되어서 다른 서드파티보다는 커스텀이 어렵고, 단순히 브랜치의 특정 내용 변화가 생겼을 때 Action이 돈다든지 등 의 기능만을 제공한다는 점? => 그러나 이부분은 현재 회사에서 수립된 Git-flow가 복잡하지 않고, 테스트 환경이 매우 체계적이지는 않은 단계라서 단점으로 다가오지는 않았다.

 

3) Fastlane

 

장점

- 다양한 플러그인을 지원하고, 자료도 많아서 다양한 응용 가능

- Slack Webhook 지원

 

단점

- 스크립트로 인한 설정 -> 초기 러닝커브가 존재함

 

4) Bitrise

 

장점

- 직관적인 GUI를 통해 배포 자동화 구축 가능 -> 스크립트를 작성할 필요 없이 설정 가능하다

- Slack Webhook 지원

 

단점

- 팀 플랜은 유료임

- Fastlane에 비해 플러그인들이 한정적이어서 Github Action, Fastlane 만큼 다양한 응용은 어려울 수 있다?

 

3. Xcode cloud 선택 이유

위 사항들을 종합해보았을때, Xcode cloud를 통해 iOS CI/CD를 시작해보자는 생각이 들었다.

1) CI/CD를 처음 시작하는 입장에서, 러닝커브가 높은 걸 먼저 사용하기보다는 러닝커브가 가장 낮은 플랫폼으로 찍먹해서, 좀 더 고수가 되면? 아쉬운 점을 보완할 플랫폼을 시도해보고 그러면 되지 않을까 하는 생각

2) 25시간까지 무료! (iOS 앱 1개이기도 하고 배포를 엄청나게 하지는 않음)

3) 현재 회사 개발팀의 Git-Flow나 테스트 과정이 복잡하지 않기 때문에, 다양하게 응용할 필요까지는 아직은 없다는 점?

 

4. Xcode cloud를 통한 CI/CD 환경 구축

1) Integrate > Create Workflow 클릭

 

그러면 Workflow를 구성할 프로젝트를 선택할 창이 뜰텐데, CI/CD 환경을 구축할 프로젝트를 선택하면 된다.

 

2) 그러면 하단과 같은 Workflow 설정 창이 뜨는데, workflow 이름과 설명 / git 저장소 / 프로젝트를 설정하면 된다.

 

3) Environment는 빌드하는 환경을 설정하는 것으로, 나는 여기서 따로 뭘 더 건들이지는 않았다.

 

 

4) Start Conditions에서는, 말그대로 Action이 돌 Start 조건을 선택할 수 있게 되어있다. 나는 main에 PR 머지한 다음에 로컬 테스트 후, Git tag를 걸어 빌드 및 배포하고 있기 때문에 Tag Changes를 선택했다.

 

공식문서에 설명이 잘 되어있어서 해당 문서를 참고하면 좋다.

https://developer.apple.com/documentation/xcode/configuring-start-conditions/

 

5) Actions는 위에서 설정한 Start Condition일 때 실행할 Action을 정의하는 곳으로, Build / Test / Analyze / Archive 기능을 모두 제공한다.

Analyze 기능이 뭘까 알아보니 메모리 누수 혹은 다른 이슈는 없는지, 앱의 성능을 분석하는 기능을 제공한다.

https://developer.apple.com/documentation/xcode/configuring-your-xcode-cloud-workflow-s-actions

 

나는 우선 찍먹이니까 Build / Archive 기능만 세팅해두고, 이후 테스트 환경이 마련되면 Test / Analyze Action도 추가하려고 한다.

 

6) Post-Actions는 Action이 정상적으로 돌고 난 이후에 할 이후 액션에 대해 정의하는 곳이다. Notify에서는 Slack 연동이 가능하다.

그 후 Save를 누르면 간단하게 workflow 설정이 완료된다.

 

이후 워크플로를 편집하려면 AppStoreConnect에서 하거나 혹은 Xcode의 맨 오른쪽 아이콘, Integrate 탭에서 관리할 수 있다.

 

5. 느낀점

- 여태 배포하려면 Archiving 하는 과정에서 블락되어 시간이 많이 소요되는 상황이었는데, workflow만 잘 설계하면 트리거가 작동된 이후에 나는 해야할 일을 마저 하고있고, 액션이 저절로 돌아가서 생산성이 향상됨을 느낄 수 있었다.

- Xcode Cloud가 GUI로 기본 필요한 기능들은 다 세팅할 수 있어서 CI/CD 입문하기에는 가장 좋은 툴같다.

- 다만 버전관리를 좀 복잡하게 하는 팀이나 개발팀 인원이 많은 대규모 팀은 좀 더 복잡한 버전관리가 필요하므로 Xcode cloud가 적절하지 않을수도 있겠다는 생각이 들었다.

- 살짝 맛보기로 CI/CD를 경험해보았으니 아쉬운 점이 들면 다른 플랫폼도 접해보고 스크립트도 작성해보고 하면 좋을것같다.

 

Reference

https://medium.com/@talq44/xcode-cloud%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-ci-cd-%ED%99%98%EA%B2%BD-%EB%8F%84%EC%9E%85%EA%B8%B0-0-%EC%86%8C%EA%B0%9C%EA%B8%80-9b4b2b2abbc8

https://artieee.tistory.com/57#google_vignette

https://sujinnaljin.medium.com/ci-cd-github-actions-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-xcode-build-test-%EC%9E%90%EB%8F%99%ED%99%94-73b90a3dcc65

https://medium.com/@ajayrbhanushali/empowering-mobile-development-fastlane-vs-bitrise-9e31b0d9486d

https://developer.apple.com/documentation/xcode/configuring-start-conditions/

반응형