Skip to content

iOS 라이브러리를 관리하는 CocoaPods Tip정보 모음입니다.

License

Notifications You must be signed in to change notification settings

ClintJang/cocoapods-tips

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CocoaPods 유용한 정보 모음입니다.

License CocoaPods tips Swift 4

CocoaPods를 감사하게 사용하고 있습니다. 😁
사용하면서 유용했던 정보들을 잘 정리해 두고 싶어서 작성했습니다.
계속 잘 정리해서 처음 사용하시는 분들 혹은 익숙하지 않은 분들에게 도움이 될 수 있도록 하겠습니다. 😊

  • 기본적인 설치, 프로젝트 실행에서 유용한 팁까지 정리해봅니다.
  • 내부에 모듈화 시켜서 사용하는 셈플도 메모하면서 넣어둘 예정입니다.

CocoaPods는 Swift 및 Objective-C 프로젝트의 라이브러리 관리자입니다. 45,000 개가 넘는 라이브러리가 있으며 300 만 개가 넘는 App에 사용됩니다. CocoaPod는 프로젝트에서 편리하게 라이브러리를 사용하는 데 도움을 줄 것입니다.

  • iOS에서는 추가로 Carthage(카르타고) 라는 비슷한 방식도 있습니다. 워크스페이스를 만드는 방식이 아닌 Embbed Framework를 이용하는 방식이죠.
  • android에서의 Maven, Gradle 과 비슷하게 생각하시면 됩니다.

단, 너무 무분별할 라이브러리 사용은 지양합시다.
자신이 감당할 수 있는 수준으로 사용합시다.
swift는 버전이 계속 변하고 있습니다. 만약 라이브러리 개발하신 분께서 업데이트가 늦거나 업데이트를 하지 않는 상황이 왔을 때, 그걸 대응할 자신이 있어야겠죠?



목차

# 기본적인 설치방법

# 프로젝트 생성과 초기셋팅방법

# 맥용 프로그램

# 팟 셋팅이 꼬였을때

# 저장소별 무시 목록 작성하기

터미널 명령어

#1-1 버전정보 확인하기

#1-2 최신버전으로 업데이트 하기

#1-3 버전 바꾸기

#1-4 환경정보 보기

#1-5 install vs update

#1-6 오직 한개의 원하는 라이브러리만 업데이트 하기


Podfile 작성 팁

#2-1 def 사용

#2-2 Debugging 에서만 사용하기

#2-3 git의 repository에서 직접 가져오기

#2-4 xcode에서 pods 프로젝트 경고 없애기

#2-5 로컬 폴더에 라이브러리 소스를 다운받고 pods 라이브러리 연결하기



코코아팟츠에 자신의 라이브러리 등록하기

#3-1 코코아팟츠에 자신의 라이브러리 등록해본 과정



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 최신버전, 베타버전, 버전 변경은 아래에서 확인해주세요.

Top으로 가기

  1. 프로젝트를 생성합니다.
  2. 프로젝트의 해당 폴더로 이동합니다.
    1. 프로젝트.xcodeproj 파일이 있는 폴더로 이동합니다.
$ cd 프로젝트경로 
  1. Podfile 파일을 생성합니다.
$ pod init
  1. Podfile 파일을 편집합니다.
    1. 능력 것 편집 합니다. (tool 이나 vi 등등)
target '프로젝트명' do
  # 스위프트를 사용하지 않고 동적 라이브러리를 이용하지 않는다면 아래 구문을 주석처리 합니다
  use_frameworks!

  # 대표적인 네트워크 라이브러리입니다.
  pod 'Alamofire'

  # 스넵킷이라는 오토레이아웃을 소스 코드 구현을 용이하게 해주는 라이브러리입니다.
  pod 'SnapKit'
end
  1. 참고로 지원하는 라이브러리가 있는지 찾아 볼때?
$ pod search 라이브러리명
  1. Pod를 이용해서 라이브러리 설치하기
$ pod install
  1. 만들어진 워크스페이스 파일 실행
    1. 콜솔 명령어가 아닌 그냥 파일을 찾아 실행하면 됩니다.
$ . 프로젝트명.xcworkspace
  • or 그냥 클릭으로 프로젝트명.xcworkspace 파일 실행

Top으로 가기

  • 다운로드 링크 : https://cocoapods.org/app
    1. 제일 밑으로 스크롤 하면 하단에 "Download CocoaPods.app" 라는 버튼이 있습니다.
    2. 클릭하면 최신 버전의 프로그램을 받을 수 있습니다.

GUI에서 Podfile 관리와 Pod Install, Update가 가능합니다.

  • 이미지로 보면? 실행했을 때 시작화면입니다.

Top으로 가기

이것은 제가 사용하는 방법입니다.

  • Podfile 파일이 있는 폴더 기준입니다.
  1. Pods 폴더포함 모두 삭제
  2. Podfile.lock 파일 삭제
  3. 프로젝트명.xcworkspace 파일 삭제
  4. 프로젝트명.xcodeproj에 마우스를 올리고 오른쪽 클릭, 아래 진행
    1. 패키지 내용보기
    2. project.pbxproj 과 기타 파일들이 보여질 것입니다.
    3. project.pbxproj만 남기고 다른 파일 모두 삭제
      1. project.pbxproj 파일 1개는 꼭 남기세요.
      2. 나머지는 과감하게 지우세요.
삭제 전 프로젝트의 폴더 삭제 전 프로젝트 파일의 패키지 내용

휴지통으로~

삭제 후 프로젝트의 폴더 삭제 후 프로젝트 파일의 패키지 내용
  1. Podfile이 있는 폴더에서 다시 Install Or Update 실행
    1. 전 보통 Install을 합니다.
$ pod install
or
$ pod update
  1. 만들어진 프로젝트명.xcworkspace를 실행해서 확인합니다.
  • 만약 위 방법으로 안된다면
  1. Xcode 실행
  2. 상단 메뉴에서 Xcode - Preferences 실행
  3. Location 탭에 -> Derived Data 가 있어요.
    1. /Users/사용자명/Library/Developer/Xcode/DerivedData .. 그리고 화살표 누르면 폴더로 이동하는 데
    2. DerivedData 이 폴더 전체를 지우세요.
      1. 안전하는.. 빌드 오류가 발생하는 프로젝트의 DerivedData 만을 삭제하면 됩니다.
      2. DerivedData 폴더 전체를 지우면 EditorKit(문법 강조 및 자동완성이 동작하지 않는 치명적인 부작용)이 문제가 있다고 하는 내용을 봤는 데, 저는 반대로 자동완성이 되지 않는 경우에 DerivedData 이 폴더 전체를 지우고 해결되는 경우를 많이 경험했습니다.

Top으로 가기

.gitignore 파일을 생성해 두면 편리합니다.
.gitignore 파일이란 Git 버전 관리에서 제외할 파일 목록을 지정하는 파일입니다.
. 표시는 숨김파일을 의미합니다.

Finder에서 아래 단축키를 사용하면 숨겨진 파일이 보여집니다.

단축키 : shift +command + .

git 파일이 있는 최상위 디렉토리에서 터미널을 실행시켜 내용을 작성합니다.

  1. .gitignore 파일을 생성한다.
$ touch .gitignore 
  1. 만들어졌는 지 확인한다면?
$ ls -a 
  1. 편한 방법으로 해당 파일을 편집합니다.
$ vi .gitignore

내용의 셈플을 샘플 .gitignore은 아래와 같습니다.

  • .gitignore
# Pods 관련 (pod install or pod update 해서 자동 생성된 파일들) 
Podfile.lock
JWSCocoapodsTips.xcworkspace	
JWSCocoapodsTips/Pods/			

# xcodeproj 안의 불필요파일
*.xcuserstate
xcschememanagement.plist
contents.xcworkspacedata

# 필요한 내용 더 추가 
  1. 설정이 되면 이제 git commit 할때 관련 불필요한 파일은 나타나지 않을거에요~

그리고 이런설정을 쉽게 할 수 있는 킹왕짱 사이트가 있습니다.
그것은 깃이그노어 닷 아이오를 웹 주소에 치시면 됩니다.

  • 링크 : http://gitignore.io/
    그리고 아래 이미지와 같이 검색어를 추가하고 "Create" 버튼을 누르시면 자동 완성된 코드가 나옵니다.
    여기에 필요한 내용을 좀 더 추가하시면 멋진 소스관리가 되실 것 입니다.


Top으로 가기



버전을 확인합니다.

$ pod —-version

Gems 의 상세한 버전을 원할 경우 입니다.

$ gem which cocoapods

Top으로 가기

최신버전으로 설치합니다.

$ [sudo] gem install cocoapods --pre

Top으로 가기

제거하고 설치를 하려면 아래와 같이 하면 됩니다.

  1. 먼저, 삭제합니다.
$ [sudo] gem uninstall cocoapods
  1. 원하는 버전으로 설치합니다.
$ [sudo] gem install cocoapods -v 1.3.1

pods가 설치되어있고, 바로 버전을 바꾸고 싶다면!

$ pod _1.3.1_ setup

Top으로 가기

Pod 설정 정보가 보고 싶다면

  1. 임의 경로에서 실행
    1. Stack : CocoaPods버전, Ruby버전, RubyGems버전, Xcode 버전, Git버전, Ruby lib경로, Repositories 등등.. 여러 정보를 확인할 수 있습니다.
    2. Installation Source : pod 설치 경로
    3. Plugins : 관련 플러그인 정보
$ pod env
  1. Podfile이 있는 경로에서 실행
    1. 1번의 내용에 이어서 Podfile 정보도 같이 출력됩니다.
$ cd 프로젝트경로
$ pod env

Top으로 가기



Podfile.lock 기준으로 업데이트 하느냐 마느냐의 차이입니다.
둘다 기본적으로 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에서 개별 업데이트도 가능하니, 라이브러리별 업데이트만 사용하기도 합니다.

Top으로 가기



업데이트 다음에 라이브러리 명을 적습니다.

$ pod update [PODNAME]

ex)

$ pod update AFNetworking

Top으로 가기



아래와 같이 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

Top으로 가기

Debugging-에서만-사용하기

pod '라이브러리명', :configurations => ['Debug']

or 다른 옵션도 가능하죠.

pod '라이브러리명', '~> 4.0', :configurations => ['Debug']

Top으로 가기

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'

Top으로 가기



Podfile에서 "inhibit_all_warnings!" 만 추가하면 간단하게 경고가 사라집니다.

  1. inhibit_all_warnings! 코드 추가

target '프로젝트명' do
  # 스위프트를 사용하지 않고 동적 라이브러리를 이용하지 않는다면 아래 구문을 주석처리 합니다
  use_frameworks!
  
  # xcode에서 pods의 모든 프로젝트 경고 없애기
  inhibit_all_warnings!

end

or 라이브러리 별로(개별로).., 원하는 라이브러리만 경고를 사라지게 하고 싶다면?

pod '라이브러리명', :inhibit_warnings => true
  1. pod install을 다시 하고
$ pod install
  1. 빌드실행

빌드는 워크스페이스 파일을 실행해서 xcode에서 해야죠~

Top으로 가기



회사 여건상, Github에 연결할 수 없다면..
혹은 Mac에 다운 받아 놓고, 그 경로의 소스를 연결하고 싶다면

pod '라이브러리명', :path => '내폴더기준에서 라이브러리 최상위 폴더 위치'

예시로 하나의 진행을 해보면.. (RxSwift 라이브러리 하위 버전이 필요하다면)

  1. RxSwift Github 사이트에서 Releases 탭을 클릭합니다.

  1. 원하는 버전 (전 임의의 4.3.0 버전)의 소스 (Zip) 다운로드

  1. 원하는 위치에 압축 풀기
    • 예시를 위해 현재 프로젝트는 cocoapods-tips/JWSCocoapodsTips,
    • 예시를 위한 라이브러리 위치는 cocoapods-library/RxSwift-4.3.0에 설정

  1. podfile 파일 수정 (해당 내용 추가)
pod 'RxSwift', :path => '../../cocoapods-library/RxSwift-4.3.0'
  1. 끝으로 터미널에서 pod 명령어 실행 😀
$ pod install

Top으로 가기



2017년 10월 18일 테스트 진행했던 과정을 정리한 것입니다.

참고한 유튜브 동영상 링크 : https://www.youtube.com/watch?v=gNMNeqXKnzw

코코아팟츠는 설치되어있을 거라는 가정하게 아래는 진행사항입니다.

# 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!
 

Top으로 가기

Releases

No releases published

Packages

No packages published