1. Xcode Cloud가 뭔데용?
헤수몬이 언제 이거 좋다고,, 한 적이 있어 궁금해서 해보자해보자 했던 것... 함 공부 트라이 해봤다..
➰ Xcode에 내장된 지속적인 통합 및 배포 서비스(CI/CD)로, Apple 개발자를 위해 특별히 제작되었습니다.
앱을 빌드하고, 병렬로 자동화된 테스트를 실행하고, 테스터에게 앱을 배포하고, 사용자 피드백을 보고 관리하는 데 도움이 되는 클라우드 기반의 도구를 통합하여 고품질 앱을 개발하고 배포할 수 있습니다. 라고 나와있다.
일종의 데브옵스 시스템, CI/CD?
CI Continuous Integration 지속적 통합
한 줄로 개발 변경 사항을 꾸준히 커밋하고 병합하고 이 단계에서 테스트해보며 오류가 없는지 체크하는 것
- 단위 테스트 같은 자동화된 단계를 통해 안정성을 유지하고, Git Branch의 여러 변경 사항을 병합 할 수 있는 개발 관행
- 개발팀이 작은 변경 사항을 구현하고 코드를 깃 레포에 자주 커밋하도록 유도하는 코딩 철학, 관습
- 각자가 작업한 코드를 통합해서 출시하는데 코드에 문제가 없는지 확인하는 과정이 없으면 실제 서비스에 오류가 발생할 수 있고,
- 소규모 소프트웨어에서는 가능하지만 규모가 커질수록 무리가 있다.
- 수시로, 지속적으로 해야 하지만 그때 그때 매번 거치기는 번거롭기에 이걸 자동화해줄 필요가 있지
CD Continuous Deployment / Delivery 지속적 배포
한 줄로 설명하면 앱을 프로덕션에 푸시하는 것을 자동화하는 것
- 테플에 빌드/배포를 포함한 릴리즈 프로세스의 대부분을 자동화할 수 있는 개발 관행
- CI가 끝나는 곳에서 시작 → CI가 성공적으로 이뤄지면 CD가 발생하는 것
Xcode Cloud는 지속적 통합을 기반으로 프로젝트를 빌드, 테스트, 배포 및 모니터링을 통해 피드백을 수집하고, 신속하게 반복하기 위한 완전한 개발 파이프라인 기능도 제공한다.
빌드 - 테스트 - 릴리스 - 배포 단계를 거치는 파이프라인 단계...
워크플로우를 자동으로 제공해주려면 Github 베이스의 Git Repo가 있어야 된다고 한다.
이런 CI/CD 파이프라인이 왜 필요할까?
- 높은 품질의 코드
- 쉬운 접근성
- 신뢰할 수 있는 버전 관리
- 빠른 피드백
- 짧은 테스트 주기
- 개발 민첩성 향상
워크 플로우?
수행할 작업과 시기를 알려주는 환경 설정
워크 플로우 실행 결과를 빌드라고 한다.
앱은 자동으로 생성된 기본 첫 번째 워크 플로우로 시작한다.
메뉴
- General : 워크플로우의 이름과 설명
- Environment : 엑코, 맥OS 버전을 구성하고, 환경변수를 커스텀할 수 있다.
- Start Conditions : 브랜치랑 빌드할 변경 조건들
- Actions : 빌드, 분석, 테스트, 아카이브 선택 가능
- 앱 스토어 or 테플에만 아카이브해서 업로드할 건지 선택 가능
- Post-Actions : 결과를 통보하거나 전달하는 기록하는 액션들 (내부 테스터 그룹 선택 가능)
GithubAction 상에서는 워크플로우를 실행시키기 위해서는 아래와 같이 해준다.
on: 언제 행동을 트리거시킬지에 대한 문법
앱스토어 커넥트
여기서 개인 알림 설정, 슬랙알림까지 설정할 수 있다.
그래서 소스 코드에 대한 수정 사항이 있으면 빠르게 알 수 있다.
보호
엑스코드 클라우드의 모든 측면은 데이터가 보호되도록 설계되어 있다. 역시 애플…
그래서 빌드 환경은 임시적이라 소스 코드가 포함된 프로젝트들의 빌드 넘버 간은 처음부터 해체되고 생성된다.
즉, 소스 코드는 저장되지 않고 임시 빌드 환경 내에서만 코드를 가져온다.
빌드 데이터는 암호화되어서 전용 CloudKit 데이터베이스에 저장되어서 개인이 스스로 데이터를 통제할 수 있다.
통제권 아래에 삭제할 수 있고, 완전히 제거 가능
2. 해보자
default workflow는 메인 브랜치에 머지하는 경우에 앱을 빌드한다.
엑코클라우드는 빌드가 실패할 때 이메일로 알려준다고 한다.
Report 네비게이터에는 Local, Cloud 두 개의 탭이 있는데,
- Local에는 컴퓨터 로컬 상에서 빌드하는 모든 걸 다 보여주고
- Cloud에서는 Xcode Cloud가 빌드하는 걸 보여준다.
1. Create Workflow
Xcode - Product - Xcode Cloud - Create Workflow
➰ 여기서 기나긴 오류?가 있었는데, 모냐면,,, Team에 개발자팀을 넣어줘야 하는데 계속 내 팀계정이 안뜨는 것이었다. 구글링을 해보니 애플아이디 이슈인 것 같아서 Xcode Setting Account에서 내 애플아이디를 확인해줬는데 만료? 로그인 만료돼서 다시 로긘을 해주고 엑코를 껐다가 다시 켜니까 계정이 들어와졌다.
그 다음으로 엑코클라우드가 깃헙에 대한 권한을 요구하고 → App Store Connect 창이 켜져서 아래와 같은 화면이 보인다.
- 코드, 메타데이터, 풀리퀘에 대해 읽는 접근이 가능해지고
- 커밋 상태와 체크?사항들에 대해 읽고 쓰는 접근이 가능해진다.
- 여기까지 오면 워크플로우를 만들고, 실행할 수 있는 단계다.
- Start Build를 누르면 Xcode Cloud는 빌드를 시작하고, Xcode의 빌드 정보를 전환한다. 빌드가 완료되면 이메일을 보낸다고 한당..
2. App Store 배포까지 가능
커밋 후 푸시를 하면 자동적으로 엑코클라우드가 실행된다. 그리구 로그를 확인해볼 수 있으며
post actions, actions에서 워크플로우를 설정한 것에 따라 테플/앱스토어에 업로드된다.
3. 내가 만난 오류.. 미해결 상태
unable to open configuration settings file
엑코클라우드 빌드 상에서 podfile에서 오류가 발생한 것
앱 빌드 자체에는 문제가 없는데 구글링 해보면 embed pod framework 관련 부분에서 문제가 발생하는 것 같다.
pod 재설치, 업데이트 등 뭘 해봐도 안돼서 아직 미해결 상태인데,,
혹 아시는 분 있다면 댓글 남겨주시길 바랍니다...
4. 느낀 점
기존 책갈피는 fastlane을 통해 자동배포를 해주고 있다. fastfile을 작성하는 부분이 나로서는 까다롭고 어렵웠고, 초반에 빌드가 되지 않는 경우에는 이유를 찾기까지 시간 소모가 컸다. 그 외로는 설정해줄 건 많지 않아서 괜춘..
그 후에는 사실 fastlane beta 하나로 동작하니까 간편한 건 사실
Github Action 같은 경우는 제대로 해본 적은 없지만 맛본 경우에 너무 극악무도였다.
Xcode Cloud 같은 경우는 GUI로 돌릴 수 있다는 점이 더 매력적이다.
또 깃허브랑 연동해서 깃허브에 빌드 성공/실패 여부가 보인다는 점과, 엑스코드 네비게이터에서 로그 확인이 가능하다는 점, 워크플로우를 수정해 엑스코드에서 테플/앱스토어로 아카이브해서 테스터들에게 업로드해줄 수 있다는 점도 장점이라고 느꼈다.
이메일로 날려주는 것도 장점이라고 해도 될까? 화나는데…
앱스토어랑 연동되어서 앱스토어에서도 상세하게 로그 내역을 볼 수 있다는 것도
이전에 서버 개발하면서 CI/CD 파이프라인을 만져본 때와 비슷하다고 느꼈다.
근데 아직 구글링하면 많이 나오지 않다는 점..? 팀에서 어떻게 사용하는지는 아직 좀 더 공부해 볼 필요가 있지만 애플에서 제공하는,
그리고 기존 데브옵스 장벽이 높아서 CI/CD가 너무 멀게만 느껴졌는데 접근성이 좋은 것 같다.
근데 아직 제대로 빌드 성공을 못 봐서 그 담단계로 못 넘어가서 아직... 제대로 모르겠ㅠㅠㅠㅠㅠㅠㅠ
+) 이슈 해결
지난 Xcode Cloud 글에서는 이슈 미해결로 글을 마무리했다.
사실 그냥 대뜸 Xcode Cloud를 알게 돼서 대뜸 프로젝트에 적용하게 된 것이었는데,
해당 글에 고맙게도 잉환이가 댓글로 해결법을 달아줘서 이슈를 해결하게 되었다.
문제는 코코아팟은 custom build script를 사용하여 설치를 해줘야 한다는 점이다.
Xcode Cloud가 빌드를 수행하는 데 사용하는 임시 빌드 환경에는 코코아팟이 포함되어 있지 않다.
근데 Homebrew를 사용해주면 설치가 가능하다.
이 Homebrew로 설치를 해주려면,
- ProjectName.xcworkspace이 있는 같은 디렉토리에 ci_scripts 라는 폴더를 만든다.
- 실행 가능한 셸 스크립트를 만들고 이름을 지정 하고 디렉터리에 저장한다.
- Xcode에서 사용자 지정 스크립트를 열고 Homebrew로 도구를 설치하는 데 필요한 명령을 추가한다.
위 단계를 아래에서 하나씩 살펴보면,,,
1. 해당 스크립트를 실행시키기 위해서는 ProjectName.xcworkspace 가 있는 파일 경로에 ci_scripts 폴더를 만들어 주고,
2. 내부에 아래와 같이 shell 파일을 만들어준다.
3. 그리고 해당 경로에서 파일을 작성했으면 아래와 같이 터미널에서 아래처럼 명령어를 입력해 쉘파일이 실행가능하게 해준다.
4. git repo에 추가해서 다음 빌드 시에 xcode cloud가 자동으로 실행하게 해야 한다.
!!!! 이 때 주의할 것은 podfile.lock은 gitignore로 추가해서 제외시켜야 한다.
여기서 나오는 script 파일은
Xcode Cloud 워크플로우에 특정 작업을 수행하는 파일이다.
Xcode Cloud가 스크립트를 실행하는 시기를 결정하는 아래 3개의 스크립트가 있는데 이름은 아래처럼 지정되어있다.
- ci_post_clone.sh : Xcode Cloud에 소스 코드를 가져온 후
- ci_pre_xcodebuild.sh : xcode 빌드 전
- ci_post_xcodebuild.sh : xcode 빌드 후
그러나 두 번째 이슈가 발생했다. 이건 아무래도 gitignore 파일에 들어있는 파일을 찾지 못해서 발생한 문제인 것 같은데 ..
환경 변수를 통해서 Xcode Cloud environment 부분에서 해결해주면 될 것 같은데.. 아직 모르겠당... 이것도 차차 해결해봐야겠다.
'⭐️ 개발' 카테고리의 다른 글
[질문정리] 객체지향 프로그래밍 (0) | 2023.02.09 |
---|---|
[질문정리] 클래스와 구조체(feat. 메모리영역, COW, Method Dispatch) (0) | 2023.02.06 |
[개발용어] 터미널 명령어 : cd, pip (0) | 2020.07.06 |