如何制造私有库房

在做组件化操作之前有个有必要的操作,那就是如何制造私有库房,以及私有库房之间的引用问题。

私有库房 => 私有库房 => 私有组件

1、创立远端Spec库房

该库房的意图作用就是存储私有库spec索引

2、创立本地索引库并和长途索引库进行相关

  • 本地增加spec库房
pod repo add [Spec库房名] [Spec库房地址]

例如:pod repo add PrivatePod git@github.com:xxxx/PrivatePod.git

  • 查看
pod repo list
PrivatePod
- Type: git (master)
- URL:  git@github.com:xxxx/PrivatePod.git
- Path: /Users/aba/.cocoapods/repos/PrivatePod
  • 移除本地索引PrivatePod
pod repo remove PrivatePod

3、提交私有组件

  • 指定到组件目录
cd 组件文件途径
  • 增加标签
git tag -a 0.0.1 -m 'release 0.0.1'
  • 上传至远端
git push origin --tags
  • 提交索引文件至长途索引库
pod repo push [Spec库房名] [私有库索引文件名(.podspec)]

例如:pod repo push PrivatePod blockchain-ios.podspec –allow-warnings

疏忽正告在后面增加--verbose --allow-warnings

假如增加第三方库并包括静态包时需运用--use-libraries

选用CTMediator组件化时间,Swift发布组件需带上--use-modular-headers

例如:pod repo push PrivatePod KJCategories.podspec –verbose –allow-warnings –use-libraries –use-modular-headers

  • Podspec参数说明
--help      显现指定命令的协助横幅
--verbose   显现更多调试信息
--silent    显现所有信息
--allow-warnings   疏忽正告
--use-libraries    运用静态库装置
--use-modular-headers       OC与Swift混编有必要增加
--skip-import-validation    越过验证pod是否能够导入
--skip-tests     在验证期间越过构建和运转测验
--use-json       在将其推送到repo之前,将podspec转换为JSON
--swift-version=VERSION     在符号规范时应该运用的SWIFT_VERSION.这优先于规范中指定的Swift版别或. Swift版别文
  • 成功之后更新索引
pod setup

到此私有Pod与制造就差不多完成

Pod私有组件运用

  • 第一种:链接地址运用
pod 'blockchain-ios',:git => 'https://github.com/xxxx/blockchain-ios'
  • 第二种:更换Source源
source 'git@github.com:xxxx/PrivatePod.git'
  • Podfile文件内容大致如下:
# Uncomment the next line to define a global platform for your project
source 'https://github.com/CocoaPods/Specs.git'
source 'git@github.com:xxxx/PrivatePod.git' # 私有索引
platform :ios, '10.0' # 这个版别为所有CocoaPods里面`s.ios.deployment_target`支撑的最低版别
inhibit_all_warnings!
use_frameworks!
## 远端私有组件
def private_pods
  ## 私有组件库
  pod 'KJCategories'
end
## 本地组件
def modules_pods
  ## 发现模块
 pod 'WMDiscover', :path => '../WMModules/WMDiscover'
 ## 我的模块
 pod 'WMMine', :path => '../WMModules/WMMine'
 ## 钱包首页
 pod 'WMWallet', :path => '../WMModules/WMWallet'
 ## DApp
 pod 'WMDApp', :path => '../WMModules/WMDApp'
end
target 'MainProject_Example' do
  ## Root办理
 pod 'RootManager', :path => '../RootManager'
  ## 主tabBar
 pod 'AppMain', :path => '../AppMain'
 ## 路由组件
 pod 'Mediator', :path => '../Mediator'
 ## 公共部分
 pod 'FeatBox', :path => '../FeatBox'
 ## 数据库部分
 pod 'Database', :path => '../Database'
  private_pods
  modules_pods
end
target 'MainProject_Tests' do
  inherit! :search_paths
end

Pod快捷上传至私有库

  • 正常咱们上传至私有库都是经过
pod repo push [Spec库房名] [私有库索引文件名(.podspec)]

  • 由于上述方法比较费时间,能够选用如下方法:

    • 确保 podspec 文件正确,pod lib lint --allow-warnings假如坚信podspec没问题,亦可省掉该过程
    • 克隆私有库房至本地,git clone 库房地址
    • 将要上传库 podspec 文件按正确格局要求放入私有库房
      • Ex: 版别0.0.2则文件夹名命名为0.0.2
    • 然后正常上传提交代码至远端库房
    • 增加本地标签,git tag -a 0.0.1 -m 'release 0.0.1'
    • 上传标签至远端,git push origin --tags
    • 最终更新本地私有库 repo 索引,pod repo update PrivatePod
  • 大致层级结构如下:

ios 组件化之Cocoapods私有库详解以及问题解决方案
ios 组件化之Cocoapods私有库详解以及问题解决方案

常见错误总结

  • 1、报错:remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.

    • 解决方案:将 KJCategories.podspec 文件的 Source 更换为SSH地址
    s.source = {
      :git => 'git@github.com:Condy/KJCategories.git', 
      :tag => s.version.to_s 
    }
    
  • 2、报错:Failed to open TCP connection to github.com:443

    • 解决方案:在Safari浏览器翻开https://github.com/CocoaPods/Specs.git
  • 3、报错:Your configuration specifies to merge with the ref ‘refs/heads/master’ from the remote, but no such ref was fetched.

    • 解决方案:由于[Spec库房]是个空库房,需要在里面随意放点东西,例如README.md
  • 4、报错:Specs satisfying the KJCategories dependency were found, but they required a higher minimum deployment target.) during validation.

    • 原因分析:三方依靠库KJCategories支撑的最低版别s.ios.deployment_target = '9.0',而本库的podspec文件中指定的最低支撑版别低于该三方依靠库
    • 解决方案:将本库的最低支撑版别修改至大于或等于三方依靠库

最终

  • 再附上一个开发加速库KJCategoriesDemo地址喜爱的老板们就点个星吧,别犹豫了。

✌️.