iOS 将个人framework上传至私有pod库

需求:将项目中的一个模块制作成一个可移植的代码库。上传到pod移植起来会更方便,也方便版本管理。

一、实施步骤

  1. 制作frmaework库;传送门
  2. 开发framework库;传送门
  3. 将framework库上传至pod;

二、制作pod库的准备工作

  1. 制作好的framework静态库;
  2. pod调试工程;
  3. 代码托管工具(码云、github、gitlab等都行),这里以码云为为例;

1.1 framework包合并

上传pod库的framwoek包一般建议是release的真机和模拟器的合并包。目前我测试pod下来的库好使不好使,用debug的合并包也没有问题。

  • 合并framework包
lipo -create Debug模拟器.a路径+空格+Debug真机.a路径+输出路径+输出名字
  • framework用的资源文件也准备好,这里以.bundle文件为例。

1.2 将framework文件放入到pod调试工程中的Class文件夹,bundle文件放入到Assets文件夹

都放到Class文件夹也可以,在之后的.podspec文件将路径写清楚就行。


1.pod调试工程目录.png

2.1 生成pod调试工程

  • cd 到目标文件夹路径;
  • 执行生成命令;
pod lib create 库名 
  • 创建的选项
    这么选我觉着是挺好用的,具体看自己的需求。


    2.生成pod库.png

2.2 导入framework文件,编写.podspec文件

  • 首先按照上边的操作,导入freamework和资源文件
  • 然后编写.podspec文件,编写完成后cd到pod工程的Example文件目录,执行pod install命令。
Pod::Spec.new do |s|
  s.name             = 'framewirkPod'
  s.version          = '0.0.1'
  s.summary          = 'A short description of framewirkPod.'
  s.description      = "上传pod的一个演示"
  s.homepage         = 'www.baidu.com'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'MHZ' => '********@qq.com' }
  s.source           = { :git => '这个工程在托管工具上的Git地址', :tag => s.version}

  s.ios.deployment_target = '8.0'
  #其他文件可以在这里添加
  #  s.source_files = 'framewirkPod/Classes/**/*'
  # s.resource_bundles = {
  #   'framewirkPod' => ['framewirkPod/Assets/*.png']
  # }
  # s.public_header_files = 'Pod/Classes/**/*.h'
  # s.frameworks = 'UIKit', 'MapKit'
  
  s.vendored_frameworks = ['framewirkPod/Classes/TestFramework.framework'] #自己的framework在工程中的路径
  s.resource_bundles = {
      'Resources' => 'framewirkPod/Assets/frameworkImages.bundle'
  }#资源文件的路径,会在pod中创建“Resources”的文件夹
  
  #framewirk需要依赖那些三方库可以在这里添加,导入该pod是,会自动导入这些三方库
  s.dependency 'Masonry'
  s.dependency 'YYCategories'
  s.dependency 'YYModel'
end

之后我们就的到这样一个目录结构的工程:


3.执行pod install之后的工程.png

这时候我们就可以尝试在测试工程中调用我们的framework,在这里能够正确使用,则基本可以说明上传到pod 之后的framework也同样可以正常使用了。
但这时候调用,会发现我们使用的图片资源加载不出来,是因为我们的bundle文件没有在主工程当中。也是因为我们在调用图片的方法获取的bundle路径的方法只能获取到主工程中的bundle文件,无法访问到pod工程中的bundle文件。目前我没有找到能够让framework自主调用静态库内部bundle文件方法,如果有小伙伴知道此类方法还请不吝赐教。

  • 添加bundle文件的操作


    4.在主工程中添加bundle文件.png

    -然后尝试调用framework中的内容


    5调用framwwork内容,及结果.png

3.1 创建远程仓库

此处一般需要创建3个远程仓库,分别用于

  1. podspace的版本管理;
  2. framework源码的管理;
  3. 用户上传pod库。
    建议将这些都放置在公司的gitlab当中,不要将公司的代码上传到自己的代码托管账号当中。一是方便其他同事的使用,二是如果自己离职这些东西也方便交接。
  • 生成远程仓库
    此处省略源码的远程仓库的创建。


    6.远程仓库.png

到这里准备工作都完了,剩下的是pod库制作相关的主要内容了

创建私有pod库

  1. 创建本地podSpace 并关联远程podSpace仓库;
  2. 创建pod库;
  3. 配置 .podspec 文件;(上边已经配置过了,此时更改一下文件中远程仓库地址)
  4. 验证本地pod文件;
  5. 提交pod库到远程仓库;
  6. 给pod工程打上tag值,并推送到远程仓库;
  7. 私有pod库的验证;
  8. 生成pod私有库;
  9. 引用验证pod库。
    1.创建-关联podSpace
pod repo add FrameworkPodSpace https://gitee.com/xxxxxxx/FrameworkPodSpace.git

之后可以通过~/.cocoapods/repos查看本地pod版本库:

7.本地pod版本库.png

第二第三步上边已经做过了,此处略过
验证本地pod文件是否正确

pod spec lint

有警告啥的可以加上--private--allow-warnings
通过后可以按看到类似framewirkPod passed validation.的提示。
提交pod工程到远程仓库
上传成功后刷新远程仓库页面可以看到:

8.pod库上传成功.png

给pod库打上tag并推送到远程仓库

git tag -m 'first release' '0.0.1'
git push --tags     #推送tag到远端仓库   

此处的0.0.1与pod文件中写的s.version = '0.0.1'保持一致。
验证私有pod库

pod spec lint --sources='https://gitee.com/******/FrameworkPodSpace.git,https://github.com/CocoaPods/Specs' --allow-warnings

因为我们的pod空中包含有静态库,需要在后边再额外添加--use-libraries
验证成功后会显示

9.私有pod库验证成功.png

注:此处我这里卡了一下,一直提示vendored_frameworksresource_bundles路径下文件找不到,但整个工程貌似没有问题,后来才发现是我的工程在重新配置.podspec文件后没有打tag也没有上传。操作一下tag和上传tag之后再校验就通过了。

然后就是生成自己的私有pod库,例:

pod repo push FrameworkPodSpace framewirkPod.podspec --sources='https://gitee.com/xxxxxx/FrameworkPodSpace.git,https://github.com/CocoaPods/Specs' --allow-warnings --use-libraries

成功之后显示:


10.生成pod库成功.png

查看远程私有pod仓库:


屏幕快照 2018-12-20 下午5.33.59.png

此时没出息地激动了一下。


三.私有pod库的使用

1.配置podfile文件

source 'https://gitee.com/xxxxxx/FrameworkPodSpace.git' //自己的远端pod仓库
source 'https://github.com/CocoaPods/Specs.git' //github的远端公有pod仓库

platform :ios, '8.0'

target 'SelfPodApplyDemo' do
    pod 'framewirkPod'

end

工程调用和在创建的pod测试工程中的一样。
然后根据上边添加资源文件方式添加资源文件,应该就可以使用了。

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

推荐阅读更多精彩内容