อธิบายการผนวกรวม iOS อย่างต่อเนื่องกับเซิร์ฟเวอร์ Xcode

เผยแพร่แล้ว: 2022-03-11

บทนำ

ก่อนหน้า Xcode 9 การใช้เครื่องมือการรวมอย่างต่อเนื่องของ Apple เป็นกระบวนการที่น่าเบื่อและซับซ้อน ซึ่งจำเป็นต้องซื้อและติดตั้งแอพ macOS Server เพิ่มเติม สิ่งนี้ทำให้นักพัฒนาหลายคนละทิ้งแนวคิดของการผนวกรวมอย่างต่อเนื่องสำหรับโปรเจ็กต์ iOS หรือหันไปใช้โซลูชันของบุคคลที่สาม โดยมีระดับความสำเร็จที่แตกต่างกันอย่างมาก

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

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

หมายเหตุ: บทความนี้ใช้ Xcode 9.4.1 และเน้นที่การพัฒนาแอป iOS แต่ส่วนใหญ่ใช้ได้กับ Xcode 10 (ปัจจุบันมีให้ใช้งานเป็นรุ่นเบต้า 5) และการพัฒนาแอป macOS

การตั้งค่าเซิร์ฟเวอร์ Xcode

นอกเหนือจากการลดความซับซ้อนของกระบวนการผสานการทำงานจริงแล้ว Xcode 9 ยังทำให้ขั้นตอนการตั้งค่าเซิร์ฟเวอร์ Xcode ง่ายขึ้นอีกด้วย

เปิดแอป Xcode บนเครื่อง macOS ที่กำหนดให้เป็นเซิร์ฟเวอร์ CI ของคุณและเปิดการตั้งค่า

ไปที่แท็บสุดท้ายที่เรียกว่า Server & Bots

เครื่องมือการรวมอย่างต่อเนื่อง: สกรีนช็อตของแท็บเซิร์ฟเวอร์ & บ็อต

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

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

Xcode Server และ Bots หลังจากเข้าสู่ระบบสำเร็จ

แค่นั้นแหละ! มาดูบ็อต Xcode กันดีกว่า

วิธีกำหนดค่า Xcode Bots

ตอนนี้ คุณพร้อมที่จะเริ่มกำหนดค่าบอท Xcode ให้ทำงานบนเซิร์ฟเวอร์นี้แล้ว ซึ่งสามารถทำได้บนเครื่องพัฒนาใดๆ ที่เชื่อมต่อกับเครือข่ายเดียวกันกับเซิร์ฟเวอร์

เปิด Xcode บนเครื่องพัฒนาแล้วคลิก Xcode > Preferences จากเมนูด้านบน จากนั้นไปที่แท็บ บัญชี และคลิกที่ไอคอน + ที่มุมล่างซ้าย เลือก Xcode Server จากกล่องโต้ตอบที่ปรากฏขึ้น

สกรีนช็อตของการเลือกประเภทบัญชี

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

การกระจายแอพอัตโนมัติ

หนึ่งในแอปพลิเคชันที่ใช้บ่อยที่สุดของการสร้างแอป iOS แบบอัตโนมัติคือการกำหนดค่าบอทเพื่ออัปโหลดแอปไปยังแพลตฟอร์มการแจกจ่าย iOS เช่น TestFlight, Fabric เป็นต้น

ดังที่ฉันอธิบายไว้ก่อนหน้านี้ บทความนี้จะสำรวจเฉพาะการอัปโหลดไปยัง App Store Connect และการดาวน์โหลดโดยตรงจากเซิร์ฟเวอร์ Xcode ของคุณ เนื่องจากสิ่งเหล่านี้เป็นเครื่องมือดั้งเดิมของ Apple สำหรับการแจกจ่ายแอป iOS

App Store เชื่อมต่อการแจกจ่ายโดยใช้ Xcode

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

ขั้นตอนที่ 1: การตั้งค่าการกำหนดค่าบิวด์ที่ถูกต้องเป็นขั้นตอนสำคัญเพื่อให้ได้สิ่งที่คุณต้องการ ตรวจสอบให้แน่ใจว่าคุณได้เลือกรูปแบบและการกำหนดค่าที่สร้างแอปที่คุณต้องการอัปโหลดไปยัง App Store Connect ซึ่งรวมถึงการตรวจสอบให้แน่ใจว่าการกำหนดค่าบิลด์ใช้บันเดิล id ที่เหมาะสมซึ่งลงทะเบียนไว้ในพอร์ทัล Apple Developer ของทีมคุณ (ใช้สำหรับการลงชื่อรหัส) เช่นเดียวกับในพอร์ทัล App Store Connect ของคุณ (ใช้สำหรับอัปโหลดแอปโดยอัตโนมัติ) .

ขั้นตอนที่ 2: ในขณะที่ยังอยู่บนแท็บ "การกำหนดค่า" เราจำเป็นต้องระบุตัวเลือกการส่งออก เราจะสำรวจรายการคุณสมบัติตัวเลือกการส่งออก ดังนั้นตรวจสอบให้แน่ใจว่าได้เลือก "ใช้ Plist ตัวเลือกการส่งออกแบบกำหนดเอง"

ขั้นตอนที่ 3: ตอนนี้เป็นเวลาที่เราสร้างรายการคุณสมบัติตัวเลือกการส่งออก รายการคีย์ทั้งหมดที่จะใช้ในไฟล์นี้มีให้ใช้งานหากคุณป้อน xcodebuild --help แต่เราจะสำรวจคีย์ที่ใช้ในการกำหนดค่าบอทนี้ที่นี่:

  • compileBitcode – Bitcode เป็นรูปแบบเอาต์พุตระหว่างกาลของ Apple สำหรับซอร์สโค้ดของแอป มันคือรูปแบบที่ซอร์สโค้ดของคุณถูกแปลงก่อนที่จะคอมไพล์เป็นรหัสเครื่องสำหรับสถาปัตยกรรมเฉพาะ มีเป้าหมายที่จะมีคอนเทนเนอร์โค้ดเดียวที่สามารถปรับให้เหมาะสมเพิ่มเติมหากมีการเพิ่มประสิทธิภาพในชุดคำสั่ง และเพื่อให้สามารถคอมไพล์ไปยังสถาปัตยกรรมในอนาคตจากรูปแบบเดียวกันนี้ได้ อย่างไรก็ตาม การดำเนินการนี้ไม่มีผลใดๆ กับการสมัครของคุณ ขึ้นอยู่กับคุณว่าจะเปิดใช้งานหรือไม่
  • method – อาร์กิวเมนต์นี้ระบุชนิดของผลิตภัณฑ์ที่คุณส่งออก Apple แยกแยะผลิตภัณฑ์ตามกลุ่มเป้าหมายที่กำหนด— การพัฒนา อนุญาตให้คุณติดตั้งบนอุปกรณ์ที่ระบุในโปรไฟล์การจัดเตรียมเท่านั้น องค์กร อนุญาตให้ทุกคนติดตั้งได้ แต่พวกเขาจำเป็นต้องเชื่อถือโปรไฟล์การพัฒนานี้อย่างชัดเจนก่อนที่จะเรียกใช้แอพ และ ร้านแอ พมีไว้สำหรับ แจกจ่ายไปยัง App Store หรือ App Store Connect ดังนั้นเราจะใช้ค่านี้
  • provisioningProfiles – นี่เป็นคำอธิบายในตัวเอง แต่มีบางสิ่งที่ควรทราบที่นี่: โปรไฟล์การจัดเตรียมในรายการคุณสมบัติตัวเลือกการส่งออกเป็นพจนานุกรมที่ คีย์ สอดคล้องกับรหัสบันเดิลของผลิตภัณฑ์ และ ค่า ที่สอดคล้องกับชื่อของโปรไฟล์การจัดเตรียมที่ใช้ในการลงนามรหัส
  • signingCertificate – อีกหนึ่งข้อโต้แย้งที่อธิบายตนเองได้ ค่าของฟิลด์นี้สามารถเป็นชื่อใบรับรองแบบเต็มหรือแฮช SHA-1
  • teamID – อีกข้อโต้แย้งที่อธิบายตนเองได้ นี่คือตัวระบุแบบยาว 10 อักขระที่ Apple ออกให้กับองค์กรของคุณเมื่อคุณลงชื่อสมัครใช้โปรแกรม Apple Developer
  • uploadBitcode – ไม่ว่าจะอัปโหลดบิตโค้ดหรือไม่ (หากคุณได้เลือกที่จะคอมไพล์เข้าไป) เพื่อให้สามารถใช้ใน AppStore Connect เพื่อสร้างบิลด์หรือบิลด์ที่ปรับให้เหมาะสมใหม่สำหรับสถาปัตยกรรมในอนาคต
  • uploadSymbols – อัปโหลดสัญลักษณ์การดีบักของคุณ เพื่อให้คุณสามารถรับรายงานข้อขัดข้องที่มีความหมายมากกว่าเพียงแค่การถ่ายโอนข้อมูลหน่วยความจำและแอสเซมบลีสแต็ค

ดังนั้นตอนนี้ รายการคุณสมบัติตัวเลือกการส่งออกของคุณอาจมีลักษณะดังนี้:

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>compileBitcode</key> <false/> <key>method</key> <string>app-store</string> <key>provisioningProfiles</key> <dict> <key>com.bundle.id</key> <string>ProvisioningProfileName</string> </dict> <key>signingCertificate</key> <string>Signing Certificate Exact Name or SHA-1 hash value</string> <key>teamID</key> <string>??????????</string> <key>uploadBitcode</key> <false/> <key>uploadSymbols</key> <true/> </dict> </plist>

ขั้นตอนที่ 4: เลือก .plist ที่คุณสร้างเป็นรายการคุณสมบัติตัวเลือกการส่งออก

ขั้นตอนที่ 5: ถัดไปคือแท็บ "กำหนดการ"—ตั้งค่าตามความต้องการของคุณ

ขั้นตอนที่ 6: บนแท็บการลงนาม ตรวจสอบให้แน่ใจว่าคุณได้ยกเลิกการเลือกตัวเลือก "อนุญาตให้ Xcode Server จัดการใบรับรองและโปรไฟล์ของฉัน" และอัปโหลดใบรับรองการลงนามที่ตรงกันและโปรไฟล์การจัดเตรียมด้วยตัวเอง ในหน้า ใบรับรองและโปรไฟล์

ขั้นตอนที่ 7: แท็บ อุปกรณ์ ควรจะเหลือเหมือนเดิมเนื่องจากเรากำลังอัปโหลดแอปแทนที่จะทำการทดสอบ

ขั้นตอนที่ 8: แท็บ อาร์กิวเมนต์ ช่วยให้คุณสามารถตั้งค่าอาร์กิวเมนต์ xcodebuild หรือตัวแปรสภาพแวดล้อมได้อย่างชัดเจน ซึ่งสามารถใช้ในสคริปต์บิลด์หรือสคริปต์ก่อนการรวมและหลังการรวม

ขั้นตอนที่ 9: ในที่สุด เราก็มาถึงแท็บท ริกเกอร์ ซึ่งเป็นแท็บสุดท้ายในการกำหนดค่าบอทการรวม Xcode แบบต่อเนื่อง นี่เป็นเครื่องมือที่ทรงพลังที่สุดในคลังแสงเซิร์ฟเวอร์ Xcode สำหรับผู้เริ่มต้น ฉันชอบเพิ่มคำสั่งสองคำสั่งต่อไปนี้เป็นสคริปต์การรวมล่วงหน้า:

 #!/bin/sh set printenv

รายการแรกจะพิมพ์ตัวแปรทั้งหมดที่ Xcode Server ใช้และค่าของตัวแปรเหล่านี้ในการรันการรวมปัจจุบัน อันที่สองพิมพ์ตัวแปรสภาพแวดล้อมทั้งหมดและค่าของพวกมัน ตามที่คาดไว้ สิ่งนี้มีประโยชน์ในการดีบักสคริปต์ของคุณ ดังนั้นฉันจึงตั้งชื่อมันว่า "ข้อมูลการดีบัก" อย่างเหมาะสม

โปรดจำไว้ว่าเรากล่าวว่าเราจำเป็นต้องตรวจสอบให้แน่ใจว่าแต่ละบิลด์ที่อัปโหลดไปยัง App Store Connect จำเป็นต้องมีเวอร์ชันบิลด์และหมายเลขบิลด์ที่ไม่ซ้ำกัน เราสามารถใช้เครื่องมือ PlistBuddy ในตัวได้ แต่เราต้องการวิธีที่จะมีหมายเลขบิลด์ที่ไม่ซ้ำกันด้วย สิ่งหนึ่งที่ปรากฏอยู่เสมอในระหว่างการรวม Xcode Server—และมีความพิเศษเฉพาะตัว—คือหมายเลขการรวม เนื่องจากจะเพิ่มโดยอัตโนมัติ เราจะสร้างสคริปต์ก่อนการรวมระบบใหม่ ชื่อ "set build number" พร้อมเนื้อหาต่อไปนี้เพื่อให้แน่ใจว่าเรามีหมายเลขบิลด์ที่ไม่ซ้ำกันในแต่ละครั้ง:

 #!/bin/sh buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}") buildNumber=$XCS_INTEGRATION_NUMBER /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"

หากคุณกำลังใช้ CocoaPods และเลือกที่จะไม่คอมมิตไดเร็กทอรี Pods กับ DVCS ของคุณ คุณควรรวมสคริปต์ก่อนการรวมเข้ากับเนื้อหาต่อไปนี้:

 #!/bin/sh cd $XCS_PRIMARY_REPO_DIR pod install

ขั้นตอนที่ 10: เกือบเสร็จแล้ว แต่เรายังไม่ได้ระบุทุกที่ที่เราต้องการอัปโหลดบิลด์ไปยัง AppStore Connect หรือบัญชีใด ด้วยเหตุนี้ เราจะเพิ่มสคริปต์หลังการรวมและเครื่องมือในตัวอื่นที่เรียกว่า Application Loader ใส่สิ่งต่อไปนี้ในสคริปต์:

 #!/bin/sh /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool --upload-app -f $XCS_PRODUCT -u $TESTFLIGHT_USERNAME -p $TESTFLIGHT_PASSWORD

$XCS_PRODUCT เป็นตัวแปร Xcode Server และมีพาธไปยังแอปที่สร้างขึ้นในการรันการรวมปัจจุบัน อย่างไรก็ตาม $TESTFLIGHT_USERNAME และ $TESTFLIGHT_PASSWORD ไม่ใช่ทั้งระบบหรือตัวแปร Xcode Server คุณต้องตั้งค่าเหล่านี้และมีค่าเท่ากับ Apple ID และรหัสผ่านของคุณ น่าเสียดายที่ Apple ได้ยุติการสนับสนุนสำหรับการสร้างคีย์ API สำหรับการอัปโหลดบิลด์ AppStore Connect เนื่องจากข้อมูลนี้เป็นข้อมูลที่เป็นความลับ แนวทางปฏิบัติที่ดีที่สุดในการตั้งค่าโดยตรงบนเซิร์ฟเวอร์ Mac (โดยสมมติว่าเป็นข้อมูลของคุณเอง) เป็นตัวแปรสภาพแวดล้อมมากกว่าการกำหนดค่าบ็อต Xcode Server

การกระจายเซิร์ฟเวอร์ Xcode

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

ด้วยเหตุนี้ คุณจะต้องเปิด Safari บนอุปกรณ์ iOS ของคุณและไปที่แดชบอร์ดเว็บเซิร์ฟเวอร์ Xcode Server ของคุณ ตัวอย่างเช่น หากชื่อเซิร์ฟเวอร์ของคุณคือ “เซิร์ฟเวอร์ Mac” คุณสามารถค้นหาได้ที่ “mac-server-name.local/xcode” หากคุณอยู่ในเครือข่ายเดียวกันกับเซิร์ฟเวอร์ ที่นั่น คุณจะพบรายการบอท Xcode ทั้งหมดของคุณและสถิติของการผสานรวมล่าสุด

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

สกรีนช็อตของตัวเลือกการติดตั้งแอพ

สำหรับ iOS 10.3 และใหม่กว่า สาเหตุที่อาจล้มเหลวด้วย “Cannot connect to *.local” ก็คือต้องเชื่อถือใบรับรองที่ลงนามเองด้วยตนเองในการตั้งค่าบนอุปกรณ์ทดสอบ

ทำตามขั้นตอนเหล่านี้:

ขั้นตอนที่ 1: ติดตั้งใบรับรองที่ลงนามเองจากหน้าบ็อตของเซิร์ฟเวอร์ Xcode บน iPhone ของคุณ

ขั้นตอนที่ 2: ไปที่ การตั้งค่าของ iPhone > ทั่วไป > เกี่ยวกับ > การตั้งค่าความน่าเชื่อถือของใบรับรอง

ขั้นตอนที่ 3: ค้นหาใบรับรองที่ลงนามด้วยตนเองของเซิร์ฟเวอร์ภายใต้หัวข้อ เปิดใช้งาน FULL TRUST FOR ROOT CERTIFICATES แล้วเปิดสวิตช์

ขั้นตอนที่ 4: กลับไปที่หน้าการรวมบอทบน Xcode Server คลิก ติดตั้ง

การทดสอบแอปอัตโนมัติของเซิร์ฟเวอร์ Xcode

การใช้งาน Xcode Server ที่ยอดเยี่ยมอีกอย่างหนึ่งคือการทดสอบแอปอัตโนมัติ ไม่ว่าจะเป็นการทดสอบหน่วยหรือ UI ในการดำเนินการนี้ คุณต้องมีเป้าหมายที่เหมาะสมสำหรับโครงการของคุณ นั่นคือ คุณต้องมีเป้าหมายที่เรียกใช้การทดสอบหน่วยหรือ UI ทั้งนี้ขึ้นอยู่กับเป้าหมายของคุณ

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

ไม่ว่าคุณจะทำงานใน Scrum หรือ Kanban หรือเฟรมเวิร์กอื่นๆ ควรมีวงจรที่ขับเคลื่อนด้วยเวลาหรือตามเหตุการณ์ที่กำหนดไว้ล่วงหน้า ซึ่งคุณควรส่งออกผลิตภัณฑ์ที่ใช้งานได้ ในทางกลับกัน คุณควรรันบอททดสอบในแต่ละคอมมิต เนื่องจากเป็นแนวป้องกันแรกของคุณจากการถดถอย เนื่องจากบ็อตทดสอบทำงานบ่อยขึ้นอย่างเห็นได้ชัด การรวมบอททั้งสองนี้เป็นอันเดียวจึงสามารถใช้พื้นที่ดิสก์บนเซิร์ฟเวอร์ของคุณได้อย่างรวดเร็ว และการผสานรวมแต่ละครั้งจะใช้เวลามากขึ้นเพื่อให้เสร็จสมบูรณ์

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

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

บนแท็บ อาร์กิวเมนต์ ไม่จำเป็นต้องระบุอะไรให้ชัดเจน เนื่องจากเราจะใช้เฉพาะตัวแปรสภาพแวดล้อมในตัวเท่านั้น

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

 #!/bin/sh set printenv

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

 #!/bin/sh echo "$XCS_TEST_FAILURE_COUNT test(s) failed for $XCS_BOT_NAME bot on build $XCS_INTEGRATION_NUMBER" echo "You can see bot integration at:" echo "https://$HOSTNAME/xcode/bots/$XCS_BOT_TINY_ID/integrations/$XCS_INTEGRATION_TINY_ID"

มีสองสิ่งที่ควรอธิบายไว้ที่นี่ ก่อนอื่น ตัวแปร $HOSTNAME เก็บค่าของรูปแบบต่อไปนี้: computer-name.local เห็นได้ชัดว่าลิงก์จะใช้งานได้ก็ต่อเมื่อคุณสามารถเข้าถึงเซิร์ฟเวอร์นั้นผ่านเครือข่ายท้องถิ่นได้ นอกจากนี้ คุณมักจะได้รับคำเตือนด้านความปลอดภัยจากเบราว์เซอร์ของคุณเมื่อไปที่ลิงก์นี้ เนื่องจากเป็นการเชื่อมต่อ https ไปยังปลายทางที่ไม่สามารถเชื่อถือได้ สุดท้ายนี้เป็นเพียงจุดเริ่มต้นสำหรับสคริปต์ "การทดสอบล้มเหลว" ของคุณ คุณสามารถส่งอีเมลไปยังทีมพัฒนาทั้งหมด หรือเปิดปัญหา JIRA ผ่านคำขอ API หรือสิ่งอื่นใดที่คุณรู้สึกว่าเหมาะสมและมีประสิทธิภาพมากที่สุด

ห่อ

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

มีบริการของบุคคลที่สามมากมายที่เปิดใช้งานฟังก์ชันการทำงานมากขึ้นและสามารถทำงานได้มากขึ้นสำหรับคุณ รวมถึง Fabric, Bluepill และ Fastlane แต่การพึ่งพาบุคคลที่สามย่อมทำให้เกิดการพึ่งพาใหม่กับโครงการของคุณอย่างหลีกเลี่ยงไม่ได้ และบางครั้งก็ต้องการการตั้งค่าและการกำหนดค่าที่เรียบง่ายและซับซ้อนในบางครั้ง เทคนิคที่อธิบายไว้ในที่นี้ต้องการเฉพาะเครื่องมือที่ติดตั้งไว้แล้วใน Mac ทุกเครื่อง ดังนั้นจึงไม่ต้องใช้เวลาในการตั้งค่านอกเหนือจากการกำหนดค่าบอทที่จะเรียกใช้งานบิลด์อัตโนมัติของคุณ!