Cocoapods プライベート ライブラリの作成と使用

理由

チームの拡大とプロジェクトの増加に伴い、企業レベルのプライベート ライブラリは不可欠であり、その中でも基本的なライブラリの構築が特に重要です。

名詞

repo: リソース ライブラリ。通常、リポジトリの略語でインデックス ライブラリと呼びます。ポッドには、マスターだったトランクが付属しています。今日は、独自のインデックス ライブラリを作成します。インデックス ライブラリには、多くの podspec ファイルを保存できます。 、各ファイルはライブラリを取得できます。

podspec: スペック ファイルとも呼ばれ、ライブラリ設定ファイルに似ています。ライブラリの名前、バージョン、ソース アドレス、ローカル パスなどが含まれます。Pod は設定に従ってライブラリ ファイルをプルします。

プルプロセス

共通コマンド

//1. 查看本地索引库
pod repo
// 2.本地索引库的名字 远程索引库的地址, 在podfile文件里添加source也会自动添加
pod repo add XXKitSpec https://XXXXXX.KitSpec
// 3.在find中查看
// /Users/xxx/.cocoapods/repos
// 4. 想删除,可以手动删除对应的文件夹,也可以使用命令
pod repo remove XXKitSpec


// 验证本地仓库和podspec是否正确 --allow-warnings跳过警告
pod lib lint --allow-warnings
// 如果有遇到验证问题,使用跳过验证也可以
pod lib lint --skip-import-validation
// 验证本地仓库和远程仓库 
pod spec lint --allow-warnings
// 验证通过,将私有仓库和私有索引仓库关联起来 前面是本地Repo名字 后面是podspec名字
pod repo push XXKitSpec XXKit.podspec --allow-warnings 

// 更新所有仓库集
pod repo update
// 只更新特定的仓库集
pod repo update TestPrivatePodSpecs

ステップ

  1. プライベートインデックスライブラリを作成する

会社のウェアハウスにインデックス ウェアハウスを作成します。プライベートを選択するには空のプロジェクトのみが必要です

ターミナルで次のコマンドを使用して、HTTPS アドレスをコピーします。

pod repo add 索引库名字 索引库地址 

ポッド リポジトリ ディレクトリを確認すると、プライベート インデックス ライブラリがすでに存在し、作成されています。

  1. プライベートコンポーネントライブラリを作成する

  1. コンポーネントライブラリプロジェクトの作成

プライベート Pod コンポーネント ライブラリを作成し、次のコマンドを実行します。

pod lib create 组件名字

これらのオプションを入力すると、プロジェクトが自動的に開きます

  1. コンポーネントコードを追加する

プロジェクトを見つけて、ReplaceMe ファイルを削除し、カプセル化する必要があるファイルを Classes ファイルにコピーします。

cd でサンプル ファイルに移動し、pod install を実行すると、プロジェクト内のポッドが自動的にインストールされます。

  1. .podspecを変更する

公式 Web サイトにパラメーターの説明が記載されているので、さらに詳しく知りたい場合は、ここにアクセスして参照してください。

  1. コードと .podspec ファイルを検証する

xx.podspec が存在するフォルダーに cd し、pod lib lint --allow-warnings を実行します。このコマンドは、ローカル インデックス ファイルがプッシュ ルールに準拠しているかどうかを確認します。成功すると、KYKit が検証に合格したことが印刷されます。

ポッド lib lint パラメータ分析:

--sources: 参照する必要がある仕様。デフォルトでは、マスターのみに依存します。現在のポッドがプライベート ライブラリに依存している場合、対応する仕様を含める必要があります。そうしないと、対応するライブラリが見つからないという問題が発生します。報告されます。パラメータには、ローカル仕様の名前または git アドレスを指定できます。

--allow-warnings: 警告がある場合、テストは失敗します。警告が重要でない場合は、警告を追加してテストを通過させることができます。

--verbose:打印详细的检验过程

--use-libraries:⼯程或者依赖⾥⾯了静态库(*.a⽂件)或者是framework

备注:

pod lib lint 表示在本地校验索引文件

pod spec lint 表示在本地和远程都校验索引文件

  1. 关联远程组件库

cd 到上层有.git的文件,关联远程

在公司的 git 服务器上面创建组件的 git 远程仓库,复制https地址,和上面索引仓库一样

在终端执行命令:

git remote add origin 复制的https地址
git add .
git commit -m "第一次提交版本为0.0.5"
git push origin main
git tag 0.0.5
git push origin 0.0.5

本地组件工程已经和远程组件库关联

  1. 关联索引库和组件库

上面已经验证通过,已经打了tag且已经推送的远程组件仓库,剩下的就是把私有组件仓库和私有索引仓库关联,执行命令:

pod repo push KYRepos KYKit.podspec --allow-warnings

上面命令对 KYKit.podspec 文件做了两个操作:一个是将其推送到私有的远程索引仓库,可以去公司的 git 上面 KYRepos 索引仓库中查看;另一个是将其 copy 到私有的本地索引仓库,这个可以去目录:/Users/admin/.cocoapods/repos/KYRepos 下查看到。

上传成功,使用pod repo update更新本地仓库,到这里就完成了基本的私有库,可以使用pod search KYKit查看

  1. 使用

私有库的使用一定要加上私有索引库的远程地址

platform :ios, '9.0'

# 如果有依赖第三方库,可以加上cocoapods的索引库地址
source 'https://cdn.cocoapods.org/'
# 私有库地址
source 'https://code.juwan-inc.com/juwan/lolly/lolly_ios_com/KYRepos.git'

target 'KYModuleDemo' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for KYModuleDemo
  pod 'KYKit', '~> 0.0.3'
#  pod 'SDWebImage'
#  pod 'MJExtension' , '~> 3.4.1'
#
  target 'KYModuleDemoTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'KYModuleDemoUITests' do
    # Pods for testing
  end

end

注意事项

更新版本

修改代码后, 在.podspec文件修改s.version = '0.0.5'版本号,cd到.podspec文件目录下,执行命令:

git add .
git commit -m '添加0.0.5版本'
git push
git tag 0.0.5 -m '版本描述'
git push --tags

上面就完成了代码更新和tag添加,可以去仓库看下tag是否更新;

下面就是验证代码和.podspec规范,执行命令:

pod lib lint --allow-warnings

通过验证则通知索引仓库,添加了新的版本,执行命令:

// KYRepos:是索引库名字,KYKit.podspec是我们要推送的文件
pod repo push KYRepos KYKit.podspec --allow-warnings 

通过验证后,就可以和其他库一样更新版本了。

多层级目录:subspec

有两种情况会使用这个,一个是我们想把不同职责的代码分装进不同的文件夹下,一种是我们想把一个大库拆分成多个子库。

建议把pod默认的 Classes 文件删掉,直接在KYKit文件下存放自定义的文件夹,

在增加多个一级目录时,验证找不到文件,单目录没有出现类似问题,大家可以看下结构:

    # 文件的配置路径
    s.source_files = 'KYKit/KYKit.h'
    # 头文件的配置路径
    #  s.public_header_files = 'KYKit/KYKit.h'

    # Base
    s.subspec 'Base' do |ss|
      ss.source_files = 'KYKit/Base/KYKitMacro.h'

      ss.subspec 'Foundation' do |sss|
        
        sss.source_files = 'KYKit/Base/Foundation/*'
      end

      ss.subspec 'UIKit' do |sss|
        # 本地依赖
        sss.dependency 'KYKit/Base/Foundation'
        
        sss.source_files = 'KYKit/Base/UIKit/*'
      end

      ss.subspec 'Utils' do |sss|
        sss.source_files = 'KYKit/Base/Utils/*'
      end
    end
    
    # WebImage
    s.subspec 'WebImage' do |ss|
        
      ss.source_files = 'KYKit/WebImage/*'
      
    end

文件目录

'xxx.h' file not found 文件找不到

在组件工程里创建文件一定要看下文件权限等级,如果想在外部使用,放在header里,文件必须Public,否则就会报这个错误,我们打静态库也会用到这个;位置:在xcode下,选中文件,开启右边工具栏Target Membership,在对应target下点击右边会有显示,如图

如果要在外部显示必须选择Public。

库的依赖

写的组件一般有三种依赖,系统库依赖、第三方库依赖、自己其他子subspec的依赖;

  1. 系统库依赖

这个简单,例如我们使用的UIKit、Foundation、CommonCrypto,这都是基础依赖,我这边测试的结果是不写也不会报错,在podspec文件里填写如下

# 依赖库系统库
s.frameworks = 'UIKit', 'CoreFoundation', 'CommonCrypto'
  1. 第三方库依赖

我们经常会做一些第三方库二次封装,好处我就不多说了,这个时候我们就需要依赖第三方库,在podspec文件里填写如下

ss.subspec 'Foundation' do |sss|
   # 三方库依赖
   sss.dependency 'MJExtension', '~> 3.4.1'
        
   sss.source_files = 'KYKit/Base/Foundation/*'
end

如果有多个子目录,最好在依赖目录下加上依赖库,尽量不要在外层,上面我就是在Foundation这个目录下有依赖MJExtension,如果没有子目录,改成单s,把s.dependency 'MJExtension', '~> 3.4.1' 放到 s目录下就行了。

  1. 自己其他子subspec的依赖

这个问题我搞了很久,我一直认为自己写的虽然分成了多个目录,但是在一个header文件引用,测试了很多次,看了AF的podspec,只能老实的加上子集文件路径依赖,最后问题解决。

ss.subspec 'UIKit' do |sss|
  # 本地依赖
  sss.dependency 'KYKit/Base/Foundation'
        
  sss.source_files = 'KYKit/Base/UIKit/*'
end

如果有多个子subspec,在subspec引用其他subspec下的文件,则必须添加本地subspec依赖。

持续更新

...

おすすめ

転載: blog.csdn.net/PianZhideNanRen/article/details/129626419