组件制作(含公有、私有)

一、远端仓库创建

公有库

注册 cocoaPods 账号
  • 1.想创建开源的 pod 库,就要注册一个 cocoaPods 账号, 我们使用终端注册, email 用你的 gitHub 邮箱.
    $ pod trunk register GitHub_email <githubEmail> --verbose

  • 2.进行邮箱确认.

  • 3.确认后 $ pod trunk me 可以看到你的注册信息.

    image

    以上步骤执行一次即可

创建 gitHub 公有仓库
image

私有库

  • 创建方法与 '创建 gitHub 公有仓库' 类似, 选择为私有即可.(免费私有库可选码云)
创建私有版本管理库(repo)
  • 1.首先创建一个 'MyRepo' 私有仓库来集中管理所有的私有仓库版本库(这个仓库只是用来管理版本, 不用来存储代码).
  • 2.回到终端, 将这个远程的私有版本仓库添加到本地. $ pod repo add MyRepo https://git.oschina.net/xxx/MyRepo.git
  • 3.查看 Finder 目录 ~/.cocoapods/repos, 可以发现增加了一个 MyRepo 的储存库.
    image
创建私有代码库
image

如果项目由他人创建,去要对应的 https 地址

二、本地仓库创建

  • 1.终端 cd 到指定目录下
  • 2.创建工程 pod lib create <XXXLoginModule>
Q1:What language do you want to use? [ Swift / ObjC ]
-> 输入对应

Q2:Would you like to include a demo application with your library? [ Yes / No ]
-> 输入 Yes
    
Q3:Which testing frameworks will you use? [ Specta / Kiwi / None ]
-> 输入 None
    
Q4:Would you like to do view based testing? [ Yes / No ]
-> 输入 No
    
Q5:What is your class prefix?
-> 输入 <项目前缀>

三、与远程仓库关联

git remote add origin <https>
git pull
git branch --set-upstream-to=origin/master master
git pull origin master --allow-unrelated-histories

如果出现错误, 参见 '常见问题汇总'

四、编辑 podspec 文件

Pod::Spec.new do |s|
  # 名称
  s.name             = 'XXModule'
  # 版本号
  s.version               = '0.0.1'
  # 摘要
  s.summary          = 'A short description of XXModule.'
  # 描述
  s.description           = <<-DESC
  TODO: Add long description of the pod here.
                              DESC
  # 主页
  s.homepage              = 'https://gitee.com/xxx/XXModule'
  # 执照
  s.license               = { :type => 'MIT', :file => 'LICENSE' }
  # 作者
  s.author                = { 'xiaoming' => 'xxx@163.com' }
  # 文件源(公/私有库 统一使用 https 即可)
  s.source                = { :git => 'https://gitee.com/xxx/XXModule.git', :tag => s.version.to_s }
  # 图片
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  # 地址
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
  
  # 是否要求ARC
  s.requires_arc          = true
  # iOS 系统兼容最小版本
  s.ios.deployment_target = '9.0'
  
  # 项目文件
  s.source_files = 'XXModule/Classes/**/*'
  
  # 资源文件
  # s.resource_bundles = {
  #   'XXModule' => ['XXModule/Assets/*.png']
  # }
  
  # 依赖系统库
  #s.frameworks            = 'UIKit', 'Foundation'
  # 依赖系统框架
  #s.libraries             = 'z', 'c++'
  
  # 依赖第三方库
  #s.dependency 'AFNetworking','3.2.1'
  #s.dependency 'Masonry'
  # 依赖第三方静态 framwwork(如果有子项目, 则迁移到子项目)
  #s.vendored_frameworks   = 'XXModule/Classes/SDK/Bugly/Bugly.framework'
  # 依赖第三方静态 a(如果有子项目, 则迁移到子项目)
  #s.vendored_libraries = 'XXModule/Classes/SDK/xxx.a'
  
  # 暴露头文件
  #s.public_header_files   = 'XXModule/Classes/XXModule.h'
  # 添加头文件到 pch
  #s.prefix_header_contents = '#import <Bugly/Bugly.h>'
  # 设置 header 文件
  #s.prefix_header_file = 'XXModule/Classes/Header.h'
  
  # 子项目(如无需要可不配置)
#  s.subspec 'SubMudule1' do |ss|
#    ss.source_files     = 'XXModule/Classes/SubMudule1/*.{h,m}'
#  end
#
#  s.subspec 'SubMudule2' do |ss|
#    ss.source_files     = 'XXModule/Classes/SubMudule2/*.{h,m}'
#    # 依赖第三方框架
#    ss.vendored_frameworks   = 'XXModule/Classes/SDK/Bugly/Bugly.framework'
#  end
end

1.以上为模板, 可做对应删除、替换、注释、及打开注释.
2.对 'spec' 文件进行修改或对 'Development Pods' 下文件变更, 需要进行 'pod install' 整理目录.
3.如果仅对 'Development Pods' 下文件进行修改, 则 'Example' 工程中使用时建议 'cmd + shift + k' 再进行调用, 否则可能出现变更不及时.

五、组件发布

本地校验 spec

pod lib lint

上传至远程仓库

git push
git tag <与 .podspec 文件中的版本一致>
git push —tags

远程验证 podspec

pod spec lint

发布

公有版本
pod trunk push <xxx.podspec>

该步骤包含了:

  • 更新本地 pods 库 ~/.cocoaPods.repo/master
  • 验证 .podspec 格式是否正确
  • 将 .podspec 文件转成 JSON 格式
  • 对 master 仓库进行合并、提交 .master 仓库地址

成功后将会出现下列信息:

    Updating spec repo `master`
    Validating podspec
     -> XXModule (0.0.1)
    Updating spec repo `master`
     🎉  Congrats
     🚀  BYPhoneNumTF (1.0.0) successfully published
     📅  March 17th, 00:31
     🌎  https://cocoapods.org/pods/XXModule
     👍  Tell your friends!
私有版本

pod repo push MyRepo <xxx.podspec>
该步骤包含了:

  • 验证 XXModule.podspec 文件
  • 拉取远程版本库 MyRepo
  • 添加 XXModule.podspec 到版本库中
  • push 到远程

注意:是发布到管理所有的私有仓库版本库中.

search

发布到 cocoapods 的需要先 $ pod setup.

pod search XXModule

-> XXModule (0.0.1)
   A short description of XXModule.
   pod 'XXModule', '~> 0.0.1'
   - Homepage: https://gitee.com/xxx/XXModule
   - Source:   https://gitee.com/xxx/XXModule.git
   - Versions: 0.0.1 [MyRepo repo]

六、组件应用

Podfile 编写(模版)

# gitHub spec 地址
source 'https://github.com/CocoaPods/Specs.git'
# 私有 spec 地址
source 'https://git.oschina.net/xxx/xxx.git'

platform :ios, '9.0'

use_frameworks!

target 'XXModule' do

    pod 'AFNetworking'
    pod 'XXModule'

end

常见问题汇总

1.当执行 git branch --set-upstream-to=origin/master master 进行关联远程仓库时, 出现 fatal: refusing to merge unrelated histories

解决办法:
git pull origin master --allow-unrelated-histories

2.当执行 pod lib lint 时, 出现 [!] XZExplain did not pass validation, due to 1 warning (but you can use --allow-warnings to ignore it).
You can use the --no-clean option to inspect any issue.

解决办法:
根据提示添加 --allow-warnings

3.由于在 sepc 文件中 vendored_frameworks 引用了某个第三方静态库 ,在 import 静态库中头文件后,导致 pod lib lint 报错。
错误信息:
" - ERROR | [iOS] [Explain/DoProblem] xcodebuild: Returned an unsuccessful exit code. You can use --verbose for more information.

  • NOTE | [iOS] [Explain/DoProblem] xcodebuild: /Users/xx/Desktop/Explain/Explain/Classes/DoProblem/ExplainModel.h:9:9: fatal error: 'Bugly/Bugly.h' file not found
    [!] Explain did not pass validation, due to 1 error.
    You can use the --no-clean option to inspect any issue."

解决办法:
如果有子项目存在的话,则需要将 vendored_frameworks 移到子项目中.

4.当执行 pod trunk push <xxx.podspec> 时, 出现 [!] There was an error pushing a new version to trunk: Failed to open TCP connection to trunk.cocoapods.org:443 (getaddrinfo: nodename nor servname provided, or not known)

解决办法:
一般为网络原因, 重试即可

5.当执行 pod repo push XXPods XXX.podspec 操作时,如果出现 [!] The repo MyRepo at ../.cocoapods/repos/MyRepo is not clean 字样

解决办法:
1.更新下我们的版本库.
$ pod repo update MyRepo
2.再继续上传即可.

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

推荐阅读更多精彩内容