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

Mac M1设备Xcode归档时readlink非法选项-f错误及后续问题

Mac M1 Xcode Archive 报错解决指南

问题根源

M1 Mac搭载的是BSD系的readlink工具,不支持GNU版本的-f参数,而Xcode打包时生成的Pod框架脚本(*-frameworks.sh)中使用了readlink -f,触发readlink: illegal option -- f错误;直接移除-f后,又会因为路径不是绝对路径引发Rsync传输失败(code 23)。

有效解决方案

方案一:修改Podfile脚本,替换为BSD兼容的绝对路径写法

替换原有无效的post_install脚本,改用BSD支持的方式获取绝对路径:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    shell_script_path = "Pods/Target Support Files/#{target.name}/#{target.name}-frameworks.sh"
    next unless File.exist?(shell_script_path)
    
    script_content = File.read(shell_script_path)
    # 用realpath替换readlink -f(M1 macOS自带realpath)
    script_content = script_content.gsub(/readlink -f/, 'realpath')
    
    File.write(shell_script_path, script_content)
  end
end

修改后执行pod install,再尝试Archive即可。如果系统没有realpath,可以把替换逻辑改成:

script_content = script_content.gsub(/source="\$\(readlink -f "\${source}"\)"/, 'source="$(cd "$(dirname "${source}")" && pwd)/$(basename "${source}")"')

方案二:手动修改框架脚本(临时应急)

找到对应Target的*-frameworks.sh文件(路径:Pods/Target Support Files/[你的Target名]/[你的Target名]-frameworks.sh),将所有readlink -f替换为realpath,或者替换成以下shell代码:

source="$(cd "$(dirname "${source}")" && pwd)/$(basename "${source}")"

保存后重新执行Archive操作。

方案三:安装GNU版readlink(依赖Homebrew)

  1. 通过Homebrew安装GNU核心工具:
brew install coreutils
  1. 修改*-frameworks.sh脚本,将readlink -f替换为greadlink -f(GNU版readlink的命令名为greadlink)
  2. 确保Xcode执行脚本时能找到greadlink,可在脚本开头添加:
PATH="/usr/local/bin:$PATH"

原有Pod脚本无效的原因

你之前添加的脚本是将无-f的readlink替换为带-f的版本,这反而会在更多地方引入不支持的参数,加重报错,完全搞反了修复逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:37:27