iOS pod组件化踩坑记录

最近在做利用pod进行组件化重构,因为没什么经验,也是一边学着,一边做着,然后这里将我遇到的问题整理了下来

基础:如何发布一个pod组件

踩坑点 持续更新。。。

1、利用pod lib create 开发,添加podspec 的 resources,写法都对但是pod install后,图片资源在,就是不显示(不使用bundle方式调用图片)
解决:pod lib create 的 自动生成的 podfile 带有 use_frameworks!
删除即可 (使用bundle方式不需要删除use_frameworks!)
关于 use_frameworks! 点击传送门

  s.resources = 'sqbj-common-kit/Assets/**/*.{png}'

若是不使用use_frameworks! 但是运行时发现报错,xxx.framework找不到,直接删除DerivedData或者Xcode->Product->clean
原因:use_frameworks\!打的是 lib.framework,不使用打的是 lib.a ,不使用use_frameworks也就是用.a,那么自然是需要清除framework缓存,来处理缓存给我们带来的系列问题
我们在使用和不使用use_frameworks!的两种情况下可以看Pods下的Products 文件夹,他里边就是依赖库经过pod自动生成的framework或者 lib.a 文件,我们在使用 use_frameworks! 的时候,这个文件夹下是 framework,反之是 lib.a

2、关于 subspec ,每一个 spec或subspec 都需要有一个 end 对应,并且 subspec 之间的相互引用需要做依赖,否则会报找不到文件,示例代码

Pod::Spec.new do |s|
  s.name             = 'sqbj-common-kit'
  s.version          = '0.0.1'
  s.summary          = '公共库'
  s.description      = <<-DESC
                      社区半径公共库
                       DESC
  s.homepage         = 'https://xxxt/ios-common-kit'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'blackstar_lang@163.com' => 'langzq@sqbj.com' }
  s.source           = { :git => 'https://xxx/ios-common-kit.git', :tag => s.version.to_s }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

  s.ios.deployment_target = '8.0'
  s.resources = 'sqbj-common-kit/Assets/**/*.{png}'
 
  s.subspec 'SQSystem' do |sss|
    sss.source_files = 'sqbj-common-kit/Classes/SQSystem/*.{h,m}'
    sss.public_header_files = 'sqbj-common-kit/Classes/SQSystem/*.h'
    sss.dependency 'sqbj-common-kit/SQBaseObject'
  end
  s.subspec 'SQBaseUI' do |sss|
    sss.source_files = 'sqbj-common-kit/Classes/SQBaseUI/*.{h,m}'
    sss.public_header_files = 'sqbj-common-kit/Classes/SQBaseUI/*.h'
    sss.dependency 'Masonry'
    sss.dependency 'sqbj-common-kit/SQCategory'
    sss.dependency 'sqbj-common-kit/SQBaseObject'

  end
  s.subspec 'SQBaseObject' do |sss|
    sss.source_files = 'sqbj-common-kit/Classes/SQBaseObject/*.{h,m}'
    sss.public_header_files = 'sqbj-common-kit/Classes/SQBaseObject/*.h'
    sss.dependency 'YYModel'
  end
  s.subspec 'SQCategory' do |sss|
    sss.source_files = 'sqbj-common-kit/Classes/SQCategory/*.{h,m}'
    sss.public_header_files = 'sqbj-common-kit/Classes/SQCategory/*.h'
  end
  
  s.frameworks = 'UIKit', 'Foundation'

end

3、我们在pod install 后可能会出现 找不到文件的报错,退出此工程,重新打开即可(Xcode或者Cocoapods的 Bug,执行pod install 后不刷新 pod 库)

4、s.license 设置后,发布pod库报找不到LICENSE的警告,对于LICENSE可以使用 pod lib create 自动生成或者 我们在新建一个网络代码仓库可以直接创建LICENSE,这两个LICENSE是不会报警告的(我之前自己创建的LICENSE)

5、私有库和公共库 发布的组件一个名字,但是找组件的时候会优先找master的仓库,办法就是干掉master(不想用的仓库)上发的组件,可以delete 或者 deprecate(废弃) 某一版本(所有版本都干掉),千万别 移除自己仓库权限(remove-owner),找不回来,我命令弄错了,公共库组件一直占用我的名字,因为我命名都是规范-强制,就很难受,我就把本地master仓库中的组件podspec删了,这样就只能找我需要用的repo了
可能用到的命令

pod trunk me //查看我自己发布的公共库组件
pod repo //查看本地repo库
pod trunk delete 组件名称 版本号
pod trunk deprecate 组件名称 版本号
pod trunk info 组件名称 查看组件信息(发布时间,组件拥有人)

6、我们使用pod lib create 创建的项目,发现在pod下的组件断点debug不起作用,我们需要设置组件的调试编译策略

image.png

有关编译策略 Optimization Level 介绍点击编译策略

7、pod spec lint common-kit.podspec 或者push发布组件库的时候报错找不到依赖库:

- ERROR | [iOS] unknown: Encountered an unknown error (Unable to find a specification for ` common-kit` depended upon by `login-kit`

原因:我的 login-kit 依赖于 common-kit ,但是 common-kit 是私有库组件,我们在podfile里可以声明source,但是podspec文件是不能声明依赖组件的代码地址库的,所以需要我们在lint或者push的时候加入source 声明

pod spec lint login-kit.podspec --sources='自己的私有库地址,https://github.com/CocoaPods/Specs'  --allow-warnings

8、pod spec lint 的时候报错

[-Werror,-Wnon-modular-include-in-framework-module]

原因:没搞懂,大概就是组件引用相关问题
解决办法:在 pod spec lint 的时候加入参数 --use-libraries

 pod spec lint sqbj-login-kit.podspec --sources='私有库地址,https://github.com/CocoaPods/Specs'  --allow-warnings --use-libraries

9、在使用pod repo push 仓库地址 xxx.podspec 发布私有库的时候,为了方便,我们可以将repo远程仓库地址改成repo仓库名称,比如说,我的仓库地址是https://jlkdfjlasdjkdaejf.com 你能记得住吗,用起来多不方便,所以我们就可以这样做:

pod repo add 自定义仓库名称 仓库地址

然后我们发布私有库

pod repo push 自定义仓库名称 xxx.podspec

示例

pod repo push sqbj-ios login-kit.podspec --allow-warnings --use-libraries

10、pod repo push的时候可能报错,说找不到分支,这个问题挺有意思的,我们自己搭建的gitlab服务器,代码都在这托管,我创建了管理 podspec 的仓库(即创建一个project),然后我执行 pod repo add sqbj-ios 仓库地址,显示clone xxx。。。。,也就是说仓库已经克隆下来了,cd到这个repo仓库,显示分支master ,但是执行pod repo push 非说没分支,不能push 。我们在远端新建一个project 什么都不能看,是没有分支、提交信息的,我没办法,按理来说是有个默认的master分支的,但是非说我没有,很无奈,我就在远端直接创建了一个README,然后回到repo仓库,pull了一下,README下载下来了,然后回到代码工程目录,执行pod repo push 发现好了,很奇葩。

11、文件或图片导入后,发现后边显示 ?并且无法使用
解决办法:选中带问号的文件或文件夹,右键 -> Source Control -> add selected files (此问题跟pod没啥关系,应该是Xcode的问题,但是因为开发组件时遇到的,就也记下来了)

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