You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by er...@apache.org on 2023/06/29 18:07:17 UTC

[cordova-ios] branch master updated: fix: Try updating Podfile deployment target on prepare (#1341)

This is an automated email from the ASF dual-hosted git repository.

erisu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cordova-ios.git


The following commit(s) were added to refs/heads/master by this push:
     new ad57677f fix: Try updating Podfile deployment target on prepare (#1341)
ad57677f is described below

commit ad57677fa4a66e245e30b471983ff783b63f8110
Author: Darryl Pogue <da...@dpogue.ca>
AuthorDate: Thu Jun 29 11:07:10 2023 -0700

    fix: Try updating Podfile deployment target on prepare (#1341)
---
 lib/Api.js      | 43 +++----------------------------------------
 lib/PodsJson.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 lib/prepare.js  | 18 ++++++++++++++++++
 3 files changed, 67 insertions(+), 40 deletions(-)

diff --git a/lib/Api.js b/lib/Api.js
index 95f8dec3..0437a1ad 100644
--- a/lib/Api.js
+++ b/lib/Api.js
@@ -34,7 +34,6 @@ const {
     PluginManager
 } = require('cordova-common');
 const util = require('util');
-const xcode = require('xcode');
 
 function setupEvents (externalEventEmitter) {
     if (externalEventEmitter) {
@@ -417,7 +416,7 @@ class Api {
                 projectFile.purgeProjectFileCache(this.locations.root);
 
                 return podfileFile.install(check_reqs.check_cocoapods)
-                    .then(() => this.setSwiftVersionForCocoaPodsLibraries(podsjsonFile));
+                    .then(() => podsjsonFile.setSwiftVersionForCocoaPodsLibraries(this.root));
             } else {
                 events.emit('verbose', 'Podfile unchanged, skipping `pod install`');
             }
@@ -506,7 +505,7 @@ class Api {
                 events.emit('verbose', 'Running `pod install` (to uninstall pods)');
 
                 return podfileFile.install(check_reqs.check_cocoapods)
-                    .then(() => this.setSwiftVersionForCocoaPodsLibraries(podsjsonFile));
+                    .then(() => podsjsonFile.setSwiftVersionForCocoaPodsLibraries(this.root));
             } else {
                 events.emit('verbose', 'Podfile unchanged, skipping `pod install`');
             }
@@ -520,43 +519,7 @@ class Api {
      * @param  {PodsJson}  podsjsonFile  A PodsJson instance that represents pods.json
      */
     setSwiftVersionForCocoaPodsLibraries (podsjsonFile) {
-        let __dirty = false;
-        return check_reqs.check_cocoapods().then(toolOptions => {
-            if (toolOptions.ignore) {
-                events.emit('verbose', '=== skip Swift Version Settings For Cocoapods Libraries');
-            } else {
-                const podPbxPath = path.join(this.root, 'Pods', 'Pods.xcodeproj', 'project.pbxproj');
-                const podXcodeproj = xcode.project(podPbxPath);
-                podXcodeproj.parseSync();
-                const podTargets = podXcodeproj.pbxNativeTargetSection();
-                const podConfigurationList = podXcodeproj.pbxXCConfigurationList();
-                const podConfigs = podXcodeproj.pbxXCBuildConfigurationSection();
-
-                const libraries = podsjsonFile.getLibraries();
-                Object.keys(libraries).forEach(key => {
-                    const podJson = libraries[key];
-                    const name = podJson.name;
-                    const swiftVersion = podJson['swift-version'];
-                    if (swiftVersion) {
-                        __dirty = true;
-                        Object.keys(podTargets)
-                            .filter(targetKey => podTargets[targetKey].productName === name)
-                            .map(targetKey => podTargets[targetKey].buildConfigurationList)
-                            .map(buildConfigurationListId => podConfigurationList[buildConfigurationListId])
-                            .map(buildConfigurationList => buildConfigurationList.buildConfigurations)
-                            .reduce((acc, buildConfigurations) => acc.concat(buildConfigurations), [])
-                            .map(buildConfiguration => buildConfiguration.value)
-                            .forEach(buildId => {
-                                __dirty = true;
-                                podConfigs[buildId].buildSettings.SWIFT_VERSION = swiftVersion;
-                            });
-                    }
-                });
-                if (__dirty) {
-                    fs.writeFileSync(podPbxPath, podXcodeproj.writeSync(), 'utf-8');
-                }
-            }
-        });
+        return podsjsonFile.setSwiftVersionForCocoaPodsLibraries(this.root);
     }
 
     /**
diff --git a/lib/PodsJson.js b/lib/PodsJson.js
index 598d9607..efea7d8d 100644
--- a/lib/PodsJson.js
+++ b/lib/PodsJson.js
@@ -20,6 +20,8 @@
 const fs = require('fs-extra');
 const path = require('path');
 const util = require('util');
+const xcode = require('xcode');
+const check_reqs = require('./check_reqs');
 const events = require('cordova-common').events;
 const CordovaError = require('cordova-common').CordovaError;
 
@@ -206,4 +208,48 @@ PodsJson.prototype.isDirty = function () {
     return this.__dirty;
 };
 
+/**
+ * set Swift Version for all CocoaPods libraries
+ */
+PodsJson.prototype.setSwiftVersionForCocoaPodsLibraries = function (projectRoot) {
+    let __dirty = false;
+    return check_reqs.check_cocoapods().then(toolOptions => {
+        if (toolOptions.ignore) {
+            events.emit('verbose', '=== skip Swift Version Settings For Cocoapods Libraries');
+        } else {
+            const podPbxPath = path.join(projectRoot, 'Pods', 'Pods.xcodeproj', 'project.pbxproj');
+            const podXcodeproj = xcode.project(podPbxPath);
+            podXcodeproj.parseSync();
+
+            const podTargets = podXcodeproj.pbxNativeTargetSection();
+            const podConfigurationList = podXcodeproj.pbxXCConfigurationList();
+            const podConfigs = podXcodeproj.pbxXCBuildConfigurationSection();
+
+            const libraries = this.getLibraries();
+            Object.keys(libraries).forEach(key => {
+                const podJson = libraries[key];
+                const name = podJson.name;
+                const swiftVersion = podJson['swift-version'];
+                if (swiftVersion) {
+                    __dirty = true;
+                    Object.keys(podTargets)
+                        .filter(targetKey => podTargets[targetKey].productName === name)
+                        .map(targetKey => podTargets[targetKey].buildConfigurationList)
+                        .map(buildConfigurationListId => podConfigurationList[buildConfigurationListId])
+                        .map(buildConfigurationList => buildConfigurationList.buildConfigurations)
+                        .reduce((acc, buildConfigurations) => acc.concat(buildConfigurations), [])
+                        .map(buildConfiguration => buildConfiguration.value)
+                        .forEach(buildId => {
+                            __dirty = true;
+                            podConfigs[buildId].buildSettings.SWIFT_VERSION = swiftVersion;
+                        });
+                }
+            });
+            if (__dirty) {
+                fs.writeFileSync(podPbxPath, podXcodeproj.writeSync(), 'utf-8');
+            }
+        }
+    });
+};
+
 module.exports.PodsJson = PodsJson;
diff --git a/lib/prepare.js b/lib/prepare.js
index ab9746b5..38239e4c 100644
--- a/lib/prepare.js
+++ b/lib/prepare.js
@@ -33,6 +33,8 @@ const PlatformMunger = require('cordova-common').ConfigChanges.PlatformMunger;
 const PluginInfoProvider = require('cordova-common').PluginInfoProvider;
 const FileUpdater = require('cordova-common').FileUpdater;
 const projectFile = require('./projectFile');
+const Podfile = require('./Podfile').Podfile;
+const check_reqs = require('./check_reqs');
 
 // launch storyboard and related constants
 const IMAGESET_COMPACT_SIZE_CLASS = 'compact';
@@ -309,6 +311,22 @@ function handleBuildSettings (platformConfig, locations, infoPlist) {
 
     project.write();
 
+    // If we have a Podfile, we want to update the deployment target there too
+    const podPath = path.join(locations.root, Podfile.FILENAME);
+    if (deploymentTarget && fs.existsSync(podPath)) {
+        const project_name = locations.xcodeCordovaProj.split(path.sep).pop();
+
+        const PodsJson = require('./PodsJson').PodsJson;
+        const podsjsonFile = new PodsJson(path.join(locations.root, PodsJson.FILENAME));
+        const podfileFile = new Podfile(podPath, project_name, deploymentTarget);
+        podfileFile.write();
+
+        events.emit('verbose', 'Running `pod install` (to install plugins)');
+        projectFile.purgeProjectFileCache(locations.root);
+        return podfileFile.install(check_reqs.check_cocoapods)
+            .then(() => podsjsonFile.setSwiftVersionForCocoaPodsLibraries(locations.root));
+    }
+
     return Promise.resolve();
 }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org