ประสบความสำเร็จในการทดสอบว่าโซลูชันของ i40west ทำงานเพื่อเปิดโปรแกรมจำลองด้วยตนเอง แต่ดูเหมือนจะโง่ที่ในยุคนี้และยุคนี้โปรแกรมจำลอง iOS ต้องใช้เวอร์ชัน Xcode ที่แตกต่างกันและประเภทอุปกรณ์ที่แตกต่างกันเมื่อเรียกใช้การทดสอบพร้อมกันจากบรรทัดคำสั่ง (กรณีการใช้งานที่แตกต่างกันเล็กน้อย แต่เกี่ยวข้องกับคำถามดั้งเดิมที่ด้านบน )
ดูบทความของ Apple ที่นี่ซึ่งเกี่ยวข้องกับการสร้างและการทดสอบบรรทัดคำสั่งมากที่สุด:
https://developer.apple.com/library/ios/technotes/tn2339/_index.html
การทดสอบพร้อมกันหลายรายการทำงานได้ดีสำหรับเราหากผ่าน --args - ไปที่ 'iOS simulator.app' ที่ถูกต้องก่อนที่จะเรียกใช้คำสั่ง 'xcodebuild test' ด้วยการเปิดตัวจำลองการจับคู่ค่า '-destination' ที่ถูกต้องพร้อมค่า UUID จากเอาต์พุตของ 'xcrun simctl list 'และการตั้งค่าตัวแปรสภาวะแวดล้อม DEVELOPER_DIR เพื่อเลือกไบนารีเวอร์ชัน XCode ที่แตกต่างกัน (เช่นพา ธ ฐานไปยัง Xcode 6.1 และ 6.4)
เหตุผลที่ต้องทดสอบหน่วยพร้อมกันบนเครื่องจริงเครื่องเดียวกันและอุปกรณ์จำลอง iOS เดียวกันเช่น iPad หรือ iPhone และ Xcode เวอร์ชันเดียวกันเป็นหลักเพื่อรองรับ CI (การผสานรวมอย่างต่อเนื่อง) ของโปรเจ็กต์ iOS ใด ๆ โดยระบบบิลด์เดียวกันสามารถรันได้มากกว่า 1 บิวด์จากหลาย ๆ แอพ (บริษัท ของเรามี 30 แอพหรือมากกว่านั้น) ต่อครั้งเมื่อเช็คอินที่สาขาฟีเจอร์จะถูกสแกนและสร้างโดยอัตโนมัติโดย Bamboo agent โดยไม่จำเป็นต้องรอให้บิลด์อื่น ๆ ทำงานเสร็จสมบูรณ์ - Bamboo รองรับการสร้างอัตโนมัติประเภทนี้ในระบบอัตโนมัติ - ค้นพบสาขาคุณลักษณะหากเปิดใช้งาน
สำหรับสิ่งที่เกิดขึ้นเมื่อเรียกใช้การทดสอบพร้อมกันหลายรายการเราเรียกใช้คำสั่ง 'xcodebuild test' หลายคำสั่งสองครั้งติดต่อกันในหน้าต่าง Terminal.app ที่แตกต่างกันผลลัพธ์คือหน้าต่างจำลองเพียงหน้าต่างเดียวปรากฏขึ้นและการทดสอบล้มเหลวในการทดสอบที่ง่ายที่สุด
เมื่อเราทำให้เกณฑ์การเข้าสู่การทดสอบของเราซับซ้อนขึ้น Xcode เวอร์ชันที่แตกต่างกันสำหรับแต่ละซิมและการเปิดตัวทดสอบเมื่อใช้ DEVELOPER_DIR ตาม man pages (xcodebuild test) เรากำลังระบุอุปกรณ์ที่แตกต่างกันซึ่งเปิดในสองหน้าต่างแยกกัน แต่ผลลัพธ์ก็คือ การทดสอบที่ทำงานอยู่ในหน้าต่างแรกจะถูกขัดจังหวะโดยหน้าต่างจำลอง iOS ที่สอง
ดูเหมือนว่าจะมีทรัพยากรที่ใช้ร่วมกันทั่วไปภายใต้ประทุนที่กำลังเข้ามาไม่แน่ใจว่ามีจุดมุ่งหมายหรือเป็นเพียงคุณลักษณะใหม่ที่ต้องใช้ความคิดอย่างจริงจังมากกว่าสองสามวันในการดำเนินการทดสอบพร้อมกันให้ดีขึ้นโดยไม่มีผลกระทบในทางลบ
เราไม่ต้องการใช้ VM เพื่อหลีกเลี่ยงข้อ จำกัด ของซิมเนื่องจากประสบการณ์ของเราและของคนอื่น ๆ โดยทั่วไปคือ iOS สร้างประสิทธิภาพบน VM ที่มีไฟล์ขนาดเล็กจำนวนมากช้ากว่าฮาร์ดแวร์จริง โดยทั่วไปแล้ว VM จะชะลอการสร้างลงอย่างมากเนื่องจากปัญหา I / O ในการรวมกันของซอฟต์แวร์ VMware และฮาร์ดแวร์และ / หรือเฟิร์มแวร์ของ Apple ขออภัยแทบสลัม แต่สำหรับเรา VMs ทำงานได้ไม่ดี - เว็บไซต์แทบสลัมได้ให้คำแนะนำเกี่ยวกับวิธีการติดตั้ง ESXi 5.5 บน Mac Mini สำหรับสร้างฟาร์มของเรา
เราประสบปัญหาประสิทธิภาพการทำงานของการสร้าง ESXi 5.5 บน Mac Mini ช้ากว่าโลหะเปล่าแม้จะใช้ SSD ด้วยปัจจัย 2 หรือมากกว่า (เช่นการสร้างแบบ baremetal 10 นาทีใช้เวลา 20 บน VM) อ้างถึงบทความ Squareup ด้านล่างเกี่ยวกับสาเหตุ
https://corner.squareup.com/2015/07/ios-build-infrastructure.html
ข้อ จำกัด ของอุปกรณ์ซิม 1 เครื่องต่อครั้งสำหรับการทดสอบหน่วย xcodebuild ช่วยลดประสิทธิภาพการทำงานอย่างมากและเพิ่มต้นทุนจำนวนมากให้กับ Apple และระบบนิเวศ
ค่าใช้จ่ายของ Apple ในการไม่สนับสนุนการใช้งานพร้อมกันเพื่อปรับการซื้อฮาร์ดแวร์ให้มากขึ้นควรได้รับการพิจารณาอย่างรอบคอบโดยชั่งน้ำหนักความเสี่ยงที่จะสูญเสียความเร็วของนักพัฒนาเมื่อเทียบกับคู่แข่งรายอื่นที่มีข้อ จำกัด น้อยกว่าในแง่ของซิมส์และ EULA
ข้อดีของการทดสอบพร้อมกันในการเข้าสู่ระบบของผู้ใช้เดียวกัน (ระบบ ci ส่วนใหญ่ทำงานอย่างไร) คือคุณภาพของแอพร้านค้าแอปแบรนด์ Apple ซึ่งเป็นส่วนหนึ่งที่ทำให้ผู้คนซื้ออุปกรณ์ iOS ตั้งแต่แรก คุณภาพซอฟต์แวร์ที่ไม่ดีทำให้ทั้งแบรนด์มีการรองรับการทำงานพร้อมกันในเครื่องจำลอง iOS มากขึ้นดูเหมือนจะเป็นวิธีที่ชาญฉลาดในการสนับสนุนระบบนิเวศ ข้อพิสูจน์เล็กน้อยสำหรับปัญหาที่เกิดขึ้นคือการปรับปรุงล่าสุดเช่นเซิร์ฟเวอร์ Xcode ของ Apple สำหรับ CI, UI อัตโนมัติของ Xcode ทดสอบฟังก์ชันการทำงานใน Xcode 7
การสนับสนุนค่าใช้จ่ายที่ไม่จำเป็นเพื่อให้ผู้คนซื้อฮาร์ดแวร์การตั้งค่าการกำหนดค่าจำนวนมากไม่ต้องพูดถึงผู้คนจำนวนมากที่ต้องรองรับเครื่องเครือข่ายและพาวเวอร์พอยต์ทั้งหมด ฯลฯ อาจส่งผลเสียต่อผลกำไรของ Apple ในที่สุดเพราะไม่ใช่ทุกคนที่เหมือน Apple และ สามารถซื้อชั้นวางของ MacPro หรือ Mac Mini เพื่อรองรับการทดสอบพร้อมกันบนเครื่องจำลอง จุดรวมของโปรแกรมจำลองคือหลีกเลี่ยงการใช้ฮาร์ดแวร์และเร่งการทดสอบด้วย
บวกกับข้อ จำกัด ของ EULA บน VM ทำให้กรณีของ VM บน Mac Pro ค่อนข้างอ่อนแอ ฮาร์ดแวร์ประเภทนี้น่าสนใจหากสามารถทำงานได้หลายซิม แต่เนื่องจากไม่รองรับการทดสอบหน่วยพร้อมกัน (ยกเว้นในสองเงื่อนไขข้างต้น - เวอร์ชัน XCode ที่แตกต่างกันและอุปกรณ์จำลองที่แตกต่างกัน) เราน่าจะยึดติดกับ Mac Mini เพื่อสร้างโครงสร้างพื้นฐาน
ข้อ จำกัด ของซิมและ EULA จาก Apple ไม่เพียง แต่ทำให้ build pipeline ช้าลง แต่ยังเพิ่มความซับซ้อนและต้นทุนที่ไม่จำเป็นอีกด้วย อาจไม่เกี่ยวข้องกับแอพขนาดเล็ก แต่เนื่องจากแอพมีขนาดและความซับซ้อนมากขึ้นการสร้างอาจใช้เวลานานกว่าหนึ่งชั่วโมง (ฉันได้ยินมาว่าการสร้าง Facebook iOS อาจใช้เวลานานขนาดนั้น) ไม่มีใครอยากรอเป็นชั่วโมงเพื่อรู้ว่างานสร้างผ่านหรือไม่
เรารู้จักโซลูชันแฮ็คเช่นการเรียกใช้ ESXI VM บน Mac Minis ซึ่งเล่นได้ไม่ดีพอกับ OS X และ xcodebuild ในโปรเจ็กต์ขนาดใหญ่ที่มีการสร้างที่ใช้เวลามากกว่า 10 นาทีใน Mac Book Pro หรือ Mac Mini ที่ทันสมัยหรือบัญชีล็อกอินอื่น บนเครื่องโลหะเปล่าสู่สภาพแวดล้อมเพียงเพื่อให้สามารถทำการทดสอบพร้อมกันบน Xcode เวอร์ชันเดียวกันและอุปกรณ์จำลองเดียวกันได้
ESXi ไม่ได้รับการสนับสนุนอย่างเป็นทางการแม้ว่าจะใช้งานได้ดี สาเหตุหนึ่งที่ VMware อาจไม่รองรับฮาร์ดแวร์ Mac Mini แต่ขาดหน่วยความจำ ECC แม้ว่า Mac Pro จะได้รับการสนับสนุนเนื่องจากมีหน่วยความจำ ECC แต่ก็น่าจะมีปัญหาเช่นเดียวกับ Mac Mini ในแง่ของ iOS ที่สร้างช้าลงเมื่อเทียบกับโลหะเปลือย การทดสอบการกำหนดค่าฮาร์ดแวร์และซอฟต์แวร์เดียวกัน (การเปลี่ยนแปลงคือ VM กับ bare metal ที่ใช้ OS X) MacPro ยังไม่ได้รับการทดสอบจากเราในขณะนี้ จากประสบการณ์ของเรา VMware Fusion ค่อนข้างช้าในแง่ของประสิทธิภาพเช่นกัน
ที่สำคัญกว่านั้นนักพัฒนาจะต้องรอนานขึ้นเมื่อมีการรวมปัญหาดังกล่าวเข้าด้วยกันเว้นแต่ว่าพูลของเครื่องจะมีขนาดใหญ่พอที่จะรองรับการเปลี่ยนแปลงแบบ pipleline (หนึ่ง CI build สำหรับทุกๆ 2 devs, อัตราส่วนของเครื่องจักรต่อผู้พัฒนาที่สูงมาก) เครื่องสร้าง CI ควรสามารถรันบิลด์พร้อมกันได้มากกว่าและการทดสอบพร้อมกันมากกว่า 1
ข้อสังเกตอีกประการหนึ่งเกี่ยวกับเครื่องจำลอง iOS คือดูเหมือนว่าจะอยู่ระหว่างดำเนินการและยังไม่เสร็จสมบูรณ์แม้ว่าจะผ่านไปแล้ว 7 เวอร์ชันหลัก คำสั่งย่อย 'xcrun simctl' มีตัวเลือก --set ซึ่งอาจอนุญาตให้มีความยืดหยุ่นได้บ้าง แต่ไม่แน่ใจว่าค่าใดที่เป็นไปได้นั้นถูกต้องและเหมือนกับ --noxpc ไม่มีใครต้องเดาค่าที่เหมาะสมและนอกจากนี้ควรมี man page ที่ครอบคลุมตัวเลือกนี้และอาจเป็นตัวอย่าง มีกรณีการใช้งานอะไรบ้างสำหรับ 2 ตัวเลือกที่น่าสนใจนี้?
คุณอาจพูดได้ว่าไม่ควรออกแบบแอปให้มีขนาดใหญ่ที่รับประกันการทดสอบพร้อมกันเพื่อให้ทำงานได้และใช้สถาปัตยกรรมที่ดีขึ้นตาม XPC เนื่องจากแอปเสาหินเป็นปัญหา สิ่งนี้อาจถูกต้องมากไม่ใช่วิธีแก้ปัญหาในทางปฏิบัติอย่างที่เราคาดหวังและปัญหาจะยังคงอยู่หากคุณมีแอปมากกว่า 20 แอปที่จะสร้างบนโครงสร้างพื้นฐานเดียวกัน
การกำหนดค่าเครื่องและกระบวนการเป็นแบบทั่วไปและปรับขนาดได้มากที่สุดเพื่อให้ได้ปริมาณงานที่สูงขึ้นจะต้องมีการทำงานบางอย่างกับตัวจำลอง (app + core devs) นอกจากนี้ยังต้องอาศัยการทำงานร่วมกันในระดับสูงระหว่างนักพัฒนาโปรแกรมจำลอง Apple ทั้งหมดและเจ้าของผลิตภัณฑ์จำลองต้องสั่งซื้อสินค้าค้างส่งอย่างถูกต้องเพื่อให้ปัญหานี้ได้รับความสนใจ :-)