일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Swift
- LeetCode 1
- 코코아팟 만들기
- Remote Url
- autoLayout
- view modifier
- imageView shadow
- 코코아팟
- ios
- 델레게이트
- 뷰 커스텀
- Cocoapods
- CornerRadius
- 비동기
- UINavigationController
- ReactorKit
- 커스텀 뷰
- Two Sum
- viewAppear
- Delegate Pattern
- email regex
- hugging
- 리액터킷
- Custom View
- priority
- 라이브러리
- onAppear
- Swift Package Manager
- compression resistance
- DispatchQueue
- Today
- Total
Tong's Blog
[iOS] 라이브러리 만들기 (1) - Cocoapods 프로젝트 생성 본문
안녕하세요.
오늘의 포스트는 자신만의 Swift 라이브러리를 제작해보는 것에 대해 다뤄보겠습니다.
iOS 공부를 하시다 보면 UIKit 같은 빌트인 Framework외에 Thrid-Party 라이브러리를 사용하게 됩니다.
대표적으로 Alamofire, Snapkit, Kingfisher등이 있습니다.
이런 라이브러리를 사용하는 방법은 Carthage나 최근에 나온 SPM(Swift Package Manager) 방법이 있지만
대부분의 경우 Cocoapods을 통해 프로젝트와 라이브러리를 관리하고 있을 겁니다.
그래서 저도 Cocoapods 라이브러리를 제작하는 것을 공유하고 해당 라이브러리에 SPM까지 적용시키는 법을 공유드리려고 합니다.
우선 라이브러리 프로젝트를 생성해보십니다.
터미널에서 프로젝트가 생성되기 원하는 경로로 이동한 후 다음 커맨드를 입력합니다.
(팁을 드리면 Project 이름은 안겹치게 해야 나중에 cocoapods에 등록할 때 문제가 없을 겁니다.
예를들어 저 같은 경우에는 Project에 앞에 이니셜로 TG를 붙여서 사용합니다.)
% pod lib create {Project_Name}
그러면 5개 정도의 질문이 나오고 해당 질문을 하나씩 대답하면서 단계를 넘어가면 프로젝트 하나가 생성됩니다.
1. What platform do you want to use??
-> iOS (제가 제작하는 라이브러리는 iOS를 위한 것이므로)
2. What language do you want to use??
-> Swift (원하시는 언어로 설정하면 됩니다.)
3. ('ㅛ'는 오타입니다..) Would you like to include a demo application with your library?
-> Yes(demo project 첨부 여부에 대해 물어보는데.. No라고 하면 Sample Project가 포함이 되지 않는 것인지 확실치 않네요..)
4. Which testing frameworks will you use?
-> None(None으로 하면 Apple의 Test Framework를 사용한다고 합니다.)
5. Would you like to do view based testing?
-> No (위와 같은 내용으로 추측됩니다..)
그러면 프로젝트가 이렇게 생성됩니다.
그 다음엔 Github에 repo를 생성합니다.
이제 생성된 프로젝트와 github를 연결해줍니다.
(이때 우리가 만든 pod project에는 이미 git과 gitignore가 생성되어 있으므로 따로 init을 할 필요가 없습니다.)
이제 사전 준비는 다 끝났습니다.
우리가 구현하고 싶은 기능을 작성해보겠습니다.
작성을 해야할 곳은 Pods - Development Pods - TGSampleLibrary(Project 이름) - ReplaceMe.swift 입니다.
해당 파일을 이용하거나 새로운 파일을 만들어서 원하는 기능을 작성하면 됩니다.
import UIKit
open class TGSampleLibrary{
//코드 작성
//...
var name: String
init(name: String){
self.name = name
}
convenience init(){
self.name = "TG"
}
func printName(){
print("My Name is \(self.name)")
}
}
예를 들어 이런식의 코드를 작성했다고 가정해보겠습니다.
이렇게 우리가 작성한 코드는 바로 Sample 프로젝트에서 사용해보고 테스트할 수 있습니다.
//
// ViewController.swift
// TGSampleLibrary
//
// Created by indam94 on 12/25/2020.
// Copyright (c) 2020 indam94. All rights reserved.
//
import UIKit
import TGSampleLibrary
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let sample = TGSampleLibrary()
sample.printName()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
우선 이렇게 작성해보고 빌드를 해보겠습니다.
그러면 이러한 오류를 발견할 수 있게됩니다.
우리가 위에서 initialize에서나 printName()에서는 아무런 접근제어자를 붙이지 않고 사용했습니다.
우리가 일반적으로 프로젝트에서 접근제어자를 붙이지 않으면 internal이라는 접근 제어를 가지고 생성하게 됩니다.
프로젝트에서 생성한 internal 접근제어의 변수나 메소드들은 다른 class내부에서도 사용이 가능하지만
우리가 만든 라이브러리의 경우 프로젝트 내부에서 생성한 것이 아니기에 internal 접근 제어는 Sample 프로젝트에서는 사용이 불가능합니다. 그렇기에 명시적으로 public 접근제어를 붙어줘야 프로젝트에서 접근이 가능하게 됩니다.
public convenience init(){
self.init(name: "TG")
}
public func printName(){
print("My Name is \(self.name)")
}
이제 다시 빌드해보면 해당 오류는 사라지고 원하는 결과를 얻을 수 있습니다.
그러면 우리가 작성한 내용을 Commit하고 github에 push 하겠습니다.
% git add .
% git commit -m "Create TGSampleLibrary class & test Sample View Controller"
% git push -u origin master
자 이제 배포만 하면 우리의 라이브러리를 cocoapods을 통해 모든 사람들에게 제공할 수 있습니다.
우선 배포 체크를 하기 전에 cocoapods에서 업로드 하기 위해선 원격저장소에 tag가 있어야 합니다.
태그를 설정하는 것은 github에서도 가능하나 터미널에서는 다음과 같이 입력하면 됩니다.
% git tag 0.1.0
% git push origin 0.1.0
그럼 이제 배포 체크를 하면 되겠습니다.
% pod spec lint
WARN을 지워주는게 좋겠지만 ERROR만 없다면 배포는 가능합니다.
그 다음엔 pod trunk 계정을 등록하면 됩니다.
pod trunk register {이메일주소} {계정이름}
메일 인증까지 완료가 되면
정말 마지막으로 배포 커맨드만 입력하면 되겠습니다.
pod trunk push
만약 spec lint에서 WARN이 있으셨다면
pod trunk push --allow-warnings
를 하면 WARN은 무시하고 배포를 할 수 있습니다.
오늘은 Cocoapods 라이브러리를 제작하고 배포하는 법을 배워봤습니다.
다음 포스트에서는 제작한 Cocoapods 라이브러리에 SPM을 이식하는 법을 포스트해보겠습니다.
감사합니다.
'iOS' 카테고리의 다른 글
[iOS] Content Hugging 와 Compression Resistance 에 대해 (2) (0) | 2023.02.23 |
---|---|
[iOS] Content Hugging 와 Compression Resistance 에 대해 (1) (0) | 2023.02.15 |
[iOS] 라이브러리 만들기 (2) - Cocoapods 라이브러리에 SPM 이식하기 (0) | 2021.01.02 |