Dlaczego używamy use_frameworks w CocoaPods?


108

Użyłem use_frameworksw CocoaPodsPodfileWiele razy . Zastanawiam się tylko, dlaczego go używamy? Nie mogłem znaleźć na to prostej odpowiedzi.

Przykład:

platform :ios, '8.0'
use_frameworks!

target "CityWhether" do
    pod 'Alamofire'
    pod 'SwiftyJSON'
end

1
Masz na myśli use_frameworks! Z wykrzyknikiem? Od tamtej pory zawsze byłem zdezorientowany! znaczy NIE.
Gabriel Jensen

Odpowiedzi:


121

use_frameworksinformuje CocoaPods, że chcesz używać struktur zamiast bibliotek statycznych. Ponieważ Swift nie obsługuje bibliotek statycznych, musisz używać frameworków.


W innej odpowiedzi wyjaśniłem różnice między bibliotekami statycznymi a frameworkami:

Ramki dotykowe Cocoa

Są zawsze typu open source i będą tworzone tak jak Twoja aplikacja. (Więc Xcode czasami go skompiluje, gdy uruchomisz aplikację i zawsze po wyczyszczeniu projektu). Struktury obsługują tylko iOS 8 i nowsze, ale możesz używać Swift i Objective-C we frameworku.

Biblioteki statyczne Cocoa Touch

Jak sama nazwa wskazuje, są statyczne. Więc są już skompilowane, kiedy importujesz je do swojego projektu. Możesz udostępniać je innym bez pokazywania im swojego kodu. Należy pamiętać, że biblioteki statyczne obecnie nie obsługują języka Swift. Będziesz musiał używać Objective-C w bibliotece. Samą aplikację można nadal napisać w języku Swift.

Źródła: Moja inna odpowiedź | Blog AddThis.com


3
Długa historia w informacjach o wydaniu blog.cocoapods.org/CocoaPods-0.36
Jaime Agudo

7
biblioteki statyczne obsługują teraz swift od Xcode 9 beta 4 - CocoaPods jest aktualizowana, aby to obsługiwać, patrz github.com/CocoaPods/CocoaPods/issues/6899
JosephH

Sortuj i słodki opis. To naprawdę pomocne
Piyush

76

use_frameworks!mówi strąkom kakaowym, aby korzystały z bibliotek dynamicznych i był bardzo rozpowszechniony w pewnym momencie, w szczególności ze względu na szybkie nieobsługiwanie bibliotek statycznych, co oznacza, że ​​nie było wyboru - jednak często już nie potrzebujesz use_frameworks!.

Począwszy od Xcode 9 beta 4 i CocoaPods 1.5.0, obsługiwane są szybkie biblioteki statyczne. Główną zaletą jest krótszy czas uruchamiania aplikacji, szczególnie jeśli masz dużo podów - iOS 10 i 11 nie są najszybsze, gdy masz wiele dylibów.

CocoaPods 1.5.0 został wydany na początku kwietnia 2018 roku , więc może trzeba uaktualnić je zdobyć: sudo gem install cocoapods.

Znalazłem jednak kilka podów, które jeszcze nie działają poprawnie z bibliotekami statycznymi, więc Twój przebieg może się różnić.


2
Zrobiłem to, a potem napotkałem te same No such modulebłędy. Czy to problem z tymi kokoapodami?
Alper

3
Musiałem dodać use_modular_headers!do mojego pliku Podfile, aby działał z podami, które prawdopodobnie tego wymagają, ale nie włączaj go samodzielnie.
Adrian

4
@JosephH „Główną zaletą jest szybsze uruchamianie aplikacji”. Wydaje się, że jest to sprzeczne z dokumentacją biblioteki dynamicznej Apple, która zawiera to samo twierdzenie dotyczące bibliotek dll: „minimalizacja wykorzystania pamięci po uruchomieniu przyspiesza uruchamianie aplikacji”. Czy sugeruje się, że biblioteki dll spowodują szybsze uruchamianie, jeśli używana biblioteka nie jest wymagana w czasie uruchamiania, czy też jest to popularna biblioteka, a zatem jest już załadowana do pamięci?
TolkienWASP,

3
@TolkienWASP Ta strona wydaje się być o macOS, a nie o iOS. Ale tak, jeśli biblioteka DLL nie zostanie załadowana do czasu uruchomienia, dll będzie wygrana. Niestety w przypadku iOS, w sytuacjach, w których widziałem, że wszystkie biblioteki DLL są ładowane przed zakończeniem uruchamiania aplikacji, co spowalnia. Jest co najmniej jedna rozmowa WWDC na temat optymalizacji czasu uruchamiania aplikacji na iOS i wyraźnie wspomniała o czymś w rodzaju upewnienia się, że nie masz więcej niż 3 lub 4 biblioteki DLL.
JosephH,

1
Myślę, że to wideo, do którego odwołujemy się powyżej: developer.apple.com/videos/play/wwdc2016/406 Zachęcam do korzystania ze zmiennej środowiskowej DYLD_PRINT_STATISTICS, aby zmierzyć szybkość uruchamiania aplikacji i sprawdzić, co jest dla Ciebie najlepsze.
iMacHumphries

2

use_frameworksdeklaruje, że chcesz używać struktur dynamicznych zamiast bibliotek statycznych .

Po wydaniu Xcode 9.0 i CocoaPods 1.5.0 możesz szybko korzystać z bibliotek statycznych, jeśli nie używasz use_frameworks .

Jeden problem z use_frameworks jest to, że wszystkie ramy w podach / produktach to frameworki.

Oto powiązany artykuł: Podstawowe omówienie struktur statycznych i dynamicznych na iOS


4
> One performance with use_frameworks is that all your framework in Pods/Products is frameworks. Co takiego jednego przedstawienia?
Alex Zavatone

2

Cocoapod's [About] use_frameworks! odpowiada za typ pliku binarnego:

  • jeśli use_frameworks!jest obecny -dynamic framework
  • jeśli use_frameworks!jest nieobecny -static library

use_frameworks!ma odzwierciedlenie w Mach-O Type[About] w odpowiednim celuPods projektu.

Oś czasu:

  1. CocoaPods 0,36 wprowadzonyuse_frameworks! które trzeba było wykorzystać do Swift strąka
  2. CocoaPods 1.5.0 i Xcode 9 pozwoliły Ci mieć wybór

[Słownictwo]


-1

Dodawanie

use_frameworks!

w pliku Podfile oznacza, że ​​chcemy, aby wymienione frameworki były instalowane dynamicznie zamiast tego jako struktury statyczne.


Dziękujemy, ale podaj więcej szczegółów na temat instalacji dynamicznej i statycznej.
BuffK
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.