美文网首页
组件制作(含公有、私有)

组件制作(含公有、私有)

作者: hotIcecream | 来源:发表于2019-03-21 16:21 被阅读0次

    一、远端仓库创建

    公有库

    注册 cocoaPods 账号
    • 1.想创建开源的 pod 库,就要注册一个 cocoaPods 账号, 我们使用终端注册, email 用你的 gitHub 邮箱.
      $ pod trunk register GitHub_email <githubEmail> --verbose

    • 2.进行邮箱确认.

    • 3.确认后 $ pod trunk me 可以看到你的注册信息.

      image

      以上步骤执行一次即可

    创建 gitHub 公有仓库
    image

    私有库

    • 创建方法与 '创建 gitHub 公有仓库' 类似, 选择为私有即可.(免费私有库可选码云)
    创建私有版本管理库(repo)
    • 1.首先创建一个 'MyRepo' 私有仓库来集中管理所有的私有仓库版本库(这个仓库只是用来管理版本, 不用来存储代码).
    • 2.回到终端, 将这个远程的私有版本仓库添加到本地. $ pod repo add MyRepo https://git.oschina.net/xxx/MyRepo.git
    • 3.查看 Finder 目录 ~/.cocoapods/repos, 可以发现增加了一个 MyRepo 的储存库. image
    创建私有代码库
    image

    如果项目由他人创建,去要对应的 https 地址

    二、本地仓库创建

    • 1.终端 cd 到指定目录下
    • 2.创建工程 pod lib create <XXXLoginModule>
    Q1:What language do you want to use? [ Swift / ObjC ]
    -> 输入对应
    
    Q2:Would you like to include a demo application with your library? [ Yes / No ]
    -> 输入 Yes
        
    Q3:Which testing frameworks will you use? [ Specta / Kiwi / None ]
    -> 输入 None
        
    Q4:Would you like to do view based testing? [ Yes / No ]
    -> 输入 No
        
    Q5:What is your class prefix?
    -> 输入 <项目前缀>
    

    三、与远程仓库关联

    git remote add origin <https>
    git pull
    git branch --set-upstream-to=origin/master master
    git pull origin master --allow-unrelated-histories
    

    如果出现错误, 参见 '常见问题汇总'

    四、编辑 podspec 文件

    Pod::Spec.new do |s|
      # 名称
      s.name             = 'XXModule'
      # 版本号
      s.version               = '0.0.1'
      # 摘要
      s.summary          = 'A short description of XXModule.'
      # 描述
      s.description           = <<-DESC
      TODO: Add long description of the pod here.
                                  DESC
      # 主页
      s.homepage              = 'https://gitee.com/xxx/XXModule'
      # 执照
      s.license               = { :type => 'MIT', :file => 'LICENSE' }
      # 作者
      s.author                = { 'xiaoming' => 'xxx@163.com' }
      # 文件源(公/私有库 统一使用 https 即可)
      s.source                = { :git => 'https://gitee.com/xxx/XXModule.git', :tag => s.version.to_s }
      # 图片
      # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
      # 地址
      # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
      
      # 是否要求ARC
      s.requires_arc          = true
      # iOS 系统兼容最小版本
      s.ios.deployment_target = '9.0'
      
      # 项目文件
      s.source_files = 'XXModule/Classes/**/*'
      
      # 资源文件
      # s.resource_bundles = {
      #   'XXModule' => ['XXModule/Assets/*.png']
      # }
      
      # 依赖系统库
      #s.frameworks            = 'UIKit', 'Foundation'
      # 依赖系统框架
      #s.libraries             = 'z', 'c++'
      
      # 依赖第三方库
      #s.dependency 'AFNetworking','3.2.1'
      #s.dependency 'Masonry'
      # 依赖第三方静态 framwwork(如果有子项目, 则迁移到子项目)
      #s.vendored_frameworks   = 'XXModule/Classes/SDK/Bugly/Bugly.framework'
      # 依赖第三方静态 a(如果有子项目, 则迁移到子项目)
      #s.vendored_libraries = 'XXModule/Classes/SDK/xxx.a'
      
      # 暴露头文件
      #s.public_header_files   = 'XXModule/Classes/XXModule.h'
      # 添加头文件到 pch
      #s.prefix_header_contents = '#import <Bugly/Bugly.h>'
      # 设置 header 文件
      #s.prefix_header_file = 'XXModule/Classes/Header.h'
      
      # 子项目(如无需要可不配置)
    #  s.subspec 'SubMudule1' do |ss|
    #    ss.source_files     = 'XXModule/Classes/SubMudule1/*.{h,m}'
    #  end
    #
    #  s.subspec 'SubMudule2' do |ss|
    #    ss.source_files     = 'XXModule/Classes/SubMudule2/*.{h,m}'
    #    # 依赖第三方框架
    #    ss.vendored_frameworks   = 'XXModule/Classes/SDK/Bugly/Bugly.framework'
    #  end
    end
    

    1.以上为模板, 可做对应删除、替换、注释、及打开注释.
    2.对 'spec' 文件进行修改或对 'Development Pods' 下文件变更, 需要进行 'pod install' 整理目录.
    3.如果仅对 'Development Pods' 下文件进行修改, 则 'Example' 工程中使用时建议 'cmd + shift + k' 再进行调用, 否则可能出现变更不及时.

    五、组件发布

    本地校验 spec

    pod lib lint
    

    上传至远程仓库

    git push
    git tag <与 .podspec 文件中的版本一致>
    git push —tags
    

    远程验证 podspec

    pod spec lint
    

    发布

    公有版本
    pod trunk push <xxx.podspec>
    

    该步骤包含了:

    • 更新本地 pods 库 ~/.cocoaPods.repo/master
    • 验证 .podspec 格式是否正确
    • 将 .podspec 文件转成 JSON 格式
    • 对 master 仓库进行合并、提交 .master 仓库地址

    成功后将会出现下列信息:

        Updating spec repo `master`
        Validating podspec
         -> XXModule (0.0.1)
        Updating spec repo `master`
         🎉  Congrats
         🚀  BYPhoneNumTF (1.0.0) successfully published
         📅  March 17th, 00:31
         🌎  https://cocoapods.org/pods/XXModule
         👍  Tell your friends!
    
    私有版本

    pod repo push MyRepo <xxx.podspec>
    该步骤包含了:

    • 验证 XXModule.podspec 文件
    • 拉取远程版本库 MyRepo
    • 添加 XXModule.podspec 到版本库中
    • push 到远程

    注意:是发布到管理所有的私有仓库版本库中.

    search

    发布到 cocoapods 的需要先 $ pod setup.

    pod search XXModule

    -> XXModule (0.0.1)
       A short description of XXModule.
       pod 'XXModule', '~> 0.0.1'
       - Homepage: https://gitee.com/xxx/XXModule
       - Source:   https://gitee.com/xxx/XXModule.git
       - Versions: 0.0.1 [MyRepo repo]
    

    六、组件应用

    Podfile 编写(模版)

    # gitHub spec 地址
    source 'https://github.com/CocoaPods/Specs.git'
    # 私有 spec 地址
    source 'https://git.oschina.net/xxx/xxx.git'
    
    platform :ios, '9.0'
    
    use_frameworks!
    
    target 'XXModule' do
    
        pod 'AFNetworking'
        pod 'XXModule'
    
    end
    

    常见问题汇总

    1.当执行 git branch --set-upstream-to=origin/master master 进行关联远程仓库时, 出现 fatal: refusing to merge unrelated histories

    解决办法:
    git pull origin master --allow-unrelated-histories

    2.当执行 pod lib lint 时, 出现 [!] XZExplain did not pass validation, due to 1 warning (but you can use --allow-warnings to ignore it).
    You can use the --no-clean option to inspect any issue.

    解决办法:
    根据提示添加 --allow-warnings

    3.由于在 sepc 文件中 vendored_frameworks 引用了某个第三方静态库 ,在 import 静态库中头文件后,导致 pod lib lint 报错。
    错误信息:
    " - ERROR | [iOS] [Explain/DoProblem] xcodebuild: Returned an unsuccessful exit code. You can use --verbose for more information.

    • NOTE | [iOS] [Explain/DoProblem] xcodebuild: /Users/xx/Desktop/Explain/Explain/Classes/DoProblem/ExplainModel.h:9:9: fatal error: 'Bugly/Bugly.h' file not found
      [!] Explain did not pass validation, due to 1 error.
      You can use the --no-clean option to inspect any issue."

    解决办法:
    如果有子项目存在的话,则需要将 vendored_frameworks 移到子项目中.

    4.当执行 pod trunk push <xxx.podspec> 时, 出现 [!] There was an error pushing a new version to trunk: Failed to open TCP connection to trunk.cocoapods.org:443 (getaddrinfo: nodename nor servname provided, or not known)

    解决办法:
    一般为网络原因, 重试即可

    5.当执行 pod repo push XXPods XXX.podspec 操作时,如果出现 [!] The repo MyRepo at ../.cocoapods/repos/MyRepo is not clean 字样

    解决办法:
    1.更新下我们的版本库.
    $ pod repo update MyRepo
    2.再继续上传即可.

    相关文章

      网友评论

          本文标题:组件制作(含公有、私有)

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