├── .gitignore
├── DEV_README.md
├── LICENSE
├── README.assets
├── image-20201007205410006.png
└── image-20201007213841235.png
├── README.md
├── cocoapods-dependency-graph
├── .gitignore
├── Gemfile
├── LICENSE.txt
├── README.md
├── Rakefile
├── cocoapods-dependency-graph.gemspec
├── lib
│ ├── cocoapods-dependency-graph
│ │ ├── command.rb
│ │ ├── command
│ │ │ └── graph.rb
│ │ ├── gem_version.rb
│ │ └── generator
│ │ │ ├── excel_generator.rb
│ │ │ ├── graph_generator.rb
│ │ │ └── json_generator.rb
│ ├── cocoapods_dependency_graph.rb
│ └── cocoapods_plugin.rb
└── spec
│ ├── command
│ └── graph_spec.rb
│ └── spec_helper.rb
└── demo
└── DependencyGraphDemo
├── DependencyGraphDemo.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── xcuserdata
│ └── zhengrongyan.xcuserdatad
│ └── xcschemes
│ └── xcschememanagement.plist
├── DependencyGraphDemo
├── AppDelegate.swift
├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── Contents.json
├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
├── Info.plist
├── SceneDelegate.swift
└── ViewController.swift
├── DependencyGraphDemoTests
├── DependencyGraphDemoTests.swift
└── Info.plist
├── DependencyGraphDemoUITests
├── DependencyGraphDemoUITests.swift
└── Info.plist
├── Podfile
└── text.txt
/.gitignore:
--------------------------------------------------------------------------------
1 | demo/DependencyGraphDemo/DependencyGraphDemo.xcodeproj/xcshareddata/
2 | demo/DependencyGraphDemo/DependencyGraphDemo.xcworkspace/
3 | demo/DependencyGraphDemo/Pods/
4 | demo/DependencyGraphDemo/Podfile.lock
5 | demo/DependencyGraphDemo/DependencyGraphDemo.xcodeproj/project.xcworkspace/xcuserdata/zhengrongyan.xcuserdatad/UserInterfaceState.xcuserstate
6 | demo/DependencyGraphDemo/DependencyGraphDemo.xcodeproj/xcuserdata/zhengrongyan.xcuserdatad/xcschemes/xcschemema
7 | cocoapods-dependency-graph/*.gem
8 |
--------------------------------------------------------------------------------
/DEV_README.md:
--------------------------------------------------------------------------------
1 |
2 | ### How to dev
3 |
4 | 1. learn [Getting Started with CocoaPods Plugin Development](https://medium.com/@vladkorzun/getting-started-with-cocoapods-plugin-development-86cd55bee1b3)
5 |
6 | 2. change code
7 | 3. build gemspec
8 | 3.1. If you add a new file, make sure that file is added in git before building. Because in the `gemspec`, we use
9 | ```
10 | spec.files = `git ls-files`.split($/)
11 | ```
12 | Now, you can build the `cocoapods-dependency-graph`
13 | ```
14 | ~> cd cocoapods-dependency-graph
15 | ~> gem build cocoapods-dependency-graph.gemspec
16 | ```
17 | 3.2. Go to `~/.gem/ruby/${version}/gems/cocoapods-dependency-graph-0.0.1/lib/cocoapods-dependency-graph/`, check if your file is packed into the plugin bundle.
18 | 4. install cocoapods-dependency-graph
19 |
20 | ```
21 | ~> gem install cocoapods-dependency-graph --user-install
22 | ~> pod plugins installed
23 | ```
24 |
25 | 5. go to the demo folder, we already add `plugin 'cocoapods-dependency-graph'` in the `Podfile`.
26 |
27 | ```
28 | ~> cd ../demo/DependencyGraphDemo
29 | ~> pod install --verbose
30 | ```
31 |
32 | ### Release new version
33 | 1. update `VERSION` in `gem_version.rb`
34 | 2. build, `gem build cocoapods-dependency-graph.gemspec`.
35 | 3. publish, `gem push cocoapods-dependency-graph-#{version}.gem`
36 |
37 | ### Doc for cocoapods
38 |
39 | Check the doc and API in https://rubydoc.info/gems/cocoapods/Pod
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 RY Zheng
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.assets/image-20201007205410006.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sueLan/cocoapods-dependency-graph/dcffd5c10a89e0f996a6bc3aa79fc774c807c705/README.assets/image-20201007205410006.png
--------------------------------------------------------------------------------
/README.assets/image-20201007213841235.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sueLan/cocoapods-dependency-graph/dcffd5c10a89e0f996a6bc3aa79fc774c807c705/README.assets/image-20201007213841235.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # cocoapods-dependency-graph
2 |
3 | A Cocoapods plugin to create the dependency graph and help you manage dependencies in your project.
4 |
5 |
6 | ## Installation
7 | ### Install
8 |
9 | ```
10 | $ gem install cocoapods-dependency-graph
11 | ```
12 |
13 | ### Build and Install Plugin
14 |
15 | $ git clone git@github.com:sueLan/cocoapods-dependency-graph.git
16 | $ cd cocoapods-dependency-graph
17 | $ gem build cocoapods-dependency-graph.gemspec && gem install cocoapods-dependency-graph --user-install
18 |
19 | ## Usage
20 |
21 | 1. add `plugin` in the `Podfile`
22 |
23 | ```
24 | plugin 'cocoapods-dependency-graph'
25 | ```
26 |
27 | 2. run `pod install`
28 | 3. output files in the project folder
29 |
30 | In the `Podfile`, you can define `dependency_output` to decide which kind of output file this plugin generates.
31 |
32 | ```
33 | dependency_output :json
34 | dependency_output :excel
35 | dependency_output :graph
36 | ```
37 | There are 3 symbols to control the output format. You can choose one of them. If you don't define `dependency_output`, by default, this plugin generates `png` and `dot` file for dependency graph.
38 |
39 | The following are output files you can generate:
40 |
41 | - `#{target_label}_dependency_json.json`: JSON file for dependencies. You can view the json in any JSON becauty tool you like.
42 |
43 |
44 |
45 | - `#{target_label}_dependency_graph.png`: A png picture shows the dependency graph
46 |
47 | 
48 |
49 | - `#{target_label}_dependency_graph.dot`: A dot file which represents the dependency graph. [A site](https://dreampuf.github.io/GraphvizOnline/) that can process the dot language. Or you can use [Graphviz](https://www.graphviz.org/theory/)
50 |
51 | - `#{target_label}_dependency_list.xlsx`: xlsx file for dependency list.
52 |
--------------------------------------------------------------------------------
/cocoapods-dependency-graph/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | pkg
3 | .idea/
4 |
--------------------------------------------------------------------------------
/cocoapods-dependency-graph/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 |
3 | # Specify your gem's dependencies in cocoapods-dependency-graph.gemspec
4 | gemspec
5 |
6 |
--------------------------------------------------------------------------------
/cocoapods-dependency-graph/LICENSE.txt:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 RY Zheng
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/cocoapods-dependency-graph/README.md:
--------------------------------------------------------------------------------
1 | # cocoapods-dependency-graph
2 |
3 | A Cocoapods plugin to create the dependency graph and help you manage dependencies in your project.
4 |
5 | ### Install
6 |
7 | ```
8 | $ gem install cocoapods-dependency-graph
9 | ```
10 |
11 | ## Usage
12 |
13 | [See More](https://github.com/sueLan/cocoapods-dependency-graph)
14 |
--------------------------------------------------------------------------------
/cocoapods-dependency-graph/Rakefile:
--------------------------------------------------------------------------------
1 | require 'bundler/gem_tasks'
2 |
3 | def specs(dir)
4 | FileList["spec/#{dir}/*_spec.rb"].shuffle.join(' ')
5 | end
6 |
7 | desc 'Runs all the specs'
8 | task :specs do
9 | sh "bundle exec bacon #{specs('**')}"
10 | end
11 |
12 | task :default => :specs
13 |
14 |
--------------------------------------------------------------------------------
/cocoapods-dependency-graph/cocoapods-dependency-graph.gemspec:
--------------------------------------------------------------------------------
1 | # coding: utf-8
2 | lib = File.expand_path('../lib', __FILE__)
3 | $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4 | require 'cocoapods-dependency-graph/gem_version.rb'
5 |
6 | Gem::Specification.new do |spec|
7 | spec.name = 'cocoapods-dependency-graph'
8 | spec.version = CocoapodsDependencyGraph::VERSION
9 | spec.authors = ['Rongyan Zheng']
10 | spec.email = ['scutryzheng@gmail.com']
11 | spec.description = %q{A short description of cocoapods-dependency-graph.}
12 | spec.summary = %q{A longer description of cocoapods-dependency-graph.}
13 | spec.homepage = 'https://github.com/EXAMPLE/cocoapods-dependency-graph'
14 | spec.license = 'MIT'
15 |
16 | spec.files = `git ls-files`.split($/)
17 | spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18 | spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19 | spec.require_paths = ['lib']
20 |
21 | spec.add_development_dependency 'bundler', '~> 1.3'
22 | spec.add_development_dependency 'rake'
23 | spec.add_dependency 'cocoapods'
24 | spec.add_dependency 'rgl'
25 | spec.add_dependency 'fast_excel'
26 | end
27 |
--------------------------------------------------------------------------------
/cocoapods-dependency-graph/lib/cocoapods-dependency-graph/command.rb:
--------------------------------------------------------------------------------
1 | require 'cocoapods-dependency-graph/command/graph'
2 |
--------------------------------------------------------------------------------
/cocoapods-dependency-graph/lib/cocoapods-dependency-graph/command/graph.rb:
--------------------------------------------------------------------------------
1 | module Pod
2 | class Command
3 | # This is an example of a cocoapods plugin adding a top-level subcommand
4 | # to the 'pod' command.
5 | #
6 | # You can also create subcommands of existing or new commands. Say you
7 | # wanted to add a subcommand to `list` to show newly deprecated pods,
8 | # (e.g. `pod list deprecated`), there are a few things that would need
9 | # to change.
10 | #
11 | # - move this file to `lib/pod/command/list/deprecated.rb` and update
12 | # the class to exist in the the Pod::Command::List namespace
13 | # - change this class to extend from `List` instead of `Command`. This
14 | # tells the plugin system that it is a subcommand of `list`.
15 | # - edit `lib/cocoapods_plugins.rb` to require this file
16 | #
17 | # @todo Create a PR to add your plugin to CocoaPods/cocoapods.org
18 | # in the `plugins.json` file, once your plugin is released.
19 | #
20 | class Dependency < Command
21 | self.summary = 'Short description of cocoapods-dependency-graph.'
22 |
23 | self.description = <<-DESC
24 | Longer description of cocoapods-dependency-graph.
25 | DESC
26 |
27 | # self.arguments = 'NAME'
28 |
29 | def initialize(argv)
30 | #@name = argv.shift_argument
31 | super
32 | end
33 |
34 | def run
35 | end
36 | end
37 | end
38 | end
39 |
--------------------------------------------------------------------------------
/cocoapods-dependency-graph/lib/cocoapods-dependency-graph/gem_version.rb:
--------------------------------------------------------------------------------
1 | module CocoapodsDependencyGraph
2 | VERSION = "1.0.5"
3 | end
4 |
--------------------------------------------------------------------------------
/cocoapods-dependency-graph/lib/cocoapods-dependency-graph/generator/excel_generator.rb:
--------------------------------------------------------------------------------
1 | require 'fast_excel'
2 |
3 | module Dependency
4 | class ExcelGenerator
5 | attr_accessor :workbook
6 | attr_accessor :worksheet
7 |
8 | def create_excel(target_label)
9 | filename = "#{target_label}_dependency_list.xlsx"
10 | File.delete(filename) if File.file?(filename)
11 |
12 | @workbook = FastExcel.open(filename, constant_memory: true)
13 | @worksheet = workbook.add_worksheet("cocoapods-dependency-list")
14 | @worksheet.auto_width = true
15 | end
16 |
17 | def create_title()
18 | @worksheet.append_row(["module name", "local", "source", "version", "homepage", "summary"], @workbook.bold_format)
19 | end
20 |
21 | def create_row(spec)
22 | return unless spec.source
23 | local = spec.local? if spec.source
24 | summary = spec.root.attributes_hash['summary']
25 | worksheet << [spec.module_name, local, spec.source, spec.version, spec.homepage, summary]
26 | end
27 |
28 | # @param [Array] specs a list specification
29 | def create_content(specs)
30 | specs.each { | spec |
31 | create_row(spec)
32 | }
33 | end
34 |
35 | def close_excel
36 | @workbook.close
37 | end
38 |
39 | # @param [UmbrellaTargetDescription] umbrella_target the CocoaPods umbrella targets generated by the installer.
40 | # @param [Hash{}] module_spec_hash
41 | #
42 | def generate(umbrella_target, module_spec_hash)
43 | create_excel(umbrella_target.cocoapods_target_label)
44 | create_title
45 | create_content(umbrella_target.specs)
46 | close_excel
47 | end
48 | end
49 | end
50 |
--------------------------------------------------------------------------------
/cocoapods-dependency-graph/lib/cocoapods-dependency-graph/generator/graph_generator.rb:
--------------------------------------------------------------------------------
1 | require 'rgl/adjacency'
2 | require 'rgl/dot'
3 |
4 | module Dependency
5 | class GraphGenerator
6 | def dependency_spces(spec)
7 | dependencies = []
8 | spec.dependencies.each { | dependency |
9 | d_spec = @module_spec_hash[dependency.name]
10 | next unless d_spec.source
11 | dependencies << d_spec
12 | }
13 | dependencies
14 | end
15 |
16 | def dfs_graph(parent, specs)
17 | specs.each { | spec |
18 | next unless spec.source
19 | @graph.add_edge(parent, spec)
20 | dfs_graph(spec, dependency_spces(spec))
21 | }
22 | end
23 |
24 | # @param [UmbrellaTargetDescription] umbrella_target the CocoaPods umbrella targets generated by the installer.
25 | # @param [Hash{}] module_spec_hash
26 | #
27 | def generate(umbrella_target, module_spec_hash)
28 | @graph = RGL::DirectedAdjacencyGraph.new
29 | @module_spec_hash = module_spec_hash
30 |
31 | target_name = umbrella_target.cocoapods_target_label
32 | root_node = {:target => target_name}
33 | dfs_graph(root_node, umbrella_target.specs)
34 |
35 | @graph.print_dotted_on
36 | dot_file = "#{target_name}_dependency_graph"
37 | @graph.write_to_graphic_file('png', dot_file)
38 | end
39 | end
40 | end
--------------------------------------------------------------------------------
/cocoapods-dependency-graph/lib/cocoapods-dependency-graph/generator/json_generator.rb:
--------------------------------------------------------------------------------
1 | require 'json'
2 |
3 | module Dependency
4 | class JsonGenerator
5 | # @param [Array] specs a list specification
6 | def create_hash(target_name, specs)
7 | dependencies = Array.new
8 | specs.each { | spec |
9 | next unless spec.source
10 | dependencies << SpecNode.new(spec).to_hash
11 | }
12 |
13 | {:target_name => dependencies}
14 | end
15 |
16 | def self.module_spec_hash
17 | @@module_spec_hash
18 | end
19 |
20 | # @param [UmbrellaTargetDescription] umbrella_target the CocoaPods umbrella targets generated by the installer.
21 | # @param [Hash{}] module_spec_hash
22 | #
23 | def generate(umbrella_target, module_spec_hash)
24 | @@module_spec_hash = module_spec_hash
25 | target_name = umbrella_target.cocoapods_target_label
26 | dependency_hash = create_hash(target_name, umbrella_target.specs)
27 | # puts dependency_hash.to_json
28 | File.open("#{target_name}_dependency_json.json","w") do |f|
29 | f.write(dependency_hash.to_json)
30 | end
31 | end
32 |
33 | class SpecNode
34 | def spec_brief_info(spec)
35 | spec_brief = Hash.new
36 | spec_brief[:name] = spec.name
37 | spec_brief[:module_name] = spec.module_name
38 | spec_brief[:source] = spec.source
39 | spec_brief[:version] = spec.version
40 | spec_brief[:homepage] = spec.homepage
41 | spec_brief[:local] = spec.local? if spec.source
42 | spec_brief[:summary] = spec.root.attributes_hash['summary']
43 | spec_brief[:subspec] = spec.subspecs
44 |
45 | spec_brief
46 | end
47 |
48 | def initialize(spec)
49 | @name = spec_brief_info(spec)
50 | @dependencies = []
51 | spec.dependencies.each { | dependency |
52 | d_spec = JsonGenerator.module_spec_hash[dependency.name]
53 | next unless d_spec.source
54 | @dependencies << SpecNode.new(d_spec).to_hash
55 | }
56 | end
57 |
58 | def to_hash()
59 | res = Hash.new
60 | res[:name] = @name
61 | res[:dependencies] = @dependencies
62 | res
63 | end
64 | end
65 | end
66 | end
--------------------------------------------------------------------------------
/cocoapods-dependency-graph/lib/cocoapods_dependency_graph.rb:
--------------------------------------------------------------------------------
1 | require 'cocoapods-dependency-graph/gem_version'
2 | require 'cocoapods'
3 | require 'fileutils'
4 | require_relative 'cocoapods-dependency-graph/generator/excel_generator'
5 | require_relative 'cocoapods-dependency-graph/generator/json_generator'
6 | require_relative 'cocoapods-dependency-graph/generator/graph_generator'
7 |
8 | module Output
9 | GRAPH = :graph
10 | JSON = :json
11 | EXCEL = :excel
12 | end
13 |
14 | # attr_accessor for class variable.
15 | def class_attr_accessor(symbol)
16 | self.class.send(:attr_accessor, symbol)
17 | end
18 |
19 | module Pod
20 | class Podfile
21 | module DSL
22 | def dependency_output(output_symbol)
23 | DSL.dependency_output_format = output_symbol
24 | end
25 |
26 | private
27 | class_attr_accessor :dependency_output_format
28 | DSL.dependency_output_format = Output::GRAPH
29 | end
30 | end
31 | end
32 |
33 | module Dependency
34 | class Graph
35 | attr_accessor :output_class_hash
36 |
37 | def init_output_hash
38 | @output_class_hash = {
39 | :graph => 'Dependency::GraphGenerator',
40 | :json => 'Dependency::JsonGenerator',
41 | :excel => 'Dependency::ExcelGenerator'
42 | }
43 | end
44 |
45 | # @param [Array] The list of
46 | # the CocoaPods umbrella targets generated by the installer.
47 | #
48 | def generate(umbrella_targets)
49 | unless umbrella_targets.length() > 0
50 | puts "No target detected"
51 | end
52 |
53 | umbrella_targets.each { |target|
54 | next if target.cocoapods_target_label.end_with?("Tests")
55 | generate_graph_for_target(target)
56 | }
57 | end
58 |
59 | # @param [UmbrellaTargetDescription] umbrella_target
60 | def generate_graph_for_target(umbrella_target)
61 | module_spec_hash = {}
62 | umbrella_target.specs.each { | spec |
63 | module_spec_hash[spec.name] = spec
64 | }
65 |
66 | init_output_hash
67 | output_key = Pod::Podfile::DSL.dependency_output_format
68 | output_key = Output::GRAPH unless output_key
69 |
70 | generator_string = @output_class_hash[output_key]
71 |
72 | unless generator_string
73 | puts "The dependency_output should be one of #{Output::GRAPH}, #{Output::JSON}, and #{Output::EXCEL}"
74 | return
75 | end
76 |
77 | generator_class = Object.const_get(generator_string)
78 | generator_class.new.generate(umbrella_target,module_spec_hash)
79 | end
80 | end
81 | end
82 |
83 |
--------------------------------------------------------------------------------
/cocoapods-dependency-graph/lib/cocoapods_plugin.rb:
--------------------------------------------------------------------------------
1 | require 'cocoapods-dependency-graph/command'
2 | require_relative 'cocoapods_dependency_graph'
3 |
4 | module Dependency
5 | # Register the post_install hook. The context is passed when running block
6 | Pod::HooksManager.register('cocoapods-dependency-graph', :post_install) do |installer_context|
7 | Graph.new.generate(installer_context.umbrella_targets)
8 | end
9 | end
--------------------------------------------------------------------------------
/cocoapods-dependency-graph/spec/command/graph_spec.rb:
--------------------------------------------------------------------------------
1 | require File.expand_path('../../spec_helper', __FILE__)
2 |
3 | module Pod
4 | describe Command::Graph do
5 | describe 'CLAide' do
6 | it 'registers it self' do
7 | Command.parse(%w{ graph }).should.be.instance_of Command::Graph
8 | end
9 | end
10 | end
11 | end
12 |
13 |
--------------------------------------------------------------------------------
/cocoapods-dependency-graph/spec/spec_helper.rb:
--------------------------------------------------------------------------------
1 | require 'pathname'
2 | ROOT = Pathname.new(File.expand_path('../../', __FILE__))
3 | $:.unshift((ROOT + 'lib').to_s)
4 | $:.unshift((ROOT + 'spec').to_s)
5 |
6 | require 'bundler/setup'
7 | require 'pathname'
8 | require 'cocoapods'
9 |
10 | Mocha::Configuration.prevent(:stubbing_non_existent_method)
11 |
12 | require 'cocoapods_plugin'
13 |
14 | #-----------------------------------------------------------------------------#
15 |
16 | module Pod
17 |
18 | # Disable the wrapping so the output is deterministic in the tests.
19 | #
20 | UI.disable_wrap = true
21 |
22 | # Redirects the messages to an internal store.
23 | #
24 | module UI
25 | @output = ''
26 | @warnings = ''
27 |
28 | class << self
29 | attr_accessor :output
30 | attr_accessor :warnings
31 |
32 | def puts(message = '')
33 | @output << "#{message}\n"
34 | end
35 |
36 | def warn(message = '', actions = [])
37 | @warnings << "#{message}\n"
38 | end
39 |
40 | def print(message)
41 | @output << message
42 | end
43 | end
44 | end
45 | end
46 |
47 | #-----------------------------------------------------------------------------#
48 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/DependencyGraphDemo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 454A369524D59C0A00AC3B59 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 454A369424D59C0A00AC3B59 /* AppDelegate.swift */; };
11 | 454A369724D59C0A00AC3B59 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 454A369624D59C0A00AC3B59 /* SceneDelegate.swift */; };
12 | 454A369924D59C0A00AC3B59 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 454A369824D59C0A00AC3B59 /* ViewController.swift */; };
13 | 454A369C24D59C0A00AC3B59 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 454A369A24D59C0A00AC3B59 /* Main.storyboard */; };
14 | 454A369E24D59C0C00AC3B59 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 454A369D24D59C0C00AC3B59 /* Assets.xcassets */; };
15 | 454A36A124D59C0C00AC3B59 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 454A369F24D59C0C00AC3B59 /* LaunchScreen.storyboard */; };
16 | 454A36AC24D59C0C00AC3B59 /* DependencyGraphDemoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 454A36AB24D59C0C00AC3B59 /* DependencyGraphDemoTests.swift */; };
17 | 454A36B724D59C0C00AC3B59 /* DependencyGraphDemoUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 454A36B624D59C0C00AC3B59 /* DependencyGraphDemoUITests.swift */; };
18 | 508EF8A7980B218E137DF52C /* Pods_DependencyGraphDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DCB922D16DF0D94DCFCE622 /* Pods_DependencyGraphDemo.framework */; };
19 | 593100A2CFD0A28C7FDB773C /* Pods_DependencyGraphDemo_DependencyGraphDemoUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2B4E60EB0957D3326F36B89 /* Pods_DependencyGraphDemo_DependencyGraphDemoUITests.framework */; };
20 | AC61FE821A0A7D6227C7C7AE /* Pods_DependencyGraphDemoTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B26964FDDDB3B22842767B /* Pods_DependencyGraphDemoTests.framework */; };
21 | /* End PBXBuildFile section */
22 |
23 | /* Begin PBXContainerItemProxy section */
24 | 454A36A824D59C0C00AC3B59 /* PBXContainerItemProxy */ = {
25 | isa = PBXContainerItemProxy;
26 | containerPortal = 454A368924D59C0A00AC3B59 /* Project object */;
27 | proxyType = 1;
28 | remoteGlobalIDString = 454A369024D59C0A00AC3B59;
29 | remoteInfo = DependencyGraphDemo;
30 | };
31 | 454A36B324D59C0C00AC3B59 /* PBXContainerItemProxy */ = {
32 | isa = PBXContainerItemProxy;
33 | containerPortal = 454A368924D59C0A00AC3B59 /* Project object */;
34 | proxyType = 1;
35 | remoteGlobalIDString = 454A369024D59C0A00AC3B59;
36 | remoteInfo = DependencyGraphDemo;
37 | };
38 | /* End PBXContainerItemProxy section */
39 |
40 | /* Begin PBXFileReference section */
41 | 29B26964FDDDB3B22842767B /* Pods_DependencyGraphDemoTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DependencyGraphDemoTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
42 | 2CEBB6F230E3F5E4E66085CE /* Pods-DependencyGraphDemo-DependencyGraphDemoUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DependencyGraphDemo-DependencyGraphDemoUITests.release.xcconfig"; path = "Target Support Files/Pods-DependencyGraphDemo-DependencyGraphDemoUITests/Pods-DependencyGraphDemo-DependencyGraphDemoUITests.release.xcconfig"; sourceTree = ""; };
43 | 454A369124D59C0A00AC3B59 /* DependencyGraphDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DependencyGraphDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
44 | 454A369424D59C0A00AC3B59 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
45 | 454A369624D59C0A00AC3B59 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; };
46 | 454A369824D59C0A00AC3B59 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
47 | 454A369B24D59C0A00AC3B59 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
48 | 454A369D24D59C0C00AC3B59 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
49 | 454A36A024D59C0C00AC3B59 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
50 | 454A36A224D59C0C00AC3B59 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
51 | 454A36A724D59C0C00AC3B59 /* DependencyGraphDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DependencyGraphDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
52 | 454A36AB24D59C0C00AC3B59 /* DependencyGraphDemoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DependencyGraphDemoTests.swift; sourceTree = ""; };
53 | 454A36AD24D59C0C00AC3B59 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
54 | 454A36B224D59C0C00AC3B59 /* DependencyGraphDemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DependencyGraphDemoUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
55 | 454A36B624D59C0C00AC3B59 /* DependencyGraphDemoUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DependencyGraphDemoUITests.swift; sourceTree = ""; };
56 | 454A36B824D59C0C00AC3B59 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
57 | 4DCB922D16DF0D94DCFCE622 /* Pods_DependencyGraphDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DependencyGraphDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; };
58 | 6D90743A5775187C92EB54BC /* Pods-DependencyGraphDemoTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DependencyGraphDemoTests.debug.xcconfig"; path = "Target Support Files/Pods-DependencyGraphDemoTests/Pods-DependencyGraphDemoTests.debug.xcconfig"; sourceTree = ""; };
59 | 914CE38D51159F7BA8973ED8 /* Pods-DependencyGraphDemo-DependencyGraphDemoUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DependencyGraphDemo-DependencyGraphDemoUITests.debug.xcconfig"; path = "Target Support Files/Pods-DependencyGraphDemo-DependencyGraphDemoUITests/Pods-DependencyGraphDemo-DependencyGraphDemoUITests.debug.xcconfig"; sourceTree = ""; };
60 | BF79C953E7A95BB500D6C2CE /* Pods-DependencyGraphDemoTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DependencyGraphDemoTests.release.xcconfig"; path = "Target Support Files/Pods-DependencyGraphDemoTests/Pods-DependencyGraphDemoTests.release.xcconfig"; sourceTree = ""; };
61 | C5BEB8ADA80E705659B02867 /* Pods-DependencyGraphDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DependencyGraphDemo.debug.xcconfig"; path = "Target Support Files/Pods-DependencyGraphDemo/Pods-DependencyGraphDemo.debug.xcconfig"; sourceTree = ""; };
62 | DA58025080C680B085519590 /* Pods-DependencyGraphDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DependencyGraphDemo.release.xcconfig"; path = "Target Support Files/Pods-DependencyGraphDemo/Pods-DependencyGraphDemo.release.xcconfig"; sourceTree = ""; };
63 | F2B4E60EB0957D3326F36B89 /* Pods_DependencyGraphDemo_DependencyGraphDemoUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DependencyGraphDemo_DependencyGraphDemoUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
64 | /* End PBXFileReference section */
65 |
66 | /* Begin PBXFrameworksBuildPhase section */
67 | 454A368E24D59C0A00AC3B59 /* Frameworks */ = {
68 | isa = PBXFrameworksBuildPhase;
69 | buildActionMask = 2147483647;
70 | files = (
71 | 508EF8A7980B218E137DF52C /* Pods_DependencyGraphDemo.framework in Frameworks */,
72 | );
73 | runOnlyForDeploymentPostprocessing = 0;
74 | };
75 | 454A36A424D59C0C00AC3B59 /* Frameworks */ = {
76 | isa = PBXFrameworksBuildPhase;
77 | buildActionMask = 2147483647;
78 | files = (
79 | AC61FE821A0A7D6227C7C7AE /* Pods_DependencyGraphDemoTests.framework in Frameworks */,
80 | );
81 | runOnlyForDeploymentPostprocessing = 0;
82 | };
83 | 454A36AF24D59C0C00AC3B59 /* Frameworks */ = {
84 | isa = PBXFrameworksBuildPhase;
85 | buildActionMask = 2147483647;
86 | files = (
87 | 593100A2CFD0A28C7FDB773C /* Pods_DependencyGraphDemo_DependencyGraphDemoUITests.framework in Frameworks */,
88 | );
89 | runOnlyForDeploymentPostprocessing = 0;
90 | };
91 | /* End PBXFrameworksBuildPhase section */
92 |
93 | /* Begin PBXGroup section */
94 | 0332883E35757AA7E1A45F33 /* Frameworks */ = {
95 | isa = PBXGroup;
96 | children = (
97 | 4DCB922D16DF0D94DCFCE622 /* Pods_DependencyGraphDemo.framework */,
98 | F2B4E60EB0957D3326F36B89 /* Pods_DependencyGraphDemo_DependencyGraphDemoUITests.framework */,
99 | 29B26964FDDDB3B22842767B /* Pods_DependencyGraphDemoTests.framework */,
100 | );
101 | name = Frameworks;
102 | sourceTree = "";
103 | };
104 | 454A368824D59C0A00AC3B59 = {
105 | isa = PBXGroup;
106 | children = (
107 | 454A369324D59C0A00AC3B59 /* DependencyGraphDemo */,
108 | 454A36AA24D59C0C00AC3B59 /* DependencyGraphDemoTests */,
109 | 454A36B524D59C0C00AC3B59 /* DependencyGraphDemoUITests */,
110 | 454A369224D59C0A00AC3B59 /* Products */,
111 | 9D7CF61899BEF194FEE522CD /* Pods */,
112 | 0332883E35757AA7E1A45F33 /* Frameworks */,
113 | );
114 | sourceTree = "";
115 | };
116 | 454A369224D59C0A00AC3B59 /* Products */ = {
117 | isa = PBXGroup;
118 | children = (
119 | 454A369124D59C0A00AC3B59 /* DependencyGraphDemo.app */,
120 | 454A36A724D59C0C00AC3B59 /* DependencyGraphDemoTests.xctest */,
121 | 454A36B224D59C0C00AC3B59 /* DependencyGraphDemoUITests.xctest */,
122 | );
123 | name = Products;
124 | sourceTree = "";
125 | };
126 | 454A369324D59C0A00AC3B59 /* DependencyGraphDemo */ = {
127 | isa = PBXGroup;
128 | children = (
129 | 454A369424D59C0A00AC3B59 /* AppDelegate.swift */,
130 | 454A369624D59C0A00AC3B59 /* SceneDelegate.swift */,
131 | 454A369824D59C0A00AC3B59 /* ViewController.swift */,
132 | 454A369A24D59C0A00AC3B59 /* Main.storyboard */,
133 | 454A369D24D59C0C00AC3B59 /* Assets.xcassets */,
134 | 454A369F24D59C0C00AC3B59 /* LaunchScreen.storyboard */,
135 | 454A36A224D59C0C00AC3B59 /* Info.plist */,
136 | );
137 | path = DependencyGraphDemo;
138 | sourceTree = "";
139 | };
140 | 454A36AA24D59C0C00AC3B59 /* DependencyGraphDemoTests */ = {
141 | isa = PBXGroup;
142 | children = (
143 | 454A36AB24D59C0C00AC3B59 /* DependencyGraphDemoTests.swift */,
144 | 454A36AD24D59C0C00AC3B59 /* Info.plist */,
145 | );
146 | path = DependencyGraphDemoTests;
147 | sourceTree = "";
148 | };
149 | 454A36B524D59C0C00AC3B59 /* DependencyGraphDemoUITests */ = {
150 | isa = PBXGroup;
151 | children = (
152 | 454A36B624D59C0C00AC3B59 /* DependencyGraphDemoUITests.swift */,
153 | 454A36B824D59C0C00AC3B59 /* Info.plist */,
154 | );
155 | path = DependencyGraphDemoUITests;
156 | sourceTree = "";
157 | };
158 | 9D7CF61899BEF194FEE522CD /* Pods */ = {
159 | isa = PBXGroup;
160 | children = (
161 | C5BEB8ADA80E705659B02867 /* Pods-DependencyGraphDemo.debug.xcconfig */,
162 | DA58025080C680B085519590 /* Pods-DependencyGraphDemo.release.xcconfig */,
163 | 914CE38D51159F7BA8973ED8 /* Pods-DependencyGraphDemo-DependencyGraphDemoUITests.debug.xcconfig */,
164 | 2CEBB6F230E3F5E4E66085CE /* Pods-DependencyGraphDemo-DependencyGraphDemoUITests.release.xcconfig */,
165 | 6D90743A5775187C92EB54BC /* Pods-DependencyGraphDemoTests.debug.xcconfig */,
166 | BF79C953E7A95BB500D6C2CE /* Pods-DependencyGraphDemoTests.release.xcconfig */,
167 | );
168 | name = Pods;
169 | path = Pods;
170 | sourceTree = "";
171 | };
172 | /* End PBXGroup section */
173 |
174 | /* Begin PBXNativeTarget section */
175 | 454A369024D59C0A00AC3B59 /* DependencyGraphDemo */ = {
176 | isa = PBXNativeTarget;
177 | buildConfigurationList = 454A36BB24D59C0C00AC3B59 /* Build configuration list for PBXNativeTarget "DependencyGraphDemo" */;
178 | buildPhases = (
179 | 9AE683DC1DE2DA980A6A0C86 /* [CP] Check Pods Manifest.lock */,
180 | 454A368D24D59C0A00AC3B59 /* Sources */,
181 | 454A368E24D59C0A00AC3B59 /* Frameworks */,
182 | 454A368F24D59C0A00AC3B59 /* Resources */,
183 | 1ECA1C6716089A662D93DF6B /* [CP] Embed Pods Frameworks */,
184 | );
185 | buildRules = (
186 | );
187 | dependencies = (
188 | );
189 | name = DependencyGraphDemo;
190 | productName = DependencyGraphDemo;
191 | productReference = 454A369124D59C0A00AC3B59 /* DependencyGraphDemo.app */;
192 | productType = "com.apple.product-type.application";
193 | };
194 | 454A36A624D59C0C00AC3B59 /* DependencyGraphDemoTests */ = {
195 | isa = PBXNativeTarget;
196 | buildConfigurationList = 454A36BE24D59C0C00AC3B59 /* Build configuration list for PBXNativeTarget "DependencyGraphDemoTests" */;
197 | buildPhases = (
198 | 8A619171DA1D275CDA7963BC /* [CP] Check Pods Manifest.lock */,
199 | 454A36A324D59C0C00AC3B59 /* Sources */,
200 | 454A36A424D59C0C00AC3B59 /* Frameworks */,
201 | 454A36A524D59C0C00AC3B59 /* Resources */,
202 | );
203 | buildRules = (
204 | );
205 | dependencies = (
206 | 454A36A924D59C0C00AC3B59 /* PBXTargetDependency */,
207 | );
208 | name = DependencyGraphDemoTests;
209 | productName = DependencyGraphDemoTests;
210 | productReference = 454A36A724D59C0C00AC3B59 /* DependencyGraphDemoTests.xctest */;
211 | productType = "com.apple.product-type.bundle.unit-test";
212 | };
213 | 454A36B124D59C0C00AC3B59 /* DependencyGraphDemoUITests */ = {
214 | isa = PBXNativeTarget;
215 | buildConfigurationList = 454A36C124D59C0C00AC3B59 /* Build configuration list for PBXNativeTarget "DependencyGraphDemoUITests" */;
216 | buildPhases = (
217 | 4D7F541A5130337AD18AA537 /* [CP] Check Pods Manifest.lock */,
218 | 454A36AE24D59C0C00AC3B59 /* Sources */,
219 | 454A36AF24D59C0C00AC3B59 /* Frameworks */,
220 | 454A36B024D59C0C00AC3B59 /* Resources */,
221 | 733E550254A52319CD2893C8 /* [CP] Embed Pods Frameworks */,
222 | );
223 | buildRules = (
224 | );
225 | dependencies = (
226 | 454A36B424D59C0C00AC3B59 /* PBXTargetDependency */,
227 | );
228 | name = DependencyGraphDemoUITests;
229 | productName = DependencyGraphDemoUITests;
230 | productReference = 454A36B224D59C0C00AC3B59 /* DependencyGraphDemoUITests.xctest */;
231 | productType = "com.apple.product-type.bundle.ui-testing";
232 | };
233 | /* End PBXNativeTarget section */
234 |
235 | /* Begin PBXProject section */
236 | 454A368924D59C0A00AC3B59 /* Project object */ = {
237 | isa = PBXProject;
238 | attributes = {
239 | LastSwiftUpdateCheck = 1160;
240 | LastUpgradeCheck = 1160;
241 | ORGANIZATIONNAME = RY;
242 | TargetAttributes = {
243 | 454A369024D59C0A00AC3B59 = {
244 | CreatedOnToolsVersion = 11.6;
245 | };
246 | 454A36A624D59C0C00AC3B59 = {
247 | CreatedOnToolsVersion = 11.6;
248 | TestTargetID = 454A369024D59C0A00AC3B59;
249 | };
250 | 454A36B124D59C0C00AC3B59 = {
251 | CreatedOnToolsVersion = 11.6;
252 | TestTargetID = 454A369024D59C0A00AC3B59;
253 | };
254 | };
255 | };
256 | buildConfigurationList = 454A368C24D59C0A00AC3B59 /* Build configuration list for PBXProject "DependencyGraphDemo" */;
257 | compatibilityVersion = "Xcode 9.3";
258 | developmentRegion = en;
259 | hasScannedForEncodings = 0;
260 | knownRegions = (
261 | en,
262 | Base,
263 | );
264 | mainGroup = 454A368824D59C0A00AC3B59;
265 | productRefGroup = 454A369224D59C0A00AC3B59 /* Products */;
266 | projectDirPath = "";
267 | projectRoot = "";
268 | targets = (
269 | 454A369024D59C0A00AC3B59 /* DependencyGraphDemo */,
270 | 454A36A624D59C0C00AC3B59 /* DependencyGraphDemoTests */,
271 | 454A36B124D59C0C00AC3B59 /* DependencyGraphDemoUITests */,
272 | );
273 | };
274 | /* End PBXProject section */
275 |
276 | /* Begin PBXResourcesBuildPhase section */
277 | 454A368F24D59C0A00AC3B59 /* Resources */ = {
278 | isa = PBXResourcesBuildPhase;
279 | buildActionMask = 2147483647;
280 | files = (
281 | 454A36A124D59C0C00AC3B59 /* LaunchScreen.storyboard in Resources */,
282 | 454A369E24D59C0C00AC3B59 /* Assets.xcassets in Resources */,
283 | 454A369C24D59C0A00AC3B59 /* Main.storyboard in Resources */,
284 | );
285 | runOnlyForDeploymentPostprocessing = 0;
286 | };
287 | 454A36A524D59C0C00AC3B59 /* Resources */ = {
288 | isa = PBXResourcesBuildPhase;
289 | buildActionMask = 2147483647;
290 | files = (
291 | );
292 | runOnlyForDeploymentPostprocessing = 0;
293 | };
294 | 454A36B024D59C0C00AC3B59 /* Resources */ = {
295 | isa = PBXResourcesBuildPhase;
296 | buildActionMask = 2147483647;
297 | files = (
298 | );
299 | runOnlyForDeploymentPostprocessing = 0;
300 | };
301 | /* End PBXResourcesBuildPhase section */
302 |
303 | /* Begin PBXShellScriptBuildPhase section */
304 | 1ECA1C6716089A662D93DF6B /* [CP] Embed Pods Frameworks */ = {
305 | isa = PBXShellScriptBuildPhase;
306 | buildActionMask = 2147483647;
307 | files = (
308 | );
309 | inputFileListPaths = (
310 | "${PODS_ROOT}/Target Support Files/Pods-DependencyGraphDemo/Pods-DependencyGraphDemo-frameworks-${CONFIGURATION}-input-files.xcfilelist",
311 | );
312 | name = "[CP] Embed Pods Frameworks";
313 | outputFileListPaths = (
314 | "${PODS_ROOT}/Target Support Files/Pods-DependencyGraphDemo/Pods-DependencyGraphDemo-frameworks-${CONFIGURATION}-output-files.xcfilelist",
315 | );
316 | runOnlyForDeploymentPostprocessing = 0;
317 | shellPath = /bin/sh;
318 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-DependencyGraphDemo/Pods-DependencyGraphDemo-frameworks.sh\"\n";
319 | showEnvVarsInLog = 0;
320 | };
321 | 4D7F541A5130337AD18AA537 /* [CP] Check Pods Manifest.lock */ = {
322 | isa = PBXShellScriptBuildPhase;
323 | buildActionMask = 2147483647;
324 | files = (
325 | );
326 | inputFileListPaths = (
327 | );
328 | inputPaths = (
329 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
330 | "${PODS_ROOT}/Manifest.lock",
331 | );
332 | name = "[CP] Check Pods Manifest.lock";
333 | outputFileListPaths = (
334 | );
335 | outputPaths = (
336 | "$(DERIVED_FILE_DIR)/Pods-DependencyGraphDemo-DependencyGraphDemoUITests-checkManifestLockResult.txt",
337 | );
338 | runOnlyForDeploymentPostprocessing = 0;
339 | shellPath = /bin/sh;
340 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
341 | showEnvVarsInLog = 0;
342 | };
343 | 733E550254A52319CD2893C8 /* [CP] Embed Pods Frameworks */ = {
344 | isa = PBXShellScriptBuildPhase;
345 | buildActionMask = 2147483647;
346 | files = (
347 | );
348 | inputFileListPaths = (
349 | "${PODS_ROOT}/Target Support Files/Pods-DependencyGraphDemo-DependencyGraphDemoUITests/Pods-DependencyGraphDemo-DependencyGraphDemoUITests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
350 | );
351 | name = "[CP] Embed Pods Frameworks";
352 | outputFileListPaths = (
353 | "${PODS_ROOT}/Target Support Files/Pods-DependencyGraphDemo-DependencyGraphDemoUITests/Pods-DependencyGraphDemo-DependencyGraphDemoUITests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
354 | );
355 | runOnlyForDeploymentPostprocessing = 0;
356 | shellPath = /bin/sh;
357 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-DependencyGraphDemo-DependencyGraphDemoUITests/Pods-DependencyGraphDemo-DependencyGraphDemoUITests-frameworks.sh\"\n";
358 | showEnvVarsInLog = 0;
359 | };
360 | 8A619171DA1D275CDA7963BC /* [CP] Check Pods Manifest.lock */ = {
361 | isa = PBXShellScriptBuildPhase;
362 | buildActionMask = 2147483647;
363 | files = (
364 | );
365 | inputFileListPaths = (
366 | );
367 | inputPaths = (
368 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
369 | "${PODS_ROOT}/Manifest.lock",
370 | );
371 | name = "[CP] Check Pods Manifest.lock";
372 | outputFileListPaths = (
373 | );
374 | outputPaths = (
375 | "$(DERIVED_FILE_DIR)/Pods-DependencyGraphDemoTests-checkManifestLockResult.txt",
376 | );
377 | runOnlyForDeploymentPostprocessing = 0;
378 | shellPath = /bin/sh;
379 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
380 | showEnvVarsInLog = 0;
381 | };
382 | 9AE683DC1DE2DA980A6A0C86 /* [CP] Check Pods Manifest.lock */ = {
383 | isa = PBXShellScriptBuildPhase;
384 | buildActionMask = 2147483647;
385 | files = (
386 | );
387 | inputFileListPaths = (
388 | );
389 | inputPaths = (
390 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
391 | "${PODS_ROOT}/Manifest.lock",
392 | );
393 | name = "[CP] Check Pods Manifest.lock";
394 | outputFileListPaths = (
395 | );
396 | outputPaths = (
397 | "$(DERIVED_FILE_DIR)/Pods-DependencyGraphDemo-checkManifestLockResult.txt",
398 | );
399 | runOnlyForDeploymentPostprocessing = 0;
400 | shellPath = /bin/sh;
401 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
402 | showEnvVarsInLog = 0;
403 | };
404 | /* End PBXShellScriptBuildPhase section */
405 |
406 | /* Begin PBXSourcesBuildPhase section */
407 | 454A368D24D59C0A00AC3B59 /* Sources */ = {
408 | isa = PBXSourcesBuildPhase;
409 | buildActionMask = 2147483647;
410 | files = (
411 | 454A369924D59C0A00AC3B59 /* ViewController.swift in Sources */,
412 | 454A369524D59C0A00AC3B59 /* AppDelegate.swift in Sources */,
413 | 454A369724D59C0A00AC3B59 /* SceneDelegate.swift in Sources */,
414 | );
415 | runOnlyForDeploymentPostprocessing = 0;
416 | };
417 | 454A36A324D59C0C00AC3B59 /* Sources */ = {
418 | isa = PBXSourcesBuildPhase;
419 | buildActionMask = 2147483647;
420 | files = (
421 | 454A36AC24D59C0C00AC3B59 /* DependencyGraphDemoTests.swift in Sources */,
422 | );
423 | runOnlyForDeploymentPostprocessing = 0;
424 | };
425 | 454A36AE24D59C0C00AC3B59 /* Sources */ = {
426 | isa = PBXSourcesBuildPhase;
427 | buildActionMask = 2147483647;
428 | files = (
429 | 454A36B724D59C0C00AC3B59 /* DependencyGraphDemoUITests.swift in Sources */,
430 | );
431 | runOnlyForDeploymentPostprocessing = 0;
432 | };
433 | /* End PBXSourcesBuildPhase section */
434 |
435 | /* Begin PBXTargetDependency section */
436 | 454A36A924D59C0C00AC3B59 /* PBXTargetDependency */ = {
437 | isa = PBXTargetDependency;
438 | target = 454A369024D59C0A00AC3B59 /* DependencyGraphDemo */;
439 | targetProxy = 454A36A824D59C0C00AC3B59 /* PBXContainerItemProxy */;
440 | };
441 | 454A36B424D59C0C00AC3B59 /* PBXTargetDependency */ = {
442 | isa = PBXTargetDependency;
443 | target = 454A369024D59C0A00AC3B59 /* DependencyGraphDemo */;
444 | targetProxy = 454A36B324D59C0C00AC3B59 /* PBXContainerItemProxy */;
445 | };
446 | /* End PBXTargetDependency section */
447 |
448 | /* Begin PBXVariantGroup section */
449 | 454A369A24D59C0A00AC3B59 /* Main.storyboard */ = {
450 | isa = PBXVariantGroup;
451 | children = (
452 | 454A369B24D59C0A00AC3B59 /* Base */,
453 | );
454 | name = Main.storyboard;
455 | sourceTree = "";
456 | };
457 | 454A369F24D59C0C00AC3B59 /* LaunchScreen.storyboard */ = {
458 | isa = PBXVariantGroup;
459 | children = (
460 | 454A36A024D59C0C00AC3B59 /* Base */,
461 | );
462 | name = LaunchScreen.storyboard;
463 | sourceTree = "";
464 | };
465 | /* End PBXVariantGroup section */
466 |
467 | /* Begin XCBuildConfiguration section */
468 | 454A36B924D59C0C00AC3B59 /* Debug */ = {
469 | isa = XCBuildConfiguration;
470 | buildSettings = {
471 | ALWAYS_SEARCH_USER_PATHS = NO;
472 | CLANG_ANALYZER_NONNULL = YES;
473 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
474 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
475 | CLANG_CXX_LIBRARY = "libc++";
476 | CLANG_ENABLE_MODULES = YES;
477 | CLANG_ENABLE_OBJC_ARC = YES;
478 | CLANG_ENABLE_OBJC_WEAK = YES;
479 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
480 | CLANG_WARN_BOOL_CONVERSION = YES;
481 | CLANG_WARN_COMMA = YES;
482 | CLANG_WARN_CONSTANT_CONVERSION = YES;
483 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
484 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
485 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
486 | CLANG_WARN_EMPTY_BODY = YES;
487 | CLANG_WARN_ENUM_CONVERSION = YES;
488 | CLANG_WARN_INFINITE_RECURSION = YES;
489 | CLANG_WARN_INT_CONVERSION = YES;
490 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
491 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
492 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
493 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
494 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
495 | CLANG_WARN_STRICT_PROTOTYPES = YES;
496 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
497 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
498 | CLANG_WARN_UNREACHABLE_CODE = YES;
499 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
500 | COPY_PHASE_STRIP = NO;
501 | DEBUG_INFORMATION_FORMAT = dwarf;
502 | ENABLE_STRICT_OBJC_MSGSEND = YES;
503 | ENABLE_TESTABILITY = YES;
504 | GCC_C_LANGUAGE_STANDARD = gnu11;
505 | GCC_DYNAMIC_NO_PIC = NO;
506 | GCC_NO_COMMON_BLOCKS = YES;
507 | GCC_OPTIMIZATION_LEVEL = 0;
508 | GCC_PREPROCESSOR_DEFINITIONS = (
509 | "DEBUG=1",
510 | "$(inherited)",
511 | );
512 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
513 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
514 | GCC_WARN_UNDECLARED_SELECTOR = YES;
515 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
516 | GCC_WARN_UNUSED_FUNCTION = YES;
517 | GCC_WARN_UNUSED_VARIABLE = YES;
518 | IPHONEOS_DEPLOYMENT_TARGET = 13.6;
519 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
520 | MTL_FAST_MATH = YES;
521 | ONLY_ACTIVE_ARCH = YES;
522 | SDKROOT = iphoneos;
523 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
524 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
525 | };
526 | name = Debug;
527 | };
528 | 454A36BA24D59C0C00AC3B59 /* Release */ = {
529 | isa = XCBuildConfiguration;
530 | buildSettings = {
531 | ALWAYS_SEARCH_USER_PATHS = NO;
532 | CLANG_ANALYZER_NONNULL = YES;
533 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
534 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
535 | CLANG_CXX_LIBRARY = "libc++";
536 | CLANG_ENABLE_MODULES = YES;
537 | CLANG_ENABLE_OBJC_ARC = YES;
538 | CLANG_ENABLE_OBJC_WEAK = YES;
539 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
540 | CLANG_WARN_BOOL_CONVERSION = YES;
541 | CLANG_WARN_COMMA = YES;
542 | CLANG_WARN_CONSTANT_CONVERSION = YES;
543 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
544 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
545 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
546 | CLANG_WARN_EMPTY_BODY = YES;
547 | CLANG_WARN_ENUM_CONVERSION = YES;
548 | CLANG_WARN_INFINITE_RECURSION = YES;
549 | CLANG_WARN_INT_CONVERSION = YES;
550 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
551 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
552 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
553 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
554 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
555 | CLANG_WARN_STRICT_PROTOTYPES = YES;
556 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
557 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
558 | CLANG_WARN_UNREACHABLE_CODE = YES;
559 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
560 | COPY_PHASE_STRIP = NO;
561 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
562 | ENABLE_NS_ASSERTIONS = NO;
563 | ENABLE_STRICT_OBJC_MSGSEND = YES;
564 | GCC_C_LANGUAGE_STANDARD = gnu11;
565 | GCC_NO_COMMON_BLOCKS = YES;
566 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
567 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
568 | GCC_WARN_UNDECLARED_SELECTOR = YES;
569 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
570 | GCC_WARN_UNUSED_FUNCTION = YES;
571 | GCC_WARN_UNUSED_VARIABLE = YES;
572 | IPHONEOS_DEPLOYMENT_TARGET = 13.6;
573 | MTL_ENABLE_DEBUG_INFO = NO;
574 | MTL_FAST_MATH = YES;
575 | SDKROOT = iphoneos;
576 | SWIFT_COMPILATION_MODE = wholemodule;
577 | SWIFT_OPTIMIZATION_LEVEL = "-O";
578 | VALIDATE_PRODUCT = YES;
579 | };
580 | name = Release;
581 | };
582 | 454A36BC24D59C0C00AC3B59 /* Debug */ = {
583 | isa = XCBuildConfiguration;
584 | baseConfigurationReference = C5BEB8ADA80E705659B02867 /* Pods-DependencyGraphDemo.debug.xcconfig */;
585 | buildSettings = {
586 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
587 | CODE_SIGN_STYLE = Automatic;
588 | DEVELOPMENT_TEAM = 93885954WQ;
589 | INFOPLIST_FILE = DependencyGraphDemo/Info.plist;
590 | LD_RUNPATH_SEARCH_PATHS = (
591 | "$(inherited)",
592 | "@executable_path/Frameworks",
593 | );
594 | PRODUCT_BUNDLE_IDENTIFIER = com.rong.lan.DependencyGraphDemo;
595 | PRODUCT_NAME = "$(TARGET_NAME)";
596 | SWIFT_VERSION = 5.0;
597 | TARGETED_DEVICE_FAMILY = "1,2";
598 | };
599 | name = Debug;
600 | };
601 | 454A36BD24D59C0C00AC3B59 /* Release */ = {
602 | isa = XCBuildConfiguration;
603 | baseConfigurationReference = DA58025080C680B085519590 /* Pods-DependencyGraphDemo.release.xcconfig */;
604 | buildSettings = {
605 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
606 | CODE_SIGN_STYLE = Automatic;
607 | DEVELOPMENT_TEAM = 93885954WQ;
608 | INFOPLIST_FILE = DependencyGraphDemo/Info.plist;
609 | LD_RUNPATH_SEARCH_PATHS = (
610 | "$(inherited)",
611 | "@executable_path/Frameworks",
612 | );
613 | PRODUCT_BUNDLE_IDENTIFIER = com.rong.lan.DependencyGraphDemo;
614 | PRODUCT_NAME = "$(TARGET_NAME)";
615 | SWIFT_VERSION = 5.0;
616 | TARGETED_DEVICE_FAMILY = "1,2";
617 | };
618 | name = Release;
619 | };
620 | 454A36BF24D59C0C00AC3B59 /* Debug */ = {
621 | isa = XCBuildConfiguration;
622 | baseConfigurationReference = 6D90743A5775187C92EB54BC /* Pods-DependencyGraphDemoTests.debug.xcconfig */;
623 | buildSettings = {
624 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
625 | BUNDLE_LOADER = "$(TEST_HOST)";
626 | CODE_SIGN_STYLE = Automatic;
627 | DEVELOPMENT_TEAM = 93885954WQ;
628 | INFOPLIST_FILE = DependencyGraphDemoTests/Info.plist;
629 | IPHONEOS_DEPLOYMENT_TARGET = 13.6;
630 | LD_RUNPATH_SEARCH_PATHS = (
631 | "$(inherited)",
632 | "@executable_path/Frameworks",
633 | "@loader_path/Frameworks",
634 | );
635 | PRODUCT_BUNDLE_IDENTIFIER = com.rong.lan.DependencyGraphDemoTests;
636 | PRODUCT_NAME = "$(TARGET_NAME)";
637 | SWIFT_VERSION = 5.0;
638 | TARGETED_DEVICE_FAMILY = "1,2";
639 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/DependencyGraphDemo.app/DependencyGraphDemo";
640 | };
641 | name = Debug;
642 | };
643 | 454A36C024D59C0C00AC3B59 /* Release */ = {
644 | isa = XCBuildConfiguration;
645 | baseConfigurationReference = BF79C953E7A95BB500D6C2CE /* Pods-DependencyGraphDemoTests.release.xcconfig */;
646 | buildSettings = {
647 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
648 | BUNDLE_LOADER = "$(TEST_HOST)";
649 | CODE_SIGN_STYLE = Automatic;
650 | DEVELOPMENT_TEAM = 93885954WQ;
651 | INFOPLIST_FILE = DependencyGraphDemoTests/Info.plist;
652 | IPHONEOS_DEPLOYMENT_TARGET = 13.6;
653 | LD_RUNPATH_SEARCH_PATHS = (
654 | "$(inherited)",
655 | "@executable_path/Frameworks",
656 | "@loader_path/Frameworks",
657 | );
658 | PRODUCT_BUNDLE_IDENTIFIER = com.rong.lan.DependencyGraphDemoTests;
659 | PRODUCT_NAME = "$(TARGET_NAME)";
660 | SWIFT_VERSION = 5.0;
661 | TARGETED_DEVICE_FAMILY = "1,2";
662 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/DependencyGraphDemo.app/DependencyGraphDemo";
663 | };
664 | name = Release;
665 | };
666 | 454A36C224D59C0C00AC3B59 /* Debug */ = {
667 | isa = XCBuildConfiguration;
668 | baseConfigurationReference = 914CE38D51159F7BA8973ED8 /* Pods-DependencyGraphDemo-DependencyGraphDemoUITests.debug.xcconfig */;
669 | buildSettings = {
670 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
671 | CODE_SIGN_STYLE = Automatic;
672 | DEVELOPMENT_TEAM = 93885954WQ;
673 | INFOPLIST_FILE = DependencyGraphDemoUITests/Info.plist;
674 | LD_RUNPATH_SEARCH_PATHS = (
675 | "$(inherited)",
676 | "@executable_path/Frameworks",
677 | "@loader_path/Frameworks",
678 | );
679 | PRODUCT_BUNDLE_IDENTIFIER = com.rong.lan.DependencyGraphDemoUITests;
680 | PRODUCT_NAME = "$(TARGET_NAME)";
681 | SWIFT_VERSION = 5.0;
682 | TARGETED_DEVICE_FAMILY = "1,2";
683 | TEST_TARGET_NAME = DependencyGraphDemo;
684 | };
685 | name = Debug;
686 | };
687 | 454A36C324D59C0C00AC3B59 /* Release */ = {
688 | isa = XCBuildConfiguration;
689 | baseConfigurationReference = 2CEBB6F230E3F5E4E66085CE /* Pods-DependencyGraphDemo-DependencyGraphDemoUITests.release.xcconfig */;
690 | buildSettings = {
691 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
692 | CODE_SIGN_STYLE = Automatic;
693 | DEVELOPMENT_TEAM = 93885954WQ;
694 | INFOPLIST_FILE = DependencyGraphDemoUITests/Info.plist;
695 | LD_RUNPATH_SEARCH_PATHS = (
696 | "$(inherited)",
697 | "@executable_path/Frameworks",
698 | "@loader_path/Frameworks",
699 | );
700 | PRODUCT_BUNDLE_IDENTIFIER = com.rong.lan.DependencyGraphDemoUITests;
701 | PRODUCT_NAME = "$(TARGET_NAME)";
702 | SWIFT_VERSION = 5.0;
703 | TARGETED_DEVICE_FAMILY = "1,2";
704 | TEST_TARGET_NAME = DependencyGraphDemo;
705 | };
706 | name = Release;
707 | };
708 | /* End XCBuildConfiguration section */
709 |
710 | /* Begin XCConfigurationList section */
711 | 454A368C24D59C0A00AC3B59 /* Build configuration list for PBXProject "DependencyGraphDemo" */ = {
712 | isa = XCConfigurationList;
713 | buildConfigurations = (
714 | 454A36B924D59C0C00AC3B59 /* Debug */,
715 | 454A36BA24D59C0C00AC3B59 /* Release */,
716 | );
717 | defaultConfigurationIsVisible = 0;
718 | defaultConfigurationName = Release;
719 | };
720 | 454A36BB24D59C0C00AC3B59 /* Build configuration list for PBXNativeTarget "DependencyGraphDemo" */ = {
721 | isa = XCConfigurationList;
722 | buildConfigurations = (
723 | 454A36BC24D59C0C00AC3B59 /* Debug */,
724 | 454A36BD24D59C0C00AC3B59 /* Release */,
725 | );
726 | defaultConfigurationIsVisible = 0;
727 | defaultConfigurationName = Release;
728 | };
729 | 454A36BE24D59C0C00AC3B59 /* Build configuration list for PBXNativeTarget "DependencyGraphDemoTests" */ = {
730 | isa = XCConfigurationList;
731 | buildConfigurations = (
732 | 454A36BF24D59C0C00AC3B59 /* Debug */,
733 | 454A36C024D59C0C00AC3B59 /* Release */,
734 | );
735 | defaultConfigurationIsVisible = 0;
736 | defaultConfigurationName = Release;
737 | };
738 | 454A36C124D59C0C00AC3B59 /* Build configuration list for PBXNativeTarget "DependencyGraphDemoUITests" */ = {
739 | isa = XCConfigurationList;
740 | buildConfigurations = (
741 | 454A36C224D59C0C00AC3B59 /* Debug */,
742 | 454A36C324D59C0C00AC3B59 /* Release */,
743 | );
744 | defaultConfigurationIsVisible = 0;
745 | defaultConfigurationName = Release;
746 | };
747 | /* End XCConfigurationList section */
748 | };
749 | rootObject = 454A368924D59C0A00AC3B59 /* Project object */;
750 | }
751 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/DependencyGraphDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/DependencyGraphDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/DependencyGraphDemo.xcodeproj/xcuserdata/zhengrongyan.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | DependencyGraphDemo.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/DependencyGraphDemo/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // DependencyGraphDemo
4 | //
5 | // Created by 蓝容 on 1/8/20.
6 | // Copyright © 2020 RY. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 |
15 |
16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
17 | // Override point for customization after application launch.
18 | return true
19 | }
20 |
21 | // MARK: UISceneSession Lifecycle
22 |
23 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
24 | // Called when a new scene session is being created.
25 | // Use this method to select a configuration to create the new scene with.
26 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
27 | }
28 |
29 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) {
30 | // Called when the user discards a scene session.
31 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
32 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
33 | }
34 |
35 |
36 | }
37 |
38 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/DependencyGraphDemo/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "scale" : "2x",
6 | "size" : "20x20"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "scale" : "3x",
11 | "size" : "20x20"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "scale" : "2x",
16 | "size" : "29x29"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "scale" : "3x",
21 | "size" : "29x29"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "scale" : "2x",
26 | "size" : "40x40"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "scale" : "3x",
31 | "size" : "40x40"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "scale" : "2x",
36 | "size" : "60x60"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "scale" : "3x",
41 | "size" : "60x60"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "scale" : "1x",
46 | "size" : "20x20"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "scale" : "2x",
51 | "size" : "20x20"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "scale" : "1x",
56 | "size" : "29x29"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "scale" : "2x",
61 | "size" : "29x29"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "scale" : "1x",
66 | "size" : "40x40"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "scale" : "2x",
71 | "size" : "40x40"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "scale" : "1x",
76 | "size" : "76x76"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "scale" : "2x",
81 | "size" : "76x76"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "scale" : "2x",
86 | "size" : "83.5x83.5"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "scale" : "1x",
91 | "size" : "1024x1024"
92 | }
93 | ],
94 | "info" : {
95 | "author" : "xcode",
96 | "version" : 1
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/DependencyGraphDemo/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/DependencyGraphDemo/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/DependencyGraphDemo/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/DependencyGraphDemo/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UIApplicationSceneManifest
24 |
25 | UIApplicationSupportsMultipleScenes
26 |
27 | UISceneConfigurations
28 |
29 | UIWindowSceneSessionRoleApplication
30 |
31 |
32 | UISceneConfigurationName
33 | Default Configuration
34 | UISceneDelegateClassName
35 | $(PRODUCT_MODULE_NAME).SceneDelegate
36 | UISceneStoryboardFile
37 | Main
38 |
39 |
40 |
41 |
42 | UILaunchStoryboardName
43 | LaunchScreen
44 | UIMainStoryboardFile
45 | Main
46 | UIRequiredDeviceCapabilities
47 |
48 | armv7
49 |
50 | UISupportedInterfaceOrientations
51 |
52 | UIInterfaceOrientationPortrait
53 | UIInterfaceOrientationLandscapeLeft
54 | UIInterfaceOrientationLandscapeRight
55 |
56 | UISupportedInterfaceOrientations~ipad
57 |
58 | UIInterfaceOrientationPortrait
59 | UIInterfaceOrientationPortraitUpsideDown
60 | UIInterfaceOrientationLandscapeLeft
61 | UIInterfaceOrientationLandscapeRight
62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/DependencyGraphDemo/SceneDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SceneDelegate.swift
3 | // DependencyGraphDemo
4 | //
5 | // Created by 蓝容 on 1/8/20.
6 | // Copyright © 2020 RY. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class SceneDelegate: UIResponder, UIWindowSceneDelegate {
12 |
13 | var window: UIWindow?
14 |
15 |
16 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
17 | // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
18 | // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
19 | // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
20 | guard let _ = (scene as? UIWindowScene) else { return }
21 | }
22 |
23 | func sceneDidDisconnect(_ scene: UIScene) {
24 | // Called as the scene is being released by the system.
25 | // This occurs shortly after the scene enters the background, or when its session is discarded.
26 | // Release any resources associated with this scene that can be re-created the next time the scene connects.
27 | // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead).
28 | }
29 |
30 | func sceneDidBecomeActive(_ scene: UIScene) {
31 | // Called when the scene has moved from an inactive state to an active state.
32 | // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
33 | }
34 |
35 | func sceneWillResignActive(_ scene: UIScene) {
36 | // Called when the scene will move from an active state to an inactive state.
37 | // This may occur due to temporary interruptions (ex. an incoming phone call).
38 | }
39 |
40 | func sceneWillEnterForeground(_ scene: UIScene) {
41 | // Called as the scene transitions from the background to the foreground.
42 | // Use this method to undo the changes made on entering the background.
43 | }
44 |
45 | func sceneDidEnterBackground(_ scene: UIScene) {
46 | // Called as the scene transitions from the foreground to the background.
47 | // Use this method to save data, release shared resources, and store enough scene-specific state information
48 | // to restore the scene back to its current state.
49 | }
50 |
51 |
52 | }
53 |
54 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/DependencyGraphDemo/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // DependencyGraphDemo
4 | //
5 | // Created by 蓝容 on 1/8/20.
6 | // Copyright © 2020 RY. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | // Do any additional setup after loading the view.
16 | }
17 |
18 |
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/DependencyGraphDemoTests/DependencyGraphDemoTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DependencyGraphDemoTests.swift
3 | // DependencyGraphDemoTests
4 | //
5 | // Created by 蓝容 on 1/8/20.
6 | // Copyright © 2020 RY. All rights reserved.
7 | //
8 |
9 | import XCTest
10 | @testable import DependencyGraphDemo
11 |
12 | class DependencyGraphDemoTests: XCTestCase {
13 |
14 | override func setUpWithError() throws {
15 | // Put setup code here. This method is called before the invocation of each test method in the class.
16 | }
17 |
18 | override func tearDownWithError() throws {
19 | // Put teardown code here. This method is called after the invocation of each test method in the class.
20 | }
21 |
22 | func testExample() throws {
23 | // This is an example of a functional test case.
24 | // Use XCTAssert and related functions to verify your tests produce the correct results.
25 | }
26 |
27 | func testPerformanceExample() throws {
28 | // This is an example of a performance test case.
29 | self.measure {
30 | // Put the code you want to measure the time of here.
31 | }
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/DependencyGraphDemoTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/DependencyGraphDemoUITests/DependencyGraphDemoUITests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DependencyGraphDemoUITests.swift
3 | // DependencyGraphDemoUITests
4 | //
5 | // Created by 蓝容 on 1/8/20.
6 | // Copyright © 2020 RY. All rights reserved.
7 | //
8 |
9 | import XCTest
10 |
11 | class DependencyGraphDemoUITests: XCTestCase {
12 |
13 | override func setUpWithError() throws {
14 | // Put setup code here. This method is called before the invocation of each test method in the class.
15 |
16 | // In UI tests it is usually best to stop immediately when a failure occurs.
17 | continueAfterFailure = false
18 |
19 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
20 | }
21 |
22 | override func tearDownWithError() throws {
23 | // Put teardown code here. This method is called after the invocation of each test method in the class.
24 | }
25 |
26 | func testExample() throws {
27 | // UI tests must launch the application that they test.
28 | let app = XCUIApplication()
29 | app.launch()
30 |
31 | // Use recording to get started writing UI tests.
32 | // Use XCTAssert and related functions to verify your tests produce the correct results.
33 | }
34 |
35 | func testLaunchPerformance() throws {
36 | if #available(macOS 10.15, iOS 13.0, tvOS 13.0, *) {
37 | // This measures how long it takes to launch your application.
38 | measure(metrics: [XCTOSSignpostMetric.applicationLaunch]) {
39 | XCUIApplication().launch()
40 | }
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/DependencyGraphDemoUITests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment the next line to define a global platform for your project
2 | # platform :ios, '9.0'
3 | # Uncomment the next line to define a global platform for your project
4 | # platform :ios, '9.0'
5 | plugin 'cocoapods-dependency-graph'
6 | dependency_output :json
7 |
8 | target 'DependencyGraphDemo' do
9 | # Comment the next line if you don't want to use dynamic frameworks
10 | use_frameworks!
11 |
12 | # Pods for DependencyGraphDemo
13 | pod 'Alamofire', '~> 5.2'
14 | pod 'RxSwift', '~> 5'
15 | pod 'RxCocoa', '~> 5'
16 | pod 'lottie-ios'
17 | pod 'SVProgressHUD'
18 | pod 'Firebase/Analytics'
19 | pod 'Reachability'
20 | target 'DependencyGraphDemoTests' do
21 | inherit! :search_paths
22 | # Pods for testing
23 | end
24 |
25 | target 'DependencyGraphDemoUITests' do
26 | # Pods for testing
27 | end
28 |
29 | end
30 |
--------------------------------------------------------------------------------
/demo/DependencyGraphDemo/text.txt:
--------------------------------------------------------------------------------
1 | [!] Your Podfile requires that the plugin `cocoapods-dependency-graph` be installed. Please install it and try installation again.
2 |
--------------------------------------------------------------------------------