做iOS开发的同学对这张图片再熟悉不过了,在使用第三库的时候,cocoapods确实给我们带来了极大的方便。那么,我们如何制作自己的pod呢?下面是之前的实践笔记
Demo中的组件式样:
cocoapods文档提供了两种方法:
方法1 pod lib create YeshifuShareUI
方法2 pod spec create YeshifuShareUI
两种方法之前都尝试过,方法一会帮助你创建一大堆的文件,包括演示demo创建;方法二方便你在现有的项目中提取你需要制作pod的代码。
这里使用方法2。
在开始之前,我们先注册下CoocaPods ,pod trunk register ,之后你会收到一份邮件,需要点下里面链接验证。
详细步骤
1 整理代码
随便找一个现有的项目,把里面的一个模块放在同一个文件夹下,我这里放在ShareUI文件夹下面。
图一 项目目录结构
2 创建 YeshifuShareUI.podspec文件
在终端cd 到ShareUIDemo (如图一所示),执行pod spec create YeshifuShareUI ,得到文件YeshifuShareUI.podspec
3 编辑 YeshifuShareUI.podspec
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
#
# Be sure to run `pod spec lint YeshifuShareUI.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 =
"YeshifuShareUI"
s.version =
"0.0.5"
s.summary =
"CocoaPods组件化实践"
# 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 = <
"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.
#
# Or just: s.author =
"叶同学"
s.social_media_url =
"http://yeli.studio"
# ――― 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,
"8.0"
s.ios.deployment_target =
'8.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 =>
"https://github.com/shiyeli/ShareUIDemo.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
.
#
#这里路径需要注意下,是以YeshifuShareUI.podspec为基准。
#如果你的YeshifuShareUI.podspec文件在其他层级处创建的,那么根据自己的情况写。
#ShareUI正是放置组件代码的文件夹
s.source_files =
"ShareUIDemo/ShareUIDemo/ShareUI"
,
"ShareUI/**/*.{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 =
"UIKit"
# 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
|
对于其他配置,根据需要,删删改改依葫芦画瓢就好。
4 提交项目代码到github远程仓库
依次执行:
1
2
|
git add . && git commit -m
'配置podspec'
git tag
0.0
.
5
&& git push --tags
|
5 验证YeshifuShareUI.podspec 是否正确
1
|
pod lib lint
|
6 提交到CocoaPods
1
|
pod trunk push YeshifuShareUI.podspec
|
Success !
完毕之后在CocoaPods搜索试试看