1. 程式人生 > >iOS-構建SDK(從無到有)

iOS-構建SDK(從無到有)

上一篇文章中,我們使用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架包手動新增到專案中,不然會報錯哦

這裡寫圖片描述

需要自己下載opencv2.framework並匯入專案。