如何用多Target的方式为SDK创建Demo
第一步:项目架构
1. 创建一个全新的工程
2. 创建SDK的target,Xcode会将SDK与Demo关联
关联.png
可以删除多余的TestTarget,最终保留两个目标target就可以了
目标.png
第二步:设置关键属性
1. SDK支持的最低iOS版本
2. SDK支持的CPU指令集
Architectures.png
3. SDK是否只支持当前设备架构
搜索关键字build acti.png
4. SDK编译出来的名称
product name.png
5. SDK编译出来的静态库类型
mach_o.png
6. SDK对外披露头文件
头文件.png
第三步:使用
1. 引入项目
SDKDemo中的使用:
1>. 在SDK内新建文件
2>. 在SDKDemo内导入头文件#import <SDK/Person.h>,即可开始调试,不需要单独编译静态库,也不需要设置对外披露的头文件
在其他项目中使用:
1.> 需要做如下设置,否则会运行会崩溃并提示找不到SDK的资源文件
image.png
2. SDK中引用有C++文件报错
如果静态库中采用ObjectC++实现,或者静态库使用C/C++写的,在调用的时候可能出错,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm
3. SDK中使用到了Category
如果framework中使用到了Category 那么在使用framework的工程中要设置 Build Settings中的Other Link Flag 为 -ObjC或者-all_load
第四步:Demo添加第三方依赖库
假设库文件都添加到Frameworks文件中
在demo中修改对应的patch search
Framework Search Paths ->$(PROJECT_DIR)/Product/Frameworks
在SDK中也修改对应的设置为:
$(SRCROOT)/Frameworks
Bundle资源文件
创建
添加资源
设置
搜索关键字hidpi.pngCOMBINE_HIDPI_IMAGES 或 Combine High Resolution Artwork 改为NO,如果为YES,那么在最终打包的Bundle中,@2x和@3x不同分辨率的图片会被合成成tiff格式 。导致使用图片名称无法访问
Enable Bitcode :如果能搜索到这一项那么就把其值设置为NO。Bundle是不能使用Bitcode的
加入SDK
将bundle拖入SDK
NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle bundleForClass:[self class]] pathForResource:@"StaticSDKResource" ofType:@"bundle"]];
UIImage *imgd = [UIImage imageWithContentsOfFile:[bundle pathForResource:@"line_bg_image@3x" ofType:@"png"]];
// 注意,图片不会自适应屏幕,要自己写方法
混编
将一个完整的 .m/.h
拖入Swift项目,即可自动生成桥接文件,将需要使用的OC头文件在桥接文件中通过OC的头文件引入方式引入,即可使用
常见报错
如果提示 .xcodeproj Building for iOS Simulator, but the linked and embedded framework 'xx.framework' was built for iOS + iOS Simulator.
设置 build ->setting -> Validata Workspace -> YES