Error: Cannot read property ‘replace’ of undefined when building iOS Cordova

New solution

This issue is fixed in the latest version of the “ios-sim” package (so now this is probably the easier solution – compared to the old one which is listed below). In order to update the “ios-sim” package to the latest version run this in your terminal/cmd:

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

Old solution

The problem is that the name_id_map[deviceName] returns undefined for “iPad Pro (12.9-inch)” and “iPad Pro (10.5-inch)“.

You can check it with a console.log('name_id_map[ deviceName ]: ' + name_id_map[ deviceName ]);.

I fixed this bug by adding an if statements which checks if the device is defined in “platforms/ios/cordova/node_modules/ios-sim/src/lib.js:282“.

I replaced this:

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

with this:

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

The “iPad Pro (10.5-inch)” simulator won’t be on the list (but it doesn’t probably work anyway – didn’t check).

Bug report on github: https://github.com/phonegap/ios-sim/issues/210

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)