创建一个ios组件供其他ios工程使用

有3种方式

方式1:创建一个ios组件给本地其他工程使用(引入该组件的代码或者修改该组件的代码)

  1. 创建一个存储源码的文件夹,然后在该文件夹下添加一些OC文件(本例以创建Person.h和Person.m文件为例),然后创建一个podspec文件(本例创建的是weiboaa.podspec文件。你可以通过执行touch weiboaa.podspec来创建weiboaa.podspec文件,也可以通过执行 pod spec create weiboaa.podspec来创建一个weiboaa.podspec文件。两种创建方式的区别是:通过touch创建出来的文件是空的,而通过pod spec create 创建出来的文件里面就自动包含了一些基本信息)。
    创建一个ios组件供其他ios工程使用_第1张图片
  2. Person.h和Person.m文件的内容如下:
//---------Person.h文件的内容-------
#import 
@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) int age;
@end


//---------Person.m文件的内容-------
#import "Person.h"
@implementation Person
@end
  1. weiboaa.podspec文件的内容如下
Pod::Spec.new do |spec|

  spec.name         = "weiboaa" //组件的名字
  spec.version      = "1.0" //组件的版本
  spec.summary      = "A short description of weiboaa."
  spec.description  = <<-DESC
                    我的组件(一个podspec文件 和 一个保存了”一些.h和.m文件“的文件夹即可)
                   DESC
  spec.homepage     = "http://EXAMPLE/weiboaa" //组件的介绍网站,随便写
  spec.license      = { :type => "MIT", :file => "FILE_LICENSE" }
  spec.author             = { "仕兴" => "邮箱" } //作者信息
  spec.source       = { :git => "该组件的git地址", :tag => "#{spec.version}" } //组件源码的地址以及tag,说白了就是通过git来拉取该tag版本下的组件源码
  spec.source_files  = "Classes2/**/*.{h,m}" //组件的源码的所在目录。Classes2 指的是和该weiboaa.podspec文件同级的一个目录
end

  1. 通过xcode创建一个普通的ios工程,假设工程名为MyPro
    创建一个ios组件供其他ios工程使用_第2张图片
    然后在MyPro目录下执行pod init,如下图,该目录就会多一个Podfile文件。

    在Podfile文件里面添加weiboaa组件的地址,然后执行pod install,如下图。

    打开MyPro工程(双击MyPro.xcworkspace文件),然后在MyPro里面使用weiboaa组件里面的Person类。

方式2:创建一个ios组件,上传到自己创建的Spec repo仓库,然后在本地其他工程使用该组件(引入该组件的代码)

概念说明:

- pod:组件。比如上文中的weiboaa组件。
- podspec:就是一个组件的说明书,具体指的是 名为”组件名.podspec“的文件,该文件里面说明了组件的git地址、源码、资源(比如图片)具体在哪个目录下等信息。
- Spec repo仓库(在官网https://guides.cocoapods.org/making/private-cocoapods中也可以称为pods),说白了就是一个 包含了各种组件的索引的 集合。这里的索引就是组件的podspec文件!所以Spec repo仓库只是一个 包含了很多的podspec文件 的文件夹!!

步骤如下

  1. 如下图,在github上创建一个空的仓库,仓库的地址为https://github.com/shixinga/weiboaa.git ,目的是存储weiboaa组件的代码。
    创建一个ios组件供其他ios工程使用_第3张图片

  2. 把weiboaa组件的本地代码提交到github上的weiboaa仓库上,具体步骤如下图。

  3. 在github上创建一个空的仓库(仓库名为myprivaterepo),仓库的地址为https://github.com/shixinga/myprivaterepo.git,目的是保存Spec repo仓库的内容。即Spec repo仓库本质上也是一个git仓库,该仓库将要存的是weiboaa.podspec文件,具体操作如下。
    创建一个ios组件供其他ios工程使用_第4张图片

  4. 然后执行pod repo push https://github.com/shixinga/myprivaterepo.git weiboaa.podspec --allow-warnings,该命令会做两件事:①检查 weiboaa.podspec文件是否符合规范;②如果符合规范就将该 weiboaa.podspec文件提交到github的myprivaterepo仓库上,如果不符合规范就会包如下图的有”中文字符“的错误。
    创建一个ios组件供其他ios工程使用_第5张图片

  5. 修正 weiboaa.podspec文件,具体内容如下。

Pod::Spec.new do |spec|

  spec.name         = "weiboaa"
  spec.version      = "3.0"
  spec.summary      = "A short description of weiboaa."
  spec.description  = <<-DESC
                    my component(a podspec file and a directory that contains some ”.h and .m“ file)
                   DESC
  spec.homepage     = "https://github.com/shixinga/weiboaa"
  spec.license      = { :type => "MIT", :file => "FILE_LICENSE" }
  spec.author             = { "csx" => "email adress" }
  spec.source       = { :git => "https://github.com/shixinga/weiboaa.git", :tag => "#{spec.version}" } //需要填写组件的仓库地址,以及基于哪个tag版本下的组件
  spec.ios.deployment_target = '8.0' //这行代码不能少!!!说明在ios平台使用,并且部署的最低ios版本是8.0
  spec.source_files  = "Classes2/**/*.{h,m}"
end
  1. 推送weiboaa.podspec文件,然后记得打个名为3.0的tag并推送到github上!!!最后执行pod repo push https://github.com/shixinga/myprivaterepo.git weiboaa.podspec --allow-warningspod repo push这条命令会做两件事:①检查weiboaa.podspec文件是否符合规范,比如不能包含中文、spec.source里面填写的git地址及其tag版本所对应的weiboaa组件必须存在,即一定要在https://github.com/shixinga/weiboaa.git仓库中能找到一个名为3.0的tag!!!!!②把weiboaa.podspec文件推送到myprivaterepo仓库中(地址为 https://github.com/shixinga/myprivaterepo.git ),此时意味着你的weiboaa组件的地址已经被添加到myprivaterepo这个Spec repo仓库中了。

  2. 在github上的myprivaterepo会看到你刚才执行pod repo push https://github.com/shixinga/myprivaterepo.git weiboaa.podspec --allow-warnings成功后的结果。
    创建一个ios组件供其他ios工程使用_第6张图片

  3. 修改MyPro工程的podfile文件,目的是添加下载源(Spec repo仓库的地址,本例指的是https://github.com/shixinga/myprivaterepo.git),然后执行pod install

  4. 然后再MyPro工程中使用weiboaa组件的代码。因为weiboaa组件是在Pods文件夹下,而不是在Development Pods目录下,所以你不能直接在MyPro工程中修改weiboaa组件的代码!

方式3:其实和方式2没有本质的区别,只不过是使用pod lib 命令来创建 带有”可以用xcode来跑的“demo 的组件。

  1. 执行pod lib create component2来创建一个组件(一个pod),然后按提示选择组件是否是ios组件、组件所用语言、是否创建demo等。然后该组件就会自动被xcode打开。
  2. 修改component2.podspec文件,然后添加一个Cat类(由Cat.h和Cat.m文件实现)。
  3. 把component组件推送到刚在github上新建的component2仓库(地址为https://github.com/shixinga/component2.git),记得要打个tag并推送到component2远程仓库中!
    创建一个ios组件供其他ios工程使用_第7张图片
    创建一个ios组件供其他ios工程使用_第8张图片
  4. 执行pod repo push https://github.com/shixinga/myprivaterepo.git component2.podspec --allow-warnings,以便把 component2.podspec文件推送到github上的myprivaterepo仓库,意味着把component2组件的地址保存到github上的myprivaterepo仓库中(换句话说,就是把component2组件的索引保存到myprivaterepo这个Spec repo仓库中)。
  5. 在MyPro工程的podfile文件中添加pod 'component2', '1.0',然后执行pod install命令,然后你就可以看到下图中的component2组件了

    此时你就可以在MyPro工程中使用component2组件的代码了。

附加步骤:如果你在component2组件中添加了新的代码,那怎么同步到MyPro工程中呢?

  1. 在component2组件中添加一些文件(本例中添加Dog.h和Dog.m文件),然后修改component2.podspec文件的s.version的值为2.0(表示第2个版本),然后推送代码和名为2.0的标签到远程的component2仓库中

  2. 执行pod repo push https://github.com/shixinga/myprivaterepo.git component2.podspec --allow-warnings,以便把component2.podspec文件推送到远程的myprivaterepo这个Spec repo仓库中。

  3. 刷新github网页,你就可以看到两个版本(分别是1.0和2.0版本)的component2.podspec文件了,即myprivaterepo这个Spec repo仓库中同时保存了1.0和2.0版本的component2组件仓库的地址。
    创建一个ios组件供其他ios工程使用_第9张图片

  4. 修改MyPro工程的podfile文件中的pod 'component2', '2.0',然后执行pod install,目的是让MyPro工程依赖2.0版本的component2组件而不是1.0版本的component2组件。

常用命令

  • pod repo update:内部本质上就是通过在~/.cocoapods/repos上的每一个目录(每一个目录都是一个本地Spec repo仓库,并且这些本地Spec repo仓库都分别对应一个远程Spec repo仓库,因为每一个本地Spec repo仓库的根目录下都有一个.git目录)下都执行git fetch,进而把每一个Spec repo远程仓库的所有分支都拉取到本地,最终这些Spec repo仓库就能有远程仓库的最新版本的各种组件的 .podspec文件了。以下面第1张图为例,csxRepo是一个
    本地Spec repo仓库,shixinga也是一个本地Spec repo仓库,shixinga文件夹下面有一个.git文件夹,可以通过查看shixing/.git/config文件(下面第2张图)就可以知道shixinga这个本地Spec repo仓库对应了https://github.com/shixinga/myprivaterepo.git这个远程Spec repo仓库。csxRepo仓库同理。其实Spec repo仓库也是一个git仓库。。。

在这里插入图片描述
创建一个ios组件供其他ios工程使用_第10张图片

你可能感兴趣的:(创建一个ios组件供其他ios工程使用)