iOS
CocoaPod에 대하여, TensorflowLite - ios tutorial [1]
bono.
2021. 6. 12. 17:40
환경 세팅하기
TFLite ios tutotrial을 시작하기전에, ios 환경 세팅(의존성)을 해주어야 한다. 이를 위하여 cocoaPod이란 의존성 관리툴을 사용하려 하고, 이에대하여 공식문서를 바탕으로 간단하게 설명하려 한다.
CocoaPod
CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects.
It has over 83 thousand libraries and is used in over 3 million apps.
CocoaPods can help you scale your projects elegantly.
- CocoaPod 공식 홈페이지 에는 위와같이 설명되어 있다.
- Cocoapod은 ios의 cocoa project에 관하여 여러 lib에 대한 dependency를 관리해주는 manager이다.
- Python을 해보았다면 pip가 익숙 할 것이다. pip란 python lib에 관하여 dependency를 관리해주는 툴인데, ios project(swift, objective-c) 에서 이것과 동일한 역할을 하는 툴이라 보면 된다.
CocoaPod 설치하기
sudo gem install cocoapods
- Cocoapod은 Ruby로 만들어졌다.
- 그래서 Ruby 의존성 관리 툴인 gem을 이용하여 설치하는것을 추천한다.
Pod file 만들기
cd /your project dir/
pod init
# Uncomment the next line to define a global platform for your project
platform :ios, '12.0'
target 'ImageClassificationUiKit' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for ImageClassification
pod 'TensorFlowLiteSwift'
end
- 본격적으로 의존성을 관리하기 위하여 pod 파일을 우리의 프로젝트에 생성해야 한다.
- pod file을 만드는 방법으로
- 위와같이 직접 pod file을 만들고 작성하거나
- pod init 을 통해 만들어 주면 된다.
- 원하는 라이브러리는 cocoapod 홈페이지 에서 검색하여 찾으면 된다.
- 생성된 pod 파일의 parameter들은 다음의 의미를 가진다.
- platform :ios, '12.0' cocoapod을 사용하기 위해서서는 우리 xcode project의 target을 link시켜주어야 한다.
- target : 우리 프로젝트 이름
- pod : 설치하고자 하는 라이브러리 이름.
Xcode project에 연결하기
cd /your project dir/
pod install
- Pod file을 만들고, 해당 디렉토리에서 Pod install 명령어를 입력한다.
- 그러면 그림1. 과 같은 커멘드들이 나타나고 complete 되었다는 커멘드가 나타날 것이다.
- 성공하면 그림2. 와 같이 xcodeproj, xcworkspace, podfile.loc, pods dir가 생성된다.
- 그후에 해당 프로젝트를 실행해보면 그림 3.과 같이 내부에 pod 파일이 있는것을 확인 할 수 있다.
CocoaPod 더 깊이 알아보기, FAQ
기존 workspace와 통합하고 싶다면?
workspace 'MyWorkspace'
- cocoapod은 이미 존재하는 workspace와 통합하는 기능을 제공한다.
- .xcworkspace 확장자를 가지는 file 이름을 지정하여 worksapce "/myworkspace.xcworkspace" 해주면 된다.
Pod install 과 Pod update는 언제써야할까?
- 사용하려고 보면 install 을 써야할지 update를 써야할지 햇갈리는 경우가 있다.
- 공식문서에 따르면 다음과 같은 설명을 하고 있다.
Pod install
pod install을 사용하게 되면 새로운 pod을 프로젝트에 설치하게 된다.
즉, 우리의 프로젝트가 이미 pod 파일을 가지고 있는 상태더라도 pod 파일을 설치한다는 말이다. 따라서 라이브러리를 추가하거나 지울때 pod install을 사용하면 된다.
- pod install 명령어를 입력하면 새로운 pod를 설치한다.
- 각 pod(라이브러리) 버전은 Podfile.lock에 기록해 놓는다. Podfile.lock을 통해서 pod의 버전관리를 한다.
- pod install을 할때 Podfile.lock에 존재하는 pod에 대해서는 Podfile.lock에 지정된 버전을 다운받는다. 새로운 버전이 있는지 체크 하지 않는다.
- Podfile.lock에 없는 pod의 경우에는 우리가 작성한 pod 파일에 명시한 조건을 기반으로 라이브러리를 찾아 다운받는다.
Pod update
update는 새로운 pod을 프로젝트에 설치하지 않는다. 따라서 라이브러리의 추가 / 삭제가 없는 상황에서 버전의 update를 원할 때 update를 해주면 된다.
- 우리가 설치한 pod (라이브러리) 의 최신버전이 있는지 확인하고 있다면 설치한다.
- 따라서 Podfile.lock을 참조하지 않고 독립적으로 수행된다.
- pod update "pod lib" 처럼 특정 pod을 명시적으로 언급해주면 해당 pod만 최신의 버전으로 업데이트하고, pod update 한다면 모든 pod에 대해 업데이트한다.
Podfile.lock 파일은 뭘까?
PODS:
- TensorFlowLiteC (2.4.0):
- TensorFlowLiteC/Core (= 2.4.0)
- TensorFlowLiteC/Core (2.4.0)
- TensorFlowLiteSwift (2.4.0):
- TensorFlowLiteSwift/Core (= 2.4.0)
- TensorFlowLiteSwift/Core (2.4.0):
- TensorFlowLiteC (= 2.4.0)
DEPENDENCIES:
- TensorFlowLiteSwift
SPEC REPOS:
trunk:
- TensorFlowLiteC
- TensorFlowLiteSwift
SPEC CHECKSUMS:
TensorFlowLiteC: 09f8ac75a76caeadb19bcfa694e97454cc1ecf87
TensorFlowLiteSwift: f062dc1178120100d825d7799fd9f115b4a37fee
PODFILE CHECKSUM: 1afb5a20be1ae9d65d71423615dcb00ae67aa7a5
COCOAPODS: 1.10.1
- pod install을 하고나면 pod.lock이라는 파일이 생성된다.
- 이를 열어보면 위와 같이 무언가가 써져있는것을 볼 수 있다.
- 우리가 설치한 pod (라이브러리) 의 버전을 명시적으로 나타내는 파일이다.
- 그러니까 Podfile.lock을 통해서 라이브러리의 어떤 버전을 관리해야하되는지, dependency를 관리한다고 보면 된다.
- 만약 여러명이서 프로젝트를 진행한다면 Podfile.lock 파일을 commit하여 lib의 dependency를 관리해야 한다.
pod outdated
- pod outdated 명령어를 실행하면 Podfile.lock에서 관리되고 있는 pod 중 최신버전이 아닌 pod들을 나열한다.
- 나열된 리스트를 바탕으로 pod update "pod name" 을 통해서 하나씩 update 하면 된다.