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 |
29 | 30 |
Tags
- Scenedelegate
- cocoapods
- 프록시패턴
- 스테이트패턴
- 이터레이터패턴
- 옵저버패턴
- unowned
- WKWebView
- 어댑터패턴
- 파사드패턴
- 추상팩토리패턴
- 상태패턴
- 컴파운드패턴
- 팩토리메서드패턴
- 컴포지트패턴
- Xcode
- DispatchQueue
- 커맨드패턴
- 전략패턴
- SWIFT
- ios
- 템플릿메서드
- 싱글턴패턴
- 스트래터지패턴
- Lifecycle
- 디자인패턴
- 데코레이터패턴
- RxSwift
- ViewController
- Mobile
Archives
- Today
- Total
ios dev kangwook.
iOS) Fastlane으로 Private Pod 자동 빌드하기 본문
테스트 목적
- Fastlane을 통해 Private Framework를 자동으로 빌드하고 CocoaPods으로 배포하도록 하기 위해 테스트 실시
환경
- macOS Big Sur 11.5.1
- Fastlane 2.210.1
- CocoaPods 1.11.3
- Bundler 2.2.33
사전 설정
- gem install cocoapods, gem install bundler를 통해 CocoaPods과 Bundler를 설치
- brew install fastlane을 통해 fastlane 설치
- gem install fastlane도 가능
- podspec을 생성한 프레임워크 프로젝트와 해당 프로젝트의 git
- podspec들을 관리할 git
- podspec 관련 설정
- 관련 설정은 이전 글 참조
- https://kvngwxxk.tistory.com/45
- 관련 설정은 이전 글 참조
iOS) CocoaPods에 Private Framework 추가해서 배포하기
https://kvngwxxk.tistory.com/9 iOS) CocoaPods에 Private Framework 추가하기 iOS를 하면서 가장 많이 쓰는 툴이라고 하면 단연코 CocoaPods이라고 할 수 있겠다. 하지만 내가 직접 만든 프레임워크를 CocoaPods을 통해
kvngwxxk.tistory.com
- 이미 Framework가 Private Pod으로 배포가 되어있다는 가정하에 테스트 진행
- gitignore에는 fastlane, xcode, cocoapods, swift, macos와 관련된 사항을 추가했고, xcode와 관련된 항목 중, build폴더에 대한 부분은 제외함
- 프로젝트 디렉토리가 존재하지 않을 경우 git clone을 통해 프로젝트 디렉토리를 git으로부터 받아와야 함
프로젝트 디렉토리
- kwxcframework : git 최상단 디렉토리
- ㄴ KWXCFramework : xcodeproj가 존재하는 디렉토리
- ㄴ build : xcarchive, xcframework의 빌드 output이 존재할 디렉토리
- ㄴ fastlane : fastlane 관련 파일들이 존재하는 디렉토리
- ㄴ KWXCFramework : 프레임워크의 소스코드들이 존재하는 디렉토리
본 테스트에서 사용한 프레임워크는 간단한 로그를 출력할 수 있는 LogManager를 작성
테스트 진행
- iOS Project가 존재하는 디렉토리에서 fastlane init을 통해 fastlane 초기화
- 위 디렉토리 상으로 /kwxcframework/KWXCFramework 에서 명령어 입력
- fastlane init을 하게 되면 Appfile, Fastfile, Gemfile이 생성, 이를 각각 설정해주어야 함
- Fastfile에는 Fastlane으로 실행할 프로세스를 설정하는데, 본 테스트에서는 다음과 같은 프로세스로 진행
- Fastlane 프로세스(build_lane)
- 변수 설정(Optional)
- 기존 build 폴더 삭제(shell 명령어)
- build 폴더 존재시 xcarchive가 생성되지 않음(already exist framework)
- 현재 브랜치를 가져와서 git pull
- buildScript 실행을 통해 xcarchive 및 xcframework 빌드(build 폴더에서 생성)
- podspec에 명시된 version 업데이트
- Framework의 info.plist의 값을 가져올 수 있기 때문에 podspec의 version을 프레임워크의 Info.plist를 통해 일치시키는 방법 고려
- pod spec 유효성 검사(pod_lib_lint)(Optional)
- git add podspec
- git commit podspec
- git tag 추가 → podspec에 명시된 버전과 같은 태그 생성 후 추가
- git push(push_to_git_remote)
- pod spec 유효성 검사(pod_lib_lint)(Optional)
- pod push
- Fastlane 프로세스(build_lane)
- Fastfile에 해당 작업을 수행하는 명령어 추가
default_platform(:ios)
# 1. 변수 설정(Optional)
podspec_name = "../KWXCFramework.podspec"
platform :ios do
desc "This lane is for building xcframework and pushing podspec to pod repo"
lane :build_lane do
# 2. 기존 build 폴더 삭제
sh("cd .. && rm -rf build")
# 3. 현재 브랜치를 가져와서 git pull
branch = git_branch
sh("git pull origin #{branch}")
# 4. buildScript 실행을 통해 xcarchive 및 xcframework 빌드(build 폴더에서 생성)
sh("cd .. && ./buildScript.sh")
# 5. podspec에 명시된 version 업데이트
# - 버전을 명시하는 방법
# version = version_bump_podspec(path: podspec_name, version_number: "0.1.7")
# - major, minor, patch 버전을 한단계씩 업데이트 하는 방법
version = version_bump_podspec(path: podspec_name, bump_type: "patch")
# 6. pod spec 유효성 검사(pod_lib_lint)(Optional)
pod_lib_lint(podspec: podspec_name, allow_warnings: true)
# 7. Source Control : git add podspec
git_add(path: podspec_name)
# 8. Source Control : git commit podspec
git_commit(path: [podspec_name], message: "#{version} release")
# 9. Source Control : git tag 추가 → podspec에 명시된 버전과 같은 태그 생성 후 추가
add_git_tag(tag: "#{version}")
# 10. Source Control : git push
push_to_git_remote
# 11. pod spec 유효성 검사(pod_lib_lint)(Optional)
pod_lib_lint(podspec: podspec_name, allow_warnings: true)
# 12. pod push
pod_push(path: podspec_name, repo: "PrivatePodspecs", verbose: true)
end
end
- gemfile에는 fastlane과 cocoapods을 추가
- Framework의 코드 수정 후 Project → General → Version 수정
- fastlane 기준으로 {major}.{minor}.{patch}
- Framework git으로 push
- 현재 git release branch에 올라간 Framework 버전 : 0.1.7, 기존 Private Pod에 등록된 Framework 버전 : 0.1.6
- fastlane폴더가 존재하는 하위 디렉토리로 이동 후 Fastlane을 통한 자동 빌드 진행
- 실행시킬 lane의 이름은 Fastfile에서 설정 가능
- 빌드 프로세스에 따라 framework 빌드 및 pod push 진행
Fastlane 결과 및 소요시간 확인
- 현재 git release branch에 올라간 Framework 버전 : 0.1.7, Private Pod에 등록된 Framework 버전 : 0.1.7
주의 사항 및 고려 사항
- Private Framework를 CocoaPods을 통해 배포하는 과정 특성상 git tag, podspec version, framework version이 모두 일치해야해서 하나가 다를 경우 오류가 나며 과정이 중단되는데 만약 버전이나 태그가 Fastlane 빌드 과정 중 꼬이게 되면, podspec의 버전과 git에 올라가 있는 Framework의 버전, 중단된 시점, git tag 등을 확인해서 local 과 remote에서 tag를 지우고, podspec을 수정하는 등 복잡한 과정이 발생할 수 있음
- Fastlane상에서 작업 실패시 처리하는 방법이 있는지 확인이 필요
- 본 테스트에는 build_lane만 존재하지만, 작업에 따른 lane 분기 처리 및 세분화가 이뤄지면 실패 처리 및 과정을 확인하는데 용이할 것으로 예상
- 본 테스트는 fastlane을 통해 build부터 pod push까지의 과정을 단편적으로 테스트하고 있지만, 실제로 적용하기 위해서는 각 과정에 대해 예외 처리 및 안정 장치가 필요할 것으로 예상
- 각 과정마다 작업이 실패할 경우에 대해 분기처리를 해주어야 함
- CI Transaction에 관련한 분석 필요
'iOS' 카테고리의 다른 글
iOS) Documentation - Jazzy (1) (0) | 2022.11.29 |
---|---|
iOS) Documentation - DocC (1) (0) | 2022.11.22 |
iOS) CocoaPods에 Private Framework 추가해서 배포하기 (0) | 2022.10.29 |
iOS) StoreKit (3) - In App Purchase API (0) | 2022.10.22 |
iOS) StoreKit (2) - In App Purchase (0) | 2022.10.18 |
Comments