React Native (ios) 자동배포 with fastlane

우주개·2022년 8월 19일
0

서론

React Native앱을 빌드해서 성공적으로 배포를 끝마쳤다. 오예~
배포를 하기 위해서는 까다로운 심사를 받아야하지만 심사를 올리는 과정도 상당히 귀찮은 작업이다.

예를 들어 ios의 경우

  1. xcode를 연다.
  2. 앱을 archive해서 testflight에 올린다.
  3. testflight에 올리기 위한 무수한 yes버튼
  4. apple connect에 들어가서 수출규정 관련 문서 경고 체크를 한다.

이러한 과정을 거쳐야 testflight에 올리고 심사를 받을 수 있는 상태가 된다.

android의 경우는 좀 덜하다.

  1. app > build.gradle파일 내의 defaultConfig의 versionCode와 versionName 변경한다.
  2. android studio > Build > Generate Signed Bundle / Apk를 통해 aab파일을 빌드한다.
  3. aab파일을 내부테스트에 올린다.

이런 복잡한 과정을 거쳐야 심사를 받을 수 있는 상태가 되는 것이다.
이 과정을 명령어 한줄로 해결할 수 있는 라이브러리가 존재하니 그것이 바로 fastlane이다

공식문서



본문

안타깝지만 이 포스팅에서는 안드로이드는 다루지 않고 ios만 다루도록 하겠다. 안드로이드는 Google Cloud Platform과 함께 자동배포를 하는데, 인터넷에 여러 좋은 글들이 이미 많이 있으니 찾아보시길 바란다.

React Native를 다루는 여러분들은 이미 Mac을 사용중이라고 가정하겠다. 애플때문에 여러모로 귀찮은 일이 많다.

그리고 아마 mac을 사용중인 사람들은 homebrew 역시도 사용 중일 것이다.
만약 안쓴다면 지금 당장 다운받아라. 당신은 반쪽짜리 Mac을 사용하고 있다.

brew install fastlane

전역으로 fastlane이 설치가 되었으니 ios부터 fastlane을 적용시켜보도록 하겠다.

ios

프로젝트 내의 ios폴더에서 fastlane 환경설정을 진행한다.

fastlane init

이런 화면이 나오는데 우리는 테스트플라이트에 업로드 후 QA를 진행하고 심사를 올릴 것이기 때문에 2번을 선택한다.

2번을 선택하게 되면 애플 아이디와 패스워드를 요구할 것이다.
또 이중인증도 요구하는 경우도 있다.
그 외에도 apple connect teamid를 요구하는 경우도 있는데 이건 찾아보면 금방 알 수 있는 부분이라 넘어가겠다.

그리고 이런 화면도 만나게 되는데 Specific Password가 필요하다는 뜻이다.
이건 appleid.com으로 이동해서 발급받을 수 있다. 표시되어 있는 https://appleid.apple.com/account/manage로 이동해서 발급을 받아보자

앱 암호를 클릭해서 새로운 암호를 만들수 있다. 앱 암호는 필요할 때 다시 발급받을 수 있는 모양이다. 나온 암호를 어디엔가 보관해도 되지만 암호때문에 막혔을 때 새롭게 암호를 발급받아도 좋아 보인다.

그렇게 하고 나면 이런 창이 뜰 수 있다. 자신의 컴퓨터 비밀번호를 입력하면 되는데, 허용을 누르면 계속 같은 창이 뜬다. 당황하지 말고 비밀번호 입력 후 항상허용을 누르자 여기서 제일 많이 해멨다.

이렇게 하면 우선 설치는 완료가 되었다.
설치가 완료되면 ios 폴더 안에 fastlane폴더가 생성 되었을텐데 그안에는 appfile과 fastfile이 존재한다.

appfile은 우리의 아이디정보와 team 아이디 정보들이 담겨있다. 수정할 필요는 거의 없어보인다.
fastfile에는 배포 과정을 위한 코드가 작성되어 있는데 이것을 약간 수정해준다.

default_platform(:ios)

platform :ios do
  def updateVersion(options)
    if options[:version]
      version = options[:version]
    else
      version = prompt(text: "버전을 입력해주세요 (ex 1.0.0) : ")
    end

    re = /\d+.\d+.\d+/
    versionNum = version[re, 0]

    if (versionNum)
      increment_version_number(
        version_number: versionNum
      )
    elsif (version == 'major' || version == 'minor' || version == 'patch')
      increment_version_number(
        bump_type: version
      )
    else
      UI.user_error!("[ERROR] Wrong version!!!!!!")
    end
  end

  desc "테스트 플라이트에 정상적으로 업로드 되었습니다!"
  lane :beta do |options|
    cert
    sigh(force: true)
    updateVersion(options)

    increment_build_number(xcodeproj: "app.xcodeproj")
    build_app(workspace: "app.xcworkspace", scheme: "app")
    upload_to_testflight
  end
end

밑 부분의 app.xcodeprojapp.xcworkspace는 자신의 프로젝트의 경로에 따라 바꿔주도록 하자

이제 우리는 testflight에 배포 할때 ios폴더 내에서

fastlane beta

를 입력하면 쉽게 배포를 할 수 있게 되었다!

느낀점

이 포스팅을 적으면서 다른 문제점을 최근에 겪게 되었는데, 이 자동배포는 혼자만 사용가능하다는 점이다.
최근에 나 이외의 다른 사람이 자동배포를 시도할 때 배포가 되지 않는 현상을 겪게 되었다.
각자의 mac에 있는 배포 인증서와 배포 Provisioning profile가 다르기 때문이다.
이것을 해결해줄 수 있는것이 fastlane match이다.
원격저장소에서 배포인증서를 따로 관리해서 사용하는 것이다.
이 글에서는 이 부분은 다루지 않고 언젠가 기회가 된다면 다루도록 하겠다.
이미 좋은 글들이 많다

profile
우당탕탕 주니어 개발자 줄여서 우주개

0개의 댓글