最近公司要求将几个第三方的SDK封装成一个公司自己控制的SDK,以前没怎么接触过,所以查了一天资料,大概搞明白是怎么做的了,在这里做个记录。
现在开始!
一、创建Framework文件:
1.Xcode -> File --> New --> Projict.. --> Framework & Libaary --> Cocoa Touch Feamework
2.创建一个类文件来调试
// // ShowAccountName.h // ShowNameSDK // // Created by SJQ on 2019/6/21. // Copyright © 2019 西门依北. All rights reserved. // #import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN @protocol ShowAccountNameDelegate <NSObject> //返回你的姓 - (void)isFinshWithYourFirstName:(NSString *)firstName; @end @interface ShowAccountName : NSObject @property (nonatomic, weak) id <ShowAccountNameDelegate> delegate; //传入的名字 @property (nonatomic, copy) NSString *accountName; //打印你的名字 - (void)showNameWithAccount; @end NS_ASSUME_NONNULL_END
// // ShowAccountName.m // ShowNameSDK // // Created by SJQ on 2019/6/21. // Copyright © 2019 西门依北. All rights reserved. // #import "ShowAccountName.h" @interface ShowAccountName() @property (nonatomic, copy) NSString *firstName; @end @implementation ShowAccountName - (void)showNameWithAccount { NSLog(@"你的名字:%@",self.accountName); } - (void)setAccountName:(NSString *)accountName { _accountName = accountName; if (self.accountName.length == 0) { self.firstName = @"未检测到姓名"; } else { self.firstName = [self.accountName substringToIndex:2]; } //触发代理 if ([self.delegate respondsToSelector:@selector(isFinshWithYourFirstName:)]) { [self.delegate isFinshWithYourFirstName:self.firstName]; } } @end
3.配置属性
- TAGETS -> Build Settings -> Dead Code Stripping 设置为 NO;
- TAGETS -> Build Settings -> Link With Standard Libraries 设置为 NO;
- TAGETS -> Build Settings -> Mach-O Type 设置为 Static Library;
- 增加armv7,armv7s, TAGETS -> Build Settings -> Architectures -> Architectures 增加 armv7,armv7s
- 设置Headers TAGETS -> Build Phases -> Headers -> Public 把要暴露的.h文件拖到这个目录下
以下是图片示例:
4.需要在ShowNameSDK.h文件里面添加所创建使用到的 文件头
#import <ShowNameSDK/ShowAccountName.h>
二、调试完成的Framework功能
就在刚刚新建的Framework项目里面新建调试Demo,
然后切换TARGETS里面的项目就好了,调试的时候在 General -> Linked Frameworks and Libraries 下添加 你新建的Feamework文件进行调试。
三、生成完整的Framework 文件
1.选中模拟器,运行程序
2.选中真机,运行程序
3.在Finder中找到 Framework 文件
编译程序会分别编译成两个版本,真机和模拟器,我们要做的就是要把这两个版本合成一个通用的版本,要把framework文件下的 ShowNameSDK合成一个
打开终端:
lipo -create 路径1 路径2 -output 新文件路径
路径1 路径2 为上面两个framework文件下的 ShowNameSDK文件路径,新文件路径我是放到桌面上的
然后把生成好的ShowNameSDK文件(注意名字要一样)去替换两个Framework中的一个目录下的ShowNameSDK文件,然后拷贝这个.framework文件,这个.framework就是我们最终要的!
四、打包
打包会出现bug ,我检查了代码发现是生成.framework文件的时候有些配置配错了,下次再遇到再记录
参考资料:
https://www.cnblogs.com/oc-bowen/p/7478461.html