快速解决升级 Xcode 15.3 后出现的构建问题 & 原因

上一篇刚吐槽完 vue 的生态插件升级后出幺蛾子的问题Vue - Official 请降级到 1.8.x

今天又轮到 Xcode 升级到 15.3,项目构建失败了,打工人真不易。

当然,最快速的方式是先降回 14.x「手动狗头」,但笔者仔细研究了下,感觉等新版苹果帮你做兼容可能不现实了,原因文中会讲 ~

如果你的项目比较新,没有什么历史包袱,那恭喜你,升级上去也不会有什么问题,大胆的造。

如果升级后遇到笔者这三个问题,希望能帮助到你快速解决掉。

问题一:附件报错 CompileAssetCatalog failed

报错信息如上截图,构建过程中,一个编译附件图片的工具挂掉了。对,他就是这么任性的崩了 ...

解决方式

检查如图所示,报错报出来的 assets 目录中的 SVG 文件,搜索这些 SVG 文件内容是否使用了objectBoundingBox且它们的高度/宽度 > 100%。如果有,换个图或者改为 100% 以内。

原因

XCode 15.3 Command CompileAssetCatalog failed with a nonzero exit code这个帖子有人提到,这感觉是苹果做了强校验导致的,解决方式其实也在这帖子的回复里面:

笔者项目里的出问题的 SVG 也没什么用了,所以直接删除解决 ~

问题二:C++ 枚举报错

笔者是报这个integer value -1 is outside the valid range of values [0, 3] for this enumeration type但其他枚举相关的应该都可以用相同方式解决。

解决方式

ruby 复制代码
post_install do |installer|
  pod_targets = installer.pods_project.targets
  pod_targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['WARNING_CFLAGS'] = '-Wno-enum-constexpr-conversion'
    end
  end
end

直接设置所有的 pod 仓库,-Wno-enum-constexpr-conversion 忽略掉枚举的报错问题。

如果是在主工程,那就在主工程的settings中加上这句:

原因

这个跟 Clang 升级了有关,C++ 的枚举检测出异常,从警告等级上升到报错等级,简而言之就是代码检查更完善了,但对于我们这种引用库都是2,3年前的,无人维护的代码来说,就是场灾难 ~

好在可以忽略掉这个报错 ~

具体是翻到这篇文章:reviews.llvm.org/D150226 虽然不是说的 XCode,但确实给了笔者灵感,应用了他们的改法。

问题三:C++ 代码报错 std::function 找不到

类似这种。

解决方式

ruby 复制代码
post_install do |installer|
  pod_targets = installer.pods_project.targets
  pod_targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', '_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION']
    end
  end
end

加上这个_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION即可。

原因

这个是从这篇 RN 的文章找到的:github.com/facebook/re...

这里面提到:

这是因为 XCode 升级 15 后废弃了一些过时方法:

附上官网:Xcode 15 Release Notes,确实升级了很多东西,也废弃了很多,废弃往往意味着老项目就会脸着地 ...

另外

这个问题确实是花时间最多的,主要原因是笔者公司项目有个出问题的二方库,且是编译成 xcFramework 依赖的,而这一部分加这句是没效果的,笔者项目一直报错 std::function 找不到,最后从 GPT 找到的灵感:

最后翻出这个出问题的、两年没人维护的二方库(好在以前的开发很贴心留的 Demo 测试工程还能用),果然,Demo 也编译不过,还是会报这个问题。

原因是没有包含 <functional> 头文件 ???!!!那以前是怎么编译过的,也是百思不得其解 ...

加上头文件后,一切正常:

然后就是打包 xcFramework,发布到公司的二方仓库上,重新依赖新版本,构建成功 ~

总结

现在 iOS 开发也不多了,新项目就更少了,维护的老项目升级起来确实问题很多,但如果不解决,会越来越多 ~ 且行且珍惜 ~

相关推荐
zzywxc7872 天前
AI 在金融、医疗、教育、制造业等领域都有广泛且深入的应用,以下是这些领域的一些落地案例
人工智能·金融·自动化·prompt·ai编程·xcode
19岁开始学习3 天前
Go语言中的Zap日志库
开发语言·golang·xcode
Everbrilliant895 天前
Xcode上编译调试ffmpeg
macos·ffmpeg·xcode·ffmpeg源码编译工具·xcode调试ffmpeg源码·ffmpeg工具环境变量配置
zzywxc7877 天前
AI行业应用:金融、医疗、教育、制造业的落地实践与技术创新
人工智能·机器学习·金融·自动化·prompt·ai编程·xcode
邢大飞David8 天前
macOS 下使用 mitmproxy 增强 Xcode AI 能力配置指南 (v2 - 自动化脚本版)
xcode
Stars20249 天前
【gin框架读取参数的方式】
iphone·xcode·gin
阿里云云原生10 天前
让每次语音唤醒都可靠,公牛沐光重构可观测体系
macos·阿里云·重构·xcode·可观测
00后程序员张12 天前
iOS 开发环境搭建完整指南 Xcode 安装配置、iOS 开发工具选择、ipa 打包与 App Store 上架实战经验
android·macos·ios·小程序·uni-app·iphone·xcode
zzywxc78712 天前
AI 行业应用:AI 在金融、医疗、教育、制造业等领域的落地案例
人工智能·spring·金融·prompt·语音识别·xcode
天堂罗恋歌13 天前
CocoaPods 安装 Masonry 库时出现的网络连接问题处理
ios·iphone·xcode·cocoapods·app store