ทำไมเราถึงใช้ use_frameworks! ใน CocoaPods?


113

ฉันใช้use_frameworks!ใน CocoaPods Podfileหลายครั้ง ฉันแค่สงสัยว่าทำไมเราถึงใช้มัน? ฉันไม่สามารถรับคำตอบที่ตรงไปตรงมาได้

ตัวอย่าง:

platform :ios, '8.0'
use_frameworks!

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

1
คุณหมายถึง use_frameworks! มีเครื่องหมายอัศเจรีย์? ฉันสับสนมาตลอดตั้งแต่นั้นมา! หมายความว่าไม่
Gabriel Jensen

คำตอบ:


128

use_frameworks!บอก CocoaPods ว่าคุณต้องการใช้ Frameworks แทน Static Libraries เนื่องจาก Swift ไม่รองรับ Static Libraries คุณจึงต้องใช้ frameworks


ในคำตอบอื่นฉันอธิบายความแตกต่างระหว่าง Static Libraries และ Frameworks:

กรอบสัมผัสโกโก้

เป็นโอเพ่นซอร์สเสมอและจะสร้างขึ้นเช่นเดียวกับแอปของคุณ (ดังนั้นบางครั้ง Xcode จะคอมไพล์เมื่อคุณเรียกใช้แอปและหลังจากทำความสะอาดโปรเจ็กต์เสมอ) เฟรมเวิร์กรองรับเฉพาะ iOS 8 และใหม่กว่า แต่คุณสามารถใช้ Swift และ Objective-C ในเฟรมเวิร์กได้

Cocoa Touch ห้องสมุดคงที่

ตามชื่อบอกว่ามันคงที่ ดังนั้นจึงรวบรวมไว้แล้วเมื่อคุณนำเข้าสู่โครงการของคุณ คุณสามารถแบ่งปันกับผู้อื่นโดยไม่ต้องแสดงรหัสของคุณ โปรดทราบว่าปัจจุบัน Static Libraries ไม่รองรับ Swift คุณจะต้องใช้ Objective-C ภายในไลบรารี ตัวแอปยังสามารถเขียนด้วย Swift ได้

แหล่งที่มา: คำตอบอื่น ๆ ของฉัน | บล็อก AddThis.com


3
เรื่องยาวในบันทึกประจำรุ่นblog.cocoapods.org/CocoaPods-0.36
Jaime Agudo

8
ขณะนี้ไลบรารีแบบคงที่รองรับการใช้งานอย่างรวดเร็วตั้งแต่ Xcode 9 beta 4 - CocoaPods กำลังได้รับการอัปเดตเพื่อรองรับสิ่งนี้โปรดดูที่github.com/CocoaPods/CocoaPods/issues/6899
JosephH

เรียงลำดับและคำอธิบายที่ไพเราะมันมีประโยชน์จริงๆ
Piyush

79

use_frameworks!บอกให้ฝักโกโก้ใช้ไลบรารีแบบไดนามิกและเป็นที่แพร่หลายมาก ณ จุดหนึ่งเนื่องจากโดยเฉพาะอย่างยิ่งการไม่รองรับไลบรารีแบบคงที่ซึ่งหมายความว่าไม่มีทางเลือก แต่คุณมักไม่ต้องการuse_frameworks!อีกต่อไป

ตั้งแต่ Xcode 9 beta 4 และ CocoaPods 1.5.0 รองรับไลบรารีแบบคงที่ที่รวดเร็วแล้ว ข้อได้เปรียบหลักคือเวลาเริ่มต้นแอปที่เร็วขึ้นโดยเฉพาะอย่างยิ่งหากคุณมีพ็อดจำนวนมาก iOS 10 และ 11 ไม่ใช่อุปกรณ์ที่เร็วที่สุดเมื่อคุณมีหลาย dylib

CocoaPods 1.5.0 ได้รับการปล่อยตัวในช่วงต้นเดือนเมษายน 2018sudo gem install cocoapodsดังนั้นคุณอาจต้องอัปเกรดได้ที่:

ฉันพบพ็อดหลายตัวที่ยังทำงานไม่ถูกต้องกับไลบรารีแบบคงที่ระยะทางของคุณอาจแตกต่าง


2
ฉันทำอย่างนั้นแล้วฉันก็พบNo such moduleข้อผิดพลาดเดียวกัน นั่นเป็นปัญหาใน cocoapods หรือไม่?
Alper

3
ฉันต้องเพิ่มลงuse_modular_headers!ใน Podfile เพื่อให้มันใช้งานได้กับพ็อดที่น่าจะต้องใช้ แต่ยังไม่ได้เปิดใช้งานด้วยตัวเอง
Adrian

4
@JosephH "ข้อดีหลัก ๆ คือเวลาเริ่มต้นแอปเร็วขึ้น" สิ่งนี้ดูเหมือนจะขัดแย้งกับเอกสารคู่มือDynamic Library ของ Appleซึ่งทำให้การอ้างสิทธิ์ dlls เหมือนกัน: "การลดการใช้หน่วยความจำเมื่อเปิดตัวทำให้แอปเปิดตัวเร็วขึ้น" ความหมายตรงนี้หรือไม่ที่ dll จะส่งผลให้เวลาเปิดใช้งานเร็วขึ้นหากไม่จำเป็นต้องใช้ไลบรารีในเวลาเปิดตัวหรือเป็นไลบรารียอดนิยมดังนั้นจึงโหลดลงในหน่วยความจำแล้ว?
TolkienWASP

3
@TolkienWASP หน้านั้นน่าจะเกี่ยวกับ macOS มากกว่า iOS แต่ใช่ถ้าไม่โหลด DLL จนกว่าจะเริ่มต้นใช้งาน dll ก็จะชนะ น่าเศร้าในกรณีของ iOS ในสถานการณ์ที่ฉันเห็นว่ามีการโหลด DLL ทั้งหมดก่อนที่แอปจะเปิดตัวเสร็จดังนั้นจึงทำให้สิ่งต่างๆช้าลง มีการพูดคุย WWDC อย่างน้อยหนึ่งครั้งเกี่ยวกับการเพิ่มประสิทธิภาพเวลาเริ่มต้นแอป iOS และได้กล่าวถึงบางสิ่งอย่างชัดเจนเพื่อให้แน่ใจว่าคุณไม่มี dll มากกว่า 3 หรือ 4 dll
JosephH

1
ฉันคิดว่านี่คือวิดีโอที่อ้างถึงด้านบน: developer.apple.com/videos/play/wwdc2016/406ฉันขอแนะนำให้คุณใช้ตัวแปรสภาพแวดล้อม DYLD_PRINT_STATISTICS เพื่อวัดความเร็วในการเปิดแอปของคุณและดูว่าสิ่งใดดีที่สุดสำหรับคุณ
iMacHumphries

2

[เกี่ยวกับ] ของ Cocoapod 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 ช่วยให้คุณมีทางเลือก

[คำศัพท์]


2

use_frameworks!บอกว่าคุณต้องการใช้กรอบแบบไดนามิกแทนห้องสมุดแบบคงที่

ด้วย Xcode 9.0 และ CocoaPods 1.5.0 use_frameworks!ปล่อยตัวคุณสามารถใช้ห้องสมุดคงที่พร้อมรวดเร็วถ้าคุณไม่ได้ใช้งาน

ปัญหาอย่างหนึ่งuse_frameworks!คือกรอบงานทั้งหมดของคุณใน Pods / Products เป็นกรอบงาน

นี่คือบทความที่เกี่ยวข้อง: ภาพรวมพื้นฐานของเฟรมเวิร์กแบบคงที่และไดนามิกบน iOS


4
> One performance with use_frameworks is that all your framework in Pods/Products is frameworks. หนึ่งประสิทธิภาพคืออะไร?
Alex Zavatone

-1

การเพิ่ม

use_frameworks!

ใน Podfile หมายความว่าเราต้องการให้เฟรมเวิร์กที่แสดงรายการถูกติดตั้งแบบไดนามิกแทนที่จะเป็นเฟรมเวิร์กแบบคงที่


ขอบคุณ แต่โปรดให้รายละเอียดเพิ่มเติมเกี่ยวกับการติดตั้งแบบไดนามิกเทียบกับการติดตั้งแบบคงที่
BuffK
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.