CocoaPodsでuse_frameworksを使用する理由


104

use_frameworksCocoaPodsでPodfile何度も使用しています。なぜそれを使用するのでしょうか。正直に答えられませんでした。

例:

platform :ios, '8.0'
use_frameworks!

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

1
use_frameworksを意味しますか?感嘆符付き?それ以来、私は常に混乱しています。は意味しません。
ガブリエルジェンセン

回答:


119

use_frameworks静的ライブラリの代わりにフレームワークを使用することをCocoaPodsに伝えます。Swiftは静的ライブラリをサポートしていないため、フレームワークを使用する必要があります。


別の答えとして、スタティックライブラリとフレームワークの違いを説明しました。

Cocoa Touchフレームワーク

これらは常にオープンソースであり、アプリと同じように構築されます。(したがって、アプリを実行するとき、およびプロジェクトをクリーンアップした後は常に、Xcodeがコンパイルすることがあります。)フレームワークはiOS 8以降のみをサポートしますが、フレームワークでSwiftとObjective-Cを使用できます。

Cocoa Touch静的ライブラリ

名前が示すように、それらは静的です。そのため、プロジェクトにインポートするときに、それらはすでにコンパイルされています。コードを見せずに他のユーザーと共有できます。現在、スタティックライブラリはSwiftをサポートしていません。ライブラリ内でObjective-Cを使用する必要があります。アプリ自体は引き続きSwiftで作成できます。

出典:私の他の回答 | AddThis.comブログ


3
リリースノートの長い話blog.cocoapods.org/CocoaPods-0.36
Jaime Agudo

7
静的ライブラリがXcode 9ベータ4以降で迅速にサポートするようになりました-CocoaPodsはこれをサポートするように更新されています。github.com
CocoaPods / CocoaPods /

並べ替えと
わかりやすい

76

use_frameworks!ココアポッドに動的ライブラリを使用するように指示します。特に、静的ライブラリを迅速にサポートしないため、一時は非常に流行していました。つまり、選択肢がなかったためuse_frameworks!です。

Xcode 9ベータ4およびCocoaPods 1.5.0以降、Swift静的ライブラリがサポートされるようになりました。主な利点は、特に多くのポッドがある場合、アプリの起動時間が速くなることです。多くのdylibがある場合、iOS 10および11は最速ではありません。

CocoaPods 1.5.0は2018年4月上旬にリリースされたため、アップグレードする必要がある場合がありますsudo gem install cocoapods

ただし、スタティックライブラリではまだ正しく動作しないポッドがいくつかあるので、走行距離が異なる場合があります。


2
私はそれをしました、そして、私は同じNo such moduleエラーに出くわしました。それはそれらのココアポッドの問題ですか?
アルパー、

3
use_modular_headers!Podfile を追加する必要があったのは、Podfileを必要とするポッドでも機能するようにするためですが、まだ有効にしていないためです。
エイドリアン

4
@JosephH「主な利点は、アプリの起動時間が短いことです。」これはAppleのダイナミックライブラリのドキュメントと矛盾しているようです-dllの同じ主張:「起動時にメモリの使用を最小限にすると、アプリの起動が速くなります」。使用されているライブラリが起動時に必要ない場合、または人気のあるライブラリであり、すでにメモリにロードされている場合、dllが起動時間を短縮するという意味合いはありますか?
TolkienWASP 2018

3
@TolkienWASPそのページはiOSではなくmacOSに関するもののようです。しかし、はい、DLLが起動後まで読み込まれない場合、DLLは成功します。悲しいことに、iOSのケースでは、アプリの起動が完了する前にすべてのDLLが読み込まれるので、状況が遅くなります。iOSアプリの起動時間を最適化するというテーマで少なくとも1つのWWDCの話があり、3つまたは4つを超えるDLLがないことを確認するという線に沿って何かが明示的に言及されました。
JosephH 2018

1
:私は、これは上記参照映像だと思う developer.apple.com/videos/play/wwdc2016/406私はあなたのアプリケーションの起動速度を測定し、あなたのために最善のものを見るためにDYLD_PRINT_STATISTICS環境変数を使用することをお勧めします。
iMacHumphries

2

use_frameworks静的ライブラリの代わりに動的フレームワークを使用することを宣言します。

Xcode 9.0とCocoaPods 1.5.0がリリースされたため、を使用しない場合は、静的ライブラリを迅速に使用できますuse_frameworks

問題の1つuse_frameworksは、ポッド/プロダクトのすべてのフレームワークがフレームワークであることです。

関連記事はこちら: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[About]に反映されていPodsます。

タイムライン:

  1. CocoaPods 0.36が導入されuse_frameworks!、Swiftポッドに使用する必要がありました。
  2. CocoaPods 1.5.0とXcode 9では、選択肢がありました

[単語]


-1

追加

use_frameworks!

Podfileでは、リストされたフレームワークを静的なフレームワークとしてではなく動的にインストールする必要があります。


ありがとうございます。動的インストールと静的インストールの詳細を教えてください。
BuffK
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.