Carthage란 무엇이며, 앱 개발을 어떻게 최적화할 수 있습니까?

Carthage는 개발자가 타사 라이브러리를 간단하고 효율적으로 애플리케이션에 통합할 수 있게 하는 iOS 및 macOS 프로젝트용 의존성 관리자입니다. CocoaPods 같은 다른 도구와 다르게 Carthage는 최소주의적이고 비침습적인 방식에 중점을 둡니다. 즉, 프로젝트 구조를 변경하지 않으며 의존성을 나열하는 간단한 텍스트 파일인 Cartfile만 있으면 됩니다. 이 덕분에 타사 라이브러리와 프레임워크의 이점을 누리면서 프로젝트 설정에 대한 통제권을 유지하려는 개발자들 사이에서 인기 있는 선택이 되었습니다.

Carthage는 바이너리 프레임워크를 빌드하여 작동하며, 이 프레임워크는 Xcode 프로젝트에 직접 통합할 수 있습니다. 이 방식을 통해 개발자는 더 빠른 빌드 시간과 더 간소한 개발 과정의 이점을 누릴 수 있습니다. Carthage를 사용하면 복잡한 구성 파일이나 프로젝트의 원치 않는 변경 없이 의존성을 쉽게 추가하고, 업데이트하며, 관리할 수 있습니다. 그 대신 빌드된 프레임워크는 Xcode에 수동으로 추가합니다. 따라서 Carthage는 iOS 및 macOS 개발 프로젝트에서 간단하지만 강력한 의존성 관리 솔루션을 원하는 사람에게 좋은 도구입니다.

Carthage는 iOS 및 macOS 프로젝트를 위한 탈중앙화 의존성 관리자입니다. 타사 라이브러리를 프레임워크로 가져와 빌드하며, 개발자는 프로젝트 파일이 자동으로 변경되지 않은 상태에서 이를 직접 Xcode 프로젝트에 추가합니다. 이는 프로젝트 구조에 대한 완전한 통제권을 제공하며, 의존성이 업데이트될 때만 빌드되므로 더 빠른 빌드 시간을 제공할 수 있습니다. Carthage는 주로 CocoaPods의 더 간단한 대안으로 사용됩니다. 한편 Swift Package Manager는 Apple의 내장 패키지 관리 솔루션입니다.

More about Carthage

Carthage는 타사 라이브러리를 프로젝트에 통합하는 간단하고 유연한 방법을 제공하는 iOS 및 macOS용 의존성 관리자입니다. 프로젝트 설정을 자동으로 변경하는 다른 도구와 다르게 Carthage는 최소한의 설정에 중점을 두며, 개발자가 불필요한 제약 없이 프로젝트를 관리할 수 있는 자유를 줍니다.

기술적으로 Carthage는 소스 코드에서 바이너리 프레임워크를 빌드하거나 미리 빌드된 프레임워크를 다운로드하여 작동하며, 이를 통해 개발자는 이러한 프레임워크를 Xcode 프로젝트에 직접 포함할 수 있습니다. 즉, Carthage는 프로젝트 파일을 변경하지 않고 컴파일된 프레임워크를 저장하는 “Carthage/Build” 폴더를 생성합니다. 이 방식은 개발자에게 프로젝트 구조와 의존성에 대한 완전한 통제권을 줍니다.

Carthage는 세 가지 주요 기능을 지원하며, 각 기능은 의존성을 처리하는 서로 다른 방법을 제공합니다.

  1. 의존성 빌드: Carthage는 “Cartfile”에 지정된 모든 의존성을 자동으로 빌드할 수 있습니다. 이를 통해 개발자는 자신의 코드에 집중할 수 있습니다. 한편 Carthage는 외부 라이브러리의 컴파일을 처리합니다. 이 기능은 여러 타사 라이브러리가 필요한 프로젝트에 이상적입니다.

  2. 의존성 업데이트: Carthage는 명령 하나로 모든 의존성을 Cartfile의 버전 요구 사항을 충족하는 최신 버전으로 업데이트할 수 있습니다. 이를 통해 보안 수정을 포함하여 라이브러리를 최신 상태로 쉽게 유지할 수 있으며, 이는 호환성과 보안을 유지하는 데 중요합니다.

  3. 프레임워크 통합: Carthage는 개발자가 일반적으로 “Frameworks, Libraries, and Embedded Content” 아래에서 Xcode 프로젝트에 직접 추가하는 프레임워크를 생성합니다. 이는 수동 단계가 필요하지만 어떤 라이브러리가 프로젝트에 포함되는지 정확히 파악할 수 있게 하며, 타사 라이브러리의 새 기능과 개선 사항을 쉽게 활용할 수 있게 합니다.

Carthage의 가장 큰 강점 중 하나는 단순성과 유연성입니다. 자동화된 프로젝트 변경을 피함으로써 개발자가 프로젝트에 대한 통제권을 유지할 수 있게 합니다. 이는 프로젝트 파일의 충돌 위험을 줄이고 기존 프로젝트 구조를 방해하지 않고 새 의존성을 통합하기 쉽게 만듭니다.

Carthage의 의존성 관리 방식은 일상 업무에서 시간도 절약합니다. 의존성이 추가되거나 업데이트될 때만 빌드하고 불필요한 프로젝트 변경을 피함으로써 Carthage는 프로젝트 유지 관리에 필요한 시간과 리소스를 최소화합니다. 따라서 워크플로를 최적화하고 고품질 소프트웨어 제공에 집중하려는 개발자에게 좋은 도구입니다.

실제로 Carthage는 개발자가 iOS 및 macOS 프로젝트에서 의존성을 관리하는 방식에 상당한 영향을 미쳤습니다. 크고 작은 개발 팀 모두 프로젝트를 최신 상태로 안전하고 유지 관리하기 쉽게 유지하는 데 사용해 왔습니다. 하지만 현재 Carthage의 개발은 상당히 느려졌으며, 대부분의 라이브러리는 이제 Swift Package Manager를 우선 지원합니다.

요약하면 Carthage는 단순성, 유연성, 효율성을 결합하여 개별 개발자와 대규모 팀 모두에게 의존성 관리를 더 투명하게 만드는 도구입니다. 간단한 설정과 프로젝트 구조에 대한 최소한의 개입 덕분에 빠르고 안전한 통합이 필요한 앱 개발에서 유용한 도구가 되었습니다.

Frequently asked questions about Carthage

Carthage란 무엇이며, 실제로 어떻게 작동합니까?

Carthage는 Swift 및 Objective-C로 작성된 iOS, macOS, tvOS, watchOS 프로젝트를 위한 탈중앙화 의존성 관리자입니다. 중앙 패키지 레지스트리가 없습니다. 대신 각 의존성은 일반적으로 GitHub에 있는 Git 저장소를 직접 가리킵니다.

의존성은 프로젝트 루트 폴더에 있는 Cartfile이라는 텍스트 파일에 지정합니다. carthage update 명령을 실행하면 Carthage는 적합한 버전을 찾아 소스 코드를 Carthage/Checkouts 폴더로 가져오고 Xcode 자체 빌드 도구로 각 라이브러리를 빌드합니다. 완성된 프레임워크는 Carthage/Build에 배치됩니다.

Carthage는 Xcode 프로젝트 파일을 변경하지 않습니다. 개발자는 빌드된 프레임워크를 해당 target의 “Frameworks, Libraries, and Embedded Content” 아래에 추가합니다. 이는 프로젝트 설정에 대한 완전한 통제권을 주지만 자동으로 통합하는 도구보다 수작업이 조금 더 필요합니다.

Carthage는 어떻게 설치하며, 라이브러리는 어떻게 추가합니까?

Carthage는 대부분 brew install carthage 명령으로 Homebrew를 사용하여 설치합니다. 또는 GitHub의 프로젝트 릴리스에서 설치 패키지를 다운로드할 수 있습니다.

라이브러리는 일반적으로 네 단계로 추가합니다.

  • 프로젝트 루트 폴더에 github "Alamofire/Alamofire" ~> 5.0 같은 줄이 담긴 Cartfile 파일을 만듭니다.
  • carthage update --use-xcframeworks --platform iOS 명령으로 라이브러리를 가져와 빌드합니다.
  • Carthage/Build의 완성된 .xcframework를 앱 target의 “Frameworks, Libraries, and Embedded Content”로 끌어다 놓습니다.
  • 동적 프레임워크의 경우 “Embed & Sign”을 선택합니다.

~> 연산자는 major 버전이 같은 한 새 버전을 허용한다는 뜻입니다. 그런 다음 import Alamofire로 코드에서 라이브러리를 사용할 수 있습니다.

Cartfile과 Cartfile.resolved의 차이는 무엇입니까?

Cartfile은 프로젝트에 필요한 의존성과 충족해야 하는 버전 요구 사항을 설명합니다. 예: ~> 5.0, >= 2.1 또는 특정 branch. 이 파일은 수동으로 편집하며 의도를 표현합니다.

Cartfile.resolved는 자동으로 생성되며, 의존성 자체의 의존성을 포함하여 실제로 선택된 정확한 버전이나 commit을 담고 있습니다. 이 파일은 잠금 역할을 하므로 팀의 모든 사람과 모든 빌드 서버가 정확히 같은 코드를 받습니다.

차이는 명령에서 드러납니다.

  • carthage update는 Cartfile과 일치하는 최신 버전을 찾아 결과를 Cartfile.resolved에 씁니다.
  • carthage bootstrap은 Cartfile.resolved에 나열된 버전을 정확히 가져와 빌드합니다.

따라서 두 파일 모두 버전 관리에 보관해야 합니다. 테스트 라이브러리처럼 개발 중에만 사용하는 의존성은 Cartfile.private에 둘 수 있습니다.

Carthage는 XCFramework를 어떻게 빌드하며, 왜 중요합니까?

이전에 Carthage는 이른바 fat framework를 빌드했는데, 여기서는 실제 기기용 코드와 시뮬레이터용 코드가 lipo 도구로 하나의 파일에 결합되었습니다. 이 방식은 Xcode 12부터 작동하지 않게 되었습니다. Apple Silicon에서는 기기와 시뮬레이터가 모두 arm64 아키텍처를 사용하며, 같은 아키텍처가 하나의 fat framework에 두 번 나타날 수 없기 때문입니다.

해결책은 Apple이 Xcode 11에서 도입한 XCFramework입니다. XCFramework는 iOS 기기와 iOS 시뮬레이터처럼 플랫폼과 변형마다 별도의 바이너리를 담은 번들입니다. Carthage 0.37부터는 --use-xcframeworks 플래그로 XCFramework를 빌드합니다. 예: carthage bootstrap --use-xcframeworks

결과는 Carthage/Build에 .xcframework 폴더로 배치됩니다. 이 폴더는 앱 target에 직접 추가되며, 예전의 carthage copy-frameworks 빌드 단계는 더 이상 필요하지 않습니다.

Carthage, CocoaPods, Swift Package Manager의 차이는 무엇입니까?

세 도구는 같은 작업을 해결하지만 방식이 다릅니다.

  • Carthage는 탈중앙화되어 있으며 Cartfile에 지정된 Git 저장소에서 의존성을 직접 가져옵니다. 라이브러리는 바이너리 프레임워크로 빌드되며 Xcode 프로젝트는 변경되지 않습니다. 통합은 수동으로 이루어집니다.
  • CocoaPods는 중앙 라이브러리 레지스트리와 Podfile을 사용합니다. pod install 명령은 workspace를 만들고 프로젝트 설정을 변경하므로 통합은 자동으로 이루어지지만 덜 투명합니다. CocoaPods는 현재 유지 관리 모드에 있습니다.
  • Swift Package Manager(SPM)는 Apple의 자체 도구이며 Xcode에 내장되어 있습니다. 패키지는 Xcode에서 직접 추가하거나 Package.swift에 기술하며, 추가 설치가 필요하지 않습니다.

Carthage는 의존성이 업데이트될 때만 빌드되므로 프로젝트 파일에 대한 완전한 통제권과 더 짧은 빌드 시간을 원할 때 유용합니다. 새 프로젝트에서는 대부분의 라이브러리가 지원하므로 현재 SPM이 가장 널리 사용되는 선택입니다.

Carthage의 빌드 시간은 어떻게 줄일 수 있습니까?

Carthage는 기본적으로 소스 코드에서 의존성을 빌드하므로 첫 빌드에 오랜 시간이 걸릴 수 있습니다. 여러 옵션으로 시간을 줄일 수 있습니다.

  • --platform iOS는 빌드를 프로젝트가 실제로 사용하는 플랫폼으로 제한합니다.
  • --cache-builds는 같은 버전으로 이미 빌드된 의존성을 건너뛰므로 변경된 라이브러리만 다시 빌드됩니다.
  • 모든 의존성을 업데이트하는 대신 개별 의존성을 따로 업데이트할 수 있습니다. 예: carthage update Alamofire
  • 많은 라이브러리가 GitHub 릴리스에 미리 빌드된 프레임워크를 제공하며, Carthage는 이를 자동으로 다운로드합니다. 비공개 소스 SDK는 binary와 JSON 명세의 URL로 지정할 수 있습니다.

빌드 서버에서는 실행 간에 Carthage/Build 폴더를 캐시할 수도 있습니다. 많은 팀이 .gitignore로 이 폴더를 Git에서 제외하고 carthage bootstrap으로 다시 만듭니다.

Carthage for dummies

Carthage는 앱을 이루는 작은 구성 요소인 “의존성”을 정리하고 관리하도록 돕는 도구입니다. 더 잘 작동하도록 다른 사람이 이미 만들어 둔 기성 부품이 필요한 앱을 만든다고 떠올려 보면 됩니다. Carthage는 이러한 부품을 가져와 추적하므로 처음부터 만들 필요가 없습니다. 이는 프로젝트에 필요한 모든 책을 관리하는 사서와 비슷하게 작동하며, 작가는 자신의 이야기에 집중할 수 있습니다. 다른 사람의 작업을 재사용하면서도 모든 것이 잘 맞물리도록 하므로 앱 개발이 더 쉽고 빨라집니다.

댓글 남기기