iOS-构建SDK(从无到有)

I’ll Never finish falling in love with you.


上一篇文章中,我们使用OpenCV封装了图片马赛克话的代码iOS音视频—OpenCV初体验马赛克的实现,现在我们利用它来构建一个SDK。

A、关于静态库和动态库
  • 静态库:.a和.framework
    ,动态库:.dylib和.framework。.framework可静可动,取决于你的配置,详见后面过程。
  • 我们做SDK的目的其实主要那么几个,解耦,给别人用又不想别人看见我们的源码。
  • 我们做SDK都是做静态库也就上面的.a和.framework
B、如何制作.a静态库
  • 1.新建工程,选择Static Library

这里写图片描述

  • 2.Build Active Architecture Only 设置为NO(不同机型的架构不一样,设置为NO适配不同机型)

这里写图片描述

  • 3.添加需要打包的代码

这里写图片描述

代码参考

//
//  Mosaics_SDK.m
//  Mosaics_SDK
//
//  Created by mac on 2018/9/12.
//  Copyright © 2018年 WT. All rights reserved.
//

#import "Mosaics_SDK.h"

#import <opencv2/opencv.hpp>
#import <opencv2/imgcodecs/ios.h>
#import <opencv2/highgui.hpp>
#import <opencv2/core/types.hpp>

using namespace cv;
@implementation Mosaics_SDK

+(UIImage *)openCVImage:(UIImage *)image level:(int)level{
    //实现功能
    //第一步:将iOS图片转换为openCV图片(Mat矩阵)
    Mat mat_image_src;
    UIImageToMat(image, mat_image_src);

    //第二步:确定宽高
    int width = mat_image_src.cols;
    int height = mat_image_src.rows;


    //图片类型->进行转换
    //在OpenCV里面
    //坑隐藏
    //支持->RGB处理
    //图片ARGB
    //将ARGB转换为RGB
    Mat mat_image_dst;
    cvtColor(mat_image_src,mat_image_dst,CV_RGBA2RGB,3);

    //克隆一张图片 为了不影响原始图片
    Mat mat_image_clone = mat_image_dst.clone();
    //第三步:马赛克处理
    //分析马赛克算法原理
    //level => 3*3矩形
    //我们可以设置level 进行动态处理
    int x= width - level;
    int y = height - level;

    //一个矩形一个矩形去处理
    for (int i = 0; i < y; i += level) {
        for (int j = 0; j < x; j += level) {
            //创建矩形区域
            Rect2i mosaicsRect = Rect2i(j,i,level,level);
            //原始数据:给Rect2i区域->填充数据
            Mat roi = mat_image_dst(mosaicsRect);

            //让整个Rect2i区域颜色值保持一致
            //mat_image_clone.at<Vec3b>(i,j) ->像素点(颜色值组成-》多个) ->ARGB ->数组
            //mat_image_clone.at<Vec3b>(i,j)[0] R值
            //mat_image_clone.at<Vec3b>(i,j)[1] G值
            //mat_image_clone.at<Vec3b>(i,j)[2] B值
            Scalar scalar = Scalar(
                                   mat_image_clone.at<Vec3b>(i,j)[0],
                                   mat_image_clone.at<Vec3b>(i,j)[1],
                                   mat_image_clone.at<Vec3b>(i,j)[2]);
            //修改后的数据:将处理好的矩形区域->数据->拷贝到图片上
            //CV_8UC3
            //CV_表示:框架的命名空间
            //8表示:每个颜色值是8位
            //U表示:有符号类型(sign -> 有正负 ->简写"S") -128->127、无符号类型(Unsign->只有正数 ->简写"U") 0->255
            //C表示:char类型
            //3表示:3个通道 RGB
            Mat roiCopy = Mat(mosaicsRect.size(),CV_8UC3,scalar);
            roiCopy.copyTo(roi);
        }
    }
    //第四步:将OpenCV格式图片转换为iOS图片格式
    return MatToUIImage(mat_image_dst);
}
@end

运行项目
这里写图片描述

没有运行前,libMosaics_SDK.a是红色的

  • 4 设置最低支持版本

这里写图片描述

然后找到Linking other Linker Flags 默认是-Objc的,但是我们在写SDK源码的时候可能不只是-Objc有可能会有分类等等。要修改为-all_load,要是不修改会崩溃的。

  • 5.运行代码生成对应库(模拟器和真机下分别在debug和release环境下运行代码,总共是4次,右键点击上图中的红框内库文件,Show in Finder会发现4个人文件,对应刚才4次运行结果)

设置release模式
这里写图片描述

这里写图片描述

这里写图片描述

  • 6.合并库文件(注意空格)

说明:最终生成了两个合并好的库文件,debug和release。使用时根据当前工程配置情况选用对应库文件。

  • 生成debug库文件 终端:lipo -creat debug下模拟器库文件路径 debug模式下真机库文件路径 -output
    合并后库文件路径
  • 生成release库文件 终端:lipo -creat release下模拟器库文件路径 release模式下真机库文件路径
    -output 合并后库文件路径
lipo -create /Users/mac/Library/Developer/Xcode/DerivedData/Mosaics_SDK-ayanxuupewgfntamyyimdicgeixl/Build/Products/Debug-iphonesimulator/libMosaics_SDK.a  /Users/mac/Library/Developer/Xcode/DerivedData/Mosaics_SDK-ayanxuupewgfntamyyimdicgeixl/Build/Products/Debug-iphoneos/libMosaics_SDK.a  -output /Users/mac/Library/Developer/Xcode/DerivedData/Mosaics_SDK-ayanxuupewgfntamyyimdicgeixl/Build/Products/MosaicsSDK/MosaicsSDK.a

最终生成的文件
这里写图片描述


  • 7 验证。将做好的库文件添加到自己的工程中,看是否能正常使用。注意,.a静态库文件没有头文件,需要自己手动添加,找到刚才生成的四个文件,任选一个,拷贝include文件夹,同合并好的库文件一起添加到工程中才能正常使用。

对了,还要把你下载好的opencv2.framework架包手动添加到项目中,不然会报错哦

这里写图片描述

https://github.com/Goddreamwt/iOS_AudioVideoProcessing/tree/master/OpenCV

需要自己下载opencv2.framework并导入项目。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS中引入linphone-sdk可以通过以下步骤: 1. 下载linphone-sdk:可以从linphone官方网站下载最新的linphone-sdk的压缩包。 2. 解压压缩包:将下载的linphone-sdk压缩包解压到目标文件夹中。 3. 创建新的Xcode工程:使用Xcode创建一个新的iOS工程。 4. 导入linphone-sdk到工程中:在Xcode中的工程导航栏中右键点击“Frameworks”文件夹,选择“Add Files to 'Your project name'”选项,然后导航到刚才解压的linphone-sdk文件夹中,选择liblinphone.xcodeproj文件,点击“Add”按钮。 5. 添加依赖库:点击Xcode中的工程导航栏,选择你的项目的target,在General选项卡中,找到“Linked Frameworks and Libraries”部分,点击“+”按钮,选择添加以下依赖库: - libiconv.tbd - libz.tbd - libsqlite3.0.tbd - AudioToolbox.framework - AVFoundation.framework - CoreAudio.framework - CoreVideo.framework - CoreGraphics.framework - CoreMedia.framework - VideoToolbox.framework - UIKit.framework - Foundation.framework - CFNetwork.framework - Security.framework - SystemConfiguration.framework 6. 配置Build Settings:点击Xcode中的工程导航栏,选择你的项目的target,在Build Settings选项卡中,找到“Header Search Paths”部分,添加linphone-sdk的头文件路径。 7. 配置Build Phases:点击Xcode中的工程导航栏,选择你的项目的target,在Build Phases选项卡中,展开“Target Dependencies”部分,点击“+”按钮,选择添加liblinphone iOS库。 8. 添加代码:在需要使用linphone-sdk的地方,引入头文件并编写相应的代码,如初始化linphone对象,注册账号等。 以上就是在iOS中引入linphone-sdk的一般步骤。根据具体情况可能会有一些特殊步骤或配置。了解linphone-sdk的文档和示例代码将有助于更深入地了解如何使用该SDK

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值