diff --git a/scripts/lib/iosWKWebViewEngineSupport.js b/scripts/lib/iosWKWebViewEngineSupport.js index 5e4747a9..d326cc6a 100644 --- a/scripts/lib/iosWKWebViewEngineSupport.js +++ b/scripts/lib/iosWKWebViewEngineSupport.js @@ -67,55 +67,49 @@ function isDirectoryExists(dir) { * @return {Object} projectFile - project file information */ function loadProjectFile() { - var platform_ios; - var projectFile; + try { + return loadProjectFile_cordova_7_and_above(); + } catch(e) { + } + + try { + return loadProjectFile_cordova_5_and_6(); + } catch(e) { + } try { - // try pre-5.0 cordova structure - platform_ios = context.requireCordovaModule('cordova-lib/src/plugman/platforms')['ios']; - projectFile = platform_ios.parseProjectFile(iosPlatformPath); + return loadProjectFile_cordova_pre_5(); } catch (e) { - // let's try cordova 5.0 structure - try { - platform_ios = context.requireCordovaModule('cordova-lib/src/plugman/platforms/ios'); - projectFile = platform_ios.parseProjectFile(iosPlatformPath); - } catch (e) { - // cordova 7.0 due to https://issues.apache.org/jira/browse/CB-11242 / https://github.com/apache/cordova-lib/pull/526 - var project_files = context.requireCordovaModule('glob') - .sync(path.join(iosPlatformPath, '*.xcodeproj', 'project.pbxproj')); - - if (project_files.length === 0) { - throw new Error('does not appear to be an xcode project (no xcode project file)'); - } + } - var pbxPath = project_files[0]; - - var xcodeproj = context.requireCordovaModule('xcode').project(pbxPath); - xcodeproj.parseSync(); - - projectFile = { - 'xcode': xcodeproj, - write: function () { - var fs = context.requireCordovaModule('fs'); - - var frameworks_file = path.join(iosPlatformPath, 'frameworks.json'); - var frameworks = {}; - try { - frameworks = context.requireCordovaModule(frameworks_file); - } catch (e) { } - - fs.writeFileSync(pbxPath, xcodeproj.writeSync()); - if (Object.keys(frameworks).length === 0) { - // If there is no framework references remain in the project, just remove this file - context.requireCordovaModule('shelljs').rm('-rf', frameworks_file); - return; - } - fs.writeFileSync(frameworks_file, JSON.stringify(this.frameworks, null, 4)); - } - }; - } + throw new Error('Failed to load iOS project file. Maybe your Cordova version is not supported?'); +} + +function loadProjectFile_cordova_pre_5() { + var platformIos = context.requireCordovaModule('cordova-lib/src/plugman/platforms')['ios']; + + return platformIos.parseProjectFile(iosPlatformPath); +} + +function loadProjectFile_cordova_5_and_6() { + var platformIos = context.requireCordovaModule('cordova-lib/src/plugman/platforms/ios'); + + return platformIos.parseProjectFile(iosPlatformPath); +} + +function loadProjectFile_cordova_7_and_above() { + var pbxPath = path.join(iosPlatformPath, projectName + '.xcodeproj', 'project.pbxproj'); + var xcodeproj = context.requireCordovaModule('xcode').project(pbxPath); + xcodeproj.parseSync(); + + var saveProj = function() { + fs.writeFileSync(pbxPath, xcodeproj.writeSync()); + }; - return projectFile; + return { + xcode: xcodeproj, + write: saveProj + }; } /**