美文网首页iOS进阶iOSiOS
iOS 洪荒之力-SDK开发(一)

iOS 洪荒之力-SDK开发(一)

作者: CocoaMan | 来源:发表于2016-08-30 10:31 被阅读4962次

    前言

    开发SDK有一段时间了,这算是一篇总结贴,或者说教程也好,总之会把我经历的一些过程详细描述出来。设计到图文或者相关Code,篇幅可能较长,我会拆分出几个章节来进行,更加方便进行查阅。同时也欢迎各位行家来围观并指正。

    用过别人的SDK都知道,有两种形式,一是一个.a文件带上一堆头文件,另一种就是一个简单的framework文件。iOS8之前并不支持动态框架,所以framework实际上也就是对静态库的一种包装而已,不过其方便性可想而知,因而选用framework是一个不错的方式。本文设计SDK支持iOS7以上,所以对动态框架并不做过多介绍。

    创建工程

    接下来我们开始创建工程,建工程前我会先建文件夹,大致如下

    从名称来看,应该比较清晰,不做过多说明,现在打开Xcode开始创建工程

    以上两步创建framework工程,该工程内部将主要包含我们的SDK源码。现在开始创建测试工程,方便对SDK进行调试。

    到这里,我们已经创建了两个工程,需要将这两个工程关联起来,这里需要用到Workspace,仍然打开Xcode,选择File->New->Workspace,命名好你的Workspace并创建,这时候我们看到SDK目录下面应该是:

    好,现在打开workspace,依次把之前创建的framework工程和测试工程拖进workspace内

    现在选中MySDKTests->TARGETS->Build Phases,在Link Binary With Libraries中加入MySDK.framework

    现在我们可以开始在framework工程中创建文件,并在测试工程中进行测试,选中framework工程,新建MySDKTest类,需要设置该类为public,以便外部能访问到

    MySDKTest.h

    @interface MySDKTest : NSObject

    + (void)printTest;

    @end

    MySDKTest.m

    #import "MySDKTest.h"

    @implementation MySDKTest

    + (void)printTest {

         NSLog(@"MySDK Test");

    }

    @end

    MySDK.h 把公开的头文件放在此处是个不错的方式

    #import <UIKit/UIKit.h>

    #import <MySDK/MySDKTest.h>

    //! Project version number for MySDK.

    FOUNDATION_EXPORT double MySDKVersionNumber;

    //! Project version string for MySDK.

    FOUNDATION_EXPORT const unsigned char MySDKVersionString[];

    // In this header, you should import all the public headers of your framework using statements like #import <MySDK/PublicHeader.h>

    在测试工程中进行测试

    #import"ViewController.h"

    #import <MySDK/MySDK.h>

    @interface ViewController()

    @end

    @implementation ViewController

    - (void)viewDidLoad {

        [superviewDidLoad];

        [MySDKTest printTest];

    }

    @end

    到此,你已经完成了一个SDK工程的创建,接下来我们将对工程进行配置。

    iOS 洪荒之力-SDK开发(二)

    相关文章

      网友评论

      • JJZD:照着步骤一步一步,结果引入的framwork为红色,完全导入不了
        JJZD:正常了。为红色是正常,只是此时xcode不会提示,直接调用framework里面的代码 就会成功,且searchpath里面也会多出路径
      • 不暗_黑夜:这个运行以后应该是个什么效果?我的怎么什么反应都没有?
      • a26268899ec3:....... Reason: image not found 楼主这怎么解决啊
        Joneyin:在Target的General选项卡里, 选择EmbeddedBinaries选项, 将找不到的framework添加进来
      • 若雨千寻:Desktop/HYSDK/MySDKTest/MySDKTest/ViewController.m:10:9: 'MySDK/MySDK.h' file not found
        若雨千寻:@CocoaMan 现在报这个错误,fatal error: lipo: can't open input file: /Users/huayunworld/Library/Developer/Xcode/DerivedData/MySDK.wlWorkspace-ejorezqxgrtrgochgqbsdpwwtehd/Build/Products/Debug-iphoneos/MySDK.framework/MySDK (No such file or directory)
        然后我按照别人的解决方法,真机和模拟器同事编译还是报这个错误!!!
        CocoaMan:@若雨千寻 检查下步骤,是否缺失了。
      • 若雨千寻:跟着步骤一步步走的,到最后在测试工程中报错说找不到sdk的头文件!请问是怎么回事啊?
      • Comedy_G:楼主你好,我在demo工程里引入framework为什么找不到头文件?
        Comedy_G:@CocoaMan 方便留个QQ或者微信吗?我也是做SDK开发的。 :smile:
        CocoaMan:@Comedy_G 具体怎么使用的?
      • 蛮小刀:楼主挖了个坑,然后后续文章咋没有了...
        蛮小刀:@CocoaMan 理解~程序员一加班都不要命的~~
        CocoaMan:@KKLater 太忙了没来得及写,不好意思
      • 叁號選手:楼主跟着你的教程写了一点 编译的时候出问题 跟他们的一样 请问是怎么解决的啊
      • Gottfrid:谢谢楼主,学习了。
      • DDDDeveloper:写得很好,加油!
      • 夜央未尽:继续关注~拓展知识面
      • Cedric_Jc:同做SDK开发...然而...没这么多感悟。。。等待更新。。。
      • d88b14b33f5c:后面可以涉及到storybord、图片等资源文件的管理和关联吗?对咯。还有AFNetworking等这种三方工具类的涉及。
        CocoaMan:@钦哥哥哥哥 有的:smile:
      • YxxxHao:感觉什么也没说到:joy::joy::joy::joy:
      • dd25f9257b81:支持楼主 等待更新
      • Dimon_Hu:然后呢?
      • da27c260cc85:有单元测试的方法么?
        da27c260cc85:有推荐的文章么?都不会写
        CocoaMan:@ArthurChi 单元测试可以在测试工程里去做,这和一般项目类似。
      • jett_yu:如果sdk工程是workspace,那么导入pods和第三方框架,可以一起合成自己的SDK吗?具体以后会说到吗?
        jett_yu:@CocoaMan 我现在自己自定义的SDK想导入第三方库,但是是用pods导入的,所以在生成自定义SDK的时候好像出了点问题,所以期待你的后续。
        CocoaMan:@jett_yu 你指的是怎样在SDK中用第三方库?如果是,后续将会有介绍。
      • 蛮小刀:这个workspace,在运行的时候,每次都会编译打包SDK吗?
        CocoaMan:@KKLater 不需要,只有打包发布选择universal即可
        蛮小刀:target是测试工程,运行时要不要重新编译打包SDK呢?毕竟如果多人合作,SDK开发部分有可能会有更新。
        CocoaMan:@KKLater 这取决于你选择的target
      • Rockerliang:不错,继续写啊,最好是再加上如何用cocoapods来管理自己的sdk
        CocoaMan:@CruiseCo :smile:你赢了
        6e62803aebc1:@CocoaMan 是骚,不是少。子都打错了
        CocoaMan:@Rockerliang 后续都会有的,少安毋躁

      本文标题:iOS 洪荒之力-SDK开发(一)

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