Neden use_frameworks kullanıyoruz! CocoaPods'da?


113

Ben kullandım use_frameworks!CocoaPods içinde Podfilebirçok kez. Merak ediyorum bunu neden kullanıyoruz? Bunun net cevabını alamadım.

Misal:

platform :ios, '8.0'
use_frameworks!

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

1
Use_frameworks demek istiyorsun! Ünlem işareti ile? O zamandan beri bu konuda hep kafam karıştı! DEĞİL anlamına gelir.
Gabriel Jensen

Yanıtlar:


128

use_frameworks!CocoaPods'a Statik Kitaplıklar yerine Çerçeveler kullanmak istediğinizi söyler. Swift, Statik Kitaplıkları desteklemediğinden, çerçeveleri kullanmanız gerekir.


Başka bir cevapta, Statik Kitaplıklar ve Çerçeveler arasındaki farkları açıkladım:

Cocoa Touch Çerçeveleri

Her zaman açık kaynaklıdırlar ve tıpkı uygulamanız gibi inşa edilirler. (Yani Xcode bazen uygulamanızı çalıştırdığınızda ve her zaman projeyi temizledikten sonra onu derler.) Çerçeveler yalnızca iOS 8 ve daha yenisini destekler, ancak çerçevede Swift ve Objective-C'yi kullanabilirsiniz.

Cocoa Touch Statik Kitaplıklar

Adından da anlaşılacağı gibi, statikler. Böylece, onları projenize aktardığınızda zaten derlenmişlerdir. Kodunuzu onlara göstermeden başkalarıyla paylaşabilirsiniz. Statik Kitaplıkların şu anda Swift'i desteklemediğini unutmayın. Kütüphane içinde Objective-C kullanmanız gerekecek. Uygulamanın kendisi yine de Swift ile yazılabilir.

Kaynaklar: Diğer cevabım | AddThis.com Blogu


3
Sürüm notlarıyla ilgili uzun hikaye blog.cocoapods.org/CocoaPods-0.36
Jaime Agudo

8
statik kitaplıklar artık Xcode 9 beta 4'ten itibaren hızlı desteği destekliyor - CocoaPods bunu destekleyecek şekilde güncelleniyor, bkz. github.com/CocoaPods/CocoaPods/issues/6899
JosephH

Sırala ve tatlı açıklama. Gerçekten yardımcı oldu
Piyush

79

use_frameworks!kakao meyveleri dinamik kütüphaneleri kullanın ve bağlı ani özellikle seçim yok oldu, yani statik kütüphanelerini desteklemeyen bir noktasında çok yaygın olduğunu söyler - ancak sık sık yok gerek use_frameworks!artık.

Xcode 9 beta 4 ve CocoaPods 1.5.0'dan itibaren, hızlı statik kitaplıklar artık desteklenmektedir. Ana avantaj, özellikle çok sayıda bölmeniz varsa, daha hızlı uygulama başlatma süreleridir - iOS 10 ve 11, çok sayıda dylib'e sahip olduğunuzda en hızlı değildir.

CocoaPods 1.5.0 erken Nisan 2018 yılında piyasaya sürüldü bunu almak için yükseltmeniz gerekebilir, böylece: sudo gem install cocoapods.

Yine de statik kitaplıklarla düzgün çalışmayan birkaç bölme buldum, bu nedenle kilometreniz değişebilir.


2
Bunu yaptım ve sonra aynı No such modulehatalarla karşılaştım. Bu kokoapodlarda bir sorun mu var?
Alper

3
use_modular_headers!Muhtemelen gerektiren ancak henüz kendi başlarına etkinleştirmeyen bölmelerle çalışmasını sağlamak için Pod dosyama eklemek zorunda kaldım.
Adrian

4
@JosephH "Ana avantaj, daha hızlı uygulama başlatma süreleridir". Bu, Apple'ın Dinamik Kütüphane belgelerine aykırı görünüyor - bu da dll'ler için aynı iddiayı ortaya koyuyor: "başlatıldığında bellek kullanımını en aza indirmek, uygulamanın daha hızlı başlamasını sağlar". Burada, kullanılan kitaplığın başlatma zamanında gerekli olmaması veya popüler bir kitaplık olması ve dolayısıyla belleğe yüklenmiş olması durumunda dll'lerin daha hızlı başlatma sürelerine neden olacağı ima mı var?
TolkienWASP

3
@TolkienWASP Bu sayfa iOS'tan çok macOS ile ilgili görünüyor. Ancak, evet, DLL başlatılana kadar yüklenmemişse, o zaman dll bir kazanç olacaktır. Ne yazık ki iOS durumunda, uygulamanın başlatılması bitmeden önce tüm DLL'lerin yüklendiğini gördüğüm durumlarda, bu da işleri daha yavaş hale getiriyor. İOS uygulaması başlatma zamanlarını optimize etme konusunda en az bir WWDC konuşması var ve 3 veya 4'ten fazla dll'ye sahip olmadığınızdan emin olmak için açıkça bir şeyden bahsetti.
JosephH

1
Sanırım yukarıda belirtilen video bu: developer.apple.com/videos/play/wwdc2016/406 Uygulamanızı başlatma hızınızı ölçmek ve sizin için en iyi olanı görmek için DYLD_PRINT_STATISTICS ortam değişkenini kullanmanızı tavsiye ederim.
iMacHumphries

2

Cocoapod's [About] use_frameworks! , ikili programın türünden sorumludur:

  • Eğer use_frameworks!bir mevcut -dynamic framework
  • eğer use_frameworks!olduğunu mevcut değil -static library

use_frameworks!ilgili proje hedefinde Mach-O Type[Hakkında] bölümünde bir yansıması vardır Pods.

Zaman çizelgesi:

  1. use_frameworks!Swift bölmesi için kullanmanız gereken CocoaPods 0.36 tanıtıldı
  2. CocoaPods 1.5.0 ve Xcode 9 bir seçim yapmanıza izin verdi

[Kelime]


2

use_frameworks!statik kitaplıklar yerine dinamik çerçeveler kullanmak istediğinizi bildirir .

Xcode 9.0 ve CocoaPods 1.5.0 ile birlikte, kullanmıyorsanız statik kitaplıkları hızlı bir şekilde kullanabilirsiniz use_frameworks!.

use_frameworks!Bununla ilgili bir sorun , Bölmelerdeki / Ürünlerdeki tüm çerçevenizin çerçeveler olmasıdır.

İlgili bir makale: ios üzerindeki statik ve dinamik çerçevelere temel genel bakış


4
> One performance with use_frameworks is that all your framework in Pods/Products is frameworks. Tek performans ne?
Alex Zavatone

-1

Ekleme

use_frameworks!

Podfile'da listelenen çerçevelerin statik çerçeveler yerine dinamik olarak kurulmasını istediğimiz anlamına gelir.


Teşekkürler, lütfen dinamik kurulum ile statik kurulum hakkında daha fazla ayrıntı verin.
BuffK
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.