신문물을 접하다
평화로운 오전,
코드베이스 UI 강의를 듣다가 튜터님께서 SnapKit이 현업에서 많이 사용하는 라이브러리라고 설명해주셨다
그래서 SnapKit을 사용하면 뭐가 좋은데?
초보자의 눈이 번쩍 떠지는 심봉사급 체험이었다
SnapKit 설치하기
⎮ SnapKit 설치하기
1. Project > General > Framework, Libraries > (+) 버튼 누르기
2. Add Package Dependency... 클릭
3. SnapKit 깃허브 주소 Ctrl+C, Ctrl+V > Add Package
4. import SnapKit으로 사용하기
호기롭게 코드를 작성하고 빌드를 했다.
근데 오류가 났다(이거 억까야)
초보자는 설치도 어렵다
⎮ No such file or directory
설치가 어렵지도 않았고, 강의를 잘 따라 갔는데 왜 나한테만 이런 시련을 주는걸까?
오류 해결하기
⎮ SnapKit-Dynamic 삭제하기
삭제하고 실행하면 정상 빌드가 된다
오류 분석하기
⎮ 정적 라이브러리, 동적 라이브러리
1. 정적 라이브러리
- 확장자 : .a(Linux, macOS), .lib (Windows)
- 컴파일 시 라이브러리 코드가 실행 파일에 미리 포함됨
- 배포 시 실행 파일 하나만 있으면 되고, 추가적인 라이브러리 파일이 필요 없음
- 실행 속도가 빠름(라이브러리를 미리 포함하고 있어 로딩 시간이 없는 것)
- 하지만 실행 파일 크기는 커질 수 있음
* 독립적인 실행 파일이 필요할 때, 속도가 중요할 때 사용
2. 동적 라이브러리
- 확장자 : .so(Linux, macOS), dylib(macOS), dll(Windows)
- 실행 파일에는 라이브러리의 참조 정보만 포함
- 실행 시 라이브러리가 동적으로 로드됨
- 실행 파일 크기가 작아지며, 여러 프로그램이 동일한 라이브러리를 공유할 수 있음
- 하지만 실행할 때 라이브러리가 없으면 실행할 수 없음
* 여러 프로그램이 같은 라이브러리를 공유할 때, 유지보수가 용이해야 할 때 사용
⎮ 정적 라이브러리, 동적 라이브러리를 같이 쓸 수는 없을까?
만약 게임 개발을 한다고 할 때,
- 게임 엔진의 핵심 그래픽 연산 > 정적 라이브러리(.a)
- 플러그인 시스템 > 동적 라이브러리 (.so, dylib)
위의 방식으로 혼합하여 효율적으로 사용할 수 있다
다만 혼용해서 사용할 때 주의해야 하는 점이 있는데,
1. 심볼이 충돌하면 안된다.
- 같은 함수 / 클래스가 정적, 동적 라이브러리에 중복될 경우 링커 오류가 발생한다
- 네임스페이스 관리(예: C++ namespace, Swift module)가 중요하다
2. 동적 라이브러리 로드 문제
- 실행할 때 .so 또는 .dylib가 없으면 실행되지 않는다
- macOS에서는 @rpath 설정을, Linux에서는 LD_LIBRARY_PATH 환경 변수를 설정해야 한다
3. 크로스플랫폼 고려
- Windows에서는 .dll을, mac OS에서는 .dylib를, Linuxs는 .so를 사용하므로 빌드할 때 주의해야 한다
⎮ 그래서 SnapKit에서는 왜 안된건데?
1. 심볼이 충돌하면 안된다. 에 해당되는 오류다
SnapKit과 SnapKit-Dynamic은 내부적으로 동일한 이름과 심볼을 공유하므로, 빌드 과정에서 심볼이 충돌하여 오류가 발생한다
따라서 둘 중 하나를 지워주면 문제는 자연스럽게 해결된다
'Swift > 오류 개발자' 카테고리의 다른 글
Swift | Converting non-sendable function value to '@Sendable () -> ()' may introduce data races 오류 이해하기 (0) | 2025.04.05 |
---|---|
Swift | presentingViewController.dismiss 오류(feat. 휴먼 에러) (0) | 2025.03.26 |
Swift | TableView에서 특정 영역만 선택이 가능하도록 만들기 (0) | 2025.03.09 |
Swift | TableView에서 Row 사이의 여백 만들기 (0) | 2025.03.09 |
Swift | TableView Cell에서 ImageView 또는 Label 연결이 안되는 문제 (0) | 2025.03.08 |