최근 iOS 빌드를 진행하던 중, 새로운 패키지를 추가하면서 의존성 충돌 이슈로 상당한 시간을 낭비했습니다.
당시 사무실에는 혼자 남아 있었기에 문제를 해결하기 위해 지속적인 서칭을 통해 시간내에 완료하였는데
그 과정에서 미처 깨닫지 못했던 부분들을 정리했다.
==========================================================================
● EDM(External Dependency Manager for Unity).
◎ 하단의 목록들을 편리하게 사용하기 위한 툴이다.
| 항목 |
| ------------------------------------------------ |
| Android 관련 라이브러리(예: AAR). |
| iOS CocoaPods. |
| Version에 따른 종속성 관리 |
| 패키지 관리자(PM) 레지스트리 관리. |
● 왜 EDM(External Depenecy Manager)을 사용해야 하는가?
◎ 많은 Unity 플러그인은 Android 특정 라이브러리, iOS CocoaPods에 의존하고 떄로는 다른 Unity 플러그인에 대한 전이적 의존성을 가지고 있다.
◎ Unity 프로젝트 내에서 플랫폼 별 라이브러리를 통합하는 것은 복잡할 수 있으며 Unity 플러그인 유지 관리자에게 부담이 될 수 있다.
◎ 플랫폼 별 라이브러리에서 충돌하는 종속성을 해결하는 프로세스는 Unity 플러그인을 사용하려는 개발자가 해당 플렛폼 빌드 중 오류를 푸시한다.
● 그럼 의존성과 종속성은 뭐야?
◎ 의존성 : 소프트웨어를 빌드하거나 실행하기 위해 "필요로 하는 라이브러리,모듈,플러그인" 자체를 가리키는 용어다.
EX ) : 만약에 A 라는 패키지가 동작하려면 B라이브러리가 반드시 있어야 한다라는 전재가 있으면 "A는 B에 의존성 (dependency)이 있다.
◎ 전이적 의존성(종속성, transitive dependency) : 내가 직접 선언하지 않은,플러그인 내부에서 또 필요로 하는 라이브러리가 있는 것을 종속성이라고 한다.
EX ) : A가 B라이브러리가 필요하는 상황을 의존성이라고 하지만 B라이브러리를 실행하기 위해서는 C모듈이 필요하다. 이것을 종속성 이라고 표현한다.
● CocoaPods
◎ ios,Mac서 사용하는 의존성 문제를 해결해주는 툴이다.
◎ Podfile에 선언한 직접 의존성 뿐 아니라,그 의존성이 또 필요로 하는 종속성까지 자동으로 다운받고, 버전 제약에 맞춰 설치해 준다.
● Podfile
◎ CocoaPods가 "어떤 외부 라이브러리를 이 Xcode 프로젝트에 포함시킬지"를 정의하는 설정파일<DSL>이다.
"Domain Specific Language"의 약자로, 특정 도메인 또는 분야에 특화된 언어를 의미합니다.
◎ target 'MyApp' do … end 블록 안에 pod 'Alamofire', '~> 5.4'처럼 사용할 라이브러리 이름과 버전을 선언하면, 그 아래에 필요한 전이적 종속성까지 자동으로 내려받고 설치한다.