上一章《SDK开发》忽略了一个问题,sorry!!!
这是个开发SDK开发问题。如果直接创建framework工程开发,编译运行的时候是看不到直观效果的,就是说你开发了什么界面或者什么功能在framework工程内看不到的,因为framework包要导入到其他工程跑起来才能看到效果。但是开发过程总要看效果吧,所以SDK应该是在一般工程的基础上创建framework工程进行开发,开发过程运行就能看到效果了。 但是,两个工程在一起的话新建类或者导入类文件时就会不知道选哪个工程或者选错工程导致打包时丢失文件。
我的做法就是:分开建立两个工程,一个是开发功能的demo(能看到效果),另一个就是framework工程。开发完就把demo内的类文件拖到framework工程,framework工程只做编译打包,demo还可以模拟外部工程使用framework的类进行开发。这样做的缺陷就是当你问完文件打包好了,没问题还好,有问题需要修改或者有新需求,就要重新拖文件而且不止一次~
上一章最好留了两个问题,这章就先解决一个,也是简单问题。
由于苹果的一个限制,SDK不能加载包内的图片或者音频资源。于是我们平时使用的第三方框架的frameWork的时候无论是cocoapod还是直接拖文件类,只要改框架内部使用到图片,都会带有一个bundle的资源包。这个bundle包就是存放了SDK需要用到的图片、音频、文件甚至视频。
而且,这种资源跟代码分开的方式更直观、项目维护更容易。建立bundle包也很简单,我看过一些大神在Xcode里面建bundle包还要搞一下什么设置,看到就头晕还容易忘。
创建
我建bundle包很简单:在电脑桌面-右击-新建文件夹,文件夹的名字最好是英文跟SDK的名字一样,名字后面加上 .bundle 的文件夹后缀,写好之后-回车:
选择添加之后,你就看到刚才新建的文件夹变成bundle包了。把bundle包拖入demo工程,用到什么资源就在工程里面往bundle包内扔。
使用
使用bundle包资源也很简单:
setImage:[UIImage imageNamed:@"bundle包名.bundle/资源文件名"];
NSString *path = @"bundle包名.bundle/资源文件名";
AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:path ofType:@"mp3"]],&sound);
简单的使用总结就是:在原本只有资源文件名路径前面加上bundle包:@"bundle包名.bundle/资源文件名"
就是这么简单~