-
Swift Fastlane + SwiftLint + GitlabCI 연동하기개발/Swift 2021. 4. 9. 17:05
Modern Collection View 와 MVVM 패턴 가이드
Gitlab Runner 세팅
참조 : https://medium.com/@phanquanghoang/using-gitlab-ci-cd-fastlane-for-ios-project-part-1-5e7db82a3566
Gitlab Runner 를 우선 등록해줘야 한다. 등록은 실제 Runner 가 돌아갈 환경에서 등록해줘야 한다.
sudo curl — output /usr/local/bin/gitlab-runner <https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64> sudo chmod +x /usr/local/bin/gitlab-runner
sudo curl — output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64 sudo chmod +x /usr/local/bin/gitlab-runner
gitlab runner 를 다운로드 받은후에 gitlab runner 를 실행할 권한을 준다.
이후 register 를 실행한다.
gitlab-runner register
gitlab-runner register
등록을 하게되면 URL , Token 를 물어보고 description과 tag executor를 지정해준다.
description와 tag를 잘 지정해준다. tag는 이후 gitlab-ci.yml 파일에 들어갈것이다.
executore는 shell 을 사용했다.
URL과 토큰은 Setting → CI/CD → Runner에 가면 볼수 있다.
그러면 gitlab runner 는 등록이 완료된다.
Fastlane Init
해당 작업은 개발 환경에서 한다. 세팅에 관련된 Fastfile, Matchfile, Appfile 등은 git에 올라가야한다.
brew install fastlane fastlane init
brew install fastlane fastlane init
init 을 하게 되면 apple id 를 묻는데 입력 해주면 Fastfile / Appfile이 생성된다.
Appfile 에 들어가 app_identifier / apple_id / team_id 가 잘 들어가 있는지 확인해본다.
Fastfile 을 작성하기 전 fastlane match를 활용해 코드사이닝을 동기화 한다.
그러면 개발자 모두가 아닌 하나의 profile - certificate로 배포가 가능하다.
Fastlane match
우선 개인 레포지토리 하나를 파야한다.
여기에는 사용할 하나의 Provisioning profile 이 들어간다.
레포지토리의 권한은 Maintainer 이여야 가능하다.
repository를 개설했다면 match를 시작할수있다.
fastlane match init
fastlane match init
init을 하게되면 아까 만든 레포지토리 url 을 입력해준다.
init 이후에는 Matchfile 이 생성된다.
match를 시작하기전에 기존의 profile을 날리는것이 깔끔하다.
fastlane match nuke development fastlane match nuke distribution
fastlane match nuke development fastlane match nuke distribution
팀 에있는 모든 development , distribution Certicate와 Profile 들이 모두 삭제된다.
fastlane match development fastlane match appstore
fastlane match development fastlane match appstore
그후에 다시 생성해준다.
이때 암호를 의미하는 passphrase 를 지정해 주는데 잘 지정해준다.
그러면 나의 레포지토리에 cert 와 profile들이 잘 들어간다.
그리고 developer.apple 에 가면 Profile 과 Cert가 생성되어있다.
Fastfile 작성
fastfile 에는 버전과 빌드번호를 올려주고 코드사이닝을 불러와서 앱을 빌드후에 테스트 플라이트에 올리는것을 목표로 작성한다.
그전에 비밀번호를 ENV에 설정을 해줘야한다.
설정 방법은 저대로 Fastfile에 넣어주면 된다.
- AppleId 비밀번호
ENV["FASTLANE_PASSWORD"] = "AppleId 비밀번호"
- Match 비밀번호
ENV["MATCH_PASSWORD"] = "Match 비밀번호"
- Application 비밀번호
이 비밀번호는 사용하고 있는 Apple Id 에 들어가서 받아야한다.
앱암호 → 암호생성 → 레이블지정(나는 fastlane 이라 지정함) → 암호 확인
암호중 - 는 제외하고 16개의 캐릭터를 넣어주면된다.
ENV["FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD"] = "앰 암호"
다음은 lane 을 작성한다.
lane :beta do increment_version_number( bump_type: "patch" ) increment_build_number( build_number: latest_testflight_build_number + 1, ) sync_code_signing(type: "appstore") build_app(scheme:"패키지명") upload_to_testflight end
beta는 지정할 이름이다. "fastlane beta" 이런식으로 명령어를 치면 실행된다.
increment version number - bump_type: "patch" 는 세번째 숫자 ( 0.0.x ) 가 올라간다.
increment build number - testfilght에 올라가있는 빌드넘버를 가져와 1을 올려준다.
sync code signing : type appstore로 넣어주고 Matchfile 에도 type("appstore") 로 넣어준다.
이후에 fastlane beta 를 실행해 잘 진행되는지 체크한다.
에러
fastlane ($(MARKETING_VERSION)) does not respect the format A or A.B or A.B.C
fastlane ($(MARKETING_VERSION)) does not respect the format A or A.B or A.B.C
위와 비슷한 에러를 발견할시 developer.apple.com/library/archive/qa/qa1827/_index.html 를 참조해 해결한다.
Lint
린트 lane 도 있다. swiftlint.yml를 가지고 결과값을 보여준다.
lane :lint do swiftlint( mode: :lint, executable: "Pods/SwiftLint/swiftlint", reporter: "html", output_file: "fastlane/swiftlint-results.html", config_file: '.swiftlint.yml', ignore_exit_status: true ) end
fastlane lint 실행시 swiftlint-results.html 파일이 생성되고 결과를 볼수있다.
Gitlab-ci.yml 작성
stages: - test_flight variables: LC_ALL: "en_US.UTF-8" LANG: "en_US.UTF-8" before_script: - pod install test_flight_build: stage: test_flight artifacts: paths: - fastlane/screenshots - fastlane/logs script: - echo $PATH - fastlane beta tags: - ios only: - /^release-.*$/ - develop
stages: - test_flight variables: LC_ALL: "en_US.UTF-8" LANG: "en_US.UTF-8" before_script: - pod install test_flight_build: stage: test_flight artifacts: paths: - fastlane/screenshots - fastlane/logs script: - echo $PATH - fastlane beta tags: - ios only: - /^release-.*$/ - develop
테스트 용이라 develop 브랜치에도 적용했다.
스크립트 실행전 pod install을 실행한다.
따라서 Runner 가 도는 컴퓨터에 cocoapods가 설치 되어있어야 한다.
tags 에는 아까 만든 gitlab runner 의 태그가 지정되어있다.
script 에는 fastlane 명령어를 넣어줬다.
이후에 develop 브랜치에 push 이벤트가 일어나면 CI/CD 파이프라인에서 확인할수있다.
Runner 환경세팅
Runner 가 돌아갈 환경에 세팅 되어야 할것들이다.
- xcode 12 (낮은버전은 일부 pod이 install 실패함)
- install cocoapods
- apple id spaceauth
apple id spaceauthfastlane spaceauth -u 애플계정
4. 애플계정 이중인증 때문에 해줘야 한다.
5. version number
xcode 를 실행하여 아까 로컬에서 진행했던 버전넘버 세팅을 해준다.
project 는 Users/uesr/bulilds/ 에 있다.
'개발 > Swift' 카테고리의 다른 글
RxFlow 적용기 (2) 2021.05.25 Swift 커스텀뷰 만들어서 재사용하기 (UIButton) (3) 2021.04.22 Appstore 없이 Xcode 설치하는법 (0) 2021.04.09 Fastfile Gitlab ci 연동 에러 문제 해결방법 (0) 2021.04.08 fastlane 에 swiftlint 추가하기 (0) 2021.04.08