Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] Linking Mach-O Type 옵션, Frameworks, Libraries, and Embedded Content 옵션 (Do Not Embed, Embed & Sign, Embed Without Signing, Dynamic Link, Static Link) 본문

Git, CocoaPods, Xcode, Shell

[iOS - swift] Linking Mach-O Type 옵션, Frameworks, Libraries, and Embedded Content 옵션 (Do Not Embed, Embed & Sign, Embed Without Signing, Dynamic Link, Static Link)

jake-kim 2022. 6. 17. 21:43

프레임워크 관련 중요 옵션

1) Mach-O Type 

  • 프레임워크를 제공하는 쪽에서 선택해줘야하는 옵션

2) Linking Mach-O Type / Frameworks, Libraries, and Embedded Content

  • 프레임워크를 사용하는쪽에서 선택해줘야하는 옵션

1) Mach-O Type 옵션

  • 프레임워크를 제공하는 쪽에서 선택해줘야하는 옵션
  • Target > Build Settings > Linking > Mach-O Type
  • Xcode에서 Framework를 생성하면 자동으로 Executable로 지정

https://developer.apple.com/library/archive/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html

  • 옵션 5가지
    • Executable - 메인 프로젝트인지 (프레임워크가 아닌 메인 실행 프로젝트)
    • Dynamic Library - 동적 라이브러리 (런타임 중에 링크)
    • Bundle - 단순 이미지와 같은 리소스를 제공해주는 목적인 프로젝트인지
    • Static Library - 정적 라이브러리 (빌드 타임에 링크)
    • Relocatable Object File - 동적 라이브러리의 다른 단어
      (라이브러리가 메모리에서 로드되는 위치에 따라 내부에 포함된 함수의 주소가 계산되는데, 동적 라이브러리는 주소는 링크 시간에 결정되지 않기 때문에 재배치 가능하므로 Relocatable이라 표현. 단 정적 라이브러리의 주소는 링크 시간동안 계산)

중요) Framework 종류 선택

  • Dynamic Framework:  리소스를 스스로 가지고 있거나 전체 소스를 제공 (framework로 프로젝트 생성시 default)
  • Static Framework: 전체 소스를 제공하지 않고 SDK 형태로 배포하는 경우

* Object File: CPU가 이해할 수 있는 파일 (아래 Object Code에 해당)

컴파일 과정

2) Frameworks, Libraries, and Embedded Content 옵션 

  • 프레임워크를 사용하는쪽에서 선택해줘야하는 옵션

  • 모듈화 개념 1번 글에서 알아보았듯이, Dynamic Framework인 경우 Library가 stack에 embed되는 형태
    • 구체적으로는 Dynamic Framework는 Stack영역 안의 Bundle에 프레임워크를 내장시키는 것

Dynamic Framework
Static Framework

  • Xcode에서 옵션 설정
    • Embed의 의미: 프레임워크의 사본을 Bundle에 내장할 것인지 선택 옵션
    • Dynamic Library - Embed 
    • Static Library - Not Embed
  • Embed 특성
    • Dynamic Library는 runtime에 연결되고, Static Library는 build time에 연결
    • Dynamic Library는 runtime에 코드들을 embed시켜서 사용

https://stackoverflow.com/questions/57687170/do-not-embed-embed-sign-embed-without-signing-what-are-they-what-th

  • Signing 옵션
    • Embed & Sign: 해당 프레임워크에 signing이 필요한 경우
    • Embed Without Signing: 이미 해당 프레임워크가 signing이 완료된 프레임워크인 경우

 

* 참고

https://stackoverflow.com/questions/13082149/in-xcode-project-target-build-settings-what-is-mach-o-type

https://stackoverflow.com/questions/57687170/do-not-embed-embed-sign-embed-without-signing-what-are-they-what-th

https://holyswift.app/frameworks-embed-or-not-embed-thats-the-question

https://developer.apple.com/library/archive/technotes/tn2435/_index.html

https://stackoverflow.com/questions/32675272/when-should-we-use-embedded-binaries-rather-than-linked-frameworks-in-xcode

Comments