Xcode6: Chạy hai phiên bản của trình mô phỏng


122

Tôi có hai mục tiêu khác nhau cho ứng dụng iOS của mình. Có thể chạy đồng thời hai ứng dụng trên hai phiên bản khác nhau của trình mô phỏng không? Sẽ ổn nếu nó không yêu cầu được hưởng lợi từ trình gỡ lỗi của Xcode. Cho đến nay, giải pháp duy nhất mà tôi tìm thấy là cài đặt hai phiên bản XCode, nhưng đó là một giải pháp rất nặng / tốn dung lượng.



3
Đó là một câu hỏi trùng lặp, nhưng câu trả lời của @ i40west thực sự tốt hơn.
vintagexav

Trên thực tế, câu trả lời ở đây thậm chí còn tốt hơn stackoverflow.com/questions/896487/…
FlowUI. SimpleUITesting.com

Câu trả lời:


224

Bạn có thể chạy hai phiên bản của trình mô phỏng iOS từ dòng lệnh. Chúng sẽ không được đính kèm với gỡ lỗi Xcode — thực sự, nó dường như chỉ hoạt động nếu bạn làm điều đó mà không cần Xcode chạy.

Đầu tiên, bạn cần chạy ứng dụng trong trình mô phỏng từ Xcode, để cài đặt ứng dụng trong trình mô phỏng. Đảm bảo rằng bạn đang chạy cùng một trình mô phỏng mà bạn sẽ sử dụng

Bây giờ, hãy mở cửa sổ Terminal và thực hiện việc này.

cd /Applications/Xcode.app/Contents/Developer/Applications
open -n iOS\ Simulator.app
open -n iOS\ Simulator.app

Cập nhật cho Xcode 7: Với Xcode 7, tên ứng dụng của trình mô phỏng đã thay đổi, vì vậy nó sẽ thay thế:

cd /Applications/Xcode.app/Contents/Developer/Applications
open -n Simulator.app
open -n Simulator.app

Khi cái thứ hai khởi chạy, bạn sẽ nhận được cảnh báo lỗi. Chỉ cần loại bỏ nó và chọn một thiết bị khác từ “Phần cứng” »“ Thiết bị ”. Bây giờ bạn có hai trình mô phỏng đang chạy và bất kỳ ứng dụng nào bạn đã cài đặt trong chúng từ Xcode sẽ ở đó.


7
Xin cảm ơn, đó là một ý tưởng hay, nhưng thật không may, nó lại thông báo "Không thể khởi động thiết bị ở trạng thái hiện tại: Đã khởi động" cho trình mô phỏng thứ hai. Tôi thấy hai trình mô phỏng nhưng màn hình của mô phỏng thứ hai vẫn đen ngay cả sau khi bỏ qua cảnh báo.
vintagexav

6
Có lẽ đó là vì XCode của tôi hiện đang chạy. Có lẽ bạn nên thêm hướng dẫn rằng câu trả lời của bạn :) Ngoài ra nó chỉ hoạt động nếu sử dụng hai phần cứng khác nhau mô phỏng (ví dụ: iPhone 5 và iPhone 5s)
vintagexav

13
Nhân tiện, để chạy hai trình mô phỏng khác nhau đúng cách với hai phần cứng được mô phỏng khác nhau và tránh lỗi "Không thể khởi động thiết bị ở trạng thái hiện tại: Đã khởi động", bạn phải thay đổi phiên bản của trình mô phỏng đầu tiên sau khi khởi động bằng cách nhấp vào trình mô phỏng> phần cứng. Thông tin thêm: stackoverflow.com/questions/24023029/…
vintagexav

1
Cảm ơn! Tôi đang sử dụng 2 trình mô phỏng (một chạy iPhone5, iPhone6 ​​còn lại) để kiểm tra đồng bộ hóa iCloud. Cần lưu ý, việc đồng bộ hóa của Trình mô phỏng rất phức tạp, vì vậy, vì mục đích thực tế, bạn phải buộc đồng bộ hóa iCloud bằng cách sử dụng Gỡ lỗi-> Kích hoạt Đồng bộ hóa iCloud. Vì vậy, với hai thiết bị này đang chạy ứng dụng của tôi trong các cửa sổ giả lập riêng biệt của chúng, tôi thực hiện thay đổi trên device1 (iphone5), buộc đồng bộ hóa cho device1, nhấp vào device2 (iPhone6) và buộc đồng bộ hóa. Và viola, bây giờ bạn có thể kiểm tra đồng bộ hóa iCloud trong trình mô phỏng. Mở Bảng điều khiển của trình mô phỏng rất hữu ích, vì bạn có thể xem hoạt động đồng bộ hóa nền khi nó xảy ra.
ObjectiveTC

3
Tôi rất vui vì tôi đã tìm thấy câu trả lời của bạn, cảm ơn bạn! Chỉ muốn đề cập rằng dường như bạn CÓ THỂ chạy XCode cùng lúc, với những lưu ý sau: 1. trình mô phỏng thứ hai phải có cấu hình khác với cấu hình đầu tiên (sau khi cửa sổ bật lên phàn nàn, bạn cần thay đổi phiên bản thiết bị của trình mô phỏng từ menu Phần cứng). 2. bất cứ khi nào bạn dừng và khởi động lại trình mô phỏng đầu tiên từ XCode, trình mô phỏng thứ hai cũng sẽ bị dừng và khởi động lại (và bạn sẽ cần thay đổi lại phiên bản thiết bị của nó)
Alex

26

Xcode 9+

Xcode 9 hiện hỗ trợ khởi chạy nhiều trình mô phỏng. Điều này đã được công bố trong WWDC 2017.

Chỉ cần đi và thay đổi trình mô phỏng trong Xcode, Cmd + R và bạn sẽ thấy một trình mô phỏng mới xuất hiện.

nhập mô tả hình ảnh ở đây


9

Đã 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ú ý :-)



5

Bạn có thể chạy nhiều phiên bản trình mô phỏng cho các cấu hình phần cứng khác nhau và gỡ lỗi chúng. Trước tiên, bạn cần chạy ứng dụng của mình từ XCode cho từng loại phần cứng (iPhone 6, iPad, v.v.) để cài đặt ứng dụng đó vào các phiên bản giả lập. Sau đó, chạy các phiên bản trình mô phỏng và ứng dụng của bạn như được giải thích ở trên. Để gỡ lỗi, bạn có thể đính kèm trình gỡ lỗi vào các quy trình đang chạy từ menu "XCode-> Debug-> Attach to Process". Bạn có thể kiểm tra mục nhập blog này để biết ví dụ: http://oguzdemir.dualware.com/?p=43


5

đây là một tập lệnh nhỏ trong .sh để liệt kê UDID của trình mô phỏng trên máy tính của bạn và chạy nó. Sao chép mã bên dưới trong một tệp có phần mở rộng ".sh" và chạy nó trong thiết bị đầu cuối.

Làm thế nào để:

Bước 1. Liệt kê các thiết bị có tùy chọn 1 và sao chép UDID muốn

Bước 2. Chạy tùy chọn 2 và dán UDID rồi nhấn phím enter

Hãy cẩn thận: xác minh rằng đường dẫn chứa trình mô phỏng của bạn là ổn (nếu không được thay thế bằng đường dẫn của bạn)

#!/bin/sh
PS3='Type the number of your choice (1, 2 or 3) and press Enter: '
options=("List Devices" "Run Simulator" "Quit")
select opt in "${options[@]}"
do
    case $opt in
        "List Devices")
            xcrun simctl list devices
            echo "\033[1m\n\nCopy the UDID in parentheses of the device which you want run and launch option 2 (Run Simulator)\033[0m"
            ;;
        "Run Simulator")
            read -p 'Type device UDID which you want launch: ' currentDeviceUDID
            open -n /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/ --args -CurrentDeviceUDID $currentDeviceUDID
            ;;
        "Quit")
            break
            ;;
        *) echo invalid option;;
    esac
done

Cảm ơn bạn,


0

Đây là năm 2020, xCode 11.4: File -> Open Device -> iOs 13.4 -> và chọn phiên bản iPhone không chạy trước và bạn sẽ nhận được trình giả lập thứ hai đang chạy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.