iOS 16 适配问题记录

语言: CN / TW / HK

1.升级xcode 14 之后首先就是运行旧项目奔溃

运行报错运行遇到的报错 “error: Signing for “XX” requires a development team.”

推荐解决办法 直接pod 配置

image.png

post_install do |installer| installer.pods_project.targets.each do |target| if target.respond_to?(:product_type) and target.product_type == "com.apple.product-type.bundle" target.build_configurations.each do |config| config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' end end end end

2.xcode14打出来的包多了一些系统库在iOS 12.2 一下的版本直接奔溃

xcode 14 导出的新包后,打开就崩溃,但是在系统版本高的手机上就没有问题iOS 12.2 版本一下的都有问题。

image.png

搜索后发现,开发者社区中有此问题的记录,xcode14:Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib,解决方案是:

If you are building your app with Xcode 14 or Xcode 14.0.1, your app will crash on older OS versions, including while building and testing directly from Xcode, as well as after submitting the app to the App Store. The OS versions affected include iOS 11 - 12.1, macOS 10.13 - 10.14.3, as well as watchOS and tvOS versions from the same time frame. To work around the crash when building with Xcode 14, **add -Wl,-weak-lswiftCoreGraphics (substituting other library names for swiftCoreGraphics if appropriate for your crash) to the Other Linker Flags build setting**.

然而需要注意的是,假如项目有多个Target,如果添加在Target中,就要针对每个Target都要添加一次,很是麻烦,所以可以直接在PROJECT下的Build Settings中添加。

在项目中添加了-Wl,-weak-lswiftCoreGraphicsOther Linker Flags之后

假如说添加完之后还是会有报错

image.png

仔细看了之后,发现报错中提示的FSPagerView,是CocoaPods三方库,所以找到对应的第三方库,然后在对应库的Build Settings中找到Other Linker Flags,然后添加-Wl,-weak-lswiftCoreGraphics,再运行,发现还是报错,但是换了另一个三方库。

所以有没有可能,在Podfilepost_install添加设置,统一一次性给所有三方库加这个编译设置。当然可以,设置如下:

post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['OTHER_LDFLAGS'] = '-Wl,-weak-lswiftCoreGraphics' end end end

然后编译,发现报错,因为项目中有些库没有用到swiftCoreGraphics,比如OC的三方库,或者非UI的库,所以还是要改,需要区分添加。针对项目中Swift类型的UI相关的库,添加这个编译选项,其他的不添加,最终示例如下:

``` need_otherlinkerflags_frameworks = ['FSPagerView', 'HandyJSON', 'IQKeyboardManagerSwift', 'JXSegmentedView', 'KDCircularProgress', 'Kingfisher', 'RxSwift', 'PKHUD', 'RxCocoa', 'SnapKit', 'ZLPhotoBrowser']

post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| if need_otherlinkerflags_frameworks.include?(target.name) config.build_settings['OTHER_LDFLAGS'] = '-Wl,-weak-lswiftCoreGraphics' end
end end end ``Pod install`后,编译运行,发现可以正常运行了。再验证一下,非低版本手机上是否受到影响,没有影响,完美。

如果说还有问题,那么target 里面Build Phases -> Link Binary With Librarires 里面添加libswiftCoreGraphics.tbd 就可以解决问题

3.视频横竖屏切换

[UIDevice currentDevice] 使用setValue:forKey:的方式在iOS16上面已经不可用,继而要使用 我遇到一个奇怪的现象就是,自己升级到16.0.3 版本后突然视频的横屏放大不能用了,然后就做了iOS 16 判断用了新的方法就好了。但删除APP 去重新下载旧的APP。屏幕放大转旋依然好用。

```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]; }

```

4.iOS normal arm64 com.apple.xcode.tools.swift.compiler is not absolute.

``` iOS normal arm64 com.apple.xcode.tools.swift.compiler is not absolute.

```

报错显示上面的问题,删掉了User Header Search Paths中的内容,清理了缓存。

后续有发现新的问题再更新。

「其他文章」