CocoaPods A to Z

frogKing·2023년 3월 5일
0
post-thumbnail

배경

CocoaPods이 없었다면..?

앱 개발 강의를 들으면서 CocoaPods을 자연스럽게 배운 사람으로서 CocoaPods 없이 외부 라이브러리를 관리하는 방법을 찾아봤다.

  1. 먼저, 원하는 오픈소스 라이브러리를 다운로드 받습니다.
  2. 압축 파일을 풀고, 해당 라이브러리의 폴더를 생성합니다.
  3. Xcode를 실행합니다.
  4. 프로젝트를 열고, 해당 타겟을 선택합니다.
  5. "General" 탭에서 "Embedded Binaries"를 클릭합니다.
  6. "+" 버튼을 클릭하여 다운로드 받은 라이브러리의 폴더를 선택합니다.
  7. "Add" 버튼을 클릭합니다.
  8. "Build Phases" 탭으로 이동합니다.
  9. "Link Binary With Libraries"를 클릭합니다.
  10. "+" 버튼을 클릭하여 라이브러리를 추가합니다.
  11. "Add Other" 버튼을 클릭합니다.
  12. 다운로드 받은 라이브러리 폴더에서 ".a" 확장자 파일을 선택합니다.
  13. "Open" 버튼을 클릭합니다.
  14. 추가한 라이브러리가 "Link Binary With Libraries" 목록에 표시되는지 확인합니다.

이렇게 힘들게 라이브러리를 추가했다고 치자.

  • 추가한 라이브러리가 또다른 라이브러리를 참조하고 있다면?

  • 추가한 라이브러리의 최신 버전이 나온다면?

개발자가 일일이 라이브러리를 관리하기 번거로워진다..!

CocoaPods

앱에 써드파티 라이브러리를 추가 및 관리할 용도로 작성된 라이브러리 종속성 관리 도구.

Ruby 프로그래밍 언어로 작성되어 있으며, RubyGems 패키지 매니저를 사용하여 설치할 수 있다.

  • 설치 방법은 인터넷에 치면 많이 나오므로 생략한다.

CocoaPods를 사용하면 프로젝트의 Podfile에 라이브러리 종속성을 정의하고, 명령어를 실행하여 라이브러리를 설치할 수 있다.

CocoaPods는 GitHub에서 호스팅되는 수천 개의 오픈 소스 라이브러리를 지원한다.

CocoaPods는 라이브러리 배포 및 관리를 위한 기능을 제공한다. CocoaPods Trunk 서비스를 사용하여 개발한 라이브러리를 CocoaPods에서 배포할 수 있다.

Podspec

CocoaPods 라이브러리를 빌드 및 배포하기 위한 파일.

  • 라이브러리의 이름, 버전, 라이센스, 저작권, 소스 코드 및 의존성 정보 등이 podspec 파일에 포함된다.
  • 라이브러리의 소스 코드와 함께 레파지토리에 저장된다.
  • CocoaPods이 Podfile에서 라이브러리를 추가할 때 해당 라이브러리의 PodSpec 파일을 검색하고, 해당 파일에서 라이브러리 정보를 읽어들여 라이브러리를 다운로드 및 설치하게 된다.

아래 코드는 SnapKit.podspec 코드이다.

Pod::Spec.new do |s|
  s.name = 'SnapKit'
  s.version = '5.6.0'
  s.license = 'MIT'
  s.summary = 'Harness the power of auto layout with a simplified, chainable, and compile time safe syntax.'
  s.homepage = 'https://github.com/SnapKit/SnapKit'
  s.authors = { 'Robert Payne' => 'robertpayne@me.com' }
  s.social_media_url = 'http://twitter.com/robertjpayne'
  s.source = { :git => 'https://github.com/SnapKit/SnapKit.git', :tag => '5.6.0' }

  s.ios.deployment_target = '10.0'
  s.osx.deployment_target = '10.11'
  s.tvos.deployment_target = '10.0'

  s.source_files = 'Sources/*.swift'

  s.libraries = 'swiftCoreGraphics'

  s.xcconfig = {
      'LIBRARY_SEARCH_PATHS' => '$(SDKROOT)/usr/lib/swift',
  }

  s.swift_versions = ['5.0']
end

Podfile

CocoaPods에서 사용할 라이브러리를 지정하는 파일.

source 'https://github.com/CocoaPods/Specs.git' // (1)
source 'https://github.com/Artsy/Specs.git' // (2)

platform :ios, '9.0' // (3)
inhibit_all_warnings! // (4)

target 'MyApp' do
  pod 'GoogleAnalytics', '~> 3.1' // (5)

  # Has its own copy of OCMock
  # and has access to GoogleAnalytics via the app
  # that hosts the test target

  target 'MyAppTests' do
    inherit! :search_paths
    pod 'OCMock', '~> 2.0.1' // (6)
  end
end

(1) CocoaPods는 PodSpec을 통해 라이브러리를 인식하고 분류하기 때문에 이러한 PodSpec이 있는 주소를 알아야 제대로 동작할 수 있다.

  • source https://github.com/CocoaPods/Specs.git 은 따로 적지 않아도 기본값으로 세팅되어 있다.

(2) 원하는 Spec 저장소를 연결할 수 있다. 기업에서 사용할 때 private한 Spec 저장소로 사용하는 경우가 많다.

(3) 해당 플랫폼, 버전에 맞춰서 설치된다. 버전은 deployment target으로 앱에서 지원하는 최소 버전을 의미한다.

(4) 빌드 시에 라이브러리에서 발생하는 warning을 무시한다. 불필요한 warning이 많으면 필요한 정보를 놓칠 수 있어 사용하기도 한다.
다음과 같이 SnapKit 라이브러리에서 발생하는 warning이 없어지게 된다.

(5) 최소 3.1 이상 4.0 미만 버전을 사용하는 것을 의미한다. 라이브러리의 depth에 MyAppTests 타겟을 표시하면 해당 라이브러리를 공통으로 사용하게 된다.

(6) 최소 2.0.1 이상 2.1 미만 버전을 사용한다. MyAppTests 타겟에서는 GoogleAnalytics, OCMock 둘 다 사용이 가능하다.

post_install과 pre_install

Podfile에서 라이브러리를 설치하기 전과 후에 실행할 수 있는 스크립트.

  • pre_install

    라이브러리를 설치하기 전에 실행되는 스크립트.

    라이브러리를 설치하기 전에 특정 디렉토리를 생성, 환경 변수 설정 및 다른 스크립트를 실행하고자 할 때 사용된다.
  • post_install

    라이브러리를 설치한 후에 실행되는 스크립트.

    라이브러리를 설치한 후에 커스텀 설정을 적용, 다른 스크립트를 실행 및 프로젝트 파일을 수정하고자 할 때 사용된다.

podfile에서 다음과 같이 사용할 수 있다.

pre_install do |installer|
  # 라이브러리 설치 전에 실행할 스크립트 내용
end

post_install do |installer|
  # 라이브러리 설치 후에 실행할 스크립트 내용
end

Podfile.lock

CocoaPods에서 사용할 라이브러리의 버전을 고정하는 파일.

  • pod install 명령을 실행할 때 생성된다. CocoaPods가 설치한 각 라이브러리의 버전 정보 및 의존성 관계를 기록하게 된다.
  • Podfile.lock 파일을 통해 프로젝트의 모든 개발자가 동일한 라이브러리 버전을 사용하도록 보장할 수 있다.
PODS: // (1)
  - SnapKit (5.6.0)

DEPENDENCIES: // (2)
  - SnapKit

SPEC REPOS: // (3)
  trunk:
    - SnapKit

SPEC CHECKSUMS: // (4)
  SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25

// (5)
PODFILE CHECKSUM: 6363da1f880a8bd2a65e47aee1657c36941adca3

// (6)
COCOAPODS: 1.11.3

(1) PODS: 프레임워크 이름과 버전 명시

(2) DEPENDENCIES: 의존성을 구분하기 위하여 프레임워크를 나열함

(3) SPEC REPOS: 프레임워크들의 다운받는 주소 명시

  • truck : CocoaPods의 공식 저장소에서 호스팅되는 라이브러리를 의미함

(4) SPEC CHECKSUMS: pod 버전에 관한 유일성을 보장하는 값

  • pod 버전에 변화가 생기면 CHECKSUM 값이 변함.

(5) PODFILE CHECKSUM: podfile에 관해 유일성을 보장하는 값

(6) COCOAPODS: 코코아팟 버전

빌드 과정

Xcode에서 Build Phases는 빌드 전처리, 컴파일, 링크, 리소스 복사 등 다양한 작업을 수행하게 된다.

Link Binary With Libraries 는 원래 수동으로 라이브러리를 추가하면 라이브러리의 이름과 상태가 적혀있게 되는데 우리는 CocoaPods로 라이브러리를 관리하기 때문에 Pods 프레임워크가 적혀있는 것을 확인할 수 있다.

[CP] Embed Pods Frameworks 는 빌드 과정에서 CocoaPods를 사용하기 위해 빌드 시점에 실행될 스크립트를 정의하는 부분이다. SnapKit을 사용하기 위해 Run script를 작성하는 것과 같다고 보면 된다.

profile
내가 이걸 알고 있다고 말할 수 있을까

0개의 댓글