Cordova:特定のiOSエミュレーターイメージを開始する


120

Cordovaを使用してクロスプラットフォームのモバイルアプリを開発しています。開発段階では主にiOSに焦点を当てています。

私の開発プロセスでは、コルドバアプリをコマンドラインから直接起動して、指定したエミュレーターに読み込むことができれば理想的です。これを行うには、プロジェクトのルートディレクトリから次のコマンドを実行します。

$cordova run --debug --emulator iOS

これは正常に機能し、iOSシミュレーターはiOS 7.0.3でシミュレートされたiPhone 4 Retinaでアプリを実行します

このシミュレートされたデバイスに加えて、(たとえば)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パラメータでシミュレータ名の1つを使用します。

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/...は また、どうやら「コルドバのエミュレートがA」ラッパーVOOR IOS-SIMで、そのことができます話直接。これが私がやったことなので、選択したIDEから直接コードをビルドして起動できます。
EggMeister 2014年

私はこのコマンドを実行したところ、Xcode 6がインストールされていても、4.7および5.5インチのエミュレーターがリストされていないことを確認できました:-(
Ben Clayton

こんにちは、私はこのコマンド「./platforms/ios/cordova/lib/list-emulator-images」を試しましたが、すべてのオプションが表示されませんでした。iPhone6なし、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と同じ問題のある結果が出ています。cordova7.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、cordova 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(またはその他の)単純な場合は、配列に追加し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.1ためios-sim


これは完全に機能し、ionic run ios --target='iPhone-6, 9.0'Ionic Framework を使用するときに使用することができました。
jorisw

良い発見👍。検証するブロックをコメントアウトするだけでvalidTargets、完全なプラットフォームを指定できました"--target="iPhone-6, 8.4""。例:Cordovaがターゲットの検証をに委任した場合、本当に良いでしょうios-sim
カイルフォックス

これは私にはうまくいきません。run.jsにゴミを入力しましたが、無視されました。npmはこれをキャッシュしますか?npmのキャッシュを更新するにはどうすればよいですか?
Randgalt 2016

また、「ionic platform update ios」を実行すると、最近インストールされたエミュレーターを実行できるようになります
Benjamin Piette

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"

実行中のプロセスを見て、これを(1行で)見ました。

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 2017年


4

Xcode 8.3.2以降...

古いスレッドですが、おそらく答えが少し変わったようです。このスレッドの以前の投稿からのヒントは役に立ちましたが、コードに含まれているドキュメントを読んだので、<cordova-project>/platforms/ios/cordova/lib/run.js

実行./platforms/ios/cordova/lib/list-emulator-imagesして、利用可能なエミュレータイメージを一覧表示します。目的のエミュレーターで実行するようにコルドバ呼び出しを行うときは、最後にバージョン番号を含めないでください。

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

続きを見る


あなたのコメントを神に感謝します!最新のアップデート後には機能せず、情報も見つかりませんでした。エラーメッセージが表示されました:「エラー:未定義のプロパティ 'name'を読み取れません」これは、iOSバージョンを含めないようにした後で修正されました。
マルコリンク2017年

答えにコメントをチェック@MarcoRinck、次のように入力して簡単な修正があります:cordova run ios --target=iPhone-6
キラハオ

3

評判が低いため、上の回答にはコメントできませんが、ターゲットのリストは次の場所から入手できます。

start-emulator 

your platform/ios/cordova/lib/

とはいえ、iPad Retinaエミュレータを動作させることはできません...


3

デバイスリストの最速出力: $ instruments -s devices

バージョンなしでデバイス名を使用するだけです。



0

異なるiphoneおよびipadシミュレータ

  1. Cordova run ios --list

  2. コルドバはiosをエミュレート--target "iPhone-7"


0

@Birjaの答えは現在機能していますが、彼が最終的に使用したrunコマンドはまだ間違っているので、ここで正しい答え:

シミュレーターで使用可能なすべてのデバイスをリストするには 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.