美文网首页
创建自己的私有库不是问题!

创建自己的私有库不是问题!

作者: Sunney | 来源:发表于2019-01-30 17:32 被阅读8次

       首先本人会以github为例,创建自己的私有库。不懂请看下面,让我慢慢告诉你怎么创建自己的公有库!

    第一步 用本人账号在github创建一个公有仓库

    MIT License 是稍后podspec里面要用到的协议

    第二步 Cocoapods注册Trunk

    $pod trunk register [Your-Email] '[Your-Name]' --description='[Your-Desc]'

    > [Your-Email]: 任意邮件,但是我比较推荐你使用github上的Email

    > [Your-Name]: 推荐使用github上使用的Name

    > [Your-Desc]: 一个简单的描述,往往这个时候我们使用的是自己电脑的一个描述

    // 比如我自己注册了一个$ pod trunk register 1136200379@qq.com 'PCZheng' --description='iMac (Retina 4K, 21.5-inch, 2017)'// 注册完成后,你可以通过[pod trunk me]查看信息

    $ pod trunk me  查看信息是会有[!] Authentication token is invalid or unverified. Either verify it with the email that was sent or register a new session.这是要在你注册的[Your-Email]查看给你发的email点击里面的链接认证。由于我没有认证所以,pod trunk me 并能查看信息,需要叫我认证,由于最先没反应过来,我又注册了trunk一次,注册错了可以删除,删除具体的方法执行pod trunk --help,查看删除方法。

    第三步、将你第一步创建的库,clone到指定的文件夹里面

    第四步、创建.podspec文件 并且编辑.podspec

    该步骤是重点也是难点,该步骤要是出什么错误了,后面都是扯淡,本人就因为各种各样的问题在这个步骤卡了很久,最后通过各种解决方案解决了,有些坑只有自己趟过了才知道难不难,所以废话也不多说,遇到各种不会的就goole和百度吧,或者@我也行。

    .podspec 即pod描述文件podspec specification 

    为了讲明白这一步,这一步主要分为下面这几个步骤:

    1.如何创建podspec文件

    2.如何编写podspec文件

    3.如何实现目录分层

    4.如何校验podspec文件

    5.在校验podspec文件所遇到过的问题

    1.如何创建podspec文件

    $pod spec create 库名

    例如我自己的PageController

    该目录下就会多一个PageController.podspec文件,可以有文本编辑打开对这个文件进行编辑

    Pod::Spec.new do |s|

      s.name        = "PageController" #框架名

      s.version      = "0.0.1" #当前版本号,在pod search PageController的时候会显示该信息

      s.summary      = "A short description of PageController."#详细描述,在pod search PageController的时候会显示介绍

      s.description  = <<-DESC

                      DESC

      s.homepage    = "http://EXAMPLE/PageController"#页面链接

      # s.screenshots  = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif"

      s.license      = "MIT (example)"#开源协议,也就是第一步选择的协议

      # s.license      = { :type => "MIT", :file => "FILE_LICENSE" }

      s.author            = { "RainbowWait" => "1136200379@qq.com" }#作者

      # Or just: s.author    = "RainbowWait"

      # s.authors            = { "RainbowWait" => "1136200379@qq.com" }

      # s.social_media_url  = "http://twitter.com/RainbowWait"

      #s.platform    = :ios

      s.platform    = :ios, "8.0"#支持iOS平台最低版本

      #  When using multiple platforms

      # s.ios.deployment_target = "5.0"

      # s.osx.deployment_target = "10.7"

      # s.watchos.deployment_target = "2.0"

      # s.tvos.deployment_target = "9.0"

      s.source      = { :git => "http://EXAMPLE/PageController.git", :tag => "#{s.version}" }#源码git地址 以及tag标签

      s.source_files  = "Classes", "Classes/**/*.{h,m}"#源文件(可以包含.h和.m)

      s.exclude_files = "Classes/Exclude"

      # s.public_header_files = "Classes/**/*.h"#头文件(.h文件)

      # s.resource  = "icon.png"

      # s.resources = "Resources/*.png"#资源文件(配置的文件都会放到mainBundle中)

      # s.preserve_paths = "FilesToSave", "MoreFilesToSave"

      # s.framework  = "SomeFramework"

      # s.frameworks = "SomeFramework", "AnotherFramework"#依赖的系统的框架

      # s.library  = "iconv"

      # s.libraries = "iconv", "xml2"#依赖的系统库

      s.requires_arc = true#支持ARC

      # s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }

      # s.dependency "JSONKit", "~> 1.4"#依赖的第三方库

    https://guides.cocoapods.org/syntax/podspec.html  请参照Podfile详细

    上面列举的信息大部分来自pod默认生成的podspec文件中的给的,其中需要重点注意标识黑体的这几个信息

    下面我会举例说明giant如何写podspec中的每项配置。

    s.source 源代码地址 以及tag 标签

    s.source       = { :git => "https://github.com/RainbowWait/PageController.git", :tag => "0.0.1" }

    git tag 0.0.1   设置的tag标签为0.0.1  git tag -d 0.0.1删除0.0.1的tag标签 最后提交的时候git push --tags

    s.source_files 配置三方库的源文件(.h或.m文件),swift是配置.swift文件

    写法:

    OC:s.source_files = "Classes/**/*.{h,m}"#Classes路径下的所有匹配文件

           s.source_files = "Classes/*.{h,m}"#Classes文件夹下的所有匹配文件

           s.source_files = “Classes/PageController.{h,m}"#直接指定文件名

    Swift:s.source_files = "Classes/**/*.{swift}"#Classes路径下的所有匹配文件

               s.source_files = "Classes/*.{swift}"#Classes文件夹下的所有匹配文件

               s.source_files = “Classes/PageController.{swift}"#直接指定文件名

    public_header_files头文件

    s.public_header_files = "Classes/**/*.h"#Classes路径下所匹配的.h文件

    s.public_header_files = "Classes/*.h"

    s.public_header_files = "Classes/Public.h"

    vendored_frameworks 引用非系统的框架

    s.ios.vendored_frameworks = "Frameworks/MyFramework.framework"

    s.vendored_frameworks = 'MyFramework.framework’,'TheirFramework.framework'

    frameworks配置系统框架

    s.frameworks = 'Foundation', 'CoreGraphics', 'UIKit'

    vendored_libraries 非系统静态库(要注意,这里的.a静态库名字必须要带lib前缀,如果引用的静态库名字没lib前缀会导致编译报错,只需要重命名加上即可)

    s.ios.vendored_library = 'Libraries/libProj4.a'

    s.vendored_libraries = 'libProj4.a', 'libJavaScriptCore.a'

    libraries:配置依赖的系统库(要注意,这里的写法需要忽略lib前缀)

    libraries = 'c++’,'sqlite3', 'stdc++.6.0.9', 'z'

    resources:配置资源文件(.bundle,.png,.txt等资源文件,这些资源文件会被放到mainBundle中,要注意避免发生命名重复的问题)

    s.resources = ['Images/*.png’,'Sounds/*']

    s.resource = 'Resources/HockeySDK.bundle'

    resource_bundles:配置指定bundle的资源文件(可以解决resources导致的命名冲突问题)

    spec.ios.resource_bundle = { 'MapBox' => 'MapView/Map/Resources/*.png' }

    spec.resource_bundles = {

        'MapBox' => ['MapView/Map/Resources/*.png'],

        'OtherResources' => ['MapView/Map/OtherResources/*.png']

      }

    swift_version 支持Swift的版本

    s.swift_version = '4.0'

    dependency:依赖的三方库,pod库或者可以是自身的subspec

    3.如何实现目录分层3.如何实现目录分层

    使用subspec来实现目录分层。

    目录分层的好处:

    目录分层,结构清晰;

    使用pod引入一个三方库时,可以只引入一个subspec而不用将整个三方库引入。

    例如AFNetworking:

    嵌套请参考 CocoaPods Guides - Podspec Syntax Reference v1.6.0.beta.2

    4.如何校验podspec文件

    pod lib lint (首先从本地验证你的pod能否通过验证)

    pod spec lint (从本地和远程验证你的pod能否通过验证)

    pod lib lint --verbose (加--verbose可以显示详细的检测过程,出错时会显示详细的错误信息)

    pod lib lint --allow-warnings (允许警告,用来解决由于代码中存在警告导致不能通过校验的问题)

    pod lib lint --help (查看所有可选参数,可选参数可以加多个)

    首先把你的代码先提交到远程仓库,并且把设置的标签页推送到远程仓库,以下是截图

    从本地验证pod能否通过 修改后.podspec重新验证 忽略警告重新验证

    修改后的PageController.podspec文件

    从本地和远程验证pod能否验证通过

    pod spec lint --allow-warnings

    第五步、搭建私有库环境

    1.创建自己的私有库

    pod repo add  [repo名]  [repo Git地址]

    例如:pod repo add PageControllerRepo https://github.com/RainbowWait/PageController.git

    查看私有库是否创建成功

    pod repo list 下面的lists错误了是list

    需要注意的是:

     1. 要记得将代码提交到远端

    2. 要记得打tag,每个tag对应一个三方库版本

    3. podspec文件中version的值要与git中的一个tag对应

    2.向私有的repo库中提交podspec

    pod repo push [repo名] [.podspec文件名] 在验证的时候有警告就要加上--allow-warnings,否则会失败

    3.提交公有library

    pod trunk push [NAME].podspec

    pod repo update// 查找一下你提交的pod

    pod search PageController

    文章参考了 Cocoapods整理(四)——搭建Cocoapods私有库环境 - Zcp大官人的iOS开发专栏 - SegmentFault 思否

    Cocoapods整理(三)——编写podspec文件 - Zcp大官人的iOS开发专栏 - SegmentFault 思否

    相关文章

      网友评论

          本文标题:创建自己的私有库不是问题!

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