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 ก็ตาม

quality

โดยแนวคิดเบื้องต้นของ 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 ดังนี้

สามารถใช้งานด้วยคำสั่ง

$fastlane provision

ปล. ให้ run เพียงครั้งเดียวเท่านั้นนะครับ

2. ทำการสร้างไฟล์ IPA และ Upload ขึ้น TestFight สำหรับการทำ Beta testing

สามารถใช้งานด้วยคำสั่ง

$fastlane beta

3. ทำการสร้างไฟล์ IPA และ Upload ขึ้น AppStore
โดยก่อนจะ Upload ขึ้น AppStore
สามารถดู preview ของ metadata ได้อีกด้วย

สามารถใช้งานด้วยคำสั่ง

$fastlane appstore

4. ทำการ run unit test, ui test, สร้างไฟล์ IPA และ Upload ขึ้น AppStore

สามารถใช้งานด้วยคำสั่ง

$fastlane all

สังเกตุได้ว่า เราสามารถกำหนด 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 แบ่งปันอยู่ที่นี่

ใน blog ต่อ ๆ ไปจะเขียนอธิบายการใช้งานในแต่ละ usecase มาเรื่อย ๆ