일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 디자인패턴
- ViewController
- 상태패턴
- RxSwift
- 스트래터지패턴
- SWIFT
- DispatchQueue
- 프록시패턴
- 데코레이터패턴
- Lifecycle
- 이터레이터패턴
- 컴파운드패턴
- 전략패턴
- Xcode
- 템플릿메서드
- 파사드패턴
- 추상팩토리패턴
- cocoapods
- 스테이트패턴
- Mobile
- 컴포지트패턴
- 싱글턴패턴
- unowned
- WKWebView
- 팩토리메서드패턴
- 어댑터패턴
- 옵저버패턴
- Scenedelegate
- ios
- 커맨드패턴
- Today
- Total
ios dev kangwook.
iOS) CocoaPods에 Private Framework 추가하기 본문
iOS를 하면서 가장 많이 쓰는 툴이라고 하면 단연코 CocoaPods이라고 할 수 있겠다.
하지만 내가 직접 만든 프레임워크를 CocoaPods을 통해서 내 다른 프로젝트에서 쓴다던가,
모듈화 시켜서 CocoaPods에서 지속적으로 업데이트하며 쓰는 방법이 없을까 하고 열심히 방법을 찾아보았다.
직접 만들어보면서 정리해보도록 하겠다.
참고로 Fat Framework가 아닌 XCFramework를 만들거고, 이를 CocoaPods으로 Private하게 배포할 목적으로 만들거다.
1. Framework를 위한 Git Repository 생성 → Readme, License 추가
- 여기서 Readme랑 License 추가를 꼭해줘야한다.
2. Podspec을 위한 Git Repository 생성
- CocoaPods를 사용하려면 Podspec이라는 것을 생성해야하는데 이를 따로 저장할 repository를 만드는 것이다.
- 요거 또한 Readme를 생성해주도록 하자
3. 자이제 Framework Repository를 clone해주도록 하자.
- 오타가 있지만 수정하기 귀찮으니 그냥 진행하도록 하자.
$ git clone <<git>>
4. 해당 디렉토리에서 xcode project 생성(Framework)
- 난 그냥 간단하게 테스트용으로 NSLog랑 OSLog 출력하는 것을 함수로 만들었다.
5. 클래스 작성 후 빌드
- 자 이제 빌드를 할 건데 xcodebuild 커맨드를 입력해서 빌드를 할 예정이다.
- 우리는 xcframework를 만들 예정이므로 다음과 같이 명령어를 입력해보자.
- (xcframework에 관련해서는 나중에 따로 게시글을 올릴 예정)
- 먼저 xcframework를 만들기 위해서는 xcarchive가 필요하다. 이를 빌드하려면 다음과 같이 입력하면 된다.
$ xcodebuild archive -scheme <<framework_name>> -archivePath "./output/ios.xcarchive" -sdk iphoneos SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES
- 다음은 xcframework를 만들 예정이다. 참고로 위에는 ios용 xcarchive를 만든거고 저기에 다양하게 넣을 수 있다. 예를 들면 macOS라던지.. simulator라던지 등등
- 그래서 나는 simulator용 아카이브를 하나 더 만들어서 xcframework를 만들기로 했다.
$ xcodebuild -create-xcframework \
- framework "./output/ios.xcarchive/Products/Library/Frameworks/CustomXCFramework.framework" \
- framework "./output/ios_sim.xcarchive/Products/Library/Frameworks/CustomXCFramework.framework" \
- output "./output/CustomXCFramework.xcframework"
- 이렇게 빌드를 입력하게 되면 아래와 같은 결과물이 나오게 된다!
- 참고로 xcframework 만들 때에는 framework들을 사용하는데, 이때 xcarchive내에 만들어진 framework들을 사용해야 한다.
6. 자이제 Podspec을 만들어보자. 이 과정은 처음으로 만들었던 framework폴더에 생성하면 된다.
$ pod spec create <<Podspec_name>>
7. Podspec 파일을 수정할 차례다.
- 먼저 tag가 일치하는지 확인해야 한다. (git에 실제로 push하는 tag와 일치해야 한다.)
- LICENSE 파일명이 일치하는지 확인한다.
spec.license = { :type => "MIT", :file => "LICENSE"}
- 그리고 description을 작성하고
- spec.source_files를 주석처리한다.
- 그리고 아래에 다음과 같이 추가한다.
spec.vendored_framework = "<<framework_name>>/build/Release-iphonesimulator/<<framework_name>>.framework"
8. Git에 tag 생성 후 push 한다.
$ git tag 0.0.1
$ git push --tags
9. Git에 코드를 push한다.
$ git add .
$ git commit -m "initial commit"
$ git push origin main
10. 터미널을 열고 pod spec lint를 통해 validation을 확인한다.(유효성검사)
- 그런데 꼭 여기서 오류가 잘뜬다 원래. 그럼 보통 아래와 같은 오류들이니 천천히 해결해보자
- vendored_frameworks오류 : 타이핑 오류 또는 tag 오류
- 그냥 tag오류일 경우가 많은데 그냥 다른 태그(예를 들면 0.0.2)만들어서 push한 후 테스트 하면 보통 해결된다.
- push하고 podspec파일의 태그도 다시 일치시켜줘야한다! 항상 podspec파일을 잊지말자.
- [WARN] 이라고 뜨는 경고메시지는 그냥 --allow-warnings로 가볍게 무시해주자. 자잘한 것들이다.
- 하여튼 이렇게해서 validation을 통과하게 되면 pod repo에 push할 수 있게된다.
11. podspec을 저장할 pod repo를 생성한다.
$ pod repo add <<name>> <<podspec_git_repository>>
12. 그리고 podspec파일을 pod repo에 push한다.
- 사실 pod spec lint 과정없이 push할 때 자동으로 검사해주는데 혹시 오류가 있을 수 있으니 검사부터 하는 습관을 들이자.
$ pod repo push <<pod_repo_name>> <<podspec_file_name>>
13. 프레임워크를 CocoaPods으로 적용시킬 새로운 프로젝트를 생성한다.
14. 해당 프로젝트 디렉토리에서 터미널을 열고 pod init
15. podfile을 열고 다음과 같이 수정한다.
source '<<podspec_git_repository>>'
pod '<<name>>', :git => "<<framework_git_repository>>"
- 뭐 말하자면 맨 위의 source는 podspec을 저기서 가져오겠단 뜻이고 pod 'MySpec'은 말그대로 pod에 등록되어 있는 프레임워크를 설치하려고 준비(?)하는 것이라고 보면 된다.
- 이제 새로운 프로젝트에서 내가 만든 CocoaPods Framework를 사용해보자
16. 일단 프로젝트에서 pod install을 하자
17. 프로젝트에서 테스트를 해보니 잘나오는 것 같다.
나는 CustomXCFramework만 import했을 뿐인데 해당 모듈에 있는 메서드들을 사용할 수 있었다.
로그가 잘 찍히는걸 보니 아무래도 성공인듯 싶다.
이렇게 전체적으로 CocoaPods을 통해 내가만든 Framework를 사용하는 방법을 알아보았다.
사실 이게 xcframework가 나온지 얼마안되서 CocoaPods과 연동하는 방법이 생각보다 정보가 많이 없어서 일련의 과정을 정리하는데 굉장히 많은 곳을 참고해서 진행한 것 같다. Stack Overflow 만세
여튼 추가적으로 xcframework에 관한 자세한 내용은 다음에 정리해서 올려야겠다.
+
변경사항으로 인해 고칠 경우
- 변경하고 git tag 수정 후
- framework push(9번)
- podspec push(12번)
- pod update
- 에러 뜰 경우 : pod 제거 후 캐시 지우고 재설치
- 나는 deintegrate 설치해서 쓰는데 굉장히 유용하다.
$ sudo gem install cocoapods-deintegrate cocoapods-clean
pod deintegrate
pod cache clean --all
'iOS' 카테고리의 다른 글
iOS) Memory Management - ARC (0) | 2022.08.27 |
---|---|
iOS) App Life Cycle, View LIfe Cycle (0) | 2022.08.27 |
iOS) WKWebView vs. SFSafariViewController (0) | 2022.08.22 |
iOS) XCFramework를 생성해보자 (0) | 2022.08.20 |
iOS) Closure 내 [weak self] : guard let self vs. self?(optional chaining) (0) | 2022.08.18 |