Search

맥이 없어도 괜찮아. 깃헙 액션이 있잖아.

date
2022/07/31
tags
유니티3D
자동화
깃헙
CI
4 more properties
깃헙 액션을 사용하면 맥이 없어도 iOS 빌드를 만들고 배포할 수 있어요. 물론 조금은(?) 복잡한 설정 과정을 견딜 수 있다면요! 유니티 게임을 iOS 용으로 빌드 배포하는 과정을 함께 따라가볼까요?

근데 왜? 굳이..

맥은 비싸니까요. 제 맥은 오래되어서 더 이상 폰에 빌드를 설치할 수 없어요 ㅠ. 폰이 iOS 15.5라서 Xcode 13.4와 macOS Monterey 12가 필요하지만, 제 맥은 레티나 맥북 프로 1세대 (2013)라서 Monterey를 설치할 수가 없다고 합니다.
그리고 빌드 자동화는 해두면 좋으니까요. 설정할 때는 피곤하지만 은근히 시간을 벌어주는 것이 빌드 자동화인 것 같아요.

유니티 클라우드 빌드와 깃헙 액션

처음에는 유니티 클라우드 빌드(이하 UCB)를 알아봤어요. 아무래도 유니티 전용이니 설정이 수월하고 편리할 것 같았거든요. 그런데 막상 사용해 보니 빌드도 오래 걸리고 비용도 만만치 않네요. 프로토타입 수준의 작은 프로젝트 빌드에 25분 걸려요. 한 번 빌드에 약 2,500원이 드는 셈이에요.
그 외에도 몇 가지 불편한 점이 있었어요. 비교표를 한 번 볼까요.
UCB
Github Action
비용
Mac: $0.07 / min Windows: $0.02 / min 스토리지 비용은 못찾음
Linux: $0.008 / min Mac: $0.08 / min Windows: $0.016 / min $0.008 USD per GB of storage per day
무료 구간
없음
500MB 2,000 min / month
설정 편의
iOS는 기본적인 복잡함이 있으나 괜찮은 편
설정할 것이 많음 ⇒ 원하는 대로 확장하기 좋음
대기 시간
빌드 요청후 약 10분의 대기 시간이 있음
거의 없음
빌드 시간
약 26분 (약 2,500원)
리눅스에서 약 8분 + 맥에서 약 19분 (약 2,000원)
웹 반응성
유니티의 다른 서비스처럼 반응이 느림
쾌적
로그
빌드 완료 전까지 로그 볼 수 없음 타임스탬프가 없어서 어디서 시간을 쓰는지 알기 어려움
진행중인 로그 볼 수 있음 타임스탬프 있음
맥 사용료는 깃헙이 비싸지만 유니티 빌드 과정의 일부는 리눅스에서 돌려도 됩니다. 유니티를 빌드해서 XCode 프로젝트를 만드는 것은 리눅스에서도 가능해요. 그 이후에 XCode를 빌드하고 배포하는 과정만 맥에서 실행하면 비용을 절감할 수 있어요.

Game CI

깃헙에서 유니티를 빌드 하는 액션은 Game CI에서 제공합니다. 훌륭한 분들이에요!

유니티에서 XCode 프로젝트 생성

Game CI 문서를 처음 보고 좀 막막했어요. 하지만 두 개의 문서만 꼼꼼하게 읽고 따라 하면 됩니다. 처음으로 볼 문서는 유니티 빌드 문서에요. 내용이 많아 보이지만 사실 앞의 한두 페이지만 보면 되고 나머지는 레퍼런스에요.

XCode 프로젝트 빌드 및 배포

위 문서를 잘 따라 했다면 XCode 프로젝트가 생성되었을 거예요. 아래 문서는 fastlane과 match를 사용해서 XCode 빌드, 인증서와 프로비저닝 프로파일 발급, 앱스토어 및 테스트 플라이트 배포, ipa 빌드 등의 과정을 자동화하는 방법을 설명합니다.
fastlane은 구글에서 만든 오픈소스 프로젝트에요. 안드로이드나 iOS 빌드 배포의 자동화를 도와줍니다. 회사에서도 사용하는데 접근성이 좋은 참 잘 만든 툴이에요. match는 fastlane의 일부로, 인증서와 프로비저닝 프로파일의 발급 및 관리를 자동화합니다. fastlane은 match 외에도 사이닝을 도와주는 다양한 기능이 있어서 match의 사용이 필수는 아니에요. match가 좋은 툴이기도 하고 문서를 따라 하기에 좋으니 우선은 match를 사용해서 설정하시고 나중에 변경하시는 것을 추천드려요.
문서의 오류 부분을 수정하셔야 잘 동작합니다.
이 문서에서 2개의 오류를 발견했어요. 하나는 generate_certs.yml에서 BUNDLE_ID라고 된 부분을 IOS_BUNDLE_ID로 변경해야 합니다. Fastfile에서 환경 변수 이름을 찾을 때 IOS_BUNDLE_ID를 쓰고 있거든요.
또 다른 하나는 마지막에 나오는 main.yml에서 MATCH_DEPLOY_KEY를 정의하지 않고 있어요. HERE라고 한 부분에 MATCH_DEPLOY_KEY: ${{ secrets.MATCH_DEPLOY_KEY }}를 넣으시면 돼요.
그리고 몇 가지 주의사항을 말씀드리면, 최초로 match를 사용하기 전에 와일드카드가 아닌 App ID가 등록되어 있어야 합니다. 테스트 플라이트에 올릴 때는 1024 PNG의 아이콘이 프로젝트 세팅에 등록되어 있어야 합니다.

깃헙, 너로 정했다!

처음에는 UCB로 할까 깃헙 액션으로 할까 많이 고민했는데, 상세한 정보가 없는 상태에서는 올바른 판단을 하기 어렵다는 걸 체감했어요. 무료 구간의 유무. 실제 빌드 시간과 비용. 부분별로 OS를 다르게 쓸 수 있는지. 빌드 대기시간. 웹 서비스의 반응성 등을 고려해서 저는 깃헙 액션으로 정했습니다!