Cordova: bắt đầu hình ảnh giả lập iOS cụ thể


120

Tôi đang phát triển một ứng dụng di động đa nền tảng bằng Cordova, chủ yếu tập trung vào iOS trong giai đoạn phát triển.

Đối với quá trình phát triển của tôi, sẽ rất lý tưởng nếu tôi có thể khởi động ứng dụng Cordova của mình trực tiếp từ dòng lệnh và tải nó vào một trình giả lập được chỉ định. Tôi có thể làm điều này bằng cách chạy phần sau từ thư mục gốc của dự án:

$cordova run --debug --emulator iOS

Điều này hoạt động tốt và dẫn đến trình mô phỏng iOS chạy ứng dụng của tôi trên iPhone 4 Retina được mô phỏng với iOS 7.0.3

Ngoài thiết bị mô phỏng này, tôi cũng muốn thử nghiệm (ví dụ) trên iPad. Tôi đã cài đặt những hình ảnh mô phỏng này và tôi có thể khởi động ứng dụng của mình trong đó theo cách thủ công bằng Xcode. Ngoài ra, lệnh list-emulator-images(nằm trong project_dir/platforms/ios/cordova/lib) cho kết quả sau:

"iPhone Retina (3.5-inch)"
"iPhone Retina (4-inch)"
"iPhone Retina (4-inch 64-bit)"
"iPhone"
"iPad"
"iPad Retina"

Tuy nhiên, vấn đề là: Tôi dường như không thể tìm ra cách khởi động trình giả lập trong bất kỳ thứ gì khác với mặc định (dường như là iPhone Retina (4-inch)hình ảnh mô phỏng). Đầu ra có liên quan củacordova help cung cấp thông tin sau:

run [--debug|--release]
    [--device|--emulator|--target=FOO]
    [PLATFORM] ............................ deploys app on specified platform devices / emulators

Tôi đã thử những thứ như sau:

cordova run --debug --emulator=iPad iOS

Và nhiều biến thể của chúng, nhưng không may mắn. Mỗi khi nó khởi động trong cùng một trình giả lập.

Các tài liệu về công cụ dòng lệnh không cung cấp bất kỳ thông tin nào về vấn đề này và tìm kiếm trên Google mở rộng cũng không tìm ra được gì. Tôi có thiếu một cái gì đó tầm thường không? Hay tôi đang cố làm điều gì đó kỳ lạ? Tôi thực sự hy vọng ai đó ở đây có kinh nghiệm về điều này và có thể cung cấp một số câu trả lời.

Cảm ơn rất nhiều trước!

chỉnh sửa: quên đề cập rõ ràng; Tôi đang làm tất cả điều này trên máy Mac. Như đã đề cập trước đó, chạy ứng dụng trong các trình giả lập / trình mô phỏng khác nhau trong Xcode hoạt động tốt.

Câu trả lời:


335

Để tìm hiểu những hình ảnh giả lập có sẵn, bạn có thể sử dụng để liệt kê chúng

$ cordova emulate ios --list
Available iOS Virtual Devices:
    iPhone-4s, 9.3
    iPhone-5, 9.3
    iPhone-5s, 9.3
    iPhone-6, 9.3
    iPhone-6-Plus, 9.3
    iPhone-6s, 9.3
    iPhone-6s-Plus, 9.3
    iPad-2, 9.3
    iPad-Retina, 9.3
    iPad-Air, 9.3
    iPad-Air-2, 9.3
    iPad-Pro, 9.3

Sau đó, sử dụng một trong các tên trình mô phỏng trong tham số --target:

cordova emulate ios --target="iPhone-4s, 9.3"
cordova emulate ios --target="iPad-Air-2, 9.3"
cordova emulate ios --target="iPhone-6s, 9.3"
cordova emulate ios --target="iPhone-6-Plus, 9.3"

Quan trọng Thoát trình mô phỏng trước khi khởi chạy trình mô phỏng mục tiêu khác (Chọn trên thanh Trình đơn Simulator->Quit)

Lưu ý rằng bạn có thể cần thoát trình mô phỏng iOS thông qua menu để chuyển từ iPhone 3,5 sang 4 inch.

danh sách động có sẵn trong platforms/ios/cordova/lib/list-emulator-images


3
Cảm ơn, điều này đã giúp. Nguồn của bạn cho điều này là gì? Tôi chỉ tự hỏi làm thế nào tôi có thể tự mình tìm ra điều này ... Câu trả lời cho câu hỏi này cũng giúp ích rất nhiều: stackoverflow.com/questions/13877840/… Rõ ràng 'cordova giả lập' là một trình bao bọc voor ios-sim, bạn cũng có thể nói trực tiếp. Đây là những gì tôi đã kết thúc, vì vậy tôi có thể xây dựng và khởi chạy mã của mình trực tiếp từ IDE mà tôi lựa chọn.
EggMeister

Tôi chỉ cần chạy lệnh này và có thể xác nhận các giả lập 4,7 và 5,5 inch không được liệt kê, ngay cả với Xcode 6 cài đặt :-(
Bến Clayton

Xin chào, tôi đã thử lệnh này "./platforms/ios/cordova/lib/list-emulator-images" nhưng tôi không thấy tất cả các tùy chọn ,, KHÔNG iPhone 6, KHÔNG iPhone 6-Plus, KHÔNG iPad-Air sẽ như thế nào vấn đề? Cảm ơn
dùng2120121

10
Tôi thực sự không biết tại sao nhưng đối với tôi, Cordova CLI sẽ ném "Error: Cannot read property 'name' of undefined"khi chỉ định mục tiêu bằng dấu ngoặc kép, tôi chỉ có thể làm cho nó hoạt động bằng cách chạy nó như thế này cordova run ios --target=iPhone-6. Hy vọng điều này sẽ tiết kiệm cho người khác một số rắc rối!
Gifford N.

1
Tôi đang gặp phải kết quả vấn đề tương tự như Gifford N. Tôi đang sử dụng cordova 7.0.0
Terry Wilkinson

18

Như đã nói csantanapr bạn có thể sử dụng:

cordova emulate ios --target="iPhone-4s"

nhưng, trong trường hợp này, dự án cordova (hoặc PhoneGap hoặc khác) sẽ được khởi chạy trên trình mô phỏng iPhone 4s với phiên bản iOS 7.0.3 .

Nếu bạn muốn khởi chạy dự án trên cùng một trình mô phỏng, nhưng với phiên bản iOS khác (7.1 hoặc 8.0, nếu phiên bản đó tồn tại trong hệ thống của bạn)?

Về thô thiển , bạn có thể làm như nói cobberboy :

khởi động một trình giả lập cụ thể và chọn phiên bản ios của bạn bằng cách sử dụng trực tiếp ios-sim.

Nhưng bạn có thể cải thiện --targettùy chọn của runlệnh cordova .

Đầu tiên, bạn phải đảm bảo phiên bản iOS mục tiêu nào có sẵn trên hệ thống của mình.

Đối với nó, sử dụng câu trả lời của cobberboy :

$ ios-sim showdevicetypes

Sau đó, bạn cần mở tệp your_project_dir/platforms/ios/cordova/lib/run.jsvà tìm các dòng mã như bên dưới:

// validate target device for ios-sim
// Valid values for "--target" (case sensitive):
var validTargets = ['iPhone-4s', 'iPhone-5', 'iPhone-5s', 'iPhone-6-Plus', 'iPhone-6',
    'iPad-2', 'iPad-Retina', 'iPad-Air', 'Resizable-iPhone', 'Resizable-iPad'];

Để sử dụng iPhone-4s, 7.1(hoặc một số khác), hãy thêm nó vào mảng validTargets.

var validTargets = ['iPhone-4s', 'iPhone-4s, 7.1', 'iPhone-5', 'iPhone-5s', 'iPhone-6-Plus', 'iPhone-6',
    'iPad-2', 'iPad-Retina', 'iPad-Air', 'Resizable-iPhone', 'Resizable-iPad'];

Và trong

cordova emulate ios --target="iPhone-4s, 7.1"

--target="iPhone-4s, 7.1"di chúc của bạn có giá trị.

Và chức năng deployToSimcủa run.js:

function deployToSim(appPath, target) {
// Select target device for emulator. Default is 'iPhone-6'
if (!target) {
    target = 'iPhone-6';
    console.log('No target specified for emulator. Deploying to ' + target + ' simulator');
}
var logPath = path.join(cordovaPath, 'console.log');
var simArgs = ['launch', appPath,
    '--devicetypeid', 'com.apple.CoreSimulator.SimDeviceType.' + target,
    // We need to redirect simulator output here to use cordova/log command
    // TODO: Is there any other way to get emulator's output to use in log command?
    '--stderr', logPath, '--stdout', logPath,
    '--exit'];
return spawn('ios-sim', simArgs);
}

chuyển đổi iPhone-4s, 7.1thành đối số hợp lệ com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 7.1cho ios-sim.


Điều này hoạt động hoàn hảo và cho phép tôi sử dụng ionic run ios --target='iPhone-6, 9.0'khi sử dụng Ionic Framework.
jorisw

Tốt tìm thấy 👍. Tôi chỉ đơn giản nhận xét ra các khối đó xác nhận validTargetsvà tôi đã có thể để xác định nền tảng đầy đủ, ví dụ: "--target="iPhone-6, 8.4"". Sẽ thực sự tốt nếu Cordova ủy nhiệm xác thực mục tiêu cho ios-sim.
Kyle Fox

Điều này không hiệu quả với tôi. Tôi đã nhập rác trong run.js và nó đã bị bỏ qua. Npm có cache cái này hay cái gì đó không? Làm cách nào để làm mới bộ nhớ cache của npm?
Randgalt,

Bạn cũng có thể chạy "nền tảng ion cập nhật ios" và bạn sẽ có thể chạy giả lập vừa mới cài đặt
Benjamin Piette

10

TL; DR

Bạn có thể bắt đầu một trình giả lập cụ thể và chọn phiên bản ios của mình bằng cách sử dụng trực tiếp ios-sim.

export appname="./platforms/ios/build/emulator/Hello World.app"
ios-sim launch "$appname" --devicetypeid "com.apple.CoreSimulator.SimDeviceType.iPad-2, 8.0" --stderr ./platforms/ios/cordova/console.log --stdout ./platforms/ios/cordova/console.log

Chi tiết

Khi tôi chạy cái này:

cordova emulate ios --target="iPad"

và xem xét các quy trình đang chạy, tôi thấy điều này (trên một dòng):

ios-sim launch ./platforms/ios/build/emulator/HelloWorld.app 
        --stderr ./platforms/ios/cordova/console.log 
        --stdout ./platforms/ios/cordova/console.log 
        --family ipad 
        --exit

Tìm hiểu thêm về ios-sim , có vẻ như có một số tùy chọn cụ thể hơn, cụ thể là:

--devicetypeid <device type>    The id of the device type that should be simulated (Xcode6+). Use 'showdevicetypes' to list devices.
  e.g "com.apple.CoreSimulator.SimDeviceType.Resizable-iPhone6, 8.0"

Vì vậy, tôi đã làm như nó đề xuất và chạy ios-sim với đối số "showdevicetypes" và nhận được điều này:

$ ios-sim showdevicetypes
com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 7.1
com.apple.CoreSimulator.SimDeviceType.iPhone-5, 7.1
com.apple.CoreSimulator.SimDeviceType.iPhone-5s, 7.1
com.apple.CoreSimulator.SimDeviceType.iPad-2, 7.1
com.apple.CoreSimulator.SimDeviceType.iPad-Retina, 7.1
com.apple.CoreSimulator.SimDeviceType.iPad-Air, 7.1
com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-5, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-5s, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-6, 8.0
com.apple.CoreSimulator.SimDeviceType.iPad-2, 8.0
com.apple.CoreSimulator.SimDeviceType.iPad-Retina, 8.0
com.apple.CoreSimulator.SimDeviceType.iPad-Air, 8.0
com.apple.CoreSimulator.SimDeviceType.Resizable-iPhone, 8.0
com.apple.CoreSimulator.SimDeviceType.Resizable-iPad, 8.0

Điều này hoạt động như thế nào để thay đổi trình mô phỏng mặc định? Bạn đang bỏ qua bit cordova ở đây và chỉ khởi chạy trực tiếp, phải không?
mix3d


4

Kể từ Xcode 8.3.2 ...

Chủ đề cũ, tôi biết, nhưng dường như, có lẽ, câu trả lời đã thay đổi một chút. Các gợi ý từ các bài đăng trước đó trong chuỗi này đã giúp ích, nhưng khi đọc tài liệu có trong mã,<cordova-project>/platforms/ios/cordova/lib/run.js

Thực thi ./platforms/ios/cordova/lib/list-emulator-imagesđể liệt kê các hình ảnh giả lập có sẵn. Không bao gồm số phiên bản ở cuối khi thực hiện cuộc gọi cordova để chạy trong trình mô phỏng mong muốn.

cordova run ios --emulator --target="iPad-Air"

Xem thêm


cảm ơn chúa cho bình luận của bạn! Nó không hoạt động sau bản cập nhật mới nhất và không thể tìm thấy bất kỳ thông tin nào. Chỉ nhận được thông báo lỗi: "Lỗi: Không thể đọc thuộc tính 'name' của undefined" đã được sửa sau khi KHÔNG bao gồm phiên bản ios.
Marco Rinck

@MarcoRinck kiểm tra các bình luận về câu trả lời, có nhanh chóng khắc phục bằng cách gõ:cordova run ios --target=iPhone-6
Kira Hảo

3

Tôi không thể bình luận về câu trả lời ở trên do danh tiếng của tôi thấp, nhưng danh sách mục tiêu có sẵn từ:

start-emulator 

Dưới

your platform/ios/cordova/lib/

Phải nói rằng, tôi không thể làm cho trình giả lập võng mạc ipad hoạt động ...


3

đầu ra nhanh nhất của danh sách thiết bị: $ instruments -s devices

Chỉ cần sử dụng tên thiết bị mà không cần phiên bản.



0

Trình mô phỏng iphone và ipad khác nhau

  1. cordova chạy ios - danh sách

  2. cordova giả lập ios - mục tiêu "iPhone-7"


0

Câu trả lời của @ Birja hiện đang hoạt động nhưng lệnh chạy mà anh ấy sử dụng cuối cùng vẫn sai nên đây là câu trả lời đúng:

Để liệt kê tất cả các thiết bị có sẵn trong trình mô phỏng cordova run ios --list

Nó sẽ dẫn đến một cái gì đó như thế này:

Available ios devices:
Available ios virtual devices:
Apple-TV-1080p, tvOS 12.2
Apple-Watch-Series-2-38mm, watchOS 5.2
iPhone-5s, 12.2
iPhone-6, 12.2
iPad-Air-2, 12.2
iPad--5th-generation-, 12.2
iPad-Pro--9-7-inch-, 12.2
iPad-Pro, 12.2
iPad-Pro--12-9-inch---2nd-generation-, 12.2
iPad-Pro--10-5-inch-, 12.2
iPad--6th-generation-, 12.2
iPad-Pro--11-inch-, 12.2
iPad-Pro--12-9-inch---3rd-generation-, 12.2

cordova run ios --target "iPad-Pro, 12.2"Sử dụng bất kỳ mục tiêu nào từ trên. Để chạy trong trình mô phỏng.

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.