Swift 如何建立自己的 CocoaPod 库

当我完成 JMRoundedCornerSwift 的时候,我像往常一样打开小基友 徐亚非的博客CocoaPods建立自己的Podspec(三),拷贝输入教程里的命令pod trunk push JMRoundedCornerSwift.podspec --use-libraries --allow-warnings,但事情并不顺利,Swift 建立自己的 CocoaPod 库与我平时用 OC 建立 CocoaPod 库的方式并不一致。

首先,要了解什么是静态库,什么是什么是动态框架。

所谓静态库,或者说 .a 文件,就是一系列从源码编译的目标文件的集合。它是你的源码的实现所对应的二进制。配合上公共的 .h 文件,我们可以获取到 .a 中暴露的方法或者成员等。在最后编译 app 的时候 .a 将被链接到最终的可执行文件中,之后每次都随着 app 的可执行二进制文件一同加载,你不能控制加载的方式和时机,所以称为静态库。

在 iOS 8 之前,iOS 只支持以静态库的方式来使用第三方的代码。

与静态相对应的当然是动态。我们每天使用的 iOS 系统的框架是以 .framework 结尾的,它们就是动态框架。

Framework 其实是一个 bundle,或者说是一个特殊的文件夹。系统的 framework 是存在于系统内部,而不会打包进 app 中。app 的启动的时候会检查所需要的动态框架是否已经加载。像 UIKit 之类的常用系统框架一般已经在内存中,就不需要再次加载,这可以保证 app 启动速度。相比静态库,framework 是自包含的,你不需要关心头文件位置等,使用起来很方便。

Apple 从 iOS 8 开始允许开发者有条件地创建和使用动态框架,这种框架叫做 Cocoa Touch Framework。

虽然同样是动态框架,但是和系统 framework 不同,app 中的使用的 Cocoa Touch Framework 在打包和提交 app 时会被放到 app bundle 中,运行在沙盒里,而不是系统中。也就是说,不同的 app 就算使用了同样的 framework,但还是会有多份的框架被分别签名,打包和加载。

Cocoa Touch Framework 的推出主要是为了解决两个问题:首先是应对从 iOS 8 开始的扩展开发。其次是因为 Swift,它是不支持编译为静态库的。

所以,想正确建立自己的 swift cocoaPod 库需要建立一个 Cocoa Touch Framework。Xcode 为我们准备了 framework target 的模板,直接创建这个 target,就可以开始编写框架了。

添加源文件,编写代码,编译,完成,就是这么简单。

首先是创建 Cocoa Touch Framework,File -> New -> project...,选择Cocoa Touch Framework

屏幕快照 2016-04-11 11.23.14.png

下一步记得语言选择 Swift,然后编写你的库的代码,例如我添加了 JMRoundedCorner.Swift

屏幕快照 2016-04-11 11.28.38.png

点击运行,没有错误的话,动态库就算完成了。

你可能还需要一个 Demo 来演示自己的动态库,添加一个 TARGETS,

屏幕快照 2016-04-11 11.31.33.png

这个选择页面是不是很熟悉

屏幕快照 2016-04-11 11.32.19.png

写完 demo 就可以切换 targets 来选择编译动态框架还是运行 demo。在 demo 中使用编写的动态框架需要 import 框架,例如 import JMRoundedCornerSwift,command + 单击JMRoundedCornerSwift 即可看到框架暴露的接口,你标记为 public 的内容将是框架使用者能看到的内容。
接下来将库上传到 cocoapod 参考CocoaPods建立自己的Podspec(三)这篇博客就行,需要注意的是命令里不能使用--use-libraries,会报错:

ERROR | [iOS] unknown: Encountered an unknown error (Pods written in Swift can only be integrated as frameworks; add use_frameworks! to your Podfile or target to opt into using it. The Swift Pod being used is: Socialite) during validation.

去掉它就好了。

参考资料:

如何打造一个让人愉快的框架

CocoaPods建立自己的Podspec(三)

stackoverflow

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

推荐阅读更多精彩内容