SPM vs Framework

👋 들어가기 전
이번 사이드 프로젝트의 핵심은 바로 Tuist를 사용하지 않고 모듈화를 경험하는 것
Tuist를 통해 모듈화를 경험했는데 Tuist도 역시 Third party라서 언제
지원 중단이 될지 모른다.
그래서 Apple에서 제공해주는 환경에서 모듈화 적용을 경험하고 싶다.
그 방법으로는 크게 SPM과 Framework로 나뉜다.
🏁 SPM vs Framework
먼저 각자의 특징을 알아보자.
✨ 특징
SPM
- 소스 코드 그대로를 패키징
- 컴파일 타임에 포함 (정적 링크)
- SPM에 의해 관리
- 앱 크기가 늘어남
- Git 또는 로컬 패키지로 배포
Framework
- 바이너리 형태로 빌드
- 런타임에 로드 (동적 링크)
- CocoaPods, Carthage
- 다이나믹 링크로 인해 앱 크기 증가가 거의 없음
- XCFramework로 배포
✅ 쓰면 좋은 상황
Framework
- 앱 크기를 줄이고 싶을 때
- 외부 SDK로 제공해야할 때, 바이너리로 만들어 배포
- Objective-C와 혼용이 필요할 때
- 리소스를 포함해야할 때
- 데모 App을 만들 때
SPM
- 빠른 개발과 유지보수가 필요할 때 ( Xcode를 통해 바로 관리 가능하고 설정이 간단)
- Git으로 패키지 관리하며 협업이 가능함
- SwiftUI 중심 개발을 할 때
- 외부 종속성을 관리할 때
📦 패키지
🎁 생성
File -> New -> Package를 통해 패키지를 생성해준다.


➕ 추가
필요한 라이브러리를 프로젝트에 추가한다.


⭐️구성 요소
Package.swift
SPM이 Package를 빌드하고 의존성을 관리하는 패키지의 핵심파일
자세한 내용은 https://hamp.tistory.com/162#Pacakge.swift-1 을 참고
예를 한번 보자.
ThirdParty를 관리하는 모듈에 의존성을 추가해보자.
우리 프로젝트는 이번에 Firebase Remote Config를 사용해야한다.
그렇다면 순서는 다음과 같다.
1) Firebase Package 설치
2) 이후 target에 remoteConfig product 의존성을 추가

Sources
실제 Source 코드들이 들어있는 공간.
Tests
테스트 코드를 작성하는 공간
🏛️ 프레임워크
🎁 생성
File -> New -> Project를 통해 프레임워크를 생성해준다.


➕ 추가
프로젝트에서 필요한 프레임워크를 선택한다.
먼저 프레임워크를 Add Files를 통해 .xcodeproj 파일을 추가한 후
.framework를 추가한다.


📱 Demo 앱 만들기
SPM과 Framework의 차이 중 하나는 바로 앱을 빌드해 확인할 수 있다는 차이가 있다.
즉, 원하는 부분만 빌드할 수 있는 모듈화의 장점을 Framework 통해 만들어보자.
🎁 생성 및 추가
모듈에 종속된 데모 앱을 만들어야 하기 때문에 Target에서 생성한다.
1. 타겟에서 + 버튼을 누른다.
2. App을 선택
3. App 에 대하 정보를 적는다.



위 작업을 모두 끝내면
타겟에 Tests 코드와 함께 나타난다.

▶️ 실행
이제 한번 BaseFeature를 테스트 해보자.
💉 의존성 주입
데모앱에 필요한 모듈 의존성을 주입
지금은 BaseFeature 뿐이니깐 BaseFeature Framework를 넣어준다.

여기서 추가할 수도 있다.

📦 import 및 실행
BaseFeature 모듈을 import 하고
테스트할 코드를 실행적어준 후 Target을 Demo 앱으로 실행시키면 끝 ~

😀 소감 및 마무리
Tuist없이 모듈화를 진행해봤는데 ... 진짜 손 많이간다

이런 불편함을 알고 썼다면 조금 더 Tuist를 쓰는 이유를 말할 수 있었지만
먼저 썼다보니 이런 고단함이 있을 줄 몰랐다..
그래도 이번 사이드 프로젝트는 불편함을 느껴보는게 중요하니깐 계속 열심히 해보자.
P.S) 모듈화 중 발생하는 여러 벽들은 또 따로 포스팅을 하겠다.