Match (Fastlane) เป็นเครื่องมือสำหรับจัดการใบรับรอง Code Signing และ Provisioning Profiles ของ iOS ซึ่งจัดเก็บไว้ใน Git repository ที่เข้ารหัส แตกต่างจากการจัดการด้วยตนเองผ่าน Apple Developer Portal Match จะซิงค์ลายเซ็นระหว่างนักพัฒนาทุกคนและระบบ CI/CD โดยอัตโนมัติ ตามเอกสารทางการของ Fastlane (2026) Match ช่วยลดข้อผิดพลาดที่เกี่ยวข้องกับใบรับรองที่ไม่ถูกต้องในการ build แอป iOS ได้ถึง 90%
ประเด็นสำคัญ
Match (Fastlane) เป็นส่วนประกอบของระบบนิเวศ Fastlane ที่ออกแบบมาเพื่อจัดการใบรับรอง Code Signing และ Provisioning Profiles สำหรับการพัฒนา iOS แบบรวมศูนย์ แก้ปัญหาการซิงค์ลายเซ็นระหว่างสมาชิกในทีมและทำให้การตั้งค่าใบรับรองในไปป์ไลน์ CI/CD เป็นอัตโนมัติโดยไม่ต้องมีนักพัฒนามาดำเนินการ
หากไม่มี Match สมาชิกในทีมแต่ละคนจะต้องสร้างใบรับรองด้วยตนเองผ่าน Xcode หรือ Apple Developer Portal ซึ่งนำไปสู่ความขัดแย้งเมื่อ build บนเครื่องต่างๆ Code Signing คือกระบวนการลงชื่อดิจิทัลให้กับแอป iOS เพื่อยืนยันผู้สร้างและความสมบูรณ์ของแอปก่อนติดตั้งบนอุปกรณ์ของผู้ใช้
ตาม เอกสารของ Apple Developer (2025) การกำหนดค่าใบรับรองที่ไม่ถูกต้องเป็นสาเหตุหนึ่งที่พบบ่อยที่สุดของการถูกปฏิเสธเมื่อส่งแอปไปยัง App Store Match จะตรวจสอบความถูกต้องของใบรับรองโดยอัตโนมัติและแจ้งเตือนเมื่อใกล้หมดอายุ ซึ่งช่วยลดความเสี่ยงที่ build จะถูกปฏิเสธในขั้นตอนการตรวจสอบของ Apple
ใช้ Match ในโปรเจกต์ที่มีนักพัฒนาตั้งแต่สองคนขึ้นไปหรือมีไปป์ไลน์ CI/CD ซึ่งจะช่วยลดเวลาในการตั้งค่าสภาพแวดล้อมสำหรับสมาชิกทีมใหม่จาก 30 นาทีเหลือเพียงคำสั่งเดียวในเทอร์มินัล
สถาปัตยกรรมของ Match สร้างขึ้นบนแนวคิดของแหล่งความจริงเดียว (Single Source of Truth) สำหรับใบรับรองทั้งหมดของทีม iOS แทนที่จะจัดเก็บใน keychain ในเครื่องของนักพัฒนาแต่ละคน Match จะรวบรวมใบรับรองทั้งหมดไว้ใน Git repository เดียว โดยเข้ารหัสแต่ละไฟล์ก่อนจัดเก็บ
กระบวนการประกอบด้วยสามขั้นตอน ในขั้นตอนการเริ่มต้น Match จะสร้างใบรับรองและโปรไฟล์ที่จำเป็นทั้งหมดผ่าน Apple Developer Portal API แต่ละไฟล์จะถูกเข้ารหัสด้วยอัลกอริทึม AES-256 โดยใช้คีย์ที่สร้างจากวลีรหัสผ่านของผู้ใช้ ไฟล์ที่เข้ารหัสจะถูกบันทึกลงใน Git repository และซิงค์กับเซิร์ฟเวอร์ระยะไกลผ่านการดำเนินการ Git มาตรฐาน push และ pull
Match ใช้การผสมผสานระหว่าง OpenSSL และวลีรหัสผ่านของผู้ใช้ในการเข้ารหัสใบรับรองและโปรไฟล์ คีย์การเข้าถึงถูกกำหนดผ่านตัวแปรสภาพแวดล้อม MATCH_PASSWORD และไม่ถูกจัดเก็บไว้ใน repository ซึ่งช่วยป้องกันการรั่วไหลแม้ในกรณีที่เซิร์ฟเวอร์ Git ถูกบุกรุกหรือ repository สามารถเข้าถึงได้แบบสาธารณะ
เมื่อมีการร้องขอใบรับรอง Match จะดาวน์โหลดไฟล์ที่เข้ารหัสจาก repository ถอดรหัสในเครื่องด้วยวลีรหัสผ่าน และติดตั้งลงใน Keychain ของเครื่องปัจจุบัน เมื่อ build เสร็จสมบูรณ์ ใบรับรองสามารถถูกลบออกจาก Keychain เพื่อปฏิบัติตาม นโยบายความปลอดภัย ของสภาพแวดล้อมขององค์กร ซึ่งป้องกันการใช้ใบรับรองที่ล้าสมัยใน build ถัดไป
ใบรับรองแต่ละใบจะถูกบันทึกด้วยชื่อที่มีรหัสระบุแอป ประเภทโปรไฟล์ และวันที่สร้าง โครงสร้างนี้ช่วยให้ Match จัดการเวอร์ชันของใบรับรอง และหากจำเป็น ก็สามารถย้อนกลับไปยังสถานะก่อนหน้าได้ผ่านคำสั่ง Git มาตรฐาน revert และ reset ซึ่งมีประโยชน์อย่างยิ่งในกรณีที่ลบหรือเขียนทับโปรไฟล์โดยไม่ตั้งใจ
การติดตั้ง Match ทำได้พร้อมกับ Fastlane ผ่านตัวจัดการแพ็กเกจ Ruby: gem install fastlane หลังการติดตั้ง ให้เริ่มต้น repository ใบรับรองด้วยคำสั่ง fastlane match init ซึ่งจะสร้าง Git repository ว่างและสร้างไฟล์ Matchfile พร้อมเทมเพลตการตั้งค่าพื้นฐาน
# การเริ่มต้น repository ของ Match
fastlane match init
ไฟล์ Matchfile มีพารามิเตอร์ทั้งหมดสำหรับเชื่อมต่อกับ repository ใบรับรอง: URL ของ Git repository, ประเภทโปรไฟล์เริ่มต้น, รหัสระบุแอป และข้อมูลประจำตัว Apple Developer ตัวอย่างการกำหนดค่าทั่วไปสำหรับทีมที่มีนักพัฒนาห้าคน:
# Matchfile configuration
git_url("https://github.com/company/certificates.git")
type(:development)
app_identifier(["com.company.app", "com.company.app.extension"])
username("developer@company.com")
team_id("TEAM123456")
git_branch("main")
พารามิเตอร์ type กำหนดประเภทของโปรไฟล์: :development สำหรับการดีบักบนอุปกรณ์ของนักพัฒนา :appstore สำหรับการเผยแพร่บน App Store :adhoc สำหรับการทดสอบบนอุปกรณ์ภายนอก และ :enterprise สำหรับการแจกจ่ายภายในองค์กรแบบ In-House นอก App Store แต่ละประเภทจะสร้างไดเรกทอรีแยกต่างหากใน repository ช่วยให้จัดระเบียบโปรไฟล์ตามสถานการณ์ build เป้าหมาย
Match รองรับวิธีการรับรองความถูกต้องหลายวิธีบน Apple Developer Portal: การรับรองความถูกต้องแบบสองปัจจัยผ่าน Apple ID, รหัสผ่านเฉพาะแอป (App-Specific Password) และคีย์ API App Store Connect สำหรับ CI/CD แนะนำให้ใช้คีย์ API เพราะไม่ต้องป้อนรหัสยืนยันแบบโต้ตอบ และไม่บล็อก build อัตโนมัติเมื่อเปลี่ยนอุปกรณ์ของนักพัฒนา
หลังจากตั้งค่า Matchfile แล้ว ให้รันคำสั่ง fastlane match development หรือ fastlane match appstore เพื่อสร้างและซิงค์โปรไฟล์ Match จะสร้างหรืออัปเดตใบรับรองโดยอัตโนมัติผ่าน Apple Developer Portal API และบันทึกลงใน repository Apple Developer Portal คือเว็บอินเทอร์เฟสของ Apple สำหรับจัดการใบรับรอง รหัสระบุแอป และรายการอุปกรณ์ที่อนุญาตของนักพัฒนา
ในการรันครั้งแรก Match จะขอวลีรหัสผ่านสำหรับเข้ารหัส repository วลีนี้ต้องถูกเก็บไว้ในตัวจัดการความลับ CI/CD (GitHub Actions Secrets, GitLab CI Variables หรือ Jenkins Credentials) และส่งผ่านตัวแปรสภาพแวดล้อม MATCH_PASSWORD หากไม่มีสิ่งนี้ Match จะไม่สามารถถอดรหัสใบรับรองบนเครื่องอื่นหรือในสภาพแวดล้อม CI ได้
อินเทอร์เฟซของ Match ประกอบด้วยชุดคำสั่งสำหรับสร้าง อัปเดต ซิงค์ และลบใบรับรองและโปรไฟล์ แต่ละคำสั่งสอดคล้องกับการดำเนินการเฉพาะในวงจรชีวิตของ Code Signing ตั้งแต่การสร้างไปจนถึงการล้าง repository อย่างสมบูรณ์
คำสั่ง fastlane match development ดาวน์โหลดหรือสร้างใบรับรองและโปรไฟล์ Development สำหรับการดีบักบนอุปกรณ์ในเครื่อง Provisioning Profile คือเอกสารดิจิทัลของ Apple ที่เชื่อมโยงใบรับรองของนักพัฒนากับรหัสระบุแอปและรายการอุปกรณ์ที่อนุญาตให้ติดตั้ง
สำหรับการเผยแพร่บน App Store ใช้ fastlane match appstore ซึ่งสร้างใบรับรอง Distribution และโปรไฟล์ AppStore คำสั่ง fastlane match adhoc สร้างโปรไฟล์สำหรับการทดสอบบนอุปกรณ์ภายนอก และ fastlane match enterprise สำหรับแอปองค์กรแบบ In-House
# สร้างโปรไฟล์ Development สำหรับดีบัก
fastlane match development
# สร้างโปรไฟล์ AppStore สำหรับเผยแพร่
fastlane match appstore
# นำเข้าใบรับรองที่มีอยู่ซึ่งสร้างด้วยตนเอง
fastlane match import
คำสั่ง fastlane match import ช่วยให้เพิ่มใบรับรองที่มีอยู่แล้วลงใน repository ซึ่งมีประโยชน์เมื่อโยกย้ายจากการจัดการด้วยตนเองมาใช้ Match พารามิเตอร์ --readonly จะบล็อกการเปลี่ยนแปลงใดๆ ใน repository ซึ่งสำคัญสำหรับสภาพแวดล้อม CI ที่ไปป์ไลน์ไม่ควรสร้างหรือลบใบรับรองและโปรไฟล์โดยอัตโนมัติ
| คำสั่ง Match | วัตถุประสงค์ | ประเภทโปรไฟล์ |
|---|---|---|
| match development | สร้างโปรไฟล์ Development สำหรับดีบักบนอุปกรณ์ | Development |
| match appstore | สร้างโปรไฟล์สำหรับเผยแพร่บน App Store | AppStore |
| match adhoc | โปรไฟล์สำหรับทดสอบภายนอกบนอุปกรณ์ของผู้ทดสอบเบต้า | AdHoc |
| match enterprise | โปรไฟล์องค์กรสำหรับการแจกจ่าย In-House | Enterprise |
| match import | นำเข้าใบรับรองที่สร้างไว้ก่อนหน้านี้เข้าสู่ repository | ทุกประเภท |
สำหรับการล้าง repository อย่างสมบูรณ์ ให้ใช้คำสั่ง fastlane match nuke คำสั่งนี้จะลบใบรับรองทั้งหมดออกจาก Git repository, Apple Developer Portal และเครื่องในเครื่อง ซึ่งเป็นการรีเซ็ตสถานะ Code Signing ของโปรเจกต์โดยสมบูรณ์ คำสั่งนี้ใช้เฉพาะเมื่อมีความขัดแย้งรุนแรงหรือเมื่อย้ายไปยังบัญชี Apple Developer ใหม่
การผสานรวม CI/CD เป็นข้อได้เปรียบหลักอย่างหนึ่งของ Match ในไปป์ไลน์ GitHub Actions, GitLab CI, Bitrise หรือ Jenkins Match จะดาวน์โหลดและติดตั้งใบรับรองที่ถูกต้องโดยอัตโนมัติโดยไม่ต้องมีนักพัฒนามาดำเนินการ ซึ่งช่วยให้สามารถ build และลงชื่อแอป iOS ได้โดยอัตโนมัติอย่างสมบูรณ์ ตั้งแต่ commit ไปจนถึง IPA ที่พร้อมใช้
การกำหนดค่าทั่วไปสำหรับ GitHub Actions รวมถึงการติดตั้ง Fastlane การตั้งค่าตัวแปร MATCH_PASSWORD และการรัน Match ด้วยแฟล็ก --readonly GitHub Actions คือแพลตฟอร์ม CI/CD จาก GitHub ที่ทำให้การ build ทดสอบ และเผยแพร่โค้ดเป็นอัตโนมัติตามเหตุการณ์ใน repository
# ติดตั้ง Fastlane ในสภาพแวดล้อม CI
gem install fastlane --no-document
# รัน Match ในโหมดอ่านอย่างเดียวโดยไม่มีสิทธิ์เปลี่ยนแปลง
fastlane match development --readonly
ก่อนรัน Match ใน CI ต้องกำหนดค่าการเข้าถึง repository ใบรับรอง Fastlane จะโคลน repository โดยอัตโนมัติตามพารามิเตอร์ git_url จาก Matchfile การเข้าถึง repository ถูกกำหนดค่าผ่านคีย์ SSH หรือ personal access token ที่เพิ่มลงในความลับของระบบ CI ซึ่งรับประกันว่าใบรับรองจะไม่ถูกบุกรุกผ่านการเข้าถึงแบบสาธารณะ
กำหนดค่าตัวแปรสภาพแวดล้อม MATCH_PASSWORD และ FASTLANE_APPLE_API_KEY ในความลับของผู้ให้บริการ CI ของคุณ คีย์ API App Store Connect ช่วยให้ Match สามารถรับรองความถูกต้องบน Apple Developer Portal โดยไม่ต้องมีการรับรองความถูกต้องแบบสองปัจจัย ซึ่งช่วยขจัดคำขอแบบโต้ตอบใน build อัตโนมัติและป้องกันการบล็อกไปป์ไลน์
แม้จะกำหนดค่า Match อย่างถูกต้องแล้ว ก็อาจเกิดข้อผิดพลาดที่เกี่ยวข้องกับใบรับรองหมดอายุ ความขัดแย้งของโปรไฟล์ หรือการกำหนดค่าสภาพแวดล้อมที่ไม่ถูกต้อง การวินิจฉัยปัญหา ของ Match ขึ้นอยู่กับการวิเคราะห์บันทึกคำสั่งและการตรวจสอบสถานะปัจจุบันของ Git repository ใบรับรอง
ข้อผิดพลาดที่พบบ่อยที่สุด “You need to provide a password for Match” เกิดขึ้นเมื่อไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อม MATCH_PASSWORD บนเครื่องหรือในสภาพแวดล้อม CI วิธีแก้ไข: เพิ่ม MATCH_PASSWORD ลงในตัวแปรสภาพแวดล้อมของระบบ หรือส่งรหัสผ่านผ่านพารามิเตอร์ --keychain_password เมื่อรันคำสั่ง Match
ปัญหาที่พบบ่อยเป็นอันดับสองคือความขัดแย้งของใบรับรองเมื่อเพิ่มอุปกรณ์ใหม่ลงในโปรไฟล์ AdHoc แก้ไขได้ด้วยคำสั่ง fastlane match adhoc --force ซึ่งจะสร้างโปรไฟล์ใหม่โดยคำนึงถึงอุปกรณ์ใหม่ ใบรับรอง Apple Developer มีอายุหนึ่งปี หลังจากนั้น build ที่ใช้ใบรับรองเหล่านี้จะถูกปฏิเสธโดย App Store Connect Match จะแจ้งเตือนเมื่อใกล้หมดอายุ 30 วันก่อนวันที่กำหนด
เมื่อเกิดข้อผิดพลาด “Multiple matches found for...” แสดงว่าใน repository มีใบรับรองเดียวกันหลายเวอร์ชัน ให้ใช้คำสั่ง fastlane match nuke เพื่อล้าง repository และลบใบรับรองทั้งหมดออกจาก Apple Developer Portal หลังจากล้างแล้ว ให้สร้างใหม่ตั้งแต่ต้น ซึ่งจะรับประกันสถานะโปรไฟล์ที่สอดคล้องกันโดยไม่มีรายการซ้ำหรือเวอร์ชันที่ขัดแย้งกัน
คำถามที่พบบ่อย
Match ใช้ OpenSSL ด้วยอัลกอริทึม AES-256-CBC เพื่อเข้ารหัสไฟล์ใบรับรองแต่ละไฟล์ก่อนบันทึกลงใน Git คีย์การเข้ารหัสถูกสร้างจากวลีรหัสผ่าน MATCH_PASSWORD แม้ในกรณีที่ repository สามารถเข้าถึงได้แบบสาธารณะ ใบรับรองจะยังคงไม่สามารถเข้าถึงได้หากไม่มีรหัสผ่าน
ไม่ Match ต้องใช้ Git repository ในการจัดเก็บใบรับรองที่เข้ารหัส อย่างไรก็ตาม repository สามารถเป็นแบบโลคัลได้หากไม่จำเป็นต้องซิงค์ระหว่างเครื่อง ในกรณีนี้ พารามิเตอร์ git_url จะระบุ พาธในเครื่อง ไปยังไดเรกทอรีบนระบบไฟล์แทน URL ของ repository ระยะไกล
ความขัดแย้งเกิดขึ้นเมื่อนักพัฒนาสองคนสร้างใบรับรองที่แตกต่างกันพร้อมกัน วิธีแก้ไขคือใช้คำสั่ง fastlane match nuke เพื่อล้างใบรับรองทั้งหมดใน repository และใน Apple Developer Portal หลังจากล้างแล้ว นักพัฒนาคนหนึ่งดำเนินการสร้างตั้งแต่ต้นและซิงค์ผ่าน Git
Match จะตรวจพบใบรับรองที่หมดอายุโดยอัตโนมัติเมื่อเริ่มต้นและเสนอให้เปลี่ยนใหม่ สำหรับการต่ออายุแบบบังคับ ให้รัน fastlane match [type] --force คำสั่งนี้จะสร้างใบรับรองและโปรไฟล์ของประเภทที่ระบุใหม่ แม้ว่าใบรับรองที่มีอยู่จะยังคงใช้งานได้ ซึ่งมีประโยชน์เมื่อทีมนักพัฒนาเปลี่ยนแปลง
การจัดการด้วยตนเองจำเป็นต้องสร้างใบรับรองผ่าน Xcode หรือ Developer Portal สำหรับแต่ละเครื่องแยกกัน Match จะรวมศูนย์การจัดเก็บ เข้ารหัสข้อมูล ซิงค์ระหว่างนักพัฒนาและ CI/CD และตรวจสอบความถูกต้องและวันหมดอายุของลายเซ็นทั้งหมดโดยอัตโนมัติโดยไม่ต้องใช้คนดำเนินการ
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม