Cocoapods로 SDK 배포하기 (2) - SDK 구조 변경하기

sun02·2024년 2월 17일
0

iOS-SDK

목록 보기
2/5
post-thumbnail

Cocoapod으로 SDK를 만들고 배포하는 과정을 다룹니다.
SDK의 폴더 구조에 대해 다루고 있습니다.


SDK 구조

SDK를 만들었으니 이제 내부에 코드를 작성할 차례입니다.

그런데, Xcode의 SDK 폴더 구조와 Finder의 SDK 구조가 다른 것을 확인할 수 있습니다.


XcodeFinder
  • Asset/Classes 라는 폴더가 파인더 상엔 있지만 Xcode에는 없습니다.

물론 큰 문제가 되는 부분은 아니지만 저는 조금 신경쓰이기 때문에 Finder와 Xcode의 구조가 동일하도록 변경해주고자 합니다.


문제 원인

그런데 사실 이건 문제가 아닙니다.
사실 Xcode는 정확하게 보여주고 있습니다.

다만, Xcode에서 말하는 HandyKit 폴더와 우리가 생각했던 HandyKit 폴더가 다르다는 것입니다.

(그러니까 결국 문제 원인은.. ) 🙃


XcodeFinder
  • Finder에는 HandyKit 폴더가 두 개있습니다.
  • Xcode의 HandyKit 폴더는 Finder의 1️⃣번 폴더입니다(❗️)
    • 그런데 2️⃣번으로 생각하고 있지 않았나요?

(헐 근데, 혹시 저만.. 그랬을까요 ?)

여튼, 그래서 문제 아닌 문제가 발생하는 것이고 저는 이걸 이해하기 쉽게 맞춰주고 싶습니다


Podspec - s.source_files

Podspec에는 s.source_files 라는 설정이 있습니다.

  • s.source_files : 라이브러리 또는 프레임워크의 소스 코드 파일이 위치하는 경로
s.source_files = 'HandyKit/Classes/**/*'

디폴트로 위와 같이 작성 되어있는데

이는 HandyKit 라이브러리의 소스 코드가 'HandyKit/Classes/' 경로에 위치하고
이 경로 아래의 모든 하위 폴더와 파일을 포함하여 빌드에 사용하도록 지정한다는 의미입니다.


확인해보면,

XcodeFinder
  • Finder에 HandyKit > Classes 내부에 ReplaceMe.swift이 있고
  • Xcode에 ReplaceMe.swift 소스 파일이 있음

이 얼마나 정확합니까...
Xcode는 정확하게 보여주고 있었습니다...

자 이제, 이 구조에서 만족한다면 여기서 그만 끝끝 종료해도 됩니다.



다만, 저는 조금 더 직관적인 구조였으면 해서 수정해주려고 합니다.

제가 원하는 것은, Finder에서
HandyKit > Classes > ReplaceMe.swift 라면
Xcode에서도
HandyKit > Classes > ReplaceMe.Swift 였으면 좋겠다는 것이죠...

그래서 우선 소스 파일 경로를 아래와 같이 수정해주었습니다.

s.source_files = 'HandyKit/**/*'
  • HandyKit > Classes 하위의 소스들이 아니라 HandyKit 하위의 소스들이 Xcode에 보여지겠죠..?
pod update

그런 다음, podspec의 변경 사항이 반영될 수 있도록 pod을 update 합니다.

  • 이때 pod update는 Example 폴더에서 진행합니다.
    HandyKit이 SDK고, Example이 HandyKit SDK을 라이브러리로 가지고 있는 데모앱이기 때문입니다.

workspace를 열어 확인해보면?
변경사항이 없습니다... (🥹)

이때, 아무 소스파일 temp.swift를 추가해준 후 다시 pod을 update 해보면

xcodeFinder

Finder에서도

  • HandyKit > Classes > ReplaceMe.swift
  • HandyKit > Temp.swift

Xcode에서도

  • HandyKit > Classes > ReplaceMe.swift
  • HandyKit > Temp.swift

에 위치하게 됩니다.


경로 추가 및 변경 시 발생하는 이슈

이제 Xcode와 Finder의 구조가 보다 직관적이어졌습니다!

그래서 Xcode에서 새로운 폴더나 파일을 추가하거나 이동하려하는데
변경 사항들이 Finder에 의도한 대로 반영될 때도 있고 그렇지 않을 때도 있습니다.


- ⭕️ 의도한대로 반영되는 경우

HandyKit 바로 하위가 아닌 경로에 변경사항이 발생하는 경우

예를 들면, HandyKit 바로 하위가 아닌
HandyKit > Classes 폴더에 새로운 폴더나 파일을 추가하는 경우엔

Xcode에서의 변경도 바로 Finder에 반영되고,
Finder에서의 변경도 바로 Xcode에 반영됩니다.


xcodeFinder


- ❌ 의도한대로 반영되지 않는 경우

HandyKit 바로 하위에 변경사항이 발생하는 경우

예를 들어, Xcode에서 HandyKit 하위에 새로운 폴더를 추가하게 되면 Finder에서는 HandyKit 외부에 해당 폴더가 위치하게 됩니다.


XcodeFinder
  • Xcode에서 HandyKit 하위에 Extensions 폴더를 추가되었지만, Finder에서는 HandyKit 외부에 Extensions 폴더가 추가됨

그런데! 사실 이게 맞아요.
왜냐하면 Xcode의 HandyKit 폴더는 2️⃣가 아니라 1️⃣이기 때문에
의도한 위치는 아니지만 정확한 위치는 맞다.. 라는

그래서

- 의도한 대로 HandyKit(2️⃣) 하위에 Extension 폴더를 추가하고 싶다면?

1) Finder에서 HandyKit(2️⃣) 하위에 Extensions 폴더 생성
2) Extensions 폴더 내부에 파일 추가
3) pod update


xcodeFinder
  • 다음과 같이 의도한 대로 HandyKit 하위에 Extensions 폴더가 추가됩니다.

만약, 이렇게해도 Finder에서의 추가한 폴더가 Xcode에 나타나지 않는다면 해당 폴더 내부에 dummy swift 파일을 넣은 후 다시 pod update를 실행해보세요!


- 정리하자면

폴더의 경로가 HandyKit 바로 하위가 아닌 경우

예를 들면, HandyKit 하위의 Classes 폴더 내부에 새로운 폴더를 생성하거나 폴더를 이동시키고자 하는 경우

  • Finder에서의 변경 -> Xcode에 바로 반영
  • Xcode에서의 변경 -> Finder에 바로 반영

폴더의 경로가 HandyKit 바로 하위인 경우

HandyKit 바로 하위에 새로운 폴더를 생성하거나
기존 폴더의 경로를 이동하고자하는 경우

  • Finder에의 변경 -> pod update 실행해야 Xcode에 반영
  • Xcode에서의 변경 -> Finder에 반영되지 않음



SDK 구조 공부하면서 헷갈렸던 부분들을 정리해보았는데 잘 작성했는지는 모르겠네요.

사실 꼭 수정해야하는 부분도, 필수적인 부분도 아니여서 기존 구조를 그대로 사용해도 됩니다.
저는 처음에 SDK 파일을 딱 열었을 때 이해하기 어려웠어서 좀 더 직관적인 구조였으면 해서 수정한 것이고 저는 이 구조가 좀 마음에 들어요.
조금 더 이해하기 쉬운 것 같......... 아요?

0개의 댓글