JEP's Diary

올해의 회사일의 목표, Xcode Cloud 사용해보기 본문

Development/개발일지

올해의 회사일의 목표, Xcode Cloud 사용해보기

지으니88 2023. 2. 8. 00:28

작년에는 회사에서 앱을 개발하는데 시간을 다 보낸 것 같다.

상반기에는 안드로이드 앱. 하반기에는 아이폰 앱. 

앱을 출시한 후에는 추가 기능 개발 하는데 집중하면서 리팩토링이나 더 디벨롭하거나 자동화 같은 것들은 시간을 핑계로 쌓아두게만 되었다.

 

그래서 올해는 CI/CD 를 구축해놓는 걸 목표로 한다.

CI/CD (Continuous Integration/Continuous Delivery)는 자동화하여 앱을 더욱 짧은 주기로 고객에게 제공하는 방법이고 CI/CD의 기본 개념은 지속적인 통합, 지속적인 배포이다. 

작년 하반기에 아이폰 앱을 만들면서 쭉 아이폰 앱 추가 개발을 맡고 있었기 때문에 아이폰 앱의 빌드,필수 테스트 통과,자동화 배포 구축할 것이다. 특히나 우리 앱은 자산 이동을 할 수 있기 때문에 잘못 이동 되면 대형 사고다.  따라서 자산 이동 결과가 제대로 되었는지를 테스트 할 수 있는 코드를 작성할 것이다. 그리고 이 테스트가 통과해야 배포될 수 있게 하고자 한다.

(매번 배포할때마다 자산 이동 테스트를 수동으로하는 것도 일이었다...)

 

오늘 퇴근 후에 Xcode Cloud 에 살펴보고 테스트 해보고는...우와ㅏㅏㅏㅏ

위에서 언급한 하고 싶었던 것들을 Xcode Cloud 에서 모두 다 가능했다. 너무좋은데?!! 하며 테스트하다가 아직은 build 실패를 4번 경험했지만 원인은 알았다. 워크플로우 설정을 다하고 나니 아래와 같이 나올때 기분이 뿌-듯 :) 

App.xcworkspace 파일을 찾지 못해 발생한 에러

워크플로우 설정에서 프로젝트 파일을 App.xcworkspace로 설정했는데 git 의 repository 에 우리는 xcworkspace를 올려놓지 않았다. 그래서 찾지 못해 에러가 나고 있다.

해결해보고자 했던 시도

1. 프로젝트 파일을 App.xcodeproj로 설정 했지만 repository에는 해당 파일이 없어서 에러발생.

2.App.xcworkspace 파일을 git repository에 업로드 후 빌드 시도..... 했으나 또 에러 ㅜ

전혀 해결책이 아니었다.

원인

라이브러리 의존성을 cocoapod로 사용하고 있었던 것이 원인이었다. 잘 생각해보면 로컬에서는 cocoapod로 라이브러리들을 설치하고 나서 프로젝트를 빌드를 하고 있다. 그러나 xcode cloud 환경에서 빌드를 한다고 생각하면 내가 업로드한 소스코드만 바라 보고 있기 때문에 pod install, pod update와 같은 작업을 하지 않고 프로젝트 빌드를 하려고 했기 때문에 당연히 에러가 날 수 밖에 없다.

xcode cloud 환경에서 cocoapod를 사용한 dependency를 참조할 수 없었던 것!

자세한 내용은 아래 링크! 

Review third-party dependencies

 

다시 해결해보자

2023.2.27 해결해보는과정중----

xcode cloud 환경에서 cocoapod install을 해주는 build script를 작성 할 수 있다.

처음에는 brew install cocoapods, pod install 만 했을때는 에러가 나서 제대로 동작이 안되었는데, 알고보니 그 환경에서의 brew가 오래된 버전이라 하여 brew update도 같이 해주니 잘되었다.

 

프로젝트 루트/ci_scripts/ci_post_clone.sh

# Update brew and install SwiftLint and Danger-swift
brew update
# Install CocoaPods using Homebrew.
brew install cocoapods

# Install dependencies you manage with CocoaPods.
pod install

ci_post_clone.sh 파일은 Xcode Cloud가 Git repository를 복제한 후에 실행된다. 소스코드를 복제한 후 cocoapod를 설치하고 사용하고 있는 라이브러리를 설치 하는 과정을 하도록 설정하는 것이다.

자세한 내용은 아래 링크!

 

Custom 빌드 스크립트 작성하기 

 

사용자 지정 빌드 스크립트를 사용하여 타사 종속성 또는 도구 설치

 

Making dependencies available to Xcode Cloud | Apple Developer Documentation

Review dependencies and make them available to Xcode Cloud before you configure your project to use Xcode Cloud.

developer.apple.com

 

그다음 만난 문제

private repository인 spec repo를 참조 못함

해결 방법은

apple develope 페이지에서 해당 프로젝트의 xcode cloud 설정 페이지로 진입하면 privete repository의 액세스 권한 설정을 할 수 있다. 거기서 모두 허용하도록 설정한다.

 

위와 같은 실패를 해결하고 마침내 Success 이라는 페이지를 만났다ㅏㅏㅏㅏ

빌드 후에 슬랙 채널로 알림 메시지까지 보내도록 설정했다.

매우매우 배포 설정이 편했던 Xcode Cloud....

 

참고

https://developer.apple.com/documentation/xcode/xcode-cloud-workflow-reference

https://kor45cw.tistory.com/307

 

Apple Developer Documentation

 

developer.apple.com

 

'Development > 개발일지' 카테고리의 다른 글

시간기준 때문에 생긴 이슈  (0) 2023.03.05
GitHub Copilot  (0) 2023.02.14
git flow 전략  (0) 2023.02.07
오늘의 Compose 키워드  (0) 2022.11.10
web3swift 3.0.4 적용 중...포기를 선언한 이유  (0) 2022.11.04