Carthage ได้รับการออกแบบมาเพื่อเป็นวิธีที่ง่ายที่สุดในการเพิ่มเฟรมเวิร์กให้กับแอปพลิเคชัน Cocoa ของคุณ
Carthage สร้างการขึ้นต่อกันของคุณและจัดเตรียมเฟรมเวิร์กไบนารีให้คุณ แต่คุณยังคงควบคุมโครงสร้างและการตั้งค่าโปรเจ็กต์ของคุณได้อย่างเต็มที่ Carthage จะไม่แก้ไขไฟล์โปรเจ็กต์หรือการตั้งค่าบิลด์ของคุณโดยอัตโนมัติ
รับ Carthage โดยเรียกใช้ brew install carthage
หรือเลือกวิธีการติดตั้งอื่น
สร้าง Cartfile ในไดเร็กทอรีเดียวกับที่ .xcodeproj
หรือ .xcworkspace
ของคุณอยู่
แสดงรายการการขึ้นต่อกันที่ต้องการใน Cartfile เช่น:
github "Alamofire/Alamofire" ~> 5.5
เรียกใช้ carthage update --use-xcframeworks
ไฟล์ Cartfile.resolved
และไดเร็กทอรี Carthage
จะปรากฏในไดเร็กทอรีเดียวกันกับที่ .xcodeproj
หรือ .xcworkspace
ของคุณอยู่
ลากชุด .xcframework
ที่สร้างขึ้นจาก Carthage/Build
ไปไว้ในส่วน "Frameworks and Libraries" ของโปรเจ็กต์ Xcode ของแอปพลิเคชันของคุณ
หากคุณกำลังใช้ Carthage สำหรับแอปพลิเคชัน ให้เลือก "ฝังและลงนาม" มิฉะนั้น "อย่าฝัง"
สำหรับคำแนะนำเชิงลึก โปรดอ่านต่อจากการเพิ่มเฟรมเวิร์กให้กับแอปพลิเคชัน
มีหลายตัวเลือกในการติดตั้ง Carthage:
โปรแกรมติดตั้ง: ดาวน์โหลดและเรียกใช้ไฟล์ Carthage.pkg
สำหรับรุ่นล่าสุด จากนั้นทำตามคำแนะนำบนหน้าจอ หากคุณกำลังติดตั้ง pkg ผ่าน CLI คุณอาจต้องรัน sudo chown -R $(whoami) /usr/local
ก่อน
Homebrew: คุณสามารถใช้ Homebrew และติดตั้งเครื่องมือ carthage
บนระบบของคุณได้ง่ายๆ เพียงเรียกใช้ brew update
และ brew install carthage
(หมายเหตุ: หากคุณติดตั้ง Carthage เวอร์ชันไบนารี่ไว้ก่อนหน้านี้ คุณควรลบ /Library/Frameworks/CarthageKit.framework
)
MacPorts: คุณสามารถใช้ MacPorts และติดตั้งเครื่องมือ carthage
บนระบบของคุณได้ง่ายๆ เพียงเรียกใช้ sudo port selfupdate
และ sudo port install carthage
(หมายเหตุ: หากคุณติดตั้ง Carthage เวอร์ชันไบนารี่ไว้ก่อนหน้านี้ คุณควรลบ /Library/Frameworks/CarthageKit.framework
)
จากแหล่งที่มา: หากคุณต้องการเรียกใช้เวอร์ชันการพัฒนาล่าสุด (ซึ่งอาจไม่เสถียรอย่างมากหรือเข้ากันไม่ได้) เพียงโคลนสาขา master
ของพื้นที่เก็บข้อมูล จากนั้นเรียกใช้ make install
ต้องใช้ Xcode 10.0 (Swift 4.2)
เมื่อคุณติดตั้ง Carthage แล้ว คุณสามารถเริ่มเพิ่มเฟรมเวิร์กให้กับโปรเจ็กต์ของคุณได้ โปรดทราบว่า Carthage รองรับเฉพาะเฟรมเวิร์กไดนามิกซึ่ง มีเฉพาะบน iOS 8 หรือใหม่กว่า (หรือ OS X เวอร์ชันใดก็ได้)
carthage update --use-xcframeworks
วิธีนี้จะดึงข้อมูลการขึ้นต่อกันในโฟลเดอร์ Carthage/Checkouts และสร้างแต่ละรายการหรือดาวน์โหลด XCFramework ที่คอมไพล์ไว้ล่วงหน้าเราขอแนะนำให้ใช้ XCFrameworks ตั้งแต่เวอร์ชัน 0.37.0 (มกราคม 2021) และกำหนดให้ต้องใช้ XCFrameworks เมื่อสร้างบน Apple Silicon Mac การเปลี่ยนจากบันเดิลเฟรมเวิร์กแบบแยกเป็น XCFrameworks ต้องมีการเปลี่ยนแปลงเล็กน้อยในโปรเจ็กต์ของคุณ:
Carthage/Build
ของคุณเพื่อลบบันเดิลเฟรมเวิร์กที่มีอยู่carthage build --use-xcframeworks
อาร์กิวเมนต์อื่นๆ ที่คุณสร้างขึ้นสามารถระบุได้ตามปกติcarthage copy-frameworks
ของเป้าหมาย หากมีความเข้ากันไม่ได้ของ Xcode 12+ : ไม่รองรับแพลตฟอร์มที่มีสถาปัตยกรรมหลายรูปแบบเมื่อสร้างชุดเฟรมเวิร์กใน Xcode 12 ขึ้นไป ต้องการสร้างด้วย XCFrameworks หากคุณต้องการสร้างบันเดิลเฟรมเวิร์กแบบแยก ให้ใช้ไฟล์ xcconfig วิธีแก้ปัญหา
carthage update --platform macOS
สิ่งนี้จะดึงข้อมูลการขึ้นต่อกันในโฟลเดอร์ Carthage/Checkouts และสร้างแต่ละรายการหรือดาวน์โหลดเฟรมเวิร์กที่คอมไพล์ไว้ล่วงหน้านอกจากนี้ คุณจะต้องคัดลอกสัญลักษณ์การแก้ไขข้อบกพร่องสำหรับการรายงานการแก้ไขจุดบกพร่องและข้อขัดข้องบน OS X
สร้าง Cartfile ที่แสดงรายการเฟรมเวิร์กที่คุณต้องการใช้ในโครงการของคุณ
เรียกใช้ carthage update
วิธีนี้จะดึงข้อมูลการขึ้นต่อกันในโฟลเดอร์ Carthage/Checkouts จากนั้นสร้างแต่ละรายการหรือดาวน์โหลดเฟรมเวิร์กที่คอมไพล์ไว้ล่วงหน้า
เปิดแท็บการตั้งค่า ทั่วไป ของเป้าหมายแอปพลิเคชันของคุณ สำหรับ Xcode 11.0 และสูงกว่า ในส่วน "Frameworks, Libraries และ Embedded Content" ให้ลากและวางแต่ละเฟรมเวิร์กที่คุณต้องการใช้จากโฟลเดอร์ Carthage/Build บนดิสก์ จากนั้น ในส่วน "ฝัง" ให้เลือก "ห้ามฝัง" จากเมนูแบบเลื่อนลงสำหรับแต่ละรายการที่เพิ่ม สำหรับ Xcode 10.x และต่ำกว่า ในส่วน "Linked Frameworks and Libraries" ให้ลากและวางแต่ละเฟรมเวิร์กที่คุณต้องการใช้จากโฟลเดอร์ Carthage/Build บนดิสก์
บนแท็บการตั้งค่า เฟสการสร้าง ของเป้าหมายแอปพลิเคชันของคุณ คลิกไอคอน + และเลือก เฟสสคริปต์เรียกใช้ใหม่ สร้าง Run Script ที่คุณระบุเชลล์ของคุณ (เช่น /bin/sh
) เพิ่มเนื้อหาต่อไปนี้ลงในพื้นที่สคริปต์ด้านล่างเชลล์:
/usr/local/bin/carthage copy-frameworks
สร้างไฟล์ชื่อ input.xcfilelist
และไฟล์ชื่อ output.xcfilelist
เพิ่มพาธไปยังเฟรมเวิร์กที่คุณต้องการใช้ใน input.xcfilelist
ของคุณ ตัวอย่างเช่น:
$(SRCROOT)/Carthage/Build/iOS/Result.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveSwift.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework
เพิ่มพาธไปยังเฟรมเวิร์กที่คัดลอกไปยัง output.xcfilelist
ตัวอย่างเช่น:
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveSwift.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveCocoa.framework
ด้วยไฟล์เอาต์พุตที่ระบุข้างไฟล์อินพุต Xcode จะต้องเรียกใช้สคริปต์เมื่อไฟล์อินพุตมีการเปลี่ยนแปลงหรือไฟล์เอาต์พุตหายไปเท่านั้น ซึ่งหมายความว่าการสร้างที่สกปรกจะเร็วขึ้นเมื่อคุณไม่ได้สร้างเฟรมเวิร์กใหม่ด้วย Carthage
เพิ่ม input.xcfilelist
ไปยังส่วน "รายการไฟล์อินพุต" ของเฟสสคริปต์รัน Carthage
เพิ่ม output.xcfilelist
ไปยังส่วน "รายการไฟล์เอาต์พุต" ของเฟสสคริปต์รัน Carthage
สคริปต์นี้แก้ไขข้อผิดพลาดในการส่ง App Store ที่เกิดจากไบนารีสากล และช่วยให้แน่ใจว่าไฟล์ที่เกี่ยวข้องกับบิตโค้ดและ dSYM ที่จำเป็นจะถูกคัดลอกเมื่อทำการเก็บถาวร
เมื่อคัดลอกข้อมูลการดีบักลงในไดเร็กทอรีผลิตภัณฑ์ที่สร้างขึ้นแล้ว Xcode จะสามารถแสดงสัญลักษณ์การติดตามสแต็กเมื่อใดก็ตามที่คุณหยุดที่จุดพัก นอกจากนี้ยังช่วยให้คุณสามารถก้าวผ่านโค้ดของบุคคลที่สามในดีบักเกอร์ได้
เมื่อเก็บถาวรแอปพลิเคชันของคุณเพื่อส่งไปยัง App Store หรือ TestFlight Xcode จะคัดลอกไฟล์เหล่านี้ไปยังไดเรกทอรีย่อย dSYM ของชุด .xcarchive
ของแอปพลิเคชันของคุณ
ระหว่างทาง คาร์เธจจะสร้างสิ่งประดิษฐ์บางอย่างขึ้นมา สิ่งที่สำคัญที่สุดคือไฟล์ Cartfile.resolved ซึ่งแสดงรายการเวอร์ชันที่สร้างขึ้นจริงสำหรับแต่ละเฟรมเวิร์ก ตรวจสอบให้แน่ใจว่าได้คอมมิต Cartfile.resolved ของคุณแล้ว เนื่องจากใครก็ตามที่ใช้โปรเจ็กต์นี้จะต้องการไฟล์นั้นเพื่อสร้างเวอร์ชันเฟรมเวิร์กเดียวกัน
คุณสามารถเพิ่มระยะเรียกใช้สคริปต์เพื่อเตือนคุณโดยอัตโนมัติเมื่อการขึ้นต่อกันอย่างใดอย่างหนึ่งของคุณล้าสมัย
Build Phases
ของเป้าหมายแอปพลิเคชันของคุณ คลิกไอคอน +
และเลือก New Run Script Phase
สร้าง Run Script ที่คุณระบุเชลล์ของคุณ (เช่น /bin/sh
) เพิ่มเนื้อหาต่อไปนี้ลงในพื้นที่สคริปต์ด้านล่างเชลล์: /usr/local/bin/carthage outdated --xcode-warnings 2> /dev/null
Carthage จะตรวจสอบเพื่อให้แน่ใจว่าเฟรมเวิร์ก Swift ที่ดาวน์โหลด (และแบบผสม Objective-C/Swift) ถูกสร้างขึ้นด้วย Swift เวอร์ชันเดียวกันกับที่ใช้งานภายในเครื่อง หากมีเวอร์ชันที่ไม่ตรงกัน Carthage จะดำเนินการสร้างเฟรมเวิร์กจากแหล่งที่มาต่อไป หากไม่สามารถสร้างกรอบงานจากแหล่งที่มาได้ Carthage จะล้มเหลว
เนื่องจาก Carthage ใช้เอาต์พุตของ xcrun swift --version
เพื่อกำหนดเวอร์ชัน Swift ในเครื่อง ตรวจสอบให้แน่ใจว่าได้รันคำสั่ง Carthage ด้วย Toolchain Swift ที่คุณต้องการใช้ สำหรับกรณีการใช้งานหลายๆ กรณี ไม่จำเป็นต้องมีอะไรเพิ่มเติม อย่างไรก็ตาม ตัวอย่างเช่น หากคุณกำลังสร้างโปรเจ็กต์ Swift 2.3 โดยใช้ Xcode 8.x วิธีหนึ่งในการระบุ swift
เริ่มต้นของคุณสำหรับ carthage bootstrap
คือการใช้คำสั่งต่อไปนี้:
TOOLCHAINS=com.apple.dt.toolchain.Swift_2_3 carthage bootstrap
หลังจากที่คุณทำตามขั้นตอนข้างต้นและพุชการเปลี่ยนแปลงแล้ว ผู้ใช้รายอื่นของโปรเจ็กต์จะต้องดึงข้อมูลพื้นที่เก็บข้อมูลและเรียกใช้ carthage bootstrap
เพื่อเริ่มต้นกับเฟรมเวิร์กที่คุณเพิ่ม
การใช้ Carthage สำหรับการขึ้นต่อกันของเป้าหมายใดๆ ก็ตามนั้นค่อนข้างคล้ายกับการใช้ Carthage สำหรับแอปพลิเคชัน ความแตกต่างหลักอยู่ที่วิธีการตั้งค่าและเชื่อมโยงเฟรมเวิร์กใน Xcode
เนื่องจากเป้าหมายการทดสอบหน่วยขาดส่วน Linked Frameworks และ Libraries ในแท็บการตั้งค่า ทั่วไป คุณต้องลากเฟรมเวิร์กที่สร้างขึ้นไปยังเฟสการสร้าง Link Binaries With Libraries แทน
ในเป้าหมายการทดสอบภายใต้แท็บ การตั้งค่าการสร้าง ให้เพิ่ม @loader_path/Frameworks
ไปยัง Runpath Search Paths หากยังไม่มีอยู่
ในบางกรณีที่เกิดขึ้นไม่บ่อยนัก คุณอาจต้องการคัดลอกการขึ้นต่อกันแต่ละรายการลงในผลิตภัณฑ์บิลด์ (เช่น เพื่อฝังการขึ้นต่อกันภายในกรอบงานภายนอก หรือตรวจสอบให้แน่ใจว่าการขึ้นต่อกันนั้นมีอยู่ในชุดทดสอบ) เมื่อต้องการทำเช่นนี้ ให้สร้างเฟสการสร้าง การคัดลอกไฟล์ ใหม่ด้วยปลายทางของ เฟรมเวิร์ก จากนั้นเพิ่มการอ้างอิงเฟรมเวิร์กที่นั่นด้วย คุณไม่ควรใช้คำสั่ง carthage copy-frameworks
เนื่องจากชุดการทดสอบไม่จำเป็นต้องถอดเฟรมเวิร์กออก และไม่รองรับการรันอินสแตนซ์ของ copy-frameworks
พร้อมกัน (โดยที่เปิดใช้บิลด์แบบขนาน)
หากคุณได้แก้ไข Cartfile ของคุณ หรือต้องการอัปเดตเป็นเวอร์ชันใหม่ล่าสุดของแต่ละเฟรมเวิร์ก (ขึ้นอยู่กับข้อกำหนดที่คุณระบุไว้) เพียงเรียกใช้คำสั่ง carthage update
อีกครั้ง
หากคุณต้องการอัปเดตการอ้างอิงรายการเดียวหรือเฉพาะเจาะจง ให้ส่งรายการเหล่านั้นเป็นรายการที่คั่นด้วยช่องว่างไปยังคำสั่ง update
เช่น
carthage update Box
หรือ
carthage update Box Result
มีการเขียนตรรกะใหม่สำหรับการอัพเกรดเฟรมเวิร์กโดยมีเป้าหมายเพื่อเพิ่มความเร็วและลดการใช้หน่วยความจำ ขณะนี้เป็นคุณลักษณะที่เลือกใช้ สามารถใช้โดยส่ง --new-resolver
ไปยังคำสั่ง update เช่น
carthage update --new-resolver Box
หากคุณประสบปัญหาด้านประสิทธิภาพในระหว่างการอัพเดต โปรดลองใช้รีโซลเวอร์ใหม่
หากเฟรมเวิร์กที่คุณต้องการเพิ่มให้กับโปรเจ็กต์ของคุณมีการขึ้นต่อกันที่ระบุไว้อย่างชัดเจนใน Cartfile Carthage จะดึงข้อมูลเหล่านั้นให้คุณโดยอัตโนมัติ จากนั้นคุณจะต้อง ลากพวกเขาเองไปยังโปรเจ็กต์ของคุณ จากโฟลเดอร์ Carthage/Build
หากเฟรมเวิร์กที่ฝังอยู่ในโปรเจ็กต์ของคุณมีการขึ้นต่อกับเฟรมเวิร์กอื่น คุณต้อง ลิงก์เฟรมเหล่านั้นกับเป้าหมายของแอปพลิเคชัน (แม้ว่าเป้าหมายของแอปพลิเคชันจะไม่ได้ขึ้นอยู่กับเฟรมเวิร์กนั้นและไม่เคยใช้เลย)
ตามค่าเริ่มต้น Carthage จะตรวจสอบไฟล์ต้นฉบับของการอ้างอิงโดยตรงในโฟลเดอร์โปรเจ็กต์ของคุณ ปล่อยให้คุณยอมรับหรือเพิกเฉยต่อไฟล์เหล่านั้นตามที่คุณต้องการ หากคุณต้องการให้มีการพึ่งพาเป็นโมดูลย่อย Git แทน (บางทีเพื่อให้คุณสามารถคอมมิตและพุชการเปลี่ยนแปลงภายในโมดูลเหล่านั้นได้) คุณสามารถเรียกใช้ carthage update
หรือ carthage checkout
ด้วยแฟล็ก --use-submodules
เมื่อดำเนินการด้วยวิธีนี้ Carthage จะเขียนลงในไฟล์ .gitmodules
และ .git/config
ของพื้นที่เก็บข้อมูลของคุณ และอัปเดตโมดูลย่อยโดยอัตโนมัติเมื่อเวอร์ชันของการอ้างอิงเปลี่ยนแปลง
หากคุณต้องการทำงานกับการขึ้นต่อกันระหว่างการพัฒนา และต้องการให้สร้างขึ้นใหม่โดยอัตโนมัติเมื่อคุณสร้างโปรเจ็กต์หลัก คุณสามารถเพิ่มเฟสการสร้าง Run Script ที่เรียกใช้ Carthage ได้ดังนี้:
/usr/local/bin/carthage build --platform " $PLATFORM_NAME " --project-directory " $SRCROOT "
โปรดทราบว่าคุณควรใช้โมดูลย่อยก่อนที่จะดำเนินการนี้ เนื่องจากไม่ควรแก้ไขการชำระเงินธรรมดาโดยตรง
ตามค่าเริ่มต้น Carthage จะสร้างการขึ้นต่อกันใหม่ ไม่ว่าจะเป็นเวอร์ชันที่แก้ไขแล้วเหมือนเมื่อก่อนหรือไม่ การส่งผ่าน --cache-builds
จะทำให้ Carthage หลีกเลี่ยงการสร้างการพึ่งพาใหม่หากทำได้ ดูข้อมูลเกี่ยวกับไฟล์เวอร์ชันเพื่อดูรายละเอียดว่า Carthage ดำเนินการแคชนี้อย่างไร
หมายเหตุ: ในขณะนี้ --cache-builds
เข้ากันไม่ได้กับ --use-submodules
การใช้ทั้งสองอย่างจะส่งผลให้เกิดสำเนาการทำงานและการเปลี่ยนแปลงที่คอมมิตกับการพึ่งพาโมดูลย่อยของคุณที่ไม่ได้รับการสร้างขึ้นใหม่อย่างถูกต้อง ดู #1785 สำหรับรายละเอียด
การเติมคำสั่งและตัวเลือก Carthage ให้สมบูรณ์โดยอัตโนมัติมีให้ใช้งานตามเอกสารใน Bash/Zsh/Fish Completion
Carthage รองรับเฉพาะเฟรมเวิร์กไดนามิกอย่างเป็นทางการเท่านั้น เฟรมเวิร์กแบบไดนามิกสามารถใช้ได้กับ OS X เวอร์ชันใดก็ได้ แต่เฉพาะบน iOS 8 หรือใหม่กว่า เท่านั้น นอกจากนี้ เนื่องจากเวอร์ชัน 0.30.0 Carthage รองรับเฟรมเวิร์ก แบบคงที่
เนื่องจาก Carthage ไม่มีรายการแพ็กเกจแบบรวมศูนย์ และไม่มีรูปแบบข้อกำหนดเฉพาะของโครงการ เฟรมเวิร์กส่วนใหญ่จึงควรสร้างโดยอัตโนมัติ
ข้อกำหนดเฉพาะของโครงการกรอบงานใดๆ มีดังต่อไปนี้
Carthage จะสร้างเฉพาะโครงร่าง Xcode ที่แชร์จาก . .xcodeproj
ของคุณเท่านั้น คุณสามารถดูว่าโครงร่างที่คุณตั้งใจทั้งหมดสร้างสำเร็จหรือไม่โดยการรัน carthage build --no-skip-current
จากนั้นตรวจสอบโฟลเดอร์ Carthage/Build
หากไม่ได้สร้างโครงร่างที่สำคัญเมื่อคุณรันคำสั่งนั้น ให้เปิด Xcode และตรวจสอบให้แน่ใจว่าโครงร่างนั้นถูกทำเครื่องหมายเป็น Shared เพื่อให้ Carthage สามารถค้นพบได้
หากคุณพบความล้มเหลวในการสร้างใน carthage build --no-skip-current
ให้ลองรัน xcodebuild -scheme SCHEME -workspace WORKSPACE build
หรือ xcodebuild -scheme SCHEME -project PROJECT build
(ด้วยค่าจริง) และดูว่ามีความล้มเหลวแบบเดียวกันเกิดขึ้นที่นั่นหรือไม่ หวังว่านี่น่าจะให้ข้อมูลเพียงพอที่จะแก้ไขปัญหาได้
หากคุณติดตั้งเครื่องมือนักพัฒนาของ Apple หลายเวอร์ชัน (เช่น Xcode เบต้า) ให้ใช้ xcode-select
เพื่อเปลี่ยนเวอร์ชันที่ Carthage ใช้
หากคุณยังไม่สามารถสร้างเฟรมเวิร์กของคุณด้วย Carthage ได้ โปรดเปิดปัญหา เรายินดีที่จะช่วยเหลือ!
Carthage กำหนดเวอร์ชันของเฟรมเวิร์กของคุณที่พร้อมใช้งานโดยการค้นหาผ่านแท็กที่เผยแพร่บนที่เก็บ และพยายามตีความชื่อแท็กแต่ละชื่อเป็นเวอร์ชันเชิงความหมาย ตัวอย่างเช่น ในแท็ก v1.2
เวอร์ชันความหมายคือ 1.2.0
แท็กที่ไม่มีหมายเลขเวอร์ชันใดๆ หรือมีอักขระใดๆ ที่ตามหลังหมายเลขเวอร์ชัน (เช่น 1.2-alpha-1
) ยังไม่รองรับในขณะนี้ และจะถูกละเว้น
Carthage สามารถใช้เฟรมเวิร์กที่สร้างไว้ล่วงหน้าได้โดยอัตโนมัติ แทนที่จะสร้างตั้งแต่ต้น หากแนบไปกับ GitHub Release บนพื้นที่เก็บข้อมูลของโปรเจ็กต์ของคุณหรือผ่านไฟล์คำจำกัดความโปรเจ็กต์ไบนารี
หากต้องการนำเสนอเฟรมเวิร์กที่สร้างไว้ล่วงหน้าสำหรับแท็กเฉพาะ ไบนารีสำหรับแพลตฟอร์มที่รองรับ ทั้งหมด ควรถูกบีบอัดเข้าด้วยกันเป็นไฟล์เก็บถาวร เดียว และไฟล์เก็บถาวรนั้นควรแนบไปกับ Release ที่เผยแพร่ซึ่งสอดคล้องกับแท็กนั้น ไฟล์แนบควรมี .framework
อยู่ในชื่อ (เช่น ReactiveCocoa.framework.zip
) เพื่อระบุให้ Carthage ทราบว่าไฟล์นั้นมีไบนารี โครงสร้างไดเร็กทอรีของไฟล์เก็บถาวรเป็นรูปแบบอิสระ แต่ เฟรมเวิร์กควรปรากฏเพียงครั้งเดียวในไฟล์เก็บถาวร เนื่องจากจะถูกคัดลอกไปยัง Carthage/Build/<platform>
ตามชื่อ (เช่น ReactiveCocoa.framework
)
หากต้องการนำเสนอ XCFrameworks ที่สร้างไว้ล่วงหน้า ให้สร้างด้วย --use-xcframeworks
และทำตามขั้นตอนเดียวกันเพื่อบีบอัด XCFrameworks ทั้งหมดลงในไฟล์เก็บถาวรเดียว รวม .xcframework
ไว้ในชื่อไฟล์แนบ ตั้งแต่เวอร์ชัน 0.38.0 เป็นต้นไป Carthage ต้องการดาวน์โหลดไฟล์แนบ .xcframework
เมื่อผ่าน --use-xcframeworks
คุณสามารถดำเนินการเก็บถาวรด้วย carthage ได้โดยใช้:
-carthage build --no-skip-current
-carthage archive YourFrameworkName
หรืออีกทางหนึ่ง
carthage build --archive
ฉบับร่างจะถูกละเว้นโดยอัตโนมัติ แม้ว่าจะสอดคล้องกับแท็กที่ต้องการก็ตาม
คุณสามารถใช้ travis-ci เพื่อสร้างและอัปโหลดการเผยแพร่ที่แท็กของคุณ
ติดตั้ง Travis CLI ด้วย gem install travis
ตั้งค่า travis-ci สำหรับพื้นที่เก็บข้อมูลของคุณ (ขั้นตอนที่ 1 และ 2)
สร้างไฟล์ .travis.yml
ที่รากของที่เก็บของคุณตามเทมเพลตนั้น ตั้งค่า FRAMEWORK_NAME
เป็นค่าที่ถูกต้อง
แทนที่ PROJECT_PLACEHOLDER และ SCHEME_PLACEHOLDER
หากคุณกำลังใช้เวิ ร์กสเปซ แทน โปรเจ็กต์ ให้ลบบรรทัด xcode_project และยกเลิกการใส่เครื่องหมายข้อคิดเห็นบรรทัด xcode_workspace
โครงการควรอยู่ในรูปแบบ: MyProject.xcodeproj
พื้นที่ทำงานควรอยู่ในรูปแบบ: MyWorkspace.xcworkspace
คุณสามารถอัปเดตค่า xcode_sdk
เป็น SDK อื่นได้ตามใจชอบ โปรดทราบว่าการทดสอบบน iphoneos SDK จะทำให้คุณต้องอัปโหลดข้อมูลประจำตัวการลงนามโค้ด
สำหรับข้อมูลเพิ่มเติม คุณสามารถเยี่ยมชมเอกสาร Travis สำหรับโครงการ Objective-c
language : objective-c
osx_image : xcode7.3
xcode_project : <PROJECT_PLACEHOLDER>
# xcode_workspace: <WORKSPACE_PLACEHOLDER>
xcode_scheme : <SCHEME_PLACEHOLDER>
xcode_sdk : iphonesimulator9.3
env :
global :
- FRAMEWORK_NAME=<THIS_IS_A_PLACEHOLDER_REPLACE_ME>
before_install :
- brew update
- brew outdated carthage || brew upgrade carthage
before_script :
# bootstrap the dependencies for the project
# you can remove if you don't have dependencies
- carthage bootstrap
before_deploy :
- carthage build --no-skip-current
- carthage archive $FRAMEWORK_NAME
เรียกใช้ travis setup releases
ตามเอกสารที่นี่
คำสั่งนี้จะเข้ารหัสข้อมูลประจำตัว GitHub ของคุณลงในไฟล์ .travis.yml
เพื่อให้ Travis อัปโหลดรุ่นไปยัง GitHub.com เมื่อได้รับแจ้งให้อัปโหลดไฟล์ ให้ป้อน $FRAMEWORK_NAME.framework.zip
อัปเดตส่วนปรับใช้ให้ทำงานบนแท็ก:
ใน .travis.yml
ให้ค้นหา:
on :
repo : repo/repo
และเพิ่ม tags: true
และ skip_cleanup: true
:
skip_cleanup : true
on :
repo : repo/repo
tags : true
นั่นจะทำให้ทราวิสรู้ว่าจะสร้างการใช้งานเมื่อมีการพุชแท็กใหม่และป้องกันไม่ให้ทราวิสล้างไฟล์ zip ที่สร้างขึ้น
หากคุณฝังเฟรมเวิร์กไดนามิกจำนวนมากลงในแอปของคุณ เวลาเปิดตัวก่อนการเปิดตัวหลักอาจค่อนข้างช้า Carthage สามารถช่วยบรรเทาปัญหานี้ได้โดยการสร้างเฟรมเวิร์กแบบไดนามิกของคุณเป็นเฟรมเวิร์กแบบคงที่แทน เฟรมเวิร์กแบบคงที่สามารถเชื่อมโยงเข้ากับแอปพลิเคชันของคุณโดยตรง หรือรวมเข้าด้วยกันเป็นเฟรมเวิร์กไดนามิกที่ใหญ่ขึ้นด้วยการปรับเปลี่ยนเวิร์กโฟลว์ของคุณง่ายๆ เพียงไม่กี่ขั้นตอน ซึ่งอาจส่งผลให้เวลาเปิดตัวก่อนการเปิดตัวหลักลดลงอย่างมาก
ตั้งแต่เวอร์ชัน 0.30.0 โครงการ Carthage เปิดตัวการสนับสนุนสำหรับเฟรมเวิร์กที่เชื่อมโยงแบบคงที่ซึ่งเขียนด้วย Swift หรือ Objective-C ซึ่งได้มีการเปิดตัวการสนับสนุนใน Xcode 9.4 อย่างไรก็ตาม โปรดทราบว่ามันระบุโดยเฉพาะว่า frameworks ดังนั้น Darwin จึงรวมกลุ่มกับส่วนขยาย .framework และที่เก็บถาวรอ็อบเจ็กต์ที่เชื่อมโยงแบบคงที่ภายใน ปัจจุบัน Carthage ยังไม่รองรับแผน ห้องสมุด แบบคงที่ และไม่มีแผนที่จะแนะนำการสนับสนุนในอนาคต
ขั้นตอนการทำงานแตกต่างกันเพียงเล็กน้อย:
อย่างไรก็ตาม:
ดูเอกสาร StaticFrameworks สำหรับรายละเอียด
โปรดทราบว่าแนวทางนี้มีข้อแม้บางประการ:
ต้องการโฆษณาว่าโครงการของคุณสามารถใช้กับ Carthage ได้หรือไม่? คุณสามารถเพิ่มป้ายความเข้ากันได้:
… ไปยัง README
ของคุณ เพียงแทรก Markdown ต่อไปนี้:
[ ![ Carthage compatible ] ( https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat )] ( https://github.com/Carthage/Carthage )
กรอบงานที่สร้างไว้ล่วงหน้าไม่สามารถดีบั๊กโดยใช้การดำเนินการตามขั้นตอนบนเครื่องอื่นนอกเหนือจากที่กรอบงานถูกสร้างขึ้น เพียงแค่ carthage bootstrap/build/update --no-use-binaries
ควรแก้ไขปัญหานี้ แต่สำหรับวิธีแก้ปัญหาแบบอัตโนมัติ โปรดดูที่ #924 Dupe rdar://23551273 หากคุณต้องการให้ Apple แก้ไขสาเหตุของปัญหานี้
ฟังก์ชันการทำงานส่วนใหญ่ของเครื่องมือบรรทัดคำสั่ง carthage
นั้นแท้จริงแล้วถูกห่อหุ้มไว้ในเฟรมเวิร์กชื่อ CarthageKit
หากคุณสนใจที่จะใช้ Carthage เป็นส่วนหนึ่งของเครื่องมืออื่น หรืออาจขยายฟังก์ชันการทำงานของ Carthage โปรดดูซอร์สโค้ด CarthageKit เพื่อดูว่า API ตรงกับความต้องการของคุณหรือไม่
CocoaPods เป็นผู้จัดการการพึ่งพามายาวนานของ Cocoa เหตุใดคาร์เธจจึงถูกสร้างขึ้น?
ประการแรก CocoaPods (ตามค่าเริ่มต้น) จะสร้างและอัปเดตพื้นที่ทำงาน Xcode สำหรับแอปพลิเคชันของคุณและการขึ้นต่อกันทั้งหมดโดยอัตโนมัติ Carthage สร้างเฟรมเวิร์กไบนารี่โดยใช้ xcodebuild
แต่ทิ้งความรับผิดชอบในการรวมเข้ากับผู้ใช้ แนวทางของ CocoaPods นั้นใช้งานง่ายกว่า ในขณะที่แนวทางของ Carthage นั้นมีความยืดหยุ่นและไม่ก้าวก่าย
เป้าหมายของ CocoaPods แสดงอยู่ใน README ดังนี้:
… เพื่อปรับปรุงความสามารถในการค้นพบและการมีส่วนร่วมในไลบรารีโอเพ่นซอร์สของบุคคลที่สาม โดยการสร้างระบบนิเวศแบบรวมศูนย์มากขึ้น
ในทางตรงกันข้าม Carthage ได้รับการสร้างขึ้นให้เป็นผู้จัดการการพึ่งพา แบบกระจายอำนาจ ไม่มีรายการโครงการส่วนกลาง ซึ่งจะช่วยลดงานบำรุงรักษาและหลีกเลี่ยงจุดศูนย์กลางของความล้มเหลว อย่างไรก็ตาม การค้นพบโครงการทำได้ยากกว่า ผู้ใช้ต้องหันไปที่หน้าเทรนด์ของ GitHub หรือหน้าที่คล้ายกัน
โปรเจ็กต์ CocoaPods ต้องมีสิ่งที่เรียกว่าไฟล์ podspec ซึ่งรวมถึงข้อมูลเมตาเกี่ยวกับโปรเจ็กต์และระบุวิธีการสร้าง Carthage ใช้ xcodebuild
เพื่อสร้างการขึ้นต่อกัน แทนที่จะรวมมันไว้ในพื้นที่ทำงานเดียว มันไม่มีไฟล์ข้อกำหนดที่คล้ายกัน แต่การขึ้นต่อกันของคุณจะต้องรวมโปรเจ็กต์ Xcode ของตัวเองที่อธิบายวิธีสร้างผลิตภัณฑ์ของพวกเขา
ท้ายที่สุดแล้ว เราสร้าง Carthage ขึ้นมาเพราะเราต้องการเครื่องมือที่ง่ายที่สุดเท่าที่จะเป็นไปได้ นั่นคือตัวจัดการการพึ่งพาที่ช่วยให้งานเสร็จโดยไม่ต้องรับหน้าที่รับผิดชอบของ Xcode และไม่สร้างงานเพิ่มเติมให้กับผู้เขียนเฟรมเวิร์ก CocoaPods นำเสนอคุณสมบัติที่น่าทึ่งมากมายที่ Carthage ไม่เคยมีมาก่อน แลกกับความซับซ้อนเพิ่มเติม
Carthage ได้รับการเผยแพร่ภายใต้ใบอนุญาต MIT
ภาพฉากหลังส่วนหัวเผยแพร่ภายใต้ใบอนุญาต CC BY-NC-SA 2.0 ภาพต้นฉบับโดยริชาร์ด มอร์เทล