美文网首页CocoapodsiOS-组件化Xcode使用与插件
关于 cocoapods 制作 Podspec 及使用

关于 cocoapods 制作 Podspec 及使用

作者: Jason_风筝 | 来源:发表于2018-11-03 22:40 被阅读61次

    官方
    此篇文章探讨的是 cocoapods 制作 Podspec 及使用 . 不关乎cocoapods 的安装.
    首先我们知道平时的项目用cocoapods 管理第三方框架很简单, 那人家的框架是怎么集成到cocoapods 的呢, 下面开始我们的探讨.

    了解:

    • 第一点我们要知道要上传 framework /文件到cocoapods..., 是在Podspec 下把自己的 framework /文件 描述好. 再上传到gitHub等地方, 当我们
         pod 'Masonry' 
    

    时, 它会再先从gitHub 上下载文件.

         pod trunk push xxxxx.podspec
    

    这个是把我们的 podspec 描述文件上传到 cocoapods 的master 源. (组件化开发时一般会有一个切换到私有库的操作).

    • 总结来说步骤是: 开发框架 -> 创建框架描述spec -> 上传spec

    下面开始我们的操作

    (如果涉及到swift 与oc 的code , 建议打包成framework ,打包framework可参考我的另一篇文章)

    • 我们采用的是先在本地开发好的Lib , 写好spec 描述文件, 在本地集成成功, 最后再Push 到gitHub .
    • 建议开始创建pod 之前先 pod search XXX 有没已经存在的, 是不能同名的.
    • 在你的工程下面创建pod 名字 , 可在文件夹下面创建
      • LICENSE : 创建一个license文件, 写上你的license信息
      • README.md: 这个会在gitHub你的项目下出现,可以介绍你的pod 怎么用之类的话.


    • 在项目文件夹下创建podspec 文件, 执行以下命令,建议名字与你pod 名字一样


    pod spec create xxxxx
    
    • 如图可以看到 testOrderPlaceSDK.podspec , 用xcode 打开它, 下面我们对它的参数做解释及配置.


    #Pod::Spec.new do |s| 是它的语法, 就相当现在这个s 变量就是我们spec的对象,下面我们给它相关的属性赋值就可以.
    Pod::Spec.new do |s|
      #required,就是你pod 的名字.
      s.name = "testOrderPlaceSDK"
      #required,版本号, 这里要说一下是,因为我们正常用的 source 是:git => :tag的方式,所以每次更新新版本要打tag push to git , tag 的version 写在这里.
      s.version = "0.0.1"
      #required,摘要应该简短,但内容丰富.
      s.summary = "testOrderPlaceSDK alpha."
      #optional,官方是说可选, 但建议写上,(描述比摘要要长)注意是在<<-DESC  DESC之间写下.
      s.description = <<-DESC
            You can write your description here.
                       DESC
      #required,Pod主页的URL,如果你的项目上传到gitHub,就是你项目的首地址.
      s.homepage = "https://github.com/PeiJueChen/testOrderPlaceSDK"
      #optional,显示Pod的效果截图。 适用于面向UI的库。 CocoaPods建议使用gif格式.
      # s.screenshots  = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif"
    
      #required,Pod的许可证。我们当前在项目下创建的LICENSE现在派上用场了.注意名字一定是: LICENSE, 不用文件后缀的.它可以是txt文件名字为:LICENSE,不要后缀.
      s.license = { :type => 'MIT', :file => 'LICENSE' }
      #required,pod维护的作者,前面是名字,后面是email.
      s.author = { "风筝" => "13286953452@126.com" }
      #required,lib的位置,如果放在gitHub,就是gitHub项目下的地址,写上tag的版本, 新版本这样写: s.version.to_s
      s.source = { :git => "https://github.com/PeiJueChen/testOrderPlaceSDK.git", :tag => "#{s.version}" }
      #写下你代码的位置, 也可以在后面指定.{h,m,swift},如果多个逗号隔开,swift提供对外的class与method建议加上public
      s.source_files = 'testOrderPlaceSDK/Classes/**/*'
      #排除的文件.
      #s.exclude_files = "Classes/Exclude"
    
      # 指定公开的.h 文件,如果不指定,那source_files中所有头文件都是public的.
      # s.public_header_files = "Classes/**/*.h"
    
      #本地 framework
      s.ios.vendored_frameworks = 'testOrderPlaceSDK/frameworks/AlipaySDK.framework','testOrderPlaceSDK/frameworks/OrderPlaceSDK.framework'
      #本地 a library
      #s.ios.vendored_library = 'Libraries/libProj4.a'
      
      #导入 resource 的多种方式
      s.resources = ['testOrderPlaceSDK/Assets/AlipaySDK.bundle', 'testOrderPlaceSDK/Assets/*.png']
      s.resource_bundles = {
    'testOrderPlaceSDK' => ['testOrderPlaceSDK/Assets/**/*.{storyboard,xib}']
    }
      #下载后不应删除的任何文件,比如某个txt
      #s.preserve_path = 'IMPORTANT.txt'
      #s.preserve_paths = 'Frameworks/*.framework'
    
      #optional,如果code中用到swift,必须指定swift版本,如果用的是OC可以不用写.
      s.swift_version = '4.0'
    
      #optional,指定支持的cocoapods版本.
      #s.cocoapods_version = '>= 0.36'
    
      #optional,如果指定 use_frameworks! ,则pod应包含静态库框架.
      s.static_framework = true
      #required,指定ios版本,这个相当重要,如果 profile文件中: platform :ios, "8.0",选择的版本是8.0.但我这个pod的s.ios.deployment_target 是9.0,那这个就不会安装到ios 8.0上.对后面更新pod lib很有用.
      s.ios.deployment_target = "8.0"
      #系统 frameworks
      s.frameworks = 'CoreTelephony', 'SystemConfiguration', 'QuartzCore', 'CoreText', 'CoreGraphics', 'UIKit', 'Foundation', 'CFNetwork', 'CoreMotion'
      #系统 a libraries
      s.libraries = 'z', 'c++'
    
      #依赖的其他pod
      #s.dependency 'AFNetworking', '~> 1.0'
      #s.dependency 'RestKit/CoreData', '~> 0.20.0'   // 使用到其他subspecs
      #s.ios.dependency 'MBProgressHUD', '~> 0.5'
      
      #requires_arc允许您指定哪个source_files使用ARC.这可以支持ARC的文件,true表示所有source_files都使用ARC.
      #不使用ARC的文件会有-fno-objc-arc编译器标志.
      #此属性的默认值为true.
      # s.requires_arc = true
    
    
      #对subspec做个说明, 一般用到这种情况的不多, subspec类似p:NSOjbect ,而p可以说是subspec,它基于NSOjbect,我们一半用到subspec模式时会指定一个'Core'
      #它包括基本的东西,而subspec是它的另一个子类~~可以这么理解吧
      #下面看使用和配置
      # 使用 subspec order : pod 'testOrderPlaceSDK/Order'
      # 使用 core : pod 'testOrderPlaceSDK/Core'
      # s.default_subspec   = 'Core'
      # s.subspec "Core" do |core|
      # core.source_files = 'sources/extensions/ANAlipayResultCode.h'
      # core.resources    = 'AlipaySDK.bundle'
      # core.vendored_frameworks = 'AlipaySDK.framework'
      # core.public_header_files = 'AlipaySDK.framework/Headers/**/*.h', 'sources/extensions/ANAlipayResultCode.h'
      # end
    
      # s.subspec "Order" do |order|
      # order.source_files = 'sources/order/**/*.{h,m}'
      # 注意要dependency core 
      # order.dependency 'AlipaySDK-2.0/Core'  
      # end
    end
    
    

    接下来我们验证下本地pod 有没效

    *参 --allow-warnings 是允许警告

    pod lib lint xxx.podspec --allow-warnings
    

    验证通过后. 我们的podspec 文件就写完了, 如果你想本地导入的话, 只要在

    platform :ios, '8.0'
    target 'testPodProject' do
       use_frameworks!
    pod 'testOrderPlaceSDK', :path => './'
    end
    
    

    因为我们是放在项目下面, 所以引用时用 ./ 就可以, 下面是我生成的文件.


    push code to github

    *下面我们先把代码推送到gitHub,打上tag, 注意tag 要版本号要与你在podspec 中所写的version 一致, 再将tag 也push到github.

    • 记得改你的
      s.homepage / s.source
    • 如果push 了tag ,release 会+1

    *执行下面指令验证本地库与远程库有没效,如果看到 xxxx.podspec passed validation. 就是通过了.看需要是否要添加(--allow-warnings)

    pod spec lint xxxx.podspec
    

    push 到pod spec repo master

    pod trunk push xxxxx.podspec
    

    看到

     🎉  Congrats
     🚀  xxxx (0.0.1) successfully published
    .......
    

    到此我们的pod 项目就成功了.

    • 可以试试 pod search xxx , 如果报: [!] Unable to find a pod with name, author, summary, or description matching xxxx,请打开: /Users/用户名/Library/Caches/CocoaPods ,需要把search_index.json 删除再重新pod search , 它会重新创建检索索引, 这个过程有点长.
    • 记录几个常用路径
      - pod 命令安装路径: /usr/local/bin
      - pod 框架索引信息缓存路径: /Users/用户名/.cocoapods/repos/master
      - 索引缓存路径: ~/Library/Caches/CocoaPods/

    使用

    • 工程中
    pod init
    
    • 用xcode打开profile 文件
    platform :ios, '8.0'
    target 'projectName' do
       use_frameworks!
    pod 'testOrderPlaceSDK', '~> 0.0.1'
    end
    
    

    *执行

    pod install
    

    btw: 如果想快速创建一个带测试工程的podspec , 建议用 pod 模版库指令.

    pod lib create 名字
    

    生成的project 已经默认采用本地引用spec 的方式导入, 只要替换classes 文件下的ReplaceMe.m 就可以.

    至此, pod 就可以使用了.

    相关文章

      网友评论

        本文标题:关于 cocoapods 制作 Podspec 及使用

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