iOS代码组件化--利用cocoaPods创建私有库

如果项目模块多,模块间逻辑复杂,我们发现多个人同时维护一个代码仓库需要十分小心,一不小心,造成冲突,解决起来很烦,相信很多人都遇到手工删除合并的冲突的文件的经历。
如果利用组件化思想,每个人维护自己的模块对应的代码库,将会大大降低冲突的风险,而且组件化能够很好的给工程解耦。
组件化的第一步就是创建自己的仓库,公司的话需要搭建并维护私有库。

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 <组件名> ```bash 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 '[email protected]: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

原文地址:https://www.cnblogs.com/wjw-blog/p/10753736.html

时间: 2024-11-05 20:28:35

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

组件化开发-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

组件化开发-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-

docker学习笔记(二)——创建私有库

本篇将介绍在docker在linux上创建私有库. 目录: 1.介绍 2.创建docker私有库 3.测试 4.参考资料 1.介绍 docker默认使用docker提供的公共库,在某些场合下,需要建立私有仓库来管理镜像.这里我们使用Docker Registry v2.0来管理docker镜像仓库. github地址:https://github.com/docker/distribution 2.创建docker私有库 启动Registry: $ docker run -d -p 5000:5

iOS 使用CocoaPods管理私有库的公共组件

最近要使用私有公共组件,故,有了如下的故事. 参考地址: http://www.cocoachina.com/ios/20150228/11206.html 本文使用 https://coding.net 作为Git私有库地址.步骤如下: 1. 创建一个私有的Git 仓库.(例如:SKPodsStart,创建后地址:https://git.coding.net/LeouCC/SKPodsStart.git 2. 添加一个私有Spec Repo到本地,终端命令如下:pod repo add [Sp

使用Cocoapods创建私有podspec

Cocoapods是非常好用的一个iOS依赖管理工具,使用它可以方便的管理和更新项目中所使用到的第三方库,以及将自己的项目中的公共组件交由它去管理.Cocoapods的介绍及优点本文就不在赘述,我开始使用Cocoapods还是在两年前,那个时候它刚刚出现,网上的资料还非常的少,就连他们自己的HomePage都十分的简单,我就着手尝试着使用了一下,用它管理起第三方库确实是十分的方便顺手.后来它有了更强大的功能就是自己创建podspec,更可以设置私有的库. 春节回来上班,没有什么任务做,正好项目中

iOS架构组件化

前言 本文简书地址:http://www.jianshu.com/p/2d89f55fc2c4 当一个App只有几个人开发的时候,很容易就会在一个单项目中开发.但当App开发人数越来越多,甚至几百人,十几个不同BU都在协调开发同一个App的时候,就必须对架构进行组件化,才能方便开发.本文主要基于手机淘宝的一次架构探索:手机淘宝客户端架构探索实践,基于此文进行的一些学习和探索,写一篇文章给自己梳理一下. 组件化的目的 首先,第一个问题,为何需要组件化? 如果依旧是单工程项目,或者是多工程引入同一个

OpenSSH的应用和利用OpenSSL创建私有CA签证给httpd服务器开https

https http over ssl = https 443/tcp                ssl: v3                tls: v1 https:// SSL会话的简化过程                (1) 客户端发送可供选择的加密方式,并向服务器请求证书:                (2) 服务器端发送证书以及选定的加密方式给客户端:                (3) 客户端取得证书并进行证书验正:                    如果信任给其发

CocoaPods创建私有pods

由于项目需求,需要把项目的不同模块拆分出来,一开始想做成多target模式,后来换成私有pods CocoaPods的安装和使用,网上很多,自行搜索即可. 听说可以基于svn创建pod私有库(文章点这里),但我断断续续的折腾了两三天没成功,实在不想搞了,只能老老实实搞git的.有谁弄成功了希望不吝赐教. cd到需要做库的工程目录下 创建一个podspec文件pod spec create podName (如:pod spec create testPods,会在当前目录生成 testPods.

OpenSSH的应用和利用OpenSSL创建私有CA签证给httpd服务器开起https

一.OpenSSH OpenSSH与SSH协议是远程登录的首选连接工具.它加密所有流量,以消除窃听,连接劫持和其它攻击.OpenSSH常常被误认以为与OpenSSL有关系,但实际上这两个项目的有不同的目的,不同的发展团队,名称相近只是因为两者有同样的软件发展目标──提供开放源代码的加密通讯软件. OpenSSH的套件包括以下工具: 远程操作使用 SSH, SCP,和 SFTP. 密钥管理 ssh-add, ssh-keysign, ssh-keyscan和ssh-keygen 服务端组成 ssh