来自我的team
公共库创建:
http://blog.csdn.net/yangyangzhang1990/article/details/52851328
简介
目的
1、在开发过程中,会积累很多可以复用的代码,有些我们不想开源,又想像开源库一样在CocoaPods中管理它们,那么就可以通过私有仓库来管理
2、为后期的组件化方式实现做准备。
优点:
减少项目合并过程中的冲突,让项目结构更加整洁,方便项目组件迁移使用。
缺点:
进行私有库管理会比在项目开发中直接修复错误操作麻烦一些。
最坑的误区
需要注意pods私有库我们需要维护两个库:
一个是私有的Specs
一个是我们的代码工程
不要把这两个混在一起了。
参考地址: http://blog.csdn.net/yangyangzhang1990/article/details/52863220
如何制作出自己的私有库(其实很简单)
- 建立私有的spec仓库 (例如:WLProjectPodsRepos)
在 https://coding.net/ 创建私有仓库管理中心,主要用来管理我们所有私有库的.podspec文件,项目名称为:WLProjectPodsRepos - clone私有的spec仓库到本地
Clone 出错怎么办?
Coding的使用帮助中心: https://coding.net/help/faq/git/git.html
1、请确保 remote url (大小写敏感)是正确的
$ git remote -v
# 查看目前使用的 remote url
origin https://git.coding.net/username/repo-name.git (fetch)
origin https://git.coding.net/username/repo-name.git (push)
$ git remote set-url origin https://git.coding.net:username/right-name.git
# 修改为正确的 remote url
2、请确保自己在项目中的权限非 受限;
3、如果使用 https 方式 clone,服务器端一直返回 403 并且客户端不提示输入密码,则有可能是 git 客户端缓存了错误的密码,请清除已保存的密码
# 下面依次输入
$ git credential-osxkeychain erase
host=git.coding.net
protocol=https
[按回车]
克隆项目到本地
$ cd WorkSpace/
$ git clone https://git.coding.net/welian_xxx/WLProjectPodsRepos.git
# 输入有权限用户名密码
# xxxxxx xxx
把公有Specs里面的CocoaPods-version.yml文件拷贝到WLPodsrepo,CocoaPods-version.yml所在位置见下图
并建立一个名为“Specs”的文件夹(文件夹里面可以放一个无关的小文件,否则推送远程时候,可能会被忽略)
把添加的内容推送到远端仓库,私有Specs创建完成
$ cd WLProjectPodsRepos/
$ git add .
$ git pull
$ git commit -s -m "Add PodInfo"
$ git push origin master
将包装好的远程的私有Specs仓库再次 clone到 本地
$ pod repo add [SpecRepoName] [GitAddress] clone 到 .cocoapods 目录下
$ pod repo add WLProjectPodsRepos https://git.coding.net/welian_wu/WLProjectPodsRepos.git
执行成功,在本地~/.cocoapods/repos路径下就能发现,多了一个 WLProjectPodsRepos的文件夹
自己的私有库工程
创建远程仓库 本地工程,同步代码,参考Cocoapods公有库项目工程创建。详见:http://blog.csdn.net/yangyangzhang1990/article/details/52851328
1、创建项目工程,并把项目工程上传到git上面, 核心代码添加到 Classes 文件中
2、把本地项目与Git仓库进行关联
$ cd /Users/liuwu/WorkSpace/WLCommonKit
$ git init
# 把整个目录添加add 通配符
$ git status
$ git add . # 将本地文件添加到仓库
$ git commit -m "commit all files"
# 将本地与Coding仓库关联起来
$ git remote add origin https://git.coding.net/welian_wu/WLCommonKit.git
$ git pull origin master
$ git push origin master
git pull的时候出现错误:
error:
fatal: refusing to merge unrelated histories
解决方案
$ git pull origin master --allow-unrelated-histories
之后,会进入vim编辑状态,如果合并信息没有强求,直接输入q:直接退出
3、把项目类文件放入Classes文件夹中
为项目工程打tag
pods管理下的库,版本是根据git的tag来区分的,所以我们创建好工程之后需要为我们的仓库打一个tag,并且推送到远程仓库
$ git tag 0.0.1 # 未本地仓库打tag
$ git push --tags # 推送到远程仓库
工程中添加podspec (一定要 cd 到当前工程路径,在添加 podspec)
- 1、创建spec文件,文件内容
pod spec create WLCommonKit
会在当前目录下生成 .podspec
文件
- 2 、编辑.podspec文件,相应配置代表的意思 百度 谷歌 或者自己翻译下吧
Be sure to run `pod spec lint WLCommonKit.podspec' to ensure this is a
valid spec and to remove all comments including this before submitting the spec.
To learn more about Podspec attributes see http://docs.cocoapods.org/specification.html
To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/
Pod::Spec.new do |s|
――― Spec Metadata ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
These will help people to find your library, and whilst it
can feel like a chore to fill in it's definitely to your advantage. The
summary should be tweet-length, and the description more in depth.
s.name = "WLCommonKit"
s.version = "0.0.1"
s.summary = "A short description of WLCommonKit."
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
DESC
s.homepage = "http://EXAMPLE/WLCommonKit"
s.screenshots = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif"
――― Spec License ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Licensing your code is important. See http://choosealicense.com for more info.
CocoaPods will detect a license file if there is a named LICENSE*
Popular ones are 'MIT', 'BSD' and 'Apache License, Version 2.0'.
s.license = "MIT (example)"
s.license = { :type => "MIT", :file => "FILE_LICENSE" }
――― Author Metadata ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Specify the authors of the library, with email addresses. Email addresses
of the authors are extracted from the SCM log. E.g. $ git log. CocoaPods also
accepts just a name if you'd rather not provide an email address.
Specify a social_media_url where others can refer to, for example a twitter
profile URL.
s.author = { "" => "" }
Or just: s.author = ""
s.authors = { "" => "" }
s.social_media_url = "http://twitter.com/"
――― Platform Specifics ―――――――――――――――――――――――――――――――――――――――――――――――――――――――
If this Pod runs only on iOS or OS X, then specify the platform and
the deployment target. You can optionally include the target after the platform.
s.platform = :ios
s.platform = :ios, "5.0"
When using multiple platforms
s.ios.deployment_target = "5.0"
s.osx.deployment_target = "10.7"
s.watchos.deployment_target = "2.0"
s.tvos.deployment_target = "9.0"
――― Source Location ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Specify the location from where the source should be retrieved.
Supports git, hg, bzr, svn and HTTP.
s.source = { :git => "http://EXAMPLE/WLCommonKit.git", :tag => "#{s.version}" }
――― Source Code ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
CocoaPods is smart about how it includes source code. For source files
giving a folder will include any swift, h, m, mm, c & cpp files.
For header files it will include any header in the folder.
Not including the public_header_files will make all headers public.
s.source_files = "Classes", "Classes/*/.{h,m}"
s.exclude_files = "Classes/Exclude"
s.public_header_files = "Classes/*/.h"
――― Resources ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
A list of resources included with the Pod. These are copied into the
target bundle with a build phase script. Anything else will be cleaned.
You can preserve files from being cleaned, please don't preserve
non-essential files like tests, examples and documentation.
s.resource = "icon.png"
s.resources = "Resources/*.png"
s.preserve_paths = "FilesToSave", "MoreFilesToSave"
――― Project Linking ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Link your library with frameworks, or libraries. Libraries do not include
the lib prefix of their name.
s.framework = "SomeFramework"
s.frameworks = "SomeFramework", "AnotherFramework"
s.library = "iconv"
s.libraries = "iconv", "xml2"
――― Project Settings ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――
If your library depends on compiler flags you can set them in the xcconfig hash
where they will only apply to your library. If you depend on other Podspecs
you can include multiple dependencies to ensure it works.
s.requires_arc = true
s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
s.dependency "JSONKit", "~> 1.4"
end
```
注意:
1 s.version应和tag的版本一致;
2 将源代码放置在固定的文件夹下,同时修改s.source;
3 验证podspec文件;
$ pod lib lint
$ pod lib lint WLCommonKit.podspec --allow-warnings --use-libraries
4 推送podspec文件 到pods的specs首先push修改后的podspec文件到本地工程的git远程仓库
$ git commit -a -m "Add WLCommonKit.podspec文件"
$ git push origin master
- 3、提交 spec文件(私有库 提交到自己的specs 文件夹中,公有库使用 trunk 提交到Cocoapods的官方specs 中)
$ cd /Users/liuwu/WorkSpace/WLCommonKit
把当前的.podspec文件推送到WLPodsrepo私有库当中
$ pod repo push WLProjectPodsRepos WLCommonKit.podspec
or
如有警告使用下面
$ pod repo push WLProjectPodsRepos WLCommonKit.podspec --allow-warnings
--use-libraries
不出意外 用pod搜索就能搜到
```
$ pod search WLCommonKit
-
4、如何使用私有库
我们这里创建一个 test555的工程,按照截图中的方法进行编辑 Podfile文件,就可以正常使用了platform :ios, '8.0'
公有库
source 'https://github.com/CocoaPods/Specs.git'
私有库
source 'https://git.coding.net/welian_wu/WLProjectPodsRepos.git'
use_frameworks!
def shared_pods
pod 'WLCommonKit'
pod 'Masonry'
...
end
target 'WLCommonKit' do
shared_pods
end
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = '3.0'
end
end
end
```
执行 pod install
安装成功
其他人怎么使用远程私有库
- 将远程的私有Specs仓库Clone到本地
$ pod repo add [SpecRepoName] [GitAddress] # clone 到 .cocoaPods 目录下 添加私有仓库到本地 $ pod repo add WLProjectPodsRepos https://git.coding.net/welian_wu/WLProjectPodsRepos.git # 更新私有库资源 $ pod repo update WLProjectPodsRepos
查询本地是否有对应的项目库
$ pod search WLCommonKit
最后是 编辑项目Podfile文件 pod install;
#####私有库依赖私有库
参考上面,创建私有仓库,添加.podspec文件。修改spec文件 比如:
![屏幕快照 2016-12-14 下午10.57.58.png](http://upload-images.jianshu.io/upload_images/1825863-5ffdd6a6de38b52c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
提交私有项目库内容到远程Git仓库。然后,使用以下方式验证.podspec文件。
![屏幕快照 2016-12-14 下午11.00.23.png](http://upload-images.jianshu.io/upload_images/1825863-e183c1711a1e68a7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
#####出现错误处理
1、[!] Unable to find a pod with name, author, summary, or description matching WLKit
解决 : rm ~/Library/Caches/CocoaPods/search_index.json
2、Setting up CocoaPods master repo
亲 ,动一动 谷歌下
3
![屏幕快照 2016-12-14 下午11.04.22.png](http://upload-images.jianshu.io/upload_images/1825863-d60e5ad7cc60b217.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)