리액트 네이티브로 배포하는데에 있어서 큰 번거로움을 느끼던 중, 우연히 RN 밋업에서 배포 자동화 관련 세미나를 들었다. 모니모니(썸원) CTO로 계신 분께서 AppCenter에 대한 설명을 해주셨는데, 안그래도 자잘한 업데이트가 있을 때 마다 스토어에 새로 배포하는 것이 매우 비효율적이고 시간이 오래 걸리기도 했고, 향후 회사의 협업 시스템을 위해서라도 저런 자동화 프로세스가 필요하겠다는 생각이 들어 도입을 결심하게 되었다.
3번 이상의 반복 작업은 자동화를 하자~~~
RN계의 월클 bang9님의 도움을 받아 fastLane을 도입하게 되었다.
fastLane는 Android/iOS 앱 배포를 돕기 위해 만들어진 오픈소스이다. (자동화 프로세스)
기본적으로는 로컬에서 돌아가지만, 많은 CI 시스템과 integrate되어 셋팅이 유용하다.
내가 원하는 플러그인을 선택할 수 있어 세분화된 커스터마이징 또한 가능하다.
여기를 보면 굉장히 많은 플러그인이 있는 것을 확인할 수 있다.
(VS App Center도 배포 자동화 및 빌드, 테스팅을 도와주지만, use case가 아닌 내가 짜놓은 스크립트를 명령어를 통해 빠르게 빌드&배포를 할 수 있는 fastLane을 먼저 사용해보기로 했다. App Center와 같이 쓰기도 하고, fastLane의 app center에 적용하는 플러그인도 있던데 추후에 필요하면 내용을 추가하도록 하겠다.)
더 자세한 장/단점 특징 들을 알고 싶다면 아래 링크들을 참고하자.
내가 진행한 스텝별 단계는 다음과 같다.
공식문서 보고 설치하기
$ ruby --version
> ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.arm64e-darwin21]
원래 ruby를 먼저 설치해야하는데 내 로컬엔 설치되어있어서 바로 fastlane을 설치했당
brew install fastlane
해당 디렉토리 폴더 (android/ios) 에서
fastlane init
을 하면 순서대로 다음 항목을 입력하게 된다.
You'll be asked to confirm that you're ready to begin, and then for a few pieces of information. To get started quickly:
1. Provide the package name for your application when asked (e.g. io.fabric.yourapp)
2. Press enter when asked for the path to your json secret file
3. Answer 'n' when asked if you plan on uploading info to Google Play via fastlane (we can set this up later)
내가 입력한 항목은 아래와 같다.
1. Package Name (com.krausefx.app): com.newsAlji
2. Path to the json secret file:
3. Download existing metadata and setup metadata management? (y/n) n
이렇게 엔터 4번 누르고 확인하고 나면 설정 완료!
FastFile 을 Ruby 로 다음과 같이 작성한 후
PACKAGE_JSON=read_json(json_path: "#{Dir.pwd}/../../package.json")
VERSION=PACKAGE_JSON[:version]
DATE=Time.new.strftime("%Y.%m%d.%H%M")
default_platform(:android)
platform :android do
desc "Deploy a new build"
lane :deploy do
android_set_version_name(gradle_file: "app/build.gradle", version_name: "#{VERSION}-#{DATE}")
gradle(task: "assemble", build_type: "Release", flags: "--no-daemon")
end
end
package.json 에서 실행 스크립트를 넣어줌
"deploy:android": "cd android && bundle exec fastlane deploy"
위와 같은 내용을 진행하다보니 아래와 같은 문제가 발생.. 했다
이런 에러가 나서 시스템 ruby 로 인한 gem 권한을 수정해주었다.
또, 브스코 터미널에서 system ruby가 잡혀 아래 링크를 보고 해결을 시도했다.
https://jojoldu.tistory.com/288
brew install rbenv ruby-build
rbenv versions
rbenv install -l
rbenv install 3.1.2
rbenv versions
rbenv로 루비 버전 관리를 하는데 문제가 생겼다. 맥에는 기본적으로 시스템 루비가 설치되어있는데, 이것을 rbenv로 관리하려는데 설정이 제대로 되지 않았다. (계속 루비 설정 변경을 시도했지만 모두 먹통이었따)
여기서, 시스템 ruby란? 시스템 ruby를 사용중에, fastlane, bundler등 설치 및 설정하려면 sudo 를 통해서 root 권환을 이용해야한다거나, 다양한 프로젝트에 있어서 루비 버전이 달라야 하는데, 해당버전을 모두 관리하려면 삭제, 반복의 연속이다. rbenv를 이용하면 다양한 ruby 버전을 전환해가면서 관리를 할 수 있다. 출처: 바쁘다 바빠 현대사회
검색해서 나오는 솔루션들을 다 적용해보았는데, 버전관리가 제대로 되지 않아서 또 한참 헤매었다. 알고보니, 내가 맥을 인텔칩에서 M1칩으로 업그레이드 할 때 그대로 마이그레이션을 했는데 그것이 문제가 되었다. M1에 들어가는 칩이 arm64이라는 모바일에서 주로 사용되던 아키텍쳐이고, 이전의 인텔 칩은 일반적인 PC에서 사용되는 x86 아키텍쳐이다. 이 차이 때문에 맥북의 아키텍쳐가 두 개로 나뉘게 되었는데, 인텔맥 기준으로 제작된 brew나 zsh이 M1 아키텍쳐에서 호환이 안 되는 경우들이 발생하는 것이다. 이를 위해 Rosetta2와 같은 프로그램도 생겼다. 찾아보니 생각보다 더 많은 호환성 문제들이 있었다.
즉, 요약하면 루비를 빌드하는데 M1에서 intel맥 용 빌드를 하니 에러가 났던 것!
arch -x86_64
명령어를 붙여 해결하고
터미널 적용이 어디는 되고 어디는 안됐는데, 다음날 하니 브스코 터미널에서도 적용됐다!!!
arch -x86_64 rbenv <어쩌고저쩌고>
마지막으로 아래 빌드 명령어 돌려서 성공적으로 마무리^^^
$ yarn deploy:android
Android 빌드 폴더 내에 apk 파일이 생성되는 것을 확인해볼 수 있다!!
잠시 홍보좀 하겠습니다.
m1에서 ruby 로 고통받고 있다면? React-Native M1 환경세팅 제대로 하기
👉 https://velog.io/@bang9dev/RN-CheatSheet-M1-디바이스-환경설정