升级到Xcode 15后,原先Xcode14可以编译的项目出现大量Duplicate symbols,且引用报错指向同一个路径(一般为Framework)下的同一个文件。经过查找相关解决,可通过
在Xcode -> Target -> Build Setting -> Other Linker Flags 添加一行"-ld64"
即可解决该问题
原因是Xcode15采用了新的链接器(Linker),被称作“ld_prime”。新的连接器有诸多好处,尤其是对合并库的支持方面,具体可以查看WWDC 2023 SESSION 10268Meet mergeable libraries.。然而,链接器的升级可能会出现不兼容老库的情况出现。遇到这种情况,可以通过恢复旧的连接器来解决这个问题。从Other Linker Flags添加"-ld64"后,就会覆盖Xcode编译时选择的链接器,因此可以正常访问。
也可以用cocoapods 安装之后修改OTHER_LDFLAGS
xcode_version = `xcodebuild -version`.match(/Xcode (\d+)/)[1].to_i
target_names = ['targer_name']
installer.pods_project.targets.each do |target|
next unless target_names.include?(target.name)
target.build_configurations.each do |config|
config.build_settings['OTHER_LDFLAGS'] ||= []
if xcode_version >= 15
unless config.build_settings['OTHER_LDFLAGS'].include?('-ld64')
config.build_settings['OTHER_LDFLAGS'] << '-ld64'
end
else
config.build_settings['OTHER_LDFLAGS']&.delete('-ld64')
end
end
end