You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级cordova-ios 7后LD_RUNPATH_SEARCH_PATHS冲突致Pod安装失败求助

解决cordova-ios 7升级后Azure DevOps Pipeline中CocoaPods安装失败问题

问题背景

升级至cordova-ios 7后,执行cordova add platform ios命令虽能完成,但未自动安装CocoaPods,后续cordova prepare ios流程失败,报错如下:

AppName [Release]目标覆盖了Pods/Target Support Files/Pods-AppName/Pods-AppName.release.xcconfig中定义的LD_RUNPATH_SEARCH_PATHS构建设置,这可能导致CocoaPods安装出现问题

由于构建流程基于Azure DevOps Pipeline,无法手动通过Xcode修改配置,可通过以下自动化方案解决:

解决方案

1. 用Cordova Hook自动修复Xcode构建设置

在项目中添加Cordova钩子脚本,在添加iOS平台后自动修正LD_RUNPATH_SEARCH_PATHS的继承配置:

  • 新建hooks/after_platform_add/fix_ld_runpath.js文件,内容如下:
const xcode = require('xcode');
const fs = require('fs');
const path = require('path');

module.exports = function(context) {
    const projectRoot = context.opts.projectRoot;
    const xcodeprojPath = path.join(projectRoot, 'platforms', 'ios', 'AppName.xcodeproj', 'project.pbxproj');
    const project = xcode.project(xcodeprojPath).parseSync();

    // 获取Release目标的构建设置
    const releaseConfig = project.pbxXCBuildConfigurationSection();
    for (const key in releaseConfig) {
        if (releaseConfig[key].name === 'Release' && releaseConfig[key].buildSettings) {
            // 设置LD_RUNPATH_SEARCH_PATHS为继承Pods配置
            releaseConfig[key].buildSettings.LD_RUNPATH_SEARCH_PATHS = '"$(inherited)"';
            break;
        }
    }

    // 保存修改后的项目文件
    fs.writeFileSync(xcodeprojPath, project.writeSync());
    console.log('已修复LD_RUNPATH_SEARCH_PATHS配置,改为继承Pods设置');
};
  • 在config.xml中注册该钩子:
<hook type="after_platform_add" src="hooks/after_platform_add/fix_ld_runpath.js" />
  • 注意:需先在项目根目录执行npm install xcode --save-dev安装依赖包。

2. 在Azure DevOps Pipeline中手动执行CocoaPods安装

在Pipeline的cordova prepare ios步骤前,添加一个Bash任务手动执行pod install:

- task: Bash@3
  inputs:
    targetType: 'inline'
    script: |
      cd platforms/ios
      pod install --repo-update
  displayName: '安装CocoaPods依赖'

该步骤可确保CocoaPods依赖被正确安装,不受cordova命令的影响。

3. 通过build.json配置统一设置构建设置

在项目根目录创建或修改build.json,为iOS Release环境指定LD_RUNPATH_SEARCH_PATHS为继承模式:

{
  "ios": {
    "release": {
      "buildFlag": [
        "LD_RUNPATH_SEARCH_PATHS=\"$(inherited)\""
      ]
    }
  }
}

后续执行cordova build ios --release时,会自动应用该配置,避免覆盖Pods的设置。

内容的提问来源于stack exchange,提问作者Diego

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:42:52