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


120

저는 개발 단계에서 주로 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의 다른 에뮬레이터 / 시뮬레이터에서 앱을 실행하면 정상적으로 작동합니다.

답변:


335

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

$ 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


3
감사합니다. 이것의 출처는 무엇입니까? 이 질문에 대한 답변은 많은 도움이되었습니다. stackoverflow.com/questions/13877840/… 분명히 'cordova emulate'는 ios-sim에 대한 래퍼입니다. 직접. 이것이 제가 최종적으로 한 작업이므로 선택한 IDE에서 직접 코드를 빌드하고 실행할 수 있습니다.
EggMeister 2014 년

난 그냥도 :-( 설치 엑스 코드 (6)와,이 명령을 실행하고, 4.7 및 5.5 인치 에뮬레이터가 나열되지 확인할 수 있습니다
벤 클레이튼에게

안녕하세요, "./platforms/ios/cordova/lib/list-emulator-images"명령을 시도했지만 모든 옵션이 표시되지 않았습니다. iPhone 6 없음, iPhone 6-Plus 없음, iPad-Air 없음 문제? 감사합니다
user2120121 2015 년

10
왜 그런지는 모르겠지만 "Error: Cannot read property 'name' of undefined"따옴표로 대상을 지정할 때 Cordova CLI가 발생하므로 다음과 같이 실행해야만 작동합니다 cordova run ios --target=iPhone-6. 이것이 다른 사람의 문제를 덜어주기를 바랍니다!
Gifford N.

1
Gifford N과 동일한 문제가 있습니다. cordova 7.0.0을 사용하고 있습니다.
Terry Wilkinson

18

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


이것은 완벽하게 작동하며 ionic run ios --target='iPhone-6, 9.0'Ionic Framework 를 사용할 때 사용할 수 있습니다 .
jorisw

좋은 찾기 👍. 유효성을 검사하는 블록을 간단히 주석 처리 validTargets하고 전체 플랫폼을 지정할 수있었습니다 "--target="iPhone-6, 8.4"". 예 : . Cordova가 대상 유효성 검사를 ios-sim.
Kyle Fox

이것은 나를 위해 작동하지 않습니다. run.js에 쓰레기를 입력했는데 무시되었습니다. npm은 이것 또는 무언가를 캐시합니까? npm의 캐시를 어떻게 새로 고칠 수 있습니까?
Randgalt

또한 "ionic platform update ios"를 실행할 수 있으며 최근에 설치된 에뮬레이터를 실행할 수 있습니다
Benjamin Piette 2016 년

10

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

기본 시뮬레이터를 변경하려면 어떻게 작동합니까? 여기에서 코르도바 비트를 우회하고 바로 발사하는 거죠?
mix3d


4

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"

더보기


귀하의 의견에 감사드립니다! 최신 업데이트 후 작동하지 않았고 정보를 찾을 수 없습니다. 오류 메시지 : "오류 : 정의되지 않은 '이름'속성을 읽을 수 없습니다."라는 오류 메시지가 나타납니다. 이는 iOS 버전을 포함하지 않은 후 수정되었습니다.
Marco Rinck 2017-06-23

대답에 코멘트를 확인 @MarcoRinck 입력하여 빠른 수정이있다 :cordova run ios --target=iPhone-6
키라 하오

3

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

start-emulator 

아래에

your platform/ios/cordova/lib/

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


3

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

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



0

다른 아이폰과 아이 패드 시뮬레이터

  1. cordova run ios --list

  2. Cordova 에뮬레이트 ios --target "iPhone-7"


0

@Birja의 대답은 지금 작동하지만 마지막으로 사용한 실행 명령은 여전히 ​​잘못되었으므로 여기에 올바른 대답이 있습니다.

시뮬레이터에서 사용 가능한 모든 장치를 나열하려면 cordova run ios --list

결과는 다음과 같습니다.

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"위의 대상을 사용하십시오. 시뮬레이터에서 실행합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.