티스토리 뷰

iOS

Xcode Dependencies - 종속

Basic Developer 2021. 9. 7. 17:58

Framework 나 Lybrary 를 생성하고 추가 할때에 

Build Settings,Build Phases를 설정을 해줘야지 프레임워크가 적용된다

 

이 글에서는 "Framework""Lybrary" 를 추가 할 때에 설정했던것을 기준으로 설명한다


Dependencies

그러면 종속성이란 무엇일까?

하나의 메인 프로젝트(메인 앱)가 프레임워크에 대한 출력을 원한다면

메인프로젝트는 프레임워크에 의존한다고 할 수있다

메인프로젝트는 프레임워크에 대해 종속성을 추가 해야한다.


종속성의 종류는 암시적 종속성,명시적종속성이 있다

암시적 종속성이란?(Implicit Dependencies)

두 대상이 동일한 프로젝트 또는 작업 공간에 있는 경우 Xcode는 종속성을 자동으로 감지 할 수 있다.

따라서  Xcode는 자동적으로 메인프로젝트 보다 프레임워크를 먼저 빌드 할 수있다.

이를 암시적 종속성이라고 칭한다.

암시적 종속성을 도입하려면 빌드 단계(메인프로젝트) 에서 "Link Binary With Libraries" 목록에 새 항목(프레임워크)을 추가해야한다

암시적 종속성 도입


명시적 종속성이란?(Explict Dependencies)

메인프로젝트가 Xcode 종속성에 프레임워크를 포함하는 경우 명시적 종속성 이라고 한다

명시적 종속성은 암시적 종속성을 재정의 한다

Xcode는 종속 대상 이전에 모든 명시적 종속성을 빌드한다

명시적 종속성을 도입하려면 빌드단계(메인프로젝트) 에서 "Dependencies" 목록에 새 항목(프레임워크)를 추가한다

명시적 종속성 도입


종속성을 도입해야 하는 이유는 ?

위에서 보았듯이 메인프로젝트 보다 (예를 들어) 프레임워크를 먼저 빌드를 해서

메인프로젝트가 빌드 되기 전에

정적프레임워크는 필요한 정적라이브러리 자체를  메인프로젝트 응용 프로그램 실행 파일에 옮길 수 있게 하고,

동적 프레임워크는 필요한 동적라이브러리 참조를 메인프로젝트 응용 프로그램 실행 파일에 담을 수 있게 한다


프레임워크 종류(정적,동적) 와 종속성 종류(암시적,명시적)

컴파일 및 링크만 필요한 프레임워크는 암시적 종속성을 도입하고

메인프로젝트 번들(응용 프로그램 실행 파일)에 복사해야 하는 프레임워크는 명시적 종속성을 도입한다

 

결과적으론 정적 프레임워크는 명시적 종속성을 도입하고

동적 프레임워크는 암시적 종속성을 도입한다.

 

정적 프레임워크는 메인프로젝트 제품 번들(응용 프로그램 실행 파일)에 복사해야하기 때문에 명시적 종속성을 해야한다.-> "정적 프레임워크는 필요한 정적 라이브러리 자체를 빌드시에(컴파일 할때) 메인 프로젝트 응용 프로그램 실행 파일에 올려놓기 때문에 "

정적 프레임워크는 Frameworks,Libraries, and Embedded Content를 하면 안되는 이유가 이곳에 있었다

코드가 이미 최종 바이너리(응용 프로그램 실행 파일) 에 병합되어 있기 때문에 정적 프레임워크를 포함하는 것은 잘못된 것입니다. 어떤 이유로 iOS 14.5 이전에는 그렇게 하는 것이 "괜찮았습니다"

 

동적 프레임워크는 메인프로젝트 제품(응용 프로그램 실행 파일)에 컴파일 및 필요한 동적라이브러리 링크만 담는다

동적 프레임워크는 필수적으로  Frameworks,Libraries, and Embedded Content를 해야한다.

동적 프레임워크가 이미 메인프로젝트 안에 들어가 있어서 추가적인 번들을 복사 할 필요가 없다.

따라서 동적 프레임워크는 암시적 종속성을 해야한다.

 

 

Frameworks, Libraries and Embedded Content 추가

만약! Frameworks, Libraries, and Embedded Content를 하지않는다면?

동적프레임워크 개념에서 보았듯이 빌드가 되면 동적 프레임워크에서 필요한 코드의 "참조"만을 응용 프로그램 실행 파일에 담는다.

참조를 담았는데 막상 응용 프로그램 실행 파일가 실행될때 참조를 따라가보니 프레임워크가 없는 것이다.

추가 하지 않았을때 동적 프레임워크는 에러를 발생
동적프레임워크가 참조되고 있음을 보여준다

두번째 사진처럼 응용프로그램 실행 파일은 동적프레임워크를 컴파일 시에 참조한다.그러나 프레임워크를 추가해주지 않으면 참조된 프레임워크를 찾을 수 없다.


 

다양한 피드백 주시면 정말 감사하겠습니다.


참 조

https://dnbespalov.com/2019/02/17/xcode-target-dependencies.html

 

Xcode Target Dependencies

Article describing what are Xcode target dependencies, targets, products, when and how to use them.

dnbespalov.com

 

'iOS' 카테고리의 다른 글

UIGraphicsImageRenderer Memory Leak  (0) 2023.03.10
Xcode binary executable file - nm Command  (0) 2021.11.19
Framework 개념 및 적용(Static,Dynamic)  (0) 2021.09.07
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함