Why do we use use_frameworks! in CocoaPods?

IosFrameworksCocoapodsStatic Libraries

Ios Problem Overview


I have used use_frameworks! in CocoaPods Podfile many times. I just wonder why do we use it? I couldn't get the straight forward answer of it.

Example:

platform :ios, '8.0'
use_frameworks!

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

Ios Solutions


Solution 1 - Ios

use_frameworks! tells CocoaPods that you want to use Frameworks instead of Static Libraries. Since Swift does not support Static Libraries you have to use frameworks.


In another answer, I explained the differences between Static Libraries and Frameworks:

> ## Cocoa Touch Frameworks > > They are always open-source and will be built just like your app. (So > Xcode will sometimes compile it, when you run your app and always > after you cleaned the project.) Frameworks only support iOS 8 and > newer, but you can use Swift and Objective-C in the framework. > > ## Cocoa Touch Static Libraries > > As the name says, they are static. So they are already compiled, when > you import them to your project. You can share them with others > without showing them your code. Note that Static Libraries currently > don't support Swift. You will have to use Objective-C within the > library. The app itself can still be written in Swift.

Sources: My other answer | AddThis.com Blog

Solution 2 - Ios

use_frameworks! tells cocoa pods to use dynamic libraries, and was very prevalent at one point due in particular to swift not supporting static libraries, meaning there was no choice - however you often don't need use_frameworks! anymore.

As of Xcode 9 beta 4, and CocoaPods 1.5.0, swift static libraries are now supported. The main advantage is faster app startup times, particularly if you have a lot of pods - iOS 10 and 11 are not the fastest when you have many dylibs.

CocoaPods 1.5.0 was released in early April 2018, so you may need to upgrade to get it: sudo gem install cocoapods.

I've found several pods that don't work correctly with static libraries yet though, so your mileage may vary.

Solution 3 - Ios

use_frameworks! declares that you want to use dynamic frameworks, instead of static libraries.

With Xcode 9.0 and CocoaPods 1.5.0 released, you could use static libraries with swift if you do not use use_frameworks!.

One problem with use_frameworks! is that all your framework in Pods/Products are frameworks.

Here is a related article: Basic overview of static and dynamic frameworks on ios

Solution 4 - Ios

Cocoapod's[About] use_frameworks! is responsible for the type of binary:

  • if use_frameworks! is present - dynamic framework
  • if use_frameworks! is not present - static library

use_frameworks! has a reflection in Mach-O Type[About] in a corresponding target of Pods project.

Timeline:

  1. CocoaPods 0.36 introduced use_frameworks! which you had to use for Swift pod
  2. CocoaPods 1.5.0 and Xcode 9 allowed you to have a choice

[Vocabulary]

Solution 5 - Ios

Adding

> use_frameworks!

in the Podfile means that we want the listed frameworks to be dynamically installed instead as static frameworks.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionharikristaView Question on Stackoverflow
Solution 1 - IosFelixSFDView Answer on Stackoverflow
Solution 2 - IosJosephHView Answer on Stackoverflow
Solution 3 - IosmistdonView Answer on Stackoverflow
Solution 4 - IosyoAlex5View Answer on Stackoverflow
Solution 5 - IosChiaraView Answer on Stackoverflow