Format pliku Mach-O (obiekt Mach - .o
)
W świecie iOS każdy plik źródłowy jest konwertowany na pliki obiektowe - ABI [About] plik Mach-O [About], który zostanie spakowany w ostateczny pakiet wykonywalny (np. Aplikacja, framework ...), plik (np. Biblioteka ...) a jego zachowanie jest określane przez Mach-O type
[Informacje]
Package
jest katalogiem, który zachowuje się jak plik - opaque file
. Został stworzony, aby doświadczenie użytkownika utrudniało wprowadzanie pewnych zmian w strukturze wewnętrznej, które mogą powodować nieprzewidywalne zachowanie programu. Pakiet jest używany w Document Package
lub z Bundle
. Możesz użyć Show Package Contents
w Finderze
Bundle
jest katalogiem o określonej strukturze organizowania binarnego (wykonywalnego kodu) i zasobów dla tego kodu (np. obrazy, końcówki ...). Pakiet zawiera plik Info.plist
[About] . Pakiet został stworzony z myślą o programistach . Można go również zapakować. Istnieje kilka rodzajów pakietów:
application bundle
- Application target
framework bundle
i versioned bundle
jako podtyp -Framework Target
loadable bundle
(aka plug-in bundle
) - Bundle target
(pakiet testowy interfejsu użytkownika, pakiet testów jednostkowych)
- inne ( pakiet
dSYM
[Informacje] )
Application
- .ipa
, .app
[Informacje] - packaged
application bundle
- program do uruchomienia.
Tests
- packaged
loadable bundle
który jest używany do testowania pliku binarnego. Architektura wtyczek pozwala nam dodać nową funkcjonalność (przypadki testowe) jako oddzielny moduł do istniejącego pliku binarnego
Biblioteki i frameworki
Martin Fowler na temat InversionOfControl
Biblioteka to zasadniczo zestaw funkcji, które można wywołać, obecnie zazwyczaj zorganizowanych w klasy. Każde połączenie wykonuje jakąś pracę i zwraca kontrolę klientowi.
Framework ucieleśnia jakiś abstrakcyjny projekt, z większą liczbą wbudowanych zachowań. Aby z niego skorzystać, musisz wstawić swoje zachowanie w różne miejsca we frameworku, albo przez tworzenie podklas, albo przez podłączenie własnych klas. Kod frameworka następnie wywołuje kod w tych punktach. Główna kontrola programu jest odwrócona, odsunięta od ciebie do ramy. (Odwrócenie sterowania)
Biblioteki i struktury na iOS
Library
jest zbiorem plików obiektów Mach-O [sprawdź statyczne lub dynamiczne] skompilowanych dla jednej lub więcej architektur.
Static library
- .a
(aka statyczna biblioteka archiwum, statyczna połączona biblioteka współdzielona [doc] ) - Kiedy dodasz ją do swojej aplikacji, statyczny linker w czasie kompilacji połączy pliki obiektowe z biblioteki i spakuje je wraz z plikami obiektów aplikacji w jeden plik wykonywalny plik. Wadą jest duży plik wyjściowy
Od Xcode 9.0 obsługiwana jest biblioteka statyczna Swift.
Dynamic library
- .dylib
(czyli dynamiczna biblioteka współdzielona, obiekt współdzielony, biblioteka połączona dynamicznie [dokument] ) jest dynamicznie łączona z plikiem wykonywalnym aplikacji podczas ładowania lub w czasie wykonywania , ale nie jest do niego kopiowana. W praktyce pakiet aplikacji będzie zawierał folder Frameworks z .dylib
plikiem. Wszystkie biblioteki systemowe iOS i macOS to dynamic
. Wadą jest długi czas uruchamiania, ponieważ wszystkie biblioteki dynamiczne powinny być kopiowane i linkowane.
[Łączenie statyczne a dynamiczne]
Text-based stub library
- .tbd
[About] , jest to fragment tekstu, dynamic library
który znajduje się na urządzeniu docelowym. W rezultacie nie powinieneś pakować biblioteki dynamicznej do swojego pakietu. Ma wpływ na wielkość.
Framework
aka binary framework
- .framework
to not packaged framework bundle
(aby umożliwić programistom łatwe spojrzenie na nagłówki i zasoby), który zawiera skompilowaną static or dynamic
bibliotekę, pliki nagłówkowe i zasoby.
Static framework
zawiera static library
pakiet z jego zasobami.
Dynamic framework
zawiera dynamic library
zasoby i. Oprócz tego dynamiczna struktura może zawierać różne wersje tej samej biblioteki dynamicznej w jednym pakiecie ( versioned bundle
)
[Struktura statyczna a dynamiczna]
Embedded framework
to dynamic framework
mieszkający w piaskownicy aplikacji. Ten typ został stworzony przede wszystkim z myślą o rozszerzeniu w celu współdzielenia wspólnego kodu i zasobów. Jest dostępny, gdy celem wdrożenia jest iOS 8+.
Umbrella framework
[Aggregate target] to framework, który zawiera inne frameworki. Nie jest oficjalnie obsługiwany w systemie iOS i dlatego nie zaleca się programistom ich tworzenia [Oficjalny dokument] . W rzeczywistości jest to zestaw struktur podrzędnych (lub struktur zagnieżdżonych). Podczas tworzenia struktury, która ma zależność, konsument (na przykład aplikacja) jest odpowiedzialny za dodanie tej zależności wraz z platformą do projektu. Jako programista naturalnie próbujesz znaleźć sposób na przeniesienie tego obowiązku z konsumenta na swojego. W rezultacie myślisz, żeUmbrella framework
to ratunek, ale zwykle prowadzi to do poważnych problemów z zarządzaniem wersjami i złożonością tworzenia i obsługi.
Fake Framework
- jest wynikiem określonych operacji pod a, static library
aby utworzyć paczkę z .framework
rozszerzeniem, która będzie się zachowywać jak plik dynamic framework
. Ta technika była używana, gdy Xcode nie obsługiwał tworzenia struktury, ponieważ nie miał szablonu struktury. Jedną z realizacji fałszywych ram . W Xcode 6 firma Apple dodała obsługę struktury iOS.
Modular Framework
[About] -@import
jest to framework, który zawiera.modulemap
plik w środku. Moduł może zawierać podmoduły. Główną zaletą jest to, że oszczędzasz czas kompilacjiModular Framework
.
Universal Library or Framework
(aka Fat) [lipo] [Aggregate target] zawiera wiele architektur. Na przykład Twoja kompilacja wydania powinna obsługiwać jakiś łuk, który możesz regulować za pomocą Build Active Architecture Only
[ONLY_ACTIVE_ARCH]
Dependency
[O] Możesz użyć kodu strony trzeciej jako części celu. Pozwala na ponowne użycie kodu z wielu źródeł, takich jak - inny projekt, projekt w tym samym obszarze roboczym, inny cel, biblioteka, framework itp.
Jak zbudować i używać biblioteki statycznej:
Jak zbudować i używać struktury dynamicznej [zmiana na statyczną]
[Xcode Build System]
[Xcode Components]
[Dynamic linker]