为什么在CocoaPods中使用use_frameworks?


104

我已经use_frameworks在CocoaPods中使用了Podfile很多次。我只是想知道为什么要使用它?我无法直接得到答案。

例:

platform :ios, '8.0'
use_frameworks!

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

1
您的意思是use_frameworks!带有感叹号?从那以后我一直对此感到困惑!表示不。
加布里埃尔·詹森

Answers:


119

use_frameworks告诉CocoaPods您要使用框架而不是静态库。由于Swift不支持静态库,因此您必须使用框架。


在另一个答案中,我解释了静态库和框架之间的区别:

可可触摸框架

它们始终是开源的,并且会像您的应用程序一样构建。(因此,在您运行应用程序时以及始终在清理项目后,Xcode有时会对其进行编译。)框架仅支持iOS 8和更高版本,但是您可以在框架中使用Swift和Objective-C。

可可触摸静态库

顾名思义,它们是静态的。因此,当您将它们导入到项目中时,它们已经被编译。您可以与其他人共享而不显示他们的代码。请注意,静态库当前不支持Swift。您将必须在库中使用Objective-C。该应用程序本身仍可以用Swift编写。

资料来源:我的其他答案 | AddThis.com博客



7
从Xcode 9 beta 4开始,静态库现在支持swift-CocoaPods正在更新以支持此功能,请参见github.com/CocoaPods/CocoaPods/issues/6899
JosephH

排序和甜蜜的description.it真的很有帮助
Piyush

76

use_frameworks!告诉可可豆荚使用动态库,并且在某一时刻非常普遍,特别是因为迅速不支持静态库,这意味着别无选择-但是您通常不再需要use_frameworks!

从Xcode 9 beta 4和CocoaPods 1.5.0开始,现在支持swift静态库。主要优点是可以加快应用程序的启动时间,尤其是在您有很多Pod的情况下-iOS 10和11在拥有许多dylib时并不是最快的。

CocoaPods 1.5.0于2018年4月上旬发布,因此您可能需要升级才能获取它sudo gem install cocoapods

不过,我发现有几个Pod无法与静态库一起正常使用,因此您的行程可能会有所不同。


2
我这样做了,然后又遇到了同样的No such module错误。这些椰壳动物有问题吗?
Alper

3
我必须添加use_modular_headers!到Podfile才能使其与可能需要它但尚未自行启用的Pod一起使用。
阿德里安

4
@JosephH“主要优点是应用程序启动时间更快”。这似乎与Apple的Dynamic Library文档相抵触-该文档对dll的主张与此相同:“在启动后尽量减少其内存使用量,可以使应用程序启动更快”。如果在启动时不需要使用正在使用的库,或者这是一个流行的库并因此已加载到内存中,则是在暗示dll将导致启动时间更快吗?
TolkienWASP

3
@TolkienWASP该页面似乎与macOS有关,而不是iOS。但是,是的,如果在启动后才加载DLL,则该DLL将是一个胜利。可悲的是,在iOS的情况下,我已经看到所有DLL在应用程序完成启动之前就已加载,因此这会使事情变慢。WWDC上至少有一个关于优化iOS应用启动时间的主题,并且明确提到了确保您没有超过3个或4个dll的方式。
JosephH 18/09/11

1
我认为这是上面引用的视频: developer.apple.com/videos/play/wwdc2016/406我鼓励您使用DYLD_PRINT_STATISTICS环境变量来衡量您的应用启动速度,并查看最适合您的应用。
iMacHumphries

2

use_frameworks声明要使用动态框架而不是静态库

随着Xcode 9.0和CocoaPods 1.5.0的发布,如果不使用,您可以快速使用静态库use_frameworks

一个问题use_frameworks是,您在Pod / Products中的所有框架都是框架。

这是相关的文章:ios上静态和动态框架的基本概述


4
> One performance with use_frameworks is that all your framework in Pods/Products is frameworks. 一场演出是什么?
Alex Zavatone

2

Cocoapod的[About] use_frameworks!负责二进制的类型:

  • 如果use_frameworks!现在 -dynamic framework
  • 如果use_frameworks!不存在的 -static library

use_frameworks!在相应项目目标的Mach-O Type[关于]中有反映Pods

时间线:

  1. 介绍了CocoaPods 0.36use_frameworks!,您必须在Swift Pod中使用它
  2. CocoaPods 1.5.0和Xcode 9让您可以选择

[词汇]


-1

新增中

use_frameworks!

在Podfile中表示我们希望将列出的框架动态安装,而不是静态框架。


谢谢,但请提供有关动态安装与静态安装的更多详细信息。
BuffK
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.