简单介绍下SDK 的三个层次。
业务层 :应用方使用相关API。
衔接层 :保证业务层调用的API不做修改,兼容实现层逻辑。
实现层 :framework ,增加代码的安全性,核心业务的保密。
一、为什么做这个framework?
需求:阿里原有framework包大小为8M(包含的内容比较全面),打包后大概600k,我们需要把整个app的包大小缩减,那么就需要从每个地方去优化。
二、为什么要有衔接层 ?
要修改底层的framework,还要兼顾业务方的调用,那么就需要有这样一个衔接层。不然每次修改framework,业务方就要修改调用的API,会无形的增加业务方的使用成本。
三、为什么要有初始化 ?
最开始的设计思路是,input 一个字符串,output 一个字符串即可。
+ (DDSecurity *)sharedInstance;
/*
* input 需要加密的数据
* return 签名后字符串
*/
- (NSString *)sign : (NSString *)input;
优化后:
+ (DDSecurity *)sharedInstance;
/*
* 初始化数据
*/
- (NSInteger )initWithFile;
/*
* input 需要加密的数据
* return 签名后字符串
*/
- (NSString *)sign : (NSString *)input;
初始化好处:只调用一次,把重复的事情放在初始化里面,这样只需要初始化一次,可以减少内存消耗。
四、iOS 上如何实现 Framework ?
流程参考<和珏猫>的简书 iOS封装功能生成 .framework ,有详细的介绍。
五、framework 遇到的问题 ?
1.Reason: image not found
dyld: Library not loaded: @rpath/SecurityGuard.framework/SecurityGuard
Referenced from: /Users/didi/Library/Developer/CoreSimulator/Devices/
14A1EFC9-31FD-4FF8-A3A2-64A254FAE27A/data/Containers/Bundle/Application/
60645B0E-F62C-400B-9AA7-53742B0E0B8C/321321.app/321321
Reason: image not found
一顿搜索之后发现这个问题得产生是因为引用得一些framework只能存在于高版本得sdk中,但是,如果编译到低版本的ios就会发生这样的问题,我的真机是iOS6的版本的,GameController.framework可能高于这个版本,这里只需要在对应的target下的Build Phases标签里,找到Link Binary With Libraries,在里面找到GameController.framework,把status由Required 修改成Optional,然后再运行就OK了。其他的framework报错也适用,只需要修改对应的framework的status就行了。
2.遇到 Missing submodule 'SecurityGuard.Security'
#import <UIKit/UIKit.h>
//! Project version number for SecurityGuard.
FOUNDATION_EXPORT double SecurityGuardVersionNumber;
//! Project version string for SecurityGuard.
FOUNDATION_EXPORT const unsigned char SecurityGuardVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <SecurityGuard/PublicHeader.h>
#import <SecurityGuard/DDSecurity.h>
在生成framework 过程中,一定要把你用到的库包涵在.h中,不然调用方引用不到。
3.在模拟器5上运行报错,其它模拟器都好使。
在Architectures下增加armv7s,将Build Active Architecture Only 设置为NO。
4.需要用到的两个命令
1.lipo -create 合并模拟器和真机
2.lipo -info 查看framework包含的架构
合并输出过程.png
查看framework支持的架构.png
网友评论