美文网首页
iOS 构建Cocoapods开源库

iOS 构建Cocoapods开源库

作者: FicowShen | 来源:发表于2019-05-14 18:43 被阅读0次

    内容概览

    1. 创建Pod模板项目;
    2. 定制podspec;
    3. 安装和配置fastlane;
    4. 配置travis.yml;
    5. 上传到公共库Cocoapods;

    创建模板项目

    使用Pod的模板,创建项目:

    pod lib create LibraryName
    

    例如,现在要创建DemoLibrary。用命令行执行以下命令:

    pod lib create DemoLibrary
    

    然后,你会看到以下提示,根据自己的需求选取即可:

    What platform do you want to use?? [ iOS / macOS ]
     > iOS
    What language do you want to use?? [ Swift / ObjC ]
     > Swift
    Would you like to include a demo application with your library? [ Yes / No ]
     > Yes
    Which testing frameworks will you use? [ Quick / None ]
     > None
    Would you like to do view based testing? [ Yes / No ]
     > No
    

    这些自定义选项选择完毕后,你会看到项目已经在Xcode中打开。



    打开Finder,查看项目的文件目录结构:

    DemoLibrary.podspec 和 .travis.yml 就是需要配置的内容。



    如果要将DemoLibrary目录中编写的源码用于Example目录中的项目,你需要注意这些事项:

    1. 更新DemoLibrary中的源码,你就需要在Example目录中执行 pod install,然后才可以在Example中使用DemoLibrary中的内容。
    2. 在DemoLibrary中编写的代码,记得使用 public 甚至 open 来提供相应的访问控制权限。否则,在DemoLibrary中定义的类,在Example项目中不可见。
    3. 在某些时候,你可能会在Example项目中遭遇编译错误等情况。这时候,你可以尝试对Example项目进行Clean 操作。

    定制podspec



    podspec文件用来描述某个版本的Pod Library。其中包含了很多细节,比如:源代码从哪里获取,需要使用哪些文件,用于编译过程的设置参数以及一些元数据(名称、版本、描述)等。



    可供参考的podspec:
    Kingfisher.podspec
    RxCocoa.podspec

    你可以使用命令行指令 pod lib lint 来检查你的.podspec是否存在错误,这个指令不需要联网。
    也可以使用 pod spec lint,它会检查外部仓库和tag。

    如果运行 pod lib lint 报错,可以尝试通过更新 cocoapods 来解决: sudo gem install cocoapods
    如果运行 pod spec lint 报错,可以尝试清理本地的 cocoapods 缓存来解决: pod cache clean YourLibraryName



    另外,如果你的项目还依赖于其他项目,可以在.podspec文件中指定这些依赖:

    Pod::Spec.new do |s|
      s.name             = 'MyLibrary'
    
      ...
    
      s.dependency 'RxSwift', '~> 4.4.0'
      s.dependency 'Alamofire', '~> 4.8.1'
      s.dependency 'RxAlamofire', '~> 4.3.0'
    end
    

    然后在引用这个Library的演示项目(比如上文中DemoLibrary的Example目录)的目录执行 pod install,就可以集成这些依赖库到你的演示项目中。

    如果项目太大或者需要拆分出子模块,你可以参考这个示例:

    
    Pod::Spec.new do |s|
      s.name             = 'BigLibrary'
      s.version          = '1.0.0'
      s.summary          = 'summary'
      s.swift_version    = '5.0'
    
      s.description      = <<-DESC
    This is a description.
                           DESC
    
      s.homepage         = 'https://github.com/xxx/BigLibrary'
      s.license          = { :type => 'MIT', :file => 'LICENSE' }
      s.author           = { 'xxx' => 'xxx@hotmail.com' }
      s.source           = { :git => 'https://github.com/xxx/BigLibrary.git', :tag => s.version.to_s }
    
      s.ios.deployment_target = '8.0'
    
      s.subspec 'Accessory' do |accessory|
        accessory.source_files = 'Sources/Classes/Accessory/*.{h,m,swift}'
        # 排除其他子模块的文件
        accessory.exclude_files = 'Sources/Classes/Core/*.{h,m,swift}', 'Sources/Classes/CoreTools/*.{h,m,swift}'
        accessory.dependency 'BigLibrary/Core'
        accessory.dependency 'Alamofire', '~> 4.8.1'
        accessory.dependency 'RxAlamofire', '~> 4.3.0'
      end
    
      s.subspec 'Core' do |core|
        core.source_files = 'Sources/Classes/Core/*.{h,m,swift}', 'Sources/Classes/CoreTools/*.{h,m,swift}'
        core.dependency 'RxSwift', '~> 4.4.0'
      end
    
      s.default_subspec = 'Accessory'
    
    end
    
    

    注意事项:

    • 通过 pod 'BigLibrary' 会导入所有的模块(Core + Accessory)
    • 单独导入核心模块,可以使用 pod 'BigLibrary/Core'
    • 单独导入附加模块,可以使用 pod 'BigLibrary/Accessory'
    • 更改.podspec文件后,记得在项目中使用 pod install 来重新构建依赖库

    安装和配置fastlane

    fastlane可以通过自动化流程来大幅度减轻测试分发和部署的工作量。
    它可以帮你处理很多繁杂的工作,比如:生成屏幕截图、代码签名以及发布你的应用到指定的环境。



    这里主要是用来运行单元测试,在travis中可以配置运行fastlane。
    然后,通过fastlane来启动单元测试。fastlane中可以定义多个lane。
    将不同的lane相互组合,甚至可以完成所有工作(测试、截图、签名、打包、发布等),强大无比!



    可供参考的fastlane:
    Kingfisher fastlane



    可能遭遇的错误:

    Bundler could not find compatible versions for gem "bundler"
    

    可参考的解决方案:
    https://docs.fastlane.tools/getting-started/ios/setup/#use-a-gemfile


    配置travis.yml

    travis是有名的持续集成平台。

    打开travis官网,用Github帐号即可登录。
    登录后,找到设置页面,然后你就可以看到你自己的仓库。
    搜索并找到你正在构建的开源库,然后把持续集成的开关打开。



    可供参考的travis.yml:
    Kingfisher travis.yml



    可能遭遇的错误:

    Could not find unf_ext-0.0.7.6 in any of the sources
    

    可参考的解决方案:

    # 在Gemfile中加入以下内容,然后执行 `bundle update`:
    gem "cocoapods"
    

    上传到公共库Cocoapods

    # 填写账号信息,注册完要去邮箱点一个验证邮件(邮箱最好和git的邮箱保持一致)
    pod trunk register 邮箱 '昵称' --verbose
    
    # 验证完成后可以查看账号信息,比如:Name, Email 等
    pod trunk me
    
    # 提交
    pod trunk push --allow-warnings
    



    在这一步,可能遭遇的错误:

    podspec file patterns: The `source_files` pattern did not match any file.
    

    可参考的解决方案:
    https://stackoverflow.com/a/43086482

    也可以尝试清理Pod缓存:

    pod cache clean --all
    



    成功之后,你会看到以下内容:

     🎉  Congrats
    
     🚀  TaskCommander (1.0.1) successfully published
     📅  May 14th, 03:47
     🌎  https://cocoapods.org/pods/YourLibrary
     👍  Tell your friends!
    

    可以手动验证一下:

    # 可能需要等一段时间,之后才能搜到
    pod search LibraryName
    
    # 也可以尝试以下指令
    # 将https://github.com/CocoaPods/Specs的内容更新到~/.cocoapods/repos
    pod setup
    
    # 清除缓存
    rm -rf ~/Library/Caches/Cocoapods
    
    


    参考文章:
    Making a CocoaPod
    Using Pod Lib Create
    如何制作自己的CocoaPod库



    转载请注明出处,谢谢~

    相关文章

      网友评论

          本文标题:iOS 构建Cocoapods开源库

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