Tại sao chúng tôi sử dụng use_frameworks trong CocoaPods?


104

Tôi đã sử dụng use_frameworkstrong CocoaPods Podfilenhiều lần. Tôi chỉ tự hỏi tại sao chúng tôi sử dụng nó? Tôi không thể nhận được câu trả lời thẳng thắn về nó.

Thí dụ:

platform :ios, '8.0'
use_frameworks!

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

1
Ý bạn là use_frameworks! VỚI dấu chấm than? Tôi luôn bối rối về điều đó kể từ đó! có nghĩa là KHÔNG.
Gabriel Jensen

Câu trả lời:


120

use_frameworkscho CocoaPods biết rằng bạn muốn sử dụng Khung thay vì Thư viện tĩnh. Vì Swift không hỗ trợ Thư viện tĩnh nên bạn phải sử dụng các khuôn khổ.


Trong một câu trả lời khác, tôi đã giải thích sự khác biệt giữa Thư viện tĩnh và Khung công tác:

Cacao Touch Frameworks

Chúng luôn là mã nguồn mở và sẽ được xây dựng giống như ứng dụng của bạn. (Vì vậy, Xcode đôi khi sẽ biên dịch nó, khi bạn chạy ứng dụng của mình và luôn sau khi bạn làm sạch dự án.) Các khung công tác chỉ hỗ trợ iOS 8 trở lên, nhưng bạn có thể sử dụng Swift và Objective-C trong khung công tác.

Thư viện tĩnh cảm ứng ca cao

Như tên đã nói, chúng tĩnh. Vì vậy, chúng đã được biên dịch, khi bạn nhập chúng vào dự án của mình. Bạn có thể chia sẻ chúng với người khác mà không cần hiển thị mã của bạn. Lưu ý rằng Thư viện tĩnh hiện không hỗ trợ Swift. Bạn sẽ phải sử dụng Objective-C trong thư viện. Bản thân ứng dụng vẫn có thể được viết bằng Swift.

Nguồn: Câu trả lời khác của tôi | Blog AddThis.com


3
Câu chuyện dài trên các ghi chú phát hành blog.cocoapods.org/CocoaPods-0.36
Jaime Agudo

7
thư viện tĩnh hiện hỗ trợ nhanh chóng kể từ Xcode 9 beta 4 - CocoaPods đang được cập nhật để hỗ trợ điều này, xem github.com/CocoaPods/CocoaPods/issues/6899
JosephH

Sắp xếp và description.it ngọt là thực sự hữu ích
Piyush

76

use_frameworks!yêu cầu các quả ca cao sử dụng các thư viện động và rất thịnh hành tại một thời điểm đặc biệt là do nhanh chóng không hỗ trợ các thư viện tĩnh, nghĩa là không có lựa chọn nào khác - tuy nhiên bạn thường không cần use_frameworks!nữa.

Kể từ Xcode 9 beta 4 và CocoaPods 1.5.0, các thư viện tĩnh nhanh hiện đã được hỗ trợ. Ưu điểm chính là thời gian khởi động ứng dụng nhanh hơn, đặc biệt nếu bạn có nhiều pod - iOS 10 và 11 không phải là nhanh nhất khi bạn có nhiều dylibs.

CocoaPods 1.5.0 đã được phát hành vào đầu tháng 4 năm 2018 , vì vậy bạn có thể cần phải nâng cấp để có được nó: sudo gem install cocoapods.

Tuy nhiên, tôi đã tìm thấy một số nhóm không hoạt động chính xác với các thư viện tĩnh, vì vậy số dặm của bạn có thể thay đổi.


2
Tôi đã làm điều đó và sau đó tôi gặp phải những No such modulelỗi tương tự . Đó có phải là một vấn đề trong những cái kén?
Alper

3
Tôi đã phải thêm use_modular_headers!vào Podfile của mình để làm cho nó hoạt động với các nhóm có lẽ yêu cầu nó nhưng chưa tự kích hoạt nó.
Adrian

4
@JosephH "Ưu điểm chính là thời gian khởi động ứng dụng nhanh hơn". Điều này dường như trái ngược với tài liệu Thư viện động của Apple - tài liệu đưa ra tuyên bố tương tự về dlls: "giảm thiểu việc sử dụng bộ nhớ khi nó được khởi chạy giúp ứng dụng khởi chạy nhanh hơn". Có phải ngụ ý ở đây rằng dll sẽ dẫn đến thời gian khởi chạy nhanh hơn nếu thư viện đang được sử dụng không được yêu cầu tại thời điểm khởi chạy, hoặc nó là một thư viện phổ biến và do đó đã được tải vào bộ nhớ?
TolkienWASP

3
@TolkienWASP Trang đó dường như nói về macOS hơn là iOS. Nhưng, có, nếu DLL không được tải cho đến sau khi khởi động thì dll sẽ thắng. Đáng buồn là trong trường hợp iOS trong các tình huống tôi đã thấy tất cả các tệp DLL được tải trước khi ứng dụng hoàn tất khởi chạy, vì vậy điều đó làm cho mọi thứ chậm hơn. Có ít nhất một cuộc nói chuyện của WWDC về chủ đề tối ưu hóa thời gian khởi động ứng dụng iOS và nó đã đề cập rõ ràng điều gì đó dọc theo dòng đảm bảo rằng bạn không có nhiều hơn 3 hoặc 4 dlls.
JosephH

1
Tôi nghĩ đây là video được tham chiếu ở trên: developer.apple.com/videos/play/wwdc2016/406 Tôi khuyến khích bạn sử dụng biến môi trường DYLD_PRINT_STATISTICS để đo tốc độ khởi chạy ứng dụng của bạn và xem điều gì tốt nhất cho bạn.
iMacHumphries

2

use_frameworkstuyên bố rằng bạn muốn sử dụng các khuôn khổ động , thay vì các thư viện tĩnh .

Với Xcode 9.0 và CocoaPods 1.5.0 được phát hành, bạn có thể sử dụng thư viện tĩnh nhanh chóng nếu không sử dụng use_frameworks.

Một vấn đề use_frameworkslà tất cả khuôn khổ của bạn trong Pods / Products đều là khuôn khổ.

Đây là bài viết liên quan: Tổng quan cơ bản về khung tĩnh và khung động trên iOS


4
> One performance with use_frameworks is that all your framework in Pods/Products is frameworks. Một hiệu suất những gì?
Alex Zavatone

2

[Giới thiệu] của Cocoapod use_frameworks!chịu trách nhiệm về loại nhị phân:

  • nếu use_frameworks!hiện tại -dynamic framework
  • nếu use_frameworks!không có mặt -static library

use_frameworks!có phản ánh trong Mach-O Type[Giới thiệu] trong mục tiêu tương ứng của Podsdự án.

Mốc thời gian:

  1. CocoaPods 0.36 được giới thiệu use_frameworks!mà bạn phải sử dụng cho Swift pod
  2. CocoaPods 1.5.0 và Xcode 9 cho phép bạn lựa chọn

[Từ vựng]


-1

Thêm

use_frameworks!

trong Podfile có nghĩa là chúng ta muốn các khung được liệt kê được cài đặt động thay vì các khung tĩnh.


Cảm ơn bạn nhưng vui lòng cung cấp thêm chi tiết về cài đặt động và cài đặt tĩnh.
BuffK
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.