美文网首页
cocoapods制作公有库

cocoapods制作公有库

作者: pingxhcn | 来源:发表于2020-03-18 14:52 被阅读0次

    1、先在终端搜索一下看看名字是不是冲突

    pod search xxx
    

    如果没有冲突,就在github新建项目,并 git clone 到本地。
    2、在项目文件夹下创建 podspec 文件, 执行以下命令,建议名字与你pod 名字一样

    屏幕快照 2020-03-18 下午2.31.10.png
    pod spec create xxx
    

    3、将要上传的文件放在与 podspec 同级的文件中。

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

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

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

    pod lib lint XHBaseLibrary.podspec --allow-warnings
    
    • 下面我们先把代码推送到gitHub
    • 打上tag git tag '0.0.1', 注意tag 要版本号要与你在podspec 中所写的version 一致
    • 再将tag 也push到github git push --tags
      5、执行下面指令验证本地库与远程库有没效,如果看到 ** xxxx.podspec passed validation.** 就是通过了.看需要是否要添加(--allow-warnings)
    pod spec lint XHBaseLibrary.podspec
    

    6、push 到pod spec repo master

    pod trunk push XHBaseLibrary.podspec
    

    7、看到如下显示,说明就成功了


    屏幕快照 2020-03-18 下午2.49.24.png
    • 可以试试 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 search xxxx 中搜索到,但是在项目中使用时,出现职下错误:
    [!] CocoaPods could not find compatible versions for pod "XHBaseLibrary":
      In Podfile:
        XHBaseLibrary
    
    Specs satisfying the `XHBaseLibrary` dependency were found, but they required a higher minimum deployment target.
    

    要查看一下 .podspec 中的 platform :ios, 'xx' 与项目中的 Podfile 文件的 platform : ios, 'xx',版本数字是否相同,把 Podfile 中的 platform: ios, 'xx' 修改为一样就可以解决了。

    相关文章

      网友评论

          本文标题:cocoapods制作公有库

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