一些年代比较久远的但是依然在运行的iOS项目中,其中使用的一些三方库作者停止维护,但这个库在项目中依然在使用。随着iOS系统版本的更新,有些方法被弃用,会出现一些警告,甚至直接出现闪退问题。
比如 YBImageBrowser
这个查看大图的库,在旧项目中点击直接出现闪退。查看断点,问题出在 _UIGraphicsBeginImageContextWithOptions
方法在iOS17中被 UIGraphicsImageRenderer
替代。
这个时候,如果找新的库或者自己重新写,所需要的代码是比较大的,不推荐。因为三方库是使用 CocoaPods
进行集成的,也不能直接Pods
目录下的代码。最简单和长久的方法就是fork原来的项目库,然后拉取到本地进行修改。
以 YBImageBrowser 项目为例。
1. fork 对应仓库。
到 YBImageBrowser 的地址 https://github.com/indulgeIn/YBImageBrowser 上点击Fork。然后将自己账户下的该项目,克隆到本地。
2. 调试修改代码,并推送到远程仓库。
对克隆到本地的仓库进行调试修改,修改完成推送到本地仓库。
比如当前的这个问题,直接修改 YBIBUtilities.m
的 YBIBSnapshotView
方法,修改为如下并推送到自己的远程仓库。
UIImage *YBIBSnapshotView(UIView *view) { UIImage *image = nil; if (@available(iOS 10.0, *)) { UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:view.bounds.size]; image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) { [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO]; }]; } else { UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, [UIScreen mainScreen].scale); [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO]; image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); } return image; }
3. 修改项目中的对应CocoaPods地址
接下来,只要将iOS项目的Podfile中对应的三方库的地址指定为自己的账号下对应的仓库即可。如下:
pod 'YBImageBrowser', :git => 'https://github.com/你的用户名/YBImageBrowser.git'
然后再运行 Pod install
即可。
其他仓库碰到如下问题也是一样的,如果后期自己希望长期维护,可以为其添加版本号,方便维护。