Awesome
CocoaPods 유용한 정보 모음입니다.
CocoaPods를 감사하게 사용하고 있습니다. 😁<br /> 사용하면서 유용했던 정보들을 잘 정리해 두고 싶어서 작성했습니다.<br /> 계속 잘 정리해서 처음 사용하시는 분들 혹은 익숙하지 않은 분들에게 도움이 될 수 있도록 하겠습니다. 😊
- 기본적인 설치, 프로젝트 실행에서 유용한 팁까지 정리해봅니다.
- 내부에 모듈화 시켜서 사용하는 셈플도 메모하면서 넣어둘 예정입니다.
CocoaPods는 Swift 및 Objective-C 프로젝트의 라이브러리 관리자입니다. 45,000 개가 넘는 라이브러리가 있으며 300 만 개가 넘는 App에 사용됩니다. CocoaPod는 프로젝트에서 편리하게 라이브러리를 사용하는 데 도움을 줄 것입니다.
- iOS에서는 추가로 Carthage(카르타고) 라는 비슷한 방식도 있습니다. 워크스페이스를 만드는 방식이 아닌 Embbed Framework를 이용하는 방식이죠.
- android에서의 Maven, Gradle 과 비슷하게 생각하시면 됩니다. <br /><br />
단, 너무 무분별할 라이브러리 사용은 지양합시다. <br /> 자신이 감당할 수 있는 수준으로 사용합시다. <br /> swift는 버전이 계속 변하고 있습니다. 만약 라이브러리 개발하신 분께서 업데이트가 늦거나 업데이트를 하지 않는 상황이 왔을 때, 그걸 대응할 자신이 있어야겠죠?
<br /><br />
목차
# 기본적인 설치방법<br />
# 프로젝트 생성과 초기셋팅방법<br />
# 맥용 프로그램 <br />
# 팟 셋팅이 꼬였을때 <br />
# 저장소별 무시 목록 작성하기 <br /> <br />
터미널 명령어
#1-1 버전정보 확인하기<br />
#1-2 최신버전으로 업데이트 하기<br />
#1-3 버전 바꾸기<br />
#1-4 환경정보 보기<br />
#1-5 install vs update<br />
#1-6 오직 한개의 원하는 라이브러리만 업데이트 하기<br />
<br />Podfile 작성 팁
#2-1 def 사용<br />
#2-2 Debugging 에서만 사용하기<br />
#2-3 git의 repository에서 직접 가져오기<br />
#2-4 xcode에서 pods 프로젝트 경고 없애기<br />
#2-5 로컬 폴더에 라이브러리 소스를 다운받고 pods 라이브러리 연결하기<br />
<br /> <br />코코아팟츠에 자신의 라이브러리 등록하기
#3-1 코코아팟츠에 자신의 라이브러리 등록해본 과정<br />
<br /> <br /># 기본적인 설치방법
Ruby gem이 필요합니다. CocoaPods는 Ruby로 제작되었으며 macOS에서 사용할 수있는 기본 Ruby로 설치할 수 있습니다.
cocoapods 를 설치합니다.
$ sudo gem install cocoapods
설치 후에 setup을 실행해서 CocoaPods master repo 를 설정합니다.
- setup : Setup the CocoaPods environment 이라 적혀있네요.
- 필요한 파일을 다운로드해서 Pods를 이용할 준비를 합니다.
$ pod setup
기본적인 사용을 위한 설정을 완료했습니다. 이제 xcode에 라이브러리 설치가 가능합니다. 초기 프로젝트, Pods 최신버전, 베타버전, 버전 변경은 아래에서 확인해주세요.
# 프로젝트 생성과 초기셋팅방법
- 프로젝트를 생성합니다.
- 프로젝트의 해당 폴더로 이동합니다.
- 프로젝트.xcodeproj 파일이 있는 폴더로 이동합니다.
$ cd 프로젝트경로
- Podfile 파일을 생성합니다.
$ pod init
- Podfile 파일을 편집합니다.
- 능력 것 편집 합니다. (tool 이나 vi 등등)
target '프로젝트명' do
# 스위프트를 사용하지 않고 동적 라이브러리를 이용하지 않는다면 아래 구문을 주석처리 합니다
use_frameworks!
# 대표적인 네트워크 라이브러리입니다.
pod 'Alamofire'
# 스넵킷이라는 오토레이아웃을 소스 코드 구현을 용이하게 해주는 라이브러리입니다.
pod 'SnapKit'
end
- 참고로 지원하는 라이브러리가 있는지 찾아 볼때?
$ pod search 라이브러리명
- Pod를 이용해서 라이브러리 설치하기
$ pod install
- 만들어진 워크스페이스 파일 실행
- 콜솔 명령어가 아닌 그냥 파일을 찾아 실행하면 됩니다.
$ . 프로젝트명.xcworkspace
- or 그냥 클릭으로 프로젝트명.xcworkspace 파일 실행
<img width="280" height="135" src="/Image/xcworkspace_ok.png"></img>
# 맥용 프로그램
- 다운로드 링크 : https://cocoapods.org/app
- 제일 밑으로 스크롤 하면 하단에 "Download CocoaPods.app" 라는 버튼이 있습니다.
- 클릭하면 최신 버전의 프로그램을 받을 수 있습니다.
GUI에서 Podfile 관리와 Pod Install, Update가 가능합니다.
- 이미지로 보면? 실행했을 때 시작화면입니다.
<img width="366" height="322" src="/Image/cocoapodsApp00.png"></img>
# 팟 셋팅이 꼬였을때
이것은 제가 사용하는 방법입니다.
- Podfile 파일이 있는 폴더 기준입니다.
- Pods 폴더포함 모두 삭제
- Podfile.lock 파일 삭제
- 프로젝트명.xcworkspace 파일 삭제
- 프로젝트명.xcodeproj에 마우스를 올리고 오른쪽 클릭, 아래 진행
- 패키지 내용보기
- project.pbxproj 과 기타 파일들이 보여질 것입니다.
- project.pbxproj만 남기고 다른 파일 모두 삭제
- project.pbxproj 파일 1개는 꼭 남기세요.
- 나머지는 과감하게 지우세요.
- Podfile이 있는 폴더에서 다시 Install Or Update 실행
- 전 보통 Install을 합니다.
$ pod install
or
$ pod update
- 만들어진 프로젝트명.xcworkspace를 실행해서 확인합니다.
- 만약 위 방법으로 안된다면
- Xcode 실행
- 상단 메뉴에서 Xcode - Preferences 실행
- Location 탭에 -> Derived Data 가 있어요.
- /Users/사용자명/Library/Developer/Xcode/DerivedData .. 그리고 화살표 누르면 폴더로 이동하는 데
- DerivedData 이 폴더 전체를 지우세요.
- 안전하는.. 빌드 오류가 발생하는 프로젝트의 DerivedData 만을 삭제하면 됩니다.
- DerivedData 폴더 전체를 지우면 EditorKit(문법 강조 및 자동완성이 동작하지 않는 치명적인 부작용)이 문제가 있다고 하는 내용을 봤는 데, 저는 반대로 자동완성이 되지 않는 경우에 DerivedData 이 폴더 전체를 지우고 해결되는 경우를 많이 경험했습니다. <br />
# 저장소별 무시 목록 작성하기
.gitignore 파일을 생성해 두면 편리합니다. <br /> .gitignore 파일이란 Git 버전 관리에서 제외할 파일 목록을 지정하는 파일입니다.<br /> . 표시는 숨김파일을 의미합니다.<br />
Finder에서 아래 단축키를 사용하면 숨겨진 파일이 보여집니다.
단축키 : shift +command + .
git 파일이 있는 최상위 디렉토리에서 터미널을 실행시켜 내용을 작성합니다.
- .gitignore 파일을 생성한다.
$ touch .gitignore
- 만들어졌는 지 확인한다면?
$ ls -a
- 편한 방법으로 해당 파일을 편집합니다.
$ vi .gitignore
내용의 셈플을 샘플 .gitignore은 아래와 같습니다.
- .gitignore
# Pods 관련 (pod install or pod update 해서 자동 생성된 파일들)
Podfile.lock
JWSCocoapodsTips.xcworkspace
JWSCocoapodsTips/Pods/
# xcodeproj 안의 불필요파일
*.xcuserstate
xcschememanagement.plist
contents.xcworkspacedata
# 필요한 내용 더 추가
- 설정이 되면 이제 git commit 할때 관련 불필요한 파일은 나타나지 않을거에요~
그리고 이런설정을 쉽게 할 수 있는 킹왕짱 사이트가 있습니다. <br /> 그것은 깃이그노어 닷 아이오를 웹 주소에 치시면 됩니다. <br />
- 링크 : http://gitignore.io/ <br /> 그리고 아래 이미지와 같이 검색어를 추가하고 "Create" 버튼을 누르시면 자동 완성된 코드가 나옵니다.<br /> 여기에 필요한 내용을 좀 더 추가하시면 멋진 소스관리가 되실 것 입니다.<br />
#1-1 버전정보 확인하기
버전을 확인합니다.
$ pod —-version
Gems 의 상세한 버전을 원할 경우 입니다.
$ gem which cocoapods
#1-2 최신버전으로 업데이트 하기
최신버전으로 설치합니다.
$ [sudo] gem install cocoapods --pre
#1-3 버전 바꾸기
제거하고 설치를 하려면 아래와 같이 하면 됩니다.
- 먼저, 삭제합니다.
$ [sudo] gem uninstall cocoapods
- 원하는 버전으로 설치합니다.
$ [sudo] gem install cocoapods -v 1.3.1
<br />
pods가 설치되어있고, 바로 버전을 바꾸고 싶다면!
$ pod _1.3.1_ setup
#1-4 환경정보 보기
Pod 설정 정보가 보고 싶다면
- 임의 경로에서 실행
- Stack : CocoaPods버전, Ruby버전, RubyGems버전, Xcode 버전, Git버전, Ruby lib경로, Repositories 등등.. 여러 정보를 확인할 수 있습니다.
- Installation Source : pod 설치 경로
- Plugins : 관련 플러그인 정보
$ pod env
- Podfile이 있는 경로에서 실행
- 1번의 내용에 이어서 Podfile 정보도 같이 출력됩니다.
$ cd 프로젝트경로
$ pod env
<br />
<br />
#1-5 install vs update
Podfile.lock 기준으로 업데이트 하느냐 마느냐의 차이입니다. <br /> 둘다 기본적으로 Podfile 기준으로 진행합니다.
- "pod install"
- Podfile.lock 파일을 기준으로(고려해서) 설치를 합니다.
- 기존에 설치된 라이브러리의 변경점이 있더라도 Podfile.lock에 기존 설정정보가 있다면 업데이트 하지 않습니다. (remove 후에 install 다시해야됩니다.)
- "pod update"
- 모든 Pod 라이브러리를 Pod 저장소(Repositories)에서 새로운 버전이 있으면 최신으로 업데이트 합니다.
- Podfile에 '~>x.y' 과 같이 제한을 걸었다면, 제한 된 버전까지만 업데이트가 되겠지요.
저는 사용할 때는..
Podfile 에 작성할 때는 pod 'MyPod', '~>1.2' 제한을 두어서 항상 자동 최신으로 자동업데이트가 되지 않도록 해두도록 노력하고, update 보다는 install 을 우선 사용합니다.
그리고 필요하면 아래의 1-6에서 개별 업데이트도 가능하니, 라이브러리별 업데이트만 사용하기도 합니다.
<br /> <br />#1-6 오직 한개의 원하는 라이브러리만 업데이트 하기
업데이트 다음에 라이브러리 명을 적습니다.
$ pod update [PODNAME]
ex)
$ pod update AFNetworking
<br />
<br />
#2-1 def 사용
아래와 같이 def-end 를 이용해서 사전 정의된 값을 가져와서 사용할 수 있습니다.
- 재사용성과 깔끔한 정리~
def network_pods
# 대표적인 네트워크 라이브러리입니다.
pod 'Alamofire'
# Alamofire를 사용할 때 상단 상태 바에 통신중일때 기본 인디케이터가 나타나도록 합니다.
pod 'AlamofireNetworkActivityIndicator'
# Alamofire를 이용할 때 로그를 쉽게 볼 수 있습니다.
pod 'AlamofireActivityLogger'
end
def core_pods
# 스넵킷이라는 오토레이아웃을 소스 코드 구현을 용이하게 해주는 라이브러리입니다.
pod 'SnapKit'
# 유용한 날짜 관련 라이브러리입니다.
pod 'SwiftDate'
end
target '프로젝트명' do
# 스위프트를 사용하지 않고 동적 라이브러리를 이용하지 않는다면 아래 구문을 주석처리 합니다
use_frameworks!
# 이렇게 위에 정의된 내용을 사용합니다.
network_pods
core_pods
end
#2-2 Debugging 에서만 사용하기
Debugging-에서만-사용하기
pod '라이브러리명', :configurations => ['Debug']
or 다른 옵션도 가능하죠.
pod '라이브러리명', '~> 4.0', :configurations => ['Debug']
#2-3 git의 repository에서 직접 가져오기
git에 직접 접근해서 가져오기
pod '라이브러리명', :git => 'https://github.com/라이브러리경로'
or 그 안의 브런치의 최신 라이브러리가 필요하다면
pod '라이브러리명', :git => 'https://github.com/라이브러리경로', :branch => '브런치명'
or tag 정보까지의 라이브러리가 필요하다면?
pod '라이브러리명', :git => 'https://github.com/라이브러리경로', :tag => '1.0.0'
or 원하는 commit된 부분까지가 필요하다면?
pod '라이브러리명', :git => 'https://github.com/라이브러리경로', :commit => '0e380832ab'
<br />
<br />
#2-4 xcode에서 pods 프로젝트 경고 없애기
Podfile에서 "inhibit_all_warnings!" 만 추가하면 간단하게 경고가 사라집니다.
- inhibit_all_warnings! 코드 추가
target '프로젝트명' do
# 스위프트를 사용하지 않고 동적 라이브러리를 이용하지 않는다면 아래 구문을 주석처리 합니다
use_frameworks!
# xcode에서 pods의 모든 프로젝트 경고 없애기
inhibit_all_warnings!
end
or 라이브러리 별로(개별로).., 원하는 라이브러리만 경고를 사라지게 하고 싶다면?
pod '라이브러리명', :inhibit_warnings => true
- pod install을 다시 하고
$ pod install
- 빌드실행
빌드는 워크스페이스 파일을 실행해서 xcode에서 해야죠~
- 테스트해 본 상세 내용 : 링크 클릭!
#2-5 로컬 폴더에 라이브러리 소스를 다운받고 pods 라이브러리 연결하기
회사 여건상, Github에 연결할 수 없다면..<br /> 혹은 Mac에 다운 받아 놓고, 그 경로의 소스를 연결하고 싶다면
pod '라이브러리명', :path => '내폴더기준에서 라이브러리 최상위 폴더 위치'
예시로 하나의 진행을 해보면.. (RxSwift 라이브러리 하위 버전이 필요하다면)
- RxSwift Github 사이트에서 Releases 탭을 클릭합니다.
<img width="537" height="186" src="/Image/pod_ path_ex_01.png"></img>
- 원하는 버전 (전 임의의 4.3.0 버전)의 소스 (Zip) 다운로드
<img width="244" height="260" src="/Image/pod_ path_ex_02.png"></img>
- 원하는 위치에 압축 풀기
- 예시를 위해 현재 프로젝트는 cocoapods-tips/JWSCocoapodsTips,
- 예시를 위한 라이브러리 위치는 cocoapods-library/RxSwift-4.3.0에 설정
<img width="325" height="94" src="/Image/pod_ path_ex_03.png"></img>
- podfile 파일 수정 (해당 내용 추가)
pod 'RxSwift', :path => '../../cocoapods-library/RxSwift-4.3.0'
- 끝으로 터미널에서 pod 명령어 실행 😀
$ pod install
<br />
<br />
#3-1 코코아팟츠에 자신의 라이브러리 등록해본 과정
2017년 10월 18일 테스트 진행했던 과정을 정리한 것입니다.
참고한 유튜브 동영상 링크 : https://www.youtube.com/watch?v=gNMNeqXKnzw
- 참고한 링크 1 : https://guides.cocoapods.org/making/index.html
- 참고한 링크 2 : https://magi82.github.io/ios-regist-cocoapods/
코코아팟츠는 설치되어있을 거라는 가정하게 아래는 진행사항입니다.
# Go Go!
1. pod lib create 프로젝트명 : Demo Application이 생성된다.
- http://guides.cocoapods.org/making/using-pod-lib-create.html : 여기를 참고 하라고 알려줌
- 질문에 답은.. swfit, yes, none, no.. 통상 이리 하게 된다. 처음에 저도 같은 선택을 했음.
2. 그리고 github에 프로젝트를 생성한다.
3. 이후 터미널에서 생성한 레파지토리에 프로젝트를 추가한다.
…or create a new repository on the command line
echo "# 프로젝트명" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/ClintJang/프로젝트명.git
git push -u origin master
…or push an existing repository from the command line
git remote add origin https://github.com/ClintJang/프로젝트명.git
git push -u origin master
.. 실제
3.1. cd 프로젝트명의 폴더
3.2. git remote add origin https://github.com/ClintJang/프로젝트명.git
3.3. git add .
3.4. git commit -m "Create project via pod"
3.5. git push -u origin master
3.6. 잘 올라갔는 지 레파지 토리 확인
4. 다시 example의 xcode 실행파일로 돌아와서 Podspec Metadata폴더안의 프로젝트명.podspec를 수정한다.
5. pod lib lint 프로젝트명.podspec : 오류가 있는 지 검증한다.
5.1. pod lib lint --verbose : 과정을 보려면
5.2. pod lib lint --verbose --no-clean : 클린 빌드 하려면
5.3. pod lib lint --allow-warnings : 경고는 무시하려면
5.4. 프로젝트 passed validation : 이 메시지를 봐야된다.
5.4.1. 잘 되었는 지 확인은 다른 프로젝트에서 pod를 추가해 보면 된다.
5.4.2. podfile에 pod '프로젝트명', :path => '경로/경로/프로젝트명'
5.4.3. 해당 콘솔에서 pod install
6. git status : 반영할 것이 있는 지 확인한다.
6.1. git add . : 추가
6.2. git status : 녹색 확인
6.3. git commit -m "해당 수정내역"
6.4. git status : 이젠 없을 것임...
7. git tag 0.1.0 -a 버전 정보를 맞춘다.
7.1. 작성할 내용 추가하고 esc :x로 나온다.
7.1.1. 귀찮으면 git tag 0.1.0 : 까지 한다.
7.2. git status 로 상태를 확인한다. push 할 것이 있을 것이다...
7.3. 혹은 그냥 github site에서 release Tap을 찾아서 거기서 직접 작성해서 같은 버전을 추가한다.!!!
7.4. 잘 적용되면 git tag 로 확인
8. git push --tags
8.1. * [new tag] 0.1.0 -> 0.1.0 메시지를 확인해야된다.
9. pod trunk register 메일주소 '이름' --description='상세'
9.1. 반드시 메일에서 가서 웹 링크를 클릭해야됩니다!!!!!!! 그리고
10. pod trunk push
10.1. 경고가 많으시다면... pod trunk push --allow-warnings
아래의 메시지를 보시면 성공!!! (If you see the message below, you will succeed !!!)
🎉 Congrats
🚀 프로젝트명("Project Name") (0.1.0) successfully published
📅 October 18th, 15:34
🌎 https://cocoapods.org/pods/프로젝트명("Project Name")
👍 Tell your friends!
# end
- Fun day!