为什么我们在CocoaPods中使用use_frameworks?

har*_*sta 75 ios cocoapods

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

例:

platform :ios, '8.0'
use_frameworks!

target "CityWhether" do
    pod 'Alamofire'
    pod 'SwiftyJSON'
end
Run Code Online (Sandbox Code Playgroud)

Fel*_*SFD 100

use_frameworks告诉CocoaPods你想使用Frameworks而不是Static Libraries.由于Swift不支持静态库,因此您必须使用框架.


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

可可触摸框架

它们始终是开源的,并且将像您的应用程序一样构建.(因此Xcode有时会编译它,当你运行你的应用程序时,并且总是在你清理项目之后.)框架只支持iOS 8和更新版本,但你可以在框架中使用Swift和Objective-C.

Cocoa Touch静态库

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

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

  • 从Xcode 9 beta 4开始,静态库现在支持swift - CocoaPods正在更新以支持这一点,请参阅https://github.com/CocoaPods/CocoaPods/issues/6899 (5认同)
  • 发布说明的长篇故事https://blog.cocoapods.org/CocoaPods-0.36/ (3认同)

Jos*_*phH 56

你不必"use_frameworks!" 了.

从Xcode 9 beta 4和CocoaPods 1.5.0开始,现在支持swift静态库.主要优点是更快的应用程序启动时间,特别是如果你有很多pod - 当你有很多dylib时,iOS 10和11并不是最快的.

CocoaPods 1.5.0于2018年4月初发布,因此您可能需要升级才能获得它: sudo gem install cocoapods.

我发现有几个无法正常使用静态库的pod,所以你的里程数各不相同.

  • 我必须在Podfile中添加`use_modular_headers!`,以使其与可能需要它但尚未自行启用的pod一起使用。 (3认同)
  • @JosephH“主要优点是应用程序启动时间更快”。这似乎与[Apple的动态库文档](https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/OverviewOfDynamicLibraries.html)矛盾。 dll声明:“启动后最大程度地减少内存使用量,使应用启动速度更快”。如果在启动时不需要使用正在使用的库,或者它是一个流行的库并因此已加载到内存中,则是在暗示dll将导致启动时间更快吗? (3认同)
  • @TolkienWASP该页面似乎是关于macOS而不是iOS.但是,是的,如果DLL在启动之前没有加载,那么dll将是一个胜利.遗憾的是在iOS的情况下我看到所有的DLL都是在应用程序完成启动之前加载的,所以这会让事情变得更慢.关于优化iOS应用程序启动时间的主题,至少有一个WWDC讨论,它明确提到了确保你没有超过3或4个dll的内容. (3认同)
  • 我这样做了,然后我遇到了同样的“没有这样的模块”错误。那些可可豆有问题吗? (2认同)

mis*_*don 5

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

随着 Xcode 9.0 和 CocoaPods 1.5.0 的发布,如果您不使用use_frameworks!.

一个问题use_frameworks!是 Pods/Products 中的所有框架都是框架。

这里有一篇相关文章:iOS上静态和动态框架的基本概述

  • > `use_frameworks 的一项性能是 Pods/Products 中的所有框架都是框架。`一项性能是什么? (6认同)
  • 您链接的文章很棒。推荐大家去看看 (4认同)