美文网首页
组件化开发流程__(组件打包发布)

组件化开发流程__(组件打包发布)

作者: 解忧杂货店老板 | 来源:发表于2018-11-27 13:47 被阅读91次

1. 编辑 podspec 文件

这一步非常重要,能不能验证通过就主要看这个文件的内容编辑是否正确了。

  • pod自动生成了一部分必须的字段,如果需要设置更多字段,点击这里,以下部分字段并不是必须的,根据需求编辑即可。
#
# Be sure to run `pod lib lint BSDModuleNet.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
#

Pod::Spec.new do |s|
  s.name             = 'BSDModuleNet'  
  s.version          = '0.1.0'
  s.summary          = '组件化/基础工具/网络请求'

# This description is used to generate tags and improve search results.
#   * Think: What does it do? Why did you write it? What is the focus?
#   * Try to keep it short, snappy and to the point.
#   * Write the description between the DESC delimiters below.
#   * Finally, don't worry about the indent, CocoaPods strips it!

  s.description      = <<-DESC
TODO: Add long description of the pod here.
                       DESC

  s.homepage         = 'http://114.55.74.197/ios-team/Modulization/BSDModuleNet'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'linjiangfeng' => 'linjiangfeng@basestonedata.com' }
  s.source           = { :git => 'git@114.55.74.197:ios-team/Modulization/BSDModuleNet.git', :tag => s.version.to_s }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

  s.ios.deployment_target = '8.0'

  s.source_files = 'BSDModuleNet/Classes/**/*'
  
  # s.resource_bundles = {
  #   'BSDModuleNet' => ['BSDModuleNet/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  # s.frameworks = 'UIKit', 'MapKit'
   s.dependency 'AFNetworking', '~> 2.3' #第三方库
   s.dependency 'BSDModuleTools' #私有库
end
  • 修改其中的内容,讲解一下各字段的含义,xxx 处就是需要修改的内容。
s.name = 'xxx' :框架名称,也是 pod search 搜索的关键词,并且一定要和 .podspec 文件的名称一样,否则验证报错。(必须)
s.version = 'xxx' :框架版本号。(必须)
s.summary = 'xxx' : pod search 搜索框架时,显示的框架简介。(必须)
s.homepage = 'xxx' :项目主页地址.(必须)
s.license = { :type => 'MIT', :file => 'LICENSE' } :许可证,这里就这样写不用修改。(必须
s.author = { 'xxx' => 'xxx' } :作者,前面填你的英文名,后面填你的个人邮箱。(必须)
s.source = { :git => 'xxx', :tag => s.version } :GitHub 项目的仓库地址。(必须)
s.social_media_url = 'xxx' :社交网址。(非必须)
s.ios.deployment_target = '8.0'  :系统类型和系统版本。(必须)
s.source_files = 'xxx/*.{h,m}' :要添加 CocoaPods 支持的文件路径。

几种写法:
s.source_files = 'xxx/*'
s.source_files = 'xxx/*.{h,m}'
s.source_files = 'xxx/**'

'*':表示匹配所有文件
'*.{h,m}':表示匹配所有以 .h 和 .m 结尾的文件
'**':表示匹配所有子目录
s.resource_bundle = { 'xxx' => ['xxx/**/*.xcassets'] } :要添加 CocoaPods 支持的图片资源。

如果要在主工程中使用 pod 中的图片,方法如下:

// 假如 podspec 中定义的 Bundle 名字为 TestBundle
s.resource_bundle = { 'TestBundle' => ['xxx/**/*.xcassets'] }
// 调用的时候要注意一下方法
s.ios.vendored_frameworks = 'xxx/xxx.framework' :用于引入自己打包的framework
s.frameworks = 'UIKit':用于引入官方的 framework
s.dependency 'xxx' :项目依赖的其他 pod 库,不能依赖未发布的库,版本号可以不写。

多个依赖可以这样写:
s.dependency 'xxx'
s.dependency 'xxx'
s.dependency 'xxx'

指定版本可以这样写:
s.dependency 'xxx', '1.0.0'
s.subspec 'xxx' do |s|

end

表示建立一个名字为 xxx 的子文件夹,可以将文件分类,我上面用 ... 跳过了,不需要可以不写,里面写法和外面是一样的,例如:

s.subspec 'xxx' do |s|

    s.source_files       = 'xxx/*.{h,m}'
    s.resource_bundle    = { 'xxx' => ['xxx/**/*.xcassets'] }

end

注意:不同子文件夹下 source_files 中的文件是单独编译的,如果文件中引入了别的子文件夹下的代码是编译不通过的。

2. 验证 podspec 文件

podspec 文件修完完成以后,command + s 保存一下,接下来开始验证。

  • 依旧用终端 cd 到你的项目目录执行以下命令:
pod lib lint
  • 如果是提示只有 warning 错误,并提示 but you can use '--allow-warnings' to ignore them 的话,就执行以下命令忽略 warning 来验证:
pod lib lint --allow-warnings
  • 如果提示有 error 错误的话,就必须按照提示将错误解决掉,大多数都是 podspec 文件信息编辑有误,解决完后重新进行验证,如果提示信息不足,可以执行以下命令以获取更多错误信息:
pod lib lint --verbose
  • 如果出现如下图的 BSDModuleTools passed validation. 就是验证成功了。


    验证成功.png

3.给项目打上 tag 版本

因为 CocoaPods 是依赖项目的 tag 版本的,所以必须打上 tag 版本。

  • podspec 文件验证成功后,先将改动后的文件 commit 提交,接着 push 推送到 Git仓库 。
  • 然后执行以下命令打上 tag 版本,版本名必须要和之前podspec 文件中的 s.version 一致。
git tag "1.0.0" // 为 git 提交打上 tag
git push --tags // 将 tag 推送到远程仓库

4.发布到私有仓库

  • 发布之前需要先创建一个用来存放私有库的 Git仓库 (已经建好,链接为地址),然后将仓库 git clone 到 ~/.cocoapods/repos/ 这个目录。

  • 然后在终端输入 pod repo 就可以看到除了有一个 master 的官方库以外,还多了一个自己的私有仓库。


    clone私有库.png
  • 然后依旧先 cd 到你的项目目录,接着要注意的是,发布时会再次验证你的 podspec 文件,如果刚才验证时使用了 --allow-warnings ,那么发布的时候也应该使用,否则会出现相同的报错,BSDModuleCocoapodsRepo 是我们自己的私有仓库的名字,BSDModuleTools 改成你自己维护的 podspec 文件的名字。

  • 如果刚才是用 pod lib lint 验证成功的,就执行以下命令发布:

pod repo push BSDModuleCocoapodsRepo BSDModuleTools.podspec
  • 如果刚才是用 pod lib lint --allow-warnings 验证成功的,就执行以下命令发布:
pod repo push BSDModuleCocoapodsRepo BSDModuleTools.podspec --allow-warnings
  • 最后出现绿色的 Updating the 'BSDModuleCocoapodsRepo' repo
    Adding the spec to the 'BSDModuleCocoapodsRepo' repo
    Pushing the 'BSDModuleCocoapodsRepo' repo
    就算成功了

  • 如要项目中要使用私有仓库来 pod install ,必须在 podfile 开头指明私有仓库的地址和官方仓库地址,注意两个地址都要指定,例如: pod引用私有库.png

5. 私有库依赖私有库

这个情况就比较特殊了,如果私有库中依赖了另一个私有库,podspec 文件中依旧要使用 s.dependency 'xxx' 来指明依赖的私有库,但是在验证 podspec 时就不能使用 pod lib lint 来验证了,否则会找不到依赖的私有库,需要从远程验证并指定私有库的地址,下面是验证步骤。


依赖私有库.png
  • podspec 文件的编辑没有区别,编辑完以后,由于需要远程验证而不是本地验证,所以需要先将编辑完的 podspec 文件 git push 再打上 tag
  • 然后使用以下命令开始验证,后面指明私有仓库的地址和官方仓库地址,注意两个地址都要指定。
pod spec lint --sources='私有仓库地址,https://github.com/CocoaPods/Specs.git' --allow-warnings
(例如:pod spec lint --sources='git@114.55.74.197:ios-team/BSDModuleCocoapodsRepo.git,https://github.com/CocoaPods/Specs.git' --allow-warnings)
  • 验证成功后发布到私有仓库时,也需要指明私有仓库的地址和官方仓库地址,如下。
pod repo push 私有仓库名 xxx.podspec --sources='私有仓库地址,https://github.com/CocoaPods/Specs.git' --allow-warnings
(例如:pod repo push BSDModuleCocoapodsRepo BSDModuleNet.podspec --sources='git@114.55.74.197:ios-team/BSDModuleCocoapodsRepo.git,https://github.com/CocoaPods/Specs.git' --allow-warnings)

好了,大功告成,其实过程挺简单的,只要 podspec 文件编辑正确,就会少走很多坑,以后再次更新框架的话,只需要修改 podspec 文件中的 s.version 版本,然后把你的项目再打一个 tag 版本,接着再次提交到 私有库 就可以了。

相关文章

  • 组件化开发流程__(组件打包发布)

    1. 编辑 podspec 文件 这一步非常重要,能不能验证通过就主要看这个文件的内容编辑是否正确了。 pod自动...

  • 组件化,插件化,热更新

    组件化 拆成多个 module 开发就是组件化 插件化 App 的部分功能模块在打包时并不以传统方式打包进 apk...

  • 滚动栏的开发

    滚动栏的开发 1.组件化在开发之前2.组件化在开发之后 组件库开发流程将控件封装成pod库1.pod lib cr...

  • iOS 14 APP Clips开发(组件化代码复用)

    Create by Linxi 2020/11/25 本文将主要探讨App Clips开发流程 和 组件化、非组件...

  • 组件化方案

    耗费2个月,提供了可用的组件化方案,特点如下: 宿主、组件代码开发期完全隔离,组件可独立打包调试 组件交互依赖接口...

  • Android组件化方案

    Android组件化方案Android彻底组件化demo发布

  • 组件状态管理

    组件内状态管理流程 Vue最核心的两个功能:数据驱动和组件化 组件化开发给我们带来了: 更快的开发效率 更好的可维...

  • 谈谈我理解的Android组件化

    Android组件化分享 为什么要做组件化 认识一下组件化 组件化流程与问题1、组件模式与集成模式的切换2、And...

  • Vue组件化开发

    ✍目录总览:(组件化概念、组件注册、数据存放、组件数据共享、组件插槽、使用步骤) 一、组件化概念 1. 组件化开发...

  • Vue插件打包与发布的方法示例

    插件打包与发布插件功能开发完成后,若需要发布到公共组件库中(例如:npmjs),需要对插件进行打包并发布,简单说明...

网友评论

      本文标题:组件化开发流程__(组件打包发布)

      本文链接:https://www.haomeiwen.com/subject/bzsiqqtx.html