sookim-1

번호 : 028, 작성일자: 2024-08-12

2024.08.06 ~ 2024.08.11

⚙️ SwiftPM 안정성 테스트


지난 주 프로젝트의 의존성관리도구를 CocoaPods에서 SwiftPM으로 Migration을 모두 완료해서 새로운 문제가 없는지 안정성 테스트를 진행했다.

변경을 모두 완료한 뒤 실제로 적용을 고려하기 위해 의존성관리도구 별로 각각의 차이점을 한 번 더 정리를 해봤다.

iOS 프로젝트에서 의존성관리도구로는 보통 3가지(CocoaPods, Carthage, SwiftPM)를 사용한다.

일단 Carthage도 장단점을 비교했지만, 지원하지 않는 라이브러리가 많기 때문에 사용을 고려하는 부분에서는 제외했다.

CocoaPods의 장점이 SwiftPM이 처음 출시했을 때는 Dynamic, Static 라이브러리를 모두 지원하고, CocoaPods를 지원하는 라이브러리가 많고, 해당 정보들도 많은 장점들이 있었지만 현재 날짜 기준으로는 해당 장점들이 모두 없어진 것 같다.

SwiftPM은 또한 Swift언어에 Built-in 되어있어 따로 설치하지 않아도 되고 애플이 공식적으로 지원하는 등 여러가지 장점이 있는 것 같다. 예외로는 Swift언어가 아닌 라이브러리를 사용할 때 불편한 단점이 있어서 해당 부분은대체할 수 없이 CocoaPods를 사용해야 할 것 같다.

빌드시간 확인

CocoaPods에서 SwiftPM으로 Migration을 한 후 SwiftPM은 의존성을 체크하는 과정이 없어 빌드시간이 더 빠르다고 하여서 실제로 빌드시간을 각각 체크해보았다.

첫 빌드시간 과 재빌드시간을 모두 측정해보았다.

Terminal에서 빌드시간 측정

# SwiftPM 빌드시간 측정
$ time xcodebuild build -project SwiftPMProject.xcodeproj -scheme SwiftPMProject

# CocoaPods 빌드시간 측정
$ time xcodebuild build -workspace PAPA.xcworkspace -scheme PAPA

Xcode에서 빌드시간 측정

$ defaults write com.apple.dt.Xcode ShowBuildOperationDuration -bool YES

하지만, 결과는 의외로 첫빌드, 재빌드 모두 유사했다. 오히려 CocoaPods가 빌드시간이 더 빠른 경우도 있었다.

🔗 CocoaPods vs SPM 글을 참고한 결과 SwiftPM이 CocoaPods보다 빌드시간이 느려질 수 도 있는 이유는 SwiftPM은 모든 의존성을 빌드를 수행하는데 복잡한 의존성 그래프인 경우 더 느려질 수도 있다고 한다.

🏃 Git Repository 이동 && Git Author 전체변경


Git을 사용할 때 Commit의 모든 변경내역을 포함하여 Repository를 간단하게 이동시키는 방법을 찾았다.

$ git clone --mirror https://github.com/sookim-1/originalRepo.git

// .git 폴더가 생기는데 해당 폴더로 이동
$ cd originalRepo.git

$ git remote set-url origin https://github.com/sookim-1/newRepo.git

$ git push --mirror

주의사항은 Github에서는 한 파일당 100Mb가 넘는다면 git-lfs를 사용하여 업로드를 해야하는데 git-lfs란? 대용량 파일을 텍스트포인터로 대체하여 올리는 방식이다.

하지만 gif-lfs를 저장하는 Storage는 Github에서 무료요금제의 경우 20일당 1Gb로 제한되어있다. data-pack을 5달러로 구매하면 50Gb로 업그레이드 할 수 있다.

용량이 초과한 경우, 용량을 초과한 Repository를 제거해도 초기화되는데 시간이 조금 걸리는 것 같다. 이전에는 수동으로 요청해서 제거했었다고 하는데 자동화가 되면서 느려진 것일수도 있을 것 같다.

$ git lfs install

// 원하는 파일들 lfs 추가 
$ git lfs migrate import --include="Large/*, *.zip" --everything

$ git push --mirror

git-filter-repo

git-filter-repo란? 편리하게 커밋 기록들을 필터링하고 수정하는데 도움을 주는 툴이다.

해당 툴을 사용하여 잘못된 author를 쉽게 일괄 변경할 수 있고 커밋별 제거할 파일들도 일괄로 제거할 수 있었다.

🙋🏻‍♂️ 기타 사항


  1. NHN Cloud, Naver Clova 각각 3rd-party 플랫폼의 사용량을 확인하는 방법에 대해서 알아보았다.
태그: