본문 바로가기

iOS

[iOS] XcodeCloud로 빌드, 테스트 자동화하기

이번에 가슴속 3천원 프로젝트에 Xcode Cloud를 찍먹 느낌으로 도입하게 되었어요.
도입하면서 왜 도입했는지, 어떻게 도입했는지를 간단하게 정리해보려 합니다.

1. Xcode Cloud란? / CI/CD의 필요성

애플 공식 페이지에서는 다음과 같이 정의되어있어요.

Xcode Cloud는 Xcode에 내장된 지속적인 통합 및 배포 서비스로, Apple 개발자를 위해 특별히 제작되었습니다. 앱을 빌드하고, 병렬로 자동화된 테스트를 실행하고, 테스터에게 앱을 배포하고, 사용자 피드백을 보고 관리하는 데 도움이 되는 클라우드 기반의 도구를 통합하여 고품질 앱을 개발하고 배포할 수 있습니다.

위 내용만 읽어보았을 때 기존의 다른 CI/CD 도구와 크게 다른점은 없다고 느꼈어요. 다른 도구들도 앱을 지속적으로 빌드해주고 테스트해주고 배포까지 자동화 해주기 때문이죠! 하지만 애플에서 직접 관리를 하기 때문에 믿을만하다! 라는 생각을 가지고 있긴 했지만.. 생각일 뿐 지금 사용하기 괜찮을 지, 어떻게 사용하는지, 장/단점이 무엇인지는 직접 체험해보려 합니다!

현재 상황에서 CI/CD도구의 몇가지 필요성을 느끼고 있어요!!😭

  • 피처 브랜치에서 PR을 생성할 때마다 앱 빌드 성공 여부를 알고싶다.
  • 피처 브랜치에서 PR을 생성할 때마다 테스트코드 성공 여부를 알고싶다.
  • 피처 브랜치에서 PR을 생성할 때마다 Lint를 적용해 자동으로 정렬해주었으면 좋겠다.
  • 릴리즈 브랜치에서 이슈들이 수정되면 Firebase Distribution 자동 배포가 되었으면 좋겠다.

위와 같은 작업들이 자동으로 동작한다면 지금보다는 많은 시간들이 절약되고 절약된 시간들은 개발 효율성을 늘려준다고 생각해요!
하지만 처음 도입시점부터 모든 것을 해결하려고 하다간 작업량이 많아지는 것을 알기에.. 위에 2가지 문제만 이번에 해결해보려합니다.

2. 사용 방법

2-1. Remote repository와 연동

기본적으로 Xcode Cloude를 사용하려면 리모트 레포가 필요해요. Xcode Cloud는 워크 플로우를 실행하기 전 리모트 레포에서 클론해서 진행을 합니다. (생각해보니 로컬에서 돌리면 클라우드가 아니겠네..?)

Product > Xcode Cloud > Create workflow를 선택합니다. (리모트 레포를 만들고 진행하면 정상 진행됩니다.)
그러면 아래 사진과 같이 어떤 프로적트인지 선택하라는 화면이 나오게됩니다. 당연히 내가 만든 앱을 타겟으로 해야하니 프로덕트 선택 후, Next 클릭!
(지금 글을 쓰는 시점에 가슴속 3천원은 이미 설정을 완료했고.. 블로그를 쓰기 위해 다른 앱을 설정하며 이미지를 가져오고 있어요 😭)

그러면 다음과 같이 워크플로우를 리뷰해달라는 창이 나옵니다.
여러가지 항목들이 나오는데 하나씩 자세히 보시죠.
EditWorkflow 버튼을 통해서 워크 플로우들의 요소들을 디테일 하게 변경할 수 있습니다.

Start Condition

언제 Actions들이 실행되어야 하나요?
여러가지 실행 조건들을 설정할 수 있습니다.

  • 브랜치에 변경사항이 적용된 경우(브랜치 종류와 특정 파일 및 폴더 변경사항을 트리거로 설정할 수 있습니다.)
  • PR이 만들어지거나 PR에 변경사항이 생긴 경우 (Source branch와 Target branch도 설정할 수 있습니다.)
  • 태그가 변경된 경우
  • 특정 스케쥴에 맞춰서! (ex. 매주 수요일 13:00)

Environment

어떤 환경에서 실행되어야 하나요?
Xcode와 macOS의 버전을 선택할 수 있습니다. 아무래도 개발 환경의 버전은 고정되어있으니 개발환경과 동일하게 설정해주면 되지 않을까 생각합니다. 또한 새로운 버전이 나왔을 때, 새로운 버전에서도 빌드가 되는지, 테스트가 동작하는지 확인하기도 용이하겠네요!

Actions

어떤 Action들이 실행되어야 하나요?
실제로 워크플로우가 해야하는 행동들에 대해서 정의할 수 있습니다. 지금은 간단하게 빌드만 되는지 확인해보겠습니다.
여러개의 액션들을 한번에 설정하기도 가능합니다!

  • Build: 빌드가 가능한지 확인하기
  • Test: 테스트 코드들을 실행시킵니다. 
  • Analyze: 지금 코드에 메모리 누수가 있는지, 혹은 다른 문제들이 있는지 확인할 수 있습니다.
  • Archive: 아카이브를 실행할 수 있습니다. (앱스토어에도 업로드 가능)
  • (각각의 액션들에 대해서 플랫폼, 스키마, 빌드 타겟을 설정 할 수 있습니다.)

Post-Actions

Action들이 끝나고 해야할 일들이 있나요?
알림, 테스터들에게 배포등 마무리 행동을 설정 할 수 있습니다.

  • 이메일 알림 발송
  • 테스트 플라이트 외부 그룹에게 배포
  • 테스트 플라이트 내부 그룹에게 배포

위와 같이 설정하고 Next 버튼을 누르면 Xcode workflow가 모두 설정됩니다!
생각보다 간단해서 놀랬습니다 ㅋㅋ 
빌드액션에 경우에는 엑코에서 빌드하는 것과 동일한 액션이고, Test Action의 경우에는 테스트 코드 실행하는 것과 동일해서 추가적으로 해줘야하는 액션이 없더군요,, 설정 이후에 Start Conditions에 설정한대로 해당 조건을 발생시켜주면 알아서 동작합니다.

2-2. Appstore Connect에서 Workflow 결과 확인하기

위에서 설정한 Start Condition대로 만들어두면 워크 플로우가 자동으로 실행될테니 우리는 결과를 Appstore connect에서 확인만 하면 됩니다.

워크플로우별로 성공 여부를 확인할 수 있더군요!
빌드별로 경고, 컴파일에러, 테스트 실패수 등을 확인할 수 있습니다. 그 외에 액션별로 소요한 시간들도 확인할 수 있었습니다. 

3. Xcode Cloud 왜 쓰는가?

이렇게 Xcode Cloud를 사용해보았는데요,, 사용하면서 쓸만했는지 개인적인 관점에서 장/단점을 정리해보았습니다.
아직까지 단점을 해결하지 못해서 조금 아쉽긴 하지만 처음 CI/CD 파이프라인을 구성하는 단계라면 써드파티에서 어렵게 설정하는 것보다 Xcode Cloud를 통해 손쉽게 설정하면서 이해하는 것이 좋아보이네요!

3-1. 장점

  • 워크플로우 설정이 편리하다.
    • 모든 설정을 커맨드라인이 아닌 GUI로 설정할 수 있습니다.
    • Xcode Cloude내에서 모든 것을 해결할 수 있다.
  • 애플이 지원한다.
    • 3rd-party가 아니라 First party죠!! (디팬던시가 사라지는 것만으로도 마음이 편-안해지네요)

3-2. 단점

  • Github의 PR과 연동해서 사용하면 더할나위 없이 좋을 것 같은데 아직까지 방법을 찾지 못했습니다.
    • Github Action과 동일하게 PR생성 시, Work flow가 자동으로 실행되고, 실패한다면 머지할 수 없도록 하는 기능을 Xcode Cloud를 사용해서 구현하고 싶은데, 아직 방법을 찾지 못했습니다.