关于私有仓库

Overview

截止目前在我的有道云笔记里已经躺了好几篇文章没写完,目前写了一半或者刚开头的有App启动优化:二进制文件重排iOS逆向工程及防御iOS知识点梳理

时间还是不太够用啊,而且八月份已经过去,八月份的文章还没放到博客上。除去功能增加以外,还有就是自己有些懈怠了。

除了已经写个开头的文章,还有些东西需要整理,比如Swift、Runtime、算法之类的。这些东西也不能只仅限于会用,还要知其原理并将其整理出来写成文章,避免后期的遗忘。

希望今年将这些东西都整理完吧!

而这篇文章主要整理私有仓库的创建,便于后期查阅。


ps:截止这次更新,上面提到的几篇博客还没写完。

私有仓库相关

创建私有仓库

一般创建私有仓库会创建到公司搭建的gitlab上,因为目前只是做演示,所以本博客的私有仓库、私有组件都创建在GitHub上,以供后期下载。

在git中创建私有仓库

私有仓库

添加私有仓库到本地

在将私有仓库添加到本地之前,我们可以通过pod repo list指令查看本地有哪些仓库,同时可以查看本地仓库存放地址。

1
pod repo list

查看本地仓库列表

查看本地仓库

使用pod repo add ZVTestPrivateSpecs https://github.com/xnxy/ZVTestPrivateSpecs.git指定将私有仓库添加到本地。

私有仓库添加到本地

添加完成后可以使用pod repo list指令查看本地仓库列表,查看是否已经添加成功,同时也可以open相应目录查看。

查看本地仓库列表

添加Podspec到私有仓库

创建私有组件

git中创建私有组件

创建私有组件

编写组件内容,创建测试Demo等相关内容。

创建Demo相关

使用pod spec creat ZVTestPod指令来创建podspec文件,并编写相关内容。

创建podspec文件

编写完成后,将编写好的podspec推送到git,并打tag

然后使用pod lib lint来验证podspec文件,如果出现下方图片中的passed validation则代表验证通过。

验证podspec文件

私有组件验证通过后,我们需要使用pod repo push ZVTestPrivateSpecs ZVTestPod.podspec指定将私有组件的podspec文件推送到私有仓库中。

推送私有组件到私有仓库

推送成功后,我们可以在私有仓库中查看私有组件的位置,当然我们也可以在本地中查看

私有组件在私有仓库的位置

将私有仓库中的库集成到项目中

走到这一步,私有仓库、私有组件的的流程都已经介绍完了,如果想使用私有仓库中的私有组件时,直接集成项目即。跟集成开源框架类似。

其中Podfile的编写如下:

1
2
3
4
5
6
7
8
9
10
11
12
source 'https://github.com/xnxy/ZVTestPrivateSpecs.git'
#source 'https://github.com/CocoaPods/Specs.git'

use_frameworks!
platform :ios, '9.0'
inhibit_all_warnings!

target 'ZVTestExample' do

pod 'ZVTestPod', '~> 0.0.1'

end

集成私有组件到项目中

Swift和OC混编仓库

关于Swift和OC混编的仓库可以参考我再GitHub中创建的Demo

OC调用Swift方法

在Framework中OC调用Swift需要引入#import <**/**-Swift.h>头文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//
// ZVOCApi.m
// ZVTestSwiftPod
//
// Created by CNTP on 2020/12/7.
//

#import "ZVOCApi.h"
#import <ZVTestSwiftPod/ZVTestSwiftPod-Swift.h>

@implementation ZVOCApi

- (void)test{
NSLog(@"---OC调Swift---");
ZVSwiftApi *header = [ZVSwiftApi new];
[header function];
}

- (void)swiftTest{
NSLog(@"---swift调OC---");
}

相应的在Build Settings中可以查看相应头文件配置(Xcode会自动生成)。
OC调Swift

Swift调用OC方法

在Framework中Swift调用OC需要先创建module.modulemap文件将相应的头文件添加进去。

关于modulemap文件,可以参看简书的的文章《Swift 关于 module.modulemap 使用》,介绍的很详细。

内容大致如下所示:

1
2
3
4
5
6
//modele.modulemap文件内容

module BridgeFiles [system] {
header "ZVFileTransferHeader.h"
export *
}

ZVFileTransferHeader.h文件中存放Swift需要调用的OC类。

同时需要在Build Settings手动添加配置,入下图所示。

Swift调用OC配置

添加进配置中的目录为module.modulemap所在的目录。

相应的在需要调用的类中引入BridgeFiles,然后即可调用。

如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//
// ZVSwiftApi.swift
// ZVTestSwiftPod
//
// Created by CNTP on 2020/12/7.
//

import UIKit
import BridgeFiles

@objc public class ZVSwiftApi: NSObject {

@objc public func function() -> Int {
let obj = ZVOCApi.init()
obj.swiftTest()
return 1;
}
}

需要添加@objcpublic,或者无法调用。

参考资料