cordova create project hello com.hello Hello
を使用してcordovaプロジェクトを作成しました。
cordova platform add iOS
を使用してiOSプラットフォームを追加しました。そして、cordova run ios
の後にcordova build ios
を実行しようとしました。
しかし、このエラーは表示されます(詳細を取得するために--d/--verboseを使用しました)。
/ usr/bin/codesign --force --sign---timestamp = none /Volumes/Untitled/Plot/PlotReel/platforms/ios/build/emulator/PlotReel.app/Volumes/Untitled/Plot/PlotReel/platforms/ios /build/emulator/PlotReel.app:既存の署名を置き換える
**成功しました**
フック「before_deploy」のスクリプトが見つかりませんでした。エラー:TypeError:未定義のプロパティ 'replace'を読み取れません
at remove (/Volumes/Untitled/Plot/test/platforms/ios/cordova/node_modules/ios-sim/src/lib.js:282:70) at Array.forEach (native) at Object.getdevicetypes (/Volumes/Untitled/Plot/test/platforms/ios/cordova/node_modules/ios-sim/src/lib.js:292:22) at Object.listEmulatorImages [as run] (/Volumes/Untitled/Plot/test/platforms/ios/cordova/lib/list-emulator-images:34:29) at deployToSim (/Volumes/Untitled/Plot/test/platforms/ios/cordova/lib/run.js:146:50) at /Volumes/Untitled/Plot/test/platforms/ios/cordova/lib/run.js:88:20 at _fulfilled (/Volumes/Untitled/Plot/test/platforms/ios/cordova/node_modules/q/q.js:834:54) at self.promiseDispatch.done (/Volumes/Untitled/Plot/test/platforms/ios/cordova/node_modules/q/q.js:863:30) at Promise.promise.promiseDispatch (/Volumes/Untitled/Plot/test/platforms/ios/cordova/node_modules/q/q.js:796:13) at /Volumes/Untitled/Plot/test/platforms/ios/cordova/node_modules/q/q.js:604:44
コルドバを再度アンインストールしてインストールしようとしましたが、問題はまだ残っています。
私を助けてください。
新しいソリューション
この問題は、「ios-sim」パッケージの最新バージョンで修正されています(したがって、これはおそらく、以下にリストされている古いものと比較して、より簡単なソリューションです)。 「ios-sim」パッケージを最新バージョンに更新するには、ターミナル/ cmdでこれを実行します。
cd platforms/ios/cordova/node_modules/
Sudo npm install -g ios-sim@latest
古いソリューション
問題は、「iPad Pro(12.9インチ)」および「iPad Pro(10.5インチ)に対してname_id_map[deviceName]
がundefined
を返すことです)」。
console.log('name_id_map[ deviceName ]: ' + name_id_map[ deviceName ]);
で確認できます。
デバイスが「platforms/ios/cordova/node_modules/ios-sim/src/lib.js:282」で定義されているかどうかを確認するifステートメントを追加して、このバグを修正しました。 。
私はこれを置き換えました:
list = [];
var remove = function(runtime) {
// remove "iOS" prefix in runtime, remove prefix "com.Apple.CoreSimulator.SimDeviceType." in id
list.Push(util.format('%s, %s', name_id_map[ deviceName ].replace(/^com.Apple.CoreSimulator.SimDeviceType./, ''), runtime.replace(/^iOS /, '')));
};
これとともに:
list = [];
var remove = function(runtime) {
// remove "iOS" prefix in runtime, remove prefix "com.Apple.CoreSimulator.SimDeviceType." in id
if (name_id_map[deviceName] && runtime) {
list.Push(util.format('%s, %s', name_id_map[deviceName].replace(/^com.Apple.CoreSimulator.SimDeviceType./, ''), runtime.replace(/^iOS /, '')));
}
};
「iPad Pro(10.5-inch)」シミュレーターはリストにありません(しかし、おそらくとにかく動作しないでしょう-チェックしませんでした)。
Githubのバグレポート: https://github.com/phonegap/ios-sim/issues/21
プロジェクトフォルダのルートで、cd platforms/ios/cordova && npm install ios-sim
を実行します
同じエラーが発生しました。私にとっては、これをplatforms/ios/cordova/node_modules/ios-sim/src/lib.jsのバグにたどりました。
getdevicetypes: function(args) {
...
list.devicetypes.forEach(function(device) {
name_id_map[ filterDeviceName(device.name) ] = device.id;
});
list = [];
var remove = function(runtime) {
// remove "iOS" prefix in runtime, remove prefix "com.Apple.CoreSimulator.SimDeviceType." in id
list.Push(util.format('%s, %s', name_id_map[ deviceName ].replace(/^com.Apple.CoreSimulator.SimDeviceType./, ''), runtime.replace(/^iOS /, '')));
};
このエラーは常に、lib.js:289で「TypeError:undefinedのプロパティ 'replace'を読み取れません」として発生しました。
list.Push(util.format('%s, %s', name_id_map[ deviceName ].replace(/^com.Apple.CoreSimulator.SimDeviceType./, ''), runtime.replace(/^iOS /, '')));
そこで、デバッグコードを挿入しました。
list.devicetypes.forEach(function(device) {
console.log('test 1 ' + device.name);
console.log('test 2 ' + filterDeviceName(device.name));
name_id_map[ filterDeviceName(device.name) ] = device.id;
});
これは私のために働いた。幸運を。
list = [];
var remove = function(runtime) {
// remove "iOS" prefix in runtime, remove prefix "com.Apple.CoreSimulator.SimDeviceType." in id
console.log('remove 1 ' + runtime);
console.log('remove 2 ' + deviceName);
console.log('remove 3 ' + name_id_map[ deviceName ]);
list.Push(util.format('%s, %s', name_id_map[ deviceName ].replace(/^com.Apple.CoreSimulator.SimDeviceType./, ''), runtime.replace(/^iOS /, '')));
};
そして、次の出力を得ました:
test 1 iPhone 5
test 2 iPhone 5
test 1 iPad Pro (9.7-inch)
test 2 iPad Pro (9.7 inch)
remove 1 iOS 10.2
remove 2 iPhone 5
remove 3 com.Apple.CoreSimulator.SimDeviceType.iPhone-5
remove 1 iOS 10.2
remove 2 iPad Pro (9.7-inch)
remove 3 undefined
FilterDeviceNameがハッシュを埋めるときにマイナス文字を削除したことに注意してください。値が再度取得されると、フィルターは適用されず、プログラムは失敗します。
バグ修正:ハッシュの読み書き中にフィルターを適用します。
list.Push(util.format('%s, %s', name_id_map[ filterDeviceName(deviceName) ].replace(/^com.Apple.CoreSimulator.SimDeviceType./, ''), runtime.replace(/^iOS /, '')));
私の問題を修正したGithubのPRがあります: https://github.com/phonegap/ios-sim/pull/21
私のプロジェクトルート内で次のように呼ばれました
nano platforms/ios/cordova/node_modules/ios-sim/src/lib.js
ここで指摘されているように、デバイス名をフィルタリングする機能を追加しました: https://github.com/phonegap/ios-sim/pull/213/files
最近xcode 8.3.3 and ionic 3.4.0
にアップグレードしました
MyApp/platforms/ios/cordova/node_modulesからios-simディレクトリを削除しましたが、現在は機能しています。
私はちょうどこれに遭遇し、私のために働く何かを追加するだろうと思った-ソリューションnpm install ios-sim
はしませんでした。
私がしたことは、XCodeを開いて、Generic iOS Deviceを指していたのは、物理デバイスでアプリをテストするときに最後に使用したときからでした。 iOSシミュレーターをiOSシミュレーターのリストにあるものに変更し、再試行したところ、魅力的に機能しました!
これが同じ状況の他の誰かを助けるかもしれないことを願っています。
Ios-simバージョンをnpm install ios-sim@latest
で更新してもうまくいきませんでした。しかし、Githubで素敵で簡単なソリューションが見つかった場合。
/platforms/ios/cordova/node_modules/ios-sim/src/lib.js
を開きますdeviceName
を検索しますname_id_map[ deviceName ]
をname_id_map[filterDeviceName(deviceName)]
に置き換えますGithubの投稿を見つけることができます こちら
別のオプションは、cordova-ios
パッチが既に実装されているios-sim
バージョンを使用することです
cordova platform add https://github.com/Apache/cordova-ios.git#4.4.0-ios-sim
これはApache Cordovaの公式リリースではないことに注意してください。これは次の4.4.1バージョンに含まれます。
私は次のコマンドを実行しましたが、それは私の問題を解決します:
cd project_dir
Sudo npm install ios-sim @ latest