Mach-O 파일 형식 (Mach Object- .o
)
iOS 세계에서 모든 소스 파일은 객체 파일로 변환됩니다-ABI [About] Mach-O 파일 [About] 최종 실행 번들 (예 : 응용 프로그램, 프레임 워크 ...), 파일 (예 : 라이브러리 ...)로 패키지됩니다. 행동은 [정보]에 의해 결정됩니다Mach-O type
Package
파일 자체로 동작하는 디렉토리입니다 opaque file
. 예상치 못한 프로그램 동작을 유발할 수있는 내부 구조를 약간 변경하여 사용자 경험 을 위해 만들어졌습니다 . 패키지는 Document Package
또는로 사용됩니다 Bundle
. Show Package Contents
Finder에서 사용할 수 있습니다
Bundle
이진 (실행 코드) 및 해당 코드의 리소스 (예 : 이미지, 펜촉 ...)를 구성하는 특정 구조의 디렉토리입니다. 번들에는 Info.plist
[정보] 파일이 포함되어 있습니다 . 번들은 개발자 경험을 위해 만들어졌습니다 . 또한 포장이 가능합니다. 번들에는 여러 가지 유형이 있습니다.
application bundle
- Application target
framework bundle
그리고 versioned bundle
하위 유형으로-Framework Target
loadable bundle
(aka plug-in bundle
)- Bundle target
(UI 테스트 번들, 단위 테스트 번들)
- 기타 (
dSYM
[정보] 번들)
Application
- .ipa
, .app
[소개] - packaged
application bundle
- 실행 가능한 프로그램입니다.
Tests
- packaged
loadable bundle
바이너리를 테스트하는 데 사용됩니다. 플러그인 아키텍처를 통해 기존 바이너리에 별도의 모듈로 새로운 기능 (테스트 사례)을 추가 할 수 있습니다
라이브러리와 프레임 워크
InversionOfControl의 Martin Fowler
라이브러리는 기본적으로 호출 할 수있는 함수 세트이며, 요즘에는 대개 클래스로 구성됩니다. 각 호출은 일부 작업을 수행하고 클라이언트에게 제어권을 반환합니다.
프레임 워크는 더 많은 비헤이비어가 내장 된 일부 추상적 인 디자인을 구현합니다.이를 사용하려면 서브 클래 싱 또는 자체 클래스를 연결하여 프레임 워크의 다양한 위치에 비헤이비어를 삽입해야합니다. 그런 다음 프레임 워크의 코드는이 시점에서 코드를 호출합니다. 프로그램의 주요 제어 기능이 반전되어 사용자에서 프레임 워크로 이동합니다. (제어의 반전)
iOS의 라이브러리 및 프레임 워크
Library
하나 이상의 아키텍처를 위해 컴파일 된 Mach-O 객체 파일 [정적 또는 동적 확인] 모음입니다 .
Static library
- .a
(일명 정적 아카이브 라이브러리, 정적 공유와 연계된다는 라이브러리 [문서] ) - 당신은 당신의 응용 프로그램에 추가 할 때 정적 링커를 하는 동안 컴파일 시간 라이브러리에서 오브젝트 파일을 병합하고 하나의 실행 파일로 응용 프로그램 오브젝트 파일과 함께 패키지화합니다 파일. 단점은 큰 출력 파일입니다
Xcode 9.0부터 Swift 정적 라이브러리가 지원됩니다.
Dynamic library
- .dylib
(일명 동적 공유 라이브러리, 공유 객체, 동적 링크 라이브러리 [doc] )는 로드 또는 런타임시 앱의 실행 파일과 동적으로 링크 되지만 복사되지는 않습니다. 실제로 앱 패키지에는 파일 이 포함 된 Frameworks 폴더가 포함 됩니다. 모든 iOS 및 macOS 시스템 라이브러리는 입니다. 단점은 모든 동적 라이브러리를 복사하고 링크해야하기 때문에 시작 시간이 느리다는 것입니다..dylib
dynamic
[정적 및 동적 연결]
Text-based stub library
- .tbd
[정보] , dynamic library
대상 장치에있는 텍스트 스텁입니다 . 결과적으로 번들에 동적 라이브러리를 패키지해서는 안됩니다. 크기 효과가 있습니다.
Framework
일명 binary framework
- .framework
인 not packaged framework bundle
컴파일 포함하는 (개발자가 쉽게 헤더와 자원을 살펴 할 수 있도록하기 위해) static or dynamic
라이브러리, 헤더 파일과 자원을.
Static framework
static library
리소스가 포함 된 패키지를 포함 합니다.
Dynamic framework
dynamic library
및 리소스를 포함합니다 . 또한 동적 프레임 워크는 단일 번들에 동일한 동적 라이브러리의 다른 버전을 포함 할 수 있습니다 ( versioned bundle
)
[정적 대 동적 프레임 워크]
Embedded framework
하는 dynamic framework
응용 프로그램의 샌드 박스에 살고있다. 이 유형은 공통 코드와 자원을 공유 하기 위해 확장 을 위해 먼저 작성되었습니다 . 배포 대상이 iOS 8 이상인 경우 사용할 수 있습니다.
Umbrella framework
[집계 대상] 은 다른 프레임 워크를 포함하는 프레임 워크입니다. iOS에서 공식적으로 지원 되지 않으므로 개발자가 [공식 문서] 를 작성 하지 않는 것이 좋습니다 . 실제로 이것은 하위 프레임 워크 (또는 중첩 프레임 워크)의 집합입니다. 종속성이있는 프레임 워크를 만들 때 소비자 (예 : 앱)는이 종속성을 프레임 워크와 함께 프로젝트에 추가해야합니다. 개발자는이 의무를 소비자에서 소비자로 이전하는 방법을 찾는 것이 당연합니다. 결과적Umbrella framework
으로 이것이 구조라고 생각하지만 일반적으로 버전 관리와 관련된 심각한 문제로 이어지고 작성 및 지원이 복잡해집니다.
Fake Framework
-는 확장 프로그램이 포함 static library
된 번들을 생성하기위한 특정 작업의 결과입니다 . 이 테크닉은 프레임 워크 템플릿이 없기 때문에 Xcode가 프레임 워크 생성을 지원하지 않을 때 사용되었습니다. 가짜 프레임 워크 의 실현 중 하나 . Xcode 6을 통해 Apple은 iOS 프레임 워크 지원을 추가했습니다..framework
dynamic framework
Modular Framework
[정보] -파일@import
이 들어있는 프레임 워크입니다.modulemap
. 모듈은 하위 모듈을 포함 할 수 있습니다. 주요 장점은로 빌드 시간을 절약한다는 것입니다Modular Framework
.
Universal Library or Framework
(일명 Fat) [lipo] [Aggregate target] 에는 여러 아키텍처가 포함되어 있습니다. 예를 들어 릴리스 빌드는 [ONLY_ACTIVE_ARCH] 를 통해 조정할 수있는 아치를 지원해야합니다 Build Active Architecture Only
.
Dependency
[정보] 대상의 일부로 타사 코드를 사용할 수 있습니다. 다른 프로젝트, 동일한 작업 공간의 프로젝트, 다른 대상, 라이브러리, 프레임 워크 등의 많은 소스에서 코드를 재사용 할 수 있습니다.
정적 라이브러리를 빌드하고 사용하는 방법 :
Dynamic Framework를 빌드하고 사용하는 방법 [정적으로 변경]
[Xcode 빌드 시스템]
[Xcode 구성 요소]
[동적 링커]