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

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

如何制作私有仓库


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

私有仓库 => 私有仓库 => 私有组件


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

大致层级结构如下:

1.png

1.png


常见错误总结


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地址 🎷喜欢的老板们就点个星吧,别犹豫了。🌟✌️.

相关文章
|
1月前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
77 7
|
2月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台解决方案
【9月更文挑战第27天】在移动应用开发的广阔天地中,安卓和iOS两大操作系统如同双子星座般耀眼。开发者们在这两大平台上追逐着创新的梦想,却也面临着选择的难题。如何在保持高效的同时,实现跨平台的开发?本文将带你探索跨平台开发的魅力所在,揭示其背后的技术原理,并通过实际案例展示其应用场景。无论你是安卓的忠实拥趸,还是iOS的狂热粉丝,这篇文章都将为你打开一扇通往跨平台开发新世界的大门。
|
3月前
|
测试技术 开发工具 iOS开发
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
这篇文章是iOS自动化测试方案的第三部分,介绍了在没有MacOS系统条件下,如何使用WDA(WebDriverAgent)结合Python客户端库facebook-wda和tidevice工具,在Windows系统上实现iOS应用的自动化测试,包括环境准备、问题解决和扩展应用的详细步骤。
256 1
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
|
3月前
|
前端开发 开发工具 Android开发
探索安卓与iOS应用开发:跨平台解决方案的崛起
【8月更文挑战第27天】在移动设备日益普及的今天,安卓和iOS系统占据了市场的主导地位。开发者们面临着一个重要问题:是选择专注于单一平台,还是寻找一种能够同时覆盖两大系统的解决方案?本文将探讨跨平台开发工具的优势,分析它们如何改变了移动应用的开发格局,并分享一些实用的开发技巧。无论你是新手还是资深开发者,这篇文章都将为你提供有价值的见解和建议。
|
3月前
|
存储 iOS开发 Perl
ios-解决报错-CocoaPods could not find compatible versions for pod “xxx“
ios-解决报错-CocoaPods could not find compatible versions for pod “xxx“
174 2
|
3月前
|
前端开发 JavaScript Android开发
探索Android和iOS开发中的跨平台解决方案
【8月更文挑战第1天】随着移动应用市场的不断扩张,开发者面临一个共同的挑战——如何高效地为多个平台创建和维护应用程序。本文将深入探讨跨平台开发工具,特别是Flutter和React Native,通过比较它们的优势和限制,并辅以实际代码示例,揭示这些工具如何帮助开发者在保持高性能的同时,实现代码的最大化重用。
|
3月前
|
前端开发 JavaScript Android开发
安卓与iOS开发中的跨平台解决方案
【8月更文挑战第24天】在移动应用开发领域,安卓和iOS两大平台占据了主导地位。然而,为这两个平台分别开发和维护应用会带来额外的时间和成本。本文将探讨跨平台开发的概念、优势以及流行的跨平台框架,如React Native和Flutter,并分析它们如何解决多平台开发的挑战。
|
6月前
|
存储 Web App开发 Android开发
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
647 1
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
|
6月前
|
iOS开发
iOS使用.framework类型的静态库
iOS使用.framework类型的静态库
44 1
|
6月前
|
开发工具 iOS开发
iOS制作.framework静态库
iOS制作.framework静态库
62 1