iOS 逆向开发

iOS 开发之创建自己的 CocoaPods 库

2021-04-08  本文已影响0人  且听风吟SW

前言

在 iOS 开发中,我们经常会使用到一些第三方库,如 AFNetworking、SDWebImage 等,一般使用 CocoaPods 来统一管理。那么如何把自己写的类库上传到 CocoaPods,使之可以像 AFNetworking 一样使用呢?即项目的模块化、组件化。

详细步骤

1.在本地创建 pod 库
guosongwei@guosongweideiMac ~ % cd desktop
guosongwei@guosongweideiMac desktop % pod lib create SWHelloWorld
#选择开发平台
What platform do you want to use?? [ iOS / macOS ]
 > iOS

#选择编程语言
What language do you want to use?? [ Swift / ObjC ]
 > ObjC

#在你的项目中是否创建一个 demo 工程,为了方便测试,我选择了 Yes
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?
 > SW
安装 pod 成功.png

到这里 pod 库就创建完成了,它会自己打开刚才创建的 pod 库。目录结构如下图:


SWHelloWorld.png
2.添加库文件
#import "SWTestManager.h"

@implementation SWTestManager
- (void)testPrint:(NSString *)text {
    NSLog(@"SWTestManager print == %@",text);
}

@end
guosongwei@guosongweideiMac desktop % cd /Users/guosongwei/Desktop/SWHelloWorld/Example 
guosongwei@guosongweideiMac Example % pod install
终端命令执行.png
//
//  SWViewController.m
//  SWHelloWorld
//
//  Created by Guo-Sir on 04/08/2021.
//  Copyright (c) 2021 Guo-Sir. All rights reserved.
//

#import "SWViewController.h"
#import "SWTestManager.h"

@interface SWViewController ()

@end

@implementation SWViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    [[[SWTestManager alloc] init] testPrint:@"真帅!"];
}

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

@end

运行一下:


运行.png

看到控制台输出的信息了,证明我们本地运行代码没问题,SWTestManager 可以调用!

3. 编辑 SWHelloWorld.podspec 文件

PS:github、码云…都行,这里以 github 为例

New repository.png Create a new repository.png
#
# Be sure to run `pod lib lint SWHelloWorld.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 https://guides.cocoapods.org/syntax/podspec.html
#

Pod::Spec.new do |s|
  s.name             = 'SWHelloWorld'
  s.version          = '0.1.0' // 版本号必须和 tag 一致
  s.summary          = 'SWHelloWorld.'  // 说明,改一下,默认提交时会报错

# 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/Guo-Sir/SWHelloWorld'  // git 仓库主页
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'Guo-Sir' => 'guosw@5173.com' }
  s.source           = { :git => 'https://github.com/Guo-Sir/SWHelloWorld.git', :tag => s.version.to_s }  // git 仓库地址
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

  s.ios.deployment_target = '9.0'

  s.source_files = 'SWHelloWorld/Classes/**/*'  // 类库文件代码路径
  
  # s.resource_bundles = {
  #   'SWHelloWorld' => ['SWHelloWorld/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  # s.frameworks = 'UIKit', 'MapKit'
  # s.dependency 'AFNetworking', '~> 2.3'
end
guosongwei@guosongweideiMac ~ % cd /Users/guosongwei/Desktop/SWHelloWorld 
guosongwei@guosongweideiMac SWHelloWorld % pod lib lint SWHelloWorld.podspec --allow-warnings
pod lib lint SWHelloWorld.podspec.png

至此,配置完成了

4. 项目发布

cd 到项目路径下,执行 git 相关命令,将项目发布到上一步创建的 github 里

guosongwei@guosongweideiMac Example % cd /Users/guosongwei/Desktop/SWHelloWorld 
# 添加远程地址,即上面创建 github 项目的地址
guosongwei@guosongweideiMac SWHelloWorld % git remote add origin https://github.com/Guo-Sir/SWHelloWorld.git
# 添加文件
guosongwei@guosongweideiMac SWHelloWorld % git add .
# 提交本地,并写描述
guosongwei@guosongweideiMac SWHelloWorld % git commit -a -m "第一次提交 版本为 0.1.0" 
# --allow-unrelated-histories
# git pull origin maste 会失败 ,提示:fatal: refusing to merge unrelated histories
# 原因是远程仓库 origin 上的分支 master 和本地分支 master 被 Git 认为是不同的仓库,所以不能直接合并,需要添加 --allow-unrelated-histories
guosongwei@guosongweideiMac SWHelloWorld % git pull origin master --allow-unrelated-histories
# 推送到 github 的 SWHelloWorld 项目的 master 分支上
guosongwei@guosongweideiMac SWHelloWorld % git pull origin master
# 提交版本号
guosongwei@guosongweideiMac SWHelloWorld % git tag 0.1.0
# push 到远程分支
guosongwei@guosongweideiMac SWHelloWorld % git push origin 0.1.0
5.注册 CocoaPods Trunk

在 CocoaPods Trunk 中注册,用邮箱注册,注册成功会有邮件返回。

guosongwei@guosongweideiMac SWHelloWorld % pod trunk register guosw@5173.com

等注册的邮箱收到 CocoaPods 的确认邮件。点击邮件中的验证链接:


邮件.png

页面跳转,提示 Ace, You're set up. 然后才可以进行下一步(如果是升级也需要执行这一步!)。


Ace, You're set up.png
6.发布自己的类库

终端进入根目录 SWHelloWorld,执行命令:pod trunk push SWHelloWorld.podspec --verbose
(如果有警告请尝试:pod trunk push SWHelloWorld.podspec --verbose --allow-warnings)

guosongwei@guosongweideiMac SWHelloWorld % pod trunk push SWHelloWorld.podspec --verbose --allow-warnings

执行完上述命令之后可以去 github 上查看是否已经推送上去了 https://cocoapods.org/pods/SWHelloWorld

Guo-Sir/ SWHelloWorld
这里我们可以看到 github 上已经推上去了
7.尝试使用
pod 'SWHelloWorld',:git =>"https://github.com/Guo-Sir/SWHelloWorld.git"

好了,以上就是创建私有库的教程,希望能对大家有所帮助。如有错误,欢迎批评指正!

最后附上官方教程网站:https://guides.cocoapods.org/making/making-a-cocoapod.html

喜欢的话记得给我个 ☆ 喔 O(∩_∩)O~

上一篇 下一篇

猜你喜欢

热点阅读