Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- dfs
- 프로그래머스
- SwiftUI
- 알고리즘
- Autolayout
- 백준온라인저지
- UIKit
- Kotlin
- 안드로이드 공부
- Python
- 그리디 알고리즘
- swift
- 오토레이아웃
- ios
- Level 1
- error
- 파이썬
- 공부
- Clean Architecture
- iOS개발
- 정렬
- Android
- 앱개발
- 파이썬 풀이
- greedy algorithm
- Swift공부
- BFS
- 백준 온라인 저지
- 알고리즘 공부
- Algorithm
Archives
- Today
- Total
Tori의 개발 공부
[iOS/Fastlane] Fastlane으로 배포를 해보자 - fastlane 코드 살펴보기 본문
IOS App Programming/IOS 연습
[iOS/Fastlane] Fastlane으로 배포를 해보자 - fastlane 코드 살펴보기
B_Tori 2024. 7. 31. 12:43default_platform(:ios)
platform :ios do
desc "Build and distribute to Firebase App Distribution" # 해당 lane의 설명
lane :distribute do # lane 이름과 시작점
match(type: "adhoc") # match의 Adhoc 프로비저닝 프로파일을 가져옴
clean_build_artifacts # 이전 빌드 아티팩트를 정리 (클린 빌드)
# 배포 시 빌드 타임을 기록하기 위함
build_start_time = Time.now # 스타트 시간 기록
UI.message("Build started at #{build_start_time}") # 빌드 시작 메시지 출력
# 생성될 IPA 파일 이름을 현재 타임 스탬프를 이용하여 생성, 모든 ipa 이름이 겹치지 않도록 하며 배포된 ipa 버전을 관리하기 위함
time_stamp = Time.now.strftime("%y%m%d_%H%M%S")
ipa_file_name = "CatchMate_#{time_stamp}.ipa"
gym(
project: "CatchMate.xcodeproj", # Xcode 프로젝트 파일 경로
scheme: "CatchMate", # 빌드할 scheme
output_directory: "~/Desktop/Log", # IPA 파일을 저장할 경로
output_name: ipa_file_name, # 생성될 IPA 파일 이름
export_method: "ad-hoc", #ad-hoc 배포 방식 지정
export_options: { # export options 설정
provisioningProfiles: { # 프로비저닝 프로파일 설정 - 오류로 인해 직접 매칭
ENV['PROVISIONING_PROFILES'] => ENV['MATCH_PROFILES']
}
}
)
# 빌드 끝 타임 기록
build_end_time = Time.now
UI.message("Build finished at #{build_end_time}")
# 빌드 시간 계산
build_duration = build_end_time - build_start_time
UI.message("Build duration: #{build_duration.round(2)} seconds")
# 빌드 시간 로그 파일에 기록
log_directory = File.expand_path("~/Desktop/Log")
log_file_path = File.join(log_directory, "build_times.txt")
File.open(log_file_path, "a") do |f|
f.puts("Build started at: #{build_start_time}")
f.puts("Build finished at: #{build_end_time}")
f.puts("Build duration: #{build_duration.round(2)} seconds")
f.puts("IPA File: #{ipa_file_name}")
f.puts("="*30)
end
# Upload to Firebase App Distribution
firebase_app_distribution(
app: ENV['FIREBASE_APP_ID'], # Firebase App ID
ipa_path: "/Users/bang-yubin/Desktop/Log/#{ipa_file_name}", # 업로드할 IPA 파일 경로
firebase_cli_token: ENV['FIREBASE_TOKEN'],
groups: "dugout-teckneck" # 테스터 그룹 지정
)
end
lane
lane 은 fastlane이 실행할 명령어 단위로 해당 배포 과정을 실행하기 위해fastlane distribute
와 같이 사용할 수 있다.
match
- ios의 경우 인증서 관리를 신경 써줘야 한다. 특히 협업의 경우 개발자마다 여러 인증서를 가지고 있을 수 있기 때문에 인증서를 저장소(보통 Git 리포지토리)에 안전하게 저장하고 팀 내에서 공유할 수 있도록 도와준다.
[역할]
- 인증서 및 프로비저닝 프로파일 생성:
- match는 필요한 인증서와 프로비저닝 프로파일을 생성하고, 이를 지정된 저장소에 저장한다.
- 인증서 및 프로비저닝 프로파일 동기화:
- match는 프로젝트에 필요한 인증서와 프로비저닝 프로파일을 동기화하기 때문에 새로운 개발자나 CI 서버에서도 동일한 인증서를 사용할 수 있게 도와준다.
- 보안 관리:
- 인증서와 프로비저닝 프로파일을 암호화하여 저장소에 저장함(안전하게 프라이빗 저장소에 저장하기)으로써 보안을 유지
- 암호화 키는 CI/CD 환경 변수나 다른 안전한 방법으로 관리해야 함
gym
- Fastlane에서 iOS와 macOS 애플리케이션을 빌드하는 도구
- Xcode 빌드 프로세스를 간소화하고 자동화하여 IPA 파일을 생성함
- 이때 생성한 IPA 파일을 배포에 사용함
firebase_app_distribution
현재 테스트 앱 배포를 파이어베이스를 이용해하고 있기 때문에 해당 플러그인을 사용하였다.
- Firebase에 앱을 배포하는 도구이다.
- 파이어베이스에 배포하기 위한 설정 값과 IPA 파일 경로들을 입력한다.
설정 값 관리
- 아무래도 fastlane 파일 또한 git에 올라가 다른 팀원들도 사용할 수 있도록 해야 하기 때문에 여러 설정 변수 값들에 대한 보안을 신경 써야 했다.
- .env 파일을 설정하여 설정값들을 입력하고 gitignore에 해당 파일을 깃이 추적하지 않도록 하여 .env 파일만 따로 관리하도록 하였다.
'IOS App Programming > IOS 연습' 카테고리의 다른 글
[iOS / Firebase] Firebase AppDistribution 을 통해 Test App 을 배포해보자 (2/2) (0) | 2024.07.18 |
---|---|
[iOS / Firebase] Firebase AppDistribution 을 통해 Test App 을 배포해보자 (1/2) (2) | 2024.07.17 |
[SPM 라이브러리 배포] 다크 모드 대응 커스텀 라이브러리 제작기 (0) | 2024.06.06 |
[iOS] UIKit 과 SwiftUI 의 차이점 - 명령형과 선언형의 차이 (0) | 2024.04.03 |
[SwiftUI] 다크모드 대응 ColorScheme (0) | 2024.03.20 |