如果项目模块多,模块间逻辑复杂,我们发现多个人同时维护一个代码仓库需要十分小心,一不小心,造成冲突,解决起来很烦,相信很多人都遇到手工删除合并的冲突的文件的经历。

如果利用组件化思想,每个人维护自己的模块对应的代码库,将会大大降低冲突的风险,而且组件化能够很好的给工程解耦。

组件化的第一步就是创建自己的仓库,公司的话需要搭建并维护私有库。

1、查看本地索引库

我们用cocoaPods 的时候,默认使用的是cocoaPods自带的索引库

终端中使用命令

$ pod repo

查看有哪些索引库,这里的master 是cocoaPods 自己的索引库,JWSpecs是我自建的,下一步我们看一下如果和创建索引库

wjwdeMacBook-Pro:repos wjw$ pod repo

JWSpecs
- Type: git (master)
- URL: https://gitee.com/wjwdive/JWSpecs.git
- Path: /Users/wjw/.cocoapods/repos/JWSpecs master
- Type: git (master)
- URL: https://github.com/CocoaPods/Specs.git
- Path: /Users/wjw/.cocoapods/repos/master 2 repos

也可以 $ cd ~/.cocoaPods/specs

$list 看看有哪些库

2、创建远程索引库

我们选择国内的码云,当然你也可以使用github 或 coding

1、输入仓库名称

2、简单的描述一下仓库用途

3、根据需要选择共有还是私有

4、选择初始化一个 REMDME

5、根据需要,选择语言和开原协议

6、创建成功之后,复制出仓库地址

3、创建本地索引库

终端命令查看本地索引库,同第一步

1、创建本地索引库,

$pod repo add <本地索引库名字> <远程索引库地址>, 索引库名字最好和刚才在码云上创建的一致,远程索引库地址就是上一步 的第6小步拷贝的仓库地址

2、创建成功之后,用第一步的方法查看验证是否创建成功

4、创建远程代码库

远程代码库就是将来用来管理某一个组件的代码仓库。要注意区分和索引库的区别

我们用和创建索引库基本想通的步骤创建一个代码库

1、输入仓库名称

2、简单的描述一下仓库用途

3、根据需要选择共有还是私有

4、不用选择初始化一个README,因为一会通过命令方式生成代码模板时会生成README文件和忽略文件,这里不再勾选了

5、根据需要,选择语言和开原协议

6、创建成功之后,复制出仓库地址

5、本地代码库

这里就是对应的要开发的某个组价的本地代码库

1、选择一个合适的目录,进入终端,通过以下命令创建组件模板库,组件名建议和远程仓库一致

$pod lib create <组件名>

wjwdeMacBook-Pro:iOSCom wjw$ pod lib create JWCategory
Cloning `https://github.com/CocoaPods/pod-template.git` into `JWCategory`.
Configuring JWCategory template. ------------------------------ To get you started we need to ask a few questions, this should only take a minute. If this is your first time we recommend running through with the guide:
- https://guides.cocoapods.org/making/using-pod-lib-create.html
( hold cmd and double click links to open in a browser. ) What platform do you want to use?? [ iOS / macOS ]
> iOS What language do you want to use?? [ Swift / ObjC ]
> ObjC Would you like to include a demo application with your library? [ Yes / No ]
> Yes Which testing frameworks will you use? [ Specta / Kiwi / None ]
>None Would you like to do view based testing? [ Yes / No ]
> No What is your class prefix?
> JW Running pod install on your new library. Analyzing dependencies
Fetching podspec for `JWCategory` from `../`
Downloading dependencies
Installing JWCategory (0.1.0)
Generating Pods project
Integrating client project [!] Please close any current Xcode sessions and use `JWCategory.xcworkspace` for this project from now on.
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed. Ace! you're ready to go!
We will start you off by opening your project in Xcode
open 'JWCategory/Example/JWCategory.xcworkspace' To learn more about the template see `https://github.com/CocoaPods/pod-template.git`.
To learn more about creating a new pod, see `http://guides.cocoapods.org/making/making-a-cocoapod`.

按照提示

选择使用平台

选语言 swift/OC

选择是否生成一个demo

选择测试框架 Specta/Kiwi/None

选择是否做基于View的测试

确定一个文件前缀

2、成功之后 会自动打工程,我们编译一下,成功之后

我们用finder打开工程目录,进入 JWCategory -> Classes ->

把自己的组件代码拷贝一份过来,并删除 ReplaceMe.m

3、cd 到 Example目录下, pod install 一下,把刚才拖入到 classes 里的文件pod进来。因为podfile里面默认会导入classes里的文件。

use_frameworks!

platform :ios, '8.0'

target 'JWCategory_Example' do
pod 'JWCategory', :path => '../' target 'JWCategory_Tests' do
inherit! :search_paths end
end

4、编译一下组件,看是否报错

没有错的话,在工程的

Podspec Metadata目录下 修改 JWCategory.podspec 文件里面几个重要的配置项

\#概述
s.summary = 'JWCategory, some category'
\#详细描述
s.description = <<-DESC
some category for use, you can use view.jw_x as view.frame.origin.x
DESC
\#主页 组件的远程仓库对应的URL
s.homepage = 'https://gitee.com/wjwdive/JWCategory'
\#源 就是组件的远程仓库地址
s.source = { :git => 'https://gitee.com/wjwdive/JWCategory.git', :tag => s.version.to_s } \# 根据需要 添加依赖
# s.dependency 'AFNetworking', '~> 2.3'

5、编译运行一下,通过后,证明没有问题,就可以提交代码,并 打tag

$git add .

$git commit -m 'init com'

$git remote add origin <远程代码块地址>

$git push origin master 或者 git push -u origin master(第一次提交用)

$git tag <版本号> / git tag -a 版本号 -m "version 版本号" 这里的版本号必须和 podspec文件里的一致

$git tag 验证版本号是否提交成功

$git push --tags

6 、通过pod spec lint --allow-warnings 命令验证podspec索引文件(pod lib lint 是检索本地文件,pod spec lint 是本地和远程库提示检索)

wjwdeMacBook-Pro:JWCategory wjw$ pod spec lint --allow-warnings

 -> JWCategory (0.1.0)
- NOTE | xcodebuild: note: Using new build system
- NOTE | [iOS] xcodebuild: note: Planning build
- NOTE | [iOS] xcodebuild: note: Constructing build description
- NOTE | [iOS] xcodebuild: warning: Skipping code signing because the target does not have an Info.plist file. (in target 'App') Analyzed 1 podspec. JWCategory.podspec passed validation.

7、验证通过之后,pod repo push <本地索引库> <索引文件名> --allow-warnings 提交索引文件到远程索引库

Pushing the `JWSpecs' repo

  $ /usr/bin/git -C /Users/wjw/.cocoapods/repos/JWSpecs -C
/Users/wjw/.cocoapods/repos/JWSpecs push origin master
remote: Powered By Gitee.com
To https://gitee.com/wjwdive/JWSpecs.git
806c622..9b0dc93 master -> master

6、如何使用

新建一个工程

在Podfile 文件里做引用,然后pod install即可,不要忘记把 自己的索引库 添加到source 配置项里

source 'https://gitee.com/wjwdive/JWSpecs.git'
source 'git@github.com:CocoaPods/Specs.git' platform :ios, '8.0' target:'ComponentsProject' do pod 'AFNetworking', '~> 3.1.0'
pod 'Masonry', '~>1.1.0'
pod 'MBProgressHUD', '1.1.0'
pod 'YYCache', '~> 1.0.4'
pod 'YYModel', '~> 1.0.4'
pod 'IQKeyboardManager'
pod 'BaiduMapKit', '~> 4.2.0'
pod 'BMKLocationKit'
pod 'MMDrawerController', '~> 0.6.0'
pod 'MLeaksFinder'
pod 'SDWebImage', '~> 4.3.3'
pod 'FBRetainCycleDetector', '~> 0.1.4'
pod 'FMDB', '~> 2.7.2'
pod 'MJRefresh', '~> 3.1.15.3'
pod 'FHHFPSIndicator'
pod 'CocoaLumberjack', '~> 3.4.2'
pod 'SAMKeychain', '~> 1.5.3'
pod 'WeexSDK', '0.20.1'
pod 'JWCategory', '0.1.0'
end

7、遇到的错误

xcrun unable to find simctl, Xcode 的命令行配置问题,配置一下就可以Xcode-> ,+command -> location ->command line tools 选中一下即可。

xcrun unable to find simctl

iOS代码组件化--利用cocoaPods创建私有库的更多相关文章

  1. iOS组件化开发一远程私有库的升级(三)

    一.远程私有库的升级 1. 把新增的类 拖入到 classes 文件夹中 : 2. 修改 pod.spec 文件的 s.verson = ‘0.2.0': 二.更新远程仓库 1.cd 到本地仓库的位置 ...

  2. iOS组件化开发一远端私有库建立(二)

    公共库业务,基础层划分! 一.构建私有云,本文推荐为码云 1.构建名称为LuckTimeSpec,选择私有建立: 2.Copy地址的https 链接: 二.打开终端 输入: cd /Users/zha ...

  3. 利用Cocoapods、SVN 创建私有库实现方案(yoowei)

    由于项目年后要进行组件化,考虑到如果公司内部实现一些私有的组件,不对外公开,而又想在不同项目中使用,该怎么办呢? 使用Cocoapods制作私有库就完美的解决了这个问题.下图就是使用私有库带给我们的好 ...

  4. 利用Cocoapods创建基于SVN的私有库podspec

    由于项目年后要进行组件化,考虑到公司内部实现的一些私有组件,不对外公开,而又想在不同项目中使用,该怎么办呢?由于cocoapods有了强大的功能,可以自己创建podspec,更可以设置私有的库.那么利 ...

  5. 利用cocoapods创建基于git的私有库

    上一篇文章记录了我利用cocoapods创建基于SVN的私有库的全部过程,今天我再记录一下基于git创建的过程. 整体先说明一下创建一个私有的podspec包括如下那么几个步骤: 创建并设置一个私有的 ...

  6. 利用cocoapods创建基于git的私有库Spec Repo

    上一篇文章记录了我利用cocoapods创建基于SVN的私有库的全部过程,今天我再记录一下基于git创建的过程. 整体先说明一下创建一个私有的podspec包括如下那么几个步骤: 创建并设置一个私有的 ...

  7. iOS组件化开发-CocoaPods简介

    CocoaPods简介 任何一门开发语言到达一定阶段就会出现第三方的类库管理工具,比如Java的Maven.WEB的Webpack等.在iOS中类库的管理工具-CocoaPods. 利用CocoaPo ...

  8. 大话大前端时代(一) —— Vue 与 iOS 的组件化

    序 今年大前端的概念一而再再而三的被提及,那么大前端时代究竟是什么呢?大前端这个词最早是因为在阿里内部有很多前端开发人员既写前端又写 Java 的 Velocity 模板而得来,不过现在大前端的范围已 ...

  9. CocoaPods 创建私有仓库

    这里有个坑首先需要注意,创建私有cocoapods仓库需要两个git仓库,即代码仓库,Specs文件仓库. 一.创建私有库 1.创建自己源码仓库,假设是A.git; 2.对A仓库: git add . ...

随机推荐

  1. rest_framework框架的认识

    它是基于Django的,帮助我们快速开发符合RESTful规范的接口框架. 一  路由 可以通过路由as_view()传参 根据请求方式的不同执行对应不同的方法 在routers模块下 封装了很多关于 ...

  2. CF1139E Maximize Mex

    题目地址:CF1139E Maximize Mex 这其实是一个二分图匹配匈牙利算法的巧妙运用 考虑倒序回答 则由原来的删除改为添加 把 potential 值作为左部,则一共有编号为 \(0~m\) ...

  3. vcenter新建虚拟机centos7作为虚拟机模板

    网卡选项 适配器类型算则E1000 Remote console选项 电源选项 加密 打开电源,连接iso安装系统 按一下tab键,修改网卡为eth0 点击Tab,打开kernel启动选项后,增加ne ...

  4. 根据SQL_ID查询并杀会话

    Oracle 根据SQL_ID查询并杀会话,清空执行计划缓冲池2018年09月06日 10:31:40 小学生汤米 阅读数:4731. 查询最近五分钟内最高频次SQL,查看event select t ...

  5. JavaScript入门学习笔记(JSON)

    JSON是JavaScript Object Notation的简称,是一种轻量级的数据交换格式. JSON使用JS的语法,但其格式只是一个文本,可以被任何编程语言读取病作为数据格式传递. JSON以 ...

  6. 微信支付的安全漏洞之XXE

    1.场景:国外安全社区公布微信支付官方SDK存在严重漏洞,可导致商家服务器被入侵(绕过支付的效果).目前,漏洞详细信息以及攻击方式已被公开,影响范围巨大(已确认陌陌.vivo因使用该SDK而存在该漏洞 ...

  7. Java基础之中间件的初识

    java常用的中间件 一般本地开发的话建议使用tomcat.(小项目,或者是个人开发) linux系统建议使用jetty或apache hpptd 大型的项目或者商业项目就用JBOSS或webloig ...

  8. mac os app 开发

    macOS 新手开发:第 1 部分 macOS 新手开发:第 2 部分 macOS 新手开发:第 3 部分

  9. Java Web项目漏洞:检测到目标URL存在http host头攻击漏洞解决办法

    检测到目标URL存在http host头攻击漏洞 详细描述 为了方便的获得网站域名,开发人员一般依赖于HTTP Host header.例如,在php里用_SERVER["HTTP_HOST ...

  10. JSONP ---------跨域

    什么是跨域 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦.这里把涉及到跨域的一些问题简单地整理一下: 首 ...