기술 블로그

[rn] prebuild + fastlane 같이 사용하기 본문

프론트엔드

[rn] prebuild + fastlane 같이 사용하기

jaegwan 2025. 8. 5. 20:17
반응형

expo의 장점과 eas 지출회피를 같이하기 위해 prebuild를 사용하고 있었으나

prebuild 시 ios 폴더가 초기화되는 현상 떄문에 fastlane을 적용하기 어려웠다.

  • 방법 1. expo config plugin
  • 방법 2. app.json 설정

위 방법들은 prebuild시 유지해야할 항목을 보존하는데 도움을 줄 순 있으나 fastlane 관련 파일을 보존하긴 어려워

prebuild와 복구 명령어를 통합하기로 했다.

  1. fastlane 폴더를 루트에서 백업
    bash

/project-root
┣ /fastlane-template/
┃ ┣ Appfile
┃ ┗ Fastfile
2. expo prebuild 이후에 복사
bash

npx expo prebuild --clean
cp -R ../fastlane-template ios/fastlane
prebuild 후 스크립트로 자동 복구 가능

//prebuild.sh

npx expo prebuild --clean
echo "📍 Before fastlane copy: $(pwd)"
cp -R ./fastlane-template/fastlane ./ios/fastlane
echo "✅ fastlane 디렉토리 복원 완료"
cd ios
fastlane beta
echo "✅ iOS 빌드 완료"

 

default_platform(:ios)

platform :ios do
  desc "TestFlight 업로드"
  lane :beta do
    # 코드사이닝 설정
    automatic_code_signing(
      use_automatic_signing: true,
      team_id: "H4DJJ5V239",
      path: "nocotine.xcodeproj"
    )
    
    increment_build_number(
      # xcodeproj: "nocotine.xcodeproj"
      build_number: "6"  # 원하는 번호로 설정
    )

    build_app(
      workspace: "nocotine.xcworkspace",  # workspace 다시 사용
      scheme: "nocotine",
      export_method: "app-store",
      configuration: "Release",
      clean: true,
      include_bitcode: false
    )

   upload_to_testflight(
      api_key_path: "./fastlane/keyCode.json", // 본인 키 Json
      skip_waiting_for_build_processing: true
    )3
  end
  
  desc "수동 Archive 테스트"
  lane :archive_only do
    # 코드사이닝 설정
    automatic_code_signing(
      use_automatic_signing: true,
      team_id: "team id ",// 본인 팀아이디
      path: "nocotine.xcodeproj"
    )
    
    increment_build_number(
      xcodeproj: "nocotine.xcodeproj"
    )
    
    gym(
      workspace: "nocotine.xcworkspace",  # workspace 다시 사용
      scheme: "nocotine",
      configuration: "Release",
      clean: true,
      skip_archive: false,
      skip_package_ipa: true,  # IPA 생성 안 함, Archive만
      include_bitcode: false
    )
  end
end

 

 

//key.json

{
    "key_id": "",
    "issuer_id": "~~",// apple connect - 보안 - 통합에서 이슈어id 확인
    "key": "-----BEGIN PRIVATE KEY-----\n~~~~\n-----END PRIVATE KEY-----", //각 줄바꿈에 \n 삽입 // 관리자로 키 생성해야함
    "duration": 1200,
    "in_house": false
}
반응형
Comments