iOS 自己封装的SDK 打包与合并,新手教程!!!

前言
(1)这个时候就得说下静态库,动态库区别。
          静态库:1.模块化,分工合作。2.避免少量改动经常导致大量的重复编译链接。3.也可以重用,注意不是共享使用。
          动态库:1.使用动态库,可以将最终可执行文件体积缩小。2.使用动态库,多个应用程序共享内存中得同一份库文件,节省资源。3.使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的。
备注:苹果禁用动态库,即你使用了动态库,审核也是不让通过的。
(2)静态库又分为:framework 与static Library(.a )。
        下面说下framework 与static Library的区别和优缺点。
         共同点:都是静态库
         区别:1.承载的内容范畴:
                     (1)framework为一站式分享文案,也可以说是一个文件夹,其中包含代码签名,头文件,二进制执行文件,静态资源文件(xib,图片)等。
                     (2)static Library 就是.a文件,为二进制执行文件。分享给别人的时候,头文件,静态资源文件(xib,图片)需要另外提供,提供的方式为Bundle,下面我会介绍如何打bundle的包。  
                  2.头文件搜索路径的区别:staticLibrary需要设置头文件搜索路径,framework不需要。
                  3.当存在对外部代码依赖的时候:
                   (1)statciLibrary:能够只引用外部的头文件,调用公开的方法.而不引入其库的实现,实现与引用库的分离部署。假设其项目中包含库中同一个类,会发生代码冲突。
                   (2)framework:需要引用外部库,就必须将此外部库的实现放入framework内编译才可以。假设项目中包含库中同一个类,不会发生冲突,独立运行的。

总结:如果不考虑代码冲突,可以建立staticLibrary,因为这个可以减小包的大小。

1.首先创建Static Library

(1).创建完成,然后我们把之前封装好的代码,全部导入。
然后我们到Build Settings中找到complie sources这个里面就是.h与.m的集合。这里面也可以理解为我们的SDK不外露的东西。
下面我们还有一个就是copy files 这个里面就是我们打完包外漏出来的.h。
备注:可以凭自己的需求自行添加。

(2).我们再去Build setting里面找到Base SDK 选取 Latest iOS,因为这里面有很多类型的,macOS,tvOS…。

然后找到Linking other Linker Flags 默认是-Objc的,但是我们在写SDK源码的时候可能不只是-Objc有可能会有分类等等。要修改为-all_load,要是不修改会崩溃的。

(3).最后我们和正常打包配置一样断点,release,别忘了。

2.然后我们就可以打包了。
打包时候要注意,我们分两种.a,一种为模拟器的.a,另一种为真机的.a。
这里要说明一点,真机的.a只能真机使用,模拟器使用会报错的。模拟器的.a同样的到来,如果模拟器的.a用真机使用也会报错的。这个时候我们就涉及到一个合并的问题,即真机与模拟器的.a合并。然后提供给使用者。
使用终端,命令如下。
lipo -create
/Users/xxx/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphonesimulator/xxx.a
 
/Users/xxx/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphoneos/xxx.a
 -output /Users/xxx/Desktop/xxx.a

/Users/xxx/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphonesimulator/xxx.a
模拟器路径,
/Users/xxx/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphoneos/xxx.a  
真机路径。
/Users/xxx/Desktop/xxx.a
合成后输出路径。

这就合并完成,可以进行使用。

3.下面我介绍下bundle的包。
   这个bundle 我在上面有介绍是用来存放静态资源文件(xib,图片)的。
首先我们建立一个bundle

然后把他修改为iOS的

然后把资源文件导入进去

然后就打包就好了。
备注:可能有疑问,为什么要使用bundle,不直接放在.a中。因为在你直接放在.a中打完包,路径是读不到的,所以必须使用bundle作为依托。下面就涉及一个问题就是再.a中如何调用。
这就是在你项目代码中的实现。你可以写成宏,我这里只是个例子。

这样我们的一个完整的.a就完成了。
本文写的比较繁琐,只是想让新手,能够更好的理解。

时间: 2024-08-01 22:34:57

iOS 自己封装的SDK 打包与合并,新手教程!!!的相关文章

用python编写ios工程自动编译、打包ipa等脚本

第一次使用python请先看:http://my.oschina.net/LangZiAiFer/blog/298763 代码管理我用的是Git: 工程clone如下: def gitClone(): os.system ('git clone https://[email protected]/xxx/goccia.git ~/desktop/20140804') return https://[email protected]/xxx/goccia.git是git服务器路径,不必care:~

iOS 关于微信检测SDK应用的原理浅析

微信作为一个开放平台,各方面都是做得比较好的,推出了SDK之后,微信与使用了SDK的应用便能进行更多交互.但在iOS平台上,应用间交换数据还是相对麻烦的,那么微信为什么能直接在应用检测到其他使用了SDK的应用呢?基于这个疑问,我用了一个下午研究其原理. 一.SDK的方法 我之前也没使用过微信的SDK,不过下载后,查看发现SDK接口有这么一段 1 /*! @brief WXApi的成员函数,在微信终端程序中注册第三方应用. 2 * 3 * 需要在每次启动第三方应用程序时调用.第一次调用后,会在微信

iOS 手动做一个自动打包部署神器

之前使用的fastlane添加pgyer自动打包的,最近发现更新总是有问题,所以产生了自己shell做一个的想法.虽然代码比较少,但是很实用. 打包 导出ipa 上传pgyer 打包自动上传pgyer 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

IOS开发网络篇—SDK API IDE专业术语解释

API文档Application Programming Interface(应用程序接口)   reference 参考文档 Documentation  程序说明书 SDK (Software 软件 Development 开发 Kit)软件开发包 IDE 集成开发环境(integrated development environment)软件中的意思 IDE 电子集成驱动器(Integrated Drive Electronics)  相对硬件的意思 一.什么是SDK? SDK(Softw

基于Library去开发android SDK——sdk打包

以上我们完成了sdk开发环境的搭建,以及sdk中功能代码的具体实现,这一篇将介绍如何通过gradle实现我们sdk打包. 1.在我们的mylibrary的gradle中做如下配置: task makeJar(type: Copy) { delete 'build/libs/mylibrary.jar' //删除已经存在的jar包 from('build/intermediates/bundles/default/')//从该目录下加载要打包的文件 into('build/outputs/')//

[iOS]集成环信SDK然后运行时候crash了-[NSBundle initWithURL:]: nil URL argument'

Crash的reason是-[NSBundle initWithURL:]: nil URL argument' 1.首先我是用cocoapods导入的环信的SDK.然后怎么运行怎么crash. 2.后来我就把cocoapods里的环信SDK拖到桌面,然后删除工程cocoapods里面的环信SDK,改成手动拖入,然后编译,运行,不crash了! 有错误还忘您指出,如果这篇文章帮助到您了,或者您有什么建议和补充,都可以留言告诉我哦! [iOS]集成环信SDK然后运行时候crash了-[NSBund

iOS开发中,怎么打包为ipa格式的软件包以及怎么安装到手机终端上

iOS开发中,怎么打包为ipa格式的软件包以及怎么安装到手机终端上. (我的开发环境为Xcode6.1.1 ) 作为个人开发者(当然我的开发者帐号为个人开发者帐号,而不是企业开发者帐号),对于自己来说,我们只需要真机调试就可以将应用安装到自己的手机上:如果你在发布前想给更多的测试或朋友使用你的APP(关键是他们并不在你的身边,如果在你的身边,你当然可以通过真机调试一个一个的将应用安装到他们的手机上:此时你的APP还没有上线,Appstore还没有),你该怎么做呢?想想吧! 在开发者中心中,你可能

ios中封装网络请求类

ios中封装网络请求类 #import "JSNetWork.h" //asiHttpRequest #import "ASIFormDataRequest.h" //xml 的解析 #import "UseXmlParser.h" //判断是否联网 #import "Reachability.h" //sbJson,判断json的解析 #import "JSON.h" @implementation JS

Android基础新手教程——1.2.1 使用Eclipse + ADT + SDK开发Android APP

Android基础新手教程--1.2.1 使用Eclipse + ADT + SDK开发Android APP 标签(空格分隔): Android基础新手教程 1.前言 这里我们有两条路能够选,直接使用封装好的用于开发Android的ADT Bundle,或者自己进行配置 由于谷歌已经放弃了ADT的更新,官网上也取消的下载链接.这里提供谷歌放弃更新前最新版本号的 ADT Bundle供大家下载! 2.直接使用打包好的Eclipse 32位版:adt-bundle-windows-x86-2014