天天看点

iOS组件化实践(基于CocoaPods)

iOS组件化实践(基于CocoaPods)
做iOS开发的同学对这张图片再熟悉不过了,在使用第三库的时候,cocoapods确实给我们带来了极大的方便。那么,我们如何制作自己的pod呢?下面是之前的实践笔记

Demo中的组件式样:

iOS组件化实践(基于CocoaPods)

cocoapods文档提供了两种方法:

  • 方法1 pod lib create YeshifuShareUI
  • 方法2  pod spec create YeshifuShareUI

    两种方法之前都尝试过,方法一会帮助你创建一大堆的文件,包括演示demo创建;方法二方便你在现有的项目中提取你需要制作pod的代码。

    这里使用方法2。

在开始之前,我们先注册下CoocaPods ,pod trunk register ,之后你会收到一份邮件,需要点下里面链接验证。

详细步骤

1 整理代码

随便找一个现有的项目,把里面的一个模块放在同一个文件夹下,我这里放在ShareUI文件夹下面。

iOS组件化实践(基于CocoaPods)

图一 项目目录结构

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.

#

s.author             = { 

"叶同学"

=> 

"[email protected]"

}

# Or just: s.author    = 

"叶同学"

# s.authors            = { 

"叶同学"

=> 

"[email protected]"

}

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

iOS组件化实践(基于CocoaPods)

6 提交到CocoaPods

1

pod trunk push YeshifuShareUI.podspec

Success !

iOS组件化实践(基于CocoaPods)

完毕之后在CocoaPods搜索试试看