iOS修复CocoaPods引入的老旧三方库Bug方法

一些年代比较久远的但是依然在运行的iOS项目中,其中使用的一些三方库作者停止维护,但这个库在项目中依然在使用。随着iOS系统版本的更新,有些方法被弃用,会出现一些警告,甚至直接出现闪退问题。

比如 YBImageBrowser 这个查看大图的库,在旧项目中点击直接出现闪退。查看断点,问题出在 _UIGraphicsBeginImageContextWithOptions 方法在iOS17中被 UIGraphicsImageRenderer 替代。

这个时候,如果找新的库或者自己重新写,所需要的代码是比较大的,不推荐。因为三方库是使用 CocoaPods进行集成的,也不能直接Pods目录下的代码。最简单和长久的方法就是fork原来的项目库,然后拉取到本地进行修改。

YBImageBrowser 项目为例。

1. fork 对应仓库。

YBImageBrowser 的地址 https://github.com/indulgeIn/YBImageBrowser 上点击Fork。然后将自己账户下的该项目,克隆到本地。

2. 调试修改代码,并推送到远程仓库。

对克隆到本地的仓库进行调试修改,修改完成推送到本地仓库。

比如当前的这个问题,直接修改 YBIBUtilities.mYBIBSnapshotView 方法,修改为如下并推送到自己的远程仓库。


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 即可。

其他仓库碰到如下问题也是一样的,如果后期自己希望长期维护,可以为其添加版本号,方便维护。

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注