Đã thử nghiệm thành công rằng giải pháp của i40west hoạt động để khởi chạy trình mô phỏng theo cách thủ công nhưng có vẻ ngớ ngẩn rằng trong thời đại ngày nay, trình mô phỏng iOS yêu cầu các phiên bản Xcode khác nhau VÀ các loại thiết bị khác nhau khi chạy các thử nghiệm đồng thời từ dòng lệnh (trường hợp sử dụng hơi khác một chút nhưng liên quan đến câu hỏi gốc ở trên cùng ).
Tham khảo bài viết của Apple tại đây có liên quan nhất đến các bản dựng và kiểm tra dòng lệnh:
https://developer.apple.com/library/ios/technotes/tn2339/_index.html
Nhiều thử nghiệm đồng thời đã hoạt động tốt cho chúng tôi nếu chuyển đúng --args - đến 'iOS simulator.app' trước khi chạy lệnh 'kiểm tra xcodebuild' với khởi chạy trình mô phỏng phù hợp với giá trị '-destination' với giá trị UUID từ đầu ra của 'xcrun danh sách simctl 'và thiết lập biến môi trường DEVELOPER_DIR để chọn các tệp nhị phân phiên bản XCode khác nhau (tức là đường dẫn cơ sở đến Xcode 6.1 và 6.4)
Lý do cần kiểm tra đơn vị đồng thời trên cùng một máy vật lý và cùng một thiết bị giả lập iOS như iPad hoặc iPhone và cùng một phiên bản Xcode chủ yếu là để hỗ trợ CI (tích hợp liên tục) của bất kỳ dự án iOS nào, theo đó cùng một hệ thống xây dựng có thể chạy nhiều hơn 1 bản dựng của nhiều các ứng dụng (công ty của chúng tôi có 30 ứng dụng hoặc hơn) tại một thời điểm khi đăng ký trên các nhánh tính năng được đại lý Bamboo tự động quét và xây dựng mà không cần đợi các Bản dựng đang chạy khác hoàn thành - Bamboo hỗ trợ kiểu xây dựng tự động này trên auto- các nhánh tính năng được phát hiện nếu được bật.
Đối với những gì xảy ra khi chạy nhiều bài kiểm tra đồng thời, chúng tôi chạy nhiều lệnh 'xcodebuild test' liên tiếp hai lần trong các cửa sổ Terminal.app khác nhau, kết quả là chỉ có một cửa sổ giả lập xuất hiện và các bài kiểm tra không thành công trong bài kiểm tra đơn giản nhất.
Khi chúng tôi làm phức tạp các tiêu chí đầu vào cho lần khởi chạy thử nghiệm của mình, các phiên bản Xcode khác nhau cho từng sim và lần khởi chạy thử nghiệm, khi sử dụng DEVELOPER_DIR theo từng trang nam (thử nghiệm xcodebuild), chúng tôi đang chỉ định một thiết bị khác mở trong hai cửa sổ riêng biệt, nhưng kết quả là mọi thử nghiệm đang chạy trong cửa sổ đầu tiên bị gián đoạn bởi cửa sổ trình mô phỏng iOS thứ hai.
Có vẻ như có một tài nguyên được chia sẻ chung đang bị cản trở, không chắc nó được dự định hay chỉ là một tính năng mới đòi hỏi hơn vài ngày suy nghĩ nghiêm túc về cách triển khai tốt hơn các lần chạy thử nghiệm đồng thời mà không có tác động xấu.
Chúng tôi không muốn sử dụng máy ảo để giải quyết các hạn chế về sim vì kinh nghiệm của chúng tôi và của những người khác nói chung là hiệu suất xây dựng iOS trên máy ảo với số lượng lớn tệp nhỏ chậm hơn so với phần cứng vật lý. Các máy ảo thường sẽ làm chậm quá trình xây dựng đi rất nhiều do các vấn đề I / O trong sự kết hợp giữa phần mềm VMware và phần cứng và / hoặc phần sụn của Apple. Rất tiếc, đối với chúng tôi, các máy ảo ảo không hoạt động tốt - trang web hầu như đã cung cấp cho chúng tôi hướng dẫn về cách cài đặt ESXi 5.5 trên Mac Mini cho trang trại xây dựng của chúng tôi.
Chúng tôi đã gặp vấn đề về hiệu suất bản dựng với ESXi 5.5 trên Mac Mini chậm hơn kim loại thô ngay cả với SSD bằng hệ số 2 trở lên (tức là bản dựng baremetal 10 phút mất 20 phút trên VM). Tham khảo bài viết vuông dưới đây để biết lý do.
https://corner.squareup.com/2015/07/ios-build-infraosystem.html
Việc giới hạn thiết bị 1 sim tại một thời điểm cho các bài kiểm tra đơn vị xcodebuild làm giảm nghiêm trọng năng suất và tăng thêm chi phí đáng kể cho Apple và hệ sinh thái theo cấp số nhân.
Việc Apple không hỗ trợ đồng thời để biện minh cho việc mua nhiều phần cứng hơn nên được cân nhắc cẩn thận, cân nhắc rủi ro mất tốc độ của nhà phát triển so với các đối thủ khác, những người có ít hạn chế hơn về sim và EULA.
Lợi thế của các thử nghiệm đồng thời trong cùng một lần đăng nhập của người dùng (cách hoạt động của hầu hết các hệ thống ci) là chất lượng của các ứng dụng cửa hàng ứng dụng mang thương hiệu Apple, một phần là yếu tố khiến mọi người mua thiết bị iOS ngay từ đầu. Chất lượng phần mềm kém khiến toàn bộ thương hiệu trở nên tồi tệ hơn một chút và hỗ trợ đồng thời trong trình mô phỏng iOS chắc chắn có vẻ là một cách thông minh để hỗ trợ hệ sinh thái. Một chút hệ quả của vấn đề hiện tại là những cải tiến gần đây như máy chủ Xcode của Apple cho CI, chức năng kiểm tra giao diện người dùng tự động của Xcode trong Xcode 7.
Khuyến khích chi phí không cần thiết để khiến mọi người mua số lượng lớn phần cứng, thiết lập, cấu hình, chưa kể nhiều người được yêu cầu hỗ trợ tất cả các máy móc, mạng và điểm nguồn, v.v., sẽ có khả năng làm tổn hại đến lợi nhuận của Apple cuối cùng vì không phải ai cũng giống như Apple và có đủ khả năng mua giá đỡ của MacPro hoặc Mac Mini chỉ để hỗ trợ các thử nghiệm đồng thời trên trình mô phỏng. Toàn bộ điểm của trình mô phỏng là tránh sử dụng phần cứng và cũng tăng tốc các bài kiểm tra.
Cộng với những hạn chế của EULA trên máy ảo khiến trường hợp máy ảo trên Mac Pro khá yếu. Loại phần cứng này sẽ hấp dẫn nếu nhiều mô phỏng có thể chạy nhưng vì các bài kiểm tra đơn vị đồng thời không được hỗ trợ (ngoại trừ hai điều kiện trên - phiên bản XCode khác nhau và thiết bị mô phỏng khác nhau), chúng tôi có thể sẽ gắn bó với Mac Mini để xây dựng cơ sở hạ tầng.
Những hạn chế về sim và EULA này của Apple không chỉ khiến quá trình xây dựng chậm hơn mà còn gây thêm sự phức tạp và chi phí không cần thiết. Nó có thể không liên quan nhiều đến các ứng dụng nhỏ nhưng khi các ứng dụng phát triển về kích thước và độ phức tạp, quá trình xây dựng có thể mất tới một giờ (tôi nghe nói rằng các bản dựng Facebook iOS có thể mất nhiều thời gian). Không ai muốn đợi một giờ để biết nếu một công trình xây dựng được thông qua.
Chúng tôi biết về các giải pháp hack như chạy máy ảo ESXI trên Mac Minis không hoạt động tốt với OS X và xcodebuild trên các dự án lớn với các bản dựng mất hơn 10 phút trên Mac Book Pro hoặc Mac Mini hiện đại hoặc các tài khoản đăng nhập khác trên máy kim loại trần với môi trường chỉ để có thể chạy các thử nghiệm đồng thời trên cùng một phiên bản Xcode và cùng một thiết bị giả lập.
ESXi không được hỗ trợ chính thức mặc dù nó hoạt động khá tốt. Một trong những lý do VMware có thể chưa hỗ trợ phần cứng Mac Mini là thiếu bộ nhớ ECC, mặc dù Mac Pro được hỗ trợ vì nó có bộ nhớ ECC, nhưng nó có thể có các vấn đề tương tự như Mac Mini về bản dựng iOS chậm hơn so với kim loại trần. kiểm tra trên cùng một cấu hình phần cứng và phần mềm (chỉ có sự thay đổi là VM so với kim loại trần chạy OS X). MacPro chưa được chúng tôi kiểm tra tại thời điểm này. Theo kinh nghiệm của chúng tôi, VMware Fusion cũng khá chậm về mặt hiệu suất.
Quan trọng hơn, các nhà phát triển sẽ cần phải đợi lâu hơn khi các vấn đề nói trên được kết hợp với nhau trừ khi nhóm máy đủ lớn để hỗ trợ đường dây thay đổi (cứ 2 nhà phát triển thì có một bản CI, tỷ lệ máy cho nhà phát triển rất cao). Máy xây dựng CI sẽ có thể chạy nhiều Phiên bản đồng thời hơn và nhiều bài kiểm tra đồng thời hơn 1.
Một trong những nhận xét khác về trình mô phỏng iOS là chúng dường như là một công việc đang được hoàn thiện và hoàn toàn chưa hoàn thành ngay cả sau 7 phiên bản chính. Lệnh con 'xcrun simctl' có tùy chọn --set có thể cho phép một số loại linh hoạt nhưng không chắc giá trị nào có thể là hợp lệ và tương tự với --noxpc. Không ai cần phải đoán các giá trị thích hợp và hơn nữa, nên có một trang người đàn ông bao gồm tùy chọn này và có lẽ là ví dụ. Một số trường hợp sử dụng cho 2 tùy chọn thú vị này là gì?
Bạn có thể nói, không có ứng dụng nào nên được thiết kế để có kích thước lớn đảm bảo chạy thử nghiệm đồng thời và sử dụng kiến trúc tốt hơn dựa trên XPC, vì các ứng dụng nguyên khối là vấn đề. Điều này rất có thể đúng, đó không phải là giải pháp thực dụng như chúng ta có thể hy vọng và vấn đề vẫn còn nếu bạn có hơn 20 ứng dụng để xây dựng trên cùng một cơ sở hạ tầng.
Tạo cấu hình máy và các quy trình càng chung chung và có thể mở rộng càng tốt để có thông lượng cao hơn sẽ yêu cầu một số công việc trên trình mô phỏng (ứng dụng + nhà phát triển cốt lõi). Nó cũng đòi hỏi sự cộng tác cao độ giữa tất cả các nhà phát triển trình mô phỏng của Apple và (các) chủ sở hữu sản phẩm mô phỏng cần phải đặt hàng đúng sản phẩm tồn đọng cho vấn đề này để thu hút sự chú ý :-)