web-dev-qa-db-ja.com

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

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

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

$cordova run --debug --emulator iOS

これはうまく機能し、iOS 7.0.3を搭載したシミュレートされたiPhone 4 Retinaでアプリを実行するiOSシミュレーターになります。

このシミュレートされたデバイスに加えて、(たとえば)iPadでもテストしたいと思います。これらのエミュレーションイメージがインストールされており、Xcodeで手動でアプリを起動できます。また、コマンドlist-emulator-imagesproject_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のさまざまなエミュレーター/シミュレーターでアプリを実行すると問題なく動作します。

111
EggMeister

利用可能なシミュレーター画像を調べるには、それらをリストするために使用できます

$ 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で利用可能です

323
csantanapr

csantanapr のように使用できます:

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

ただし、この場合、cordova(またはPhoneGapなど)プロジェクトがiOSバージョン7.0.3を搭載したiPhone 4sシミュレーターで起動されます。

同じシミュレータでプロジェクトを起動したいが、他のバージョンのiOS(システムにバージョンが存在する場合は7.1または8.0)を使用したい場合は?

もちろん、 cobberboy

特定のエミュレータを起動し、ios-simを直接使用してiOSバージョンを選択します。

ただし、cordova runコマンドの--targetオプションを改善できます。

最初に、システムで使用可能なターゲット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"が有効になります。

そして、run.jsの関数deployToSim

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.1com.Apple.CoreSimulator.SimDeviceType.iPhone-4s, 7.1の有効な引数ios-simに変換します。

17

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
10
cobberboy

バージョン番号を含めないでください

cordova run ios --target="iPhone-6s"
7
Ariel Ibarra

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"

詳細を参照

4
David Vezzani

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

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

3
Tino Rüb

私の評判が低いため、上記の答えにコメントすることはできませんが、ターゲットのリストは以下から入手できます。

start-emulator 

your platform/ios/cordova/lib/

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

3
Sergio

Cordovaアプリケーション用に既に生成されたビルドに基づいて、Web要求でiOSシミュレーターを実行します。ブラウザーからこのリクエストを実行すると、iPhone 8PlusバージョンのMacでシミュレーターが開きます。 http:// hostname:3000/cordova/build/[xxxx-buildnumber]/emulate?target = iPhone-8-Plus

0
Oleg Bondarenko

@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"上記のターゲットを使用します。シミュレーターで実行します。

0
Black Mamba

異なるiPhoneおよびiPadシミュレーター

  1. cordova run ios --list

  2. cordovaエミュレートiOS-ターゲット「iPhone-7」

0
BIRJA KUMAR