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

Xcode 14.3中[CP] Embed Pods Frameworks构建脚本Bug及生成疑问

Xcode 14.3中[CP] Embed Pods Frameworks脚本处理符号链接路径失败的问题解决

在Xcode 14.3中,Build Phases里的[CP] Embed Pods Frameworks阶段调用的Pods-myapp-frameworks.sh脚本,在处理位于符号链接文件夹中的框架时执行失败。问题出在脚本解析符号链接时返回相对路径,但实际需要绝对路径:

原脚本第42-45行:

if [ -L "${source}" ]; then
   echo "Symlinked..."
   source="$(readlink "${source}")"
fi

添加-f参数让readlink返回绝对路径后,脚本恢复正常:

if [ -L "${source}" ]; then
   echo "Symlinked..."
   source="$(readlink -f "${source}")"
fi

但手动修改脚本后,担心下次执行pod install/pod update时会被覆盖,以下是针对你疑问的解答:

1. 该脚本的来源

Pods-myapp-frameworks.sh是CocoaPods自动生成的构建脚本,属于CocoaPods负责嵌入框架的核心逻辑部分。每次执行pod install或pod update时,CocoaPods会根据你的Podfile、项目配置以及当前安装的CocoaPods版本,从内置的脚本模板生成该文件,存放在项目的Pods/Target Support Files/Pods-myapp/目录下。

有两种可行方案:

  • 临时自动修复方案:在Podfile中添加post_install钩子,每次执行pod install后自动修改脚本内容。在你的Podfile末尾添加以下代码:
post_install do |installer|
  framework_script_path = "Pods/Target Support Files/Pods-myapp/Pods-myapp-frameworks.sh"
  if File.exist?(framework_script_path)
    script_content = File.read(framework_script_path)
    # 替换readlink为readlink -f
    updated_content = script_content.gsub(/readlink "\${source}"/, 'readlink -f "${source}"')
    File.write(framework_script_path, updated_content)
    puts "Updated #{framework_script_path} to use readlink -f for symlinks"
  end
end

替换其中的myapp为你的项目Target名称,这样每次执行pod install后,脚本会自动被修改为正确的逻辑。

  • 长期修复方案:
    1. 升级CocoaPods到最新稳定版本:这个符号路径解析的问题可能已经在后续版本的CocoaPods中被修复,执行gem install cocoapods升级后重新执行pod install验证。
    2. 如果升级后问题仍存在,可以前往CocoaPods的官方代码仓库提交Issue,描述你的场景和修复方案,官方可能会在后续版本中合并该修复。

3. 这是Xcode的Bug还是自身配置问题?

这个问题既不是Xcode的Bug,也不是你的项目配置问题,根源是CocoaPods生成脚本时的逻辑疏漏:macOS自带的是BSD版本的readlink,默认情况下返回相对路径,而脚本模板中没有考虑符号链接不在当前工作目录的情况,导致解析后的路径无效。Xcode只是负责执行CocoaPods生成的脚本,本身没有问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:17:11