วิธีอัปเดตพ็อดเดียวโดยไม่ต้องสัมผัสการพึ่งพาอื่น ๆ


202

ฉันเข้าใจว่าคำสั่งต่อไปนี้จะอัปเดตพ็อดเดียว: pod update <podname>. อย่างไรก็ตามสิ่งนี้ยังอัพเดตการพึ่งพาของพ็อดอื่น ๆ (พ็อดที่ไม่รวมอยู่ในคำสั่ง update) ที่คุณติดตั้งไว้ก่อนหน้านี้ มีวิธีอัปเดตพ็อดเดียวและปล่อยให้การพึ่งพาอื่น ๆ


1
เพื่อทำความเข้าใจความแตกต่างคุณต้องเข้าใจสิ่งที่podfile.lockเป็น ดูลิงค์และวิดีโอที่อ้างอิง
น้ำผึ้ง

คำตอบ:


285

ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง CocoaPods เวอร์ชันล่าสุดแล้ว $ pod update PODเปิดตัวเมื่อเร็ว ๆ นี้

ดูหัวข้อปัญหานี้สำหรับข้อมูลเพิ่มเติม :

การอัพเดท $ pod

เมื่อคุณเรียกใช้pod update SomePodNameCocoaPods จะพยายามค้นหาฝักรุ่น SomePodName ที่ได้รับการอัปเดตโดยไม่คำนึงถึงรุ่นที่อยู่ในรายการPodfile.lockฝักโดยไม่ต้องคำนึงถึงรุ่นที่ระบุไว้ใน มันจะอัปเดตพ็อดเป็นเวอร์ชันล่าสุดที่เป็นไปได้ (ตราบใดที่มันตรงกับข้อ จำกัด เวอร์ชันใน Podfile ของคุณ)

หากคุณเรียกใช้การอัปเดตพ็อดโดยไม่มีชื่อพ็อด CocoaPods จะอัปเดตพ็อดทั้งหมดที่ระบุใน Podfile เป็นเวอร์ชันล่าสุดที่เป็นไปได้


19
ขอขอบคุณสำหรับการตอบสนอง @mattt ฉันมีรุ่นล่าสุดของ CocoaPods (0.34.2) $ pod update SomePodNameและฉันได้ลอง อย่างไรก็ตามมีบางกรณีที่ CocoaPods จะพยายามอัปเดตการอ้างอิงของพ็อดอื่น ๆ ด้วย เรื่องสั้นสั้น ๆ SomePodName ไม่ใช่พ็อดเดียวเท่านั้นที่จะได้รับการอัปเดตในบางกรณี
เคน

2
@ แมตต์คุณไม่ทราบวิธีการติดตั้งพ็อดเฉพาะโดยไม่ต้องอัปเดตที่ติดตั้งไว้แล้วหรือไม่
Shamsiddin

1
เมื่อฉันแก้ไขการอ้างอิงบางอย่างและเรียกใช้pod installมันจะเปลี่ยนกลับเป็นเวอร์ชันดั้งเดิม แต่ฉันไม่ต้องการที่จะสูญเสียการเปลี่ยนแปลงของฉัน
Shamsiddin

2
@ แมตต์การอ้างอิงที่ฉันอ้างถึงไม่ใช่การอ้างอิงของพ็อดที่ได้รับการอัปเดต ฉันคิดว่าฉันไม่มีโครงสร้างของคำถามที่ดีพอ แต่สมมติว่าเราอัปเดตพ็อด A พ็อดอื่น ๆ ที่ไม่ใช่การพึ่งพาของพ็อด A ก็อัปเดตเช่นกัน นี่เป็นคำถามที่เก่าโดยวิธีการจึงไม่แน่ใจว่านี้ได้รับการแก้ไขตั้งแต่นั้น ..
เคน

8
pod updateสัมผัสทุกอย่าง มันไม่ได้ทำตามที่พูดไว้ในกระป๋องและมันน่าหงุดหงิดมาก นำส่วนหัวออกจากพ็อดอื่น ๆ ที่คุณไม่ได้บอกให้แตะเป็นต้น
ลูกา

185

ในการติดตั้งพ็อดเดี่ยวโดยไม่ต้องอัปเดตที่มีอยู่ -> เพิ่มพ็อดนั้นลงใน Podfile ของคุณแล้วใช้:

pod install --no-repo-update

หากต้องการลบ / อัปเดตการใช้งานพ็อดเฉพาะ:

pod update POD_NAME

ผ่านการทดสอบ!


49

ปี 2558

ดังนั้นเนื่องจากpod update SomePodสัมผัสทุกอย่างใน cocoapods รุ่นล่าสุดฉันจึงพบวิธีแก้ปัญหา

ทำตามขั้นตอนต่อไป:

  1. ลบออกSomePodจากPodfile

  2. วิ่ง pod install

พ็อดจะลบออกSomePodจากโครงการของเราและจากPodfile.lockไฟล์

  1. ใส่กลับSomePodเข้าไปPodfile

  2. ทำงานpod installอีกครั้ง

Podfile.lockคราวนี้รุ่นล่าสุดของฝักของเราจะได้รับการติดตั้งและบันทึกไว้ใน


คุณสามารถใช้เคล็ดลับที่ฉันตอบได้ที่นี่stackoverflow.com/questions/29901337/…
Qiulang

17
คุณยังสามารถทำการpod update somepod anotherpod thirdpodอัปเดต
พ็อดได้

มันฉลาดมาก คุณกำลังทำสิ่งเหล่านี้ในสองขั้นตอนอิสระและอาศัย podfile.lock เพื่อให้การพึ่งพาอื่น ๆ ไม่เป็นอันตราย ฉันแค่สงสัยว่าSomePodได้รับการอัปเดตเป็นข้อมูลอ้างอิงล่าสุดหรือไม่จะไม่อัปเดตข้อมูลอ้างอิงที่ใช้ร่วมกันanotherPodเป็นข้อมูลล่าสุดหรือไม่ จะไม่เกิดขึ้นโดยไม่คำนึงถึงสิ่งที่อยู่ในพอดล็อค ไม่เช่นนั้นจะไม่สามารถตอบสนองความต้องการของSomePod
ฮันนี่

29

แค่พูด:

pod install - สำหรับการติดตั้งพ็อดใหม่

pod update - สำหรับการอัพเดทพ็อดที่มีอยู่

pod update podName - สำหรับการอัพเดทเฉพาะพ็อดโดยไม่ต้องแตะพ็อดอื่น ๆ

pod update podName versionNum - สำหรับการอัพเดท / ดาวน์เกรดฝักเฉพาะโดยไม่ต้องสัมผัสกับฝักอื่น


คุณหมายถึงpodแทนgit?
เคน

บางครั้งมันก็ไม่ฉันไม่รู้ว่าทำไม วิธีการออกกำลังกาย: 1. นำพ็อดที่ระบุออกจาก Podfile 2 .pod ติดตั้ง 3. เพิ่มพ็อดที่เฉพาะเจาะจงลงใน Podfile อีกครั้ง 4. ติดตั้งพ็อด
yonivav

21

เพียงสังเกตเล็ก ๆ

pod update POD_NAME

จะทำงานได้ก็ต่อเมื่อพ็อดนี้ติดตั้งไว้แล้ว มิฉะนั้นคุณจะต้องอัปเดตทั้งหมดด้วย

pod update

คำสั่ง


คุณยังคงสามารถใช้งานได้pod installเป็นอันดับแรกซึ่งจะติดตั้งเฉพาะส่วนที่ขาดหายไปโดยไม่ต้องแตะตัวอื่น ๆ แม้ว่าจะไม่มีกรณีใช้งานที่ต้องการอัปเดตพ็อดที่คุณยังไม่ได้ติดตั้ง
aramusss

18

tl; dr ใช้:

pod update podName

ทำไม? อ่านด้านล่าง.

  • pod update จะไม่เคารพ podfile.lockจะไม่เคารพมันจะแทนที่มัน
  • pod install จะเคารพ podfile.lock

แผนภาพนี้ช่วยให้เข้าใจความแตกต่างได้ดีขึ้น:

ป้อนคำอธิบายรูปภาพที่นี่


ปัญหาสำคัญมาจาก ~>ดำเนินการในแง่ดีผู้ประกอบการในแง่ดีหรือที่รู้จัก

ใช้รุ่นที่แน่นอนใน Podfileไม่เพียงพอ

บางคนอาจคิดว่าโดยการระบุรุ่นที่แน่นอนของพ็อดใน Podfileเช่นpod 'A', '1.0.0'เป็นพอที่จะรับประกันว่าผู้ใช้ทุกคนจะมีรุ่นเช่นเดียวกับคนอื่น ๆ ในทีม

จากนั้นพวกเขาก็อาจจะใช้pod updateแม้ในขณะที่เพียงการเพิ่มฝักใหม่คิดว่ามันจะไม่เคยมีความเสี่ยงที่จะปรับปรุงฝักอื่น ๆ Podfileเพราะพวกเขาจะจับจ้องไปที่รุ่นที่เฉพาะเจาะจงใน

แต่ที่จริงแล้วมันไม่เพียงพอที่จะรับประกันว่า user1 และ user2 ในสถานการณ์ข้างต้นของเราจะได้รับพ็อดทั้งหมดในรุ่นเดียวกันเสมอ

ตัวอย่างหนึ่งโดยทั่วไปคือถ้าฝักAมีการพึ่งพาฝักA2- ประกาศเป็นA.podspec dependency 'A2', '~> 3.0'ในกรณีเช่นนี้การใช้พ็อด'A', '1.0.0'ใน Podfile ของคุณจะบังคับให้ผู้ใช้ 1 และผู้ใช้ 2 ต้องใช้พ็อด A เวอร์ชัน 1.0.0 เสมอ แต่:

  • user1 อาจท้ายด้วย pod A2ในรุ่น3.4(เพราะนั่นคือA2เวอร์ชั่นล่าสุดในขณะนั้น)
  • ในขณะที่เมื่อผู้ใช้ 2 ทำงานpod installเมื่อเข้าร่วมโครงการในภายหลังพวกเขาอาจได้รับพ็อดA2ในเวอร์ชัน3.5(เนื่องจากผู้ดูแลA2อาจเปิดตัวเวอร์ชันใหม่ในเวลาเดียวกัน) นั่นเป็นเหตุผลที่วิธีเดียวที่จะให้แน่ใจว่าการทำงานทุกสมาชิกในทีมกับรุ่นเดียวกันของทุกฝักในแต่ละคอมพิวเตอร์คือการใช้Podfile.lockและใช้อย่างถูกต้องกับpod installpod update

ข้อความที่ตัดตอนมาทั้งหมดมาจาก ติดตั้งพ็อดและการอัพเดทพ็อด

ฉันขอแนะนำให้ดูสิ่งที่podfile.lockต้องทำ


9

ฉันใช้cocoapods version 1.0.1และใช้pod update name-of-podงานอย่างสมบูรณ์ ไม่มีการปรับปรุงพ็อดอื่น ๆ เฉพาะอันที่คุณป้อน


2

นี่เป็นค่าผิดปกติเล็กน้อยและไม่น่าจะเป็นสิ่งที่ OP กำลังดำเนินการ แต่pod update <podname>จะไม่ทำงานในทุกกรณีหากคุณใช้พ็อดภายในเครื่องบนคอมพิวเตอร์ของคุณ

ในสถานการณ์นี้สิ่งเดียวที่จะทริกเกอร์pod updateให้ทำงานคือถ้ามีการเปลี่ยนแปลงในไฟล์ podspec อย่างไรก็ตามการเปลี่ยนแปลงจะอนุญาตให้pod installทำงานได้เช่นกัน

ในสถานการณ์นี้คุณสามารถแก้ไขบางสิ่งเล็กน้อยเช่นคำอธิบายหรือสรุปด้วยตัวอักษรหนึ่งตัวจากนั้นคุณสามารถเรียกใช้คำสั่งติดตั้งหรืออัปเดตได้สำเร็จ

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