记载自己怎么创建私有组件的,途中遇到的问题一起贴出。做个笔记,便当之后忘掉哪那一步了回头来看一下
一.组件的创建
1.拉取模版
我们将创建在桌面上的一个名为Demo
文件夹中。通过终端进入到该文件夹下,然后输入指令:
pod lib create MSDNetworking
// 效果的途径
What platform do you want to use?? [ iOS / macOS ] > iOS
// 语言环境
What language do you want to use?? [ Swift / ObjC ] > ObjC
// 是否需求一个 demo 用来检验组件
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? > MSD
承认之后,系统会为你自动装备组件项目,创建好的项目如下
这个 Example
现已为你的组件创建了索引文件 podspec
,并且集成了该组件。
我们来看下 Example
的 Podfile
的内容:
use_frameworks!
platform :ios, '9.0'
target 'MSDNetWorking_Example' do
pod 'MSDNetWorking', :path => '../'
target 'MSDNetWorking_Tests' do
inherit! :search_paths
pod 'FBSnapshotTestCase'
end
end
其间为你集成了一个检验用例 pod 'FBSnapshotTestCase'
,现在可以忽略
我们可以看到: pod 'MSDNetWorking', :path => '../'
这一句,path
途径指向了本地途径,对应 MSDNetWorking 主目录下:
这个文件夹下,一个寄存你的各种类文件,一个寄存图片资源等。
1.2podspec 文件
在你回答之前问题之后,pod 为你自动创建了该文件,并实行了 pod install
指令,该指令会找到组件的索引文件(也在本地) MSDNetWorking.podspec:
#
# Be sure to run `pod lib lint MSDNetWorking.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 = 'MSDNetWorking' #组件工程名
s.version = '0.1.0' #组件版别号
s.summary = 'A short description of MSDNetWorking.' #对组件的描绘
# 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/MaShudong/MSDNetWorking'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'MaShudong' => 'first_msdong@163.com' }
s.source = { :git => 'https://github.com/MaShudong/MSDNetWorking.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '9.0'
s.source_files = 'MSDNetWorking/Classes/**/*'
# s.resource_bundles = {
# 'MSDNetWorking' => ['MSDNetWorking/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3' #s.dependency是该组件所需求依托的其他组件、三方组件等。
end
该文件为你的组件自动装备了一些根本的信息,当然这些信息是需求你根据情况修正的,更多的装备你可以查找相关文档。
> 留意:这儿的 Git 地址现在是找不到的,后期需求自己相关。
二.设置同享文件
podspec
文件中 s.source_files = 'MSDNetworking/Classes/**/*'
指代同享的资源途径,我们需求将同享的文件放到这儿来。
我们翻开组件的目录查看,可以看到这儿现已有了名为 ReplaceMe
的文件了,这暗示你用同享文件替换它。
podspec
文件中还有一个被注释掉的:
# s.resource_bundles = { # 'MSDNetworking' => ['MSDNetworking/Assets/*.png'] # }
我们来创建一个 MSDNetworking 类:
@interface MSDNetworking : NSObject -(NSString*)getSomething;
@end @implementation MSDNetworking
-(NSString *)getSomething{ return @"test method."; }
@end
将其移动到组件的同享目录下并删去掉空文件ReplaceMe
:
这样,我们就设置好了同享的内容,即组件开发好了。接下来,我们运用 Example
工程来运用这个组件的内容
终端进入 Example
工程目录下,实行 pod install
指令来装置组件。
我们发现,Example
项目中 Pods/Development Pods/MSDNetworking
下,多出来最新增加的文件
三.运用组件
我们装置好组件之后来运用一下组件的功用,就像运用三方库那样:
#import "MSDViewController.h"
#import "MSDNetworking.h"
**@interface** MSDViewController ()
**@end**
**@implementation** MSDViewController
- (**void**)viewDidLoad
{
[**super** viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (**void**)didReceiveMemoryWarning
{
[**super** didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (**void**)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
MSDNetworking * working = [[MSDNetworking alloc] init];
NSLog(@"%@",[working gerSomething]);
}
控制台输出:
**2022-01-10 15:03:44.293512+0800 MSDNetworking_Example[2879:175584] test something**
这表明功用正常。
在组件开发过程中,运用 pod 'MSDNetworking', :path => '../'
将途径指向本地是很有必要的,便当检验你的组件装备是否正确,功用是否完善,比较推到远程、发布再集成,这便当太多了。
四.三方依托库
有时候,我们的组件还依托其他的组件,又或许是三方库。我们通过 s.dependency
字段去设置,多个库可以分隔写屡次。
Analyzing dependencies Fetching podspec for `MSDNetworking` from `../` Downloading dependencies Installing AFNetworking (3.4.0) ……
我们发现,Example
自动拉取了组件 MSDNetworking 所依托的其他组件。CocoaPods
工具的别的一个长处便是,多个组件依托同一个组件时,它会自动帮你检测装置,而不会重复导入。
我们发现 Example
工程的 Pods
中,本地开发的组件和远程发布的组件被分别放在了不同的目录下。
有了 AFNetworking
之后,你就可以修正你的网络央求组件了
#import "MSDNetworking.h"
**@implementation** MSDNetworking
- (NSString *)gerSomething{
**return** @"test something";
}
#pragma mark **- GET央求,央求头不带参数的**
-(**void**)GET:(NSString *)URLString parameters:(NSDictionary *)parameters success:(Success)success failure:(Failure)failure{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain",@"text/html",@"application/json", **nil**];
[manager GET:URLString parameters:parameters headers:parameters progress:^(NSProgress * **_Nonnull** downloadProgress) {
} success:^(NSURLSessionDataTask * **_Nonnull** task, **id** **_Nullable** responseObject) {
;
} failure:^(NSURLSessionDataTask * **_Nullable** task, NSError * **_Nonnull** error) {
}];
}
@end
修正好之后,还不能直接在 Example
中运用,需求卸载组件再从头装置。注释掉 pod 'MSDNetworking', :path => '../'
之后实行 pod install
即可结束卸载。
至此,就结束了组件的创建、文件同享、本地化检验运用和更新。可是,我们的组件毕竟是要服务于宿主工程的,假设只是只能是通过本地集成,那含义不大,我们要将其相关到远程服务器,推送到本地搭建的 gitee
,又或许是 GitHub
、Coding
等途径。
五.相关远程仓库
在模版 podspec
文件中,现已帮我们指定了一个 gitee
的仓库地址(个大途径自己创建,创建过程就不描绘了)
你可以运用它或许进行修正它。我们这儿选择运用它,先去 gitee
创建对应的仓库。
在开端创建组件时,系统现已帮我们创建好了本地 Git 仓库
可以通过
ls -la //进行查看
假设没有,你可以运用指令 git init
创建一个。
- 现在,我们要将之前的修正进行提交(本地提交)。
git commit -am "第一次提交"
- 增加相关远程仓库
git remote add origin https://gitee.com/********/msdnetworking.git
- 将本地内容推送到远程仓库
git push -u origin master
推送失利那就暴力推送掩盖吧(第一次仓库无任何代码)
git push -f origin master
回到 Gittee
改写一下即可看到你的提交记载。
六.打 tag
发送到远程仓库
我们现已成功的将本地仓库相关并推送到远程仓库,现在我们要发布一个可用的组件。
- 首要我们要给当时项目打一个
tag
版别号,在podspec
中:
s.version = '0.1.0'
- 指定的版别号是
0.1.0
,那么我们就相同打个0.1.0
的tag
:
git tag 0.1.0 // 打 tag $ git push --tags // 推送到远程
- 改写页面,项目的
release
选项中会出现刚刚打的版别。
七.发布到 CocoaPods
7.1.验证
由于我们创建的项目以及标签的版别号都是沿用了 podspec
文件中的信息,因此可以直接验证 podspec
文件信息是否可以通过验证,假设需求调整,调整之后最好相同先验证:
留意
podspec
文件的版别号必定要和 tag
保持一致。
pod spec lint
我运用这个给报错了
换了一种方法
pod lib lint MSDNetworking.podspec –allow-warnings –use-libraries
完美!!!!!
7.2.发布
现在可以将 podspec
文件提交到 CocoaPods
上了:
首要要通过 trunk
注册生成一条会话:
// pod trunk register 邮箱 用户名 描绘
pod trunk register first_msdong@163.com XIAOMAGE1105 --description=NETWORKINGDEMON
[!] Please verify the session by clicking the link in the verification email that has been sent to first_msdong@163.com
收到邮件
去验证
这样就验证成功了
现在,就可以将 podspec
提交给 CocoaPods
了。这个文件将是他人查找你的组件的索引。
pod trunk push MSDNetworking.podspec --allow-warnings
这样就上传成功了
7.3.查找
上传结束之后,接可以通过 pod search MSDNetworking
查找到自己的组件了
没搜到?
没搜到别慌 !
删去本地的查找文件试试
rm ~/Library/Caches/CocoaPods/search_index.json
只实行了这行指令依然搜不到
别慌!
1.更新本地pod库
pod repo update
问题出在这儿 远程的索引库没找到
删去本地查找索引文件
rm ~/Library/Caches/CocoaPods/search_index.json
从头建立查找
pod search MSDNetworking
完美搜到了!
八.集成到宿主工程
我们现已结束了网络组件的创建和发布,也支撑了 CocoaPods
的集成。现在我们需求将该组件集成到宿主工程中去,这部分没什么好提的,因为运用方式和集成三方库是相同的,可以说三方库只不过是他人编写的功用组件罢了,我们的组件相同可以提供给小组成员运用,比较于朴实的三方库,我们的许多组件都相关了业务部分,或许基于私家的其他组件,因此适用范围较小。