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]
Packagejest 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 Packagelub z Bundle. Możesz użyć Show Package Contentsw Finderze
Bundlejest 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 bundlei versioned bundlejako 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 bundlektó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
Libraryjest 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 .dylibplikiem. 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 libraryktóry znajduje się na urządzeniu docelowym. W rezultacie nie powinieneś pakować biblioteki dynamicznej do swojego pakietu. Ma wpływ na wielkość.
Frameworkaka binary framework- .frameworkto not packaged framework bundle(aby umożliwić programistom łatwe spojrzenie na nagłówki i zasoby), który zawiera skompilowaną static or dynamicbibliotekę, pliki nagłówkowe i zasoby.
Static frameworkzawiera static librarypakiet z jego zasobami.
Dynamic frameworkzawiera dynamic libraryzasoby 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 frameworkto dynamic frameworkmieszkają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 frameworkto 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 libraryaby utworzyć paczkę z .frameworkrozszerzeniem, 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] -@importjest to framework, który zawiera.modulemapplik 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]