一个简单的SDK制作是很容易的,复杂的sdk其实就和复杂化的应用一样,都是从简单开始的,这里介绍一下sdk的简单制作

步骤:

1.创建sdk,公开文件

2.编译、获取sdk文件

3.导入工程,配置文件

4.解决错误,完成

1.创建sdk,公开文件

然后起个需要的名字

创建出这样的sdk,自动生成的文件和普通工程的viewController一样都是可以删的,不喜欢的可以尽管删

介绍使用sdk里面的类和带xib的控制器

先说类,用这个自动生成的,在类里面添加一个打印的方法

.h文件

#import <Foundation/Foundation.h>

@interface SDK : NSObject

-(void)sdkLog;

@end

.m文件

#import "SDK.h"

@implementation SDK

-(void)sdkLog
{
NSLog(@"sdkAction");
} @end

就是这样普通,然后说下控制器

先创建一个控制器,名为:

SDKViewController  记得勾选添加xib,等下要说明一下暴露文件的

然后在xib上随便添加点什么东西,等下跳转

自己能确定跳转来的是我们sdk里的这个控制器就行了

接下来的比较重要,我们做一个sdk静态库就是为了保护和不让人看见里面的实现内容,但如果是需要被人调用的部分,还是需要暴露出来的,那怎么做呢?

按图操作就能把文件暴露出来,暴露需要被调用的头文件,注意,如果暴露的头文件里包括控制器,而且控制器是有xib文件的,那么xib一定也得暴露出来,否则等下在其他工程里调用的时候,找不到xib的

到这里sdk制作就告一段落,sdk包分三种:真机sdk包,虚拟机sdk包,两种包的合并,合并的就不说了,有兴趣的百度下,一般真正在使用时是不用合并包的,用微博,qq什么sdk的时候就知道,都是把两种包分开的,因为合并的包比较大这样会导致打包后的ipa包变大,引起用户的不满,浪费用户流量。

2.编译、获取sdk文件

接下去-> 编译,选择真机或者Geneic iOS Device编译出来的就是真机sdk,选择虚拟机编译出来的就是虚拟机sdk

真机sdk:

选择真机或者Geneic iOS Device编译,原本红色的libSDK.a就变成灰色,表示文件存在

选中libSDK.a点击右键选择show in finder就能看到内容了,

注意这里文件夹的名字,Debug-iphoneos文件夹是真机sdk文件夹,等下看看虚拟机sdk文件夹的名字

这里include文件夹里面的文件就是暴露的文件,在把libsdk.a加进工程时也要把里面的文件一起加进去的,真机和虚拟机sdk使用是一样的,先看虚拟机的问题

虚拟机sdk:

这里先clear一下,把刚才编程的真机sdk包清理掉才能看到xcode7虚拟机带来的问题,清理完后libSDK.a就是红色的了,不存在

然后选择虚拟机编译,如果你用的是xcode7,你会发现怎么编译,libSDK.a都是红色的,这个是xcode7的bug,之前有人说xcode7没法编译虚拟机的sdk,这是错的,不用着急,照样可以生成,如果编译提示success其实虚拟机sdk还是成功生成的,只是在xcode上看不到,这时不用clear,把真机sdk包也一起编译了,生成了真机的sdk,这里点击libsdk.a文件show in finder,这里就看到的是上面那种情况

注意

之前提过文件夹的名字,现在看到的文件夹还是真机sdk的文件夹,就是你再点虚拟机的编译多一次进来,也会发现是真机的文件夹,这时候按  command+⬆️,返回上层文件夹

现在就看到两个文件夹了,左边的是真机sdk文件夹,右边的是虚拟机sdk文件夹,点击虚拟机文件夹进去就能看到和真机sdk一样的内容,xcode7可以通过这种方式来找虚拟机sdk文件夹的

3.导入工程,配置文件

用虚拟机示范下

创建一个新工程,例如命名test

把include里面的文件夹还有.a文件拉到工程里面如果没勾选要记得勾选add to targets

然后配置一下,选择在配置里搜索search,如果里面的library search paths为空,那么双击空处箭头的地方给它添加一个库的寻找路径,给.a文件路径如 $(PROJECT_DIR)/text/libSDK.a

或者自己加可以找到.a文件的其他路径也可以

不然会找不到.a文件

再搜索other linker,给other linker flags加上  -Objc  和   -all_load,-all_load视情况加,可不加下面有说明

Other Linker Flags:其他链接标签

设为"-ObjC"

当导入的静态库使用了类别,需要设为-ObjC,就算没有使用也给配上,预防以后使用其他的sdk里面有

补充:Other Linker Flags设置的值介绍

-ObjC:加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中

-all_load:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。
-force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载

这样就配置完了

最后是校验是否能使用sdk了

可以在appdelegate里面这样写

AppDelegate.m文件里先导入工程使用的控制器

#import "ViewController.h"

在下面这个方法里添加导航控制器,因为要跳转到sdk里面的控制器需要

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch. self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; ViewController *rootViewController = [[ViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:rootViewController];
self.window.rootViewController = nav;
[self.window makeKeyAndVisible];
return YES;
}

然后在viewController.m里面

或者你如果想看得更明显一点自己加button,加跳转事件才去跳转到sdk里,这里我就偷懒一下了

 #import "ViewController.h"
#import "SDK.h"
#import "SDKViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; SDK *sdk = [[SDK alloc]init];
[sdk sdkLog]; SDKViewController *sdkCtl = [[SDKViewController alloc]init];
[self.navigationController pushViewController:sdkCtl animated:YES];
} @end

完成编译运行

4.解决错误,完成

写完编译工程,如果出现类似这样的情况

那是因为虚拟机sdk的编译包也有不同的像i386,x86_64,arm,arm64等,这是我们所需要包的Charts.framework不对,这里不细说了,想了解的可以百度i386,x86_64,arm,arm64的区别,这里最简单直接的解决办法是在编译sdk时选择什么虚拟机,那运行时也用什么虚拟机,但如果sdk编译时用5s、6、6 plus、6s、6s plus编译,那么这些的sdk在这些虚拟机上都能通用,这样也不用考虑那么多了。

framework制作静态库可以和.a是一样的

想制作全部通用的虚拟机sdk包可以参考http://blog.csdn.net/lizhongfu2013/article/details/12648633

最后运行打印出了

sdkAction

界面上显示了sdk里控制器里的界面,恭喜你完成了。

看上面似乎很多内容,其实做多几次了解之后就知道是很简单的,frameword制作静态库时也是这样,动态库就不一样了,也不推荐工程里用自己做的动态库,app store会审核不通过的,然后是debug和release模式,制作真正的sdk时应该在product->scheme->edit scheme的Build Configuration里面把Debug切换为release然后再编译使用,和工程里面是一样的道理,如果都完成了应该换。

SDK的制作详解的更多相关文章

  1. wpf 客户端【JDAgent桌面助手】开发详解(二)桌面宠物制作详解

    目录区域: wpf 客户端[JDAgent桌面助手]业余开发的终于完工了..晒晒截 wpf 客户端[JDAgent桌面助手]开发详解-开篇 wpf 客户端[JDAgent桌面助手]开发详解(一)主窗口 ...

  2. Android中9patch图片格式(xx.9.png)介绍与制作详解

    一:9patch图片介绍: android的.9.png是android系统中一种特殊的图片格式,专门用来用来处理图片大小变化后(如拉伸)的失真,不正常,如我们看到的qq聊天中的文字气泡,不管你输入的 ...

  3. VS2017编译SFML SDK配制环境详解

    SFML和Visual Studio 介绍 如果您在Visual Studio IDE(Visual C ++编译器)中使用SFML,本教程是第一个应该阅读的教程.它将解释如何配置您的SFML项目. ...

  4. 云计算---openstack镜像制作详解

    一:本地部署KVM 1.安装KVM 1.1安装须知 查看CPU是否支持kvm完全虚拟机. [root@LINUX ~]# grep "flags" /proc/cpuinfofla ...

  5. ArcGIS API for javascript开发笔记(四)——GP服务调用之GP模型的规范化制作详解

    感谢一路走来默默陪伴和支持的你~~~ -------------------欢迎来访,拒绝转载------------------- 在之前的利用Python分析GP服务运行结果的输出路径 & ...

  6. Windows To Go 制作详解

    拥有 Mac 的同学大概都会碰到一个头疼的问题,那就是使用 Windows 的使用需求.macOS 虽好,不过总是会有一些讨厌的软件没有 Mac 版本,这时就不得不在 Mac 上跑 Windows 了 ...

  7. Console Add Item –Java使用eBay API SDK刊登商品 详解

    准备工作: 1. 运行Eclipse (或其他Java IDE) 2.创建一个ConsoleAddItem工程(项目) 选JDK 1.5.1.6.1.8等版本,已测试1.6.1.8版本. 3.下载JA ...

  8. 个推安卓推送SDK集成步骤详解

    以下是一位开发者在集成个推安卓推送SDK时候的亲身经历: 作者:吃饱了想睡. 概述 公司准备采用个推作为第三方推送平台,我作为客户端的头号小鸟,掐指一算已经毕业 0.1 年了,Leader 准备把这个 ...

  9. vagrant+java+springcloud+redis+zookeeper镜像下载(&制作详解)

    文章很长,建议收藏起来,慢慢读! 备注:持续更新中..... 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 + 涨薪必备 疯 ...

随机推荐

  1. The network bridge on device VMnet0 is not running

    The network bridge on device VMnet0 is not running. The virtual machine will not be able to communic ...

  2. WinForm最小化到托盘以及托盘右键菜单

    首先,先拖一个NotifyIcon到主窗体,然后设置NotifyIcon的图标,不然等下最小化后,都找不到那个程序了,还有那个Text也是,不写名字,就默认是NotifyIcon了..如下图: 然后双 ...

  3. ELF动态链接

    为什么要使用动态链接? 在现代的linux系统中,假设一个普通的程序会使用到c语言静态库至少1MB以上,那么,如果我们的机器运行100个这样的程序,就用浪费近100MB的内存:如果磁盘有2000个这样 ...

  4. 1Z0-053 争议题目解析212

    1Z0-053 争议题目解析212 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 212.Note the following parameters settings in you ...

  5. CentOS6.5网络设置

    CentOS6.5网络设置 不知道哪里做错了,长时间无法连接网络,百度了各种还是不可以.最后自己提取了以前可以联网的配置粘贴过来,成功.配置文件内容如下: vim /etc/resolv.conf 1 ...

  6. 在AngularJS中的使用Highcharts图表控件

    一.Highcharts简介 Highcharts是一款非常好用的前端图表控件,正如其中文网介绍的那样:功能强大.开源.美观.图表丰富.兼容绝大多数浏览器的纯js图表库. 如果你的项目是基于jquer ...

  7. MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建

    前言 在操作数据库的时候经常会用到判断数据表.视图.函数/方法.存储过程是否存在,若存在,则需要删除后再重新创建.以下是MS SQL Server中的示例代码. 数据表(Table) 创建数据表的时候 ...

  8. [百度网盘]Xamarin for Visual Studio 3.7.165 Preview 最新版-介绍

    Xamarin 3.7.165 Preview 下载地址:http://download.xamarin.com/XamarinforVisualStudio/Windows/Xamarin.Visu ...

  9. C#开发微信门户及应用(41)--基于微信开放平台的扫码登录处理

    在现今很多网站里面,都使用了微信开放平台的扫码登录认证处理,这样做相当于把身份认证交给较为权威的第三方进行认证,在应用网站里面可以不需要存储用户的密码了.本篇介绍如何基于微信开放平台的扫码进行网站的登 ...

  10. Asp.net mvc返回Xml结果,扩展Controller实现XmlResult以返回XML格式数据

    我们都知道Asp.net MVC自带的Action可以有多种类型,比如ActionResult,ContentResult,JsonResult……,但是很遗憾没有支持直接返回XML的XmlResul ...