iOS開発コンポーネント化Podfileが大きすぎたり、内容が長すぎたりしたらどうしますか?


iOS開発コンポーネント化Podfileが大きすぎたり、内容が長すぎたりしたらどうしますか?
日常的なiOS開発では、Cocoapodsを使用してさまざまなサードパーティを管理したり、コンポーネント化したりするときに、独自のコンポーネントを管理したりします.プロジェクトが複雑になるとPodfileも肥大化するので、中の内容を複数のファイルに分散します.もっとメンテナンスがよくなります.
どうしよう?
CocoapodsはRuby言語で書かれていることはよく知られていますので、自分でスクリプトを書いて、複数のファイルからロードするPodライブラリを読み込みます.まずDemoアドレスを置いて、皆さんが調べるようにします:PodfileExample
準備作業
  • Podfile、これは簡単です.pod init
  • を作成します.
  • 他のファイルは、これも簡単ですが、.rbなどの拡張子Pod_Business.rbを加えたほうがいいです.
    実は、Demoを見てから、あなたはもうどうすればいいか知っていると信じています.では、ここで、私は一部のコードを貼って、大まかな意味を少し説明します.
    Pod_Business.rb
    #    
    #  ,     。   3 、 10 
    #
    #    
    Alarmfire
    #JSON  
    HandyJSON, 5.0.0
    #   ,        ,           ,      ,   。
    PodfileExample, 0.1.0, ../
    #
    #end of the file
    

    注意!.rbファイルでは空行は不要ですが、読み込み時には1行ずつ読み取り、「#」と「/」の先頭の記号のみがフィルタリングされているので、空行も「#」で埋めておきますので、具体的には以下の参考にしてください
    Podfile
    #          
    #source 'https://xxx.com/xxxx/xxx/xx.git'
    source 'https://github.com/CocoaPods/Specs.git'
    
    platform :ios, '10.0'
    use_frameworks!
    
    #      ,    ,       。
    #       Podfile         ,          。
    def all_pods(file)
      file_path = File.expand_path(file)
      if !File.exists? file_path
        #       ,     
        return [];
      end
      #    ,     
      pods_array = []
      #     # /    
      skip_line_start_symbols = ["#", "/"]
      #    
      File.foreach(file_path) { |line|
        #      ,        
        next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
        #     ,         ,     
        pods_array.push(line);
      }
      return pods_array
    end
    
    target 'PodfileExample_Example' do
    
      #       
      file_array = ['Pod_Business.rb', 'Pod_UI.rb']
      #  
      file_array.map { |file|
        #         ,    
        pods_array = all_pods(file)
        #     
        pods_array.map { |line|
          #    ,         
          array = line.split(",")
          #strip()     
          #  
          name = array[0].strip()
          if array.length == 2
            #  
            version = array[1].strip()
            #  ,    pod   。
            pod name, version
            elsif array.length == 3
            #    path  ,          ,          ,        。
            path = array[2].strip()
            #  path    
            pod name, :path => path
            else
            #       pod 
            pod name
          end
        }
      }
      
      #     
      pod 'LookinServer', :configurations => ['Debug']	#UI  
      
    end
    

    ディスカッション
    実際には、classを定義したり、name、version、path......などのいくつかの変数を宣言したりして、ファイルから行ごとに読み取り、定義したclassのインスタンスを生成して配列に配置するなど、より完璧な方法があります.最後に,解析の際も配列を遍歴し,オブジェクトによって異なるpod文を生成すればよい.
    他に何か質問があれば、下のコメントエリアにコメントしてください~またはGithub PodfileExampleにissueを提出してください.