Podczas korzystania z zewnętrznej struktury Xcode ma teraz sekcję Embedded Binaries oraz Linked Frameworks .
Kiedy pobierzesz zewnętrzną strukturę i Finder-> przeciągniesz ją do Xcode, umieści ona framework w sekcji Linked Frameworks and Libraries .
Kiedy budujesz bibliotekę z Carthage, zaleca się przeciąganie do sekcji Osadzone pliki binarne .
Wydaje się, że oba działają w kategoriach łączenia, ponieważ API staje się dostępne w obu przypadkach, co więcej, kiedy dodaje się framework do sekcji Osadzone pliki binarne, jest on również automatycznie dodawany do sekcji Połączone struktury i biblioteki .
Więc kto ma rację? Kartagina czy reszta internetu? i dlaczego istnieją 2 opcje włączania zasobów zewnętrznych do projektów Xcode?
Odpowiedzi:
Łączenie - musimy połączyć framework, jeśli używamy zdefiniowanego w nim API.
Osadzanie - ten proces zapewni, że dodana struktura zostanie osadzona w pakiecie aplikacji i potencjalnie pomoże w udostępnianiu kodu między aplikacją a pakietami rozszerzeń. Osadzamy tylko frameworki stron trzecich, a nie te dostarczane przez iOS, ponieważ są one łatwo dostępne na urządzeniu. Jeśli osadzamy, oznacza to, że będziemy musieli również połączyć się z nimi, aby Xcode mógł skompilować i utworzyć kompilację. Gdy aplikacja działa na urządzeniu, osadzona struktura zostanie w razie potrzeby załadowana do pamięci.
źródło
embed
, a nielink
to? I wzajemnie? I dlaczego?Jeśli osadzisz plik binarny, zostanie on uwzględniony w Twoim produkcie. Jeśli połączysz tylko bibliotekę lub strukturę bez osadzania jej, nie będzie ona częścią Twojego produktu.
Jednak w iOS8 wszystkie frameworki innych firm muszą być „osadzone”. Nawet struktura współdzielona przez różne programy musi być „osadzona” w każdym z tych programów. W przypadku, gdy została ona zainstalowana na urządzeniu w udostępnionej lokalizacji, każdy inny proces instalacji korzystający z tego samego „osadzonego” kodu z udostępnionej lokalizacji może ponownie wykorzystać tę istniejącą instalację. Jest to specyficzne dla iOS8, nie było możliwe przed iOS8 i poza światem iOS ta odpowiedź nie byłaby dokładna.
źródło
Linking
więcej naLinker
ten temat działa w czasie kompilacji lub wczytywania / uruchamiania.Linker
skopiuj aLibrary
do docelowego pliku binarnego. PonieważFramework
jest autonomiczny,Linker
w tym przypadku jest odpowiedzialny za znajdowanie i łączenieDynamic Framework
wewnętrznej ścieżki programu ładującego system lub znajdowanie i łączenie w pakiecie .Embedding
jest procesem kopiowania pliku binarnego do docelowego pliku binarnego. Dzięki temu będzie się znajdował wewnątrz.Przeczytaj więcej tutaj
źródło
O ile mi wiadomo, osadzony plik binarny zawiera tylko dynamiczną strukturę dostępną w systemie iOS 8 i nowszym, w przeciwnym razie można połączyć tylko strukturę statyczną.
źródło