ใช้ Carthage อย่างไรให้ทำงานเร็ว

Wasith T. (Bai-Phai)
odds.team
Published in
1 min readApr 10, 2018

นอจาก cocoapods แล้วยังมี carthage เป็น dependency manager ทางเลือกตัวนึง ที่หลาย ๆ คนว่ามันช้าซะเหลือเกิน มาดูกันว่าทำอย่างไรให้เร็วขึ้นได้บ้าง

ใช้คำสั่งให้ถูกต้อง

carthage bootstrap จะทำการอ่านไฟล์ Cartfile.resolved ส่วน
carthage update จะทำการอ่านไฟล์ Cartfile ซึ่งจะไปแก้ไข Cartfile.resolved เพื่อให้อัพเดทด้วย

เพราะฉนั้นถ้าแค่ต้องการให้ checkout และ build ควรใช้แค่คำสั่ง carthage bootstrap ก็พอแล้วถ้าต้องการอัพเดทจริง ๆ ให้ใช้คำสั่ง update

ตรวจ Cartfile

มีคนแนะนำว่าให้ระบุใน Cartfile เป็น == แทน ~> หรือ >= เพราะจะทำงานได้ช้ากว่า

เช่นจากเดิมใช้ ~> หรือ >=

github “Alamofire/Alamofire” ~> 4.7
github “ReactiveX/RxSwift” >= 4.1

ให้ใช้ == แทน

github “Alamofire/Alamofire” == 4.7.1
github “ReactiveX/RxSwift” == 4.1.2

การอัพเดท dependencies

ให้ใช้คำสั่ง carthage outdated เพื่อตรวจว่ามี dependencies ตัวไหนบ้างที่มี version ใหม่กว่าที่ระบุ

$ carthage outdated
*** Fetching
The following dependencies are outdated:
RxSwift “4.1.0” -> “4.1.2” (Latest: “4.1.2”)

เสร็จแล้วก็ให้ไปอัพเดทใน Cartfile ด้วย

update หรือ build ตัว dependencies แบบเจาะจง

ให้ระบุชื่อไปในคำสั่งด้วย carthage update [dependency_name ...] เช่น carthage update RxSwift Alamofire เพื่อเจาะจงตัวที่จะทำการอัพเดท

ให้ build แบบเจาะจง platform

ในการ build ไม่ว่าจะเป็นคำสั่ง carthage bootstrap, carthage update หรือ carthage build เองสามารถใช้คำสั่ง--platform <os_target> [os_target] ต่อท้ายได้ เช่น carthage build --platform iOS หรือ carthage --platform iOS macOS เพื่อให้ carthage ทำการ build แค่ platform ที่ระบุไว้

ใช้ cache build

โดย default ตัว carthage จะทำการ build ทุก dependencies ใหม่ทั้งหมดโดยไม่สนใจ version ใช้ parameter --cache-builds carthage จะไปดู version file ที่สร้างไว้และจะข้าม dependencies เหล่านั้น แต่ยังใช้งานกับ --use-submodules ไม่ได้ดูรายละเอียดของ issue ได้ที่ #1785

ใช้คอมที่แรงขึ้น

การซื้อเครื่องใหม่ที่แรงกว่าเดิมเช่น iMac Pro ก็สามารถทำให้ build ได้เร็วขึ้น ซึ่งตัว xcode build นั้นรองรับ multi-core เพื่อ build อยู่แล้ว

แถม

สำหรับการใช้ carthage ไม่ว่าคำสั่งใด ๆ ก็ตามควรทำการ commit ตัว source code ทุกครั้ง ไม่อย่างนั้นอาจเจอปัญหาบางอย่างได้ :) เช่น

Parse error: expected submodule commit SHA in output of task (ls-tree -z HEAD Carthage/Checkouts/Alamofire)

--

--

Wasith T. (Bai-Phai)
odds.team

ตบมือเป็นกำลังใจให้ผมด้วยนะครับ 😘