![fastlane-ios]()
![fastlane-ios]()
วันนี้มีโอกาสมาแบ่งปันเรื่อง
Continuous Delivery with Fastlane
ในงาน iOS Dev Meetup ครั้งที่ 4 จากกลุ่ม
iOS Developer Thailand
จึงทำการสรุปสิ่งที่แบ่งปันไว้นิดหน่อย
หัวข้อต่าง ๆ ในงาน meetup ประกอบไปด้วย
- Continuous Delivery with Fastlane
- Redux
- React Native
สรุปสิ่งที่แบ่งปันเรื่อง Fastlane ก่อน
เริ่มด้วยแนวคิดของ Continuous Delivery(CD) ว่าเป็นอย่างไร
ซึ่งเน้นไปที่เรื่องของ
คุณภาพ (Quality)
ที่ต้องอยู่ในทุก ๆ กระบวนการของการพัฒนา software
ไม่ว่าจะเป็น web หรือ mobile ก็ตาม
โดยแนวคิดเบื้องต้นของ CD คือ Continuous Integration(CI)
นั่นคือ ต้องทำการ build -> test -> run อยู่บ่อย ๆ
เพื่อทำให้เรารู้ feedback หรือ ผลการทำงานหลังการเปลี่ยนแปลงสิ่งต่าง ๆ ได้อย่างรวดเร็ว
แน่นอนว่า การทำงานแบบ manual หรือ ให้คนทำส่วนนี้
จะได้รับ feedback ที่ช้ามาก ๆ
และไม่สามารถไม่สามารถทำงานได้บ่อยเท่าที่ต้องการ
ดังนั้น จึงต้องสร้างระบบการทำงานแบบอัตโนมัติขึ้นมา (Automation)
เมื่อเราสร้างการ build -> test -> run แบบอัตโนมัติ
และทำให้เรามีความมั่นใจต่อระบบมากขึ้น
นั่นคือระบบงานของเรามีคุณภาพนั่นเอง
ทำให้เราสามารถสร้างระบบ Continuous Delivery ขึ้นมาต่อยอดได้ง่าย
ดังนั้นกลับมาที่ iOS app development บ้าง !!
คำถามคือ
เราทำการ build -> test -> run กันอย่างไร ?
เราทำการ deploy app กันอย่างไร ?
คำตอบ คือ
แบบ manual ไงล่ะ !!
ดังนั้นจึงขอแนะนำเครื่องมือที่ช่วยทำงานสิ่งต่าง ๆ เหล่านี้
เพื่อทำให้การทำงานซ้ำ ๆ มันง่ายขึ้น
เพื่อทำให้การทำงานซ้ำ ๆ มันสะดวกขึ้น
เพื่อทำให้การทำงานซ้ำ ๆ มาเป็นแบบอัตโนมัติ
ทำให้เราสามารถสร้างระบบ CI และ CD ได้ง่ายขึ้น
นั่นคือ
Fastlane
ซึ่งผมแนะนำไว้ที่
blog ทำความรู้จักกับ Fastlane กันหน่อย
โดยเครื่องมือใน Fastlane ที่แนะนำ และ demo เป็นดังนี้
- produce ทำการสร้าง App บน iTune Connect และ Apple Developer Portal
- cert ทำการจัดการ certificate
- sign ทำการจัดการ provisioning profile
- gym ทำการสร้างไฟล์ IPA
- pilot ทำการ upload App ขึ้น TestFight
- deliver ทำการ upload ขึ้น AppStore
- scan ทำการ run Unit test
- snapshot ทำการ run UI test และ Snapshot หน้าจอการทำงาน ซึ่งจะเป็น metadata หนึ่งของ app ได้เลย
ซึ่งเราสามารถกำหนดขั้นตอนการทำงานในสิ่งที่เรียกว่า Lane
อยู่ในไฟล์ Fastfile ของ Fastlane ดังนี้
1. ทำการ Provisioning ก่อน ประกอบไปด้วย
- สร้าง App
- สร้าง Certificate
- สร้าง Provisioning profile
ถ้าทำแบบ manual มันเหนื่อยพอสมควร
แต่ Fastlane มันทำให้เราง่ายขึ้นด้วย Produce, Cert และ Sigh ดังนี้
[gist id="20ee6e9e7e7bfdeb49a16b84d3ab1578" file="Fastfile01"]
สามารถใช้งานด้วยคำสั่ง
[code]$fastlane provision[/code]
ปล. ให้ run เพียงครั้งเดียวเท่านั้นนะครับ
2. ทำการสร้างไฟล์ IPA และ Upload ขึ้น TestFight สำหรับการทำ Beta testing
[gist id="20ee6e9e7e7bfdeb49a16b84d3ab1578" file="Fastfile03"]
สามารถใช้งานด้วยคำสั่ง
[code]$fastlane beta[/code]
3. ทำการสร้างไฟล์ IPA และ Upload ขึ้น AppStore
โดยก่อนจะ Upload ขึ้น AppStore
สามารถดู preview ของ metadata ได้อีกด้วย
[gist id="20ee6e9e7e7bfdeb49a16b84d3ab1578" file="Fastfile04"]
สามารถใช้งานด้วยคำสั่ง
[code]$fastlane appstore[/code]
4. ทำการ run unit test, ui test, สร้างไฟล์ IPA และ Upload ขึ้น AppStore
[gist id="20ee6e9e7e7bfdeb49a16b84d3ab1578" file="Fastfile02"]
สามารถใช้งานด้วยคำสั่ง
[code]$fastlane all[/code]
สังเกตุได้ว่า เราสามารถกำหนด Lane การทำงานของเราได้
นั่นทำให้เราสามารถปรับเปลี่ยนขั้นตอนการทำงานตามที่เราต้องการได้
อีกอย่างหนึ่ง คือ มันเป็นภาษา Ruby
ดังนั้น เราจึงสามารถเขียน script ด้วยภาษา Ruby
เพื่อเพิ่มความสามารถต่าง ๆ ได้ เช่น
- จัดการเรื่อง version ของ app
- จัดการเรื่อง metadata ต่าง ๆ ของ app สามารถดึงมาจากไฟล์ หรือ REST APIs ได้
รวมทั้งสามารถ integrate การทำงานกับ Slack หรือระบบอื่น ๆ ได้ง่าย
ปล.
เนื่องจาก Fastlane นั้นมันใหม่มาก ๆ
ดังนั้น จึงทำให้เกิด error ต่าง ๆ พอสมควร
ทั้งเรื่องของ permission
ทั้งเรื่องของ version ของ Xcode command line tool
แต่ก็สามารถเปิด issue ต่าง ๆ ได้จาก
Fastlane issue
และได้รับ feedback กลับมาเร็วมาก ๆ
โดยที่ Slide แบ่งปันอยู่ที่นี่
[slideshare id=60379523&doc=continuous-delivery-for-ios-app-160402085655&w=640&h=480]
ใน blog ต่อ ๆ ไปจะเขียนอธิบายการใช้งานในแต่ละ usecase มาเรื่อย ๆ