ios sdk.framework静态库制作 看这篇就够了

一、主要讲解.framework静态库制作(包含build文件).由于.a静态库制作比较简单,这篇就不介绍了.
二、简单制作.framework静态库(不包含build文件)。

公司需求:写一个类似于微信授权登录功能的sdk静态库工程,提供给第三方app调用.

分析:1.需要用到url_scheme,以便实现app之间的跳转(下篇详细介绍).
     2.sdk静态库里需要封装网络请求工具类,即静态库里封装静态库包.
     3.需求需要sdk中封装界面,搭建ui,加载图片等,所以需要build资源文件,制作.framework静态库.
     4.如果是只封装方法,暴露头文件给第三方app使用,制作简单的.a静态库即可.
 实现方式: 制作.framework静态库.
      假设 (环保执法) 是第三方app,我们自己的app叫做vPort.  
      点击vPort身份按钮,使用sdk跳转vPort,使用vPort进行登录.
 需要达到的效果是这样的:
IMG_0439 2.PNG

需要sdk跳转应用vport,调起vport的第三方登录界面.


IMG_0440.PNG
一、制作.framework的详细步骤:(包含build文件)
        1.搭建bundle工程,打包资源文件.
屏幕快照 2017-03-29 上午10.25.46.png
屏幕快照 2017-03-29 上午10.27.16.png
2.工程设置:
    2.1. 工程里面只有两个文件,Info.plist和BuildSFVportApp.bundle文件,接下来我们将进行一些设置,选中项目文件,然后点击TARGETS->Build Setting,直接搜Architectures,然后将Base SDK改为Latest iOS.
屏幕快照 2017-03-29 上午10.42.22.png
     2.2. 接着设置,搜索Mach -O Type
屏幕快照 2017-03-29 上午10.44.50.png
     2.3. 接着设置,搜索linking
屏幕快照 2017-03-29 上午10.48.40.png
     2.4.接着上一步继续设置.
屏幕快照 2017-03-29 上午10.51.26.png
       2.5. 接着设置,搜索packaging
               设置完,你会发现注意,Products下文件名就变成BuildSFVportApp.framework了,继续我们的设置.
屏幕快照 2017-03-29 上午10.55.56.png
      2.6. 接着设置,搜索linking 
屏幕快照 2017-03-29 上午10.59.58.png
      2.7. 接着设置,搜索 skip install
屏幕快照 2017-03-29 上午11.04.16.png
        2.8. 设置infoPlist文件
屏幕快照 2017-03-29 上午11.06.50.png
    2.9.选中Build Phases,在下方空白处点一下,然后editor -> add build path -> add header build path,如图:
屏幕快照 2017-03-29 上午11.11.11.png
     2.10.紧接着在Link Binary With Libraries将UIKit引入
屏幕快照 2017-03-29 上午11.24.37.png
        2.11. 经过这一步之后Build path下多处了一项,名为Headers,目前里面有0个项目,点击左边的三角形会发现里面有三项,Public, Private, Project. 
 需要对外暴露的头文件就放在Public下,其他的就放到Project下,待会儿就会看到怎么去用。在这里我们是为了存放源程序库,里面是二机制代码,不能够存放诸如xib,图片,等资源文件。
 所以我们还要另外创建一个包去存放我们的图片,选中TARGETS下BuildSFVportApp,点击Editor -> Add Target选择bundle.
 将bundle命名为BuildSFVportResource
屏幕快照 2017-03-29 上午11.37.02.png
 2.12. 创建好后整个工程看上去应该是这样的:
       选择BuildSFVportResource,进行设置.
       选中刚刚创建的那个Target,点击Build Phase,点击右边的删除图标,将Compile Sources, Link Binary With Libraries删除掉.
       删除的原因是如果不删除,上传到App Store时苹果会报错,说你的包里面无源文件.
屏幕快照 2017-03-29 上午11.38.39.png
     2.13.删除完成后是这样的:
屏幕快照 2017-03-29 上午11.43.42.png
      2.14. 有时,就算你在这里进行了删除,苹果还会报另外一个错,为了保险起见选中BuildSFVportResource 下的 Info.plist文件里面的CFBundleExecutable这个key,进行删除.
      删除这两行:
       <key>CFBundleExecutable</key>
       <string>$(EXECUTABLE_NAME)</string>
![屏幕快照 2017-03-29 上午11.49.36.png](http://upload-images.jianshu.io/upload_images/1619319-985f60f688df62ab.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
      2.15. 继续选中BuildSFVportResource这个TARGET,点击Build Settings, 搜索COMBINE_,将其值设为NO.
屏幕快照 2017-03-29 上午11.55.06.png
     2.16. 接着设置,搜索Base Sdk,设置成latest iOS.
屏幕快照 2017-03-29 上午11.56.33.png
     2.17. 由于当我们给客户提供包时资源库的名字一般和SDK的名字是一样的,所以最后搜索product name,将其改为BuildSFVportApp.这个名字跟你写的sdk名字一致即可.

     2.18. 基本设置完毕,由于sdk中需要用到图片,先将图片拖入到BuildSFVportResource目录下.
屏幕快照 2017-03-30 上午11.26.52.png
     2.19. 现在就可以建立项目了,新建一个类,继承NSObject,在里面去写实现.
     选中BuildSFVportApp文件夹,添加一个cocoa的class,让他继承于NSObject,将其命名为WFVportAllowLogin,简单写两个方法在头文件中对外暴露接口.
屏幕快照 2017-03-30 下午2.25.03.png
   2.20. 添加方法,加载图片,静态库中使用图片跟普通工程加载图片有所不同,需要引入NSBundle进行加载.
   使用控制器+xib封装到sdk也是一样,注意NSBundle的使用,这时不能传nil了.
屏幕快照 2017-03-30 下午2.37.44.png
    2.21. 由于这个+(NSString *)url类方法是让其他app去调用的,所以,选中BuildSFVportApp在Build phase下将WFVportAllowLogin从Project下拖到Public下.
屏幕快照 2017-03-30 下午2.46.10.png
    2.22.  最后的设置.
屏幕快照 2017-03-30 下午2.48.41.png
   2.23. 至此,就完成了所有的工作.把两个target都编译一下.
   product下的文件就变成了灰色,就是可以运行了.
屏幕快照 2017-03-30 下午2.55.57.png
   2.24. 生成模拟器和真机都可以运行的sdk环境.
    选中Product下的文件,右键 Show in Finder查看。
    由于规范需要,我将sdk工程名BuildSFVportApp改名为了BuildSFVportSdk.
    所以下面大家看到的sdk静态库包名为BuildSFVportSdk.framework了.
    生成模拟器和真机均可运行的sdk,本质就是改变二进制文件的编译.
    打开终端,cd到Products目录下,执行命令:
   lipo -create 真机二进制文件的路径(二进制文件在.framework包中)  模拟器二进制文件的路径 -output  BuildSFVportSdk(最终生成通用二进制文件的名称).
屏幕快照 2017-04-11 下午4.13.42.png
屏幕快照 2017-04-11 下午4.14.39.png
   2.25. 执行完命令后,在Products包下会生成通用的二进制文件BuildSFVportSdk.
   执行命令为:lipo -create /Users/tangshuya/Library/Developer/Xcode/DerivedData/BuildWFVportSdk-bdhubopldatlubhgzurjhyczojlr/Build/Products/Debug-iphoneos/BuildWFVportSdk.framework/BuildWFVportSdk 
    /Users/tangshuya/Library/Developer/Xcode/DerivedData/BuildWFVportSdk-bdhubopldatlubhgzurjhyczojlr/Build/Products/Debug-iphonesimulator/BuildWFVportSdk.framework/BuildWFVportSdk
    -output BuildWFVportSdk
屏幕快照 2017-04-11 下午4.31.47.png
屏幕快照 2017-04-11 下午4.32.08.png
   3.0. 使用sdk.
   BuildWFVportSdk.framework的制作已经完成,接下来就是使用他们了,这里我们新创建一个single view application,取名为PoliceFoShan.
   然后将我们刚刚生成的.framework文件以及.bundle文件拖到这个项目中。
屏幕快照 2017-04-11 下午4.38.05.png
   3.1. 由于sdk中使用了第三方依赖库,所以需要将依赖库添加到项目中,目前需要添加的依赖库为:AFNetworking和SVProgressHUD.
   可以下载安装包添加,也可以通过cocopods集成.

    3.2. 在需要使用sdk的地方,导入头文件进行使用就可以了.
    #import <BuildWFVportSdk/WFVPortAllowLogin.h>

二、如果是制作简单的.framework静态库,不需要build资源文件,按照以下步骤可以很轻松的实现:
1.创建工程--选择 “Cocoa Touch Framework”

1642454-f6cbf644793c09e3.png

2.设置Mach-O的编译方式,选择工程--Build Settings,搜索mach
这步很重要,这一步决定我们制作出来的是静态库还是动态库,默认选择的是Dynamic Library,要手动选择Static Library。
3.继续搜索--Build Active Architectures--设置为NO。
设置为NO的时候,会编译支持的所有的版本
设置为YES的时候,是为Debug的时候速度更快,它只编译当前的architecture 版本。
4.搜索Architectures--点击+号,添加armv7s,支持真机类型。
5.搜索link with
将Link With Standard Libraries设置为NO.
6.如果导入第三方库,.a静态库(AFNetworking等),不要选择添加target。
这样避免了,别人项目在引入相同的第三库不会报错。

1642454-76744bf837210a25.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容