เผยแพร่บิลด์ของ iOS รุ่นทดลองได้เร็วขึ้นด้วย App Distribution และ Fastlane

1. ก่อนเริ่มต้น

4cddd34bd261cea0.png

ใน Codelab นี้ คุณจะได้เรียนรู้วิธีใช้ Firebase App Distribution และปลั๊กอิน fastlane เพื่อเผยแพร่แอป iOS ให้แก่ผู้ทดสอบ รวบรวม UDID ของอุปกรณ์ทดสอบ และลงทะเบียนไปยังโปรไฟล์การจัดสรรของแอป เพื่อให้คุณสร้าง Ad Hoc ไปสู่ผู้ทดสอบได้อย่างรวดเร็ว มือ

สิ่งที่คุณจะได้เรียนรู้

  • วิธีอัปโหลดและเผยแพร่แอป iOS รุ่นทดลอง (Ad Hoc) ให้กับผู้ทดสอบโดยใช้ Firebase App Distribution และ fastlane
  • วิธีลงชื่อสมัครเป็นผู้ทดสอบและดาวน์โหลดแอปที่จัดจำหน่ายในอุปกรณ์ทดสอบ
  • วิธีลงทะเบียนอุปกรณ์ทดสอบอย่างรวดเร็วโดยการส่งออก UDID ของอุปกรณ์ทดสอบด้วยปลั๊กอิน fastlane ของ App Distribution
  • วิธีอัปเดตโปรไฟล์การจัดสรรของแอปและอัปโหลดอีกครั้งเพื่อการเผยแพร่

สิ่งที่ต้องมี

  • บัญชี Google
  • เครื่อง Apple ที่ติดตั้ง XCode 11.7 ขึ้นไป
  • แอป Ad Hoc รุ่นทดลองของ iOS ในตัว Xcode
  • บัญชีนักพัฒนาแอป Apple แบบชำระเงิน
  • อุปกรณ์ iOS จริงสำหรับการทดสอบ

แอปเครื่องจำลอง iOS จะใช้งานได้ใน Codelab ส่วนใหญ่ แต่เครื่องจำลองจะดาวน์โหลดรุ่นไม่ได้

คุณยังสามารถยืนยันว่าการตั้งค่าทำงานได้โดยยืนยันว่าการตั้งค่า "ดาวน์โหลด" จะปรากฏในเว็บแอปของผู้ทดสอบ App Distribution

2. เริ่มต้นใช้งาน

ตั้งค่า fastlane

App Distribution ทำงานร่วมกับ fastlane เพื่อให้คุณเผยแพร่บิลด์รุ่นทดลองของแอปได้โดยอัตโนมัติ App Distribution ผสานรวมกับการกำหนดค่า Fastlane

  1. ติดตั้งและตั้งค่า fastlane
  2. เรียกใช้ fastlane init ในไดเรกทอรีรูทของโปรเจ็กต์ระหว่างการตั้งค่า แล้วเลือก "การตั้งค่าด้วยตนเอง" คุณจะเห็นไดเรกทอรีย่อย fastlane ที่มี Fastfile, Appfile และ Pluginfile ซึ่งคุณจะใช้เพื่อกำหนดค่า fastlane

ติดตั้ง Firebase CLI

คุณจะต้องติดตั้ง Firebase CLI ด้วย หากคุณใช้ macOS หรือ Linux คุณสามารถเรียกใช้คำสั่ง cURL ต่อไปนี้

curl -sL https://firebase.tools | bash

หากใช้ Windows โปรดอ่านวิธีการติดตั้งเพื่อรับไบนารีแบบสแตนด์อโลนหรือติดตั้งผ่าน npm

เมื่อติดตั้ง CLI แล้ว การเรียกใช้ firebase --version ควรรายงานเวอร์ชัน 12.0.0 ขึ้นไป

$ firebase --version
12.0.0

3. สร้างแอปด้วย Fastlane

สร้างแอป

  1. ตั้งค่าตัวแปรร่วมสำหรับ fastlane ใน ./fastlane/Appfile. ให้รวมรหัสของแอปและ Apple ID ดังนี้
app_identifier("<your app's bundle identifier>")
apple_id("<your Apple id>")
  1. สร้างช่องทางแรกและใช้การดำเนินการ build_app ของ fastlane (หรือที่เรียกว่า gym) เพื่อสร้างแอปโดยเพิ่มสิ่งต่อไปนี้ลงใน ./fastlane/Fastfile
default_platform(:ios)

lane :build do
    build_app(export_method: "ad-hoc")
end
  1. รับรองแอปเพื่อเผยแพร่

สำหรับ Codelab นี้ คุณจะจัดการการรับรองและโปรไฟล์ของคุณเองโดยใช้ get_certificates (หรือที่เรียกว่า cert) ซึ่งจะสร้างใบรับรองที่มีการรับรองไว้ในเครื่องและจัดเก็บทุกอย่างไว้ในพวงกุญแจ macOS อย่างไรก็ตาม โดยปกติแล้ว คุณจะต้องใช้ fastlane sync_code_signing action (หรือที่เรียกว่า match) เพื่อจัดการใบรับรองและโปรไฟล์การรับรองโค้ดของทีมอย่างปลอดภัย

lane :build do
    get_certificates()
    build_app(export_method: "ad-hoc")
end
  1. ตั้งค่าโปรไฟล์การจัดสรรสำหรับแอปโดยใช้การดำเนินการ get_provisioning_profile (หรือที่เรียกว่า sigh) การดำเนินการนี้จะช่วยให้คุณแชร์แอปกับผู้ทดสอบได้
lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true)
    build_app(export_method: "ad-hoc")
end
  1. [ไม่บังคับ] หากคุณไม่เคยเรียกใช้แอปมาก่อน ให้เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างแอปใน Apple Developer Console

$ fastlane produce --skip_itc

  1. สุดท้าย ให้สร้างแอปโดยการวิ่งในเลน

ระบบจะแจ้งให้คุณใส่ Apple ID, รหัสผ่าน (ซึ่งจัดเก็บไว้ใน Keychain) และรหัสชุดของแอป

$ fastlane build

หากคุณพบปัญหาใดๆ โปรดดูคู่มือการแก้ปัญหา fastlane

4. อัปโหลดแอปไปยัง Firebase

เมื่อสร้างแอปแล้ว คุณก็พร้อมที่จะอัปโหลดไปยัง App Distribution

สร้างและตั้งค่าโปรเจ็กต์ Firebase

  1. ลงชื่อเข้าใช้ Firebase
  2. ในคอนโซล Firebase ให้สร้างหรือเพิ่มโปรเจ็กต์ใหม่ แล้วตั้งชื่อโปรเจ็กต์ว่า "UDID Export Codelab"

คุณไม่จำเป็นต้องเปิดใช้ Google Analytics สำหรับโปรเจ็กต์นี้

  1. คลิกสร้างโครงการ

เพิ่มแอป iOS ลงในโปรเจ็กต์

  1. คลิกไอคอน iOS เพื่อสร้างแอป Firebase iOS ใหม่แล้วป้อนรหัสชุดของแอป

9c26c130a6c42212.png

  1. ข้ามขั้นตอนถัดไป แล้วคลิกไปที่คอนโซล คุณจะเพิ่ม SDK ลงในแอปภายหลัง

ตอนนี้โปรเจ็กต์และแอปของคุณพร้อมใช้งานแล้วในหน้าภาพรวมโปรเจ็กต์

66f79cc8a97fa8e9.png

เปิดใช้ App Distribution

  1. ภายใต้การเปิดตัวและ คลิก App Distribution จากส่วนตรวจสอบ
  2. หลังจากยอมรับข้อกำหนด ให้คลิก "เริ่มต้นใช้งาน" เพื่อเปิดใช้ App Distribution สำหรับแอปของคุณ

460213326c2784ae.png

ตั้งค่าการกระจายใน fastlane

  1. เรียกใช้คำสั่งต่อไปนี้จากรูทของโปรเจ็กต์ iOS เพื่อเพิ่ม App Distribution ลงในการกำหนดค่า fastlane

หากคําสั่งแสดงตัวเลือก ให้เลือกตัวเลือกที่ 3: RubyGems.org

$ fastlane add_plugin firebase_app_distribution

  1. ยืนยันว่าติดตั้งปลั๊กอินแล้ว

$ fastlane

เอาต์พุตควรแสดง fastlane-plugin-firebase_app_distribution ในรายการปลั๊กอินที่ติดตั้ง

  1. หลังจากยืนยันว่าติดตั้งปลั๊กอินแล้ว ให้เลือกตัวเลือก 0 เพื่อยกเลิก

ตรวจสอบสิทธิ์โปรเจ็กต์ Firebase

หากต้องการใช้ปลั๊กอิน fastlane คุณจะต้องตรวจสอบสิทธิ์โปรเจ็กต์ Firebase ก่อน

  1. เรียกใช้คำสั่งต่อไปนี้เพื่อเชื่อมต่อ CLI กับบัญชี Google ของคุณ

$ firebase login

  1. เมื่อคำสั่งพิมพ์ลิงก์การตรวจสอบสิทธิ์ ให้เปิดลิงก์ในเบราว์เซอร์
  2. เมื่อได้รับข้อความแจ้ง ให้ลงชื่อเข้าใช้บัญชี Google และให้สิทธิ์เข้าถึงโปรเจ็กต์ Firebase

จัดจำหน่ายแอปของคุณ

ตอนนี้คุณพร้อมจัดจำหน่ายแอปแล้ว

  1. กำหนดตัวแปรชื่อ firebase_app_id ที่ด้านบนของ ./fastlane/Fastfile แทนที่ <your_app_id> ด้วยรหัสแอป Firebase สำหรับแอปที่คุณสร้าง (ดูได้ในหน้าการตั้งค่าโปรเจ็กต์)

Fastfile เขียนด้วยภาษา Ruby ดังนั้นให้ใช้ไวยากรณ์ Ruby เพื่อกำหนดตัวแปร

firebase_app_id = "<your_app_id>"
  1. เพิ่มเลนใหม่ที่เรียกว่า distribute ซึ่งเรียกเลนที่ก่อสร้าง จากนั้นจะกระจายแอปของคุณโดยใช้การดำเนินการ firebase_app_distribution
lane :distribute do
    build
    firebase_app_distribution(
        app: firebase_app_id,
        release_notes: "Try out this app!",
    )
end
  1. เรียกใช้ช่องทางใหม่เพื่อสร้างแอปและสร้างการจัดจำหน่าย

$ fastlane distribute

ในขั้นตอนนี้ Fastfile ควรมีลักษณะดังต่อไปนี้

firebase_app_id = "<your Firebase app ID>"

default_platform(:ios)

lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true)
    build_app(export_method: "ad-hoc")
end

lane :distribute do
    build
    firebase_app_distribution(
        app: firebase_app_id,
        release_notes: "Try out this app!",
    )
end

หลังจากรีเฟรชคอนโซล Firebase แล้ว คุณจะเห็นแอปรุ่นใหม่

c59dc1a94de3bf3c.png

5. เชิญผู้ทดสอบให้ดาวน์โหลดแอป

เมื่อผู้ทดสอบยอมรับคำเชิญให้ทดสอบบิลด์ Ad Hoc ผู้ทดสอบก็จะต้องขออนุญาตแชร์ UDID ของตน หากนักพัฒนาแอปยอมรับ App Distribution จะเก็บรวบรวมข้อมูลอุปกรณ์และแจ้งให้คุณทราบทางอีเมล ในส่วนนี้ คุณจะต้องเพิ่มตนเองเป็นผู้ทดสอบเพื่อดาวน์โหลดและทดสอบแอปที่คุณเผยแพร่

เพิ่มตัวคุณเองเป็นผู้ทดสอบรุ่น

  1. ในส่วน firebase_app_id ที่ด้านบนของ Fastfile ให้สร้างตัวแปรเพื่อเก็บผู้ทดสอบและใส่อีเมลของคุณเอง รวมถึงอีเมลที่ไม่บังคับอื่นๆ ที่ต้องการลองใช้
firebase_app_id = "<your Firebase app ID>"
app_testers = [
  "your@email.com",
  "another@email.com",
]
  1. ใช้วิธี Array#join ของ Ruby เพื่อเปลี่ยนอาร์เรย์ app_testers เป็นสตริงที่คั่นด้วยคอมมา ซึ่งพารามิเตอร์ testers ต้องการ จากนั้น ส่งผลลัพธ์ไปยังพารามิเตอร์ testers ของ firebase_app_distribution.
lane :distribute do
    build
    firebase_app_distribution(
        app: firebase_app_id,
        release_notes: "Try out this app!"
        testers: app_testers.join(","),
    )
end

ในขั้นตอนนี้ Fastfile ควรมีลักษณะดังนี้

firebase_app_id = "<your Firebase app ID>"
app_testers = [
  "your@email.com",
  "another@email.com",
]

default_platform(:ios)

lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true)
    build_app(export_method: "ad-hoc")
end

lane :distribute do
    build
    firebase_app_distribution(
        app: firebase_app_id,
        release_notes: "Try out this app!",
        testers: app_testers.join(","),
    )
end
  1. วิ่งเลนอีกครั้ง

$ fastlane distribute

เมื่อเรียกใช้ช่องทางแล้ว ผู้ทดสอบที่เพิ่มไว้จะได้รับอีเมลคำเชิญจาก App Distribution ที่แจ้งให้ผู้ทดสอบทราบเกี่ยวกับรุ่นใหม่ ตอนนี้คอนโซล Firebase จะแสดงผู้ทดสอบที่เพิ่มไว้ภายใต้รุ่นของแอป

2e0fc9603b868af8.png

เนื่องจากคุณใส่อีเมลไว้ด้วย คุณจะได้รับอีเมลจาก Firebase App Distribution ที่เชิญให้คุณทดสอบแอป ตอนนี้คุณเป็นผู้ทดสอบคนแรกแล้ว ดำเนินการต่อในส่วนด้านล่างเพื่อเพื่อตั้งค่าเป็นผู้ทดสอบในอุปกรณ์ทดสอบ

ลงทะเบียนอุปกรณ์ทดสอบ

ในฐานะผู้ทดสอบ คุณจะต้องลงชื่อเข้าใช้ Google ในอุปกรณ์ทดสอบเพื่อเข้าถึงรุ่นต่างๆ ของแอปที่ได้รับเชิญให้ทดสอบ เนื่องจากบิลด์ทดสอบเป็นรุ่นเฉพาะกิจ คุณจึงต้องลงทะเบียนอุปกรณ์ทดสอบด้วยการติดตั้งโปรไฟล์ Firebase หลังจากนั้น คุณจะเข้าถึงรุ่นที่พร้อมใช้งานได้จากเว็บแอปสำหรับทดสอบ App Distribution โดยใช้เว็บคลิปที่เพิ่มลงในหน้าจอหลักของอุปกรณ์

  1. ในอุปกรณ์ทดสอบ iOS ให้เปิดอีเมลที่ส่งจาก Firebase App Distribution แล้วแตะลิงก์เริ่มต้นใช้งาน ตรวจสอบว่าได้เปิดลิงก์ใน Safari
  2. ตอนนี้คุณอยู่ในเว็บแอปสำหรับผู้ทดสอบ App Distribution แล้ว ในหน้าที่ปรากฏขึ้น ให้ลงชื่อเข้าใช้ด้วยบัญชี Google แล้วแตะยอมรับคำเชิญ

d833407de251b89f.png

  1. คุณจะดูผลงานที่ได้รับเชิญได้แล้ว แตะลงทะเบียนอุปกรณ์ใต้รุ่นใดรุ่นหนึ่ง

FD141215e54a938d.png

  1. เมื่อได้รับข้อความแจ้ง ให้ดาวน์โหลดโปรไฟล์ Firebase จากนั้นติดตั้งโปรไฟล์ในแอปการตั้งค่า

การติดตั้งโปรไฟล์จะเป็นการให้สิทธิ์ Firebase ในการทำสิ่งต่อไปนี้

  • ลงทะเบียนอุปกรณ์ทดสอบโดยรวบรวมรหัสอุปกรณ์ที่ไม่ซ้ำกัน (UDID) ของอุปกรณ์

Firebase จะส่งอีเมลที่มี UDID ของอุปกรณ์ทดสอบให้แก่เจ้าของและผู้แก้ไขทั้งหมดของโปรเจ็กต์ Firebase

  • ติดตั้งเว็บคลิปลงในหน้าจอหลักของอุปกรณ์ทดสอบ เว็บคลิปจะเปิดเว็บแอปของผู้ทดสอบ App Distribution ซึ่งช่วยให้คุณติดตั้งและเข้าถึงแอปทดสอบทั้งหมดได้

ในเว็บแอปของผู้ทดสอบ App Distribution ระบบจะลงทะเบียนอุปกรณ์ทดสอบสำหรับรุ่นของแอปแล้ว

fe93d649dfa25877.png

เมื่อแชร์ UDID ของอุปกรณ์ทดสอบกับ Firebase แล้ว คุณจะกลับมาเป็นนักพัฒนาซอฟต์แวร์ต่อได้ ในแท็บผู้ทดสอบของแดชบอร์ด App Distribution ตอนนี้ข้อมูลผู้ทดสอบของคุณจะปรากฏใต้รุ่นของแอปโดยมีสถานะเป็น "ยอมรับแล้ว" ดังนี้

7b9f665a63a384cf.png

ในหัวข้อถัดไป คุณจะต้องเพิ่ม UDID ของอุปกรณ์ลงในโปรไฟล์การจัดสรรของแอป แล้วสร้างแอปเวอร์ชันที่ใช้งานได้กับอุปกรณ์ทดสอบของคุณ

ส่งออก UDID ของอุปกรณ์สำหรับผู้ทดสอบ

ในฐานะนักพัฒนาซอฟต์แวร์ คุณจะได้รับอีเมลจาก Firebase ที่มี UDID ของอุปกรณ์ทดสอบ App Distribution ช่วยให้รวบรวม UDID ของอุปกรณ์ใหม่หลายรายการพร้อมกันได้อย่างง่ายดาย โดยให้คุณส่งออกเป็นไฟล์ข้อความดิบจากคอนโซล Firebase ได้โดยตรง

  1. หากต้องการส่งออก UDID ทั้งหมด ให้เปิดผู้ทดสอบและ Groups

241a9936898a2fc0.png

  1. คลิก ส่งออก UDID ของ Apple

bcf0c26c522d9b4e.png

ไฟล์ควรมี UDID ของอุปกรณ์ทดสอบ

Device ID            Device Name                            Device Platform
1234567890     udid.codelab.tester@gmail.com - iPhone SE 2nd Gen        ios

คุณยังส่งออก UDID จากบรรทัดคำสั่งโดยใช้ fastlane ได้ด้วย ซึ่งจะทำในส่วนถัดไป

6. อัปเดตโปรไฟล์การจัดสรรของแอปและสร้างโปรไฟล์ใหม่

จากนี้ไปให้คุณเพิ่ม UDID ของอุปกรณ์ทดสอบลงในโปรไฟล์การจัดสรรของแอป สร้างแอปเวอร์ชันที่ใช้ได้กับอุปกรณ์ของคุณอีกครั้ง และเผยแพร่แอปเวอร์ชันใหม่

เพิ่มช่องทางการส่งออก UDID

  1. เพิ่มตัวแปรอีกตัวหนึ่งที่ด้านบนของ Fastfile แล้วตั้งค่าเป็นเส้นทางไฟล์ที่ผู้ทดสอบ UDID ของอุปกรณ์จะดาวน์โหลด
firebase_app_id = "<your Firebase app ID>"
app_testers = [
  "your@email.com",
  "another@email.com",
]
tester_udids_file = "tester_udids.txt"
  1. ตั้งค่าช่องทางใหม่ที่ใช้การส่งออก UDID ของปลั๊กอิน App Distribution เพื่อดาวน์โหลด UDID ของผู้ทดสอบ เช่นเดียวกับที่คุณทำจากคอนโซล
lane :download_udids do
    firebase_app_distribution_get_udids(
        app: firebase_app_id,
        output_file: tester_udids_file,
    )
end
  1. เรียกใช้ช่องทางต่อไปนี้เพื่อดาวน์โหลด UDID

$ fastlane download_udids

  1. พิมพ์ไฟล์ที่ดาวน์โหลด ซึ่งควรมี UDID ของอุปกรณ์ทดสอบ

$ cat tester_udids.txt

เพิ่มอุปกรณ์ลงในคอนโซลของนักพัฒนาซอฟต์แวร์ Apple

  1. สร้างช่องทางต่อไปนี้เพื่อเพิ่ม UDID ไปยังรายการอุปกรณ์ใน Play Console ของ Apple เพื่อให้เพิ่ม UDID ดังกล่าวลงในโปรไฟล์การจัดสรรได้โดยใช้การดําเนินการ fastlane register_devices ดังนี้
lane :add_new_devices do
    register_devices(devices_file: tester_udids_file)
end
  1. จากนั้น ให้วิ่งบนเลน:

$ fastlane add_new_devices

จากนั้นคุณควรเห็นอุปกรณ์ใหม่ในรายการอุปกรณ์ของแผงควบคุมสำหรับนักพัฒนาซอฟต์แวร์

เพิ่มอุปกรณ์ลงในโปรไฟล์การจัดสรร

  1. เพิ่มอาร์กิวเมนต์ force ในขั้นตอนโปรไฟล์การจัดสรรในช่องทาง build เพื่อบังคับให้อุปกรณ์รับอุปกรณ์ใหม่ทุกครั้งที่คุณสร้าง
lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true, force: true)
    build_app(export_method: "ad-hoc")
end

วิ่งอีกครั้งเพื่อสร้างและอัปโหลด

ในตอนนี้ คุณจะต้องอัปเดตเลนของ distribute ด้วยช่องทางใหม่เพื่อเพิ่มอุปกรณ์ลงในโปรไฟล์การจัดสรร สร้างแอปอีกครั้ง แล้วเผยแพร่

  1. เรียกช่องทางใหม่จาก distribute:
lane :distribute do
    download_udids
    add_new_devices
    build
    firebase_app_distribution(
        app: "1:123456789:ios:abcd1234",
        release_notes: "Try out this app!"
        testers: app_testers.join(","),
    )
end
  1. เรียกใช้เลน distribute:

$ fastlane distribute

ในขั้นตอนนี้ Fastfile ควรมีลักษณะดังนี้

firebase_app_id = "<your Firebase app ID>"
app_testers = [
  "your@email.com",
  "another@email.com",
]
tester_udids_file = "tester_udids.txt"

default_platform(:ios)

lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true, force: true)
    build_app(export_method: "ad-hoc")
end

lane :distribute do
    download_udids
    add_new_devices
    build
    firebase_app_distribution(
        app: firebase_app_id,
        release_notes: "Try out this app!",
        testers: app_testers.join(","),
    )
end

lane :download_udids do
    firebase_app_distribution_get_udids(
        app: firebase_app_id,
        output_file: tester_udids_file,
    )
end

lane :add_new_devices do
    register_devices(devices_file: tester_udids_file)
end

ดาวน์โหลดรุ่นจากอุปกรณ์ทดสอบ

เมื่อแอปของคุณมี UDID ของอุปกรณ์ทดสอบแล้ว ก็จะติดตั้งแอปในอุปกรณ์ทดสอบได้

E275f73d57cc8fb1.png

  1. ในอุปกรณ์ทดสอบ ให้กลับไปที่เว็บแอปสำหรับผู้ทดสอบ App Distribution โดยใช้ลิงก์ในอีเมลหรือไอคอนบนหน้าจอหลักของอุปกรณ์

เมื่อไปที่แอป UDID Codelab คุณจะเห็นว่ารุ่นพร้อมให้ดาวน์โหลดแล้ว

dad6d03b6ad78746.png

  1. หากใช้อุปกรณ์จริง ให้กดดาวน์โหลด แล้วติดตั้งและเรียกใช้แอป

7. ขอแสดงความยินดี

คุณได้กำหนดค่า App Distribution และ fastlane เพื่อดำเนินกระบวนการทดสอบรุ่นทดลองโดยอัตโนมัติแล้ว ตอนนี้เมื่อต้องการเชิญผู้ทดสอบเพิ่มเติมหรือเพิ่ม UDID ลงในแอป คุณเพียงแค่เรียกใช้คำสั่งเดียวคือ fastlane distribute

ไม่ต้องเก็บข้อมูล UDID แยกจากผู้ทดสอบทีละรายการ หรือไม่ก็ไปที่ Play Console ของ Apple เพื่ออัปเดตรายการอุปกรณ์หรือโปรไฟล์การจัดสรรอีกต่อไป โดยไม่จำเป็นต้องเปิด XCode

เวิร์กโฟลว์นี้ง่ายต่อการตั้งค่าให้ทำงานทุกชั่วโมงหรือทุกวันในสภาพแวดล้อมการผสานรวมอย่างต่อเนื่อง

อ่านเพิ่มเติม