Xcode 15 Beta 3出现重复LC_RPATH弃用警告,如何解决?
Xcode 15 Beta 3 重复LC_RPATH 构建警告处理方案
是否需要修复
这些警告是Xcode 15启用的新链接器(ld64-1015+)新增的检查逻辑导致的,Xcode 14没开启这类检查所以没出现。虽然目前不影响项目构建和运行,但这类重复的rpath已经被标记为废弃(deprecated),后续Xcode正式版大概率会把这类警告升级为错误,导致构建失败,所以建议尽早修复。
具体修复方法
1. 项目/Target 自身配置问题
- 打开Xcode,选中要处理的Target,进入「Build Settings」页面
- 搜索
Runpath Search Paths(对应底层键名LD_RUNPATH_SEARCH_PATHS) - 检查列表里是否有重复的条目:比如
@executable_path/Frameworks、@loader_path/Frameworks或者/usr/lib/swift - 删除重复项,保留一份即可:iOS应用Target一般保留
@executable_path/Frameworks就足够;如果是Framework类型的Target,可能需要保留@loader_path/Frameworks,根据自身Target类型调整。
2. CocoaPods 依赖导致的重复
如果项目用了CocoaPods,旧版本的Pods可能会自动给每个Target重复添加rpath,解决方式:
- 优先升级CocoaPods到最新稳定版(比如1.12.x及以上),新版本已经适配Xcode 15的链接器规则,会自动避免重复添加rpath
- 暂时无法升级的话,在项目的Podfile末尾添加以下脚本,执行
pod install后会自动清理所有Pods Target的重复rpath:
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| current_rpaths = config.build_settings['LD_RUNPATH_SEARCH_PATHS'] next unless current_rpaths config.build_settings['LD_RUNPATH_SEARCH_PATHS'] = current_rpaths.uniq end end end
3. 第三方库内置重复rpath
如果是引入的第三方静态库/Framework本身携带了重复的LC_RPATH条目:
- 先用
otool工具验证:
otool -l YourFramework.framework/YourFramework | grep -A2 LC_RPATH
- 输出里如果看到重复的路径,优先联系库开发者更新版本;临时应急的话,可以用
install_name_tool删除重复项(注意:修改第三方库可能带来兼容性风险):
# 先通过otool找到重复rpath的索引,假设要删除的是@executable_path/Frameworks install_name_tool -delete_rpath @executable_path/Frameworks YourFramework.framework/YourFramework
内容的提问来源于stack exchange,提问作者Aleksandr Honcharov
相关产品推荐
相关产品推荐

