본문 바로가기

프로그래밍/iOS,macOS

CocoaPods 라이브러리 배포

CocoaPods 은 podspec 파일들을 관리하는 저장소와 각 실제 파일 저장소간의 연결 역할을 하는 라이브러리 종속성 관리 도구이다. 코코아팟을 사용해 라이브러리를 배포하는 내용을 간단히 정리해 본다.

 

 

 

CocoaPods 설치

$ sudo gem install cocoapods

 

로컬 라이브러리 프로젝트 생성

템플릿으로 프로젝트 설정을 자동화해 주는 것으로 필요한 경우에 수행
별도 프로젝트 구성을 하는 경우 제외( 개인적으로 테스트 프로젝트들과 폴더 구성이 마음에 안들어 사용안함)

$ pod lib create {library-name}

지원 플랫폼, 지원 언어 등 설정
아래 내용이 자동으로 생성

Example
Tests
.podspec
git init

소스위치 : project-name/Classes
프로젝트 : Pods/Development Pods/project-name

 

단순히 podspec 파일만 생성

자동 생성없이 기존의 프로젝트의 경우 podspec만 편집
podspec파일은 root 디렉토리에 위치

$ pod spec create {lib-name.podspec}

 

.podspec 편집

Pod::Spec.new do |s|

   # 등록될 모듈이름,  podspec파일 이름은 동일해야 함
   s.name = 'library-name'

   # 모듈의 버전
   s.version = 'your-module-version'

   # 설명
   s.summary = 'sdk'
   s.homepage = 'https://sample'
   s.license = { :type => 'MIT' }
   s.author = { 'name' => 'email' }


   # git 저장소 or zip 아카이브 주소
   # 태그와 버전이 같을 필요는 없으나 관리를 위해 맞추는 편이다
   s.source = { :git => 'https://github.com/user/project.git' , :tag => 'tag-name' }
   
   # 특정 폴더인 경우
   #s.source = { :path => './path' }


   # 소스외에 프레임워크 자체를 배포하는 경우 vendored_frameworks에 정의
   s.vendored_frameworks = 'MyLibrary.framework'

   
   s.platform = :ios, '10.0'
   s.io.deployment_target = '10.0'
   s.swift_version = '5.0'
   s.cocoapods_version = '>= 1.9.0'


   # 소스파일을 포함하는 경우 소스파일 경로
   s.source_files = 'Classes/**/*'

   # 디펜던시
   s.dependency 'Library-name', '1.0.0'
end

 

 

라이브러리 git 원격 저장소를 추가 후 push

podspec에 정의한 저장소를 추가하고, 해당 저장소에 소스를 push 한다

$ git add {library}
$ git commit -m "msg"
$ git remote add origin https://github.com/user/project.git 
$ git push -u origin master

 

 

태깅

git 저장소에 릴리즈태그

lightweight tag
$ git tag "v0.1.0"

annotated tag
$ git tag -a v0.1.0 -m "message"

버전 정보는 .podspec 파일의 버전과 동일해야 함

태그 푸시
$ git push origin --tags

 

입력된 spec 정보 확인

$ pod spec lint {lib-name.podspec}
$ pod lib lint {lib-name.podspec}

 

 

 

트렁크에 올리기위한 세션 요청

$ pop trunk register {e-mail} {name} --description='설명'

전달된 메일을 통해 세션 생성

 

트렁크에 사용자 추가

pod trunk add-owner {name} {e-mail}

 

 

세션 정보 보기

$ pod trunk me

 

 

트렁크에 올리기

$ pod trunk push {file.podspec}

 

경고로 진행이 되지 않는 경우 --allow-warnings 플래그로 경고를 건너뛸수 있음

 

 


별도 저장소에 올리기

트렁크(마스터) 가 아닌 별도 위치에 podspec을 위한 저장소를 생성해 사용하면, 특정 그룹에게만 라이브러리를 배포할 수 있다.

 

Podspec 을 저장하기 위한 git 저장소만들기

podspec 파일이 저장될 git 저장소를 생성

간단하게 루트에 README.md 하나 생성해서 커밋 해준다.

$ git add README.md
$ git commit -m "podspec 저장소 생성"
$ git remote add origin https://github.com/user/spec저장소.git
$ git push -u origin master

 

 

Pod에 저장소 추가

$ pod repo add {원하는 저장소 이름} {https://github.com/user/spec저장소.git}

생성위치는 ~/.cocoapods/repos

 

저장소검사

$ cd ~/.cocoapods/repose/저장소명
$ pod repo lint .

 

podspec

podspec파일은 동일하므로, 별다른 수정없이 podspec파일의 에러여부 검사

$ pod spec lint {lib-name.podspec}

 

dependency

podspec 내 dependency 에 기술된 프레임워크가 공개된 프레임워크가 아닌

별도 저장소에 올려진 라이브러리를 참조하는 경우

해당 프레임워크 검색을 위한 주소를 알려주어야 lint에서 에러가 나지 않는다

$ pod spec lint {lib-name.podspec} --sources='https://github.com/user/your-podspec.git"

 

 

 

podspec 푸시

podspec파일은 마스터가 아닌 별도 저장소에 푸시한다.

$ pod repo push {저장소명} {lib-name.podspec} --allow-warnings

(별도 validation 을 건너뛰고 푸시하려면  --skip-import-validation 추가)

 

푸시가 정상완료되면 podspec git 저장소에도 커밋되고, 로커 위치에서 podspec 파일을 확인할 수 있다
~/.cocoapods/repos/저장소명/lib-name/version/lib-name.podspec

 

 

스펙삭제

저장소의 특정 스펙을 삭제하려면 저장소 폴더에서 삭제하고 commit 해 준다

$ cd ~/.cocoapods/repos/저장소명
$ git rm -r library-name
$ git commit -m 'remove library-name'
$ git push origin master

 

 

저장소 업데이트

$ pod repo update

 

 

저장소 삭제

$ pod repo remove {저장소명}

 


라이브러리 사용

 

Popfile 수정

#파일에 소스 위치 추가
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/user/추가한 podspec 저장소.git'


target 'MyExample' do
   use_frameworks!

   #소스추가 없이 직접 주소를 입력할수도 있다
   pod 'MyLibrary', '~>1.0', :git=>'http://github.com/user/Library'

   #로컬 라이브러리
   pod 'MyLibrary', :path=>'path'

end

 

특정 브랜치나 태그를 가져오는 경우
   :branch=>'master'
   :tag=>'tag'
   :commit=>'hash'

'프로그래밍 > iOS,macOS' 카테고리의 다른 글

XCFramework 만들기  (0) 2020.03.27
[iOS] CoreAudio AudioUnit  (0) 2019.10.08
iOS 프레임워크 파이썬 스크립트  (0) 2019.07.23
[iOS] GPUImage  (0) 2019.07.06
xcodebuild  (0) 2019.06.06
[Metal] Compute Function 샘플분석  (0) 2019.05.27
[Metal] MetalKit 플로우 분석  (0) 2019.05.27
swift , iOS 기본 사항만 빠르게 살펴보기  (0) 2019.05.23
swift - objective-c 혼합 사용  (0) 2019.05.22
ios pods google 특이한 에러  (0) 2017.01.26