안녕하세요 2년차 개발자입니다.
카페에서 커피마시면서
코딩하기를 좋아해요.

Software Engineer

fastlane settings

신규 개발자의 fastlane 설정을 하며 인수인계 과정에서 겪은 에러를 해결한 경험을 남겨둔다.

개발 환경 세팅

Prerequisites

  • Install “Android Studio” and “XCode” apps which take long time to download

Basic settings

// **homebrew**
**$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

// node (>=12.x) & watchman & yarn (>=1.22.x) & Git
$ brew install node
$ brew install watchman
$ npm install --global yarn
$ npm install git

// rbenv (ruby version control) & ruby(v2.7.2)
$ brew install rbenv
$ rbenv install 2.7.2
$ rbenv global 2.7.2

// insert following two lines in ~/.bash_profile or ~/.zshrc file
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
$ source ~/.zshrc // activate zshrc file
$ ruby -v // ruby version check v2.7.2

// cocoapods & bundler & XCode Development Tools
$ sudo gem install cocoapods
$ gem install bundler
$ xcode-select --install**

Fastlane match (signature) settings

  • 중요 MAKE SURE YOU READ MATCH DOC CAREFULLY BEFORE MOVING FORWARD
$ brew install fastlane
$ git clone FRONT_END_REPO_GITHUB_URL

[ fastlane > Matchfile ] // change username
...
username("YOUR_APPLE_DEV_USERNAME") // email format
...

[ ~/.zshrc | ~/.bash_profile file ] // insert following 14 lines
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools

export ANDROID_KEYSTORE_PATH='$HOME/Desktop/code/release_key.keystore' // could be different by file location
export ANDROID_KEYSTORE_PASS=ANDROID_KEYSTORE_PASS
export ANDROID_KEY_ALIAS=release
export ANDROID_KEY_PASS=ANDROID_KEY_PASS

export MATCH_CERT_GITHUB_REPO=https://github.com/secondprice/secondprice-ios-match
export MATCH_GIT_BASIC_AUTHORIZATION_USER=#YOUR_GIT_USERNAME
export MATCH_GIT_BASIC_AUTHORIZATION_TOKEN=#YOUR_GIT_PERSONAL_TOKEN
export MATCH_GIT_BASIC_AUTHORIZATION=#YOUR_GIT_PERSON_TOKEN_BASE64
export MATCH_PASSWORD=MATCH_PASSWORD
  • MATCH_GIT_BASIC_AUTHORIZATION_USER
    • your personal github username & email format
    • ex) worker123@example.com
  • MATCH_GIT_BASIC_AUTHORIZATION_TOKEN
    • github > settings > developer settings > personal access tokens
  • MATCH_GIT_BASIC_AUTHORIZATION
    • According to fastlane docs, you need to generate base64 type of authorization token for match.
      [ terminal ]
      $ echo -n your_github_username:your_personal_access_token | base64
    
    • copy & paste the generated value to the MATCH_GIT_BASIC_AUTHORIZATION key in ~/.zshrc or ~/.bash_profile file.
  • MATCH_PASSWORD
    • match init 시 입력하는 비밀번호

Run fastlane match

[ project_dir ] - terminal
// 빌드하려는 머신에 app-build(PW: alpine) 키체인이 있어야 합니다
$ security create-keychain app-build

// IMPORTANT : to avoid updating secondprice-ios-match github, USE --readonly.
$ fastlane match development --readonly
$ fastlane match appstore --readonly
$ fastlane match adhoc --readonly

Setup

Common

$bundle install
$yarn install
// yarn command 셋팅 필요
$yarn start

iOS

// yarn command 셋팅 필요
$yarn pod:install // 최초 실행 및 native build의 변화가 있을 경우에만 실행
$yarn yarn ios

Android

// yarn command 셋팅 필요
$yarn android

android native build에서 문제가 발생할 경우

  • gredlew 재설치
$cd android
$./gradlew clean
  • simulator에 설치된 본 앱을 삭제 혹은 Android Studio 내에서 simualtor를 완전 삭제 후 다시 빌드

Run

[ client ]
// change IOS device
// 해당 명령어 사용 전 device_name 에 해당하는 device ID portal 에 등록되어 있어야 함.
$ yarn ios --device "device_name"

Profile Provisioning - XCode 에러

- developer.apple.com에서 기존 개발자가 신규 개발자의 계정 추가 in certificates
- 신규 개발자의 device도 함께 추가 등록
- fastlane match 명령어 재실행하여 덮어쓰기 (—readonly X) & XCode에서 automatically signing 체크박스 체크
개발자 대표 계정으로 signing certificate 진행되어 있으나, 퇴사 전 nuke로 새로 match 작성해야 함 (성수 계정으로 갱신 필요) & 새로운 추가 개발자 채용 시, automatically signing으로 진행.

fastlane 생각 정리

  1. Github 에 Private Repo 를 준비한다.
  2. 해당 Repo 에 Certification ( 인증서 ) + Provisionging profiles 을 저장하고 팀원들과 공유할 수 있다.

보안 문제는 없나?

  • fastlane 은 기본적으로 Private Repo 의 모든 파일들을 암호화 한다.
  • 암호화된 github Repo 를 보면 실제로 이상한 문자열의 나열로 이루어져있다.
  • fastlane match 를 사용해서 프로비저닝 프로파일을 갱신할 때, Repo 를 복호화해서 진행한다.
  • passphase 를 등록해두면 해당 passphase 로 암,복호화를 진행한다.

https://millo-l.github.io/ReactNative-fastlane-match/