最近做 iOS app submit 的时分报了一个正告,提示当时项目运用的 sdk 版别过低,4 月底后就不能再提交了,除非对它进行晋级。目前项目构筑运用的 xcode 版别是 14.2,查询 developer.apple.com/cn/support/… 能够得知 14.2 对应的是 iOS 16.2 ,而 5 月开端最低的版别都现已要 17.0 以上了,因而着手准备晋级作业。
改 xcode 版别
我司运用的是 microsoft app center,上面能够配置 xcode 的版别以及证书等信息。首先当然是改 xcode 的版别,假如能一次 build 成功的话,我们也就不用辛苦的建立本地环境去构建了,我把 xcode 的版别升到了 15.2,然后发现失败了,所以开端本地调试
找到并改正问题
调试过程中我发现问题只要呈现在 GoogleDataTransport 和 yoga 这两个 lib 上
GoogleDataTransport 报错的地方不少,但问题都相同,都是 A function declaration without a prototype is deprecated in all versions of C
以下展现下报错的一处地方
GDTCORNetworkType GDTCORNetworkTypeMessage() {
#if !TARGET_OS_WATCH
SCNetworkReachabilityFlags reachabilityFlags = [GDTCORReachability currentFlags];
**if** ((reachabilityFlags & kSCNetworkReachabilityFlagsReachable) ==
kSCNetworkReachabilityFlagsReachable) {
**if** (GDTCORReachabilityFlagsContainWWAN(reachabilityFlags)) {
**return** GDTCORNetworkTypeMobile;
} **else** {
**return** GDTCORNetworkTypeWIFI;
}
}
#endif
**return** GDTCORNetworkTypeUNKNOWN;
}
改动也很简略,在入参处加个 void 即可,即 GDTCORNetworkType GDTCORNetworkTypeMessage(void)
yoga 报的问题是 Use of bitwise '|' with boolean operands
node->setLayoutHadOverflow(
node->getLayout().hadOverflow() |
currentRelativeChild->getLayout().hadOverflow());
改动同样简略,| 改成 || 即可,即 node->getLayout().hadOverflow() ||
以上问题悉数改完后,项目确实能跑起来了
应用在 micorsoft app center 等相似的分发工具上
上面的改动都是对 Pods 文件夹下源码的改动,很显然,在大多数公司的作业流程中,直接改动生成的源码然后去构建是不现实的,比方我司运用的 app center 上,开发人员提交代码到特定分支上,然后 app center 会自动执行 pod install
指令,这样的话,问题仍没有处理。因而,针对 GoogleDataTransport 和 yoga,我运用了不同的处理战略
关于 GoogleDataTransport 的报错,其实是 CLANG_WARN_STRICT_PROTOTYPES 为 YES 的原因,能够在 Podfile 中把该配置改成 NO
installer.pods_project.targets.each do |target|
if target.name.start_with? "GoogleDataTransport"
target.build_configurations.each do |config|
config.build_settings['CLANG_WARN_STRICT_PROTOTYPES'] = 'NO'
end
end
end
Yoga 我目前运用的 1.14.0 版别,github 有 issue 提到 1.19.0 版别处理了这个问题,但由于 yoga 是绑定在 RN 下的,假如晋级 yoga ,就需要晋级 RN,代价太大
退而求其次,我将 yoga 的内容从 node_modules 搬到了 ios 文件夹下,然后把 | 改成 ||
# pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga', :modular_headers => true
pod 'Yoga', :path => './yoga', :modular_headers => true
以上的都提交到了 git 上后,app center 终于能成功出 build 了,下载下来后也不呈现闪退等问题,改动成功
总结
作为一个 iOS 小白,能靠自己成功的处理晋级 sdk 的问题,还是成就感满满的。尽管处理的方法有点像破屋子打补丁,假如有更好的处理方法,请不吝珠玉。