brunch

You can make anything
by writing

C.S.Lewis

by 오진성 Sep 21. 2017

Cocoapod에 오픈소스 등록하기

할 때마다 어려운 오픈소스화의 징비록

나는 7년 차 개발자지만, 오픈소스 활동을 많이 하지 않았다는 점이 늘 부끄러웠다. 컨트리뷰트도 거의 없고, 내 오픈소스 Repository도 1개뿐이었다. 문서화를 귀찮아하거나, 할 일을 뒤로 미루는 나의 습성이 큰 원인이었다. 

얼리어답터가 아닌 나는 XCode9 정식 버전이 나온 오늘에서야 XCode9을 설치했고, iOS11을 경험했고, iPhoneX을 시뮬레이터로 다뤄보게 되었다. 한국 날짜로 9월 13일에 iPhoneX이 공개되었으니, 일주일 만에 처음 iPhoneX를 본 것이었다. 다른 모든 이들이 그러했드시, 나 역시 M자형 탈모 디자인에 분노했다. 그리하여 머리의 빈 공간에 흑채를 뿌려주기로 마음먹고 코딩을 하여, 다음과 같은 결과를 만들어냈다. 


간단히  UIWindow 하나 만들고 UIVew 만들어서 Bezier로 검은색을 칠해주면 된다. 참 쉽죠? 이걸 오픈소스화하고 싶은데, 어떻게 하는 건지 몰라서 이것저것 찾아가면서 했다. 그 히스토리를 기록해본다. 


1. 오픈소스화하고 싶은 파일을 골라내 디렉토리로 구분해 놓는다. 


2. https://cocoapods.org/ 에 들어가 Create a pod 내용을 확인한다. 

다음과 같은 내용이 있다. Peanut 부분을 내 프로젝트에 맞는 이름(예: HairPowder)으로 한다. 

$ pod spec create Peanut
$ edit Peanut.podspec
$ pod spec lint Peanut.podspec

$ pod spec create HairPowder

를 실행하면, HairPowder.podspec파일이 생성된다. 

두 번째 라인은 podspec 파일을 수정하라는 건데, 다음과 같이 수정했다. 

Pod::Spec.new do |s|
  s.name             = 'HairPowder'
  s.version          = '0.0.2'
  s.summary          = 'Hair Powder for iPhoneX "M" Shape pattern baldness design'
  s.homepage         = 'https://github.com/intmain/HairPowder'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'intmain' => 'intmain@hotmail.com' }
  s.source           = { :git => 'https://github.com/intmain/HairPowder.git', :tag => s.version.to_s }
  s.source_files     = 'Sources/HairPowder.swift'
  s.requires_arc     = true
  s.ios.deployment_target = '10.0'
end

이렇게 하기 위해서, 내 코드를 미리 github에 푸시해둬야 했다. 그래야 source url이  나오니까. 

깃허브에 Repository를 하나 create 하고, 다음과 같은 명령어를 통해 remote를 등록하고 push 한다. 

  git remote add origin https://github.com/intmain/HairPowder.git
  git push -u origin master

푸시하는 김에 README.md 도 만들고 License도 만들어서 푸시한다. 그리고, 태그를 하나 만드는데 버전을 적어 넣는다. 이 버전이 podspec의 s.version이 된다. s.source_files에 아까 파일들을 골라놨던 디렉토리를 적어준다. 나머지 내용들은 적당이 채운다. 


그리고 pod spec lint Peanut.podspec 명령어를 날리면, pod에 등록될 수 있는 상태인지 검증을 시작한다. podspec파일내용 도 아까 태그 만든 거랑 버전도 보고, 그리고 실제 코드도 검증하는 것 같다. 다음과 같은 에러가 났었다. 

오픈소스가 될 코드에서는 프로젝트 파일인 AppDelegate에 접근할 수 없스므로, window에 접근하던 방식을 AppDelegate에서 window를 가져오는 방법 대신, keyWindow를 가져오는 방법으로 바꾼다. 

pod spec lint Peanut.podspec를 다시 실행하면 다음과 같은 결과가 나오며 잘 끝난다. 


Validation이 끝났다. 


3. 이제 https://guides.cocoapods.org/making/getting-setup-with-trunk.html 내용을 확인한다. 

pod에 접속해서 push 하라는 내용이다.  적혀있는 대로 다음과 같이 실행했다. 

pod trunk register intmain@hotmail.com 'intmain' --description='macbook pro'

다음과 같은 결과를 보여주며 이메일을 한통 보낸다.

정크 메일함에 메일이 한개 와 있었다. 

메일에 confirm URL이 있어 해당 URL로 들어가면 인증이 완료된다. 

인증은 pod trunk me로 확인할 수 있다. 


그리고 다음 코드를 날리면,

pod trunk push HairPowder.podspec

Validation을 한번 더 진행한 후 Cocoapods에 퍼블리시되며 다음과 같은 메시지를 보여준다. 

이러고 친구한테 자랑한 다음 기다리면 언젠가는 Cocoapod에 등록이 되겠지. 

하는 김에 https://www.cocoacontrols.com 에 도 등록을 해주면 좋다. 


그리하여, 오늘 만든 흑채 오픈소스는 여기서 확인할 수 있습니다. 

https://github.com/intmain/HairPowder

스타 눌러주십시오. 

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari