热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS–封装的工具类上传到cocoapods

记录一次上传文件到pod的初级体验iOS常用第三方管理工具cocoapods,很多人都在用,也确实方便。那么如何将自己的代码发布到coc

记录一次上传文件到 pod 的初级体验

iOS常用第三方管理工具cocoapods,很多人都在用,也确实方便。那么如何将自己的代码发布到cocoapods呢,作为萌新就baidu、google呗。
当然,作为萌新,尝试的时候肯定都是坑啊,要不然咋是萌新呢。
ps :诀窍–尝试的时候尽可能精简,这样容易过,一次一次增加难度,这样出现问题的时候就不会太多,解决起来也不会有砸电脑的冲动^_^

使用pod模板开发项目 关于pod lib create

pod lib create projectName

手动创建podspec

  • 新建项目,提交到GitHub或者其他代码托管网站,有下载链接就行(后边需要用到托管平台的代码tag或者commit 作为需要发布的版本代码)
    • 我查看过一些其他人写的,会把要上传的文件提到项目根目录,或者复制一份,但是我觉得比较麻烦,还是按照正常的项目处理的,也是可以的,木有问题
  • 准备 podspec 文件
    • 打开终端,cd到项目当前跟目录,执行pod spec create xxxname(xxxname为项目名称)
    • 具体内容

Pod::Spec.new do |s| s.name = "BSAFNetWorking" s.version = "0.1.0" s.summary = "AFNetWorking changed BSAFNetWorking" s.description = "blackstar_lang@163.com" } s.platform = :ios, "8.0" s.source = { :git => "https://github.com/BlackStarLang/BSAFNetWorking.git", :tag => s.version } s.source_files = "BSAFNetWorking/SQBaseApi/BSAFNetwroking.h" s.public_header_files = "BSAFNetWorking/SQBaseApi/BSAFNetwroking.h" s.framework = "UIKit" s.dependency "AFNetworking", "~> 3.0" s.license= { :type => "MIT", :file => "LICENSE" } s.subspec 'BSApi' do |ss| ss.source_files = "BSAFNetWorking/SQBaseApi/BSApi/*" ss.framework = "UIKit" end

通过命令行创建的文件是带有很多注释的,不过很多我都用不上,为了看的清楚,我把没用的都删了。如果想看所有的,可以看看具体的项,以便于增加或修改spec项

spec文件中的每行代码的意思差不多翻译就可以了

  • 划重点

    1. 注意示例汇中 s.description 的格式,格式不对会报错(当然, s.description 整行注释掉也可以)
    2. s.license 必须要有,我是到MIT官网找的,也可以是 .md & .txt格式的,或者其他协议 ,协议内容如下(只需要改变第一行版权所有人信息即可,其他不用动),但是可能出现发布后出现 warning的问题,说找不到LECENSE,解决办法就是在GitHub或者gitlab上都可以直接在仓库中新建,然后可以选择很多种种类的,我都是选择MIT,我将gitlab或github上创建的开原协议引用到此处就没有再报警告
  • 协议如下

Copyright (c) 2018 BlackStar Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

  1. s.dependency 是你项目需要依赖的第三方,比如说我的这个是封装的AFNetworking ,肯定需要依赖AFNetworking的,所以,依赖一个写一个,依赖多个写多个,写法基本和podfile里一样,可以不加版本号,但是不能指定代码源,代码源都是在podfile里去声明的 ,如下:

s.dependency "AFNetworking" s.dependency 'SDWebImage','~> 4.1.0'

  1. s.framework 是依赖的系统框架,我这里只用了 UIKit。
    如果依赖多个系统框架,可以一行搞定,和dependency是不一样的,dependency是不支持多个依赖一行搞定的,注意 frameworks 是带有s的哦,这个和依赖单个框架是不一样的。

s.frameworks = "UIKit","UIFoundation"

5.特别注意 s.source_files 坑很多,一定要搞准你要上传文件的目录位置,要不然一遍一遍过不去
搞不准目录写的对不对点击这里看demo
我们的pod文件可能是有多个文件夹的,如果不特殊处理,上传后的文件是没有分目录的,和我们工程内分的目录没关系,都在一个文件夹里。想要带有目录结构需要将每一个文件夹设置成子模块,具体写法如下

Pod::Spec.new do |s| s.name = "BSAFNetWorking" s.version = "0.1.0" s.summary = "AFNetWorking changed BSAFNetWorking" s.description = "blackstar_lang@163.com" } s.platform = :ios, "8.0" s.source = { :git => "https://github.com/BlackStarLang/BSAFNetWorking.git", :tag => s.version, :submodules => true} s.source_files = "BSAFNetWorking/SQBaseApi/BSAFNetwroking.h" s.public_header_files = "BSAFNetWorking/SQBaseApi/BSAFNetwroking.h" s.framework = "UIKit" s.dependency "AFNetworking", "~> 3.0" s.license= { :type => "MIT", :file => "LICENSE" } //子模块 s.subspec 'BSApi' do |ss| ss.source_files = "BSAFNetWorking/SQBaseApi/BSApi/*" ss.framework = "UIKit" end //子模块 s.subspec 'BSApi1' do |ss| ss.source_files = "BSAFNetWorking/SQBaseApi/BSApi1/*" ss.framework = "UIKit" end end

看好几个end哦。

注意 :每个subspec 对应一个end,如果不想将组件发布出来供大家使用,只是想公司内部使用,可以将podspec放在 自己的项目网络地址上,比如说在公司的 gitlab 上,创建一个项目专门用来管理podspec
创建后复制仓库地址,终端执行命令,对应命令:

pod repo push 你的仓库地址 xxx.podspec --allow-warnings

发布完成后,需要用的时候,需要在podfile里声明你的podspec仓库地址

source 'https://xxxxx.git'

然后你就可以下载使用了,如果你是用的非GitHub进行托管的(如gitlab),pod search 是搜不到的,因为他是私有的(如果想开源给大家,那就上github,然后发布到开源库)

参考demo

  • podspec 文件准备好后,检查文件合法性pod spec lint xxxx.podspec --allow-warnings 需要加 –allow-warnings,要不然基本过不去
    可能报错 第三方引入有问题,让你用#import的方式引入,引入的时候主要要带有 文件路径引入,如引入AFNetworking需要这么写#import 不能写#import 或者 #import "AFNetworking.h"
    如果改完代码 还是报这个错误,需要清理缓存 :

pod cache clean --all //然后在 pod spec lint xxx.podspec

如果对自己有信心也可以不走lint的步骤,直接发布

  • 这一步过了就说明代码已经木有问题了,那么如何提交到网络供人下载使用呢?

//终端执行 pod trunk me //检查是否有账户 //没有则注册,邮箱地址需要真实有效,需要接收邮件验证,好像需要翻墙,不大记得了 pod trunk register 邮箱地址 "昵称" //例子: pod trunk register blackstar_lang@163.com "BlackStar"

  • 注册成功后发布

pod trunk push xxxx.podspec --allow-warnings

  • 发布成功后,pod search xxxx 试试可不可以搜索出来,如果确定发布成功了,但是搜不出来,需要重置 pod的searchindex

cd ~/Library/Caches/CocoaPods/ //然后执行 rm -rf search_index.json

重新 pod search 就可以了

有的时候我们在pod 上发布了,但是又不想发布了,想要发布到私有库上,那么我们可以执行以下操作,删除公共库中的组件

//查看自己的邮箱,和发布过的公共库 pod trunk me //然后执行命令删除组件版本 pod trunk deprecate 组件名称 版本号 //例子: pod trunk delete BSAFNetworking 0.0.1 //然后更新本地repo pod repo update 然后发布到自己的库 pod repo push xxxx地址 xxxx.podspec --allow-warnings

这就是此次发布pod的全过程了,如果你也遇到了问题,可以留言共同研究哦


补充报错解决方案
xcrun: error: unable to find utility “simctl”, not a developer tool or in PATH
) during validation.

解决办法:将Xcode的line Tools 打开设置上即可

iOS - 封装的工具类上传到cocoapods
偏好设置.png


推荐阅读
  • 本文探讨了在 PHP 的 Zend 框架下,使用 PHPUnit 进行单元测试时遇到的 Zend_Controller_Response_Exception 错误,并提供了解决方案。 ... [详细]
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • 本文档旨在提供C语言的基础知识概述,涵盖常量、变量、数据类型、控制结构及函数定义等内容。特别强调了常量的不同类型及其在程序中的应用,以及如何正确声明和使用函数。 ... [详细]
  • 本文详细介绍了在MyBatis框架中如何通过#和$两种方式来传递SQL查询参数。使用#方式可以提高执行效率,而使用$则有助于在复杂SQL语句中更好地查看日志。此外,文章还探讨了不同场景下的参数传递方法,包括实体对象、基本数据类型以及混合参数的使用。 ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • 本文详细介绍了如何使用Linux下的mysqlshow命令来查询MySQL数据库的相关信息,包括数据库、表以及字段的详情。通过本文的学习,读者可以掌握mysqlshow命令的基本语法及其常用选项。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 深入理解iOS中的链式编程:以Masonry为例
    本文通过介绍Masonry这一轻量级布局框架,探讨链式编程在iOS开发中的应用。Masonry不仅简化了Auto Layout的使用,还提高了代码的可读性和维护性。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 编程解析:CF989C 花朵之雾 (构造算法)
    本文深入探讨了CF989C '花朵之雾'问题的构造算法,提供了详细的解题思路和代码实现。 ... [详细]
  • Hadoop集群搭建:实现SSH无密码登录
    本文介绍了如何在CentOS 7 64位操作系统环境下配置Hadoop集群中的SSH无密码登录,包括环境准备、用户创建、密钥生成及配置等步骤。 ... [详细]
  • IntelliJ IDEA配置微服务启动显示
    通过编辑IntelliJ IDEA的workspace.xml文件,可以实现微服务启动对象的显示。具体步骤包括定位并修改workspace.xml中的RunDashboard部分。 ... [详细]
  • 版权所有 © 2015 CSDN博客,保留所有权利。本文档详细介绍了使用C语言编写计算圆柱体表面积的程序,包括代码实现及运行结果。 ... [详细]
  • 本文总结了在多人协作开发环境中使用 Git 时常见的问题及其解决方案,包括错误合并分支的处理、使用 SourceTree 查找问题提交、Git 自动生成的提交信息解释、删除远程仓库文件夹而不删除本地文件的方法、合并冲突时的注意事项以及如何将多个提交合并为一个。 ... [详细]
  • 使用REM和媒体查询实现响应式布局
    本文介绍如何利用REM单位和媒体查询(Media Queries)来创建适应不同屏幕尺寸的网页布局。通过具体示例,展示在不同屏幕宽度下如何调整页面元素的样式。 ... [详细]
author-avatar
king1994
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有