Swift 上传cocoapods

0 在写下面的内容之前,本来想直接用swift3.0上传cocoapods,可是发现之前在swift2.3的时候上传没有问题的,在swift3.0都存在问题了,加上自己的项目也比较忙,就没有继续往下找原因,在此就把3.0以前踩过的坑和解决方案写在这里,希望能帮助更多的朋友,好了,不废话了,开始!

1 你要在github上新建仓库

Swift 上传cocoapods_第1张图片
屏幕快照 2016-12-02 08.36.26.png
  • 具体怎么建在这我不做详细介绍了,很简单,如果实在不会可以度娘或者,里面有许多,下面是我的目录结构
Swift 上传cocoapods_第2张图片
DCE17A9F-0725-4291-8297-762EF53DD5F7.png

2 然后把仓库克隆到本地,会看到下面的截图

git clone https://github.com/CoderST/STRowFollowLayout_SWIFT.git dao

屏幕快照 2016-12-02 08.39.23.png

3 然后输入下面的命令 STRowFollowLayout_Swift换成你自己的名称

pod spec create STRowFollowLayout_Swift

  • 这个时候你会在当前目录下多出一个文件
屏幕快照 2016-12-02 08.42.02.png

4 最好下载个Sublime程序(也可以是别的编辑器,可以百度自己找一下),专门用于编辑podspec(因为直接用系统的编辑器打开被坑过,(。・∀・)ノ゙)

Swift 上传cocoapods_第3张图片
屏幕快照 2016-12-02 08.43.24.png

5 用sublime编写下面的代码,注意要写清楚,不然会报错

s.name:名称,**pod search name** 的 name
s.version:版本号
s.ios.deployment_target:支持的pod最低版本
s.summary: 简介
s.homepage:项目的地址
s.license:开源许可
s.author:作者信息,表示格式为 { "[作者名]" => "[邮箱]" }
s.source:项目的git代码仓库的地址,如格式为:{:git => "[git代码仓库地址]", tag => "[版本号]"}
s.frameworks:表示需要的框架,如'Foundation',多个框架之间以英文逗号分隔。
s.source_files:别人通过你的pod引用文件的层级目录。如我要引用FGGDownloader文件夹下的.h和.m文件,则可以写成'FGGDownloader/*.{h,m}'
s.requires_arc: 是否支持ARC
s.dependency:依赖的项目,如有多个,则写多行#表示注释文
Swift 上传cocoapods_第4张图片
屏幕快照 2016-12-02 08.45.05.png
有时候验证会报一大堆错误,原因是 xcodebuild 编译时使用的 Swift 版本和你代码当前使用的版本可能不一样,
  • 这时候就需要指定一下 Swift 版本,指定方法是在 podspec 同目录下创建一个 .swift-version 的文件,在里面写上 Swift 版本即可,例如 4.0 ,
  • 或者 : 在终端输入以下命令也可以创建,创建完以后在执行 pod lib lint 就可以编译通过了。命令如下
    • echo "4.0" >> .swift-version

6 编写后记得git一下

git add .
git commit -m"改动的内容"
git push

7 给项目打tag

  • 在此之前确定一下自己的podspec文件里的版本最好和tag一样
git tag '0.0.1' 
git push --tags

8 此部非常重要,如果错误会报错误(经常会出现的错误-第八步骤,出现错误慢慢调),此处的STRowLayout.podspec改为你自己的podspec

pod spec lint STRowLayout.podspec --allow-warnings

Paste_Image.png
  • 看到上面的截图,恭喜你,说明你已经验证通过啦!!!
RowFayout git:(master) pod spec lint STRowLayout.podspec 
-> STRowLayout (1.0.0) 
- ERROR | file patterns: The `source_files` pattern did not match any file.
Analyzed 1 podspec.
[!] The spec did not pass validation, due to 1 error.
  • 如果出现的不是error都没有问题,像我下面出现的这个问题,就是当时问了省事,没有对上传的文件进行描述,所以就出现了一个⚠️

  • 如果出现下面的错误,是因为你没有创建一个工程,在当前git管理下创建一个工程即可

Failed to locate a valid instance of CoreSimulatorService in the bootstrap. Adding it now.

Swift 上传cocoapods_第5张图片
屏幕快照 2016-12-02 08.12.15.png
  • 但是我在此步骤的时候一直报一个错误,具体原因是为什么没有找到,找到了解决办法,截图如下
    echo 3.0 > .swift-version
Swift 上传cocoapods_第6张图片
屏幕快照 2016-12-02 08.14.37.png

还有一种原因是:执行pod lib lint XXX --verbose 查看具体原因,如果有 ** BUILD FAILED **字样,则是当前私有库文件编译时有语法错误或需要第三方类库,可执行
pod lib lint --quick 命令不让编译源文件。

9 如果上面一部通过,恭喜你 已经进行一大半了,下面就是 - 注册trunk(此处的邮箱和后面的名称都要改成你自己的,要和github上一致)

pod trunk register [email protected] 'CoderST'

等一下,你会在你注册的邮箱里收到一份邮件,点击链接验证一下OK就行了,然后在进行第10步操作

10 查看自己注册信息

pod trunk me

Swift 上传cocoapods_第7张图片
屏幕快照 2016-12-02 08.58.48.png

11 提交

pod trunk push STRowFollowLayout_Swift.podspec --allow-warnings

  • 此步骤需要一点耐心➕网络情况,有内心网络差你会看到下面情况
    [!] There was an error pushing a new version to trunk: getaddrinfo: nodename nor servname provided, or not known
    • 不要着急,这个不是你的配置文件或者命令不正确,都是你网速惹的祸,多试几个这个命令就应该能好
  • 看到下面的截图 恭喜你已经成功了
Swift 上传cocoapods_第8张图片
屏幕快照 2016-12-02 09.02.44.png

12 别慌恭喜和草泥马,以为成功了 在pod search STRowFollowLayout_Swift会报错

  • 如果报错是下面的 原因是不能重复提交,如果需要再次提交,需要重新打tag和编辑STCustomWidthLayout.podspec里的文件,把他们的tag都要统一.

[!] Unable to accept duplicate entry for: STCustomWidthLayout (0.0.1)`

屏幕快照 2016-12-02 09.04.24.png
  • 加上下面这个命令就好了
    rm ~/Library/Caches/CocoaPods/search_index.json

13 试一把 果然OK

Swift 上传cocoapods_第9张图片
屏幕快照 2016-12-02 09.06.14.png

14 晴天霹雳了,草,都已经pod上去了,但是在新建项目pod下来自己的框架后,在viewController中import自己的框架也是没有问题的 但是但是... 在初始化的时候尽然不行,错误提示❌cannot call value of non-function type

  • 解决 : 后来办法,漫天百度 谷歌,没有好到好的解决方案,于是就下载了SnapKit大神的框架,看看他们的方法与自己的有什么不同,后来我就在自己的类前面加上了public(swift2.3版本,3.0要加上open)
部分代码
代理部分
@objc public protocol STCustomWidthLayoutDelegate : class {
    // Variable height support
     func stLayoutWidthtForRowAtIndexPath(stLayout : STCustomWidthLayout, indexPath : NSIndexPath)->CGFloat
    // Height of Item
    @objc optional func heightForRowAtIndexPath(stLayout : STCustomWidthLayout)->CGFloat
    // Space of Colums
    @objc optional func layoutcolumnSpacingStLayout(stLayout : STCustomWidthLayout)->CGFloat
    // Space of Row
    @objc optional func layoutRowSpacingStLayout(stLayout : STCustomWidthLayout)->CGFloat
    // TOP DOWN LEFT RIGHT
    @objc optional func layoutEdgeInsetsStLayout(stLayout : STCustomWidthLayout)->UIEdgeInsets
}

public class STCustomWidthLayout: UICollectionViewFlowLayout {
    
    // MARK:- 变量
    
    /** 记录当前是第几行 */
    private var stCurrentRow : Int = 0
    /** 每一个item左边的的位置 */
    private var stItemLeft : CGFloat = 0
    /** 代理 */
    weak public var delegate : STCustomWidthLayoutDelegate?
    
    /** 边缘间距 */
    private var stEdgeInsets_c : UIEdgeInsets?{
        
        return delegate?.layoutEdgeInsetsStLayout?(self) ?? stEdgeInsets
    }
    /** item高度 */
    private var stItemHeight_c : CGFloat?{
        
        return delegate?.heightForRowAtIndexPath?(self) ?? stItemHeight
    }
    /** 列间距 */
    private var stColumSpacing_c : CGFloat?{
            return delegate?.layoutcolumnSpacingStLayout?(self) ?? stColumSpacing
    }
    /** 行间距 */
    private var stRowSpacing_c : CGFloat?{
        return delegate?.layoutRowSpacingStLayout?(self) ?? stRowSpacing
    }
    
    
    // MARK:- 懒加载
    /** atttibutesArray */
    private lazy var atttibutesArray : [UICollectionViewLayoutAttributes] = [UICollectionViewLayoutAttributes]()
    
}

尾随:上面的publish部分更具代码的实际情况酌情使用,可以参考大神们的框架模仿使用

15 下面在说说如何更新吧

  • 在推送podspec文件之前你需要确认以下几点:
    • 确保你的源码已经push到Github上
  • 一:
git add .
git commit -m "first commit for version 1.0.0"
git push origin master
  • 二 确保你所push的代码已经打上"version tag",也就是给源代码打上版本号标签
git tag '1.0.0'
git push --tags 
  • 最后验证可以按照上面的操作来进行

好了,就是这么多了,不知道有没有帮助到大家,如果有问题,欢迎留言~~

https://github.com/CoderST

你可能感兴趣的:(Swift 上传cocoapods)