专栏名称: Cocoa开发者社区
CocoaChina苹果开发中文社区官方微信,提供教程资源、app推广营销、招聘、外包及培训信息、各类沙龙交流活动以及更多开发者服务。
目录
相关文章推荐
51好读  ›  专栏  ›  Cocoa开发者社区

iOS 洪荒之力-SDK开发

Cocoa开发者社区  · 公众号  · ios  · 2016-09-02 08:04

正文

▲点击上方“CocoaChina”关注即可免费学习iOS开发


作者:CocoaMan
原文链接:http://www.jianshu.com/p/813477451c28

前言

开发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

#import

//! 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


在测试工程中进行测试


#import"ViewController.h"

#import

@interface ViewController()

@end

@implementation ViewController

- (void)viewDidLoad {

    [superviewDidLoad];

    [MySDKTest printTest];

}

@end


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





最近发现一个好玩的测试,互联网从业者都应该来试下,我得了 85 分,看看你能不能超过我!长按图片识别二维码或者点击阅读原文就可以参与。



微信号:CocoaChinabbs


▲长按二维码“识别”关注即可免费学习 iOS 开发

月薪十万、出任CEO、赢娶白富美、走上人生巅峰不是梦

--------------------------------------

商务合作QQ:2408167315

投稿邮箱:[email protected]