ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift Fastlane + SwiftLint + GitlabCI 연동하기
    개발/Swift 2021. 4. 9. 17:05

    Modern Collection View 와 MVVM 패턴 가이드

     

    [iOS] Modern Collection View & MVVM 패턴 가이드 - 인프런 | 강의

    MVVM 패턴과 Modern Collection View를 사용해 네트워킹을 구현하고, 다양하고 동적인 Collection View를 자유자재로 다룰 수 있게 됩니다., Swift iOS UI, 제대로 다루는 핵심 기술! 📲 iOS Swift 레이아웃 구현을

    www.inflearn.com

     

    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에 넣어주면 된다.

    1. AppleId 비밀번호

    ENV["FASTLANE_PASSWORD"] = "AppleId 비밀번호"

    1. Match 비밀번호

    ENV["MATCH_PASSWORD"] = "Match 비밀번호"

    1. Application 비밀번호

    이 비밀번호는 사용하고 있는 Apple Id 에 들어가서 받아야한다.

    https://appleid.apple.com/

     

    앱암호 → 암호생성 → 레이블지정(나는 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 가 돌아갈 환경에 세팅 되어야 할것들이다.

    1. xcode 12 (낮은버전은 일부 pod이 install 실패함)
    2. install cocoapods
    3. apple id spaceauth
    apple id spaceauthfastlane spaceauth -u 애플계정

    4. 애플계정 이중인증 때문에 해줘야 한다.

    5. version number

    xcode 를 실행하여 아까 로컬에서 진행했던 버전넘버 세팅을 해준다.

    project 는 Users/uesr/bulilds/ 에 있다.

    developer.apple.com/library/archive/qa/qa1827/_index.html

    댓글

Designed by Tistory.