美文网首页iOS开发技术分享方法交换iOS 开发每天分享优质文章
iOS适配https(二)-- 黑魔法简单适配SDWebImag

iOS适配https(二)-- 黑魔法简单适配SDWebImag

作者: 蛮荒星域 | 来源:发表于2017-01-09 17:37 被阅读337次

    前言

    继续上篇的篇章。上篇讲述了SSL证书的配置以及AFNetworking的单向验证。这里我们讲解一下SDWebImage的配置。

    SDWebImage本身是支持https的,所以我们要做的工作量并不是很大。

    • (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;

    options:SDWebImageAllowInvalidSSLCertificates
    设置即可

    方法一

    这种方法是最笨的,那就是逐个替换,将所有用到sdwebimage方法的地方全都设置一遍,效率最低。属于大改项目。

    方法二

    直接到UIImageView+WebCache.m方法中将用到的几个方法都改动一下。

    - (void)sd_setImageWithURL:(NSURL *)url {
        [self sd_setImageWithURL:url placeholderImage:nil options:SDWebImageAllowInvalidSSLCertificates progress:nil completed:nil];
    }
    - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder {
        [self sd_setImageWithURL:url placeholderImage:placeholder options:SDWebImageAllowInvalidSSLCertificates progress:nil completed:nil];
    }
    

    这样就可以全局设置好了,但是有个弊端。如果是使用cocoapods的,那么这样的修改无法同步到其他人的工程里,需要每个人都这样设置,而且库升级的话修改照样得继续。所以这个方法只是对于快捷而言试用,长远来说并不方便。所以重点是方法三,使用黑魔法。

    方法三 -- 黑魔法

    采用黑魔法,并不改动三方库,写一个类别即可。长话短说,直接上代码。

    UIImageView+JFHttps.h

    #import <UIKit/UIKit.h>
    
    @interface UIImageView (JFHttps)
    
    @end
    
    

    UIImageView+JFHttps.m

    #import "UIImageView+JFHttps.h"
    #import <UIImageView+WebCache.h>
    #import <objc/runtime.h>
    
    @implementation UIImageView (JFHttps)
    
    + (void)load {
        Class myClass = [self class];
        
        // 获取SEL
        SEL originSetImageSel = @selector(sd_setImageWithURL:placeholderImage:options:progress:completed:);
        SEL newSetImageSel = @selector(sd_setHttpsImageWithURL:placeholderImage:options:progress:completed:);
        
        // 生成Method
        Method originMethod = class_getInstanceMethod(myClass, originSetImageSel);
        Method newMethod = class_getInstanceMethod(myClass, newSetImageSel);
        
        // 交换方法实现
        method_exchangeImplementations(originMethod, newMethod);
    }
    
    - (void)sd_setHttpsImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
        NSLog(@"这里实现了");
        
        [self sd_setHttpsImageWithURL:url placeholderImage:placeholder options:SDWebImageAllowInvalidSSLCertificates progress:progressBlock completed:completedBlock];
    }
    
    @end
    
    

    UIImageView+JFHttps.h加入到全局
    正常调用SDWebImage的方法即可,其他的都可以不用管,升级库照常升级。

    给个tip:
    https://cdn.pixabay.com/photo/2017/01/18/21/34/cyprus-1990939_1280.jpg
    这是一个https的图片,方便大家测试

    上一篇:

    iOS适配https(一) -- AFNetworking

    相关参考:

    iOS 迁移到HTTPS(自建证书+单向验证+AF3.0+WKWebView+SDWebImage)

    相关文章

      网友评论

      本文标题:iOS适配https(二)-- 黑魔法简单适配SDWebImag

      本文链接:https://www.haomeiwen.com/subject/deehbttx.html