Định dạng tệp Mach-O (Đối tượng Mach - .o
)
Trong thế giới iOS, mọi tệp nguồn được chuyển đổi thành tệp đối tượng - ABI [Giới thiệu] Tệp Mach-O [Giới thiệu] sẽ được đóng gói thành gói thực thi cuối cùng (ví dụ: ứng dụng, khung ...), tệp (ví dụ: thư viện ...) và hành vi của nó được xác định bởi Mach-O type
[Giới thiệu]
Package
là một thư mục hoạt động như một tập tin - opaque file
. Nó được tạo ra cho trải nghiệm người dùng để làm phức tạp việc thực hiện một số thay đổi thành cấu trúc bên trong có thể gây ra hành vi chương trình không thể đoán trước. Gói được sử dụng trong Document Package
hoặc với một Bundle
. Bạn có thể sử dụng Show Package Contents
trong Finder
Bundle
là một thư mục có cấu trúc cụ thể để tổ chức nhị phân (mã thực thi) và tài nguyên cho mã đó (ví dụ: hình ảnh, ngòi ...). Gói chứa tệp Info.plist
[Giới thiệu] . Gói được tạo ra cho kinh nghiệm phát triển . Ngoài ra nó có thể được đóng gói. Có một số loại bó:
application bundle
- Application target
framework bundle
và versioned bundle
như là một kiểu con -Framework Target
loadable bundle
(aka plug-in bundle
) - Bundle target
(Gói thử nghiệm giao diện người dùng, Gói thử nghiệm đơn vị)
- những người khác (
dSYM
[Giới thiệu] bó)
Application
- .ipa
, .app
[Giới thiệu] - packaged
application bundle
- chương trình có thể khởi chạy.
Tests
- packaged
loadable bundle
được sử dụng để kiểm tra nhị phân. Kiến trúc trình cắm cho phép chúng tôi thêm một chức năng mới (trường hợp thử nghiệm) dưới dạng một mô-đun riêng biệt vào nhị phân hiện có
Thư viện và khung
Martin Fowler trên InversionOfControl
Thư viện về cơ bản là một tập hợp các hàm mà bạn có thể gọi, ngày nay thường được tổ chức thành các lớp. Mỗi cuộc gọi thực hiện một số công việc và trả lại quyền điều khiển cho máy khách.
Một khung thể hiện một số thiết kế trừu tượng, với nhiều hành vi được xây dựng hơn. Để sử dụng nó, bạn cần chèn hành vi của mình vào các vị trí khác nhau trong khung bằng cách phân lớp hoặc cắm vào các lớp của riêng bạn. Mã của khung sau đó gọi mã của bạn tại các điểm này. Kiểm soát chính của chương trình được đảo ngược, chuyển từ bạn sang khuôn khổ. (Đảo ngược kiểm soát)
Thư viện và khung trên iOS
Library
là một tập hợp các tệp đối tượng Mach-O [kiểm tra tĩnh hoặc động] được biên dịch cho một hoặc nhiều kiến trúc.
Static library
- .a
(còn gọi là thư viện lưu trữ tĩnh, thư viện chia sẻ được liên kết tĩnh [doc] ) - Khi bạn thêm nó vào ứng dụng của mình, trình liên kết tĩnh trong thời gian biên dịch sẽ hợp nhất các tệp đối tượng từ thư viện và gói chúng cùng với các tệp đối tượng ứng dụng vào một tệp thực thi duy nhất tập tin. Nhược điểm là một tập tin đầu ra lớn
Từ Xcode 9.0, thư viện tĩnh Swift được hỗ trợ.
Dynamic library
- .dylib
(còn gọi là thư viện chia sẻ động, đối tượng chia sẻ, thư viện được liên kết động [doc] ) được liên kết động với khả năng thực thi của ứng dụng khi tải hoặc thời gian chạy , nhưng không được sao chép vào nó. Trên gói ứng dụng thực hành sẽ chứa thư mục Khung có .dylib
tệp. Tất cả các thư viện hệ thống iOS và macOS đều được dynamic
. Nhược điểm là thời gian khởi chạy chậm vì tất cả các thư viện động nên được sao chép và liên kết.
[Liên kết tĩnh và liên kết động]
Text-based stub library
- .tbd
[Giới thiệu] , đó là một gốc văn bản dynamic library
được đặt trên thiết bị đích. Kết quả là bạn không nên gói một thư viện động vào gói của bạn. Nó có hiệu ứng kích thước.
Framework
aka binary framework
- .framework
là một not packaged framework bundle
(để cho phép các nhà phát triển dễ dàng xem xét các tiêu đề và tài nguyên) có chứa static or dynamic
thư viện, tệp tiêu đề và tài nguyên được biên dịch .
Static framework
chứa một static library
gói với tài nguyên của nó.
Dynamic framework
chứa dynamic library
và tài nguyên. Ngoài ra, khung động có thể bao gồm các phiên bản khác nhau của cùng một thư viện động trong một gói ( versioned bundle
)
[Khung tĩnh so với động]
Embedded framework
là một dynamic framework
cuộc sống trong hộp cát của ứng dụng. Loại này được tạo trước hết để mở rộng để chia sẻ mã và tài nguyên chung. Nó khả dụng khi mục tiêu Triển khai là iOS 8+.
Umbrella framework
[Mục tiêu tổng hợp] là một khung chứa các khung khác. Nó không được hỗ trợ chính thức trên iOS và đó là lý do tại saocác nhà phát triển không khuyến nghị tạo chúng [Tài liệu chính thức] . Trên thực tế, đó là một tập hợp các khung con (hoặc Khung lồng nhau). Khi bạn tạo một khung có phụ thuộc, người tiêu dùng (chẳng hạn như ứng dụng) có trách nhiệm thêm phụ thuộc này cùng với khung của bạn vào dự án. Là một nhà phát triển, việc cố gắng tìm cách chuyển nghĩa vụ này từ người tiêu dùng sang của bạn là điều tự nhiên. Kết quả là bạn nghĩ rằng đóUmbrella framework
là giải cứu nhưng thường nó dẫn đến một vấn đề nghiêm trọng với việc quản lý các phiên bản và sự phức tạp của việc tạo và hỗ trợ nó.
Fake Framework
- là kết quả của các hoạt động cụ thể theo a static library
để tạo ra một gói có .framework
phần mở rộng sẽ tự hành xử như một dynamic framework
. Kỹ thuật này đã được sử dụng khi Xcode không hỗ trợ tạo khung do không có mẫu khung. Một trong những nhận thức của một khuôn khổ giả . Với Xcode 6, Apple đã bổ sung hỗ trợ khung iOS.
Modular Framework
[Giới thiệu] -@import
đó là một khung chứa.modulemap
tệp bên trong. Mô-đun có thể chứa các mô hình con. Ưu điểm chính là bạn tiết kiệm thời gian xây dựng vớiModular Framework
.
Universal Library or Framework
(còn gọi là Fat) [lipo] [Mục tiêu tổng hợp] chứa nhiều kiến trúc. Ví dụ: bản dựng phát hành của bạn nên hỗ trợ một số vòm mà bạn có thể điều chỉnh thông qua Build Active Architecture Only
[CHỈ_ACTIVE_ARCH]
Dependency
[Giới thiệu] Bạn có thể sử dụng mã của bên thứ ba như một phần của mục tiêu của mình. Nó cho phép bạn sử dụng lại mã từ rất nhiều nguồn như - dự án khác, dự án trong cùng một không gian làm việc, mục tiêu khác, thư viện, khung, v.v.
Cách xây dựng và sử dụng Thư viện tĩnh:
Cách xây dựng và sử dụng Khung động [thay đổi thành tĩnh]
[Hệ thống xây dựng Xcode]
[Thành phần Xcode]
[Trình liên kết động]