iOS SDK开发问题记录

所谓的SDK 就是封装一个包,让别人去用,但是看不到你的代码,在iOS8之前,苹果禁止用户封装成动态包的形式,基本上都是使用静态库 *.a文件.
iOS8之后,苹果开放了动态库,现在基本上所有的SDK都是使用framework的形式来封装

一、图片问题

项目需求,需要对控制器以及页面进行封装,页面中包含了所使用到的图片,这里就出现了问题。如果把图片直接放到framework中,是访问不到图片的,需要把图片打包成 bundle文件 然后使用bundle的名字以及图片的名字来访问。

下面说一下详细操作步骤

  1. 新建一个文件夹,起个名字,如 SDKSources,然后将所需要的图片放进该文件夹内,重新命名文件夹 ,给文件夹加个后缀变成bundle文件,即SDKSources.bundle
  2. 然后将该文件放到项目中,注意不是SDK的项目,是要使用SDK的项目中(可以把该文件放到和编译好的库一个文件夹内,导入framework时两个一起拖进项目即可)
  3. 使用该图片的方法,比如bundle里面有一个图片名叫test.png ,我们想要在framework中加载这个图片,可以如下方法使用即可
    [UIImage imageNamed:@”SDKSources.bundle/test”]

二、动态库和静态库问题

运行时碰到报错:

dyld: Library not loaded: @rpath/GRLiveSDK.framework/GRLiveSDK
  Referenced from: /Users/yunzhi/Library/Developer/CoreSimulator/Devices/0B38F7FE-8165-4ACE-AD90-6513309775B8/data/Containers/Bundle/Application/E2A87932-6116-4FC4-9230-9B6A27DCEB26/testMyFrameWork.app/testMyFrameWork
  Reason: image not found

解决方案 有两种

  1. 修改SDK的项目中,找到Target –>Build Settings-->Mach-O Type 然后将值改成Static Library 即可
  2. 修改调用SDK的项目,找到Target–>General–>Embedded Binaries 然后将SDK 的framework添加进去 运行即可

三、分类的编译处理

在framework中调用第三方库,如SDWebImage ,MJRefresh,是直接写的分类方法,如果我们直接使用的话,会报错,比如使用SDWebImage 设置网络图片,会报找不到方法的错误。

解决方案:在Target-->Build Settings -->Other Linker Flags 设置值为 - all_load 以及 –Objc 即可

在SDK的开发过程中,尽量使用系统自带的类,不要使用第三方的库

四、头文件问题

将要暴露给用户的头文件写进SDK的头文件中

如#improt<GRLiveSDK/GRLiveMainController.h>等

用户使用的时候只需要导入我们SDK的头文件即可。

推荐阅读更多精彩内容