Swift/Objective-C-使用Cocoapods创建/管理私有库(初中级用法)

团队管理开发,资源整合维护,或者其他情况,需要建立私有库,不被别人访问。
如果是团队管理开发私有库,需要释放私有库权限给团队成员。

废话不多说了,开始。

另外两篇文章:
Swift/Objective-C-使用Cocoapods创建/管理公共库
Swift/Objective-C-使用Cocoapods创建/管理公共库(高级用法)

梳理创建流程:
  • 基础
  • 开始前准备工作;
  • 检查库名是否被占用;
  • 在远程端创建一个私有(Private)的索引库(版本库,Spec repo)和一个私有(Private)的代码库(pod),待用;
  • 将远程端私有索引库添加(clone)到本地的~/.cocoapods/repos文件夹下,并查看结果;
  • 创建本地工程(两种方式);
  • 添加自己封装的源代码、资源文件到工程指定目录下;
  • 配置工程中的.podspec文件;
  • 通过pod installpod update命令更新demo工程,并编译运行是否有错误(每次更改信息后都需要更新编译demo工程,保证添加的源代码、资源文件无误,若无demo工程可忽略此步骤);
  • 通过Pod命令验证本地.podspec文件(若有错误,修改后再次验证,直到通过验证);
  • 通过Git命令提交本地工程到远程端的私有代码库,并且添加tag;
  • 通过Pod命令验证远程端.podspec文件(若有错误,修改后再次验证,直到通过验证);
  • 提交.podsepc文件到私有索引库,并更新到本地私有索引库(至此完成私有库的创建);
  • 检验1:通过pod search 私有库名命令搜索自己的私有库;
  • 检验2:新建测试项目,在Podfile中引入自己的私有库pod '私有库',及引入时的注意事项,然后再次检查是否可引入,是否可用;
  • 中级
  • 现有私有库的更新管理维护;
  • 本地索引库管理的其他命令;


一、开始前的准备
  1. GitHub或码云或GitLab或其他存储库的账号(我这里用的是GitLab);
  2. Sourcetree管理自己的私有库(需要注册Sourcetree账号),或者通过终端命令进行管理(以终端命令为例);
二、检查你要创建的私有库的库名是否已经被占用

为什么我们要先检查一下自己创建的私有库的库名是否被占用呢?因为我之前创建公共库的时候,我的库名在Cocoapods中已存在,在验证的时候没提示我库名被占用,到最后一步提交的时候提交不到GitHub上,说我的库名已被占用,所以只能重新来一遍了。另一方面,如果你的私有库和公共库有重名的,当你在项目的Podfile文件pod你的私有库时,当pod找不到你的私有库就会去公共库搜索有没有和这个库名一样的库,如果有就会下载这个同名的公共库了,这样pod的就不是自己想引入的私有库了,所以需要在创建私有代码/索引库前检查一下自己创建的私有库的库名是否被占用。这里以私有索引库名为例。

$ pod search JYPrivateRepoTest0
[!] Unable to find a pod with name, author, summary, or description matching `JYPrivateRepoTest0`

如上信息,没有搜索到与我的库名相关信息,说明该库名没有被占用,可以使用。或者搜索到几个或许多与你的库名相似的库,你仔细浏览一下有没有和你一样的库名,若没有则可以使用。
注意:要记住自己创建的私有库名一定不要跟Github上的第三方库重名,否则会搜不到。即便能搜索得到,pod进来的库也不一定是你自己的私有库,有可能是Github上重名的公共第三方库,而不是自己的私有库。因为pod集成时会先从Github上的公共第三方库查找,然后才是私有库中查找。

三、在远程端创建一个私有索引库(版本库)和一个私有代码库(待用)

我这里是在GitLab上创建的私有索引库和私有代码库,根据自己的情况在相应平台创建你的私有索引库和私有代码库。

  1. 创建一个私有索引库,库名为JYPrivateRepoTest0,如下图所示:

    创建remote索引库.png
    注意:可见等级 选择的是私有选项。如果在GitHub上创建,那选择的是Private选项。

  2. 创建一个私有代码库,库名为JYPrivateLibTest0,如下图所示:

    创建remote代码库.png

注意:如果你计划在本地创建pod,你应该具有对git地址push的访问权。

四、添加(clone)远程端私有索引库到本地
  1. 将远程端私有索引库(Repo)添加到本地的~/.cocoapods/repos文件夹下,运行命令如下:
/// pod repo add JYPrivateRepoTest0 [私有索引库地址]
$ pod repo add JYPrivateRepoTest0 https://git.asd.net/pod/JYPrivateRepoTest0.git
Cloning spec repo `JYPrivateRepoTest0` from `https://git.asd.net/pod/JYPrivateRepoTest0.git`
  1. 查看~/.cocoapods/repos文件夹下clone的私有索引库,如下图:

    添加的索引库.png

    注意:master文件夹是cocoapods创建的公共索引库文件夹,其中存放的是cocoapods中所有公共库的各个版本的.podsepc文件。JYPrivateRepoTest0文件夹是自己创建的私有索引库文件夹,存放的是自己的私有库下各个版本的.podsepc文件。

  2. 校验你本地添加的私有索引库的安装是否成功,并准备好。命令如下:

$ cd ~/.cocoapods/repos/JYPrivateRepoTest0
$ pod repo lint
五、创建本地私有代码库工程(两种方式)
  • 通过终端Pod命令创建本地私有代码库模板工程(项目)
  1. 打开终端,cd 到存放工程的目标目录下
$ cd Desktop/PrivateRepository/
  1. 创建本地私有代码库(模板工程)到目标目录下,命令如下:
/// pod lib create [工程名] --template-url=URL(自己的工程模板地址)  
/// 工程名:一般和远程端私有代码库名一致
/// 注意:要使用自己的私有代码库模板,可以添加参数--template-url =URL,其中URL是包含兼容模板的git repo。
$ pod lib create JYPrivateLibTest0

在创建过程中,需要配置几个信息,如下:

Cloning `https://github.com/CocoaPods/pod-template.git` into `JYPrivateLibTest0`.
Configuring JYPrivateLibTest0 template.

------------------------------

To get you started we need to ask a few questions, this should only take a minute.

If this is your first time we recommend running through with the guide: 
 - https://guides.cocoapods.org/making/using-pod-lib-create.html
 ( hold cmd and double click links to open in a browser. )


# 私有库应用的平台
What platform do you want to use?? [ iOS / macOS ]  
 > iOS

# 私有库使用的编程语言
What language do you want to use?? [ Swift / ObjC ]  
 > Swift

# 是否需要在私有代码库工程中生成一个demo应用程序(项目),需要或不需要根据自己喜好选择(建议选择Yes,因为这样你可以随时查看你创建的库是否正确可用)
Would you like to include a demo application with your library? [ Yes / No ]  
 > Yes

# 是否需要使用测试框架,根据自己情况选择,我这里不需要
Which testing frameworks will you use? [ Quick / None ]  
 > None

# 是否需要做基于视图的测试,根据自己情况选择,我这里不需要
Would you like to do view based testing? [ Yes / No ]  
 > No

Running pod install on your new library.

Analyzing dependencies
Fetching podspec for `JYPrivateLibTest0` from `../`
Downloading dependencies
Installing JYPrivateLibTest0 (0.1.0)
Generating Pods project
Integrating client project

[!] Please close any current Xcode sessions and use `JYPrivateLibTest0.xcworkspace` for this project from now on.
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.

[!] Automatically assigning platform `ios` with version `9.3` on target `JYPrivateLibTest0_Example` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.

 Ace! you're ready to go!
 We will start you off by opening your project in Xcode
  open 'JYPrivateLibTest0/Example/JYPrivateLibTest0.xcworkspace'

To learn more about the template see `https://github.com/CocoaPods/pod-template.git`.
To learn more about creating a new pod, see `http://guides.cocoapods.org/making/making-a-cocoapod`.

关于以上配置问题的解释请参见Cocoapods - Using Pod Lib Create
注意:若是Objective-C平台会有不同的问题需要配置,这里以Swift为例。

至此本地私有代码库模板工程创建完成。
若选择了创建demo工程,本地私有代码库模板工程创建完成后,会自动打开demo工程。
pod lib create 工程名命令,会自动创建.podspec文件、README.md文件和LICENSE开源协议文件等。

  1. 终端cd 到PrivateRepository目录下,运行tree命令查看本地私有代码库模板工程目录结构,如下:
$ tree JYPrivateLibTest0 -L 2
JYPrivateLibTest0
├── Example                                 # demo工程文件夹
│   ├── JYPrivateLibTest0
│   ├── JYPrivateLibTest0.xcodeproj
│   ├── JYPrivateLibTest0.xcworkspace
│   ├── Podfile                             # demo的依赖描述文件
│   ├── Podfile.lock
│   ├── Pods                                # demo依赖的第三方库文件夹
│   └── Tests
├── JYPrivateLibTest0                       # 存放源代码和资源文件的文件夹
│   ├── Assets                              # 存放资源文件的文件夹
│   └── Classes                             # 存放源文件的文件夹
├── JYPrivateLibTest0.podspec               # 库的配置文件
├── LICENSE                                 # 开源协议,默认MIT
├── README.md                                             
└── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj

10 directories, 5 files

可通过brew 安装 tree,命令: $ brew install tree

文件夹目录结构,Example文件夹下是demo工程,JYPrivateLibTest0文件夹下是存放私有代码库源代码文件、资源文件等,如下图:

工程文件夹目录结构.png

Xcode打开的demo工程目录,如下图:
demo工程目录.png
  • 将远程端的私有代码库clone到本地目标目录下,然后添加几个必要的文件
  1. 通过Sourcetree软件或者终端Git命令,将远程端的私有代码库clone到本地目标目录下,此步骤不过多描述,git命令参考

  2. cd 到你clone的私有代码库工程目录下,在目录下添加.podspec文件到工程中,命令如下:

/// 以下三种方式都可以创建.podspec文件,选择其中一种创建即可
/// pod spec create [文件名(与工程名一致)]  
$ pod spec create JYPrivateLibTest0   
或者  
/// touch [文件名.podspec]  
$ touch JYPrivateLibTest0.podspec  
或者  
/// vim [文件名.podspec]  
$ vim JYPrivateLibTest0.podspec
  1. 添加README.md文件和LICENSE开源协议文件,可以从别的项目中copy过来,然后修改修改。如果你在第三步创建私有代码库的时候,选择创建了这两个文件,那这步请跳过。
    注意:LICENSE开源协议文件必须要有,因为Cocoapods不允许没有LICENSE开源协议文件的库到Cocoapods上。
六、添加自己封装的源代码、资源文件到工程目录下
  1. 在Xcode打开的demo工程目录下的pod中,找到ReplaceMe.swift文件,右击Show in Finder,查看源文件存放的真正目录位置。Classes文件夹存放源代码文件,Assets文件夹存放资源文件。

  2. 将自己封装的源代码文件、资源文件,分别放到Classes和Assets文件夹下即可。将无用的ReplaceMe.swift文件删除。
    添加后的目录,如下图:

    添加自己的源文件.png
    注意:如果你不想用系统自动帮你创建的Classes和Assets文件夹,那么你可以直接删掉,根据自己喜好重新创建/存放相关内容。切记不要忘记修改.podspec文件中相应的路径配置,否则会由于路径问题,验证的时候找不到对应的文件而验证失败。

七、配置工程中的.podspec文件

.podspec文件描述了Pod库的一个版本。一个索引库,随着时间的推移,将有许多的版本。它包括关于应该从何处获取源、使用什么文件、应用构建设置以及其他通用元数据(如其名称、版本和描述)的详细信息。
Specs Repo是GitHub上的存储库,其中包含所有可用pods的列表。每个库都有一个单独的文件夹,其中包含该pod可用版本的子文件夹。

  1. 在Xcode打开的demo工程中,找到Podspec Metadata文件夹下的工程名.podspec文件。如果没有demo工程,可以直接打开工程文件夹,然后找到.podspec文件,然后右键选择打开方式->文本编辑/Xcode,或者终端vim编辑等。

  2. 我的配置如下:

Pod::Spec.new do |s|
  s.name             = 'JYPrivateLibTest0' #工程名称
  s.version          = '1.0.0' # 版本号
  s.summary          = '这是一个私有测试库!' # 简短介绍
  s.homepage         = 'https://git.asd.net/pod/JYPrivateLibTest0' # 主页,这里要填写可以访问到的地址,不然验证不通过
  s.license          = { :type => 'MIT', :file => 'LICENSE' } # 开源协议
  s.author           = { 'JYanshao' => '你的邮箱地址' } # 作者信息
  s.source           = { :git => 'https://git.asd.net/pod/JYPrivateLibTest0.git', :tag => s.version.to_s } # 远程端私有代码库地址,这里不支持ssh的地址,验证不通过,只支持HTTP和HTTPS,最好使用HTTPS
  s.ios.deployment_target = '8.0' # 支持的平台及版本
  s.requires_arc = true # 是否使用ARC,如果指定具体文件,则具体的文件使用ARC
  s.source_files = 'JYPrivateLibTest0/Classes/**/*' # 源代码文件路径,**/*表示Classes目录及其子目录下所有文件,如果有多个目录下则用逗号分开,如果需要在项目中分组显示,这里也要做相应的设置
  s.swift_version = '4.0' # 项目中使用的Swift版本,多个用“,”隔开
end

.podspec文件中的配置参数说明,请参见Cocoapods-Podspec语法参考 或者 使用Cocoapods创建/管理公共库

八、更新demo工程,并编译运行demo,是否成功

终端运行$ cd Example/命令,到Example文件夹目录下,然后运行pod installpod update命令更新demo工程,并在Xcode中编译运行demo,看是否有错误,有错误及时修改,保证能运行成功。有错误存在会验证不通过。(若无demo工程可忽略此步骤)

注意:每次更改私有代码库工程中的相关信息后,都需要更新编译demo工程,保证无误。

九、通过Pod命令验证本地.podspec文件

该验证过程不会访问网络,且仅仅是一个验证不会添加文件到某文件夹下。

  • 终端下,运行pod验证命令,如下:
$ pod lib lint 
或者 
$ pod lib lint --allow-warnings  /// --allow-warnings参数:允许忽略警告

 -> JYPrivateLibTest0 (1.0.0)
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | [iOS] xcodebuild:  note: Planning build
    - NOTE  | [iOS] xcodebuild:  note: Constructing build description
    - NOTE  | [iOS] xcodebuild:  warning: Skipping code signing because the target does not have an Info.plist file. (in target 'App')

JYPrivateLibTest0 passed validation.

显示JYPrivateLibTest0 passed validation.表示通过验证。
注意:若验证过程中有错误,验证失败,修改后再次验证,直到通过验证。

  • 在验证过程中遇到的错误:
  1. 错误信息如下:
$ pod lib lint

[!] Unable to find a podspec in the working directory

原因:我所在的目录不是JYPrivateLibTest0工程目录下,而是Example目录下,验证时找不到要验证的.podspec文件,所以导致错误。应该cd到JYPrivateLibTest0工程目录下,然后进行命令验证。

  1. 错误信息如下:
$ pod lib lint

 -> JYPrivateLibTest0 (1.0.0)
    - WARN  | [iOS] swift: The validator used Swift 3.2 by default because no Swift version was specified. To specify a Swift version during validation, add the `swift_version` attribute in your podspec. Note that usage of the `--swift-version` parameter or a `.swift-version` file is now deprecated.
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | [iOS] xcodebuild:  note: Planning build
    - NOTE  | [iOS] xcodebuild:  note: Constructing build description
    - NOTE  | [iOS] xcodebuild:  warning: Skipping code signing because the target does not have an Info.plist file. (in target 'App')
    - NOTE  | xcodebuild:  warning: Swift 3 mode has been deprecated and will be removed in a later version of Xcode. Please migrate "App" to Swift 4.2 using "Convert > To Current Swift Syntax…" in the Edit menu. (in target 'App')
    - NOTE  | xcodebuild:  warning: Swift 3 mode has been deprecated and will be removed in a later version of Xcode. Please migrate "JYPrivateLibTest0" to Swift 4.2 using "Convert > To Current Swift Syntax…" in the Edit menu. (in target 'JYPrivateLibTest0')

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

仔细阅读这条警告(WARN),大致意思是:你没有指定使用的swift版本,验证器默认使用的是swift 3.2,可能会出现问题,希望你在验证期间指定Swift版本,请在podspec中添加“swift_version”属性。注意“--swift-version”参数或创建.swift-version隐藏文件的用法现在被弃用。
解决方案:在.podspec文件中添加s. swift_version = '4.0'即可。

  1. 错误信息如下:
    问题.png
    解决方案:打开Xcode,找到Preferences -> Locations -> Command Line Tools,选择一个Xcode版本即可,然后再验证。如下图:
    解决办法.png
十、通过Git命令,提交本地工程到远程端的私有代码库,并且添加tag
$ git add .  或者  $ git add -A
$ git status  # 显示代码状态
$ git commit -m 'Commit the private library for the first time'
$ git remote add origin https://git.asd.net/pod/JYPrivateLibTest0.git
$ git push -u origin master  # 执行成功,结果如下
Counting objects: 77, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (69/69), done.
Writing objects: 100% (77/77), 28.84 KiB | 3.60 MiB/s, done.
Total 77 (delta 17), reused 0 (delta 0)
To https://git.asd.net/pod/JYPrivateLibTest0.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

/// 添加tag标记
$ git tag  # 查看所有版本号
$ git tag -m 'First release' '1.0.0'   或者   $ git tag 1.0.0   或者   $ git tag -a '1.0.0' -m 'First release'
$ git push --tags   或者   $ git push --tag  # 执行成功,结果如下
Counting objects: 1, done.
Writing objects: 100% (1/1), 161 bytes | 161.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To https://git.asd.net/pod/JYPrivateLibTest0.git
 * [new tag]         1.0.0 -> 1.0.0

上传完代码后,别忘了为这次提交添加tag,否则下一步验证会有问题,找不到相应版本的.podspec文件。
注意:添加的tag版本号必须和.podspec文件中的s.version = '1.0.0'版本号一致。

Git教程
版本号-语义化版本控制规范

十一、通过Pod命令验证远程端私有代码库的.podspec文件

该验证过程检查的是远程端的repo和相关tag标记,需要网络。
终端运行命令如下:

$ pod spec lint   或者 $ pod spec lint --allow-warnings 

 -> JYPrivateLibTest0 (1.0.0)
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | [iOS] xcodebuild:  note: Planning build
    - NOTE  | [iOS] xcodebuild:  note: Constructing build description
    - NOTE  | [iOS] xcodebuild:  warning: Skipping code signing because the target does not have an Info.plist file. (in target 'App')

Analyzed 1 podspec.

JYPrivateLibTest0.podspec passed validation.

JYPrivateLibTest0.podspec passed validation.:通过验证。

pod spec lint命令,是用来验证.podspec文件及其他信息的规范。
注意:您的podspec应该在没有任何错误或警告的情况下通过。若验证过程中有错误,验证失败,修改后再次验证,直到通过验证。

  • 在验证过程中遇到的错误:
  1. 错误信息如下:
$ pod spec lint

 -> JYPrivateLibTest0 (1.0.0)
    - ERROR | [iOS] unknown: Encountered an unknown error ([!] /usr/bin/git clone https://git.asd.net/pod/JYPrivateLibTest0.git /var/folders/qt/d9rd9h7n2m3cb9014qph7xkm0000gn/T/d20190225-68380-po85y6 --template= --single-branch --depth 1 --branch 1.0.0

Cloning into '/var/folders/qt/d9rd9h7n2m3cb9014qph7xkm0000gn/T/d20190225-68380-po85y6'...
warning: Could not find remote branch 1.0.0 to clone.
fatal: Remote branch 1.0.0 not found in upstream origin
) during validation.

Analyzed 1 podspec.

[!] The spec did not pass validation, due to 1 error.

该问题是由于我还没有把代码提交到远程端的私有代码库,还有没有给代码库添加tag,就验证了,所以在验证的时候找不到对应版本下的.podspec文件。
解决方案:1)将本地工程提交到远程端私有代码库;2)给代码库添加tag。

十二、保存.podsepc文件并提交到远程端私有索引库

将.podspec文件提交到远程端私有索引库,运行命令如下:

$ pod repo push JYPrivateRepoTest0 JYPrivateLibTest0.podspec

Validating spec  # 1. 验证规范
 -> JYPrivateLibTest0 (1.0.0)
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | [iOS] xcodebuild:  note: Planning build
    - NOTE  | [iOS] xcodebuild:  note: Constructing build description
    - NOTE  | [iOS] xcodebuild:  warning: Skipping code signing because the target does not have an Info.plist file. (in target 'App')

Updating the `JYPrivateRepoTest0' repo  # 2. 更新repo

Your configuration specifies to merge with the ref 'refs/heads/master'
from the remote, but no such ref was fetched.

Adding the spec to the `JYPrivateRepoTest0' repo  # 3. 添加到本地repo

 - [Add] JYPrivateLibTest0 (1.0.0)

Pushing the `JYPrivateRepoTest0' repo  # 4. 提交到远程端的私有索引库

pod repo push [REPO] [NAME.podspec]此命令的执行经历了四个步骤:

  • 验证spec文件及其他信息的规范
  • 更新本地的repo索引库
  • 添加工程中的spec文件到本地的私有索引库中(会自动创建工程文件夹和版本文件夹)
  • 提交spec文件到远程端的私有索引库中

至此就完成了私有库的创建。

十三、检验1:通过pod search 私有库名命令,搜索自己的私有库

完成了私有库的创建。那么搜索一下我们的私有库吧,运行

$ pod search JYPrivateLibTest0

搜索结果如下:

-> JYPrivateLibTest0 (1.0.0)
   这是一个私有测试库!
   pod 'JYPrivateLibTest0', '~> 1.0.0'
   - Homepage: https://git.asd.net/pod/JYPrivateLibTest0
   - Source:   https://git.asd.net/pod/JYPrivateLibTest0.git
   - Versions: 1.0.0 [JYPrivateRepoTest0 repo]
(END)
十四、检验2:新建测试项目,pod '私有库',再次检查是否可引入,是否可用,及注意事项

新建一个工程,在Podfile文件中pod我们的私有库,pod 'JYPrivateLibTest0'
注意:1)引入私有库的时候,除了pod 'JYPrivateLibTest0' 外还需要通过source引入私有库对应的索引库地址,如:source 'https://git.asd.net/pod/JYPrivateRepoTest0.git' # 自己的私有索引库地址
2)若你的私有库还依赖了第三方公共库或者自己的其他私有库,第三方公共库或者自己的其他私有库对应的索引库地址也需要引入。

具体用法如下:

# Uncomment the next line to define a global platform for your project
platform :ios, '8.0'
use_frameworks!

# 引入自己的私有库/第三方库 对应的索引库地址
source 'https://git.asd.net/pod/JYPrivateRepoTest0.git' # 自己的私有索引库地址
source 'https://github.com/CocoaPods/Specs.git' # 公共索引库地址

target 'test2' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks

  # Pods for test2

  target 'test2Tests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'test2UITests' do
    inherit! :search_paths
    # Pods for testing
  end

pod 'JYPrivateLibTest0'

end

注意:source 后边是索引库(版本库)的地址,而不是代码库的地址。

若不引入索引库地址,在pod install时会报找不到你的私有库的错误,或者其他错误。

执行 pod install 命令时,会拉取远程 Podflie 中 source 标记的版本库到本地的 repos 文件夹中,然后在 版本库 中搜索我们pod ' JYPrivateLibTest0' 的 JYPrivateLibTest0.podspec 文件。根据 JYPrivateLibTest0.podspec 文件中描述的源码地址下载并整合到项目中。


中级

十五、对私有库的更新和管理
  • 修改已有模块/添加新模块,并更新私有代码库,这里以添加新模块为例。
  1. 将新模块添加到Classes文件夹,如下图所示:
    增加新模块到工程中.png
  2. 修改.podspec配置文件,升级版本号、添加新模块文件路径,其他信息不需要修改。
    修改内容如下:

s.version = '1.0.1'  # 升级版本号
s.source_files = 'JYPrivateLibTest0/Classes/**/*', 'JYPrivateLibTest0/Classes/Constant/*'  # 指定新模块地址,我的新模块和已有模块目录结构及文件类型一样,所以可以使用'JYPrivateLibTest0/Classes/**/*',不需要重新指定路径。这里只是个例子,看自己的情况是否需要添加相应的文件的路径。
  1. cd 到demo工程目录下,运行$ pod install命令更新demo工程,然后编译运行demo,看有没有错误,有错误则修改。

  2. 运行$ pod lib lint命令验证本地工程中的.podspec文件,若有错误修改后再验证,直到没有问题。

  3. 上传本地工程到远程端的私有代码库,命令参考上面的第十步,这里不再累述。

  • 错误:在设置tag标记的时候,由于忘记写“-m”参数,造成如下错误如下:
$ git tag '添加Constant模块,可根据路径单独pod' '1.0.1'
fatal: Failed to resolve '1.0.1' as a valid ref.
  1. 运行$ pod spec lint命令验证远程端私有代码库中的.podspec文件,若有错误修改后再验证,直到没有问题。

  2. 将新版本对应的.podspec文件,提交到远程端私有索引库和本地私有索引库的。
    至此完成私有库新模块的添加,修改私有库步骤亦如此。

  3. 检验1:搜索刚更改的私有库,搜索结果如下:

-> JYPrivateLibTest0 (1.0.1)
   这是一个私有测试库!
   pod 'JYPrivateLibTest0', '~> 1.0.1'
   - Homepage: https://git.asd.net/pod/JYPrivateLibTest0
   - Source:   https://git.asd.net/pod/JYPrivateLibTest0.git
   - Versions: 1.0.1, 1.0.0 [JYPrivateRepoTest0 repo]
   - Subspecs:
     - JYPrivateLibTest0/Constant (1.0.1)
(END)
  1. 检验2:更新实际项目中的pod,并测试使用。
十六、其他本地索引库管理命令
  1. 删除本地的一个私有索引库,命令如下:
$ pod repo remove JYPrivateRepoTest0
  1. 把删除的索引库再加回来,命令如下:
$ pod repo add JYPrivateRepoTest0 https://git.asd.net/pod/JYPrivateRepoTest0.git
  1. 如果我们要删除私有Spec Repo下的某一个podspec怎么操作呢?此时无需借助Cocoapods,只需要cd到~/.cocoapods/repos/JYPrivateRepoTest0目录下,删掉库目录,然后再将Git的变动push到远端仓库即可。
/// 删除库目录命令
cd ~/.cocoapods/repos/JYPrivateRepoTest0
rm -rf JYPrivateLibTest0

以上若有不妥请指正。

Swift/Objective-C-使用Cocoapods创建/管理公共库(高级用法)






参考文章

使用Cocoapods创建/管理公共库
iOS,制作属于自己cocoapods,(framework,bundle)
iOS开发之Cocoapods的使用与私有pod的制作
Build with CocoaPods

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容