본문 바로가기

iOS/3rd Party Library

[iOS] CocoaPods - 라이브러리 생성 및 배포하기

⚙️ Pod 프로젝트 생성방법


1. Github에 Repository를 생성합니다.

 

 

2. 생성한 Repository를 Clone한 후 루트경로로 이동하여 pod lib create {라이브러리명} 명령어를 실행합니다.

 

3. 실행하면 질문을 하는데 해당 질문들에 대한 설정을 진행합니다.

  • Q1) What platform do you want to use?? [ iOS / macOS ]
  • Q2) What language do you want to use?? [ Swift / ObjC ]
  • Q3) Would you like to include a demo application with your library? [ Yes / No ]
    • 데모앱을 선택하면 라이브러리에 대한 Xcode 프로젝트를 자동생성합니다.
  • Q4-1) Which testing frameworks will you use? [ Specta / Kiwi / None ]
    • → ObjC선택한경우 테스트 프레임워크 중 Specta, Kiwi을 지원합니다.
  • Q4-2) Which testing frameworks will you use? [ Quick / None ]
    • → Swift선택한 경우 테스트 프레임워크 중 Quick을 지원합니다.
  • Q5) Would you like to do view based testing? [ Yes / No ]

 

4. 생성된 폴더의 파일들을 루트디렉토리로 옮깁니다.

📂 생성된 폴더 구조

  MyLib
  ├── .travis.yml # travis ci 용 설정파일
  ├── _Pods.xcproject # 카르타고 지원을 위한 팟프로젝트에 대한 심볼릭링크
  ├── Example # 데모 번들
  │   ├── MyLib
  │   ├── MyLib.xcodeproj
  │   ├── MyLib.xcworkspace
  │   ├── Podfile
  │   ├── Podfile.lock
  │   ├── Pods
  │   └── Tests
  ├── LICENSE # 기본값이 MIT 라이센스
  ├── MyLib.podspec # Podspec
  ├── MyLib # 라이브러리 클래스 배치 폴더
  │   ├── Assets
  │   └── Classes
  │     └── RemoveMe.[swift/m] # 초기 컴파일작동여부 확인용도파일 
  └── README.md

 

5. podspec 파일을 수정합니다.

 

podspec - 🔗 공식문서

.podspec파일은 팟 라이브러리에 대한 정보를 담고 있습니다. 소스를 가져와야 하는 곳, 사용할 파일, 적용할 빌드 설정외에도 이름, 버전, 라이브러리에 대한 설명 등 일반적엔 메타데이터가 포함됩니다. 
.podspec파일에 문제가 있을 경우 라이브러리를 코코아팟에 배포할 때 오류가 발생합니다.

  • 기본적인 항목 설명
    • name: 라이브러리 이름
    • version: 배포 버전
    • license: 오픈소스 라이선스 정보
    • homepage: 홈페이지 주소로 주로 Github 저장소의 메인 페이지를 사용
    • author: 라이브러리 만든이의 이름과 이메일
    • summary: 라이브러리에 대한 간단한 설명
    • source: 라이브러리 소스가 위치해있는 원격 저장소 주소
    • source_files: 소스 파일이 위치한 디렉토리 주소
    • frameworks: 사용한 프레임워크
예시 파일
Pod::Spec.new do |s|
  s.name             = 'MySwiftUIDesignSystem'
  s.version          = '0.1.0'
  s.summary          = 'SwiftUI 개발을 위한 개인 DesignSystem'

  s.description      = <<-DESC
  SwiftUI 개발을 위한 iOS 디자인 시스템입니다. 이 시스템은 다양한 UI 컴포넌트와 스타일을 포함하고 있어, 일관된 디자인을 유지하면서 빠르게 애플리케이션을 개발할 수 있도록 도와줍니다. 본 디자인 시스템은 비공개 Pod로 제공되며, 내부 프로젝트에서 사용하기 위해 제작되었습니다.
                       DESC

  s.homepage         = 'https://github.com/sookim-1/MySwiftUIDesignSystem'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'sookim-1' => 'scstnghks@gmail.com' }
  s.source           = { :git => 'https://github.com/sookim-1/MySwiftUIDesignSystem.git', :tag => s.version.to_s }

  s.ios.deployment_target = '13.0'
  s.swift_version         = '5.0'
  s.source_files = 'MySwiftUIDesignSystem/Classes/**/*'
  
  # s.resource_bundles = {
  #   'MySwiftUIDesignSystem' => ['MySwiftUIDesignSystem/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  s.frameworks = 'UIKit', 'SwiftUI'
end

 

6. Podspec 파일 검증

배포를 하기 전 꼭 .podspec 파일에 이상이 없는지 확인해야 합니다.
.podspec파일이 있는 경로에서 아래 명령어를 호출합니다. 네트워크 접근에 따라 다른 명령어를 실행할 수 있습니다.

# 유효성 검증
pod spec lint(네트워크에 접근) 또는 pod lib lint(네트워크에 접근하지 않는 검증)

simctl의 오류의 원인은 Xcode설정(⌘ + ,)에서 Command Line Tools 설정

7. 검증이 통과하면 원격저장소에 Push를 합니다.

 
 

🚀 Pod 프로젝트 배포방법


공개저장소로 배포하기

1. cocoaPod 계정 등록

pod trunk register {이메일} {닉네임}

2. 배포

pod trunk push {라이브러리명}.podspec

 

비공개저장소로 배포하기

비공개로 Pod을 배포하기 위해서는 2개의 Repository를 생성해야 합니다.

  • Library Repository : 배포할 라이브러리를 갖고 있는 GitHub Repository
  • Spec Repository : Library Repository들의 정보(podspec)를 갖고 있는 GitHub Repository

podfile에 내 Spec Repository 주소를 적고 내가 추가하고 싶은 Library를 명시하게 되면 CocoaPods는 Spec Repo를 보고 내 Library Repo에 찾아가 파일을 다운로드 받게 됩니다.
 

1. Spec Repository 생성합니다.

 

2. Spec Repository를 추가합니다.

pod repo add <spec repo 이름> <spec repo github 주소>

 

3. 라이브러리의 .podspec파일을 Spec Repository에 추가합니다.

pod repo push <spec repo 이름> <podspec 파일 경로>

 
이미지처럼 이슈가 발생하면 태그 버전을 추가해야합니다.
 

version 에러 원격 저장소에 버전태그 달기

# tag 확인
$ git tag

# tag 생성, 배포
$ git tag 0.1.0
$ git push origin 0.1.0

 

4. Pod 설치 정상작동하는 지 확인합니다.

Pod을 적용할 Xcode프로젝트의 Podfile 작성

# CocoaPod은 PodSpec을 통해서 라이브러리를 인식하고 분류합니다. 
# 해당 줄은 원하는 Spec저장소를 연결합니다.
source '<https://github.com/sookim-1/MySwiftUIDesignSystemSpec.git>'

target 'tempDSTest' do
  use_frameworks!

  # Pods for tempDSTest
  pod 'MySwiftUIDesignSystem'
end

 

5. 비공개 Pod 공유하기

내부 팀원과 공유하기 위해서는 Spec Repository(git)의 접근 권한이 필요하다. 또한 local CocoaPods 설치를 위해서 spec private repo가 추가되어 있어야 합니다.

template : $ pod repo add [REPO_NAME] [SOURCE_URL]
$ pod repo add MySwiftUIDesignSystemSpec <https://github.com/sookim-1/MySwiftUIDesignSystemSpec.git>

이 다음은 위의 4번단계와 동일하게 Podfile을 작성하면 됩니다.

 

6. 업데이트방법

라이브러리 코드를 수정한 후 업데이트하기 위해서는 태그버전을 올려야 합니다.

1. .podspec 파일 버전번호를 올립니다 -> 0.1.1
2. git tag 0.1.1
3. git push origin 0.1.1
4. pod repo push [스펙 저장소 이름] [라이브러리명].podspec

태그버전을 올리지 않고 사용하기 위해서는 아래처럼 Podfile을 수정합니다.

source '<https://github.com/sookim-1/MySwiftUIDesignSystemSpec.git>'
target 'tempDSTest' do
  use_frameworks!

  # Pods for tempDSTest
  pod 'MySwiftUIDesignSystem', :git => '<https://github.com/sookim-1/MySwiftUIDesignSystem.git>', :branch => 'main'
end

코드가 변경이 안되어있다면 코코아팟 Refresh를 합니다.

pod cache clean --all
pod deintegrate
rm Podfile.lock
pod install

 

🔗 참고링크