Firebase 종속 항목을 정적 또는 동적으로 연결

CocoaPods 1.9.0 및 Firebase 7부터 Firebase 종속 항목을 정적 프레임워크 또는 동적 프레임워크로 빌드할지 여부를 선택할 수 있습니다. 특정한 동적 라이브러리 동작이 필요하지 않다면 정적 프레임워크를 사용하는 것이 좋습니다.

GitHub 외부에서 개발된 라이브러리는 CocoaPods 1.9.0 이상을 사용하는 경우에도 정적으로만 연결할 수 있습니다. 현재 이 라이브러리 목록에는 AdMob, 애널리틱스, Firebase ML, Performance Monitoring이 포함되어 있습니다. ZIP 파일, Swift Package Manager, Carthage를 포함한 다른 모든 배포 채널은 정적으로 연결된 라이브러리만 제공합니다.

이 문서에서는 Apple 플랫폼의 동적 및 정적 연결에 대한 실무 지식이 있다고 가정합니다. 이 개념에 익숙하지 않다면 다음 문서를 참조하세요.

이 문서에서는 라이브러리 연결 유형에 대한 내용을 설명할 뿐 실행 불가능한 리소스 번들의 로드에 대해서는 다루지 않으므로 라이브러리프레임워크라는 용어를 같은 의미로 사용합니다.

정적 연결

정적으로 연결된 라이브러리는 빌드 시 애플리케이션 실행 파일에 번들로 포함됩니다. 따라서 앱이 시작될 때 앱에 정적 라이브러리의 객체 파일이 있으므로 앱 시작 시 동적 링커가 라이브러리를 확인할 필요가 없습니다. 결과적으로 정적 연결을 사용하는 앱이 더 빠르게 시작됩니다. 다만 바이너리/앱 실행 파일의 크기가 약간 더 큰 편인데 번들로 포함된 동적 라이브러리가 없기 때문에 그 부분은 큰 실행 파일 크기에서 상쇄됩니다.

Podfile에서 연결을 명시적으로 지정하여 Firebase 종속 항목의 정적 연결을 강제 적용할 수 있습니다.

# cocoapods >= 1.9.0
use_frameworks! :linkage => :static

동적 연결

동적으로 연결된 라이브러리는 앱의 기본 실행 파일과는 별도로 App Bundle에 저장되며 앱 시작 시에 동적 링커가 로드해야 합니다. Apple 프레임워크는 모두 동적으로 연결되어 프로세스 간 코드 공유를 지원합니다. 마찬가지로 동적 프레임워크를 사용하여 앱과 확장 대상 간에 코드를 공유할 수 있습니다. 동일한 개발자가 두 애플리케이션을 모두 서명하더라도 각 애플리케이션 간에 동적 프레임워크를 공유할 수 없습니다.

Firebase를 동적 프레임워크 대상의 종속 항목으로 사용하려면 Firebase를 동적으로 연결해야 합니다. 그렇지 않으면 앱의 런타임에 중복 클래스 정의가 발생합니다. 동적 연결은 use_frameworks!의 기본 동작이지만 Podfile에서 동적 연결을 명시적으로도 지정할 수 있습니다.

# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic

특히 앱에 종속 항목이 많으면 동적 연결로 인해 앱 시작 시간이 증가할 수 있습니다.