背景
最近公司准备让做一些日常开发常用的组件,然后看了一些知识和文章总结了一下防止以后忘记
概要
- 对索引库和代码库的分析
- 如何搭建一个索引库
- 创建代码库并上传到索引库
- 上传代码过程中遇到的问题
对索引库和代码库的分析
平常我们在开发中经常使用cocopod,明白了cocopod的工作原理也就进本明白了索引库和代码库的概念
cocopod 是怎样帮助我们下载代码的呢?
以'AFNetworking'为例
- 我们在我们的Profile文件中
pod 'AFNetworking'
-
pod就会在路径/用户/mac_ui/.cocoapods/repos/master下去找索引库.spec文件
1.png - 读取.spec文件中的代码库路径下下载代码
- 下载代码
以我们自己创建代码仓库“SLSpecs”为例
-
我们在我们的Profile文件中
pod 'YLView'
-
pod就会在路径/Users/mac_ui/.cocoapods/repos/SLSpecs下找到YLViews.podspec的文件
2.png -
读取.spec文件中的代码库路径下下载代码
3.png -
下载代码
公司公共库的创建步骤
-
创建两个仓库:索引库和代码仓库(以码云作为仓库)
-
创建索引库
Xnip2018-05-30_13-43-36.png -
创创建代码仓库
Xnip2018-05-30_16-36-27.png
-
-
上传代码到代码仓库(切记一定要把podspec文件上传上去,不然s.source_files 会报错,因为s.source_files是以podspec文件,源文件所在目录名称与xx.podspec文件保持同名,且在同一个层级。)
Xnip2018-05-30_13-58-22.png -
记住一定要打tag(tag就是版本号)
Xnip2018-05-30_14-12-03.png
git tag -m 'init' '0.0.1'
git push --tags
-
把索引库添加到本地
Xnip2018-05-30_14-18-20.png
pod repo add SLSpec https://gitee.com/appleimpression/SLSpec.git
-
查看是否把索引库添加到本地
Xnip2018-05-30_14-18-33.png
pod repo
-
创建spec文件
- 通过命令创建 pod spec create 名字
- 然后把下面的代码复制进去之后修改即可,
s.name = "libBPush"
s.version = "0.0.1"
s.summary = "赛雷测试"
s.description = "赛雷代码测试"
s.homepage = "https://gitee.com/appleimpression/SLCode.git"
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'liwenquan' => '1145821676@qq.com' }
s.source = { :git => "https://gitee.com/appleimpression/SLCode.git", :tag => "#{s.version}" }
s.ios.deployment_target = '8.0'
s.source_files = 'class/*.{h,m}'
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3'
# s.vendored_libraries = 'upstream/*.a'
end
-
本地验证spec的正确性
-
cd podspec所在目录然后pod lib lint
Xnip2018-05-30_16-41-05.png
-
-
验证远程spec的正确性pod spec lint
Xnip2018-05-30_16-42-40.png
-
-
推送到podspec 到索引库
Xnip2018-05-30_16-48-23.png
-
-
搜索验证(切记搜索的是spec的名字不是索引库的名字切记)
Xnip2018-05-30_17-02-00.png
组件化资源资源的解决
关于xib
- xib和源文件放到同一个文件夹下 ,但是记住有xib的文件一定要以.h.m结尾。
-
把xib的位置描述到资源bundle中。
image -
注意事项:当使用源文件使用xib的时候,注意bundle不是主bundle 而是自己的bundle. xib中加载图片是加载不出来的。需要放到代码里面
Xnip2018-06-04_14-58-41.png
关于图片
-
把文件放到Assets文件中
Xnip2018-06-04_15-05-21.png -
修改spec,指定源文件路径
Xnip2018-06-04_15-00-08.png
生成framework
-
修改代码
Xnip2018-06-04_14-58-41.png -
如果组件中使用了资源,一定要把组件生成framework,不能生成.a,否则资源拿不到.
image
上传代码过程中遇到的问题
- cocoapods迭代版本时和引用系统库的时候,出现的问题
- pod search 的时候记住搜索一定是.podspec的名字不是文件夹的名字
- 上传代码库的时候一定加.podspec文件。
- pod spec lint --verbose 这是看查看详细的报错信息的
- pod spec lint --use-libraries 这是表明要添加系统依赖库的
- 后续继续添加....
- 如果所有的都成功了出现pod search 搜索不到的现象
- 删除~/Library/Caches/CocoaPods/search_index.json
- 然后podserch就可以啦,就可以自动创建.search_index.json
-
上传xib 出现(error: Safe Area Layout Guide before iOS 9.0)的时候,可以有如下解决方案:
Xnip2018-06-01_16-17-16.png
对podSpec 文件进行解读
Pod::Spec.new do |s|
s.name = "libBPush"
s.version = "0.0.1"
s.summary = "赛雷测试"
s.description = "赛雷代码测试"
s.homepage = "https://gitee.com/appleimpression/SLCode.git"
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'liwenquan' => '1145821676@qq.com' }
s.source = { :git => "https://gitee.com/appleimpression/SLCode.git", :tag => "#{s.version}" }
s.ios.deployment_target = '8.0'
s.source_files = 'class/*.{h,m}'
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = "Foundation",'UIKit', 'MapKit'
# s.vendored_libraries = 'upstream/*.a'
# s.dependency 'AFNetworking', '~> 2.3'
# s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/CommonCrypto" }
end
对.spec中的文件进行说明
- s.name :文件名称
- s.version :文件版本号
- s.summary:简介
- s.descripton: 介绍
- s.homepage:主页(写一个可以访问的地址即可)
- s.license:协议(这个一般不要动)
- s.author:作者(作者名字和作者的邮箱)
- s.source: 代码仓库
- s.public_header_files:导入头文件和静态库联合使用(配合静态库使用)。
- s.platform: 平台支持ios多上以上的
- s.source_files: 添加的.h.m源文件的位置(源文件所在目录名称与xx.podspec文件保持同名,且在同一个层级)
- s.public_header_files:导入头文件和静态库联合使用(配合静态库使用)。
- s.frameworks:添加框架引用的系统框架到我们文件中
- s.vendored_libraries:添加的.a静态库的位置(配合头文件使用)
- s.dependency: 添加的第三方依赖库
- s.xcconfig :添加框架引用的系统框架到我们文件中(C语言的库引用 ,切记podspec本地验证和远程验证的时候要加 --use--libraries. 例如: 远程验证:pod spec lint CZFTool.podspec --use-libraries )
关于版本的迭代
- 更新版本组件版本
- 修改代码,修改spec文件中的s.version 版本号
- 进行达标计标记
- git tag -m 'init' '0.0.2'
- git push --tags
- 进行索引库更新
- pod repo push SLSpecs md5.podspec --use-libraries
- 注意事项
- 只要是用到苹果自带库需要验证或者推送本地索引库都要加上 --use-libraries
组件库的使用
- 创建一个项目
- cd到相应的项目所在的目录 pod init
- 出现podfile修改podfile中的文件
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
source 'https://github.com/CocoaPods/Specs.git'
source 'git@git.saileikeji.com:root/SLSpecs.git'
target 'testspec' do
# Uncomment the next line if you're using Swift or would like to use dynamic frameworks
# use_frameworks!
pod 'md5', '~> 0.0.1'
# Pods for testspec
target 'testspecTests' do
inherit! :search_paths
# Pods for testing
end
target 'testspecUITests' do
inherit! :search_paths
# Pods for testing
end
end
注意事项
- pod 'md5' 只写名字不行版本pod 是最后一次pod的版本号,而不是最新的版本号
- 然后pod install 即可。
网友评论