cocoapods-miBin 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
 - data/.gitignore +4 -0
 - data/.rakeTasks +7 -0
 - data/Gemfile +13 -0
 - data/Gemfile.lock +104 -0
 - data/LICENSE.txt +22 -0
 - data/README.md +522 -0
 - data/Rakefile +13 -0
 - data/cocoapods-miBin.gemspec +27 -0
 - data/lib/cocoapods-miBin.rb +4 -0
 - data/lib/cocoapods-miBin/command.rb +3 -0
 - data/lib/cocoapods-miBin/command/bin.rb +60 -0
 - data/lib/cocoapods-miBin/command/bin/archive.rb +134 -0
 - data/lib/cocoapods-miBin/command/bin/init.rb +71 -0
 - data/lib/cocoapods-miBin/command/bin/lib.rb +14 -0
 - data/lib/cocoapods-miBin/command/bin/lib/lint.rb +69 -0
 - data/lib/cocoapods-miBin/command/bin/list.rb +50 -0
 - data/lib/cocoapods-miBin/command/bin/open.rb +61 -0
 - data/lib/cocoapods-miBin/command/bin/repo.rb +15 -0
 - data/lib/cocoapods-miBin/command/bin/repo/push.rb +116 -0
 - data/lib/cocoapods-miBin/command/bin/repo/update.rb +42 -0
 - data/lib/cocoapods-miBin/command/bin/search.rb +69 -0
 - data/lib/cocoapods-miBin/command/bin/spec.rb +15 -0
 - data/lib/cocoapods-miBin/command/bin/spec/create.rb +75 -0
 - data/lib/cocoapods-miBin/command/bin/spec/lint.rb +111 -0
 - data/lib/cocoapods-miBin/command/bin/umbrella.rb +55 -0
 - data/lib/cocoapods-miBin/config/config.rb +81 -0
 - data/lib/cocoapods-miBin/config/config_asker.rb +58 -0
 - data/lib/cocoapods-miBin/gem_version.rb +11 -0
 - data/lib/cocoapods-miBin/helpers.rb +5 -0
 - data/lib/cocoapods-miBin/helpers/framework.rb +64 -0
 - data/lib/cocoapods-miBin/helpers/framework_builder.rb +227 -0
 - data/lib/cocoapods-miBin/helpers/sources_helper.rb +33 -0
 - data/lib/cocoapods-miBin/helpers/spec_creator.rb +159 -0
 - data/lib/cocoapods-miBin/helpers/spec_files_helper.rb +77 -0
 - data/lib/cocoapods-miBin/native.rb +21 -0
 - data/lib/cocoapods-miBin/native/acknowledgements.rb +27 -0
 - data/lib/cocoapods-miBin/native/analyzer.rb +53 -0
 - data/lib/cocoapods-miBin/native/installation_options.rb +26 -0
 - data/lib/cocoapods-miBin/native/installer.rb +116 -0
 - data/lib/cocoapods-miBin/native/linter.rb +26 -0
 - data/lib/cocoapods-miBin/native/path_source.rb +33 -0
 - data/lib/cocoapods-miBin/native/pod_source_installer.rb +19 -0
 - data/lib/cocoapods-miBin/native/pod_target.rb +8 -0
 - data/lib/cocoapods-miBin/native/podfile.rb +79 -0
 - data/lib/cocoapods-miBin/native/podfile_env.rb +36 -0
 - data/lib/cocoapods-miBin/native/podspec_finder.rb +25 -0
 - data/lib/cocoapods-miBin/native/resolver.rb +200 -0
 - data/lib/cocoapods-miBin/native/sandbox_analyzer.rb +34 -0
 - data/lib/cocoapods-miBin/native/source.rb +35 -0
 - data/lib/cocoapods-miBin/native/sources_manager.rb +20 -0
 - data/lib/cocoapods-miBin/native/specification.rb +31 -0
 - data/lib/cocoapods-miBin/native/validator.rb +16 -0
 - data/lib/cocoapods-miBin/source_provider_hook.rb +21 -0
 - data/lib/cocoapods_plugin.rb +5 -0
 - data/spec/command/bin_spec.rb +12 -0
 - data/spec/spec_helper.rb +50 -0
 - metadata +173 -0
 
    
        checksums.yaml
    ADDED
    
    | 
         @@ -0,0 +1,7 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ---
         
     | 
| 
      
 2 
     | 
    
         
            +
            SHA256:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: a6c9981cb11c54d9fe8665e8d772c39ea84a3273fcb63e74e69a8ee39ff1810e
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: e116cf79f9975eec81c3d8a06878892268776631f84057799d1c816b5da2aaac
         
     | 
| 
      
 5 
     | 
    
         
            +
            SHA512:
         
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 6c932e5b2c93e29e757f4324af3e82475cfc312518715d0b5744523a78b54c3ecca4c0204c9911684dd1f3f94e87b949655e564514dd5fc0ea8e473b5cb3315c
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: cb885ea07175d3a2fcc8c291dffe499d4a10cc0348dbc054d2e4ce313ee4bfbe43407926567fb2cb3a68c5a2a24fb60d3371871d5acc761983888e20aff7e6fd
         
     | 
    
        data/.gitignore
    ADDED
    
    
    
        data/.rakeTasks
    ADDED
    
    | 
         @@ -0,0 +1,7 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <?xml version="1.0" encoding="UTF-8"?>
         
     | 
| 
      
 2 
     | 
    
         
            +
            <Settings><!--This file was automatically generated by Ruby plugin.
         
     | 
| 
      
 3 
     | 
    
         
            +
            You are allowed to: 
         
     | 
| 
      
 4 
     | 
    
         
            +
            1. Remove rake task
         
     | 
| 
      
 5 
     | 
    
         
            +
            2. Add existing rake tasks
         
     | 
| 
      
 6 
     | 
    
         
            +
            To add existing rake tasks automatically delete this file and reload the project.
         
     | 
| 
      
 7 
     | 
    
         
            +
            --><RakeGroup description="" fullCmd="" taksId="rake"><RakeTask description="Build cocoapods-miBin-0.1.24.gem into the pkg directory" fullCmd="build" taksId="build" /><RakeTask description="Remove any temporary products" fullCmd="clean" taksId="clean" /><RakeTask description="Remove any generated files" fullCmd="clobber" taksId="clobber" /><RakeTask description="Build and install cocoapods-miBin-0.1.24.gem into system gems" fullCmd="install" taksId="install" /><RakeGroup description="" fullCmd="" taksId="install"><RakeTask description="Build and install cocoapods-miBin-0.1.24.gem into system gems without network access" fullCmd="install:local" taksId="local" /></RakeGroup><RakeTask description="Create tag v0.1.24 and build and push cocoapods-miBin-0.1.24.gem to rubygems.org" fullCmd="release[remote]" taksId="release[remote]" /><RakeTask description="Runs all the specs" fullCmd="specs" taksId="specs" /></RakeGroup></Settings>
         
     | 
    
        data/Gemfile
    ADDED
    
    
    
        data/Gemfile.lock
    ADDED
    
    | 
         @@ -0,0 +1,104 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            PATH
         
     | 
| 
      
 2 
     | 
    
         
            +
              remote: .
         
     | 
| 
      
 3 
     | 
    
         
            +
              specs:
         
     | 
| 
      
 4 
     | 
    
         
            +
                cocoapods-miBin (0.1.24)
         
     | 
| 
      
 5 
     | 
    
         
            +
                  cocoapods (~> 1.4)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  cocoapods-generate (~> 1.4)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  parallel
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            GEM
         
     | 
| 
      
 10 
     | 
    
         
            +
              remote: https://rubygems.org/
         
     | 
| 
      
 11 
     | 
    
         
            +
              specs:
         
     | 
| 
      
 12 
     | 
    
         
            +
                CFPropertyList (3.0.1)
         
     | 
| 
      
 13 
     | 
    
         
            +
                activesupport (4.2.11.1)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  i18n (~> 0.7)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  minitest (~> 5.1)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  thread_safe (~> 0.3, >= 0.3.4)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  tzinfo (~> 1.1)
         
     | 
| 
      
 18 
     | 
    
         
            +
                atomos (0.1.3)
         
     | 
| 
      
 19 
     | 
    
         
            +
                bacon (1.2.0)
         
     | 
| 
      
 20 
     | 
    
         
            +
                claide (1.0.3)
         
     | 
| 
      
 21 
     | 
    
         
            +
                cocoapods (1.7.1)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  activesupport (>= 4.0.2, < 5)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  claide (>= 1.0.2, < 2.0)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  cocoapods-core (= 1.7.1)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  cocoapods-deintegrate (>= 1.0.3, < 2.0)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  cocoapods-downloader (>= 1.2.2, < 2.0)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  cocoapods-plugins (>= 1.0.0, < 2.0)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  cocoapods-search (>= 1.0.0, < 2.0)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  cocoapods-stats (>= 1.0.0, < 2.0)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  cocoapods-trunk (>= 1.3.1, < 2.0)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  cocoapods-try (>= 1.1.0, < 2.0)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  colored2 (~> 3.1)
         
     | 
| 
      
 33 
     | 
    
         
            +
                  escape (~> 0.0.4)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  fourflusher (>= 2.2.0, < 3.0)
         
     | 
| 
      
 35 
     | 
    
         
            +
                  gh_inspector (~> 1.0)
         
     | 
| 
      
 36 
     | 
    
         
            +
                  molinillo (~> 0.6.6)
         
     | 
| 
      
 37 
     | 
    
         
            +
                  nap (~> 1.0)
         
     | 
| 
      
 38 
     | 
    
         
            +
                  ruby-macho (~> 1.4)
         
     | 
| 
      
 39 
     | 
    
         
            +
                  xcodeproj (>= 1.8.2, < 2.0)
         
     | 
| 
      
 40 
     | 
    
         
            +
                cocoapods-core (1.7.1)
         
     | 
| 
      
 41 
     | 
    
         
            +
                  activesupport (>= 4.0.2, < 6)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  fuzzy_match (~> 2.0.4)
         
     | 
| 
      
 43 
     | 
    
         
            +
                  nap (~> 1.0)
         
     | 
| 
      
 44 
     | 
    
         
            +
                cocoapods-deintegrate (1.0.4)
         
     | 
| 
      
 45 
     | 
    
         
            +
                cocoapods-disable-podfile-validations (0.1.1)
         
     | 
| 
      
 46 
     | 
    
         
            +
                cocoapods-downloader (1.2.2)
         
     | 
| 
      
 47 
     | 
    
         
            +
                cocoapods-generate (1.6.0)
         
     | 
| 
      
 48 
     | 
    
         
            +
                  cocoapods-disable-podfile-validations (~> 0.1.1)
         
     | 
| 
      
 49 
     | 
    
         
            +
                cocoapods-plugins (1.0.0)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  nap
         
     | 
| 
      
 51 
     | 
    
         
            +
                cocoapods-search (1.0.0)
         
     | 
| 
      
 52 
     | 
    
         
            +
                cocoapods-stats (1.1.0)
         
     | 
| 
      
 53 
     | 
    
         
            +
                cocoapods-trunk (1.4.1)
         
     | 
| 
      
 54 
     | 
    
         
            +
                  nap (>= 0.8, < 2.0)
         
     | 
| 
      
 55 
     | 
    
         
            +
                  netrc (~> 0.11)
         
     | 
| 
      
 56 
     | 
    
         
            +
                cocoapods-try (1.1.0)
         
     | 
| 
      
 57 
     | 
    
         
            +
                colored2 (3.1.2)
         
     | 
| 
      
 58 
     | 
    
         
            +
                concurrent-ruby (1.1.5)
         
     | 
| 
      
 59 
     | 
    
         
            +
                escape (0.0.4)
         
     | 
| 
      
 60 
     | 
    
         
            +
                fourflusher (2.3.1)
         
     | 
| 
      
 61 
     | 
    
         
            +
                fuzzy_match (2.0.4)
         
     | 
| 
      
 62 
     | 
    
         
            +
                gh_inspector (1.1.3)
         
     | 
| 
      
 63 
     | 
    
         
            +
                i18n (0.9.5)
         
     | 
| 
      
 64 
     | 
    
         
            +
                  concurrent-ruby (~> 1.0)
         
     | 
| 
      
 65 
     | 
    
         
            +
                metaclass (0.0.4)
         
     | 
| 
      
 66 
     | 
    
         
            +
                minitest (5.12.1)
         
     | 
| 
      
 67 
     | 
    
         
            +
                mocha (1.9.0)
         
     | 
| 
      
 68 
     | 
    
         
            +
                  metaclass (~> 0.0.1)
         
     | 
| 
      
 69 
     | 
    
         
            +
                mocha-on-bacon (0.2.3)
         
     | 
| 
      
 70 
     | 
    
         
            +
                  mocha (>= 0.13.0)
         
     | 
| 
      
 71 
     | 
    
         
            +
                molinillo (0.6.6)
         
     | 
| 
      
 72 
     | 
    
         
            +
                nanaimo (0.2.6)
         
     | 
| 
      
 73 
     | 
    
         
            +
                nap (1.1.0)
         
     | 
| 
      
 74 
     | 
    
         
            +
                netrc (0.11.0)
         
     | 
| 
      
 75 
     | 
    
         
            +
                parallel (1.18.0)
         
     | 
| 
      
 76 
     | 
    
         
            +
                prettybacon (0.0.2)
         
     | 
| 
      
 77 
     | 
    
         
            +
                  bacon (~> 1.2)
         
     | 
| 
      
 78 
     | 
    
         
            +
                rake (13.0.0)
         
     | 
| 
      
 79 
     | 
    
         
            +
                ruby-macho (1.4.0)
         
     | 
| 
      
 80 
     | 
    
         
            +
                thread_safe (0.3.6)
         
     | 
| 
      
 81 
     | 
    
         
            +
                tzinfo (1.2.5)
         
     | 
| 
      
 82 
     | 
    
         
            +
                  thread_safe (~> 0.1)
         
     | 
| 
      
 83 
     | 
    
         
            +
                xcodeproj (1.12.0)
         
     | 
| 
      
 84 
     | 
    
         
            +
                  CFPropertyList (>= 2.3.3, < 4.0)
         
     | 
| 
      
 85 
     | 
    
         
            +
                  atomos (~> 0.1.3)
         
     | 
| 
      
 86 
     | 
    
         
            +
                  claide (>= 1.0.2, < 2.0)
         
     | 
| 
      
 87 
     | 
    
         
            +
                  colored2 (~> 3.1)
         
     | 
| 
      
 88 
     | 
    
         
            +
                  nanaimo (~> 0.2.6)
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
            PLATFORMS
         
     | 
| 
      
 91 
     | 
    
         
            +
              ruby
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
            DEPENDENCIES
         
     | 
| 
      
 94 
     | 
    
         
            +
              bacon
         
     | 
| 
      
 95 
     | 
    
         
            +
              bundler (~> 1.3)
         
     | 
| 
      
 96 
     | 
    
         
            +
              cocoapods (= 1.7.1)
         
     | 
| 
      
 97 
     | 
    
         
            +
              cocoapods-miBin!
         
     | 
| 
      
 98 
     | 
    
         
            +
              mocha
         
     | 
| 
      
 99 
     | 
    
         
            +
              mocha-on-bacon
         
     | 
| 
      
 100 
     | 
    
         
            +
              prettybacon
         
     | 
| 
      
 101 
     | 
    
         
            +
              rake
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
            BUNDLED WITH
         
     | 
| 
      
 104 
     | 
    
         
            +
               1.17.3
         
     | 
    
        data/LICENSE.txt
    ADDED
    
    | 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Copyright (c) 2018 tripleCC <triplec.linux@gmail.com>
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            MIT License
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
      
 6 
     | 
    
         
            +
            a copy of this software and associated documentation files (the
         
     | 
| 
      
 7 
     | 
    
         
            +
            "Software"), to deal in the Software without restriction, including
         
     | 
| 
      
 8 
     | 
    
         
            +
            without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
      
 9 
     | 
    
         
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
      
 10 
     | 
    
         
            +
            permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
      
 11 
     | 
    
         
            +
            the following conditions:
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            The above copyright notice and this permission notice shall be
         
     | 
| 
      
 14 
     | 
    
         
            +
            included in all copies or substantial portions of the Software.
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
      
 17 
     | 
    
         
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
      
 18 
     | 
    
         
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         
     | 
| 
      
 19 
     | 
    
         
            +
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         
     | 
| 
      
 20 
     | 
    
         
            +
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         
     | 
| 
      
 21 
     | 
    
         
            +
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         
     | 
| 
      
 22 
     | 
    
         
            +
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
    
        data/README.md
    ADDED
    
    | 
         @@ -0,0 +1,522 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # cocoapods-miBin
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            组件二进制化插件。
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            [基于 CocoaPods 的组件二进制化实践](https://triplecc.github.io/2019/01/21/%E5%9F%BA%E4%BA%8ECocoaPods%E7%9A%84%E7%BB%84%E4%BB%B6%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%8C%96%E5%AE%9E%E8%B7%B5/)
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            [Demo 工程](https://github.com/for-example-test/cocoapods-miBin-example)
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            ## 概要
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            本插件所关联的组件二进制化策略:
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            预先将打包成  `.a` 或者 `.framework` 的组件(目前接入此插件必须使用 `.framework`,最好是静态 framework)保存到静态服务器上,并在 `install` 时,去下载组件对应的二进制版本,以减少组件编译时间,达到加快 App 打包、组件 lint、组件发布等操作的目的。
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            使用本插件需要提供以下资源:
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            - 静态资源服务器(可参考 [binary-server](https://github.com/tripleCC/binary-server.git))
         
     | 
| 
      
 18 
     | 
    
         
            +
            - 源码私有源(保存组件源码版本 podspec)
         
     | 
| 
      
 19 
     | 
    
         
            +
            - 二进制私有源(保存组件二进制版本 podspec)
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            在所有组件都依赖二进制版本的情况下,本插件支持切换指定组件的依赖版本。
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            推荐结合 GitLab CI  使用本插件,可以实现自动打包发布,并显著减少其 pipeline 耗时。关于 GitLab CI 的实践,可以参考 [火掌柜 iOS 团队 GitLab CI 集成实践](https://triplecc.github.io/2018/06/23/2018-06-23-ji-gitlabcide-ci-shi-jian/)。虽然后来对部分 stage 和脚本都进行了优化,但总体构建思路还是没变的。
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            ## 准备工作
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            安装 `cocoapods-miBin`:
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                $ gem install cocoapods-miBin
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            初始化插件:
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            ```shell
         
     | 
| 
      
 34 
     | 
    
         
            +
            ➜  ~ pod bin init
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            开始设置二进制化初始信息.
         
     | 
| 
      
 37 
     | 
    
         
            +
            所有的信息都会保存在 /Users/songruiwang/.cocoapods/bin.yml 文件中.
         
     | 
| 
      
 38 
     | 
    
         
            +
            你可以在对应目录下手动添加编辑该文件. 文件包含的配置信息样式如下:
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            ---
         
     | 
| 
      
 41 
     | 
    
         
            +
            code_repo_url: git@git.xxxxxx.net:ios/cocoapods-spec.git
         
     | 
| 
      
 42 
     | 
    
         
            +
            binary_repo_url: git@git.xxxxxx.net:ios/cocoapods-spec-binary.git
         
     | 
| 
      
 43 
     | 
    
         
            +
            binary_download_url: http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/%s/%s.zip
         
     | 
| 
      
 44 
     | 
    
         
            +
            download_file_type: zip
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            源码私有源 Git 地址
         
     | 
| 
      
 48 
     | 
    
         
            +
            旧值:git@git.xxxxxx.net:ios/cocoapods-spec.git
         
     | 
| 
      
 49 
     | 
    
         
            +
             >
         
     | 
| 
      
 50 
     | 
    
         
            +
            ```
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            按提示输入源码私有源、二进制私有源、二进制下载地址、下载文件类型后,插件就配置完成了。其中 `binary_download_url` 需要预留组件名称与组件版本占位符,插件内部会依次替换 `%s` 为相应组件的值。
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            `cococapod-bin` 也支持从 url 下载配置文件,方便对多台机器进行配置:
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            ```shell
         
     | 
| 
      
 57 
     | 
    
         
            +
            ➜  ~ pod bin init --bin-url=http://git.xxxxxx.net/qingmu/cocoapods-tdfire-binary-config/raw/master/bin.yml
         
     | 
| 
      
 58 
     | 
    
         
            +
            ```
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
            配置文件模版内容如下,根据不同团队的需求定制即可:
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
            ```yaml
         
     | 
| 
      
 63 
     | 
    
         
            +
            ---
         
     | 
| 
      
 64 
     | 
    
         
            +
            code_repo_url: git@git.xxxxxx.net:ios/cocoapods-spec.git
         
     | 
| 
      
 65 
     | 
    
         
            +
            binary_repo_url: git@git.xxxxxx.net:ios/cocoapods-spec-binary.git
         
     | 
| 
      
 66 
     | 
    
         
            +
            binary_download_url: http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/%s/%s.zip
         
     | 
| 
      
 67 
     | 
    
         
            +
            download_file_type: zip
         
     | 
| 
      
 68 
     | 
    
         
            +
            ```
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
            配置时,不需要手动添加源码和二进制私有源的 repo,插件在找不到对应 repo 时会主动 clone。
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
            插件配置完后,就可以部署静态资源服务器了。对于静态资源服务器,这里不做赘述,只提示一点:在生成二进制 podspec 时,插件会根据 `download_file_type` 设置 source 的 `:type` 字段。在下载 http/https 资源时,CocoaPods 会根据 `:type` 字段的类型采取相应的解压方式,如果设置错误就会抛错。这里提到了 **二进制 podspec 的自动生成**,后面会详细介绍。
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
            这里额外说下打包工具 [cocoapods-packager](https://github.com/CocoaPods/cocoapods-packager) 和 [Carthage](https://github.com/Carthage/Carthage/issues) ,前者可以通过 podspec 进行打包,只要保证 lint 通过了,就可以打成 `.framework`,很方便,但是作者几乎不维护了,后者需要结合组件工程。具体使用哪个可以结合自身团队,甚至可以自己写打包脚本,或者使用本插件的打包命令。
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
            ## 使用插件
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
            接入二进制版本后,常规的发布流程需要做如下变更:
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            ```shell
         
     | 
| 
      
 81 
     | 
    
         
            +
            # 1 打出二进制产物 && 提交产物至静态文件服务器
         
     | 
| 
      
 82 
     | 
    
         
            +
            pod bin archive YOUR_OPTIONS
         
     | 
| 
      
 83 
     | 
    
         
            +
            curl xxxxxxx
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            # 2.1 发布二进制 podspec
         
     | 
| 
      
 86 
     | 
    
         
            +
            pod bin repo push --binary YOUR_OPTIONS
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
            # 2.2 发布源码 podspec
         
     | 
| 
      
 89 
     | 
    
         
            +
            pod bin repo push YOUR_OPTIONS
         
     | 
| 
      
 90 
     | 
    
         
            +
            ```
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
            如果团队内部集成了 CI 平台,那么上面的每大步都可以对应一个 CI stage,源码和二进制版本可并行发布,对应一个 stage 中的两个 job。
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
            ### 基本信息
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
            `cocoapods-miBin` 命令行信息可以输入以下命令查看: 
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
            ```shell
         
     | 
| 
      
 99 
     | 
    
         
            +
            ➜  ~ pod bin --help
         
     | 
| 
      
 100 
     | 
    
         
            +
            Usage:
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                $ pod bin [COMMAND]
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                  组件二进制化插件。利用源码私有源与二进制私有源实现对组件依赖类型的切换。
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
            Commands:
         
     | 
| 
      
 107 
     | 
    
         
            +
                + archive   将组件归档为静态 framework.
         
     | 
| 
      
 108 
     | 
    
         
            +
                + init      初始化插件.
         
     | 
| 
      
 109 
     | 
    
         
            +
                + lib       管理二进制 pod.
         
     | 
| 
      
 110 
     | 
    
         
            +
                + list      展示二进制 pods .
         
     | 
| 
      
 111 
     | 
    
         
            +
                > open      打开 workspace 工程.
         
     | 
| 
      
 112 
     | 
    
         
            +
                + repo      管理 spec 仓库.
         
     | 
| 
      
 113 
     | 
    
         
            +
                + search    查找二进制 spec.
         
     | 
| 
      
 114 
     | 
    
         
            +
                + spec      管理二进制 spec.
         
     | 
| 
      
 115 
     | 
    
         
            +
                + umbrella  生成伞头文件 .
         
     | 
| 
      
 116 
     | 
    
         
            +
            ```
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
            ### 构建二进制产物
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
            ```shell
         
     | 
| 
      
 121 
     | 
    
         
            +
            ➜  ~ pod bin archive --help
         
     | 
| 
      
 122 
     | 
    
         
            +
            Usage:
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
      
 124 
     | 
    
         
            +
                $ pod bin archive [NAME.podspec]
         
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
                  将组件归档为静态 framework,仅支持 iOS 平台 此静态 framework 不包含依赖组件的 symbol
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
            Options:
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
                --code-dependencies     使用源码依赖
         
     | 
| 
      
 131 
     | 
    
         
            +
                --allow-prerelease      允许使用 prerelease 的版本
         
     | 
| 
      
 132 
     | 
    
         
            +
                --use-modular-headers   使用 modular headers (modulemap)
         
     | 
| 
      
 133 
     | 
    
         
            +
                --no-clean              保留构建中间产物
         
     | 
| 
      
 134 
     | 
    
         
            +
                --no-zip                不压缩静态 framework 为 zip
         
     | 
| 
      
 135 
     | 
    
         
            +
                ...
         
     | 
| 
      
 136 
     | 
    
         
            +
            ```
         
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
      
 138 
     | 
    
         
            +
            `pod bin archive` 会根据 podspec 文件构建静态 framework ,此静态 framework 不会包含依赖组件的符号信息。命令内部利用 [cocoapods-generate](https://github.com/square/cocoapods-generate) 插件生成工程,并移植了 [cocoapods-packager](https://github.com/CocoaPods/cocoapods-packager) 插件的部分打包功能,以构建前者生成的工程,默认条件下,命令会生成一个 zip 压缩包。
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
            ### 二进制 podspec
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
             `cocoapods-miBin` 针对一个组件,同时使用了两种 podspec,分别为源码 podspec 和二进制 podspec,这种方式在没有工具支撑的情况下,势必会增加开发者维护组件的工作量。做为开发者来说,我是不希望同时维护两套 podspec 的。为了解决这个问题, 插件提供了自动生成二进制 podspec 功能,开发者依旧只需要关心源码 podspec 即可。
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
            一般来说,在接入插件前,组件源码 podspec 是已经存在的,所以我们只需要向二进制私有源推送组件的二进制 podspec 即可。如果有条件的话,二进制和源码  podspec 的发布可以走 GitLab CI ,这也是我推荐的做法。
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
            下面介绍下和二进制 podspec 相关的 `cocoapods-miBin` 命令。
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
            #### pod bin spec create
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
            ```shell
         
     | 
| 
      
 151 
     | 
    
         
            +
            ➜  ~ pod bin spec create --help
         
     | 
| 
      
 152 
     | 
    
         
            +
            Usage:
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
                $ pod bin spec create
         
     | 
| 
      
 155 
     | 
    
         
            +
             
     | 
| 
      
 156 
     | 
    
         
            +
                  根据源码 podspec 文件,创建对应的二进制 podspec 文件.
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
            Options:
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
                --platforms=ios                                生成二进制 spec 支持的平台
         
     | 
| 
      
 161 
     | 
    
         
            +
                --template-podspec=A.binary-template.podspec   生成拥有 subspec 的二进制 spec 需要的模版
         
     | 
| 
      
 162 
     | 
    
         
            +
                                                               podspec, 插件会更改 version 和 source
         
     | 
| 
      
 163 
     | 
    
         
            +
                --no-overwrite                                 不允许覆盖
         
     | 
| 
      
 164 
     | 
    
         
            +
            	...
         
     | 
| 
      
 165 
     | 
    
         
            +
            ```
         
     | 
| 
      
 166 
     | 
    
         
            +
             
     | 
| 
      
 167 
     | 
    
         
            +
            `pod bin spec create` 会根据源码 podspec ,创建出二进制 podspec 文件。如果组件存在 subspec ,需要开发者提供 podspec 模版信息,以生成二进制 podspec。插件会根据源码 podspec 更改模版中的 version 字段,并且根据插件配置的 `binary_download_url` 生成 source 字段,最终生成二进制 podspec。
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
            以 A 组件举例,如果 A 的 podspec 如下:
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 172 
     | 
    
         
            +
            Pod::Spec.new do |s|
         
     | 
| 
      
 173 
     | 
    
         
            +
              s.name             = 'A'
         
     | 
| 
      
 174 
     | 
    
         
            +
              s.version          = '0.1.0'
         
     | 
| 
      
 175 
     | 
    
         
            +
              s.summary          = 'business A short description of A.'
         
     | 
| 
      
 176 
     | 
    
         
            +
              s.description      = <<-DESC
         
     | 
| 
      
 177 
     | 
    
         
            +
            TODO: Add long description of the pod here.
         
     | 
| 
      
 178 
     | 
    
         
            +
                                   DESC
         
     | 
| 
      
 179 
     | 
    
         
            +
              s.homepage         = 'http://git.2dfire-inc.com/ios/A'
         
     | 
| 
      
 180 
     | 
    
         
            +
              s.license          = { :type => 'MIT', :file => 'LICENSE' }
         
     | 
| 
      
 181 
     | 
    
         
            +
              s.author           = { 'qingmu' => 'qingmu@2dfire.com' }
         
     | 
| 
      
 182 
     | 
    
         
            +
              s.source           = { :git => 'http://git.2dfire-inc.com/qiandaojiang/A.git', :tag => s.version.to_s }
         
     | 
| 
      
 183 
     | 
    
         
            +
              s.ios.deployment_target = '8.0'
         
     | 
| 
      
 184 
     | 
    
         
            +
              s.source_files = 'A/Classes/**/*'
         
     | 
| 
      
 185 
     | 
    
         
            +
              s.public_header_files = 'A/Classes/**/*.{h}'
         
     | 
| 
      
 186 
     | 
    
         
            +
              s.resource_bundles = {
         
     | 
| 
      
 187 
     | 
    
         
            +
                  'A' => ['A/Assets/*']
         
     | 
| 
      
 188 
     | 
    
         
            +
              }
         
     | 
| 
      
 189 
     | 
    
         
            +
            end
         
     | 
| 
      
 190 
     | 
    
         
            +
            ```
         
     | 
| 
      
 191 
     | 
    
         
            +
             
     | 
| 
      
 192 
     | 
    
         
            +
            那么生成的 `A.binary.podspec.json` 如下:
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
            ```json
         
     | 
| 
      
 195 
     | 
    
         
            +
            {
         
     | 
| 
      
 196 
     | 
    
         
            +
              "name": "A",
         
     | 
| 
      
 197 
     | 
    
         
            +
              "version": "0.1.0",
         
     | 
| 
      
 198 
     | 
    
         
            +
              "summary": "business A short description of A.",
         
     | 
| 
      
 199 
     | 
    
         
            +
              "description": "TODO: Add long description of the pod here.",
         
     | 
| 
      
 200 
     | 
    
         
            +
              "homepage": "http://git.2dfire-inc.com/ios/A",
         
     | 
| 
      
 201 
     | 
    
         
            +
              "license": {
         
     | 
| 
      
 202 
     | 
    
         
            +
                "type": "MIT",
         
     | 
| 
      
 203 
     | 
    
         
            +
                "file": "LICENSE"
         
     | 
| 
      
 204 
     | 
    
         
            +
              },
         
     | 
| 
      
 205 
     | 
    
         
            +
              "authors": {
         
     | 
| 
      
 206 
     | 
    
         
            +
                "qingmu": "qingmu@2dfire.com"
         
     | 
| 
      
 207 
     | 
    
         
            +
              },
         
     | 
| 
      
 208 
     | 
    
         
            +
              "source": {
         
     | 
| 
      
 209 
     | 
    
         
            +
                "http": "http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/A/0.1.0.zip",
         
     | 
| 
      
 210 
     | 
    
         
            +
                "type": "zip"
         
     | 
| 
      
 211 
     | 
    
         
            +
              },
         
     | 
| 
      
 212 
     | 
    
         
            +
              "platforms": {
         
     | 
| 
      
 213 
     | 
    
         
            +
                "ios": "8.0"
         
     | 
| 
      
 214 
     | 
    
         
            +
              },
         
     | 
| 
      
 215 
     | 
    
         
            +
              "source_files": [
         
     | 
| 
      
 216 
     | 
    
         
            +
                "A.framework/Headers/*",
         
     | 
| 
      
 217 
     | 
    
         
            +
                "A.framework/Versions/A/Headers/*"
         
     | 
| 
      
 218 
     | 
    
         
            +
              ],
         
     | 
| 
      
 219 
     | 
    
         
            +
              "public_header_files": [
         
     | 
| 
      
 220 
     | 
    
         
            +
                "A.framework/Headers/*",
         
     | 
| 
      
 221 
     | 
    
         
            +
                "A.framework/Versions/A/Headers/*"
         
     | 
| 
      
 222 
     | 
    
         
            +
              ],
         
     | 
| 
      
 223 
     | 
    
         
            +
              "vendored_frameworks": "A.framework",
         
     | 
| 
      
 224 
     | 
    
         
            +
              "resources": [
         
     | 
| 
      
 225 
     | 
    
         
            +
                "A.framework/Resources/*.bundle",
         
     | 
| 
      
 226 
     | 
    
         
            +
                "A.framework/Versions/A/Resources/*.bundle"
         
     | 
| 
      
 227 
     | 
    
         
            +
              ]
         
     | 
| 
      
 228 
     | 
    
         
            +
            }
         
     | 
| 
      
 229 
     | 
    
         
            +
            ```
         
     | 
| 
      
 230 
     | 
    
         
            +
             
     | 
| 
      
 231 
     | 
    
         
            +
            如果  A 拥有 subspec:
         
     | 
| 
      
 232 
     | 
    
         
            +
             
     | 
| 
      
 233 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 234 
     | 
    
         
            +
            Pod::Spec.new do |s|
         
     | 
| 
      
 235 
     | 
    
         
            +
              s.name             = 'A'
         
     | 
| 
      
 236 
     | 
    
         
            +
              s.version          = '0.1.0'
         
     | 
| 
      
 237 
     | 
    
         
            +
              s.summary          = 'business A short description of A.'
         
     | 
| 
      
 238 
     | 
    
         
            +
              s.description      = <<-DESC
         
     | 
| 
      
 239 
     | 
    
         
            +
            TODO: Add long description of the pod here.
         
     | 
| 
      
 240 
     | 
    
         
            +
                                   DESC
         
     | 
| 
      
 241 
     | 
    
         
            +
              s.homepage         = 'http://git.2dfire-inc.com/ios/A'
         
     | 
| 
      
 242 
     | 
    
         
            +
              s.license          = { :type => 'MIT', :file => 'LICENSE' }
         
     | 
| 
      
 243 
     | 
    
         
            +
              s.author           = { 'qingmu' => 'qingmu@2dfire.com' }
         
     | 
| 
      
 244 
     | 
    
         
            +
              s.source           = { :git => 'http://git.2dfire-inc.com/qiandaojiang/A.git', :tag => s.version.to_s }
         
     | 
| 
      
 245 
     | 
    
         
            +
              s.ios.deployment_target = '8.0'
         
     | 
| 
      
 246 
     | 
    
         
            +
              s.source_files = 'A/Classes/**/*'
         
     | 
| 
      
 247 
     | 
    
         
            +
              s.public_header_files = 'A/Classes/**/*.{h}'
         
     | 
| 
      
 248 
     | 
    
         
            +
              s.resource_bundles = {
         
     | 
| 
      
 249 
     | 
    
         
            +
                  'A' => ['A/Assets/*']
         
     | 
| 
      
 250 
     | 
    
         
            +
              }
         
     | 
| 
      
 251 
     | 
    
         
            +
              s.subspec 'B' do |ss|
         
     | 
| 
      
 252 
     | 
    
         
            +
                ss.dependency 'YYModel'
         
     | 
| 
      
 253 
     | 
    
         
            +
                ss.source_files = 'A/Classes/**/*'
         
     | 
| 
      
 254 
     | 
    
         
            +
              end
         
     | 
| 
      
 255 
     | 
    
         
            +
            end
         
     | 
| 
      
 256 
     | 
    
         
            +
             
     | 
| 
      
 257 
     | 
    
         
            +
            ```
         
     | 
| 
      
 258 
     | 
    
         
            +
             
     | 
| 
      
 259 
     | 
    
         
            +
            那么就需要开发者提供 `A.binary-template.podspec`(此模版中的写法假定组件的所有 subspec 都打进一个 `.framework` 里,如果 subpsec 都有属于自己的 `.framework` ,就可以采用其他写法。),**这里要注意源码版本 subspec 集合需要为二进制版本 subspec 集合的子集,否则会出现源码拉取失败或抛出 subspec 不存在错误的情况**:
         
     | 
| 
      
 260 
     | 
    
         
            +
             
     | 
| 
      
 261 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 262 
     | 
    
         
            +
            Pod::Spec.new do |s|
         
     | 
| 
      
 263 
     | 
    
         
            +
              s.name             = 'A'
         
     | 
| 
      
 264 
     | 
    
         
            +
              s.summary          = 'business A short description of A.'
         
     | 
| 
      
 265 
     | 
    
         
            +
              s.description      = <<-DESC
         
     | 
| 
      
 266 
     | 
    
         
            +
            TODO: Add long description of the pod here.
         
     | 
| 
      
 267 
     | 
    
         
            +
                                   DESC
         
     | 
| 
      
 268 
     | 
    
         
            +
              s.homepage         = 'http://git.2dfire-inc.com/ios/A'
         
     | 
| 
      
 269 
     | 
    
         
            +
              s.license          = { :type => 'MIT', :file => 'LICENSE' }
         
     | 
| 
      
 270 
     | 
    
         
            +
              s.author           = { 'qingmu' => 'qingmu@2dfire.com' }
         
     | 
| 
      
 271 
     | 
    
         
            +
              s.ios.deployment_target = '8.0'
         
     | 
| 
      
 272 
     | 
    
         
            +
             
     | 
| 
      
 273 
     | 
    
         
            +
              s.subspec "Binary" do |ss|
         
     | 
| 
      
 274 
     | 
    
         
            +
                ss.vendored_frameworks = "#{s.name}.framework"
         
     | 
| 
      
 275 
     | 
    
         
            +
                ss.source_files = "#{s.name}.framework/Headers/*", "#{s.name}.framework/Versions/A/Headers/*"
         
     | 
| 
      
 276 
     | 
    
         
            +
                ss.public_header_files = "#{s.name}.framework/Headers/*", "#{s.name}.framework/Versions/A/Headers/*"
         
     | 
| 
      
 277 
     | 
    
         
            +
                # 结合实际打包后的资源产出文件类型编写
         
     | 
| 
      
 278 
     | 
    
         
            +
                ss.resources = "#{s.name}.framework/Resources/*.{bundle}", "#{s.name}.framework/Versions/A/Resources/*.{bundle}"
         
     | 
| 
      
 279 
     | 
    
         
            +
                ss.dependency 'YYModel'
         
     | 
| 
      
 280 
     | 
    
         
            +
              end
         
     | 
| 
      
 281 
     | 
    
         
            +
             
     | 
| 
      
 282 
     | 
    
         
            +
              s.subspec 'B' do |ss|
         
     | 
| 
      
 283 
     | 
    
         
            +
                ss.dependency "#{s.name}/Binary"
         
     | 
| 
      
 284 
     | 
    
         
            +
              end
         
     | 
| 
      
 285 
     | 
    
         
            +
            end
         
     | 
| 
      
 286 
     | 
    
         
            +
             
     | 
| 
      
 287 
     | 
    
         
            +
            ```
         
     | 
| 
      
 288 
     | 
    
         
            +
             
     | 
| 
      
 289 
     | 
    
         
            +
            最终生成的二进制 podspec 如下:
         
     | 
| 
      
 290 
     | 
    
         
            +
             
     | 
| 
      
 291 
     | 
    
         
            +
            ```json
         
     | 
| 
      
 292 
     | 
    
         
            +
            {
         
     | 
| 
      
 293 
     | 
    
         
            +
              "name": "A",
         
     | 
| 
      
 294 
     | 
    
         
            +
              "summary": "business A short description of A.",
         
     | 
| 
      
 295 
     | 
    
         
            +
              "description": "TODO: Add long description of the pod here.",
         
     | 
| 
      
 296 
     | 
    
         
            +
              "homepage": "http://git.2dfire-inc.com/ios/A",
         
     | 
| 
      
 297 
     | 
    
         
            +
              "license": {
         
     | 
| 
      
 298 
     | 
    
         
            +
                "type": "MIT",
         
     | 
| 
      
 299 
     | 
    
         
            +
                "file": "LICENSE"
         
     | 
| 
      
 300 
     | 
    
         
            +
              },
         
     | 
| 
      
 301 
     | 
    
         
            +
              "authors": {
         
     | 
| 
      
 302 
     | 
    
         
            +
                "qingmu": "qingmu@2dfire.com"
         
     | 
| 
      
 303 
     | 
    
         
            +
              },
         
     | 
| 
      
 304 
     | 
    
         
            +
              "platforms": {
         
     | 
| 
      
 305 
     | 
    
         
            +
                "ios": "8.0"
         
     | 
| 
      
 306 
     | 
    
         
            +
              },
         
     | 
| 
      
 307 
     | 
    
         
            +
              "version": "0.1.0",
         
     | 
| 
      
 308 
     | 
    
         
            +
              "source": {
         
     | 
| 
      
 309 
     | 
    
         
            +
                "http": "http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/A/0.1.0.zip",
         
     | 
| 
      
 310 
     | 
    
         
            +
                "type": "zip"
         
     | 
| 
      
 311 
     | 
    
         
            +
              },
         
     | 
| 
      
 312 
     | 
    
         
            +
              "subspecs": [
         
     | 
| 
      
 313 
     | 
    
         
            +
                {
         
     | 
| 
      
 314 
     | 
    
         
            +
                  "name": "Binary",
         
     | 
| 
      
 315 
     | 
    
         
            +
                  "vendored_frameworks": "A.framework",
         
     | 
| 
      
 316 
     | 
    
         
            +
                  "source_files": [
         
     | 
| 
      
 317 
     | 
    
         
            +
                    "A.framework/Headers/*",
         
     | 
| 
      
 318 
     | 
    
         
            +
                    "A.framework/Versions/A/Headers/*"
         
     | 
| 
      
 319 
     | 
    
         
            +
                  ],
         
     | 
| 
      
 320 
     | 
    
         
            +
                  "public_header_files": [
         
     | 
| 
      
 321 
     | 
    
         
            +
                    "A.framework/Headers/*",
         
     | 
| 
      
 322 
     | 
    
         
            +
                    "A.framework/Versions/A/Headers/*"
         
     | 
| 
      
 323 
     | 
    
         
            +
                  ],
         
     | 
| 
      
 324 
     | 
    
         
            +
                  "resources": [
         
     | 
| 
      
 325 
     | 
    
         
            +
                    "A.framework/Resources/*.{bundle}",
         
     | 
| 
      
 326 
     | 
    
         
            +
                    "A.framework/Versions/A/Resources/*.{bundle}"
         
     | 
| 
      
 327 
     | 
    
         
            +
                  ],
         
     | 
| 
      
 328 
     | 
    
         
            +
                  "dependencies": {
         
     | 
| 
      
 329 
     | 
    
         
            +
                    "YYModel": [
         
     | 
| 
      
 330 
     | 
    
         
            +
             
     | 
| 
      
 331 
     | 
    
         
            +
                    ]
         
     | 
| 
      
 332 
     | 
    
         
            +
                  }
         
     | 
| 
      
 333 
     | 
    
         
            +
                },
         
     | 
| 
      
 334 
     | 
    
         
            +
                {
         
     | 
| 
      
 335 
     | 
    
         
            +
                  "name": "B",
         
     | 
| 
      
 336 
     | 
    
         
            +
                  "dependencies": {
         
     | 
| 
      
 337 
     | 
    
         
            +
                    "A/Binary": [
         
     | 
| 
      
 338 
     | 
    
         
            +
             
     | 
| 
      
 339 
     | 
    
         
            +
                    ]
         
     | 
| 
      
 340 
     | 
    
         
            +
                  }
         
     | 
| 
      
 341 
     | 
    
         
            +
                }
         
     | 
| 
      
 342 
     | 
    
         
            +
              ]
         
     | 
| 
      
 343 
     | 
    
         
            +
            }
         
     | 
| 
      
 344 
     | 
    
         
            +
            ```
         
     | 
| 
      
 345 
     | 
    
         
            +
             
     | 
| 
      
 346 
     | 
    
         
            +
            #### pod bin spec lint
         
     | 
| 
      
 347 
     | 
    
         
            +
             
     | 
| 
      
 348 
     | 
    
         
            +
            ```shell
         
     | 
| 
      
 349 
     | 
    
         
            +
            ➜  ~ pod bin spec lint --help
         
     | 
| 
      
 350 
     | 
    
         
            +
            Usage:
         
     | 
| 
      
 351 
     | 
    
         
            +
             
     | 
| 
      
 352 
     | 
    
         
            +
                $ pod bin spec lint [NAME.podspec|DIRECTORY|http://PATH/NAME.podspec ...]
         
     | 
| 
      
 353 
     | 
    
         
            +
             
     | 
| 
      
 354 
     | 
    
         
            +
                  spec lint 二进制组件 / 源码组件
         
     | 
| 
      
 355 
     | 
    
         
            +
             
     | 
| 
      
 356 
     | 
    
         
            +
            Options:
         
     | 
| 
      
 357 
     | 
    
         
            +
             
     | 
| 
      
 358 
     | 
    
         
            +
                --binary                                       lint 组件的二进制版本
         
     | 
| 
      
 359 
     | 
    
         
            +
                --template-podspec=A.binary-template.podspec   生成拥有 subspec 的二进制 spec 需要的模版
         
     | 
| 
      
 360 
     | 
    
         
            +
                                                               podspec, 插件会更改 version 和 source
         
     | 
| 
      
 361 
     | 
    
         
            +
                --reserve-created-spec                         保留生成的二进制 spec 文件
         
     | 
| 
      
 362 
     | 
    
         
            +
                --code-dependencies                            使用源码依赖进行 lint
         
     | 
| 
      
 363 
     | 
    
         
            +
                --loose-options                                添加宽松的 options, 包括 --use-libraries
         
     | 
| 
      
 364 
     | 
    
         
            +
                                                               (可能会造成 entry point (start)
         
     | 
| 
      
 365 
     | 
    
         
            +
                                                               undefined)
         
     | 
| 
      
 366 
     | 
    
         
            +
                ...
         
     | 
| 
      
 367 
     | 
    
         
            +
            ```
         
     | 
| 
      
 368 
     | 
    
         
            +
             
     | 
| 
      
 369 
     | 
    
         
            +
            `pod bin spec lint` 默认使用二进制依赖进行 lint,在添加 `--binary` 会去 lint 当前组件的二进制 podspec(动态生成)。在添加 `--code-dependencies` 将会使用源码依赖进行 lint ,个人推荐使用二进制依赖 lint,可以极大地减少编译时间。
         
     | 
| 
      
 370 
     | 
    
         
            +
             
     | 
| 
      
 371 
     | 
    
         
            +
            #### pod bin repo push 
         
     | 
| 
      
 372 
     | 
    
         
            +
             
     | 
| 
      
 373 
     | 
    
         
            +
            ```shell
         
     | 
| 
      
 374 
     | 
    
         
            +
             
     | 
| 
      
 375 
     | 
    
         
            +
            ➜  ~ pod bin repo push --help
         
     | 
| 
      
 376 
     | 
    
         
            +
            Usage:
         
     | 
| 
      
 377 
     | 
    
         
            +
             
     | 
| 
      
 378 
     | 
    
         
            +
                $ pod bin repo push [NAME.podspec]
         
     | 
| 
      
 379 
     | 
    
         
            +
             
     | 
| 
      
 380 
     | 
    
         
            +
                  发布二进制组件 / 源码组件
         
     | 
| 
      
 381 
     | 
    
         
            +
             
     | 
| 
      
 382 
     | 
    
         
            +
            Options:
         
     | 
| 
      
 383 
     | 
    
         
            +
             
     | 
| 
      
 384 
     | 
    
         
            +
                --binary                                          发布组件的二进制版本
         
     | 
| 
      
 385 
     | 
    
         
            +
                --template-podspec=A.binary-template.podspec      生成拥有 subspec 的二进制 spec 需要的模版
         
     | 
| 
      
 386 
     | 
    
         
            +
                                                                  podspec, 插件会更改 version 和 source
         
     | 
| 
      
 387 
     | 
    
         
            +
            	--reserve-created-spec                            保留生成的二进制 spec 文件
         
     | 
| 
      
 388 
     | 
    
         
            +
                --code-dependencies                               使用源码依赖进行 lint
         
     | 
| 
      
 389 
     | 
    
         
            +
                --loose-options                                   添加宽松的 options, 包括
         
     | 
| 
      
 390 
     | 
    
         
            +
                                                                  --use-libraries (可能会造成 entry
         
     | 
| 
      
 391 
     | 
    
         
            +
                                                                  point (start) undefined)
         
     | 
| 
      
 392 
     | 
    
         
            +
                ...
         
     | 
| 
      
 393 
     | 
    
         
            +
            ```
         
     | 
| 
      
 394 
     | 
    
         
            +
             
     | 
| 
      
 395 
     | 
    
         
            +
            `pod bin repo push`  用来发布组件,其余特性和 `pod bin spec lint` 一致。
         
     | 
| 
      
 396 
     | 
    
         
            +
             
     | 
| 
      
 397 
     | 
    
         
            +
            ### Podfile DSL
         
     | 
| 
      
 398 
     | 
    
         
            +
             
     | 
| 
      
 399 
     | 
    
         
            +
            首先,开发者需要在 Podfile 中需要使用 `plugin 'cocoapods-miBin'` 语句引入插件 :
         
     | 
| 
      
 400 
     | 
    
         
            +
             
     | 
| 
      
 401 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 402 
     | 
    
         
            +
            plugin 'cocoapods-miBin'
         
     | 
| 
      
 403 
     | 
    
         
            +
            ```
         
     | 
| 
      
 404 
     | 
    
         
            +
             
     | 
| 
      
 405 
     | 
    
         
            +
            顺带可以删除 Podfile 中的 source ,因为插件内部会自动帮你添加两个私有源。
         
     | 
| 
      
 406 
     | 
    
         
            +
             
     | 
| 
      
 407 
     | 
    
         
            +
            `cocoapods-miBin `插件提供二进制相关的配置语句有 `use_binaries!`、`use_binaries_with_spec_selector!` 以及 `set_use_source_pods`,下面会分别介绍。
         
     | 
| 
      
 408 
     | 
    
         
            +
             
     | 
| 
      
 409 
     | 
    
         
            +
            #### use_binaries!
         
     | 
| 
      
 410 
     | 
    
         
            +
             
     | 
| 
      
 411 
     | 
    
         
            +
            全部组件使用二进制版本。
         
     | 
| 
      
 412 
     | 
    
         
            +
             
     | 
| 
      
 413 
     | 
    
         
            +
            支持传入布尔值控制是否使用二进制版本,比如 DEBUG 包使用二进制版本,正式包使用源码版本,Podfile 关联语句可以这样写:
         
     | 
| 
      
 414 
     | 
    
         
            +
             
     | 
| 
      
 415 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 416 
     | 
    
         
            +
            use_binaries! (ENV['DEBUG'].nil? || ENV['DEBUG'] == 'true')
         
     | 
| 
      
 417 
     | 
    
         
            +
            ```
         
     | 
| 
      
 418 
     | 
    
         
            +
             
     | 
| 
      
 419 
     | 
    
         
            +
            当组件没有二进制版本时,插件会强制工程依赖该组件的源码版本。开发者可以通过执行 `pod install--verbose` option ,在分析依赖步骤查看哪些组件没有二进制版本:
         
     | 
| 
      
 420 
     | 
    
         
            +
             
     | 
| 
      
 421 
     | 
    
         
            +
            ```shell
         
     | 
| 
      
 422 
     | 
    
         
            +
            ...
         
     | 
| 
      
 423 
     | 
    
         
            +
            Resolving dependencies of `Podfile`
         
     | 
| 
      
 424 
     | 
    
         
            +
              【AMapFrameworks | 0.0.4】组件无对应二进制版本 , 将采用源码依赖.
         
     | 
| 
      
 425 
     | 
    
         
            +
              【ActivityForRestApp | 0.2.1】组件无对应二进制版本 , 将采用源码依赖.
         
     | 
| 
      
 426 
     | 
    
         
            +
              【AssemblyComponent | 0.5.9】组件无对应二进制版本 , 将采用源码依赖.
         
     | 
| 
      
 427 
     | 
    
         
            +
              【Bugly | 2.4.6】组件无对应二进制版本 , 将采用源码依赖.
         
     | 
| 
      
 428 
     | 
    
         
            +
              【Celebi | 0.6.4】组件无对应二进制版本 , 将采用源码依赖.
         
     | 
| 
      
 429 
     | 
    
         
            +
              【CocoaAsyncSocket/RunLoop | 7.4.3】组件无对应二进制版本 , 将采用源码依赖.
         
     | 
| 
      
 430 
     | 
    
         
            +
              【CocoaLumberjack | 3.4.1】组件无对应二进制版本 , 将采用源码依赖.
         
     | 
| 
      
 431 
     | 
    
         
            +
              【CocoaLumberjack/Default | 3.4.1】组件无对应二进制版本 , 将采用源码依赖.
         
     | 
| 
      
 432 
     | 
    
         
            +
              【CocoaLumberjack/Extensions | 3.4.1】组件无对应二进制版本 , 将采用源码依赖.
         
     | 
| 
      
 433 
     | 
    
         
            +
              【CodePush | 0.3.1】组件无对应二进制版本 , 将采用源码依赖.
         
     | 
| 
      
 434 
     | 
    
         
            +
              【CodePush/Core | 0.3.1】组件无对应二进制版本 , 将采用源码依赖.
         
     | 
| 
      
 435 
     | 
    
         
            +
              【CodePush/SSZipArchive | 0.3.1】组件无对应二进制版本 , 将采用源码依赖.
         
     | 
| 
      
 436 
     | 
    
         
            +
              【ESExchangeSkin | 0.3.2】组件无对应二进制版本 , 将采用源码依赖.
         
     | 
| 
      
 437 
     | 
    
         
            +
            ...
         
     | 
| 
      
 438 
     | 
    
         
            +
            ```
         
     | 
| 
      
 439 
     | 
    
         
            +
             
     | 
| 
      
 440 
     | 
    
         
            +
            也可以通过 Podfile.lock 中的 `SPEC REPOS` 字段,查看哪些组件采用了源码版本,哪些采用了二进制版本:
         
     | 
| 
      
 441 
     | 
    
         
            +
             
     | 
| 
      
 442 
     | 
    
         
            +
            ```yaml
         
     | 
| 
      
 443 
     | 
    
         
            +
            ...
         
     | 
| 
      
 444 
     | 
    
         
            +
            SPEC REPOS:
         
     | 
| 
      
 445 
     | 
    
         
            +
              "git@git.xxxxxx.net:ios/cocoapods-spec-binary.git":
         
     | 
| 
      
 446 
     | 
    
         
            +
                - AFNetworking
         
     | 
| 
      
 447 
     | 
    
         
            +
                - Aspects
         
     | 
| 
      
 448 
     | 
    
         
            +
                - CocoaSecurity
         
     | 
| 
      
 449 
     | 
    
         
            +
                - DACircularProgress
         
     | 
| 
      
 450 
     | 
    
         
            +
               ...
         
     | 
| 
      
 451 
     | 
    
         
            +
              "git@git.xxxxxx.net:ios/cocoapods-spec.git":
         
     | 
| 
      
 452 
     | 
    
         
            +
                - ActivityForRestApp
         
     | 
| 
      
 453 
     | 
    
         
            +
                - AMapFrameworks
         
     | 
| 
      
 454 
     | 
    
         
            +
                - AssemblyComponent
         
     | 
| 
      
 455 
     | 
    
         
            +
                ...
         
     | 
| 
      
 456 
     | 
    
         
            +
            ...
         
     | 
| 
      
 457 
     | 
    
         
            +
            ```
         
     | 
| 
      
 458 
     | 
    
         
            +
             
     | 
| 
      
 459 
     | 
    
         
            +
             
     | 
| 
      
 460 
     | 
    
         
            +
            #### set_use_source_pods
         
     | 
| 
      
 461 
     | 
    
         
            +
             
     | 
| 
      
 462 
     | 
    
         
            +
            设置使用源码版本的组件。
         
     | 
| 
      
 463 
     | 
    
         
            +
             
     | 
| 
      
 464 
     | 
    
         
            +
            实际开发中,可能需要查看 YYModel 组件的源码,这时候可以这么设置:
         
     | 
| 
      
 465 
     | 
    
         
            +
             
     | 
| 
      
 466 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 467 
     | 
    
         
            +
            set_use_source_pods ['YYModel']
         
     | 
| 
      
 468 
     | 
    
         
            +
            ```
         
     | 
| 
      
 469 
     | 
    
         
            +
             
     | 
| 
      
 470 
     | 
    
         
            +
            如果 CocoaPods 版本为 1.5.3 ,终端会输出以下内容,表示 YYModel 的参照源从二进制私有源切换到了源码私有源:
         
     | 
| 
      
 471 
     | 
    
         
            +
             
     | 
| 
      
 472 
     | 
    
         
            +
            ```shell
         
     | 
| 
      
 473 
     | 
    
         
            +
            Analyzing dependencies
         
     | 
| 
      
 474 
     | 
    
         
            +
            Fetching podspec for `A` from `../`
         
     | 
| 
      
 475 
     | 
    
         
            +
            Downloading dependencies
         
     | 
| 
      
 476 
     | 
    
         
            +
            Using A (0.1.0)
         
     | 
| 
      
 477 
     | 
    
         
            +
            Installing YYModel 1.0.4.2 (source changed to `git@git.xxxxxx.net:ios/cocoapods-spec.git` from `git@git.xxxxxx.net:ios/cocoapods-spec-binary.git`)
         
     | 
| 
      
 478 
     | 
    
         
            +
            Generating Pods project
         
     | 
| 
      
 479 
     | 
    
         
            +
            Integrating client project
         
     | 
| 
      
 480 
     | 
    
         
            +
            Sending stats
         
     | 
| 
      
 481 
     | 
    
         
            +
            Pod installation complete! There is 1 dependency from the Podfile and 2 total pods installed.
         
     | 
| 
      
 482 
     | 
    
         
            +
            ```
         
     | 
| 
      
 483 
     | 
    
         
            +
             
     | 
| 
      
 484 
     | 
    
         
            +
            #### use_binaries_with_spec_selector! 
         
     | 
| 
      
 485 
     | 
    
         
            +
             
     | 
| 
      
 486 
     | 
    
         
            +
            过滤出需要使用二进制版本组件。
         
     | 
| 
      
 487 
     | 
    
         
            +
             
     | 
| 
      
 488 
     | 
    
         
            +
            假如开发者只需要 `YYModel` 的二进制版本,那么他可以在 Podfile 中添加以下代码:
         
     | 
| 
      
 489 
     | 
    
         
            +
             
     | 
| 
      
 490 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 491 
     | 
    
         
            +
            use_binaries_with_spec_selector! do |spec|
         
     | 
| 
      
 492 
     | 
    
         
            +
              spec.name == 'YYModel'
         
     | 
| 
      
 493 
     | 
    
         
            +
            end
         
     | 
| 
      
 494 
     | 
    
         
            +
            ```
         
     | 
| 
      
 495 
     | 
    
         
            +
             
     | 
| 
      
 496 
     | 
    
         
            +
            **需要注意的是,如果组件有 subspec ,使用组件名作为判断条件应如下**:
         
     | 
| 
      
 497 
     | 
    
         
            +
             
     | 
| 
      
 498 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 499 
     | 
    
         
            +
            use_binaries_with_spec_selector! do |spec|
         
     | 
| 
      
 500 
     | 
    
         
            +
              spec.name.start_with? == '组件名'
         
     | 
| 
      
 501 
     | 
    
         
            +
            end
         
     | 
| 
      
 502 
     | 
    
         
            +
            ```
         
     | 
| 
      
 503 
     | 
    
         
            +
             
     | 
| 
      
 504 
     | 
    
         
            +
            如果像上个代码块一样,**直接对比组件名,则插件会忽略此组件的所有 subspec,导致资源拉取错误**,这种场景下,最好通过 `set_use_source_pods` 语句配置依赖。
         
     | 
| 
      
 505 
     | 
    
         
            +
             
     | 
| 
      
 506 
     | 
    
         
            +
            一个实际应用是,三方组件采用二进制版本,团队编写的组件依旧采用源码版本。如果三方组件都在 `cocoapods-repo` 组下,就可以使用以下代码过滤出三方组件:
         
     | 
| 
      
 507 
     | 
    
         
            +
             
     | 
| 
      
 508 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 509 
     | 
    
         
            +
            use_binaries_with_spec_selector! do |spec|
         
     | 
| 
      
 510 
     | 
    
         
            +
             git = spec.source && spec.source['git']
         
     | 
| 
      
 511 
     | 
    
         
            +
             git && git.include?('cocoapods-repo')
         
     | 
| 
      
 512 
     | 
    
         
            +
            end
         
     | 
| 
      
 513 
     | 
    
         
            +
            ```
         
     | 
| 
      
 514 
     | 
    
         
            +
             
     | 
| 
      
 515 
     | 
    
         
            +
            #### 其他设置
         
     | 
| 
      
 516 
     | 
    
         
            +
             
     | 
| 
      
 517 
     | 
    
         
            +
            插件默认开启多线程下载组件资源,如果要禁用这个功能,Podfile 添加以下代码即可:
         
     | 
| 
      
 518 
     | 
    
         
            +
             
     | 
| 
      
 519 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 520 
     | 
    
         
            +
            install! 'cocoapods', { install_with_multi_threads: false }
         
     | 
| 
      
 521 
     | 
    
         
            +
            ```
         
     | 
| 
      
 522 
     | 
    
         
            +
             
     |