CocoaPods เป็นตัวจัดการการพึ่งพาโอเพนซอร์สสำหรับโปรเจกต์ iOS, macOS, watchOS และ tvOS CocoaPods สร้างขึ้นด้วยภาษา Ruby และใช้ทะเบียนข้อมูลจำเพาะ (Specs) ที่มีไลบรารีกว่า 100,000 รายการ การผสานรวมเกิดขึ้นผ่านไฟล์ Podfile ซึ่งอธิบายการพึ่งพาทั้งหมดของโปรเจกต์ ผลลัพธ์ของการติดตั้งคือ .xcworkspace ที่รวมโปรเจกต์หลักและโมดูลที่เชื่อมต่อทั้งหมด CocoaPods ยังคงเป็นตัวจัดการการพึ่งพาที่ได้รับความนิยมมากที่สุดในการพัฒนา iOS: ตามผลสำรวจของ Stack Overflow Survey (2025) นักพัฒนา iOS 34% ใช้งานมัน
ประเด็นสำคัญ
pod install สร้าง .xcworkspace — ควรเปิดเฉพาะไฟล์นี้ใน XcodeCocoaPods เป็นตัวจัดการการพึ่งพาสำหรับระบบนิเวศของ Apple เขียนด้วย Ruby และเผยแพร่ในปี 2011 โดย Eladio Lopez CocoaPods แก้ปัญหาการผสานรวมไลบรารีของบุคคลที่สามเข้ากับโปรเจกต์ Xcode: แทนที่จะคัดลอกไฟล์ด้วยตนเองและกำหนดค่าแฟลกลิงเกอร์ นักพัฒนาอธิบายการพึ่งพาใน Podfile และเรียกใช้ pod install CocoaPods จะดาวน์โหลดไฟล์ซอร์สโดยอัตโนมัติ กำหนดค่าแฟลกคอมไพเลอร์ และสร้างพื้นที่ทำงาน .xcworkspace
สถาปัตยกรรม CocoaPods ประกอบด้วยสามองค์ประกอบ: CocoaPods.app (เครื่องมือ CLI), Specs (ทะเบียนข้อมูลจำเพาะกลางบน GitHub), และ Podfile (การกำหนดค่าโปรเจกต์) ทะเบียน Specs มีไลบรารีกว่า 100,000 รายการพร้อมประวัติเวอร์ชัน เมื่อเรียกใช้ pod install CocoaPods จะดาวน์โหลดเวอร์ชันล่าสุดของทะเบียน (pod repo update) ค้นหาการพึ่งพา แก้ไขต้นไม้เวอร์ชัน และสร้าง .xcworkspace พร้อมการผสานรวม pod ทั้งหมด ไลบรารีแต่ละแห่งจะถูกคอมไพล์เป็นเป้าหมายแยกต่างหาก ทำให้สามารถแยกการพึ่งพาและหลีกเลี่ยงการขัดแย้งของชื่อ
CocoaPods ผสานรวมกับ Xcode อย่างใกล้ชิด: มันสร้างไฟล์ Pods.xcconfig พร้อมพาธส่วนหัวและแฟลกลิงเกอร์ และกำหนดค่า User Script Sandboxing การใช้ CocoaPods บน macOS ต้องใช้ Ruby 2.6+ (ติดตั้งไว้ล่วงหน้าบน Mac ทุกเครื่อง) และ Xcode พร้อม Command Line Tools สถิติ: ในปี 2025 CocoaPods ประมวลผลการดาวน์โหลด pod กว่า 10 พันล้านครั้ง และโปรเจกต์ iOS โดยเฉลี่ยมีการพึ่งพา 15 ถึง 40 รายการผ่าน CocoaPods
CocoaPods ดาวน์โหลดไลบรารีแต่ละแห่งเป็นที่เก็บ Git แยกต่างหาก ตรวจสอบข้อมูลจำเพาะ .podspec และคอมไพล์เป็นเฟรมเวิร์กแบบคงที่หรือไลบรารีแบบไดนามิก Pod สามารถพึ่งพา pod อื่นได้ — CocoaPods สร้างกราฟการพึ่งพาและแก้ไขข้อขัดแย้งของเวอร์ชัน หากไลบรารีสองแห่งต้องการเวอร์ชันที่แตกต่างกันของการพึ่งพาเดียวกัน CocoaPods จะพยายามหาเวอร์ชันที่เข้ากันได้หรือรายงานข้อผิดพลาด การพึ่งพาทั้งหมดและเวอร์ชันของพวกมันจะถูกบันทึกในไฟล์ Podfile.lock ซึ่งควรเพิ่มลงในการควบคุมเวอร์ชัน
ข้อดีของ CocoaPods เหนือการผสานรวมด้วยตนเอง: การจัดการการพึ่งพาอัตโนมัติ ทะเบียนไลบรารีแบบรวมศูนย์ รองรับข้อมูลจำเพาะย่อย (subspecs) ความสามารถในการสร้างที่เก็บส่วนตัว และการกำหนดเวอร์ชันแบบความหมาย สำหรับทีมพัฒนา CocoaPods รับประกันว่าสมาชิกทุกคนใช้เวอร์ชันไลบรารีเดียวกัน — Podfile.lock รับประกันความสามารถในการสร้างซ้ำได้บนเครื่องใดก็ได้
Podfile เป็นไฟล์กำหนดค่า Ruby ที่กำหนดการพึ่งพาของโปรเจกต์ Xcode Podfile วางไว้ที่รูทของโปรเจกต์ถัดจาก .xcodeproj ไวยากรณ์ของ CocoaPods ใช้พื้นฐานจาก Ruby DSL (Domain Specific Language) ซึ่งอนุญาตให้ใช้ตัวแปร เงื่อนไข และลูป Podfile ขั้นต่ำประกอบด้วยแพลตฟอร์มและการพึ่งพาอย่างน้อยหนึ่งรายการ
platform :ios, '15.0'
target 'MyApp' do
pod 'Alamofire', '~> 5.9'
pod 'SnapKit', '~> 5.7'
pod 'Kingfisher', '~> 8.0'
endบรรทัดสำคัญ platform :ios, '15.0' กำหนดเวอร์ชัน iOS ขั้นต่ำ คำสั่ง target 'MyApp' จัดกลุ่มการพึ่งพาสำหรับเป้าหมายเฉพาะ แต่ละบรรทัด pod 'Name', '~> version' ระบุชื่อไลบรารีและเวอร์ชัน ตัวดำเนินการ '~> 5.9' หมายถึง «เวอร์ชันใดก็ได้ตั้งแต่ 5.9 ถึง 6.0 ยกเว้น 6.0» — นี่คือการกำหนดเวอร์ชันแบบความหมายที่ป้องกันการเปลี่ยนแปลงที่ทำให้เสียความเข้ากันได้
CocoaPods รองรับตัวดำเนินการเวอร์ชันที่ยืดหยุ่น: '= 1.0' (เวอร์ชันที่แน่นอน), '>= 1.0' (ขั้นต่ำ), '< 2.0' (สูงสุด), '~> 1.2.3' (แพตช์เท่านั้น) การรวมไลบรารีจากโฟลเดอร์ท้องถิ่นสามารถทำได้ผ่าน pod 'MyLib', :path => '../MyLib' การรวมจาก Git — pod 'MyLib', :git => 'https://github.com/user/MyLib.git', :tag => '1.0.0'
platform :ios, '15.0'
use_frameworks! :linkage => :static
inhibit_all_warnings!
target 'MyApp' do
pod 'Alamofire', '~> 5.9'
pod 'Firebase/Crashlytics', '~> 11.0'
target 'MyAppTests' do
inherit! :search_paths
pod 'Nimble', '~> 13.0'
end
end
target 'MyWatchExtension' do
platform :watchos, '9.0'
pod 'Alamofire', '~> 5.9'
end
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0'
end
end
enduse_frameworks! เปิดใช้งานการสร้าง pod เป็นเฟรมเวิร์กแทนไลบรารีแบบคงที่ (พฤติกรรมเริ่มต้นตั้งแต่ Xcode 15+) แอตทริบิวต์ :linkage => :static บังคับให้เฟรมเวิร์กเป็นแบบคงที่ ลดขนาดแอป inhibit_all_warnings! ปิดคำเตือนจาก pod — มีประโยชน์สำหรับล็อกการสร้างที่สะอาด เป้าหมายแบบซ้อน (เช่น สำหรับการทดสอบ) ด้วย inherit! :search_paths จะได้รับเฉพาะพาธค้นหาโดยไม่ต้องคอมไพล์การพึ่งพาทั้งหมดซ้ำ บล็อก post_install กำหนดค่าการตั้งค่าการสร้างสำหรับเป้าหมาย pod ทั้งหมด — นี่คือรูปแบบมาตรฐานสำหรับการตั้งค่าเวอร์ชัน iOS ขั้นต่ำแบบรวม
Podfile.lock ถูกสร้างขึ้นโดยอัตโนมัติระหว่าง pod install มันล็อกเวอร์ชันที่แน่นอนของการพึ่งพาที่ติดตั้งทั้งหมด รวมถึงการพึ่งพาแบบทอด ไฟล์ล็อกควรเก็บไว้ในที่เก็บ — หากไม่มี pod install บนเครื่องอื่นอาจติดตั้งเวอร์ชันที่แตกต่างกัน คำสั่ง pod update PodName อัปเดต pod ที่เฉพาะเจาะจง ปรับเปลี่ยน Podfile.lock pod outdated แสดงรายการ pod ที่มีเวอร์ชันใหม่กว่า
Podspec เป็นไฟล์ Ruby ที่มีนามสกุล .podspec ซึ่งอธิบายไลบรารีสำหรับ CocoaPods Podspec ประกอบด้วยข้อมูลเมตา (ชื่อ เวอร์ชัน ผู้แต่ง) ซอร์สโค้ด การพึ่งพา เฟรมเวิร์กระบบ และข้อกำหนดของแพลตฟอร์ม CocoaPods ตรวจสอบความถูกต้องของ podspec ด้วย pod spec lint ก่อนเผยแพร่ในทะเบียน
Pod::Spec.new do |s|
s.name = 'NetworkingKit'
s.version = '1.2.0'
s.summary = 'Lightweight HTTP client for iOS'
s.description = 'NetworkingKit is a Swift HTTP client with async/await support, built-in caching, and automatic retry logic.'
s.homepage = 'https://github.com/user/NetworkingKit'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'Developer' => 'dev@example.com' }
s.source = { :git => 'https://github.com/user/NetworkingKit.git', :tag => s.version.to_s }
s.ios.deployment_target = '15.0'
s.swift_version = '5.9'
s.source_files = 'Sources/**/*.swift'
s.dependency 'Alamofire', '~> 5.9'
ends.name — ชื่อไลบรารีที่ไม่ซ้ำกันในทะเบียน s.version สอดคล้องกับแท็ก Git (สำคัญสำหรับการเผยแพร่) s.source_files — รูปแบบ glob สำหรับรวมไฟล์ซอร์ส s.dependency ระบุการพึ่งพา pod อื่นพร้อมเวอร์ชัน s.ios.deployment_target กำหนดเวอร์ชัน iOS ขั้นต่ำที่รองรับ — CocoaPods จะเตือนโดยอัตโนมัติหากโปรเจกต์ใช้เวอร์ชันที่เก่ากว่า สำหรับ pod ส่วนตัว สามารถใช้ :path ใน Podfile แทนการเผยแพร่ในทะเบียน
การเผยแพร่ไลบรารีในทะเบียน Specs ส่วนกลางทำได้ผ่าน pod trunk push NetworkingKit.podspec จำเป็นต้องลงทะเบียนล่วงหน้าผ่าน pod trunk register dev@example.com 'Developer' CocoaPods ตรวจสอบความถูกต้องของ podspec และส่งคำขอดึงไปยังที่เก็บ Specs ทางเลือกอื่นคือทะเบียนส่วนตัวผ่าน pod repo push สำหรับไลบรารีภายในบริษัท
ข้อมูลจำเพาะย่อย (Subspecs) อนุญาตให้แบ่งไลบรารีเป็นโมดูลที่ผู้ใช้สามารถรวมได้อย่างเลือกสรร ตัวอย่างเช่น Firebase ใช้ข้อมูลจำเพาะย่อย: pod 'Firebase/Crashlytics' รวมเฉพาะ Crashlytics โดยไม่มีโมดูล Firebase อื่น ๆ ข้อมูลจำเพาะย่อยสืบทอดการกำหนดค่าฐานและสามารถเพิ่ม source_files และการพึ่งพาของตัวเองได้
| คำสั่ง | การกระทำ |
|---|---|
pod spec lint | ตรวจสอบความถูกต้องของ podspec |
pod trunk register | ลงทะเบียนใน CocoaPods Trunk |
pod trunk push | เผยแพร่ podspec ในทะเบียน |
pod repo push | เผยแพร่ในทะเบียนส่วนตัว |
pod lib lint | ตรวจสอบความถูกต้องของไลบรารีในเครื่อง |
CocoaPods ติดตั้งผ่าน RubyGems — ตัวจัดการแพ็กเกจมาตรฐานของ Ruby Ruby ติดตั้งไว้ล่วงหน้าบน macOS ดังนั้นคำสั่งเทอร์มินัลเดียวก็เพียงพอ ทางเลือกอื่นคือ Homebrew ซึ่งติดตั้ง CocoaPods เป็นสูตรแยกต่างหาก หลังการติดตั้ง การเริ่มต้นโปรเจกต์ทำได้ด้วย pod init ซึ่งสร้าง Podfile พร้อมการกำหนดค่าพื้นฐาน หลังจากกรอก Podfile ด้วยการพึ่งพา นักพัฒนาจะเรียกใช้ pod install — CocoaPods จะดาวน์โหลดไลบรารีและสร้างพื้นที่ทำงาน
# การติดตั้ง CocoaPods ผ่าน RubyGems
sudo gem install cocoapods
# การติดตั้งทางเลือกผ่าน Homebrew
brew install cocoapods
# การเริ่มต้น Podfile ในโปรเจกต์
cd /path/to/Project
pod init
# การติดตั้งการพึ่งพา
pod installกฎสำคัญ: หลังจาก pod install ให้เปิด .xcworkspace เสมอ ไม่ใช่ .xcodeproj หากคุณเปิด .xcodeproj Xcode จะไม่เห็น pod และการสร้างจะล้มเหลวด้วยข้อผิดพลาดลิงเกอร์ คำสั่ง pod install ดาวน์โหลดการพึ่งพาเฉพาะเมื่อ Podfile เปลี่ยนแปลงหรือในการเรียกใช้ครั้งแรก หากต้องการบังคับติดตั้ง pod ทั้งหมดใหม่ ให้ใช้ pod install --repo-update หรือ pod deintegrate && pod install
การอัปเดต CocoaPods ทำได้ผ่าน sudo gem update cocoapods หรือ brew upgrade cocoapods เวอร์ชัน CocoaPods ตรวจสอบได้ด้วย pod --version ตั้งแต่เวอร์ชัน 1.12 (2024) CocoaPods รองรับ Xcode 15 พร้อมการตั้งค่าการตรวจสอบโมดูลที่เข้มงวดและการแก้ไขการพึ่งพาแบบทอดที่ดีขึ้น เวอร์ชันเสถียรล่าสุด ณ กลางปี 2025 คือ 1.16 พร้อมรองรับ Swift 6 และประสิทธิภาพการแก้ไขกราฟการพึ่งพาที่ดีขึ้นสำหรับโปรเจกต์ที่มี pod มากกว่า 50 รายการ
# การอัปเดต pod ทั้งหมดเป็นเวอร์ชันล่าสุด
pod update
# การอัปเดต pod ที่เฉพาะเจาะจง
pod update Alamofire
# การตรวจสอบการพึ่งพาที่ล้าสมัย
pod outdated
# การลบ CocoaPods ออกจากโปรเจกต์
pod deintegratepod update โดยไม่มีอาร์กิวเมนต์อัปเดต pod ทั้งหมดเป็นเวอร์ชันที่เข้ากันได้ล่าสุดตาม Podfile (เคารพตัวดำเนินการ ~>) pod outdated แสดงความแตกต่างระหว่างเวอร์ชันปัจจุบันใน Podfile.lock และเวอร์ชันล่าสุดที่มี pod deintegrate ลบ CocoaPods ออกจากโปรเจกต์อย่างสมบูรณ์ — ลบ .xcworkspace ไฟล์กำหนดค่า และการตั้งค่าการสร้าง ซึ่งมีประโยชน์เมื่อย้ายไปยัง Swift Package Manager
การจัดการการพึ่งพา ใน CocoaPods ประกอบด้วยสี่ด้าน: การล็อกเวอร์ชัน การแก้ไขข้อขัดแย้ง การเพิ่มประสิทธิภาพการสร้าง และการจัดการการพึ่งพาแบบทอด CocoaPods สร้างกราฟการพึ่งพาตาม Podfile.lock — หากโปรเจกต์ใช้ไลบรารี A และ B ซึ่งทั้งคู่พึ่งพา C CocoaPods จะหาเวอร์ชันของ C ที่ตรงตามข้อกำหนดทั้งสอง
ข้อขัดแย้งเกิดขึ้นเมื่อการพึ่งพาสองรายการต้องการเวอร์ชันที่เข้ากันไม่ได้ของไลบรารีเดียวกัน CocoaPods รายงานข้อผิดพลาดระบุข้อกำหนดที่ขัดแย้งกัน วิธีแก้ไข: อัปเดตการพึ่งพารายการใดรายการหนึ่งเป็นเวอร์ชันที่เข้ากันได้ ใช้ pod 'Lib', :git => ... พร้อมคอมมิตที่เฉพาะเจาะจง หรือฟอร์กไลบรารีใดไลบรารีหนึ่งด้วยการพึ่งพาที่แก้ไขแล้ว สำหรับโปรเจกต์ขนาดใหญ่ แนะนำให้ตั้งค่าการตรวจสอบ CI ด้วย pod lib lint ในทุกคำขอดึง
CocoaPods มีความสามารถขั้นสูงหลายประการ: :path สำหรับการพัฒนาไลบรารีในเครื่อง, :git สำหรับเชื่อมต่อฟอร์ก, :branch สำหรับทดสอบสาขาการพัฒนา คำสั่ง use_frameworks! ด้วย :linkage => :static ช่วยลดขนาดไบนารีสุดท้าย สำหรับการทดสอบ A/B และแฟลกคุณลักษณะ สามารถรวม pod เวอร์ชันต่าง ๆ ผ่านโครงสร้างเงื่อนไข Ruby ใน Podfile
platform :ios, '15.0'
use_frameworks!
# การกำหนดสภาพแวดล้อม
is_debug = defined?(DEBUG) && DEBUG
target 'MyApp' do
# การพึ่งพาหลัก
pod 'Alamofire', '~> 5.9'
pod 'SnapKit', '~> 5.7'
# ไลบรารีในเครื่องสำหรับการพัฒนา
pod 'MyInternalLib', :path => '../MyInternalLib'
# การพึ่งพาแบบมีเงื่อนไขสำหรับการดีบัก
if is_debug
pod 'SwiftyBeaver', '~> 2.0'
else
pod 'CocoaLumberjack', '~> 3.8'
end
# ฟอร์กพร้อมการแก้ไขบัก
pod 'Kingfisher', :git => 'https://github.com/user/Kingfisher.git', :branch => 'fix-memory-leak'
end
abstract_target 'Pods' do
pod 'Alamofire'
endabstract_target สร้างเป้าหมายเสมือนสำหรับการพึ่งพาที่ใช้ร่วมกันโดยไม่ผูกกับเป้าหมาย Xcode ที่เฉพาะเจาะจง โครงสร้างเงื่อนไข Ruby อนุญาตให้รวมไลบรารีต่าง ๆ สำหรับการกำหนดค่า Debug และ Release :path กับไลบรารีในเครื่องช่วยเร่งการพัฒนา — การเปลี่ยนแปลงมีผลโดยไม่ต้องเริ่ม pod install ใหม่ โหมด :branch มีประโยชน์สำหรับการทดสอบการเปลี่ยนแปลงก่อนเผยแพร่อย่างเป็นทางการ
CocoaPods, Swift Package Manager (SPM) และ Carthage เป็นตัวจัดการการพึ่งพาหลักสามตัวในการพัฒนา iOS แต่ละตัวมีสถาปัตยกรรม วิธีการผสานรวม และระดับการควบคุมของตัวเอง CocoaPods นำในจำนวนไลบรารี SPM ชนะด้วยการรองรับในตัวของ Xcode Carthage ด้อยความนิยมแต่ให้การควบคุมสูงสุด
| เกณฑ์ | CocoaPods | SPM | Carthage |
|---|---|---|---|
| ภาษาการกำหนดค่า | Ruby DSL | Package.swift (Swift) | Cartfile |
| การผสานรวม Xcode | ผ่าน workspace | ในตัว | ด้วยตนเอง (xcframeworks) |
| จำนวนไลบรารี | กว่า 100,000 | ~65,000 | ~20,000 |
| การพึ่งพาแบบทอด | อัตโนมัติ | อัตโนมัติ | ด้วยตนเอง |
| รองรับทรัพยากร | ใช่ (resource bundles) | ใช่ (Resources) | ไม่ |
| ความเร็วในการติดตั้ง | ปานกลาง | เร็ว | เร็ว |
| การกำหนดเวอร์ชัน | Gemfile.lock | Package.resolved | Cartfile.resolved |
CocoaPods ยังคงเป็นตัวเลือกสำหรับโปรเจกต์ที่ต้องการความเข้ากันได้สูงสุดกับไลบรารี (ไลบรารีเก่าหลายรายการใช้งานได้ผ่าน CocoaPods เท่านั้น) SPM แนะนำสำหรับโปรเจกต์ใหม่ — มันถูกสร้างใน Xcode ไม่ต้องใช้เครื่องมือเพิ่มเติม และรองรับโดย Apple Carthage ใช้น้อย ส่วนใหญ่สำหรับโปรเจกต์ที่ต้องการการแทรกแซงการกำหนดค่า Xcode น้อยที่สุด ตั้งแต่ปี 2024 Apple พัฒนา SPM อย่างจริงจัง และไลบรารียอดนิยมหลายแห่ง (Alamofire, Firebase, SnapKit) ก็รองรับมันพร้อมกับ CocoaPods แล้ว
การย้ายจาก CocoaPods ไปยัง SPM ทำได้ผ่าน pod deintegrate (การลบ CocoaPods) และเพิ่มแพ็กเกจผ่าน File → Add Package Dependencies ใน Xcode ความท้าทายหลัก: ไลบรารีที่มีทรัพยากร (ฟอนต์ รูปภาพ สตอรีบอร์ด) อาจทำงานแตกต่าง และปลั๊กอิน CocoaPods (เช่น สำหรับการสร้างโค้ด) ไม่มีสิ่งที่เทียบเท่าใน SPM แนะนำให้คง CocoaPods ไว้สำหรับโปรเจกต์ที่ต้องการคุณสมบัติเฉพาะของ CocoaPods: การสร้างโค้ด resource bundles และขั้นตอนการสร้างที่กำหนดเองผ่าน hooks post_install
CocoaPods เป็นเครื่องมือที่เสถียร แต่นักพัฒนาพบปัญหาทั่วไปเป็นครั้งคราว ส่วนใหญ่เกี่ยวข้องกับเวอร์ชัน Ruby การแคช หรือข้อขัดแย้งของการพึ่งพา ด้านล่างนี้คือสถานการณ์ที่พบบ่อยที่สุดและวิธีแก้ไข
ข้อผิดพลาด «The sandbox is not in sync with the Podfile.lock» — เกิดขึ้นเมื่อ Podfile.lock ถูกเปลี่ยนแปลงในที่เก็บก่อนเรียกใช้ pod install วิธีแก้ไข: เรียกใช้ pod install หรือ pod deintegrate && pod install สำหรับสภาพแวดล้อม CI แนะนำให้เพิ่ม pod install ในสคริปต์สร้าง สาเหตุทั่วไปอีกประการคือความแตกต่างของเวอร์ชัน CocoaPods ระหว่างนักพัฒนา: ตรวจสอบ pod --version บนเครื่องทั้งหมด
ข้อผิดพลาดในการอัปเดตทะเบียน Specs — มักเกิดจากปัญหาเครือข่ายหรือที่เก็บ Git ที่ล้าสมัย วิธีแก้ไข: pod repo update --verbose แสดงรายละเอียด หาก Specs เสียหาย: rm -rf ~/.cocoapods/repos/master && pod repo add master https://github.com/CocoaPods/Specs.git สำหรับอินเทอร์เน็ตช้า คุณสามารถใช้ CDN — เปิดใช้งานโดยค่าเริ่มต้นตั้งแต่ CocoaPods 1.8+
ข้อผิดพลาดสัญลักษณ์ซ้ำ — เกิดขึ้นเมื่อไลบรารีถูกรวมสองครั้งหรือเมื่อมีข้อขัดแย้งของสัญลักษณ์ระหว่าง pod วิธีแก้ไข: ตรวจสอบ Podfile เพื่อหาสิ่งที่ซ้ำ ใช้ use_frameworks! :linkage => :static เพื่อแยกสัญลักษณ์ หากปัญหาอยู่ที่ไลบรารี ให้รายงานผู้เขียน บางครั้งการล้าง Derived Data และรีสตาร์ท Xcode ก็ช่วยได้
CocoaPods ไม่ติดตั้งบน Apple Silicon Mac — Ruby ที่ติดตั้งไว้ล่วงหน้าบน macOS ทำงานผ่าน Rosetta 2 ทำให้เกิดข้อผิดพลาดการคอมไพล์ วิธีแก้ไข: ติดตั้ง Ruby ผ่าน rbenv หรือ asdf สำหรับสถาปัตยกรรม ARM64 ดั้งเดิม ทางเลือกอื่น: ใช้ Homebrew — brew install cocoapods สร้างสำหรับ ARM64 โดยอัตโนมัติ หาก gems ติดตั้งสำหรับ x86_64 คำสั่ง arch -arm64 sudo gem install cocoapods จะแก้ปัญหา
การติดตั้ง pod ช้า — ในโปรเจกต์ขนาดใหญ่ pod install อาจใช้เวลาหลายนาที วิธีแก้ไข: เปิดใช้งาน --verbose เพื่อวินิจฉัย ใช้ --no-repo-update หาก Specs อัปเดตแล้ว สำหรับเซิร์ฟเวอร์ CI ให้แคชโฟลเดอร์ Pods/ และ ~/.cocoapods ใน CocoaPods 1.12+ การดาวน์โหลดแบบขนานสามารถใช้ได้ผ่าน install! 'cocoapods', :parallel_download => true
| ปัญหา | สาเหตุ | วิธีแก้ไข |
|---|---|---|
| Sandbox not in sync | Podfile.lock เปลี่ยนแปลง | pod install |
| ที่เก็บ Specs เสียหาย | ข้อผิดพลาด Git | ติดตั้ง Specs ใหม่ |
| สัญลักษณ์ซ้ำ | ข้อขัดแย้งไลบรารี | use_frameworks! :static |
| ข้อผิดพลาดบน Apple Silicon | Ruby ภายใต้ Rosetta | Homebrew / rbenv ARM |
| การติดตั้งช้า | กราฟการพึ่งพาขนาดใหญ่ | ดาวน์โหลดแบบขนาน, แคช |
คำถามที่พบบ่อย
CocoaPods เป็นตัวจัดการการพึ่งพาสำหรับโปรเจกต์ Apple (iOS, macOS, watchOS, tvOS) มันทำให้การดาวน์โหลด กำหนดค่า และผสานรวมไลบรารีของบุคคลที่สามเป็นอัตโนมัติ แทนที่จะคัดลอกไฟล์ด้วยตนเองและกำหนดค่าแฟลกคอมไพเลอร์ เพียงเพิ่มบรรทัด pod 'LibraryName' ใน Podfile และเรียกใช้ pod install
Podfile เป็นไฟล์กำหนดค่าที่นักพัฒนาเขียน: ประกอบด้วยชื่อไลบรารีและตัวดำเนินการเวอร์ชัน (~> 5.9, >= 2.0, เวอร์ชันที่แน่นอน) Podfile.lock ถูกสร้างขึ้นโดยอัตโนมัติและล็อกเวอร์ชันที่แน่นอนของการพึ่งพาที่ติดตั้งทั้งหมด Podfile.lock ควรเก็บไว้ใน Git — มันรับประกันว่าสมาชิกทีมทุกคนใช้เวอร์ชันเดียวกัน
เรียกใช้ pod deintegrate ในเทอร์มินัลจากโฟลเดอร์โปรเจกต์ — CocoaPods จะลบ .xcworkspace ไฟล์กำหนดค่า และการตั้งค่าการสร้าง จากนั้นเปิด .xcodeproj ใน Xcode ไปที่ File → Add Package Dependencies และเพิ่มแพ็กเกจที่ต้องการ SPM เป็นโซลูชันในตัวของ Apple ที่ไม่ต้องติดตั้งเพิ่มเติม
ได้ CocoaPods และ SPM สามารถอยู่ร่วมกันในโปรเจกต์เดียวกัน CocoaPods จัดการส่วนหนึ่งของการพึ่งพาผ่าน .xcworkspace ในขณะที่ SPM จัดการ Package Dependencies ใน Xcode อย่างไรก็ตาม อาจเกิดข้อขัดแย้งของการพึ่งพาแบบทอด: หากทั้งสองระบบพยายามรวมไลบรารีเดียวกันคนละเวอร์ชัน การสร้างจะล้มเหลว แนะนำให้ใช้ตัวจัดการเดียวสำหรับการพึ่งพาทั้งหมด
สร้างไฟล์ .podspec ที่อธิบายไลบรารี เรียกใช้ pod spec lint เพื่อตรวจสอบความถูกต้องในเครื่อง ลงทะเบียนผ่าน pod trunk register email name เผยแพร่ spec ผ่าน pod trunk push YourLib.podspec CocoaPods จะเพิ่มไลบรารีของคุณในทะเบียน Specs ส่วนกลางโดยอัตโนมัติ — หลังเผยแพร่ นักพัฒนาทุกคนสามารถใช้งานได้ผ่าน pod 'YourLib'
สรุป
pod trunk pushgem install cocoapods การตั้งค่าผ่าน pod init และ pod installpod install การล้างแคช และการกำหนดค่าเฟรมเวิร์กเราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ