升级 xcode 12 之后,模拟器编译报错
报错内容:building for iOS Simulator, but linking in object file built for iOS, xxxx for architecture arm64
因为 xcode 12 之后,Build Settings 不再默认包含 Valid Architectures 编译选项,作为替代品,以 VALID_ARCHS 的形式放到了 User-Defined 的编辑分组下。
并且,因为 arm 的 mac 的推出,xcode 12 也不再默认支持 x86_64 了,需要手动添加才能跑模拟器。
简单直接的解决方法:
删掉 User-Defined 下的 VALID_ARCHS
在 project 下,选中 User-Defined 下的 VALID_ARCHS,按 delete 删除
UISlider 的奇怪显示
在 iOS 14 之前,我使用 slider 的 subViews 的 lastView,作为滑块的位置来更新特殊的 UI 和 value,之前工作得都很不错,直到我更新了 iOS 14 ,一切都变得糟糕起来了。
iOS 14 的 UISlider 的 subViews 的 lastView 不再是滑块的位置,好吧,只能放弃以前的硬核方案了。
解决方案:
1 | let trackRect = slider.trackRect(forBounds: slider.bounds) |
Xcode 12 放弃了对 iOS 8 的支持导致的 CocoaPods 警告
警告内容: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 14.0.99.
在 CocoaPods 解决此问题之前,可以将以下内容添加到 Podfile 中作为临时解决方法:
1 | post_install do |installer| |
Xcode 12 drops support for iOS 8 and how to fix deployment target warnings in CocoaPods
iOS 14 UIDatePicker 适配
准确地说,iOS 13.4 之后,UIDatePicker 的默认样式改变了,如果还是需要展示原来的样式,可以这样修改:
1 | if #available(iOS 13.4, *) { |
UITableView 的组尾高度问题
我遇到的问题是(UITableView 的样式使用的是默认的 plain):我把 UITableView 所有分组中不需要组尾的高度设置为 0.01(当然不建议这么做,历史遗留问题),并且在代理中把组尾的 view 返回 nil,但是这样的设置在 iOS 14 之后,似乎失效了,而且出现了奇怪的显示问题(具体就是出现了一条大概一个像素的线),实验了一下,大概有两种解决办法:
把组尾的高度改成更小的浮点数,比如 0.0000001(并且最好不要把组尾的 view 直接返回 nil,这一点存疑)。
把 UITableView 的样式改成 group。
Sign in with Apple
事实上,这是 iOS13 之后苹果就有的规则:提供了第三方登录的应用,需要提供苹果登录。
好吧,乖乖听话
Implementing User Authentication with Sign in with Apple
Fetch Apple’s Public Key for Verifying Token Signature
关于 keyWindow
这也是 iOS13 之后的变动,不过其实这个的影响其实不大,因为只要你的应用不涉及多窗口的情况,可以继续使用 keyWindow 这个 api 的。
当然你为了心理健康(开玩笑~)实在想要解决的话,其中一个比较简单的办法是:
1 | UIApplication.shared.windows.filter {$0.isKeyWindow}.first |