Xcode 15(iOS17)编译适配报错
2023-11-06 本文已影响0人
你飞跃俊杰
一、Xcode 15 linking error
type argument ‘nw_proxy_config_t‘ is neither an Objective-C object nor a block type
nw_proxy_config_t这个属性说iOS17才出现的,需要忽略这个属性
结合以上分析可知,解决当前问题的关键在于 -DOS_OBJECT_USE_OBJC=0 编译器标志
通过post_integrate hook修改已经生成的Pods.xcodeproj,移除-DOS_OBJECT_USE_OBJC=0编译器标志。至于为什么不用post_install hook,那是因为必须要在项目写入完成后才能修改,否则会被覆盖从而导致修改失败。
post_integrate do |installer|
compiler_flags_key = 'COMPILER_FLAGS'
project_path = 'Pods/Pods.xcodeproj'
project = Xcodeproj::Project.open(project_path)
project.targets.each do |target|
target.build_phases.each do |build_phases|
if build_phases.is_a?(Xcodeproj::Project::Object::PBXSourcesBuildPhase)
build_phases.files.each do |file|
if !file.settings.nil? && file.settings.key?(compiler_flags_key)
compiler_flags = file.settings[compiler_flags_key]
file.settings[compiler_flags_key] = compiler_flags.gsub(/-DOS_OBJECT_USE_OBJC=0\s*/,'')
end
end
end
end
end
project.save()
end
补充:
如果遇到类似这样的报错:Sandbox:rsync deny(1) file-write-create …
将User Script Sandboxing设置为NO即可:
![](https://img.haomeiwen.com/i3355903/1456929bd242d395.png)
二、unary_function
No template named 'unary_function' in namespace 'std'; did you mean '__unary_function'?
![](https://img.haomeiwen.com/i3355903/9189e505085fa0b6.png)
_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION