组件化开发-002-Cocoapods远程私有库使用(Private Repo)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC" }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 10.0px 0.0px; line-height: 17.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
li.li2 { margin: 0.0px 0.0px 14.0px 0.0px; line-height: 17.0px; font: 14.0px "Yuanti SC"; color: #000000 }
li.li3 { margin: 0.0px 0.0px 14.0px 0.0px; line-height: 17.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }
span.s2 { background-color: #ffffff }
span.s3 { background-color: #ffffff }
ol.ol1 { list-style-type: decimal }

创建一个私有的podspec包括如下那么几个步骤

  1. 创建并设置一个私有的Spec Repo。
  2. 创建Pod的所需要的项目工程文件,并且有可访问的项目版本控制地址。
  3. 创建Pod所对应的podspec文件。
  4. 本地测试配置好的podspec文件是否可用。
  5. 向私有的Spec Repo中提交podspec。
  6. 在个人项目中的Podfile中增加刚刚制作的好的Pod并使用。
  7. 更新维护podspec。

本地私有仓库

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 17.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }

什么是Spec Repo?他是所有的Pods的一个索引,就是一个容器,所有公开的Pods都在这个里面,他实际是一个Git仓库,remote端在GitHub上,当我们使用Cocoapods后它会被clone到本地的~/.cocoapods/repos目录下,可以进入到这个目录看到master文件夹就是这个官方的Spec Repo了。这个master目录的结构是这个样子的。

1.在码云上创建一个私有库

https://gitee.com/Steven_Hu/HKCommonTools.git

2.将私有库添加到本地

pod repo add  REPO_NAME  SOURCE_URL

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000 }
span.s1 { color: #000000 }
span.s2 { background-color: #ffffff }

$pod repo add CommomToolSpec https://gitee.com/Steven_Hu/HKCommonTools.git

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }

Cloning spec repo `CommomToolSpec` from `https://gitee.com/Steven_Hu/HKCommonTools.git`

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }

3.cd 到桌面开始组件化抽取

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }

cd ./Desktop

pod lib create HKCommonTool

Cloning `https://github.com/CocoaPods/pod-template.git` into `HKCommonTool`.
Configuring HKCommonTool template.
! Before you can create a new library we need to setup your git credentials.
 What is your email?
 > 916109796@qq.com
! Setting your email in git to 916109796@qq.com
  git config user.email "[email protected]"
------------------------------
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 ]
 > Yes
What is your class prefix?
 > HK
Running pod install on your new library.
Pod installation complete! There are 2 dependencies from the Podfile and 1 total pods installed.

把要抽取的工具类拖到 Pods ->Development Pods 下的Replace.m 中并替换掉它。

cd 到工程目录下 执行 pod install

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }

4.推送到远程私有库(git远程仓库地址,或者码云等)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }

//关联远程仓库

在 HKCommonTool 工程目录下 执行:

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }

$git remote add origin https://gitee.com/Steven_Hu/HKCommonTools.git

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }

//提交到git仓库

git add .
git commit -m ‘HKCommonTool初始化‘
git push origin master
git push origin master -f //全局提交

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }

5.修改 .podspec 文件并提交

Pod::Spec.new do |s|
  #名称
  s.name             = ‘HKCommonTool‘
  #版本号
  s.version          = ‘0.1.0‘
  #摘要
  s.summary          = ‘HKCommonTool 常用工具类归类‘
  #描述
  s.description      = ‘iOS开发常用的常用宏定义和工具类,网络框架等~‘
  #远程仓库首页链接
  s.homepage         = ‘https://gitee.com/Steven_Hu/HKCommonTools‘
  #截图
  # s.screenshots     = ‘www.example.com/screenshots_1‘, ‘www.example.com/screenshots_2‘
  #许可证
  s.license          = { :type => ‘MIT‘, :file => ‘LICENSE‘ }
  #作者
  s.author           = { ‘HJT916109796‘ => ‘[email protected]‘ }
  #source来源
  s.source           = { :git => ‘https://gitee.com/Steven_Hu/HKCommonTools.git‘, :tag => s.version.to_s }
  #社交链接
  # s.social_media_url = ‘https://twitter.com/<TWITTER_USERNAME>‘
  #开发版本
  s.ios.deployment_target = ‘9.0‘
  #资源文件路径
  s.source_files = ‘HKCommonTool/Classes/**/*‘
  #资源包
  # s.resource_bundles = {
  #   ‘HKCommonTool‘ => [‘HKCommonTool/Assets/*.png‘]
  # }
  # s.public_header_files = ‘Pod/Classes/**/*.h‘
  # s.frameworks = ‘UIKit‘, ‘MapKit‘
  # s.dependency ‘AFNetworking‘, ‘~> 2.3‘
end

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }

校验文件的正确性

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }

$pod lib lint HKCommonTool.podspec

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }

重新提交:

git add .
git commit -m ‘修改podspec文件~‘
git push origin master

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }

设置tag

git tag
git tag ‘0.1.0‘
git push --tags

6.推送本地Spec到远程仓库

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #0433ff; background-color: #ffffff }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #ff2600; background-color: #ffffff }
span.s1 { }

git fetch origin master

git checkout master

git branch --set-upstream-to=origin/master master

Branch ‘master‘ set up to track remote branch ‘master‘ from ‘origin‘.

git pull

pod repo update

pod repo push CommomToolSpec HKCommonTool.podspec

git push

git pull

git push origin master

7.如何使用:

编辑Podfile文件如下

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #ff2600; background-color: #ffffff }
span.s1 { color: #000000 }

编辑Podfile 必须加  git => ‘https://gitee.com/Steven_Hu/HKCommonTools.git‘

platform :ios, ‘9.0‘
use_frameworks!

target ‘HKTools‘ do

  pod ‘XCDemo‘  ,:git => ‘https://gitee.com/Steven_Hu/XCTool.git‘
  pod ‘HKCommonTool‘  ,:git => ‘https://gitee.com/Steven_Hu/HKCommonTools.git‘
#  pod ‘HKTools‘, :path => ‘./Lib/HKTools‘
#  pod ‘HKTools‘, :podspec => ‘~/.cocoapods/repos/HKTools/HKTools.podspec‘
end

8.其他常用命令:

删除本地私有库

$ pod repo remove hktools

Removing spec repo `gitee-steven_hu-hktools`

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC" }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 18.0px; font: 14.0px "Yuanti SC"; color: #afad24; background-color: #ffffff }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
span.s1 { color: #000000 }
span.s2 { }

原文地址:https://www.cnblogs.com/StevenHuSir/p/ComponentBased_PrivateRepo.html

时间: 2024-11-05 22:41:47

组件化开发-002-Cocoapods远程私有库使用(Private Repo)的相关文章

组件化开发-001-本地私有库抽取和远程私有库创建

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "Yuanti SC" } 1  组件化:组件化最大目的是为了降低功能.项目与项目组件之间很强的依赖,降低耦合度,抽取时优先抽取基础组件,全局属性,封装的AFN等. 2 组件化优缺点: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "Yuanti SC" } p.p2 { margin: 0.0px 0

组件化开发的一些思考

看了limboy和Casa的文章,关于组件化开发,整理了一下思路. 1.为什么要进行组件化开发? 一个产品,在最开始的时候,由于业务简单,一般是直接在一个工程里开发.这种方式,在产品起步阶段,是没有问题的,也能够有效的保证开发效率.但随着业务的不断发展,代码量不断增多,开发团队不断壮大,最后的模块间关系会发展成如下图所示: 从上图中可以看到,这种单一工程开发模式存在一些弊端: 模块间耦合严重(模块是指较大粒度的业务功能.比如说微信,我们根据首页Tab,可以分为四大模块:会话.通讯录.发现.我).

【组件化开发】前端进阶篇之如何编写可维护可升级的代码

前言 我还在携程的做业务的时候,每个看似简单的移动页面背后往往会隐藏5个以上的数据请求,其中最过复杂的当属机票与酒店的订单填写业务代码 这里先看看比较“简单”的机票代码: 然后看看稍微复杂的酒店业务逻辑: 机票一个页面的代码量达到了5000行代码,而酒店的代码竟然超过了8000行,这里还不包括模板(html)文件!!! 然后初略看了机票的代码,就该页面可能发生的接口请求有19个之多!!!而酒店的的交互DOM事件基本多到了令人发指的地步: 当然,机票团队的交互DOM事件已经多到了我笔记本不能截图了

Webpack+Vue+ES6 前端组件化开发mobile-multi-page应用实战总结

本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws 一.写在前面 项目上线有一段时间了,一个基于webpack+vue+ES6的手机端多页面应用.其实说是多页面应用,实际上在webpack中属于四个app,  如果真是做纯单页面,那应该有二三十个页面吧.所以我这里的多页面应用,是分为四个SPA.比如微信最下面,有四个导航,微信,通讯录,发现,我. 那么这四个导航,就是我的四个SPA,配置多个入口即可. 在这里就不说太多代码了,项目结构将会放

Android 业务组件化开发实践

组件化并不是新话题,其实很早很早以前我们开始为项目解耦的时候就讨论过的.但那时候我们说的是功能组件化.比如很多公司都常见的,网络请求模块.登录注册模块单独拿出来,交给一个团队开发,而在用的时候只需要接入对应模块的功能就可以了. 百牛信息技术bainiu.ltd整理发布于博客园 今天我们来讨论一下业务组件化,拿出手机,打开淘宝或者大众点评来看看,里面的美食电影酒店外卖就是一个一个的业务.如果我们在一个项目里面去写的时候,总会出现或多或少的代码耦合,最典型的有时为了赶上线时间而先复制粘贴一段类似的代

Android组件化开发实践

Android项目中代码量达到一定程度,编译将是一件非常痛苦的事情,短则一两分钟,长则达到五六分钟.Android studio推出instant run由于各种缺陷一般情况下是被关闭的--组件化开发可以有效降低代码模块的耦合度,使代码架构更加清晰,同时模块化的编译可以有效减少编译时间,当然总的编译时间是不会减少的,只是App模块化之后开发某个模块时,只需要编译特定模块,可以快速编译调试. 百牛信息技术bainiu.ltd整理发布于博客园 原理 组件化和插件化有些同学有些迷惑,简单来说组件化是在

Android组件化开发的简单应用

组件化开发的主要步骤: 一.新建Modules 1.新建Project,作为应用的主Module. 2.新建Module:"Common",类型选择"Android Library",作为所有其它Module的基础依赖库. 3.新建Module:"Home",类型选择"Android Library",依赖"Common". 4.新建Module:"Project",类型选择"

Android项目模块化/组件化开发(非原创)

文章大纲 一.项目模块化初步介绍二.项目模块化的两种模式与比较三.大型项目模块化的演进四.项目模块化总结五.参考文章 一.项目模块化初步介绍 1. 前言 在Android开发中,随着项目的不断扩展,项目会变得越来越庞大,而随之带来的便是项目维护成本与开发成本的增加!每次调试时,不得不运行整个项目:每当有新成员加入团队时,需要更多的时间去了解庞大的项目...而为了解决这些问题,团队通常会将项目模块化,以此来降低项目的复杂度和耦合度,让团队可以并行开发与测试,让团队成员更加专注于自己所负责的功能模块

Android适合组件化开发的路由框架:Launch

1.概述 最近越来越不想写代码了,特别是一些重复性的代码,比如由于每次启动一个 Activity,我们都会很习惯的在 Activity 中写下: public static void launch(Activity activity) { Intent intent = new Intent(); intent.setClass(activity, xxxActivity.class); activity.startActivity(); } 已经有两年Android开发经验的我掐指一算,好像有