SDK静态库-Framework开发应用(Swift / OC)
一、什么是库
库是程序代码的集合,是共享程序代码的一种方式。我们根据源代码的公开情况,可以将库分为以下2 种类型
开源库:
公开源代码,我们能看到代码的具体实现,比如 SDWebImage、 AFNetworking等;如何将自己的代码发布到代码托管平台中,然后借助CocoaPods 供别人使用闭源库:
不公开源代码,是经过编译后的二进制文件,看不到代码的具体实现。闭源库主要分为:静态库、动态库
二、基础说明
SDK包开发是属于组件化范畴。但是这个SDK组件是封装起来的,只是暴露了想暴露或者该暴露的类头文件,功能实现代码只有封装的人才能看到。SDK包的模块功能是独立(因为整个UI界面都封装了),无论嵌入哪种App只要传入正确的参数就能使用,一个SDK包可以相当于一个App程序。
三、静态库framework制作
1、新建工程
这里要选Framework,如果选择右边的Static Library制作出来的是.a静态库
2856343-248193f711d4240d.png2、导入第三方静态库之后再link依赖的系统库,并设置最低运行系统
20191019094910271.jpg3、设置支持的指令集
20191019095136781.pngYES
只会选择编译、链接对应目标设备的指令集。NO
编译、链接会涵盖所有指令集,必要时选择执行对应的指令>集。Debug一般设置为YES,执行效率高。
Release一般为NO,以支持所有可能的架构。
4、添加armv7s架构(可选)
TARGETS-MyFramewrok-Build Settings-Architectures-Architectures-other加号,输入armv7s
201910190950320.png模拟器
4s ~ 5 : i386; 5s以后 : x86_64。真机:
armv6:iPhone1、2、3G;iPod Touch1、2.
armv7设备:iPhone 3GS、 4、4S;iPad1、2,iPod Touch 3G
armv7s设备:iPhone 5、5C,iPad4.
arm64设备:iPhone 5S以后、iPad Air以后
5、Swift暴露头文件以及方法
import UIKit
public class TestObj: NSObject {
public func test() {
print("test")
}
}
public :不能被继承
open:可以被继承
为了支持OC项目能够使用,类、方法、属性等外部能够调用的,可见性至少要为public,同时还要加上@objc以支持OC调用
6、OC暴露头文件以及方法
将你需要暴露的类拖入Public区域
2856343-aff9310ec972d112.png
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface Person : NSObject
-(void)test;
@end
NS_ASSUME_NONNULL_END
#import "Person.h"
@implementation Person
-(void)test{
NSLog(@"tets");
}
@end
7、选择的编译方式
这是最重要的一步,这一步决定我们制作出来的是静态库还是动态库,默认选择的是Dynamic Library,要手动选择Static Library
2856343-adced0d84ad41f71.png下一步:SDK是打包给别人使用的,编译模式也要改一下:
2856343-bbcc57e69f6fe287.png 2856343-b43b654273bff475.png 2856343-5feaf409b7a55bb6.png 2856343-b832dfe3a1eba545.png
8、编译
command+B,真机和模拟器各编译一次
有真机选真机,mei没真机就选Build Only Device。模拟器就随便选一个。
2856343-687d74b0835f8f8f.png真机和模拟器都编译成功,product文件夹下的framework会变黑,没有变也没关系,右击framework选择show in finder,弹出文件夹你就能看到真机和模拟器Release状态下的framework包了
2856343-ae380762350cac39.png 2856343-18ea61af31cce329.png9、合并真机和模拟器的SDK包
2856343-9fbbc936719d8f2e.png 2856343-e00e9d6afd360f04.png查看指令集
lipo -info xxxx/framework_SDK.framework/framework_SDK
10、合并.framework
lipo -create 真机路径/framework_SDK.framework/framework_SDK 模拟器路径/framework_SDK.framework/framework_SDK -output 真机路径/framework_SDK.framework/framework_SDK
把模拟器的Modules里面的文件拷贝到真机文件夹下的Modules中
1940927-e7cd763d737fed61.png
11、合并.a
lipo -create 真机路径/framework_SDK.framework/framework_SDK 模拟器路径/framework_SDK.framework/framework_SDK -output 真机路径/framework_SDK.framework/framework_SDK
12、使用
合并替换完就搞定了,得到可用的SDK包。
2856343-b37baf010b783b89.png