run proyecto generate descargar crear app ios cordova npm npm-install

proyecto - Error: No se puede leer la propiedad ''reemplazar'' de indefinido al construir iOS Cordova



crear proyecto phonegap (9)

Actualizar la versión de ios-sim con npm install ios-sim@latest no funcionó para mí. Pero si encuentra una solución agradable y fácil en Github.

  1. Abre /platforms/ios/cordova/node_modules/ios-sim/src/lib.js
  2. Busque deviceName con su editor de código
  3. Reemplazar name_id_map[ deviceName ] con name_id_map[filterDeviceName(deviceName)]

Puedes encontrar el post de Github https://github.com/phonegap/ios-sim/pull/213/files

cordova create project hello com.hello Hello un proyecto de cordova usando cordova create project hello com.hello Hello .

Y la plataforma iOS agregada usando la cordova platform add iOS . Y traté de hacer cordova run ios después de cordova build ios .

Pero me muestra este error (utilicé --d / --verbose para obtener los detalles).

/ 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: reemplazando la firma existente

** CONSTRUYE ÉXITO **

No se encontraron scripts para el enlace "before_deploy". Error: TypeError: no se puede leer la propiedad ''replace'' de undefined

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

He intentado desinstalar e instalar Cordova de nuevo, pero el problema aún persiste.

Por favor, ayúdame.


Hace poco comencé a xcode 8.3.3 and ionic 3.4.0

He eliminado el directorio ios-sim de myApp / platforms / ios / cordova / node_modules y ahora está funcionando.



He ejecutado los siguientes comandos y resuelve mi problema:

cd project_dir

sudo npm instala ios-sim @ latest


Me acabo de topar con esto y pensé que agregaría algo que funcionó para mí: la solución npm install ios-sim no lo hizo.

Todo lo que hice fue abrir XCode y apuntó a Dispositivo Genérico iOS desde la última vez que lo usé para probar una aplicación en un dispositivo físico. ¡Acabo de cambiar el simulador de iOS para que sea cualquier cosa en la lista del simulador de iOS, lo reintenté y funcionó como un amuleto!

Espero que esto pueda ayudar a alguien más en la misma situación.


Otra opción es usar una versión cordova-ios con el parche ios-sim ya implementado

cordova platform add https://github.com/apache/cordova-ios.git#4.4.0-ios-sim

Tenga en cuenta que este no es un lanzamiento oficial de Apache Cordova, esto se incluirá en la próxima versión 4.4.1.


Yo tenía el mismo error. Para mí rastreé esto en un error en las plataformas / 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 /, ''''))); };

El error siempre ocurre como "TypeError: no se puede leer la propiedad ''replace'' of undefined" en lib.js: 289

list.push(util.format(''%s, %s'', name_id_map[ deviceName ].replace(/^com.apple.CoreSimulator.SimDeviceType./, ''''), runtime.replace(/^iOS /, '''')));

Así que inserté un código de depuración:

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; });

Esto funcionó para mí. Buena suerte.

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 /, ''''))); };

y obtuve el siguiente resultado:

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

Observe cómo filterDeviceName eliminó el carácter menos al completar el hash. Cuando el valor se recupera nuevamente, el filtro no se aplica y el programa falla.

Corrección de errores: aplique el filtro mientras escribe y lee desde el hash.

list.push(util.format(''%s, %s'', name_id_map[ filterDeviceName(deviceName) ].replace(/^com.apple.CoreSimulator.SimDeviceType./, ''''), runtime.replace(/^iOS /, '''')));


en la raíz de su carpeta de proyecto, haga cd platforms/ios/cordova && npm install ios-sim


Nueva solución

Este problema está resuelto en la última versión del paquete "ios-sim" (por lo que ahora esta es probablemente la solución más sencilla, en comparación con la anterior que se enumera a continuación). Para actualizar el paquete "ios-sim" a la última versión, ejecute esto en su terminal / cmd:

cd platforms/ios/cordova/node_modules/ sudo npm install -g ios-sim@latest

Vieja solución

El problema es que name_id_map[deviceName] devuelve undefined para " iPad Pro (12.9 pulgadas) " y " iPad Pro (10.5 pulgadas) ".

Puede verificarlo con console.log(''name_id_map[ deviceName ]: '' + name_id_map[ deviceName ]); .

Arreglé este error agregando una instrucción if que verifica si el dispositivo está definido en " plataformas / ios / cordova / node_modules / ios-sim / src / lib.js: 282 ".

Reemplacé esto:

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 /, ''''))); };

con este:

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 /, ''''))); } };

El simulador "iPad Pro (10.5 pulgadas)" no estará en la lista (pero probablemente no funcione de todos modos, no lo hizo).

Informe de error en github: https://github.com/phonegap/ios-sim/issues/210