1、反正屏切换

[UIDevice currentDevice] 运用setValue:forKey:的方式在iOS16上面已经不可用,继而要运用UIWindowScene里边的函数恳求

if (@available(iOS 16.0, *)) {
UIWindowScene *windowScene = (UIWindowScene *)[[[UIApplication sharedApplication] connectedScenes] allObjects].firstObject;
UIWindowSceneGeometryPreferencesIOS *perference = [[UIWindowSceneGeometryPreferencesIOS alloc] init];
perference.interfaceOrientations = 1 << deviceOrientation;
[windowScene requestGeometryUpdateWithPreferences:perference errorHandler:(NSError * _Nonnull error) {
NSLog(@"error--%@", error);
}];
} else {
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:deviceOrientation] forKey:@"orientation"];
[UIViewController attemptRotationToDeviceOrientation];
}

1.1、屏幕旋转告诉在iOS16无法处触发

需求重写UIViewController的viewWillTransitionToSize:withTransitionCoordinator:,在此函数里边处理UI。

1.2、iOS16 运用过YYTextView之后无法旋转屏幕

运用过UITextView之后,再调用函数 requestGeometryUpdateWithPreferences:geometryPreferences errorHandler: 恳求无效,无法旋转屏幕

分析: 打印一切的connectedScenes

运用YYTextView之前

iOS16 Xcode14 适配

运用YYTextView之后

iOS16 Xcode14 适配

问题是当时的UIWindowScene里边多了一层YYTextView增加的YYTextEffectWindow,去掉这一层window就可以了。

2、xcode14 UIViewController在dealloc时产生溃散

iOS16调试的时候报错

Application circumvented objective-c runtime dealloc initiation for <%s> object并溃散

原因是: IOS16 苹果不允许重写体系控件分类(Categroy)中重写 + (void)initialize办法

3、运用xcode14打出来的包,在iOS12.2以下的体系产生溃散

iOS16 Xcode14 适配

运用otool工具查看二进制文件发现

iOS16 Xcode14 适配

二进制里边多了一个 /usr/lib/swift/libswiftCoreGraphics.dylib (compatibility version 1.0.0, current version 120.100.0)

处理办法:

Build Phases -> Link Binary With Librarires 里边增加libswiftCoreGraphics.tbd

Apple Recommended(苹果推荐的处理办法)

iOS16 Xcode14 适配

xcode14 处理办法:

Build Setting -> other link flags 增加 -Wl,-weak-lswiftCoreGraphics

相关链接:Apple Forums 链接

Apple 处理了这个问题,运用xcode14.1打包就行了。