cocoa组件化开发
[转载:http://www.cocoachina.com/ios/20171120/21234.html](http://www.cocoachina.com/ios/20171120/21234.html)
![image](//upload-images.jianshu.io/upload_images/3094887-9657f877b3986bab.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
> 做iOS开发的同学对这张图片再熟悉不过了,在使用第三库的时候,cocoapods确实给我们带来了极大的方便。那么,我们如何制作自己的pod呢?下面是之前的实践笔记
[参考资料 https://guides.cocoapods.org/](https://guides.cocoapods.org/)
[ShareUIDemo 链接](https://link.jianshu.com/?t=https://github.com/shiyeli/ShareUIDemo)
Demo中的组件式样:
![image](//upload-images.jianshu.io/upload_images/3094887-425680bf62686650.gif?imageMogr2/auto-orient/strip)
cocoapods文档提供了两种方法:
方法1 pod lib create YeshifuShareUI
方法2 pod spec create YeshifuShareUI
两种方法之前都尝试过,方法一会帮助你创建一大堆的文件,包括演示demo创建;方法二方便你在现有的项目中提取你需要制作pod的代码。
这里使用方法2。
详细步骤
1 整理代码
随便找一个现有的项目,把里面的一个模块放在同一个文件夹下,我这里放在ShareUI文件夹下面。
![image](//upload-images.jianshu.io/upload_images/3094887-8af3b6c0fb00cc44.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
图一 项目目录结构
2 创建 YeshifuShareUI.podspec文件
在终端cd 到ShareUIDemo (如图一所示),执行
`pod spec create YeshifuShareUI` ,得到文件YeshifuShareUI.podspec
3 编辑 YeshifuShareUI.podspec
```
#
# 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 = { "叶同学" => "yeli.studio@qq.com" }
# Or just: s.author = "叶同学"
# s.authors = { "叶同学" => "yeli.studio@qq.com" }
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远程仓库
依次执行:
git add . && git commit -m'配置podspec'
git tag 0.0.5 && git push --tags
5 验证YeshifuShareUI.podspec 是否正确
pod lib lint
![image](//upload-images.jianshu.io/upload_images/3094887-05a02f3d0e8b1235.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
6 注册下CoocaPods ,终端执行`pod trunk register ymnlwyy@sina.com wandou`,之后你会收到一份邮件,点击邮件里面链接验证。
7 提交到CocoaPods
pod trunk push YeshifuShareUI.podspec
Success !
![image](//upload-images.jianshu.io/upload_images/3094887-f9e1c11be1675d09.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
完毕之后在CocoaPods搜索试试看
补充
遇到的问题:
* Could not find remote branch 0.0.1 to clone
```
warning: Could not find remote branch 0.0.1 to clone.
fatal: Remote branch 0.0.1 not found in upstream origin
```
Cocoapods 版本要求1.0.0 +
注册之后修改用户名:
grep -A2 'trunk.cocoapods.org' ~/.netrc
curl -v -H "Acdef6f817a3e4" -H "Content-Type: application/json" -X POST -d '{"email":"422013052@qq.com","name”:"newname","description":"iMac"}' https://trunk.cocoapods.org/api/v1/sessions
我的博客 http://yeli.studio
[参考链接:http://www.jianshu.com/p/7e82f4f56b7e](http://www.jianshu.com/p/7e82f4f56b7e)
最新文章
- SignalR代理对象异常:Uncaught TypeError: Cannot read property &#39;client&#39; of undefined 推出的结论
- mysql常用函数
- C# 零散知识 扩展方法 类型约束
- springMVC spring hibernate pom.xml备份
- Android 控制ScrollView滚动到底部
- Ubuntu上搭建DokuWiki
- HDU1849 Rabbit and Grass()
- 【Centos7 GRUB】修改开机等待时间
- JQuery判断是否为空
- PHP多进程消费队列
- ByteView和Sink
- Java自定义异常类以及异常拦截器
- 数据库between and
- 修复恢复";可疑";的SQLServer数据库
- java元注解 @Retention注解使用
- 小程序之根据参数更改title
- windows2008 使用nginx 反向代理实现负载均衡解决HTTPS 证书问题
- centos7 mysql的安装
- struts2 jsp提交对象数据要这么干
- 【XPath Helper:chrome爬虫网页解析工具 Chrome插件】XPath Helper:chrome爬虫网页解析工具 Chrome插件下载_教程_安装 - 开发者插件 - Chrome插件网
热门文章
- Pycharm 字体大小调整
- 实现开发板与ubuntu的共享--根文件系统NFS--Samba共享【sky原创】
- mysql系列六、mysql创建用户、授权、备份及恢复命令
- 『转载』hadoop 1.X到2.X的变化
- centos 6.5环境利用iscsi搭建SAN网络存储服务及服务端target和客户端initiator配置详解
- 解决Android SDK下载和更新失败问题
- MonkeyRunner之MonkeyRecorder录制回放脚本(亲测可正常运行)
- PYTHON-模块定义 搜索路径
- OCM_第十五天课程:Section6 &mdash;》数据库性能调优 _SQL 访问建议 /SQL 性能分析器/配置基线模板/SQL 执行计划管理/实例限制
- 并行(多进程)-python