티스토리 뷰
Carthage 를 사용하는 이유
가장 처음에는 XCode 에서 지원하는 Static Library 를 썼었다.
이후 CocoaPods 이 나오면서
새로운 버전 관리 방식과 implementation source 를 함께 볼 수 있는 큰 장점으로
많은 사람들이 이동했다.
하지만 시간이 지날수록 개발자들은 불편함을 느꼈다.
그 이유로는
첫째, 소스를 모두 받아서 컴파일 시 함께 빌드하는 방식을 사용한다.
따라서 프로젝트에 다른 open source 들을 많이 사용한다면 (dependency 가 높다면)
컴파일 속도가 현저히 느려지게 된다.
둘째, .workspace 라는 개념이 생겼다.
원래 프로젝트에 더해 Pods 프로젝트가 생기게 된다.
pod update 를 하게 되면 Pods 프로젝트와 내 프로젝트 모두에 영향을 끼친다.
셋째, Ruby Version, XCode Version, Mac OS Version 등 컴파일 환경에 영향을 크게 받는다.
이에, Carthage 라는 open source 가 새롭게 떠올랐다.
Carthage 는 컴파일 전 미리 빌드를 해서 .framework 파일을 만들어놓는다.
따라서 컴파일 속도가 빨라지고 적용하기 simple 하다.
다만, implementation 파일을 볼 수 없다라는 큰 단점이 있다.
Carthage 의 사용
설치
✗ brew install carthage
사용
라이브러리를 설치할 프로젝트의 Root 에서
Cartfile 을 생성한다.
Cartfile 내부에 내가 필요로 하는 라이브러리 이름과 Version 을 기입해준다.
형식은 아래와 같이 다양하게 사용할 수 있다.
github "kiwi-bdd/Kiwi"
git "https://github.com/AFNetworking/AFNetworking.git" "master"
git "https://github.com/AFNetworking/AFNetworking.git" == 3.1.0
github "Alamofire/Alamofire" ~> 4.4.0
이후 Terminal 에서 carthage update 명령어를 입력하면
.framework 를 만들기 위한 작업을 실행한다.
(--platform ios 는 생략이 가능하다. ios 만 필요한 것이 아니라면 생략한다.)
만약, 소스를 확인하고 싶다면 carthage checkout 명령어를 입력하면된다.
✗ carthage update --platform ios
✗ carthage checkout
그럼 위와 같은 구조가 생성되고,
Checkouts 폴더에는 Cartfile 에 입력한 프레임워크 버전에 맞는 소스들이,
Build 폴더에는 .framework 와 기타파일들이 생성된다.
Carthage 는 CocoaPods 와 달리 .framework 를 직접 추가해줘야한다.
방법은 아래와 같다.
1) Target -> Build Phases -> Link Binary With Libraries 에 + 버튼을 눌러 Carthage/Build/iOS/~.framework 추가
2) Run Script 에 아래 그림과 같이 "/usr/local/bin/carthage copy-frameworks" 추가
3) Input Files 에 Carthage/Build/iOS/~.framework 추가
기타
참고자료
https://github.com/Carthage/Carthage
https://github.com/Carthage/Carthage/blob/9d1a67f47c7231eb2f1c33a719634ec4281b65c1/Documentation/Artifacts.md
'iOS 개발 > iOS' 카테고리의 다른 글
[iOS] dispatch_group_notify 의 사용법 (0) | 2017.04.28 |
---|---|
dispatch_queue 의 sync, async 와 Thread 의 관계 (1) | 2017.02.23 |
[iOS] 코드 사이닝 (프로비저닝 프로파일, 인증서) (2) | 2016.12.22 |
[iOS] TextKit 의 사용 (탐지 및 글씨 제외영역 잡기) (0) | 2016.12.02 |
[iOS] 안면 인식 (CIDetector) (0) | 2016.11.29 |
- Total
- Today
- Yesterday
- HTTP
- CGImage
- EffectiveObjectiveC
- UIView
- NSManagedObjectContext
- delegate
- coredata
- AWS
- docker
- optional
- Swift 3.0
- thread
- Block
- Swift3
- RunLoop
- CIImage
- NSManagedObjectModel
- 꺼내먹어요
- Swfit
- set
- workerThread
- ios
- Swift
- string
- 읽기 좋은 코드가 좋은 코드다
- Swift 3
- dictionary
- applicationWillResignActive
- Arc
- NSManagedObject
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |