iOS工程 SDK的创建、使用

作者: goyohol | 来源:发表于2016-12-01 22:49 被阅读785次

ONE SDK的设计总体分为3层: 平台层-Platfrom layer,适配层-Porting layer,核心层-Common layer。

我们所使用的是 平台层-Platfrom layer。一般为了针对不同平台提供给开发者,和平台一致API规范,使各平台的开发者无难度的集成SDK,例如我们会提供Java给Android,Objective-C 给IOS和MAC, C++ 给Linux、 IOT平台



在OS X上,可能会创建一个动态连接(Dynamically Linked)的framework。通过动态连接,framework可以更新,不需要应用重新连接。在运行时,库中代码的一份拷贝被分享出来,整个工程都可以使用它,因此,这样减少了内存消耗,提高了系统的性能。
这是一个功能强大的特性。

iOS工程中的SDK,俗称.a文件。创建、使用一个SDK。

环境:Xcode Version 8.1 (8T61a) (网上的demo大多数都是老版本的)


操作:

  • 1.创建一个静态库工程
    打开Xcode,点击File\New\Project,选择iOS\Framework & Library\Cocoa Touch Static Library新建一个静态库工程.

    创建静态库工程

    将工程命名为StaticFrameBlueTooth(自己需要蓝牙功能,起了个蓝牙名字。如果想高逼格:那就 (名字拼音)XXXBlueToothSDK😀😀),然后将工程保存到一个空目录下。

    工程名

    一个静态库工程由头文件和实现文件组成,这些文件将被编译为库本身。
    当创建静态库工程时,Xcode会自动添加libStaticFrameBlueTooth.h和libStaticFrameBlueTooth.m。因为不需要实现文件,右键单击libStaticFrameBlueTooth.m选择delete,将它删除。


    删除 .m文件


  • 2.其实当前的工程已经可以使用了,但是你的库还是需要添加一些功能吧??? 创建一个StaticFrameBlueTooth.a,可以使用你自己封装好的控件。将你的控件从Finder中拖到Xcode下StaticFrameBlueTooth目录下。(objc文件夹也是拖进去的,不是创建工程的时候 配送的!!!!注意一下!!!!)

    拖入控件

    一定要注意,这里一定要勾选以下三个选项:

    必须Add to target


  • 3.点击 Finish 进入工程里面:

    工程 内部

    Compile Source为编译期间使用,而Headers文件仅仅提供一个接口!
    将你的控件的头文件 添加到 库的主头文件StaticFrameBlueTooth.h中。在主头文件的帮助下,开发者使用你的库仅仅需要导入一个头文件,如下面的代码一样,自己去选择自己需要的一块导入。 </br>
    其实头文件 也可以 自己创建Headers栏,再在里面按自己需求添加Public(公用)、Private(私有)、Project(工程)各自所需的头文件。但是条例一点要清晰,架构性要明确!

    把需要的头文件导入


  • 4.接下来就生成静态库

    • 4.1静态库分为手机和模拟器两种(手机端的只有手机能调用,模拟器的只有模拟器能调用)。
      首先,构建模拟器的静态库,如图:
      模拟器 调用的静态库

      真机 调用的静态库
      构建工程(command + B), 你就会发现 libStaticFrameBlueTooth.a 变黑了。
    生成静态库 成功 文件字体变黑
    • 4.2然后show in Finder


      获取静态库( .a文件)
真机与模拟器 调用的静态库


    • 4.3之后我拿到这个.a文件 、StaticFrameBlueTooth.h文件 和 他相关的所有.h文件,存放在一个新的文件夹里(起名就随便啦!! )如下:
    自己的SDK文件夹



  • 5.将他拖到你要应用的工程中,就可以去挥霍了。

    导入SDK文件





如果已经知道、了解 了导入对应头文件,即可以使用里面的三方库或自己定制的控件了。就无需了解我的Demo示例了!可以直接跳过 “运行效果”图片 的介绍。直接看最后提到的真机、模拟器通用的SDK 静态库介绍!


最终运行效果:
运行效果

放上美女,是为了美观一点!😀😀😀😀😀
别分心了!看segment!我讲解一下这个多段选择器!
控件是一个长度不固定,但至少是屏幕宽度(展示50个时间点:5的倍数)。传入时间数组,即可自动生成一个长度适应的 多段选择器。当然宽度超过屏幕宽度。就需要放在UIScrollView里面了!
因为设置了他的frame (20,200,105,30)。其宽度是不为显示的时间总长 (⭐️背景色⭐️即是最好的应证)。超过控件宽度的地方不能响应⭐️点击事件⭐️也是一个应证!!





通用静态库

上面已经提到了,模拟器调试得到的静态库只能在模拟器上运行,如果使用真机必须选择使用真机可调用的静态库文件(.a文件)。
接下来,我们就来生成一个双方都能用的libStaticFrameBlueTooth.a

首先,打开终端,复制以下命令

lipo-create
/Users/个人PC/Library/Developer/Xcode/DerivedData/StaticFrameBlueTooth-adahgwpnjulylkcjpaomvnxafgmq/Build/Products/Debug-iphoneos/libStaticFrameBlueTooth.a

/Users/个人PC/Library/Developer/Xcode/DerivedData/StaticFrameBlueTooth-adahgwpnjulylkcjpaomvnxafgmq/Build/Products/Debug-iphonesimulator/libStaticFrameBlueTooth.a



说明:

绿色:是你手机模式下可用的libStaticFrameBlueTooth.a
红色:是你模拟器下可用的libStaticFrameBlueTooth.a
蓝色:是最后生成双方都可用的libStaticFrameBlueTooth.a --并存在在桌面。最后拿
     到的libStaticFrameBlueTooth.a 就哪里都可以用了!














goyohol's essay

相关文章

网友评论

  • specter_hhg:我想问一下,.a文件和framework文件有什么区别,然后swift不能创建.a文件,只能创建framework文件。那swift的SDK 怎么写
    goyohol:参考一下:http://www.jianshu.com/p/87dbf57cfe4a
    goyohol:@specter_hhg “.a”是一个纯二进制文件,“.framework”中除了有二进制文件之外还有资源文件。“.a”文件不能直接使用,至少要有“.h”文件配合,但是“.framework”文件可以直接使用。
    “.a” + “.h” + “sourceFile” = “.framework” 。把我上面的SDK文件封装起来,可以形成一个“.framework”文件。
    goyohol:@specter_hhg 还没搞过swift...
  • goyohol:在使用时,导入 SDK(所使用功能)对应的系统的函数库!!比如支持c++的 “libc++”。
    必须加入 对应的编译包
  • 十一岁的加重:好文章收藏了
    goyohol:@十一岁的加重 谢谢支持

本文标题:iOS工程 SDK的创建、使用

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