美文网首页Swift
Swift 上传cocoapods

Swift 上传cocoapods

作者: coderST | 来源:发表于2016-12-02 09:06 被阅读378次

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

    1 你要在github上新建仓库

    屏幕快照 2016-12-02 08.36.26.png
    • 具体怎么建在这我不做详细介绍了,很简单,如果实在不会可以度娘或者简书,里面有许多,下面是我的目录结构
    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(因为直接用系统的编辑器打开被坑过,(。・∀・)ノ゙)

    屏幕快照 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:依赖的项目,如有多个,则写多行#表示注释文
    
    屏幕快照 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.

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

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

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

    pod trunk register 694468528@qq.com 'CoderST'

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

    10 查看自己注册信息

    pod trunk me

    屏幕快照 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
      • 不要着急,这个不是你的配置文件或者命令不正确,都是你网速惹的祸,多试几个这个命令就应该能好
    • 看到下面的截图 恭喜你已经成功了
    屏幕快照 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

    屏幕快照 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

    相关文章

      网友评论

      • 无限de想象:楼主知道怎么使自己的开源框架 引用别的开源框架吗 ?
      • ChoiKarl::clap: :clap:
        我之前卡在14步那了,多谢版主指点!!!!
        coderST:不客气,互相学习

      本文标题:Swift 上传cocoapods

      本文链接:https://www.haomeiwen.com/subject/bsvfmttx.html