xcres 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +2 -4
  3. data/README.md +6 -1
  4. data/lib/xcres/analyzer/analyzer.rb +1 -1
  5. data/lib/xcres/analyzer/resources_analyzer/base_resources_analyzer.rb +13 -6
  6. data/lib/xcres/analyzer/resources_analyzer/bundle_resources_analyzer.rb +4 -9
  7. data/lib/xcres/analyzer/resources_analyzer/loose_resources_analyzer.rb +4 -5
  8. data/lib/xcres/analyzer/resources_analyzer/xcassets_analyzer.rb +7 -11
  9. data/lib/xcres/builder/file_builder.rb +1 -1
  10. data/lib/xcres/command/install_command.rb +4 -3
  11. data/lib/xcres/command/project_command.rb +21 -8
  12. data/lib/xcres/model/xcassets/bundle.rb +1 -1
  13. data/lib/xcres/version.rb +1 -1
  14. data/spec/fixtures/Example/Example/Images.xcassets/AppIcon.appiconset/Contents.json +5 -0
  15. data/spec/fixtures/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/Contents.json +23 -0
  16. data/spec/fixtures/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat.jpg +0 -0
  17. data/spec/fixtures/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@2x.jpg +0 -0
  18. data/spec/fixtures/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@3x.jpg +0 -0
  19. data/spec/fixtures/Example/Example/Images.xcassets/Doge.imageset/Contents.json +4 -0
  20. data/spec/integration.rb +1 -0
  21. data/spec/integration/build-keyword-clash/after/R.h +0 -2
  22. data/spec/integration/build-keyword-clash/after/R.m +0 -2
  23. data/spec/integration/build/after/Example/Example/Images.xcassets/AppIcon.appiconset/Contents.json +5 -0
  24. data/spec/integration/build/after/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/Contents.json +23 -0
  25. data/spec/integration/build/after/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat.jpg +0 -0
  26. data/spec/integration/build/after/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@2x.jpg +0 -0
  27. data/spec/integration/build/after/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@3x.jpg +0 -0
  28. data/spec/integration/build/after/Example/Example/Images.xcassets/Doge.imageset/Contents.json +4 -0
  29. data/spec/integration/build/after/R.h +2 -0
  30. data/spec/integration/build/after/R.m +1 -0
  31. data/spec/integration/build/after/execution_output.txt +2 -2
  32. data/spec/integration/build/before/Example/Example/Images.xcassets/AppIcon.appiconset/Contents.json +5 -0
  33. data/spec/integration/build/before/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/Contents.json +23 -0
  34. data/spec/integration/build/before/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat.jpg +0 -0
  35. data/spec/integration/build/before/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@2x.jpg +0 -0
  36. data/spec/integration/build/before/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@3x.jpg +0 -0
  37. data/spec/integration/build/before/Example/Example/Images.xcassets/Doge.imageset/Contents.json +4 -0
  38. data/spec/integration/install-again/after/Example/Example.xcodeproj.yaml +1 -1
  39. data/spec/integration/install-moved-supporting-files/after/Example/Example.xcodeproj.yaml +1 -1
  40. data/spec/integration/install-moved-supporting-files/after/execution_output.txt +2 -2
  41. data/spec/integration/install-no-supporting-files/after/Example/Example.xcodeproj.yaml +1 -1
  42. data/spec/integration/install-no-supporting-files/after/execution_output.txt +3 -3
  43. data/spec/integration/install/after/Example/Example.xcodeproj.yaml +1 -1
  44. data/spec/integration/install/after/execution_output.txt +1 -1
  45. data/spec/integration/version/after/execution_output.txt +1 -1
  46. data/spec/spec_helper/xcodeproj_project_yaml.rb +15 -0
  47. data/spec/unit/analyzer/resources_analyzer/base_resources_analyzer_spec.rb +41 -8
  48. data/spec/unit/analyzer/resources_analyzer/bundle_resources_analyzer_spec.rb +2 -2
  49. data/spec/unit/model/xcassets/bundle_spec.rb +32 -17
  50. data/spec/unit/model/xcassets/resource_spec.rb +6 -1
  51. metadata +26 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 80b04c8fed347600827fbc19c5e653a9712f34ab
4
- data.tar.gz: 60548aca09f900ee073773231edbd6cfce51a846
3
+ metadata.gz: 582ff4713e27360dad8eac366f7fb972e631696f
4
+ data.tar.gz: 95e46087ebe01b670c0cc4b03493e87963146b17
5
5
  SHA512:
6
- metadata.gz: 032d1b4d09124dd1cecf1c587a8579bacc57e43aa051f68ea9a14300abd5426dddab95e075d9f83caa969aabed65969c25bb2057f2f332af5ed407f6aaec4346
7
- data.tar.gz: d821c4b06474126ec9ca3bf0826b516ccc2143d9b6d42a6ba377229d8656c5218dd9ff553e99bf7ea40cd402e09e2a5e16c3070cf538abb55e9f84c345d10c4a
6
+ metadata.gz: 65b834e686b1f356abced830e74608fac622bc6c0d744ab7da13e8ce3592c18c42968c980b32d155f4bdd890a17ed10f301f4ad393e4a2c336e4d5cbab02d22e
7
+ data.tar.gz: dfa1cc9951f35286e886179f80f5560bcf8ce3c6cda38e287103209353418b30822ddeba41cfb7339237b92a8a866948e84f95c0182bf859e37e5514beca0162
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- xcres (0.4.1)
4
+ xcres (0.4.2)
5
5
  activesupport (>= 3.2.15, < 4)
6
6
  clamp (~> 0.6.3)
7
7
  colored (~> 1.2)
@@ -11,7 +11,6 @@ PATH
11
11
  GEM
12
12
  remote: https://rubygems.org/
13
13
  specs:
14
- CFPropertyList (2.2.8)
15
14
  activesupport (3.2.19)
16
15
  i18n (~> 0.6, >= 0.6.4)
17
16
  multi_json (~> 1.0)
@@ -62,8 +61,7 @@ GEM
62
61
  term-ansicolor (1.3.0)
63
62
  tins (~> 1.0)
64
63
  tins (1.3.2)
65
- xcodeproj (0.18.0)
66
- CFPropertyList (~> 2.2)
64
+ xcodeproj (0.19.4)
67
65
  activesupport (~> 3.0)
68
66
  colored (~> 1.2)
69
67
  yard (0.8.7.4)
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # xcres
1
+ # <center>![xcres](/../assets/xcres_banner.png?raw=true)</center>
2
2
 
3
3
  [![Twitter: @mrackwitz](https://img.shields.io/badge/contact-@mrackwitz-blue.svg?style=flat)](https://twitter.com/mrackwitz)
4
4
  [![Gem](https://img.shields.io/gem/v/xcres.svg?style=flat)](http://rubygems.org/gems/xcres)
@@ -176,6 +176,11 @@ also warn you about those. It can be a help, if you want to migrate
176
176
  your project to non-natural language keys.
177
177
 
178
178
 
179
+ ## Credits
180
+
181
+ The logo was designed by [@kuchengnom](https://github.com/kuchengnom).
182
+
183
+
179
184
  ## License
180
185
 
181
186
  xcres is available under MIT License.
@@ -53,7 +53,7 @@ module XCRes
53
53
  # the built sections
54
54
  #
55
55
  def analyze
56
- # Empty stub implementation
56
+ @sections = @sections.compact.reject { |s| s.items.nil? || s.items.empty? }
57
57
  end
58
58
 
59
59
  # Return the Xcode project to analyze
@@ -79,20 +79,27 @@ module XCRes
79
79
  #
80
80
  # @param [Hash] options
81
81
  # valid options are:
82
- # * [Bool] :use_basename?
83
- # if set, it will only use the basename of the path for the key
82
+ # * [Array<Symbol>] :use_basename
83
+ # can contain :key and :path
84
84
  #
85
85
  # @return [Hash{String => Pathname}]
86
86
  #
87
87
  def build_section_data file_paths, options={}
88
- options = { use_basename?: false }.merge options
88
+ options = {
89
+ use_basename: [],
90
+ path_without_ext: false,
91
+ }.merge options
89
92
 
90
93
  # Transform image file paths to keys
91
94
  keys_to_paths = {}
92
95
  for path in file_paths
93
- path = options[:use_basename?] ? File.basename(path) : path.to_s
94
- key = key_from_path(path)
95
- keys_to_paths[key] = path
96
+ basename = File.basename(path)
97
+ key = key_from_path(options[:use_basename].include?(:key) ? basename : path.to_s)
98
+ transformed_path = options[:use_basename].include?(:path) ? basename : path
99
+ if options[:path_without_ext]
100
+ transformed_path = transformed_path.to_s.sub /#{File.extname(path)}$/, ''
101
+ end
102
+ keys_to_paths[key] = transformed_path.to_s
96
103
  end
97
104
 
98
105
  keys_to_paths
@@ -9,7 +9,8 @@ module XCRes
9
9
  class BundleResourcesAnalyzer < BaseResourcesAnalyzer
10
10
 
11
11
  def analyze
12
- @sections = build_sections_for_bundles.compact
12
+ @sections = build_sections_for_bundles
13
+ super
13
14
  end
14
15
 
15
16
  # Build a section for each bundle if it contains any resources
@@ -42,7 +43,7 @@ module XCRes
42
43
  # @param [PBXFileReference] bundle_file_ref
43
44
  # the file reference to the resources bundle file
44
45
  #
45
- # @return [Section?]
46
+ # @return [Section]
46
47
  # a section or nil
47
48
  #
48
49
  def build_section_for_bundle bundle_file_ref
@@ -51,14 +52,8 @@ module XCRes
51
52
 
52
53
  log "Found bundle %s with #%s image files of #%s total files.", bundle_file_ref.path, image_files.count, bundle_files.count
53
54
 
54
- return nil if image_files.empty?
55
-
56
- section_data = build_images_section_data(image_files)
57
-
58
- return nil if section_data.empty?
59
-
60
55
  section_name = basename_without_ext(bundle_file_ref.path)
61
-
56
+ section_data = build_images_section_data(image_files)
62
57
  new_section(section_name, section_data)
63
58
  end
64
59
 
@@ -10,7 +10,8 @@ module XCRes
10
10
  class LooseResourcesAnalyzer < BaseResourcesAnalyzer
11
11
 
12
12
  def analyze
13
- @sections = [build_section_for_loose_images].compact
13
+ @sections = [build_section_for_loose_images]
14
+ super
14
15
  end
15
16
 
16
17
  def exclude_file_patterns
@@ -19,16 +20,14 @@ module XCRes
19
20
 
20
21
  # Build a section for loose image resources in the project
21
22
  #
22
- # @return [Section?]
23
+ # @return [Section]
23
24
  #
24
25
  def build_section_for_loose_images
25
26
  image_files = find_image_files(resources_files.map(&:path))
26
27
 
27
28
  log "Found #%s image files in project.", image_files.count
28
29
 
29
- return nil if image_files.empty?
30
-
31
- data = build_images_section_data(image_files, use_basename?: true)
30
+ data = build_images_section_data(image_files, use_basename: [:key, :path])
32
31
 
33
32
  new_section('Images', data)
34
33
  end
@@ -10,9 +10,8 @@ module XCRes
10
10
  class XCAssetsAnalyzer < BaseResourcesAnalyzer
11
11
 
12
12
  def analyze
13
- sections = []
14
- sections += build_sections_for_xcassets
15
- @sections = sections.compact
13
+ @sections = build_sections_for_xcassets
14
+ super
16
15
  end
17
16
 
18
17
  # Build a section for each asset catalog if it contains any resources
@@ -38,21 +37,18 @@ module XCRes
38
37
  # @param [XCAssets::Bundle] xcassets_bundle
39
38
  # the file reference to the resources bundle file
40
39
  #
41
- # @return [Section?]
40
+ # @return [Section]
42
41
  # a section or nil
43
42
  #
44
43
  def build_section_for_xcassets bundle
45
44
  log "Found asset catalog %s with #%s image files.",
46
45
  bundle.path.basename, bundle.resources.count
47
46
 
48
- return nil if bundle.resources.empty?
49
-
50
- section_data = build_images_section_data(bundle.resources.map(&:name))
51
-
52
- return nil if section_data.empty?
53
-
54
47
  section_name = "#{basename_without_ext(bundle.path)}Assets"
55
-
48
+ section_data = build_images_section_data(bundle.resources.map(&:path), {
49
+ use_basename: [:path],
50
+ path_without_ext: true
51
+ })
56
52
  new_section(section_name, section_data)
57
53
  end
58
54
 
@@ -10,7 +10,7 @@ class XCRes::FileBuilder
10
10
  # Ensure that the given directory exists
11
11
  output_dir = File.dirname output_path
12
12
  unless Dir.exist? output_dir
13
- logger.success 'Directory did not exist. Will been created.'
13
+ logger.success 'Directory did not exist. Will be created.'
14
14
  Dir.mkdir output_dir
15
15
  end
16
16
 
@@ -45,20 +45,20 @@ class XCRes::InstallCommand < XCRes::ProjectCommand
45
45
  def find_parent_group
46
46
  # Get main group and ensure that it exists
47
47
  main_group = project.main_group
48
- raise ArgumentError, "Didn't found main group" if main_group.nil?
48
+ raise ArgumentError, "Didn't find main group" if main_group.nil?
49
49
 
50
50
  # Get target-specific group, if the default project layout is in use
51
51
  src_group = main_group.groups.find { |g| g.path == target.name }
52
52
  if src_group != nil
53
53
  log "Found target group, will use its path as base output path."
54
54
  else
55
- log "Didn't found target group, expected a group with path '#{target.name}'."
55
+ log "Didn't find target group, expected a group with path '#{target.name}'."
56
56
  end
57
57
 
58
58
  # Find 'Supporting Files' group
59
59
  groups = main_group.recursive_children_groups
60
60
  support_files_group = groups.find { |g| g.name == 'Supporting Files' }
61
- warn "Didn't found support files group" if support_files_group.nil?
61
+ warn "Didn't find support files group" if support_files_group.nil?
62
62
 
63
63
  support_files_group || src_group || main_group
64
64
  end
@@ -101,6 +101,7 @@ class XCRes::InstallCommand < XCRes::ProjectCommand
101
101
  # Set shell script
102
102
  script_output_path = output_path.relative_path_from(src_root_path)
103
103
  build_phase.shell_script = "xcres --no-ansi build $PROJECT_FILE_PATH $SRCROOT/#{script_output_path}\n"
104
+ build_phase.show_env_vars_in_log = '0'
104
105
 
105
106
  # Find or create 'Resources' group in 'Supporting Files'
106
107
  res_group = parent_group.groups.find { |g| g.name == 'Resources' }
@@ -9,11 +9,11 @@ class XCRes::ProjectCommand < XCRes::Command
9
9
  option ['--[no-]documented'], :flag, 'Add documentation to the generated files', default: true
10
10
  #option ['-d', '--dry-run'], :flag, 'Does nothing on the file system'
11
11
 
12
- option ['-t', '--target'], 'TARGET', 'Application target to use', attribute_name: :target_name
12
+ option ['-t', '--target'], 'TARGET', 'Target to search & analyze', attribute_name: :target_name
13
13
  option ['-x', '--exclude'], 'FILE_PATTERN', 'File pattern which should be excluded (default: ["InfoPlist.strings"])', multivalued: true, attribute_name: :exclude_file_patterns, default: ['InfoPlist.strings']
14
14
  option ['-n', '--name'], 'NAME', 'Name of the resources constant (default: `basename OUTPUT_PATH`)', attribute_name: :resources_constant_name
15
15
  option ['-l', '--language'], 'LANGUAGE', 'Default language to build the keys', attribute_name: :default_language do |language|
16
- raise ArgumentError.new 'Expected a two-letter code conforming ISO 639-1 as LANGUAGE' unless String(language).length == 2
16
+ raise ArgumentError.new 'Expected a two-letter code conforming to ISO 639-1 as LANGUAGE' unless String(language).length == 2
17
17
  language
18
18
  end
19
19
 
@@ -50,8 +50,12 @@ class XCRes::ProjectCommand < XCRes::Command
50
50
  # @return [PBXNativeTarget]
51
51
  #
52
52
  def target
53
- if target_name != nil
54
- application_targets.find { |t| t.name == target }
53
+ @target ||= if target_name != nil
54
+ target = native_targets.find { |t| t.name == target_name }
55
+ if target.nil?
56
+ raise ArgumentError.new "Unknown target '#{target_name}'. "
57
+ end
58
+ target
55
59
  else
56
60
  if application_targets.count == 1
57
61
  application_targets.first
@@ -62,14 +66,23 @@ class XCRes::ProjectCommand < XCRes::Command
62
66
  end
63
67
  end
64
68
 
69
+ # Find all native targets in the project
70
+ #
71
+ # @return [Array<PBXNativeTarget>]
72
+ #
73
+ def native_targets
74
+ @native_targets ||= project.targets.select do |target|
75
+ target.is_a?(Xcodeproj::Project::Object::PBXNativeTarget)
76
+ end
77
+ end
78
+
65
79
  # Find all application targets in the project
66
80
  #
67
81
  # @return [Array<PBXNativeTarget>]
68
82
  #
69
83
  def application_targets
70
- @application_targets ||= project.targets.select do |target|
71
- target.is_a?(Xcodeproj::Project::Object::PBXNativeTarget) \
72
- && target.product_type == Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application]
84
+ @application_targets ||= native_targets.select do |target|
85
+ target.product_type == Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application]
73
86
  end
74
87
  end
75
88
 
@@ -88,7 +101,7 @@ class XCRes::ProjectCommand < XCRes::Command
88
101
 
89
102
  def discover_xcodeproj_file_path!
90
103
  if xcodeproj_file_path.nil?
91
- warn 'Argument XCODEPROJ is not set. Use the current directory.'
104
+ warn 'Argument XCODEPROJ is not set. Using the current directory.'
92
105
  discover_xcodeproj_file_path_in_dir! '.'
93
106
  elsif Dir.exist?(xcodeproj_file_path) && !File.fnmatch('*.xcodeproj', xcodeproj_file_path)
94
107
  warn 'Argument XCODEPROJ is a directory. ' \
@@ -43,7 +43,7 @@ module XCRes::XCAssets
43
43
  #
44
44
  def read
45
45
  @resource_paths = Dir.chdir(path) do
46
- Dir['*'].map { |p| Pathname(p) }
46
+ Dir['**/Contents.json'].map { |p| Pathname(p) + '..' }
47
47
  end
48
48
  @resources = @resource_paths.map do |path|
49
49
  Resource.new(self, path)
@@ -4,6 +4,6 @@ module XCRes
4
4
  #
5
5
  # XCRes’s version, following [semver](http://semver.org).
6
6
  #
7
- VERSION = "0.4.1"
7
+ VERSION = "0.4.2"
8
8
 
9
9
  end
@@ -14,6 +14,11 @@
14
14
  "idiom" : "iphone",
15
15
  "size" : "60x60",
16
16
  "scale" : "2x"
17
+ },
18
+ {
19
+ "idiom" : "iphone",
20
+ "size" : "60x60",
21
+ "scale" : "3x"
17
22
  }
18
23
  ],
19
24
  "info" : {
@@ -0,0 +1,23 @@
1
+ {
2
+ "images" : [
3
+ {
4
+ "idiom" : "universal",
5
+ "scale" : "1x",
6
+ "filename" : "GrumpyCat.jpg"
7
+ },
8
+ {
9
+ "idiom" : "universal",
10
+ "scale" : "2x",
11
+ "filename" : "GrumpyCat@2x.jpg"
12
+ },
13
+ {
14
+ "idiom" : "universal",
15
+ "scale" : "3x",
16
+ "filename" : "GrumpyCat@3x.jpg"
17
+ }
18
+ ],
19
+ "info" : {
20
+ "version" : 1,
21
+ "author" : "xcode"
22
+ }
23
+ }
@@ -9,6 +9,10 @@
9
9
  "idiom" : "universal",
10
10
  "scale" : "2x",
11
11
  "filename" : "doge@2x.png"
12
+ },
13
+ {
14
+ "idiom" : "universal",
15
+ "scale" : "3x"
12
16
  }
13
17
  ],
14
18
  "info" : {
@@ -16,6 +16,7 @@ CLIntegracon.configure do |c|
16
16
  c.ignores '**.DS_Store'
17
17
  c.ignores '.gitkeep'
18
18
  c.ignores %r[/xcuserdata/]
19
+ c.ignores %r[/DerivedData/]
19
20
 
20
21
  # Transform produced project files to YAMLs
21
22
  c.transform_produced "**/*.xcodeproj" do |path|
@@ -8,8 +8,6 @@
8
8
  #import <Foundation/Foundation.h>
9
9
 
10
10
  extern const struct R {
11
- struct Images {
12
- } Images;
13
11
  struct Strings {
14
12
  } Strings;
15
13
  } R;
@@ -8,8 +8,6 @@
8
8
  #import "R.h"
9
9
 
10
10
  const struct R R = {
11
- .Images = {
12
- },
13
11
  .Strings = {
14
12
  },
15
13
  };
@@ -14,6 +14,11 @@
14
14
  "idiom" : "iphone",
15
15
  "size" : "60x60",
16
16
  "scale" : "2x"
17
+ },
18
+ {
19
+ "idiom" : "iphone",
20
+ "size" : "60x60",
21
+ "scale" : "3x"
17
22
  }
18
23
  ],
19
24
  "info" : {
@@ -0,0 +1,23 @@
1
+ {
2
+ "images" : [
3
+ {
4
+ "idiom" : "universal",
5
+ "scale" : "1x",
6
+ "filename" : "GrumpyCat.jpg"
7
+ },
8
+ {
9
+ "idiom" : "universal",
10
+ "scale" : "2x",
11
+ "filename" : "GrumpyCat@2x.jpg"
12
+ },
13
+ {
14
+ "idiom" : "universal",
15
+ "scale" : "3x",
16
+ "filename" : "GrumpyCat@3x.jpg"
17
+ }
18
+ ],
19
+ "info" : {
20
+ "version" : 1,
21
+ "author" : "xcode"
22
+ }
23
+ }
@@ -9,6 +9,10 @@
9
9
  "idiom" : "universal",
10
10
  "scale" : "2x",
11
11
  "filename" : "doge@2x.png"
12
+ },
13
+ {
14
+ "idiom" : "universal",
15
+ "scale" : "3x"
12
16
  }
13
17
  ],
14
18
  "info" : {
@@ -21,6 +21,8 @@ extern const struct R {
21
21
  struct ImagesAssets {
22
22
  /// AppIcon
23
23
  __unsafe_unretained NSString *app;
24
+ /// GrumpyCat
25
+ __unsafe_unretained NSString *catsGrumpy;
24
26
  /// Doge
25
27
  __unsafe_unretained NSString *doge;
26
28
  /// LaunchImage
@@ -17,6 +17,7 @@ const struct R R = {
17
17
  },
18
18
  .ImagesAssets = {
19
19
  .app = @"AppIcon",
20
+ .catsGrumpy = @"GrumpyCat",
20
21
  .doge = @"Doge",
21
22
  .launch = @"LaunchImage",
22
23
  },
@@ -7,8 +7,8 @@
7
7
  Ⓥ Add section for Icons with 2 elements
8
8
  Ⓥ Found #1 image files in project.
9
9
  Ⓥ Found #1 asset catalogs in project.
10
- Ⓥ Found asset catalog Images.xcassets with #3 image files.
11
- Ⓥ Add section for ImagesAssets with 3 elements
10
+ Ⓥ Found asset catalog Images.xcassets with #4 image files.
11
+ Ⓥ Add section for ImagesAssets with 4 elements
12
12
  Ⓥ Strings files in project: ["en.lproj/InfoPlist.strings", "en.lproj/Localizable.strings", "de.lproj/Localizable.strings"]
13
13
  Ⓥ Native development languages: ["en"]
14
14
  Ⓥ Used languages for .strings files: ["en", "de"]
@@ -14,6 +14,11 @@
14
14
  "idiom" : "iphone",
15
15
  "size" : "60x60",
16
16
  "scale" : "2x"
17
+ },
18
+ {
19
+ "idiom" : "iphone",
20
+ "size" : "60x60",
21
+ "scale" : "3x"
17
22
  }
18
23
  ],
19
24
  "info" : {
@@ -0,0 +1,23 @@
1
+ {
2
+ "images" : [
3
+ {
4
+ "idiom" : "universal",
5
+ "scale" : "1x",
6
+ "filename" : "GrumpyCat.jpg"
7
+ },
8
+ {
9
+ "idiom" : "universal",
10
+ "scale" : "2x",
11
+ "filename" : "GrumpyCat@2x.jpg"
12
+ },
13
+ {
14
+ "idiom" : "universal",
15
+ "scale" : "3x",
16
+ "filename" : "GrumpyCat@3x.jpg"
17
+ }
18
+ ],
19
+ "info" : {
20
+ "version" : 1,
21
+ "author" : "xcode"
22
+ }
23
+ }
@@ -9,6 +9,10 @@
9
9
  "idiom" : "universal",
10
10
  "scale" : "2x",
11
11
  "filename" : "doge@2x.png"
12
+ },
13
+ {
14
+ "idiom" : "universal",
15
+ "scale" : "3x"
12
16
  }
13
17
  ],
14
18
  "info" : {
@@ -34,7 +34,7 @@ Targets:
34
34
  shellPath: "/bin/sh"
35
35
  shellScript: |
36
36
  xcres --no-ansi build $PROJECT_FILE_PATH $SRCROOT/Example/Resources/R
37
- showEnvVarsInLog: '1'
37
+ showEnvVarsInLog: '0'
38
38
  buildActionMask: '2147483647'
39
39
  runOnlyForDeploymentPostprocessing: '0'
40
40
  - SourcesBuildPhase:
@@ -35,7 +35,7 @@ Targets:
35
35
  shellPath: "/bin/sh"
36
36
  shellScript: |
37
37
  xcres --no-ansi build $PROJECT_FILE_PATH $SRCROOT/Supporting_Files/Resources/R
38
- showEnvVarsInLog: '1'
38
+ showEnvVarsInLog: '0'
39
39
  buildActionMask: '2147483647'
40
40
  runOnlyForDeploymentPostprocessing: '0'
41
41
  - SourcesBuildPhase:
@@ -2,7 +2,7 @@
2
2
  Ⓥ Verbose mode is enabled.
3
3
  ⚠ Argument XCODEPROJ is a directory. Try to locate the Xcode project in this directory.
4
4
  ✓ Use Example/Example.xcodeproj as XCODEPROJ.
5
- Ⓥ Didn't found target group, expected a group with path 'Example'.
5
+ Ⓥ Didn't find target group, expected a group with path 'Example'.
6
6
  Execute build first:
7
7
  Ⓥ Verbose mode is enabled.
8
8
  ✓ Use Example/Example.xcodeproj as XCODEPROJ.
@@ -17,6 +17,6 @@ Execute build first:
17
17
  Ⓥ Preferred languages: ["en"]
18
18
  Ⓥ Strings files after language selection: ["InfoPlist.strings"]
19
19
  Ⓥ Non-ignored .strings files: []
20
- ✓ Directory did not exist. Will been created.
20
+ ✓ Directory did not exist. Will be created.
21
21
  ✓ Successfully updated: ROOT/tmp/integration/install-moved-supporting-files/Example/Supporting_Files/Resources/R.h
22
22
  ✓ Successfully integrated into Example/Example.xcodeproj
@@ -35,7 +35,7 @@ Targets:
35
35
  shellPath: "/bin/sh"
36
36
  shellScript: |
37
37
  xcres --no-ansi build $PROJECT_FILE_PATH $SRCROOT/Resources/R
38
- showEnvVarsInLog: '1'
38
+ showEnvVarsInLog: '0'
39
39
  buildActionMask: '2147483647'
40
40
  runOnlyForDeploymentPostprocessing: '0'
41
41
  - SourcesBuildPhase:
@@ -2,8 +2,8 @@
2
2
  Ⓥ Verbose mode is enabled.
3
3
  ⚠ Argument XCODEPROJ is a directory. Try to locate the Xcode project in this directory.
4
4
  ✓ Use Example/Example.xcodeproj as XCODEPROJ.
5
- Ⓥ Didn't found target group, expected a group with path 'Example'.
6
- ⚠ Didn't found support files group
5
+ Ⓥ Didn't find target group, expected a group with path 'Example'.
6
+ ⚠ Didn't find support files group
7
7
  Execute build first:
8
8
  Ⓥ Verbose mode is enabled.
9
9
  ✓ Use Example/Example.xcodeproj as XCODEPROJ.
@@ -18,6 +18,6 @@ Execute build first:
18
18
  Ⓥ Preferred languages: ["en"]
19
19
  Ⓥ Strings files after language selection: ["InfoPlist.strings"]
20
20
  Ⓥ Non-ignored .strings files: []
21
- ✓ Directory did not exist. Will been created.
21
+ ✓ Directory did not exist. Will be created.
22
22
  ✓ Successfully updated: ROOT/tmp/integration/install-no-supporting-files/Example/Resources/R.h
23
23
  ✓ Successfully integrated into Example/Example.xcodeproj
@@ -34,7 +34,7 @@ Targets:
34
34
  shellPath: "/bin/sh"
35
35
  shellScript: |
36
36
  xcres --no-ansi build $PROJECT_FILE_PATH $SRCROOT/Example/Resources/R
37
- showEnvVarsInLog: '1'
37
+ showEnvVarsInLog: '0'
38
38
  buildActionMask: '2147483647'
39
39
  runOnlyForDeploymentPostprocessing: '0'
40
40
  - SourcesBuildPhase:
@@ -17,6 +17,6 @@ Execute build first:
17
17
  Ⓥ Preferred languages: ["en"]
18
18
  Ⓥ Strings files after language selection: ["en.lproj/InfoPlist.strings"]
19
19
  Ⓥ Non-ignored .strings files: []
20
- ✓ Directory did not exist. Will been created.
20
+ ✓ Directory did not exist. Will be created.
21
21
  ✓ Successfully updated: ROOT/tmp/integration/install/Example/Example/Resources/R.h
22
22
  ✓ Successfully integrated into Example/Example.xcodeproj
@@ -1,3 +1,3 @@
1
1
  xcres version --verbose --no-ansi 2>&1
2
2
  Ⓥ Verbose mode is enabled.
3
- 0.4.1
3
+ 0.4.2
@@ -12,6 +12,21 @@ class Xcodeproj::Project::Object::PBXShellScriptBuildPhase
12
12
  end
13
13
  end
14
14
 
15
+ class Xcodeproj::Project::Object::XCBuildConfiguration
16
+ def pretty_print
17
+ data = {}
18
+ data['Build Settings'] = {}.tap do |sorted_settings|
19
+ build_settings.keys.sort.each do |key|
20
+ sorted_settings[key] = build_settings[key]
21
+ end
22
+ end
23
+ if base_configuration_reference
24
+ data['Base Configuration'] = base_configuration_reference.pretty_print
25
+ end
26
+ { name => data }
27
+ end
28
+ end
29
+
15
30
  class Xcodeproj::Project
16
31
  def to_yaml
17
32
  pretty_print_output = pretty_print
@@ -20,16 +20,37 @@ describe 'XCRes::ResourcesAnalyzer::BaseResourcesAnalyzer' do
20
20
  @analyzer.build_images_section_data([]).should.eql?({})
21
21
  end
22
22
 
23
- describe 'option use_basename? is not given' do
23
+ describe 'option use_basename is not given' do
24
24
  it 'builds an items hash and keep the path' do
25
25
  @analyzer.build_images_section_data([Pathname('b/a.m'), Pathname('b/a.gif')])
26
26
  .should.eql?({ 'b/a' => 'b/a.gif' })
27
27
  end
28
28
  end
29
29
 
30
- describe 'option use_basename? is given as true' do
30
+ describe 'option use_basename is given as []' do
31
+ it 'builds an items hash and keep the path' do
32
+ @analyzer.build_images_section_data([Pathname('b/a.m'), Pathname('b/a.gif')], use_basename: [])
33
+ .should.eql?({ 'b/a' => 'b/a.gif' })
34
+ end
35
+ end
36
+
37
+ describe 'option use_basename is given as [:key]' do
31
38
  it 'builds an items hash and remove the path' do
32
- @analyzer.build_images_section_data([Pathname('b/a.m'), Pathname('b/a.gif')], use_basename?: true)
39
+ @analyzer.build_images_section_data([Pathname('b/a.m'), Pathname('b/a.gif')], use_basename: [:key])
40
+ .should.eql?({ 'a' => 'b/a.gif' })
41
+ end
42
+ end
43
+
44
+ describe 'option use_basename is given as [:path]' do
45
+ it 'builds an items hash and remove the path' do
46
+ @analyzer.build_images_section_data([Pathname('b/a.m'), Pathname('b/a.gif')], use_basename: [:path])
47
+ .should.eql?({ 'b/a' => 'a.gif' })
48
+ end
49
+ end
50
+
51
+ describe 'option use_basename is given as [:key,:path]' do
52
+ it 'builds an items hash and remove the path' do
53
+ @analyzer.build_images_section_data([Pathname('b/a.m'), Pathname('b/a.gif')], use_basename: [:key, :path])
33
54
  .should.eql?({ 'a' => 'a.gif' })
34
55
  end
35
56
  end
@@ -78,19 +99,31 @@ describe 'XCRes::ResourcesAnalyzer::BaseResourcesAnalyzer' do
78
99
  @analyzer.build_section_data([]).should.be.eql?({})
79
100
  end
80
101
 
81
- it 'returns a hash with the basename if option use_basename? is enabled' do
102
+ it 'returns a hash with the basename if option use_basename is [:key]' do
103
+ @analyzer.expects(:key_from_path).with('b').returns('b')
104
+ @analyzer.build_section_data(@file_paths, use_basename: [:key])
105
+ .should.be.eql?({ 'b' => 'a/b' })
106
+ end
107
+
108
+ it 'returns a hash with the basename if option use_basename is [:path]' do
109
+ @analyzer.expects(:key_from_path).with('a/b').returns('a/b')
110
+ @analyzer.build_section_data(@file_paths, use_basename: [:path])
111
+ .should.be.eql?({ 'a/b' => 'b' })
112
+ end
113
+
114
+ it 'returns a hash with the basename if option use_basename is [:key, :path]' do
82
115
  @analyzer.expects(:key_from_path).with('b').returns('b')
83
- @analyzer.build_section_data(@file_paths, use_basename?: true)
116
+ @analyzer.build_section_data(@file_paths, use_basename: [:key, :path])
84
117
  .should.be.eql?({ 'b' => 'b' })
85
118
  end
86
119
 
87
- it 'returns a hash with relative paths if option use_basename? is disabled' do
120
+ it 'returns a hash with relative paths if option use_basename is []' do
88
121
  @analyzer.expects(:key_from_path).with('a/b').returns('a/b')
89
- @analyzer.build_section_data(@file_paths, use_basename?: false)
122
+ @analyzer.build_section_data(@file_paths, use_basename: [])
90
123
  .should.be.eql?({ 'a/b' => 'a/b' })
91
124
  end
92
125
 
93
- it 'returns a hash with relative paths if option use_basename? is not given' do
126
+ it 'returns a hash with relative paths if option use_basename is not given' do
94
127
  @analyzer.expects(:key_from_path).with('a/b').returns('a/b')
95
128
  @analyzer.build_section_data(@file_paths)
96
129
  .should.be.eql?({ 'a/b' => 'a/b' })
@@ -39,13 +39,13 @@ describe 'XCRes::ResourcesAnalyzer::BundleResourcesAnalyzer' do
39
39
 
40
40
  it 'should return nil if the bundle does not contain any images' do
41
41
  @analyzer.expects(:find_files_in_dir).with(@mock_bundle.real_path).returns([Pathname('a.m')])
42
- @analyzer.build_section_for_bundle(@mock_bundle).should.be.nil?
42
+ @analyzer.build_section_for_bundle(@mock_bundle).items.should.be.empty
43
43
  end
44
44
 
45
45
  it 'should return nil if the bundle does not contain any valid images' do
46
46
  @analyzer.expects(:find_files_in_dir).with(@mock_bundle.real_path).returns([Pathname('a.gif')])
47
47
  @analyzer.exclude_file_patterns = ['a.gif']
48
- @analyzer.build_section_for_bundle(@mock_bundle).should.be.nil?
48
+ @analyzer.build_section_for_bundle(@mock_bundle).items.should.be.empty
49
49
  end
50
50
 
51
51
  it 'should build a new section if the bundle contain valid images' do
@@ -43,12 +43,19 @@ module XCAssetsSpec
43
43
  it 'should set the resource paths' do
44
44
  @bundle.resource_paths.should.be.eql? [
45
45
  Pathname('AppIcon.appiconset'),
46
+ Pathname('Cats/GrumpyCat.imageset'),
46
47
  Pathname('Doge.imageset'),
47
48
  Pathname('LaunchImage.launchimage'),
48
49
  ]
49
50
  end
50
51
 
51
52
  shared 'XCAssets resource' do
53
+ path = @name
54
+
55
+ before do
56
+ @res = @bundle.resources.find { |r| r.path.to_s == path }
57
+ end
58
+
52
59
  it 'should match the info' do
53
60
  @res.info.should.be.eql?({ "version" => 1, "author" => "xcode" })
54
61
  end
@@ -56,14 +63,8 @@ module XCAssetsSpec
56
63
 
57
64
  describe 'resources' do
58
65
  describe 'AppIcon.appiconset' do
59
- before { @res = @bundle.resources[0] }
60
-
61
66
  behaves_like 'XCAssets resource'
62
67
 
63
- it 'should match the path' do
64
- @res.path.should.be.eql? Pathname('AppIcon.appiconset')
65
- end
66
-
67
68
  it 'should match the name' do
68
69
  @res.name.should.be.eql? 'AppIcon'
69
70
  end
@@ -77,19 +78,38 @@ module XCAssetsSpec
77
78
  ResourceImage.new(idiom: 'iphone', scale: 2, size: '29x29'),
78
79
  ResourceImage.new(idiom: 'iphone', scale: 2, size: '40x40'),
79
80
  ResourceImage.new(idiom: 'iphone', scale: 2, size: '60x60'),
81
+ ResourceImage.new(idiom: 'iphone', scale: 3, size: '60x60'),
80
82
  ]
81
83
  end
82
84
  end
83
85
 
84
- describe 'Doge.imageset' do
85
- before { @res = @bundle.resources[1] }
86
-
86
+ describe 'Cats/GrumpyCat.imageset' do
87
87
  behaves_like 'XCAssets resource'
88
88
 
89
- it 'should match the path' do
90
- @res.path.should.be.eql? Pathname('Doge.imageset')
89
+ it 'should match the name' do
90
+ @res.name.should.be.eql? 'GrumpyCat'
91
91
  end
92
92
 
93
+ it 'should match the type' do
94
+ @res.type.should.be.eql? 'imageset'
95
+ end
96
+
97
+ it 'should match the info' do
98
+ @res.info.should.be.eql?({ "version" => 1, "author" => "xcode" })
99
+ end
100
+
101
+ it 'should match the images' do
102
+ @res.images.should.be.eql? [
103
+ ResourceImage.new(idiom: 'universal', scale: 1, filename: 'GrumpyCat.jpg'),
104
+ ResourceImage.new(idiom: 'universal', scale: 2, filename: 'GrumpyCat@2x.jpg'),
105
+ ResourceImage.new(idiom: 'universal', scale: 3, filename: 'GrumpyCat@3x.jpg'),
106
+ ]
107
+ end
108
+ end
109
+
110
+ describe 'Doge.imageset' do
111
+ behaves_like 'XCAssets resource'
112
+
93
113
  it 'should match the name' do
94
114
  @res.name.should.be.eql? 'Doge'
95
115
  end
@@ -106,19 +126,14 @@ module XCAssetsSpec
106
126
  @res.images.should.be.eql? [
107
127
  ResourceImage.new(idiom: 'universal', scale: 1, filename: 'doge.png'),
108
128
  ResourceImage.new(idiom: 'universal', scale: 2, filename: 'doge@2x.png'),
129
+ ResourceImage.new(idiom: 'universal', scale: 3),
109
130
  ]
110
131
  end
111
132
  end
112
133
 
113
134
  describe 'LaunchImage.launchimage' do
114
- before { @res = @bundle.resources[2] }
115
-
116
135
  behaves_like 'XCAssets resource'
117
136
 
118
- it 'should match the path' do
119
- @res.path.should.be.eql? Pathname('LaunchImage.launchimage')
120
- end
121
-
122
137
  it 'should match the name' do
123
138
  @res.name.should.be.eql? 'LaunchImage'
124
139
  end
@@ -31,7 +31,11 @@ module XCAssetsSpec
31
31
  "idiom" => "universal",
32
32
  "scale" => "2x",
33
33
  "filename" => "doge@2x.png"
34
- }
34
+ },
35
+ {
36
+ "idiom" => "universal",
37
+ "scale" => "3x"
38
+ },
35
39
  ],
36
40
  "info" => expected_info
37
41
  }
@@ -130,6 +134,7 @@ module XCAssetsSpec
130
134
  @res.images.should.be.eql? [
131
135
  ResourceImage.new(idiom: 'universal', scale: 1, filename: 'doge.png'),
132
136
  ResourceImage.new(idiom: 'universal', scale: 2, filename: 'doge@2x.png'),
137
+ ResourceImage.new(idiom: 'universal', scale: 3),
133
138
  ]
134
139
  end
135
140
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xcres
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marius Rackwitz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-03 00:00:00.000000000 Z
11
+ date: 2014-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -261,6 +261,10 @@ files:
261
261
  - spec/fixtures/Example/Example/Example-Info.plist
262
262
  - spec/fixtures/Example/Example/Example-Prefix.pch
263
263
  - spec/fixtures/Example/Example/Images.xcassets/AppIcon.appiconset/Contents.json
264
+ - spec/fixtures/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/Contents.json
265
+ - spec/fixtures/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat.jpg
266
+ - spec/fixtures/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@2x.jpg
267
+ - spec/fixtures/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@3x.jpg
264
268
  - spec/fixtures/Example/Example/Images.xcassets/Doge.imageset/Contents.json
265
269
  - spec/fixtures/Example/Example/Images.xcassets/Doge.imageset/doge.png
266
270
  - spec/fixtures/Example/Example/Images.xcassets/Doge.imageset/doge@2x.png
@@ -366,6 +370,10 @@ files:
366
370
  - spec/integration/build/after/Example/Example/Icons.bundle/tab_bar/tabbar_map.png
367
371
  - spec/integration/build/after/Example/Example/Icons.bundle/tab_bar/tabbar_map@2x.png
368
372
  - spec/integration/build/after/Example/Example/Images.xcassets/AppIcon.appiconset/Contents.json
373
+ - spec/integration/build/after/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/Contents.json
374
+ - spec/integration/build/after/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat.jpg
375
+ - spec/integration/build/after/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@2x.jpg
376
+ - spec/integration/build/after/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@3x.jpg
369
377
  - spec/integration/build/after/Example/Example/Images.xcassets/Doge.imageset/Contents.json
370
378
  - spec/integration/build/after/Example/Example/Images.xcassets/Doge.imageset/doge.png
371
379
  - spec/integration/build/after/Example/Example/Images.xcassets/Doge.imageset/doge@2x.png
@@ -390,6 +398,10 @@ files:
390
398
  - spec/integration/build/before/Example/Example/Icons.bundle/tab_bar/tabbar_map.png
391
399
  - spec/integration/build/before/Example/Example/Icons.bundle/tab_bar/tabbar_map@2x.png
392
400
  - spec/integration/build/before/Example/Example/Images.xcassets/AppIcon.appiconset/Contents.json
401
+ - spec/integration/build/before/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/Contents.json
402
+ - spec/integration/build/before/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat.jpg
403
+ - spec/integration/build/before/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@2x.jpg
404
+ - spec/integration/build/before/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@3x.jpg
393
405
  - spec/integration/build/before/Example/Example/Images.xcassets/Doge.imageset/Contents.json
394
406
  - spec/integration/build/before/Example/Example/Images.xcassets/Doge.imageset/doge.png
395
407
  - spec/integration/build/before/Example/Example/Images.xcassets/Doge.imageset/doge@2x.png
@@ -552,6 +564,10 @@ test_files:
552
564
  - spec/fixtures/Example/Example/Example-Info.plist
553
565
  - spec/fixtures/Example/Example/Example-Prefix.pch
554
566
  - spec/fixtures/Example/Example/Images.xcassets/AppIcon.appiconset/Contents.json
567
+ - spec/fixtures/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/Contents.json
568
+ - spec/fixtures/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat.jpg
569
+ - spec/fixtures/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@2x.jpg
570
+ - spec/fixtures/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@3x.jpg
555
571
  - spec/fixtures/Example/Example/Images.xcassets/Doge.imageset/Contents.json
556
572
  - spec/fixtures/Example/Example/Images.xcassets/Doge.imageset/doge.png
557
573
  - spec/fixtures/Example/Example/Images.xcassets/Doge.imageset/doge@2x.png
@@ -657,6 +673,10 @@ test_files:
657
673
  - spec/integration/build/after/Example/Example/Icons.bundle/tab_bar/tabbar_map.png
658
674
  - spec/integration/build/after/Example/Example/Icons.bundle/tab_bar/tabbar_map@2x.png
659
675
  - spec/integration/build/after/Example/Example/Images.xcassets/AppIcon.appiconset/Contents.json
676
+ - spec/integration/build/after/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/Contents.json
677
+ - spec/integration/build/after/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat.jpg
678
+ - spec/integration/build/after/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@2x.jpg
679
+ - spec/integration/build/after/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@3x.jpg
660
680
  - spec/integration/build/after/Example/Example/Images.xcassets/Doge.imageset/Contents.json
661
681
  - spec/integration/build/after/Example/Example/Images.xcassets/Doge.imageset/doge.png
662
682
  - spec/integration/build/after/Example/Example/Images.xcassets/Doge.imageset/doge@2x.png
@@ -681,6 +701,10 @@ test_files:
681
701
  - spec/integration/build/before/Example/Example/Icons.bundle/tab_bar/tabbar_map.png
682
702
  - spec/integration/build/before/Example/Example/Icons.bundle/tab_bar/tabbar_map@2x.png
683
703
  - spec/integration/build/before/Example/Example/Images.xcassets/AppIcon.appiconset/Contents.json
704
+ - spec/integration/build/before/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/Contents.json
705
+ - spec/integration/build/before/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat.jpg
706
+ - spec/integration/build/before/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@2x.jpg
707
+ - spec/integration/build/before/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@3x.jpg
684
708
  - spec/integration/build/before/Example/Example/Images.xcassets/Doge.imageset/Contents.json
685
709
  - spec/integration/build/before/Example/Example/Images.xcassets/Doge.imageset/doge.png
686
710
  - spec/integration/build/before/Example/Example/Images.xcassets/Doge.imageset/doge@2x.png