ใช้ Carthage อย่างไรให้ทำงานเร็ว
นอจาก 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)