如何制作一个CocoaPods私有库

最近在学习组件化相关的知识,也准备写个项目练练手。iOS组件化的实现是利用CocoaPods制作Pod库,主工程分别引用这些Pod库。最终想要达到的目标是主工程只是一个壳工程,其它代码都在组件Pod里,主工程只负责加载这些组件,没有其它任何代码。

这篇文章作为组件化开发的前置文章总结一下如何制作一个CocoaPods私有库。

下面通过一个例子来讲解整个步骤流程。

1、打开终端,进入到要建立私有库工程的目录,执行pod lib create MMUtils,MMUtils为项目名

这里会询问几个问题,答案根据实际情况具体设置

命令执行完成后会创建一个私有库工程。

2、创建私有库Git地址,这里以GitHub为例

MyGitHubModule是我自己创建的一个Organization,为了方便组件的统一管理。

3、修改配置文件MMUtils.podspec
#
# Be sure to run `pod lib lint MMUtils.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#

Pod::Spec.new do |s|
  s.name             = 'MMUtils'
  s.version          = '0.0.1'
  s.summary          = 'MMUtils is some utils for My Project.'

# This description is used to generate tags and improve search results.
#   * Think: What does it do? Why did you write it? What is the focus?
#   * Try to keep it short, snappy and to the point.
#   * Write the description between the DESC delimiters below.
#   * Finally, don't worry about the indent, CocoaPods strips it!

  s.description      = <<-DESC
TODO: Add long description of the pod here.
                       DESC

  s.homepage         = 'https://github.com/MyGitHubModule/MMUtils'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { '[email protected]' => '[email protected]' }
  s.source           = { :git => 'https://github.com/MyGitHubModule/MMUtils.git', :tag => s.version.to_s }
  # s.social_media_url = 'https://twitter.com/'

  s.ios.deployment_target = '8.0'

  s.source_files = 'MMUtils/Classes/**/*'
  
  # s.resource_bundles = {
  #   'MMUtils' => ['MMUtils/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  # s.frameworks = 'UIKit', 'MapKit'
  s.dependency 'Reachability', '~> 3.2'
  s.dependency 'ReactiveCocoa', '~> 2.5'
end

podspec文件的详细说明可以看Podspec Syntax Reference。

4、打开终端,进入Example文件夹,执行pod install,安装依赖项
5、添加库的源码文件

将源码文件放入MMUtils/Classes文件下,与podspec文件中的配置要保持一致。这里我是放入了一个监听网络状态变化的工具类。

运行pod install,让工程加载新添加的类。这里需要注意的是,只要新增加类、资源文件或依赖的第三方库都需要重新运行pod install来进行更新。

6、添加测试代码,运行工程测试

在MMViewController中添加测试代码

#import "MMViewController.h"
#import 
#import 

@interface MMViewController ()

@property (nonatomic, strong) UILabel *statusLabel;

@end

@implementation MMViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.statusLabel = [[UILabel alloc] initWithFrame:CGRectMake(([UIScreen mainScreen].bounds.size.width - 100) / 2.0, 100, 100, 100)];
    self.statusLabel.textAlignment = NSTextAlignmentCenter;
    [self.view addSubview:self.statusLabel];
    
    RAC(self.statusLabel, text) = [RACObserve(ReachabilityHelper, networkStatus) map:^(NSNumber *networkStatus) {
        return networkStatus.integerValue == NotReachable ? @"无网络" : @"有网络";
    }];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

运行工程测试,切换网络状态,可以看到label文字的变化。

7、运行pod lib lint MMUtils.podspec验证私有库正确性

如果出现

[!] MMUtils did not pass validation, due to 15 warnings (but you can use `--allow-warnings` to ignore them).
You can use the `--no-clean` option to inspect any issue.

可以运行pod lib lint MMUtils.podspec --allow-warnings来忽略警告。

8、提交源码到GitHub,并打tag

在项目工程文件下运行以下命令:

# chenjb @ chenjbdeMBP in ~/Desktop/MyGitHubModule/MMUtils on git:master x [20:41:30] 
$ git remote add origin https://github.com/MyGitHubModule/MMUtils.git

# chenjb @ chenjbdeMBP in ~/Desktop/MyGitHubModule/MMUtils on git:master x [21:01:06] 
$ git add .

# chenjb @ chenjbdeMBP in ~/Desktop/MyGitHubModule/MMUtils on git:master x [21:01:17] 
$ git commit -a -m "0.0.1"

# chenjb @ chenjbdeMBP in ~/Desktop/MyGitHubModule/MMUtils on git:master o [21:01:24] 
$ git pull origin master

# chenjb @ chenjbdeMBP in ~/Desktop/MyGitHubModule/MMUtils on git:master o [21:01:38] C:1
$ git push origin master

# chenjb @ chenjbdeMBP in ~/Desktop/MyGitHubModule/MMUtils on git:master o [21:01:59] 
$ git tag 0.0.1

# chenjb @ chenjbdeMBP in ~/Desktop/MyGitHubModule/MMUtils on git:master o [21:02:08] 
$ git push origin 0.0.1

运行完成后,可以去GitHub上对我们的提交进行查看。

9、发布私有库

对于开源库,podspec文件是放在CocoaPods的Specs项目下的。

因为我们创建的是私有库,所以我们需要创建自己的Specs管理库。

创建一个Git库命名为MMSpecs,创建过程和第二步一样。

打开终端,运行

$ pod repo add MMSpecs https://github.com/MyGitHubModule/MMSpecs.git

执行成功后,可以看到在本地生成了MMSpecs目录。

运行

# chenjb @ chenjbdeMBP in ~/Desktop/MyGitHubModule/MMUtils on git:master o [21:58:28] 
$ pod repo push MMSpecs MMUtils.podspec 

进行发布。

如果没通过,可以试试pod repo push MMSpecs MMUtils.podspec --allow-warnings忽略警告。

成功之后可以在GitHub上对MMSpecs进行查看。

10、在自己项目中引用私有库

Podfile如下:

source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/MyGitHubModule/MMSpecs.git'
platform :ios, ‘8.0’

target “TestTest” do
pod 'MMUtils', '~> 0.0.1’
end

这里很尴尬,发现开源库中也有个同名的库。

修改Podfile为:

source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/MyGitHubModule/MMSpecs.git'
platform :ios, ‘8.0’

target “TestTest” do
pod 'MMUtils', :git => 'https://github.com/MyGitHubModule/MMUtils.git', :tag => '0.0.1'
end

读者朋友这个操作就不要学了。

具体步骤流程就是这样了,这是我2018年的第一篇博客,希望自己在2018年接下来的日子里也能继续努力。大家共勉。

本文示例代码下载:MMUtils

参考链接
  • https://www.cnblogs.com/wsyuzx/p/7089564.html
  • http://www.cnblogs.com/brycezhang/p/4117180.html
  • https://www.jianshu.com/p/760d6cd46719

你可能感兴趣的:(如何制作一个CocoaPods私有库)