개발/Swift

iOS 앱 자동화 Fastlane Fastfile 작성 Cheatsheet

덤벨로퍼 2024. 4. 29. 17:30

프롬프트 활용 input 값 받아 사용하기

ex> 출시노트에 사용될 텍스트 or 테스터 이메일 받아오기

    title = prompt(text: "출시 노트를 작성해 주세요\\n 개요: ")
    show_update_popup = prompt(text: "업데이트 팝업 노출 여부: ", boolean: true)
    description = prompt(text: "변경사항: ", multi_line_end_keyword: "END")
    testers = prompt(text: "테스터 이메일 입력: ", multi_line_end_keyword: "END")

터미널에서 바로 입력하여 값 받아오기

  lane :beta_release do |options|
     version = options[:version]
    number = options[:number]
    
    //사용 fastlane beta_release version:1.1.1 number:3

다른 레인으로 값 전달 하기

상위 lane
upload_to_firebase(title: title, show_update_popup: show_update_popup, description: description, environment: "staging", testers: testers)

하위 lane
lane :upload_to_firebase do |options|

	title = options[:title]
	show_update_popup = options[:show_update_popup]
	description = options[:description]
	environment = options[:environment]
	testers = options[:testers]

앱 버전, 빌드넘버 올리기

increment_version 액션 사용시 infoPlist 를 버전값으로 수정해서 깔끔하게 버전 변경 되지 않음

infoPlist 에서 버전값을 MARKETING_VERSION 으로 참조하고있어 맞지 않는 방식,

MARKETING_VERSION 와 CURRENT_PROJECT_VERSION 를 직접 수정하여 버전 세팅하도록 정의

  desc "Set version and build number"
  lane :set_version do |options|
    version = options[:version]
    number = options[:number]
    project = Xcodeproj::Project.open("../xxxxxx.xcodeproj")//프로젝트명

    xc_target = project.targets.find { |target| target.name == "xxxxxx" } //타겟명
    xc_target.build_configurations.each { |build_configuration| 
	unless version.nil? //input 값으로 version 정보 넣어줬을때만 수정
          build_configuration.build_settings["MARKETING_VERSION"] = version //여기서 바꿔줌
	end
	unless number.nil?
          build_configuration.build_settings["CURRENT_PROJECT_VERSION"] = number
	end
    }
    project.save()
   
  end

해당 하는 set_version 레인을 호출 후에 build_app() 액션 불러주면 됨

 set_version(options)
    build_app(workspace: "xxxxxx.xcworkspace", 
              scheme: "xxxxxxscheme", 
              configuration: "Release",
              export_method: "app-store")

테스트플라이트 등록

    upload_to_testflight(app_identifier: "번들아이디",
       			 skip_waiting_for_build_processing: true)

이때 apple id , 비밀번호 정보가 없으면 authorization 에러 가 발생

[Application Loader Error Output]: Unable to upload archive. Failed to get authorization for username 'XXXX' and password. (

필요한데 해당 정보를 .env 파일에 정리 해줘야함 (https://appleid.apple.com/account/manage 에서 앱 암호 발급후 )

//.env

FASTLANE_USER = "애플아이디 이메일"
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD = "앱 암호"