xcres 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -4
- data/README.md +6 -1
- data/lib/xcres/analyzer/analyzer.rb +1 -1
- data/lib/xcres/analyzer/resources_analyzer/base_resources_analyzer.rb +13 -6
- data/lib/xcres/analyzer/resources_analyzer/bundle_resources_analyzer.rb +4 -9
- data/lib/xcres/analyzer/resources_analyzer/loose_resources_analyzer.rb +4 -5
- data/lib/xcres/analyzer/resources_analyzer/xcassets_analyzer.rb +7 -11
- data/lib/xcres/builder/file_builder.rb +1 -1
- data/lib/xcres/command/install_command.rb +4 -3
- data/lib/xcres/command/project_command.rb +21 -8
- data/lib/xcres/model/xcassets/bundle.rb +1 -1
- data/lib/xcres/version.rb +1 -1
- data/spec/fixtures/Example/Example/Images.xcassets/AppIcon.appiconset/Contents.json +5 -0
- data/spec/fixtures/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/Contents.json +23 -0
- data/spec/fixtures/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat.jpg +0 -0
- data/spec/fixtures/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@2x.jpg +0 -0
- data/spec/fixtures/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@3x.jpg +0 -0
- data/spec/fixtures/Example/Example/Images.xcassets/Doge.imageset/Contents.json +4 -0
- data/spec/integration.rb +1 -0
- data/spec/integration/build-keyword-clash/after/R.h +0 -2
- data/spec/integration/build-keyword-clash/after/R.m +0 -2
- data/spec/integration/build/after/Example/Example/Images.xcassets/AppIcon.appiconset/Contents.json +5 -0
- data/spec/integration/build/after/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/Contents.json +23 -0
- data/spec/integration/build/after/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat.jpg +0 -0
- data/spec/integration/build/after/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@2x.jpg +0 -0
- data/spec/integration/build/after/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@3x.jpg +0 -0
- data/spec/integration/build/after/Example/Example/Images.xcassets/Doge.imageset/Contents.json +4 -0
- data/spec/integration/build/after/R.h +2 -0
- data/spec/integration/build/after/R.m +1 -0
- data/spec/integration/build/after/execution_output.txt +2 -2
- data/spec/integration/build/before/Example/Example/Images.xcassets/AppIcon.appiconset/Contents.json +5 -0
- data/spec/integration/build/before/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/Contents.json +23 -0
- data/spec/integration/build/before/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat.jpg +0 -0
- data/spec/integration/build/before/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@2x.jpg +0 -0
- data/spec/integration/build/before/Example/Example/Images.xcassets/Cats/GrumpyCat.imageset/GrumpyCat@3x.jpg +0 -0
- data/spec/integration/build/before/Example/Example/Images.xcassets/Doge.imageset/Contents.json +4 -0
- data/spec/integration/install-again/after/Example/Example.xcodeproj.yaml +1 -1
- data/spec/integration/install-moved-supporting-files/after/Example/Example.xcodeproj.yaml +1 -1
- data/spec/integration/install-moved-supporting-files/after/execution_output.txt +2 -2
- data/spec/integration/install-no-supporting-files/after/Example/Example.xcodeproj.yaml +1 -1
- data/spec/integration/install-no-supporting-files/after/execution_output.txt +3 -3
- data/spec/integration/install/after/Example/Example.xcodeproj.yaml +1 -1
- data/spec/integration/install/after/execution_output.txt +1 -1
- data/spec/integration/version/after/execution_output.txt +1 -1
- data/spec/spec_helper/xcodeproj_project_yaml.rb +15 -0
- data/spec/unit/analyzer/resources_analyzer/base_resources_analyzer_spec.rb +41 -8
- data/spec/unit/analyzer/resources_analyzer/bundle_resources_analyzer_spec.rb +2 -2
- data/spec/unit/model/xcassets/bundle_spec.rb +32 -17
- data/spec/unit/model/xcassets/resource_spec.rb +6 -1
- metadata +26 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 582ff4713e27360dad8eac366f7fb972e631696f
|
4
|
+
data.tar.gz: 95e46087ebe01b670c0cc4b03493e87963146b17
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65b834e686b1f356abced830e74608fac622bc6c0d744ab7da13e8ce3592c18c42968c980b32d155f4bdd890a17ed10f301f4ad393e4a2c336e4d5cbab02d22e
|
7
|
+
data.tar.gz: dfa1cc9951f35286e886179f80f5560bcf8ce3c6cda38e287103209353418b30822ddeba41cfb7339237b92a8a866948e84f95c0182bf859e37e5514beca0162
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
xcres (0.4.
|
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.
|
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.
|
@@ -79,20 +79,27 @@ module XCRes
|
|
79
79
|
#
|
80
80
|
# @param [Hash] options
|
81
81
|
# valid options are:
|
82
|
-
# * [
|
83
|
-
#
|
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 = {
|
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
|
-
|
94
|
-
key = key_from_path(path)
|
95
|
-
|
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
|
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]
|
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
|
-
|
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
|
-
|
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
|
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
|
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
|
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
|
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', '
|
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
|
-
|
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 ||=
|
71
|
-
target.
|
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.
|
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. ' \
|
data/lib/xcres/version.rb
CHANGED
@@ -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
|
+
}
|
Binary file
|
Binary file
|
Binary file
|
data/spec/integration.rb
CHANGED
@@ -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
|
+
}
|
Binary file
|
Binary file
|
Binary file
|
@@ -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 #
|
11
|
-
Ⓥ Add section for ImagesAssets with
|
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"]
|
@@ -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
|
+
}
|
Binary file
|
Binary file
|
Binary file
|
@@ -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: '
|
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: '
|
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
|
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
|
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: '
|
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
|
6
|
-
⚠ Didn't
|
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
|
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: '
|
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
|
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
|
@@ -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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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.
|
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.
|
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 '
|
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
|
90
|
-
@res.
|
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.
|
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-
|
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
|