티스토리 뷰

반응형

 

안녕하세요 :) Zedd입니다.

이제...코코아팟 한번 만들어 볼 때가 됐지....

제가 하는 서비스 코드의 일부분을 빼서 코코아팟으로 만들어보려고 합니다. 다른 프로젝트에서도 쓸 수 있게요!

엄청난 삽질이 예상됩니다.

항상 제가 처음 하는 건 가슴이 떨려요.

 

이 글을 오로지 저를 위한 글입니다.

기록을 해두지않으면 항상 까먹는 제드를 위해...

시작하겠습니다.

 

+ ) 제가 지금까지 엄청나게 삽질을 했는데요, 음 하나를 딱 명시하고 갔으면 좋겠어서.

private cocoaPods을 만드는 과정을 설명한 글입니다. 즉, CocoaPods에 배포(?)...라고 해야하나 뭐 그런게 아닙니다. 

그러니까 나는 세상 모두가 쓸 수 있는 라이브러리를 만들겠어! 라고 하시는 분은 보시면 안됩니다. 

 

 

왕초보를 위한 "Private" CocoaPods Library만들기


 

만들기 전에, 이 사실을 꼭 알고 가셔야 합니다.

우리가 만드는 repo는 하나가 만들어지지만,

결과적으로 만들어지는 repo는 2개입니다. 

 

하나는 우리가 진짜 직접 만드는, 그러니까 아래의 pod lib create로 만드는 repo를 Pod Repo라고 하며

또 다른 repo개념으로는 Spec repo가 있습니다. Spec repo는 pod spec들을 모아둔 repo라고 이해하시면 됩니다. 

 

1. 터미널을 이용해 라이브러리를 만들 위치!!로 가줍니다. 

데스크탑에 만들려면, cd Desktop해가지고, 암튼 가줍니다. 

 

2. 아래 코드 쳐줌.

pod lib create 프로젝트이름

그럼 이화면 나오지?

참고로..뭔가 라이브러리 만들때 자기 닉네임 약자로 많이 하길래..나도 ZD해봄..ㅋ!!!!!!!!!!!!!.....

 

 

플랫폼 모니?

iOS로 할거니까 iOS쳐주셈 macOS할 사람은 macOS쳐주고..

 

 

너 사용할 언어 모니?

저는 Swift를 사랑하기 때문에 Swift로.

 

 

니 라이브러리에 데모 앱 넣을 생각 있는 부분?

음..........................일단 나는 왕초보니까 하라는거 다 해본다

Yes!

 

 

?

사용할 테스팅 프레임워크를 고르라는거 같은데..

일단 Quick해볼려고 했는데..

제가 Quick선택하고 막 해봤는데 뭔가 계속 에러가 나서요. 지금 글 다시 쓰는 중...이번엔 None으로 해보겠습니다. 

 

 

아니 무슨 물어보는게 왤케 많으세요

너 view based testing할거니? 

얘도 Yes로 했었는데..일단 No로 해볼게요. 저한테 난 에러는 저 Quick때문인거 같은데...ㅠㅠ

일단 No.

 

자 지금 이상태입니다. 그리고 엔터를 치면

그럼 혼자 어쩌구 저쩌구 하면서 뭔가가 됩니다. 

암튼 우리가 프로젝트를 만들지도 않았는데!!! 이렇게 알아서 프로젝트를 만들어버렸죠? 저렇게 바깥쪽에 있는건 그니까 _Pods_xcodeproj은 정말 Pod프로젝트파일이고 Example에 들어가면 

요렇게 우리가 평소에 보던..xcworkspace가 있는걸 볼 수 있습니당. 들어가볼까요? 

 

이렇게 되어있네요.

아래 그림처럼, Podspec Metadata의 .podspec을 열어보면,

이렇게 되어있습니다. 

summary와 description을 작성해줘야합니다.

그냥; 일단 이렇게만 해줬습니다. 

성의라고는 찾아볼 수 없지만 일단 저는 일단...만들어보는게 목표입니다. 

 

저는 왕초보자나요. 

그럼 내가 지금 잘하고 있는거지?

그럴 때, 사용 할 수 있는 커맨드가 있습니다.

 

터미널에서 지금 만들어진, 저같은 경우에는 ZDLibrary폴더로 이동해서

pod spec lint

위 커맨드를 치면, 

이렇게 하면, 뭔가 어쩌구 저쩌구 하면서

에러가 난 것을 볼 수 있습니다.

 

ㅋ...!!! 얘는 경고구요.

에러이유를 보면, 

 

회사 이메일이 나와가지고...가렸는데, 암튼 podspec에는 이런 항목들도 있었는데요, 

저기보면 깃헙 레포 주소가 있는데......우리가 아직 깃헙 레포를 안만들었음ㅋ

 

아, 그 전에 위 그림에서 deployment target을 고쳐줄게요.

8.0부터 사용가능하다! 라는 뜻이겠죠? 저는 12로 확 올려버리겠음

이렇게 해줄게요.

 

자, 이제 레포를 만들어 가봅시다. 

이렇게 만들어줍시다. 

그리고 아래 그림처럼

어느 프로젝트를 열어도 상관없습니다. 암튼 Pods프로젝트 > Development Pods > 내 라이브러리 이름 > 으로 가면 ReplaceMe.swift라는 게 있을 건데, 저는 거기에 그냥 위 코드를 넣어줬습니다.

주의해야할 건 반드시!! 반드시 public 접근 연산자를 같이 써줘야 합니다. 

관련 글은 https://zeddios.tistory.com/383

 

Swift ) Access Control(접근 제어) - (1)

안녕하세요 :) Zedd입니다. 오늘은 Access Control..Swift4에서 정말 조그마한 변경사항이 있기도 했고..그래서 전체적으로 볼려고 합니다 :) 오랜만의 Swift네요 XD 모든 내용은 The Swift Programming Language..

zeddios.tistory.com

를 참고해주세요.

 

자, 그럼 Example폴더의 xcworkspace를 열어준뒤 

ViewController.swift로 가봅시다. 

그리고 내가 만든 라이브러리 이름으로 import를 한 뒤 한번 호출해보면

저렇게 콘솔에 잘 찍히는 걸 확인 할 수 있습니다. 

 

자. 이제 다시 터미널로 와줍니다. 

git add .
git commit -m "first commit"
git remote add origin git주소
git tag 0.1.0
git push origin 0.1.0

을 해줍니다. 

 

 

그리고 

pod repo add [REPO_NAME] [깃 주소]

위에서 REPO_NAME은 Spec Repo를 의미합니다. 

그러니까 아래 코코아팟 레포에 추가될 이름을 말합니다.

 

그리고 

cd
cd ~/.cocoapods/repos

 

코코아팟 레포로 가줍니다.

 

저기 우리가 만든 라이브러리 폴더가 보이네요. cd를 이용하여 저기로 이동해줍니다.

pod repo push [REPO_NAME] [아까 바탕화면에서 만들었던 라이브러리 폴더 안에있는 .podspec경로]

그리고 위 커맨드를 입력해주면되는데요. 

여기서 REPO_NAME역시 spec repo이름을 의미합니다.

pod repo push ZDLibrary 까진 알겠는데, 아까 바탕화면에서 만들었던 라이브러리 폴더안에 있는 .podspec경로..?

이 .podspec경로를 가져와봅시다. 

 

cocoaPods/repo폴더말고, 아까 우리 바탕화면에 만들어진 폴더 있잖아요 거기로 이동해주세요. 

그러니까, pod repo로 이동해주세요.

저기 .podspec이 보이죠? 

오른쪽 클릭하면 이렇게 나오는데, 지금 오른쪽 클릭한 상태에서 옵션키(알트)를 누르면, 위에 ZDLibrary.podspec복사가,ZDLibrary.podspec 경로 복사로 이름이 바뀌게 됩니다. 그걸 클릭해주세요. 캡쳐가 안된다....

아무튼 결과는 이렇습니다. 

뭐 어쩌고 저쩌고 하는데, 

pod repo push [라이브러리 이름] [아까 바탕화면에서 만들었던 라이브러리 폴더 안에있는 .podspec경로] --allow-warnings

이걸 일단 쳐주겠음. 그냥 warning을 허용한다 뭐 이런거.

 

자,그럼 뭐 이렇게 push가 잘 된 것을 볼 수 있습니다.

 

 

자! 그럼 테스트를 해봅시다. pod을 테스트 할 프로젝트를 하나 만들어주세요. 그리고 pod init해주셈

그리고 Podfile을 열어주세요. 

# platform: ios, '9.0'

source '내 라이브러리 깃 주소'

target 'PodTest' do
  # Comment the next line if you're not using Swift and don't want to use dynam$
  use_frameworks!
  
  pod "ZDLibrary"

  # Pods for PodTest

end

위에 source로 내 깃주소를 명시하고, 밑에 pod "라이브러리 이름"을 한뒤 pod install하면 

 

이렇게 설치가됩니다. 

그리고 소스코드로 가서

이런식으로 테스트 해보면 됩니다.

잘 되는 것을 볼 수 있죠? 

 

자, 그럼 내 라이브러리를 업데이트 해보겠습니다.

제가 printZedd()라는 메소드를 추가해줬어요.

버전을 올려주고, 터미널로 가줍니다. 

 

지금 내 프로젝트가 있는 폴더에서(cocoaPods/repo폴더 아님) 

git add .

git commit -m "커밋 메세지"
git tag 0.2.0

git push origin 0.2.0

 

한 뒤에, 다시 cocoaPods/repo폴더로 와서 

pod repo push [REPO_NAME] [아까 바탕화면에서 만들었던 라이브러리 폴더 안에있는 .podspec경로] --allow-warnings

이걸 해주면 push가 됩니다.

 

그리고 테스트 할 프로젝트로 와서

pod update

를 해주면

이렇게 0.2.0으로 업데이트 됩니다. 

 

근데 제가 pod을 처음 만들어봐서 그런데 수정할려면 이짓을 계속해야하나요??????????......

 

그러니까,

1. pod lib create로 만들어진 폴더 update

2. cocoapods/repo/내 라이브러리로 가서 pod repo push~

3. 라이브러리 쓰는 프로젝트에서 pod update

 

이 3단계를 꼭 거쳐야 하나요?????????

1번까지만 하고 Podfile에서 ~> 태그 버전 명시하면 될 줄 알았는데 안됨...ㅠㅠ

위 3단계를 꼭 거쳐야 하는건지..알려주세요,,,

 

반응형
댓글
  • 프로필사진 swb 맞습니다.
    1. pod lib create로 만들어진 폴더 update
    2. cocoapods/repo/내 라이브러리로 가서 pod repo push~
    3. 라이브러리 쓰는 프로젝트에서 pod update
    위 단계를 거쳐야 하구요 하지만 이렇게 작업하는게 사실 부담스럽죠 업데이트를 매번해서 디버깅해야하니까요.
    그래서 podfile에서
    pod "ZDLibrary", :path => 'localPath'
    이런식으로 변경하고 작업합니다.

    그리고
    pod repo push [라이브러리 이름] [아까 바탕화면에서 만들었던 라이브러리 폴더 안에있는 .podspec경로]
    라고 적어주신 부분이 있는데요, [라이브러리 이름] 이부분이 어떤 의미인지도 글에 적혀있으면 좋을거같아요!
    2019.03.17 16:39
  • 프로필사진 Favicon of https://zeddios.tistory.com BlogIcon Zedd0202 와 swb님 정말 감사합니다. cocoaPods라이브러리 만드는 법을 찾아보다가 그냥 저기에 내 라이브러리 이름, 그러니까 import xxx했을 시에 xxx를 저기 적는 것 같아서 저렇게 써놨는데, 제가 잘 알아보지 않고 써놓은 것 같네요. 지금 찾아봤는데 pod repo add xxx, pod repo push xxx 시에 적어야 할 게 repo_name이라고 하는데, 이게 내 코코아팟 프로젝트 "프로젝트 이름" 이라고 생각해도 될까요? http://guides.cocoapods.org/making/private-cocoapods.html를 살펴보면, 깃 레포이름과 제가 생각하는 [라이브러리 이름]이 달라도 되는것 같은데, 여기서 언급하는 REPO_NAME이 그 프로젝트 이름을 의미하는것 같아서요.

    swb님이 말씀하신 [라이브러리 이름]이 어떤 의미인지 알려주실 수 있으신가요?!
    2019.03.17 16:58 신고
  • 프로필사진 swb 사실 [라이브러리 이름]은 아니고 REPO_NAME이 맞습니다.
    이부분을 이해하려면 일단 Spec repo와 pod repo를 분리하여 이해하여야합니다.
    Spec repo는 pod spec들을 모아둔 repository라고 생각하면 되고, pod repo는 ZDLibrary같은 모듈을 이야기합니다.
    여기서 언급된 REPO_NAME은 spec repo를 이야기하는것이고, pod repo add [Spec repo 이름] [Spec repo 깃 주소] 를 의미합니다.
    보통 spec repo와 pod repo를 따로 관리하는데, 현재 위에 예제는 spec repo와 pod repo가 동일한 주소로 입력된걸로 보여서 조금은 어색해보였습니다.
    답변이 되었을까요?
    2019.03.19 22:54
  • 프로필사진 Favicon of https://zeddios.tistory.com BlogIcon Zedd0202 아!! 그렇군요. 이제 알것 같습니다. 말씀해주신 내용을 바탕으로 글 수정 하도록 할게요. 정말 감사합니다!! 2019.03.20 10:03 신고
댓글쓰기 폼
반응형
Total
4,016,118
Today
610
Yesterday
2,463