iOS SDK开发问题记录

作者: 欠揍的葡萄 | 来源:发表于2017-06-02 16:03 被阅读51次

    所谓的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的头文件即可。

    相关文章

      网友评论

        本文标题:iOS SDK开发问题记录

        本文链接:https://www.haomeiwen.com/subject/azsufxtx.html