เผยแพร่แอป iOS ให้ผู้ทดสอบโดยใช้ Fastlane

คุณสามารถเผยแพร่บิลด์ไปยังผู้ทดสอบได้โดยใช้ fastlane ซึ่งเป็นแพลตฟอร์มโอเพนซอร์สที่ช่วยทำให้การสร้างและเผยแพร่แอป iOS และ Android เป็นไปโดยอัตโนมัติ โดยจะทำตามวิธีการง่ายๆ ที่กำหนดไว้ใน Fastfile หลังจากตั้งค่า fastlane และ Fastfile แล้ว คุณจะผสานรวม App Distribution กับการกำหนดค่า fastlane ได้

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

  1. เพิ่ม Firebase ลงในโปรเจ็กต์ Apple หากยังไม่ได้เพิ่ม

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

  2. เปิดหน้าApp Distributionของคอนโซล Firebase เลือกโปรเจ็กต์ Firebase เมื่อได้รับแจ้ง เลือก แอปโดยใช้ตัวสลับแอป แล้วคลิกเริ่มต้นใช้งาน

ขั้นตอนที่ 1 ตั้งค่า Fastlane

  1. ติดตั้งและตั้งค่า Fastlane

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

    fastlane add_plugin firebase_app_distribution

    หากคำสั่งแจ้งให้คุณเลือกตัวเลือก ให้เลือก Option 3: RubyGems.org

ขั้นตอนที่ 2 ตรวจสอบสิทธิ์ด้วย Firebase

ก่อนที่จะใช้ปลั๊กอิน fastlane ได้ คุณต้องตรวจสอบสิทธิ์กับโปรเจ็กต์ Firebase ด้วยวิธีใดวิธีหนึ่งต่อไปนี้ก่อน โดยค่าเริ่มต้น ปลั๊กอิน fastlane จะค้นหาข้อมูลเข้าสู่ระบบจาก Firebase CLI หากไม่มีการใช้วิธีการตรวจสอบสิทธิ์อื่นๆ

ขั้นตอนที่ 3 ตั้งค่า Fastfile และเผยแพร่แอป

  1. ในเลน ./fastlane/Fastfile ให้เพิ่มบล็อก firebase_app_distribution ใช้พารามิเตอร์ต่อไปนี้เพื่อ กำหนดค่าการจัดจำหน่าย
    พารามิเตอร์ firebase_app_distribution
    app

    ต้องระบุในกรณีที่แอปไม่มีไฟล์การกำหนดค่า Firebase (GoogleService-Info.plist): รหัสแอป Firebase ของแอป คุณ ดูรหัสแอปได้ในFirebaseคอนโซลที่ หน้าการตั้งค่าทั่วไป

    app: "1:1234567890:ios:0a1b2c3d4e5f67890"
    googleservice_info_plist_path

    เส้นทางไปยังไฟล์ GoogleService-Info.plist โดยสัมพันธ์กับเส้นทางผลิตภัณฑ์ที่เก็บไว้ ตั้งค่าเป็น GoogleService-Info.plist โดยค่าเริ่มต้น

    ระบบจะใช้ไฟล์นี้เพื่อรับรหัสแอป Firebase ของแอปหากไม่ได้ระบุพารามิเตอร์ app

    firebase_cli_token

    โทเค็นการรีเฟรชที่พิมพ์เมื่อคุณตรวจสอบสิทธิ์สภาพแวดล้อม CI ด้วย Firebase CLI (อ่าน ใช้ CLI กับระบบ CI เพื่อดูข้อมูลเพิ่มเติม)

    service_credentials_file

    เส้นทางไปยังไฟล์ JSON ของบัญชีบริการ Google ดูวิธีตรวจสอบสิทธิ์โดยใช้ข้อมูลเข้าสู่ระบบบัญชีบริการได้ที่ด้านบน

    ipa_path

    แทนที่ apk_path (เลิกใช้งานแล้ว) เส้นทางสัมบูรณ์ไปยัง ไฟล์ IPA ที่ต้องการอัปโหลด หากไม่ได้ระบุ fastlane จะกำหนดตำแหน่งของไฟล์จากเลน ที่สร้างไฟล์

    release_notes
    release_notes_file

    บันทึกประจำรุ่นสำหรับบิลด์นี้

    คุณระบุหมายเหตุประจำรุ่นได้โดยตรงดังนี้

    release_notes: "Text of release notes"

    หรือระบุเส้นทางไปยังไฟล์ข้อความธรรมดา

    release_notes_file: "/path/to/release-notes.txt"
    testers
    testers_file

    อีเมลของผู้ทดสอบที่คุณต้องการเชิญ

    คุณระบุผู้ทดสอบเป็นรายการอีเมลที่คั่นด้วยคอมมาได้โดยทำดังนี้

    testers: "ali@example.com, bri@example.com, cal@example.com"

    หรือจะระบุเส้นทางไปยังไฟล์ข้อความธรรมดาที่มี รายการอีเมลที่คั่นด้วยคอมมาก็ได้

    testers_file: "/path/to/testers.txt"
    groups
    groups_file

    กลุ่มผู้ทดสอบที่คุณต้องการเชิญ (ดูจัดการผู้ทดสอบ) โดยจะระบุกลุ่มโดยใช้ชื่อแทนกลุ่ม ซึ่งคุณสามารถ ค้นหาได้ในคอนโซล Firebase

    คุณระบุกลุ่มเป็นรายการที่คั่นด้วยคอมมาได้ดังนี้

    groups: "qa-team, trusted-testers"

    หรือจะระบุเส้นทางไปยังไฟล์ข้อความธรรมดาที่มี รายการชื่อกลุ่มที่คั่นด้วยคอมมาก็ได้

    groups_file: "/path/to/groups.txt"
    test_devices
    test_devices_file

    อุปกรณ์ทดสอบที่คุณต้องการเรียกใช้การทดสอบตัวแทนการทดสอบแอป

    คุณระบุอุปกรณ์ทดสอบเป็นรายการข้อมูลจำเพาะของอุปกรณ์ที่คั่นด้วยเครื่องหมายอัฒภาคได้ดังนี้

    test_devices: "model=shiba,version=34,locale=en,orientation=portrait"

    หรือจะระบุเส้นทางไปยังไฟล์ข้อความธรรมดาที่มีรายการอุปกรณ์ทดสอบซึ่งคั่นด้วยเครื่องหมายอัฒภาคก็ได้ โดยทำดังนี้

    test_devices_file: "/path/to/test-devices.txt"
    test_username

    ชื่อผู้ใช้สำหรับการเข้าสู่ระบบอัตโนมัติที่จะใช้ระหว่างการทดสอบตัวแทนการทดสอบแอป

    test_password
    test_password_file

    รหัสผ่านสำหรับการเข้าสู่ระบบอัตโนมัติที่จะใช้ระหว่างการทดสอบตัวแทนการทดสอบแอป

    หรือจะระบุเส้นทางไปยังไฟล์ข้อความธรรมดาที่มีรหัสผ่านก็ได้ โดยทำดังนี้

    test_password_file: "/path/to/test-password.txt"
    test_username_resource

    ชื่อทรัพยากรของช่องชื่อผู้ใช้สำหรับการเข้าสู่ระบบอัตโนมัติที่จะใช้ระหว่างการทดสอบตัวแทนการทดสอบแอป

    test_password_resource

    ชื่อทรัพยากรสำหรับช่องรหัสผ่านสำหรับการเข้าสู่ระบบอัตโนมัติที่จะใช้ในระหว่างการทดสอบตัวแทนการทดสอบแอป

    test_non_blocking

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

    debug

    แฟล็กบูลีน คุณตั้งค่านี้เป็น true เพื่อพิมพ์เอาต์พุตการแก้ไขข้อบกพร่องแบบละเอียดได้

เช่น

platform :ios do
    desc "My awesome app"
    lane :distribute do
        build_ios_app(...)
        # build_ios_app is a built-in fastlane action.

        release = firebase_app_distribution(
            app: "1:123456789:ios:abcd1234",
            testers: "tester1@company.com, tester2@company.com",
            release_notes: "Lots of amazing new features to test out!"
        )

    end
end

หากต้องการทำให้ผู้ทดสอบใช้บิลด์ได้ ให้เรียกใช้เลนของคุณโดยทำดังนี้

fastlane <lane>

ค่าที่ส่งคืนของการดำเนินการคือแฮชที่แสดงถึงผลงานที่อัปโหลด แฮชนี้ยังใช้ได้โดยใช้ lane_context[SharedValues::FIREBASE_APP_DISTRO_RELEASE] ดูข้อมูลเพิ่มเติมเกี่ยวกับฟิลด์ที่ใช้ได้ในแฮชนี้ได้ในเอกสารประกอบเกี่ยวกับ REST API

ปลั๊กอิน fastlane จะแสดงลิงก์ต่อไปนี้หลังจากอัปโหลดรุ่น ลิงก์เหล่านี้จะช่วยให้คุณจัดการไบนารีและตรวจสอบว่าผู้ทดสอบและนักพัฒนาแอปคนอื่นๆ มีรุ่นที่ถูกต้อง

  • ลิงก์ไปยังFirebaseคอนโซลที่แสดง รุ่นเดียว คุณสามารถแชร์ลิงก์นี้กับนักพัฒนาแอปคนอื่นๆ ในองค์กรได้
  • ลิงก์ไปยังรุ่นในประสบการณ์การใช้งานของผู้ทดสอบ (เว็บคลิป iOS) ซึ่งช่วยให้ผู้ทดสอบดูหมายเหตุประจำรุ่นและติดตั้งแอป ในอุปกรณ์ของตนได้ ผู้ทดสอบต้องมีสิทธิ์เข้าถึงรุ่นจึงจะใช้ลิงก์ได้
  • ลิงก์ที่ลงนามแล้วซึ่งดาวน์โหลดและ ติดตั้งไบนารีของแอป (ไฟล์ IPA) โดยตรง ลิงก์จะหมดอายุหลังจาก 1 ชั่วโมง

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

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

(ไม่บังคับ) หากต้องการเพิ่มหมายเลขบิลด์โดยอัตโนมัติทุกครั้งที่สร้าง รุ่นใหม่ใน App Distribution คุณสามารถใช้firebase_app_distribution_get_latest_releaseการดำเนินการและincrement_build_numberการดำเนินการ โค้ดต่อไปนี้แสดงตัวอย่างวิธีเพิ่มหมายเลขบิลด์โดยอัตโนมัติ

lane :increment_version do
  latest_release = firebase_app_distribution_get_latest_release(
    app: "<your Firebase app ID>"
  )
  increment_build_number({ build_number: latest_release[:buildVersion].to_i + 1 })
end

ดูข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์ปลั๊กอิน fastlane นี้ได้ที่รับข้อมูลเกี่ยวกับรุ่นล่าสุดของแอป

ขั้นตอนที่ 4 (ไม่บังคับ) จัดการผู้ทดสอบสำหรับการเผยแพร่

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

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

หากมีผู้ทดสอบจำนวนมาก คุณควรพิจารณาใช้กลุ่ม

ใช้ Fastfile

# Use lanes to add or remove testers from a project.
lane(:add_testers) do
  firebase_app_distribution_add_testers(
    emails: "foo@google.com,bar@google.com"
    # or file: "/path/to/testers.txt"
    group_alias: "qa-team" # (Optional) add testers to this group
  )
end

lane(:remove_testers) do
  firebase_app_distribution_remove_testers(
    emails: "foo@google.com,bar@google.com"
    # or file: "/path/to/testers.txt"
    group_alias: "qa-team" # (Optional) remove testers from this group only
  )
end
# Add or remove testers with the terminal
$ fastlane add_testers
$ fastlane remove_testers

เรียกใช้การดำเนินการ fastlane

fastlane run firebase_app_distribution_create_group display_name:"QA Team" alias:"qa-team"
fastlane run firebase_app_distribution_add_testers group_alias:"qa-team" emails:"foo@google.com,bar@google.com"
fastlane run firebase_app_distribution_remove_testers group_alias:"qa-team" emails:"foo@google.com,bar@google.com"
fastlane run firebase_app_distribution_delete_group alias:"qa-team"

นอกจากนี้ คุณยังระบุผู้ทดสอบโดยใช้ --file="/path/to/testers.txt แทน --emails ได้ด้วย

งาน firebase_app_distribution_add_testers และ firebase_app_distribution_remove_testers ยังยอมรับอาร์กิวเมนต์ต่อไปนี้ด้วย

  • project_number: หมายเลขโปรเจ็กต์ Firebase
  • group_alias (ไม่บังคับ): หากระบุ ผู้ทดสอบจะถูกเพิ่ม (หรือนำออก) จากกลุ่มที่ระบุ
  • service_credentials_file: เส้นทางไปยังไฟล์ข้อมูลเข้าสู่ระบบของบริการ Google
  • firebase_cli_token: โทเค็นการตรวจสอบสิทธิ์สำหรับ Firebase CLI

service_credentials_file และ firebase_cli_token คืออาร์กิวเมนต์เดียวกันกับที่ใช้ในการดำเนินการอัปโหลด

ขั้นตอนที่ 5 (ไม่บังคับ) ดูข้อมูลเกี่ยวกับรุ่นล่าสุดของแอป

คุณสามารถใช้firebase_app_distribution_get_latest_releaseการดำเนินการ เพื่อดึงข้อมูลเกี่ยวกับรุ่นล่าสุดของแอปใน App Distribution ซึ่งรวมถึงข้อมูลเวอร์ชันของแอป บันทึกประจำรุ่น และเวลาที่สร้าง กรณีการใช้งาน รวมถึงการเพิ่มเวอร์ชันโดยอัตโนมัติและการนำบันทึกประจำรุ่น จากรุ่นก่อนหน้ามาใช้

ค่าที่ส่งคืนของการดำเนินการคือแฮชที่แสดงถึงรุ่นล่าสุด แฮชนี้ยังใช้ได้โดยใช้ lane_context[SharedValues::FIREBASE_APP_DISTRO_LATEST_RELEASE] ดูข้อมูลเพิ่มเติมเกี่ยวกับฟิลด์ที่ใช้ได้ในแฮชนี้ได้ในเอกสารประกอบเกี่ยวกับ REST API

พารามิเตอร์

พารามิเตอร์ firebase_app_distribution_get_latest_release
app

ต้องระบุในกรณีที่แอปไม่มีไฟล์การกำหนดค่า Firebase (GoogleService-Info.plist): รหัสแอป Firebase ของแอป คุณ ดูรหัสแอปได้ในFirebaseคอนโซลที่ หน้าการตั้งค่าทั่วไป

app: "1:1234567890:ios:0a1b2c3d4e5f67890"
googleservice_info_plist_path

เส้นทางไปยังไฟล์ GoogleService-Info.plist โดยสัมพันธ์กับเส้นทางผลิตภัณฑ์ที่เก็บไว้ ตั้งค่าเป็น GoogleService-Info.plist โดยค่าเริ่มต้น

ระบบจะใช้ไฟล์นี้เพื่อรับรหัสแอป Firebase ของแอปหากไม่ได้ระบุพารามิเตอร์ app

firebase_cli_token

โทเค็นการรีเฟรชที่พิมพ์เมื่อคุณตรวจสอบสิทธิ์สภาพแวดล้อม CI ด้วย Firebase CLI (อ่าน ใช้ CLI กับระบบ CI เพื่อดูข้อมูลเพิ่มเติม)

service_credentials_file

เส้นทางไปยังไฟล์ JSON ของบัญชีบริการ Google ดูเอกสารประกอบก่อนหน้านี้เกี่ยวกับวิธี ตรวจสอบสิทธิ์โดยใช้ข้อมูลเข้าสู่ระบบบัญชีบริการ

service_credentials_json_data

เนื้อหาไฟล์ JSON ของบัญชีบริการของ Google ดูเอกสารประกอบก่อนหน้านี้เกี่ยวกับวิธี ตรวจสอบสิทธิ์โดยใช้ข้อมูลเข้าสู่ระบบบัญชีบริการ

debug

แฟล็กบูลีน คุณตั้งค่านี้เป็น true เพื่อพิมพ์เอาต์พุตการแก้ไขข้อบกพร่องแบบละเอียดได้

ขั้นตอนถัดไป