随着应用需求逐步迭代,应用的代码体积将会越来越大,为了更好的管理应用工程,我们开始借助CocoaPods版本管理工具对原有应用工程进行拆分。但是仅仅完成代码拆分还不足以解决业务之间的代码耦合,为了更好的让拆分出去的业务工程能够独立运行,必须进行组件拆分并且实现组件服务化。

  组件化开发优点:

    1.组件和组件之间没有明确的约束。

    2.组件单独开发、单独测试,不能揉入主项目中开发,测试也可以针对性的测试。

  组件主要分为三类:

    基础功能组件:

    基础 UI 组件:

    产品业务组件:

  使用 CocoaPods 制作私有库实现过程:

  1、创建索引库:

    可使用 GitHub、Gitlab、Gitee、等,以 GitHub 为例:

    

  2、将创建的索引库添加到本地 Cocoapods 仓库中:

    pod repo add UCKit https://github.com/zhangtibin/UCKit.git

    

    路径是:~/.cocoapods/repos

  3、创建模板:

    pod lib create UCKit

  

  按提示输入选择后,创建完成,会自动打开 Xcode 工程:

  

  

  在 Classes 目录下,放入需要添加组件的文件:

  

  进入 Example 目录下,执行:pod install。

   

  4、**.podspec 文件中更改模板文件相关信息:

  

  5、验证 .podspec 文件:

    pod lib lint UCKit.podspec --allow-warning     

  6、将制作好的组件上传至 GitHub

    git remote add origin https://github.com/zhangtibin/UCKit.git

    git push -u origin master

   如果出现报错时,如下,可以采用修改冲突文件,并提交至 GitHub

  

  

  提交完之后

  

  7、使用:

    pod 'UCKit' , :git =>'https://github.com/zhangtibin/UCKit.git'

  在执行:pod lib lint UCKit.podspec --allow-warning

  出现错误:- ERROR | [iOS] unknown: Encountered an unknown error (/usr/bin/xcrun simctl list -j devices

  

  xcode设置里面,将Command line Tools设置一下,在Xcode>preferences>Locations里面,设置之后再运行终端即可。

  

  解决后,当出现 ** passed validation表示验证成功:

  

  执行:git push -u origin master

  报错:

! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/zhangtibin/UCKit.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

  原因:远程repository和我本地的repository冲突导致的,而我在创建版本库后,在github的版本库页面点击了创建README.md文件的按钮创建了说明文档,但是却没有pull到本地。这样就产生了版本冲突的问题。

  解决方案:push前先将远程repository修改pull下来。   

  $ git pull origin master

  $ git push -u origin master

  推送之后,就会在 GitHub 上看到新提交的

  






iOS 组件化开发之使用CocoaPod制作自己的远程私有库的更多相关文章

  1. iOS组件化开发入门 —— 提交自己的私有库

    前言:本人也是初次接触组件化开发,感觉现有的资料太繁杂,就简单整理了一下,在此跟大家分享一些入手的经验,主要就是描述cocoapods的私有库封装和提交.组件化开发是个大的议题,涉及到架构思路.设计模 ...

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

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

  3. iOS组件化开发· 什么是组件化

    越来越多公司,开始了组件化,你还要等到什么时候...... 说到开发模式,我们最熟知的开发模式 MVC 或者最近比较热门的MVVM.但是我今天说的组件化的开发,其实MVC不是一类的.它其实是····· ...

  4. iOS组件化开发一本地环境配置(一)

    首先我们要使用pod支持组件化开发 解决CocoaPods慢的方案(gem和pod repo换源) gem换源 $ gem sources --remove https://rubygems.org/ ...

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

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

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

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

  7. iOS组件化开发一使用source管理远端库升级(四)

    一.克隆远端库代码到本地选择master分支 1.克隆 2.代码会显示出你所有版本的tag 二.可以在Example目录下验证代码的正确行: cd 到库的文件夹然后 pod install comma ...

  8. iOS组件化开发-发布私有库

    远程索引库 将远程索引库添关联到本地 pod repo 查看本地已关联仓库源 pod repo add 本地索引库名称 远程索引库仓库地址 pod repo update 索引库名称 pod repo ...

  9. iOS组件化开发一pod库包含MRC的文件处理(五)

    在做项目的过程中,建立了一个私有pod库,在这个库中存在mrc类文件这个时候如果在使用了arc的工程中引用这个pod的工程中手动设置当然也可以就是费时费力.现在我们来看看如何在私有库配置文件里配置自动 ...

随机推荐

  1. Selenium3+python自动化009- 截图

    一.断言 assert cur_title=='百度一下,你就知道1','title断言失败' 'title断言失败':自定义报错 二.截图 # 调用截屏方法(路径+截图名称)driver.get_s ...

  2. 关于List比较好玩的操作

    作为Java大家庭中的集合类框架,List应该是平时开发中最常用的,可能有这种需求,当集合中的某些元素符合一定条件时,想要删除这个元素.如: public class ListTest { publi ...

  3. vue使用kkfileview文件预览功能

    1.环境要求: java 1.8+ 2.部署运行: 本机以及虚拟机上运行: 1.从https://gitee.com/kekingcn/file-online-preview/releases地址下载 ...

  4. linux添加新的环境变量

    Linux下设置PYTHONPATH环境变量有三种方法:一种作用于当前终端,一种作用于当前用户,一种作用于所有用户. 1.作用于当前终端,直接当前终端输入命令 $ export PYTHONPATH= ...

  5. 【Node】Webpack调试启动

    "start": "webpack-dev-server --port 33333 --content-base ./dist",

  6. Java中new一个子类对象的同时并不会自动创建一个父类对象

    首先重申一个概念:子类会继承父类所有非私有成员变量和方法,包括父类的构造方法 当创建一个子类对象时,首先开辟内存,然后调用类的构造函数,这里的构造函数由两部分组成,一部分是从父类继承而来的父类的构造方 ...

  7. java-日期取特定值

    import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * @author G ...

  8. SSM项目中的.tld文件是什么,有什么作用?怎么自定义tld文件

    原文链接:https://www.cnblogs.com/guaishoubiubiu/p/8721277.html TLD术语解释:标签库描述文件,如要在JSP页面中使用自定义JSP标签,必须首先定 ...

  9. codeforces 1284B. New Year and Ascent Sequence(二分)

    B. New Year and Ascent Sequence 题意:定义上升序列Ascent,在一组序列A中,存在1<i<j<n,使得Ai<Aj.现在给定n个序列,求n个序列 ...

  10. 数据库 concat 与 ||

    mysql中用concat,oracle中concat和||都有,都是做字符串拼接的 oracle简单实例: 1.建表 CREATE TABLE tab1 (col1 VARCHAR2(6), col ...