[ios] Cordova : 특정 iOS 에뮬레이터 이미지 시작

저는 개발 단계에서 주로 iOS에 초점을 맞춘 Cordova를 사용하여 크로스 플랫폼 모바일 앱을 개발하고 있습니다.

내 개발 프로세스의 경우 명령 줄에서 직접 Cordova 앱을 시작하고 지정된 에뮬레이터로로드 할 수 있다면 이상적입니다. 프로젝트 루트 디렉터리에서 다음을 실행하여이를 수행 할 수 있습니다.

$cordova run --debug --emulator iOS

이것은 잘 작동하며 iOS 7.0.3을 사용하는 시뮬레이션 된 iPhone 4 Retina에서 내 앱을 실행하는 iOS 시뮬레이터가됩니다.

이 시뮬레이션 된 장치 외에도 iPad (예 :)에서 테스트하고 싶습니다. 이 에뮬레이션 이미지가 설치되어 있으며 Xcode에서 수동으로 앱을 시작할 수 있습니다. 또한 명령 list-emulator-images(에 있음 project_dir/platforms/ios/cordova/lib)은 다음 출력을 제공합니다.

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

그러나 문제는 기본 ( iPhone Retina (4-inch)에뮬레이션 이미지로 보이는) 이외의 다른 항목에서 에뮬레이터를 시작하는 방법을 알아낼 수 없다는 것 입니다. 의 관련 출력은 cordova help다음 정보 를 제공합니다.

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

나는 다음과 같은 것을 시도했습니다.

cordova run --debug --emulator=iPad iOS

그리고 많은 변형이 있지만 운이 없습니다. 동일한 에뮬레이터에서 시작할 때마다.

명령 줄 도구에 대한 문서 는 이와 관련하여 어떠한 정보도 제공하지 않으며 광범위한 Google 검색에서도 아무것도 찾지 못했습니다. 나는 사소한 것을 놓치고 있습니까? 아니면 뭔가 이상한 일을하려는 건가요? 여기 누군가가 이것에 대한 경험이 있고 몇 가지 답변을 제공 할 수 있기를 바랍니다.

미리 감사드립니다!

편집 : 명시 적으로 언급하는 것을 잊었습니다. 저는이 모든 것을 Mac에서하고 있습니다. 앞서 언급했듯이 Xcode의 다른 에뮬레이터 / 시뮬레이터에서 앱을 실행하면 정상적으로 작동합니다.



답변

사용 가능한 시뮬레이터 이미지가 무엇인지 알아 보려면 목록에 사용할 수 있습니다.

$ 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

그런 다음 –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"

중요 다른 대상 시뮬레이터를 시작하기 전에 시뮬레이터를 종료하십시오 (메뉴 모음에서를 선택하십시오 Simulator->Quit).

3.5에서 4 인치 iPhone으로 전환하려면 메뉴를 통해 iOS 시뮬레이터를 종료해야 할 수도 있습니다.

동적 목록은 platforms/ios/cordova/lib/list-emulator-images


답변

csantanapr 이라고 말하면 다음을 사용할 수 있습니다.

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

그러나이 경우에는 cordova (또는 PhoneGap 또는 기타) 프로젝트가 iOS 버전 7.0.3을 사용 하는 iPhone 4s 시뮬레이터 에서 시작됩니다 .

동일한 시뮬레이터에서 다른 버전의 iOS (시스템에 버전이있는 경우 7.1 또는 8.0)로 프로젝트를 시작하려면?

corse의 경우 cobberboy 라고 말하면 됩니다 .

특정 에뮬레이터를 시작하고 ios-sim을 직접 사용하여 iOS 버전을 선택하십시오.

그러나 당신 --target은 코르도바 run명령의 옵션을 향상시킬 수 있습니다 .

먼저 시스템에서 사용할 수있는 대상 iOS 버전을 확인해야합니다.

이를 위해 cobberboy의 답변을 사용 하십시오 .

$ ios-sim showdevicetypes

그런 다음 파일을 열고 your_project_dir/platforms/ios/cordova/lib/run.js아래와 같은 코드 줄을 찾아야합니다.

// 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'];

사용하기 위해 iPhone-4s, 7.1(또는 다른) 간단하게 array에 추가하십시오 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'];

그리고

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

당신 --target="iPhone-4s, 7.1"은 유효합니다.

그리고 기능 deployToSimrun.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);
}

에 대한 iPhone-4s, 7.1유효한 인수 로 변환하십시오 .com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 7.1ios-sim


답변

TL; DR

특정 에뮬레이터를 시작하고 ios-sim을 직접 사용하여 iOS 버전을 선택할 수 있습니다.

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

세부

내가 이것을 실행할 때 :

cordova emulate ios --target="iPad"

실행중인 프로세스를 살펴보면 다음과 같습니다 (한 줄로 표시).

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

ios-sim을 자세히 조사 해보면 특히 다음과 같은 몇 가지 구체적인 옵션이있는 것 같습니다.

--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"

그래서 “showdevicetypes”인수로 ios-sim을 제안한대로 실행하여 다음을 얻었습니다.

$ 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


답변

버전 번호를 포함하지 마십시오

cordova run ios --target="iPhone-6s"


답변

Xcode 8.3.2부터 …

이전 스레드는 알고 있지만 아마도 대답이 약간 변경된 것 같습니다. 이 스레드의 이전 게시물에서 얻은 힌트가 도움이되었지만 코드에 포함 된 문서를 읽는 것도 도움이되었습니다.<cordova-project>/platforms/ios/cordova/lib/run.js

실행 ./platforms/ios/cordova/lib/list-emulator-images하여 사용 가능한 에뮬레이터 이미지를 나열합니다. 원하는 에뮬레이터에서 실행하기 위해 cordova 호출을 할 때 끝에 버전 번호를 포함하지 마십시오.

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

더보기


답변

저의 평판이 낮기 때문에 위의 답변에 대해 언급 할 수 없지만 대상 목록은 다음에서 사용할 수 있습니다.

start-emulator 

아래에

your platform/ios/cordova/lib/

그래도 ipad retina 에뮬레이터를 작동시킬 수는 없습니다 …


답변

장치 목록의 가장 빠른 출력 :
$ instruments -s devices

버전없이 장치 이름을 사용하십시오.