iOS中常用的第三方框架

  • Post author:
  • Post category:其他


本文主要介绍ios中常用的第三方框架,会不断更新,如有疑问欢迎指出,一起学习哦!


一、配置CocoaPods

我们集成第三方框架的时候,可以将第三方框架的压缩包下载直接导入文件夹,或者是使用CocoaPods的方式进行集成,电脑一般是没有配置CocoaPods环境的,现在开始配置一下CocoaPods的环境配置

1.在终端输入如上命令

输入完密码之后就可以等待下载安装了

不懂安装的也可以参考这篇文章

https://www.jianshu.com/p/dbfdece084d5

2.创建podfile文件

安装好CocoaPods之后,切换到需要引入第三方库的文件夹,然后使用pod init命名,创建podfile文件,然后在里面填写需要pod的第三方库

3.使用pod install命令进行安装就可以,但是在M1芯片中, 直接使用pod install会报如下错误,执行下列命令进行安装

4.安装好之后打开workspace文件打开工程

5.pod的过程当中可能遇到的问题

1)在Xcode14当中pod init的时候会出现如下错误

解决方案点击Targets 右边的第一个选项,选择13.0-compatible

2)在编译的时候会报如下错误

虽然说我们已经pod成功了第三方库,但是编译的时候还是会报错 找不到这个库,此时需要将项目的名字转换成全部都是英文的名字,不含有中文。


二、SDWebImage

1.什么是SDWebImage?

1)ios中著名的网络图片处理框架

2)包含的功能:图片下载、图片缓存(内存缓存和磁盘缓存)、下载进度监听、gif处理等等

3)用法极其简单、功能十分强大,大大提高了网络图片处理效率

2.项目地址:


GitHub – SDWebImage/SDWebImage: Asynchronous image downloader with cache support as a UIImageView category

3.给项目中添加SDWebImage

可以使用3种方式来进行下载

1)进入上面的网址,点击clone,下载zip压缩包

2)使用git命令

git clone –recursive https://github.com/rs/SDWebImage.git

3)使用pod

切换到项目文件夹下,然后使用pod init命令创建一个Podfile的文本

然后在这个里面添加pod ‘SDWebImage’进行导入

然后使用pod install命令进行安装就可以。

4.SDWebImage的使用

1.导入下面的头文件

#import “UIImageView+WebCache.h”

#import “SDWebImageDownloader.h”

2.直接给UIImageView对象使用sd_setImageWithURL方法

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
    imageView.backgroundColor = [UIColor redColor];
    [imageView sd_setImageWithURL:[NSURL URLWithString:@"https://www.wanandroid.com/blogimgs/42da12d8-de56-4439-b40c-eab66c227a4b.png"]];
    NSLog(@"%@",NSHomeDirectory());
    [self.view addSubview:imageView];
 
}

3.就可以将图片加载下来了

4.在文件中生成的是32位的图片名称,用的是MD5算法,为了防止重名

5.


三、Bugly


第三方崩溃日志分析,集成Bugly


1.需要在Bugly官网上创建1个产品


腾讯Bugly – 一种愉悦的开发方式 _android anr_android anr分析_iOS崩溃日志分析平台

2.使用CocoaPods下载下BuglySDK

3.导入Bugly文件,写如下代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window = [[UIWindow alloc]init];
    self.window.rootViewController = [[ViewController alloc]init];
    
    [self.window makeKeyAndVisible];
    BuglyConfig *config = [[BuglyConfig alloc]init];
    config.debugMode = YES;
    config.blockMonitorEnable = YES;
    //设置被卡住的阀值时间,当停留时间>阀值时间时,它将记录一个事件,并在应用程序下次启动时报告数据,默认值为3.5秒
    config.blockMonitorTimeout = 1.5;
    config.channel = @"Bugly";
    config.delegate = self;
    config.consolelogEnable = NO;
    config.viewControllerTrackingEnable = NO;
    [Bugly startWithAppId:@"8e889963d5"
#if DEBUG
    developmentDevice:YES
#endif
                   config:config];
    return YES;
}

完成它的代理

- (NSString *)attachmentForException:(NSException *)exception {
    //(文件:行号 方法 == 崩溃原因)
    NSLog(@"(%@:%d)------%s=====%@",[[NSString stringWithUTF8String:__FILE__] lastPathComponent],__LINE__,__PRETTY_FUNCTION__,exception);
    return @"This is an attachment";
}

当点击按钮,数组越界时,刷新Bugly后台可以看到报错的具体位置

这个就是Bugly的简单使用,如果有不清楚的地方可以参考这篇文章


iOS 利用腾讯 Bugly 程序调试 测试代码bug 卡顿等情况_张无奈的博客-CSDN博客


四、ReactiveCocoa(RAC 函数响应式编程)


ReactiveCocoa基本使用详解_风流 少年的博客-CSDN博客


1.Hook


Hook(钩子),是改变程序运行流程的一种技术。


2.ReactiveCocoa的操作思想


ReactiveCocoa运行的是Hook技术,就是一种改变API程序结果的技术,在每次执行API结果之前,先执行你自己的想法,也就意味着可以对源程序进行修改,从而达到改变结果输出的目的


3.导入RAC(使用Pod方式)


1)创建一个pod文件


pod init


2)导入RAC

a.纯oc项目使用

pod "ReactiveObjC"

b.oc和swift混合项目

 pod "ReactiveObjC"
   
  pod "ReactiveCocoa"
   
  pod "ReactiveObjCBridge"

c.纯swift项目

pod "ReactiveCocoa"

3)使用arch x86_64 pod install来进行安装

4.RACSignal 只能订阅信号,在内部由订阅者发送信号

- (void)viewDidLoad {
    [super viewDidLoad];
    //1.创建信号
    RACSignal *singal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        //3.发送信号
        [subscriber sendNext:@"123"];
        [subscriber sendCompleted];
        return [RACDisposable disposableWithBlock:^{
            NSLog(@"当信号发送完成或者发送失败,就会自动执行这个block,取消订阅信号");
        }];
    }];
    
    //2.订阅信号
    [singal subscribeNext:^(id  _Nullable x) {
        //发送数据,即调用sendNext时才会调用该函数
        //接收到的数据
        NSLog(@"接收到的数据:%@",x);
    }];
}

先执行sendNext方法,然后执行subscribeNext方法,然后执行sendCompleted方法,最后执行RACDisposable方法

5.RACSubscriber

订阅者协议

@protocol

RACSubscriber <NSObject>,遵守该协议并实现协议中的方法都可以称为一个订阅者。


@protocol

RACSubscriber <NSObject>


@required

– (

void

)sendNext:(

nullable


id

)value;

– (

void

)sendError:(

nullable

NSError *)error;

– (

void

)sendCompleted;

– (

void

)didSubscribeWithDisposable:(RACCompoundDisposable *)disposable;


@end

6.

RACDisposable

取消订阅,当订阅者RACSubscriber没有强引用销毁了,或者发送错误sendError,或者发送完成sendCompleted时就会执行RACDisposable关联的处理代码块:disposeBlock ,默认一个信号发送完毕就会取消订阅, 只要订阅者还存在系统就不会自动取消订阅,所以可以通过一个全局变量来强引用订阅者,这样系统就不会自动执行取消订阅的代码块

当不想监听某个信号时,可以通过调用dispose方法来主动取消订阅信号。

7.RACSubject

既能订阅信号,也能发送信号,先订阅信号,再发送信号

    //1.创建信号
    RACSubject *subject = [RACSubject subject];
    //2.订阅信号
    [subject subscribeNext:^(id  _Nullable x) {
        NSLog(@"接收到的值:%@",x);
    }];
    //3.发送信号
    [subject sendNext:@"123"];


@interface

RACSubject<ValueType> : RACSignal<ValueType> <RACSubscriber>

RACSubject继承自RACSubject,同时遵守RACSubscriber协议

- (void)viewDidLoad {
    [super viewDidLoad];
    //1.创建信号
    RACSubject *subject = [RACSubject subject];
    //2.订阅信号
    [subject subscribeNext:^(id  _Nullable x) {
        NSLog(@"订阅者1接收到的值:%@",x);
    }];
    [subject subscribeNext:^(id  _Nullable x) {
        NSLog(@"订阅者2接收到的值:%@",x);
    }];
    //3.发送信号
    [subject sendNext:@"123"];
    [subject sendNext:@"456"];
}

subject可以订阅多个信号,但是是发送一个信号,然后这一个信号被多个订阅者订阅

123先被订阅者1订阅,然后被订阅者2订阅

8.RACReplaySubject

既可以先订阅信号再发送信号,也可以先发送信号,再订阅信号

   //1.创建信号
    RACReplaySubject *replaySubject = [RACReplaySubject subject];
    //2.订阅信号
//    [replaySubject subscribeNext:^(id  _Nullable x) {
//        NSLog(@"订阅者1接收到的值:%@",x);
//    }];
    //3.发送信号
    [replaySubject sendNext:@"123"];
    [replaySubject subscribeNext:^(id  _Nullable x) {
        NSLog(@"订阅者1接收到的值:%@",x);
    }];


@interface

RACReplaySubject<ValueType> : RACSubject<ValueType>

这个类继承自RACSubject

9.RACTuple

RACTuple:元组,功能类似于NSArray,可以将NSArray包装成元组

    RACTuple *tuple = [RACTuple tupleWithObjectsFromArray:@[@1,@2]];
    NSLog(@"%@",tuple[0]);

10.RACSequence

RACSequence:将数组或字典转成成RACSequence,然后再转换成信号RACSignal,订阅信号就是对数组或字典进行遍历

    NSArray *array = @[@1,@2,@3];
    [array.rac_sequence.signal subscribeNext:^(id  _Nullable x) {
        NSLog(@"x = %@",x);
    }];

    NSDictionary *dict = @{
          @"username":@"zhangsan",
          @"password":@"123",
    };
    [dict.rac_sequence.signal subscribeNext:^(id  _Nullable x) {
        // 通过类似于NSArray中的下标来获取
        NSLog(@"key = %@ ,value = %@",x[0],x[1]);
    }];

    NSDictionary *dict = @{
          @"username":@"zhangsan",
          @"password":@"123",
    };
    [dict.rac_sequence.signal subscribeNext:^(id  _Nullable x) {
        // 使用宏函数来解析(在Erlang中称为模式匹配)
        RACTupleUnpack(NSString *key,NSString *value) = x;
        NSLog(@"key=%@, value=%@", key, value);
    }];

11.多信号执行

当多个信号都发送了数据的时候才执行rac_liftSelector:WithSignalsFromArray

 RACSignal *singal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        [subscriber sendNext:@"123"];
        return nil;
    }];
    
    RACSignal *singal1 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        [subscriber sendNext:@"456"];
        return nil;
    }];
    
    [self rac_liftSelector:@selector(handleReceivedValue:value2:) withSignalsFromArray:@[singal,singal1]];

- (void)handleReceivedValue:(NSString *)value value2:(NSString *)value2 {
    NSLog(@"value=%@, value2=%@", value, value2);
}


五、腾讯云(IM)即时通讯


1.注册应用


1)打开


即时通信 IM iOS-无 UI 集成方案-文档中心-腾讯云

2)选择快速入门,选择ios集成

3)按照他的操作步骤进行注册应用,需要注意的是进行第一步登录IM控制台的时候需要进行实名认证

4)实名认证成功之后在IM控制台点击立即开始就可以注册应用了

5)点击立即开始之后是如下页面,我们创建应用名称

6)创建好应用之后可以不在进行下载源码的操作,直接点击左边的基本配置差了自己的sdkAppID和密钥,如果想要创建新的应用也可以按返回按钮进行新的应用的创建,如果想要下载源码或者是demo可以直接在上面的下载网址的里面查看就可以



​​​​​​​



版权声明:本文为qq_43658148原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。