Mengapa kami menggunakan use_frameworks di CocoaPods?

105

Saya telah menggunakan use_frameworksCocoaPods Podfileberkali-kali. Saya hanya bertanya-tanya mengapa kita menggunakannya? Saya tidak bisa mendapatkan jawaban langsungnya.

Contoh:

platform :ios, '8.0'
use_frameworks!

target "CityWhether" do
    pod 'Alamofire'
    pod 'SwiftyJSON'
end
harikrista
sumber
1
Apakah maksud Anda use_frameworks! DENGAN tanda seru? Saya selalu bingung tentang itu sejak itu! berarti TIDAK.
Gabriel Jensen

Jawaban:

120

use_frameworksmemberi tahu CocoaPods bahwa Anda ingin menggunakan Frameworks daripada Static Libraries. Karena Swift tidak mendukung Pustaka Statis, Anda harus menggunakan kerangka kerja.


Dalam jawaban lain, saya menjelaskan perbedaan antara Perpustakaan Statis dan Kerangka:

Kerangka Cocoa Touch

Mereka selalu open-source dan akan dibuat seperti aplikasi Anda. (Jadi Xcode terkadang akan mengkompilasinya, ketika Anda menjalankan aplikasi dan selalu setelah Anda membersihkan proyek.) Kerangka kerja hanya mendukung iOS 8 dan yang lebih baru, tetapi Anda dapat menggunakan Swift dan Objective-C dalam kerangka kerja.

Pustaka Statis Cocoa Touch

Seperti namanya, mereka statis. Jadi mereka sudah dikompilasi, saat Anda mengimpornya ke proyek Anda. Anda dapat membagikannya dengan orang lain tanpa menunjukkan kode Anda kepada mereka. Perhatikan bahwa Perpustakaan Statis saat ini tidak mendukung Swift. Anda harus menggunakan Objective-C di dalam perpustakaan. Aplikasinya sendiri masih bisa ditulis di Swift.

Sumber: Jawaban saya yang lain | Blog AddThis.com

FelixSFD
sumber
3
Cerita panjang di catatan rilis blog.cocoapods.org/CocoaPods-0.36
Jaime Agudo
7
perpustakaan statis sekarang mendukung swift pada Xcode 9 beta 4 - CocoaPods sedang diperbarui untuk mendukung ini, lihat github.com/CocoaPods/CocoaPods/issues/6899
JosephH
Urutkan dan deskripsi manis. Ini sangat membantu
Piyush
76

use_frameworks!memberi tahu buah kakao untuk menggunakan pustaka dinamis, dan sangat umum pada satu titik karena khususnya karena cepat tidak mendukung pustaka statis, yang berarti tidak ada pilihan - namun Anda sering tidak membutuhkannya use_frameworks!lagi.

Mulai Xcode 9 beta 4, dan CocoaPods 1.5.0, pustaka statis cepat sekarang didukung. Keuntungan utamanya adalah waktu startup aplikasi yang lebih cepat, terutama jika Anda memiliki banyak pod - iOS 10 dan 11 bukanlah yang tercepat saat Anda memiliki banyak dylib.

CocoaPods 1.5.0 dirilis pada awal April 2018 , sehingga Anda mungkin perlu meng-upgrade untuk mendapatkannya: sudo gem install cocoapods.

Saya telah menemukan beberapa pod yang belum berfungsi dengan baik dengan library statis, jadi jarak tempuh Anda mungkin berbeda-beda.

JosephH
sumber
2
Saya melakukan itu dan kemudian saya mengalami No such modulekesalahan yang sama . Apakah itu masalah pada cocoapoda tersebut?
Alper
3
Saya harus menambahkan use_modular_headers!ke Podfile saya untuk membuatnya berfungsi dengan pod yang mungkin membutuhkannya tetapi belum mengaktifkannya sendiri.
Adrian
4
@JosephH "Keuntungan utama adalah waktu startup aplikasi yang lebih cepat". Ini tampaknya berjalan bertentangan dengan dokumentasi Perpustakaan Dinamis Apple - yang membuat klaim yang sama tentang dll: "meminimalkan penggunaan memori setelah diluncurkan membuat aplikasi diluncurkan lebih cepat". Apakah implikasinya di sini bahwa dll akan menghasilkan waktu peluncuran yang lebih cepat jika perpustakaan yang digunakan tidak diperlukan pada waktu peluncuran, atau ini adalah perpustakaan yang populer dan oleh karena itu sudah dimuat ke dalam memori?
TolkienWASP
3
@TolkienWASP Halaman itu tampaknya tentang macOS daripada iOS. Tapi, ya, jika DLL tidak dimuat sampai setelah start up maka dll akan menang. Sayangnya dalam kasus iOS dalam situasi saya telah melihat semua DLL dimuat sebelum aplikasi selesai diluncurkan, sehingga membuat semuanya lebih lambat. Setidaknya ada satu pembicaraan WWDC tentang masalah mengoptimalkan waktu startup aplikasi iOS dan secara eksplisit menyebutkan sesuatu di sepanjang garis untuk memastikan Anda tidak memiliki lebih dari 3 atau 4 dll.
JosephH
1
Saya rasa ini adalah video yang direferensikan di atas: developer.apple.com/videos/play/wwdc2016/406 Saya akan mendorong Anda untuk menggunakan variabel lingkungan DYLD_PRINT_STATISTICS untuk mengukur kecepatan peluncuran aplikasi Anda dan melihat apa yang terbaik untuk Anda.
iMacHumphries
2

use_frameworksmenyatakan bahwa Anda ingin menggunakan framework dinamis , bukan pustaka statis .

Dengan Xcode 9.0 dan CocoaPods 1.5.0 dirilis, Anda dapat menggunakan pustaka statis dengan cepat jika Anda tidak menggunakannya use_frameworks.

Satu masalah use_frameworksadalah bahwa semua framework Anda di Pods / Products adalah framework.

Berikut adalah artikel terkait: Gambaran dasar kerangka kerja statis dan dinamis di ios

mistdon
sumber
4
> One performance with use_frameworks is that all your framework in Pods/Products is frameworks. Satu pertunjukan apa?
Alex Zavatone
2

Cocoapod's [About] use_frameworks! bertanggung jawab atas jenis biner:

  • jika use_frameworks!ini hadir -dynamic framework
  • jika use_frameworks!ini tidak hadir -static library

use_frameworks!memiliki refleksi di Mach-O Type[Tentang] di target Podsproyek yang sesuai .

Linimasa:

  1. CocoaPods 0.36 diperkenalkan use_frameworks!yang harus Anda gunakan untuk pod Swift
  2. CocoaPods 1.5.0 dan Xcode 9 memungkinkan Anda memiliki pilihan

[Kosa kata]

yoAlex5
sumber
-1

Menambahkan

use_frameworks!

di dalam Podfile berarti kita ingin kerangka kerja yang terdaftar diinstal secara dinamis, bukan sebagai kerangka kerja statis.

Chiara
sumber
Terima kasih, tetapi berikan detail lebih lanjut tentang instal dinamis vs instal statis.
BuffK