app-tools 1.3.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/gencov +132 -0
  3. data/lib/app_tools/version.rb +1 -1
  4. metadata +5 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b673ac272f9c2dccca9fbf2696d365710d6e2f34
4
- data.tar.gz: 928bdbcd9ec02976c8d4e4e56bed6f721dcb4d08
3
+ metadata.gz: b6cd014f46a7658d6c7a790bdf02869c77acc428
4
+ data.tar.gz: 9f480c93affe10fa98a6ba6257667aed69928507
5
5
  SHA512:
6
- metadata.gz: 292eb08c2a39947c22b0949a5f9de17b957bb7a01bf5b747102c030f7dae44a7d21ad4c0f5e25d2a1ca25e7e020d63fa682b0edf854683349e59da999d546f14
7
- data.tar.gz: cb9de9a1cdabf6719c0056be2815e653a44c956384acbe01a6474a2dbd627f3d356771f5e952c4ff0bd2cafcb33011a1fd25ca87cd2e3c01ea94bb4787e27540
6
+ metadata.gz: f10f4012b90750f384e8cbd58d4e832d1c523313a80d766d945e811991b0079e7a845937a623602dcfa135f298e98187c2e9d01e8004fb151798e1547ee2d4b4
7
+ data.tar.gz: ae31bd4356c6dc2a995164ce7f7930dd56da163674228ab7f8fb221667d30d0333b101492be20d629f09438806d0cf19e8ffeecf6e6ad2650ca645e869035eed
data/bin/gencov ADDED
@@ -0,0 +1,132 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'methadone'
5
+ require 'app_tools/version'
6
+ require 'tempfile'
7
+ require 'json'
8
+
9
+ module AppTools
10
+ module GenCov
11
+ include Methadone::Main
12
+ include Methadone::CLILogging
13
+ include Methadone::ExitNow
14
+
15
+ class CovData
16
+ attr_accessor :total_files
17
+ attr_accessor :total_regions
18
+ attr_accessor :missed_regions
19
+ attr_accessor :total_lines
20
+ attr_accessor :missed_lines
21
+
22
+ def initialize
23
+ @total_files = 0
24
+ @total_regions = 0
25
+ @missed_regions = 0
26
+ @total_lines = 0
27
+ @missed_lines = 0
28
+ end
29
+
30
+ def to_h
31
+ {
32
+ :total_files => @total_files,
33
+ :total_regions => @total_regions,
34
+ :missed_regions => @missed_regions,
35
+ :total_lines => @total_lines,
36
+ :missed_lines => @missed_lines
37
+ }
38
+ end
39
+ end
40
+
41
+ main do |xcfile, directory|
42
+ if xcfile.end_with?(".xcodeproj")
43
+ xcflag = "-project"
44
+ elsif xcfile.end_with?(".xcworkspace")
45
+ xcflag = "-workspace"
46
+ end
47
+
48
+ scheme = options[:s]
49
+
50
+ build_settings_file = Tempfile.new('gencov')
51
+ pid = Process.spawn("xcodebuild #{xcflag} #{xcfile} -scheme #{scheme} -sdk iphonesimulator -showBuildSettings",
52
+ [:out, :err] => build_settings_file)
53
+ Process.wait(pid)
54
+ build_settings_file.close
55
+ build_settings = {}
56
+
57
+ File.open(build_settings_file.path).each_line do |line|
58
+ if /^ *([A-Z_0-9]*) *= *(.*)$/.match(line)
59
+ build_settings[$1] = $2
60
+ end
61
+ end
62
+
63
+ coverage_root = File.join(build_settings['PROJECT_TEMP_ROOT'], "CodeCoverage/#{scheme}")
64
+ app_name = build_settings['EXECUTABLE_NAME']
65
+ profdata_path = File.join(coverage_root, "Coverage.profdata")
66
+ binary_path = `find #{coverage_root} -path *#{app_name}.app/#{app_name}`.chomp
67
+
68
+ directory = File.expand_path(directory)
69
+ source_files = `find #{directory} -type f \\( -name "*.m" -or -name "*.h" -or -name "*.swift" \\)`.lines
70
+
71
+ m_cov = CovData.new
72
+ total_h_files = 0
73
+ swift_cov = CovData.new
74
+ n = 0
75
+
76
+ source_files.each do |source_file|
77
+ source_file.chomp!
78
+
79
+ if source_file.end_with?('.h')
80
+ total_h_files += 1
81
+ next
82
+ end
83
+
84
+ file_coverage = `xcrun llvm-cov report -instr-profile #{profdata_path} #{binary_path} "#{source_file}"`
85
+
86
+ file_coverage.each_line do |line|
87
+ if /^TOTAL *(.*)$/.match(line)
88
+ fields = $1.split
89
+
90
+ total_regions = fields[0].to_i
91
+ missed_regions = fields[1].to_i
92
+ total_lines = fields[3].to_i
93
+ missed_lines = fields[4].to_i
94
+
95
+ if source_file.end_with?('.swift')
96
+ swift_cov.total_files += 1
97
+ swift_cov.total_regions += total_regions
98
+ swift_cov.missed_regions += missed_regions
99
+ swift_cov.total_lines += total_lines
100
+ swift_cov.missed_lines += missed_lines
101
+ else
102
+ m_cov.total_files += 1
103
+ m_cov.total_regions += total_regions
104
+ m_cov.missed_regions += missed_regions
105
+ m_cov.total_lines += total_lines
106
+ m_cov.missed_lines += missed_lines
107
+ end
108
+ end
109
+ end
110
+
111
+ n += 1
112
+ if n % 100 == 0
113
+ STDERR.puts n
114
+ end
115
+ end
116
+
117
+ puts(JSON.generate("coverage" => { ".swift" => swift_cov.to_h, ".m" => m_cov.to_h, ".h" => { "total_files" => total_h_files } }))
118
+ end
119
+
120
+ description 'gencov - Generates formatted coverage data for a project'
121
+ version AppTools::VERSION
122
+
123
+ on("-s", "--scheme SCHEME", "Schema to use for the project or workspace")
124
+
125
+ arg :xcfile, "The .xcodeproj or .xcworkspace file", :require
126
+ arg :directory, "The directory to generate coverage for", :require
127
+
128
+ use_log_level_option :toggle_debug_on_signal => 'USR1'
129
+
130
+ go!
131
+ end
132
+ end
@@ -1,3 +1,3 @@
1
1
  module AppTools
2
- VERSION = "1.3.0"
2
+ VERSION = "1.4.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: app-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Lyon-Smith
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-05 00:00:00.000000000 Z
11
+ date: 2016-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -129,6 +129,7 @@ email:
129
129
  - john@jamoki.com
130
130
  executables:
131
131
  - app-tools
132
+ - gencov
132
133
  - kcpass
133
134
  - resignipa
134
135
  - setsimkbd
@@ -140,6 +141,7 @@ extra_rdoc_files: []
140
141
  files:
141
142
  - lib/app_tools/version.rb
142
143
  - bin/app-tools
144
+ - bin/gencov
143
145
  - bin/kcpass
144
146
  - bin/resignipa
145
147
  - bin/setsimkbd
@@ -171,3 +173,4 @@ signing_key:
171
173
  specification_version: 4
172
174
  summary: Tools for creating iPhone apps
173
175
  test_files: []
176
+ has_rdoc: