slather 0.0.235 → 1.0.0

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 (33) hide show
  1. checksums.yaml +13 -5
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +18 -0
  4. data/.travis.yml +20 -0
  5. data/README.md +59 -11
  6. data/bin/slather +11 -8
  7. data/docs/logo.jpg +0 -0
  8. data/lib/slather/coverage_file.rb +6 -5
  9. data/lib/slather/coverage_service/coveralls.rb +11 -2
  10. data/lib/slather/coverage_service/simple_output.rb +1 -0
  11. data/lib/slather/project.rb +43 -27
  12. data/lib/slather/version.rb +1 -1
  13. data/scripts/travis.sh +2 -0
  14. data/slather.gemspec +1 -0
  15. data/spec/fixtures/fixtures.xcodeproj/project.pbxproj +452 -0
  16. data/spec/fixtures/fixtures.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  17. data/spec/fixtures/fixtures.xcodeproj/xcshareddata/xcschemes/fixtures.xcscheme +69 -0
  18. data/spec/fixtures/fixtures/Supporting Files/fixtures-Prefix.pch +9 -0
  19. data/spec/fixtures/fixtures/fixtures.h +16 -0
  20. data/spec/fixtures/fixtures/fixtures.m +23 -0
  21. data/spec/fixtures/fixtures/more_files/peekaview.h +13 -0
  22. data/spec/fixtures/fixtures/more_files/peekaview.m +31 -0
  23. data/spec/fixtures/fixturesTests/Supporting Files/en.lproj/InfoPlist.strings +2 -0
  24. data/spec/fixtures/fixturesTests/Supporting Files/fixturesTests-Info.plist +22 -0
  25. data/spec/fixtures/fixturesTests/fixturesTests.m +36 -0
  26. data/spec/fixtures/fixturesTests/peekaviewTests.m +34 -0
  27. data/spec/slather/coverage_file_spec.rb +106 -0
  28. data/spec/slather/coverage_service/coveralls_spec.rb +66 -0
  29. data/spec/slather/coverage_service/simple_output_spec.rb +26 -0
  30. data/spec/slather/fixtures.gcno +0 -0
  31. data/spec/slather/project_spec.rb +219 -0
  32. data/spec/spec_helper.rb +16 -0
  33. metadata +73 -18
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2340d415fd4ec5df0fb2a3b12df99029dea88030
4
- data.tar.gz: 72289860e2545024468db7aedc02c5160d4e225a
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YjMxM2E5NjllODYxYWVmNzIwOTVlYzRjOWI2ZmQwMmY1Njg0YzBhOA==
5
+ data.tar.gz: !binary |-
6
+ MmUwMWU1NTY4NTRhY2U0MzUxMjJhMDhlMTFjMDkwOTE0NWJiYmI3OQ==
5
7
  SHA512:
6
- metadata.gz: f800ffc9332733b6644bcc8742be5a35682ae82b3b6560e836b152a8f44630baad10cf26ecbc430ee855aa5b38cc281c7268921a172f42dc424051cf96a3ba65
7
- data.tar.gz: 5b349f607c04d39b6ca966f9dfb0e28a196674524e0d8b34ca2f406d56f08d173adcb506fa0a0eb293f8a9c913c8c38a6aae2efc9f91ffd0ffe878981d4241dc
8
+ metadata.gz: !binary |-
9
+ NDRmZWQxYzg0NDkzYzE5YzEyNTliYTVjZjcxODVjZjJjNjNjOWJhYmIyZmM1
10
+ ZmQ3M2U5MjE2NmExMjI5NWJlOTk2Njg3ZDM5NzJlYzQ2MjQ3ZTI0MzhjMDE0
11
+ NWY0NWU5OTg5MjkwM2RhMmI1ODFiNGU2OGMzMGNkNDA2ZGIzNDU=
12
+ data.tar.gz: !binary |-
13
+ OTYyYTFhY2Y0ZDZkYzFiNWVjYTgzYjY5YzhlOWNiNjIwYWZmMTljMDI2N2Ew
14
+ MDkxNjQ5NTliMjBmNDkzZGJkNGVlZjJiODRlOWUxMDhjYTc3MjYxMWMzYzIw
15
+ YThmZGQ0YWIzNTI5OTdkY2M2MDI5YzgzMWViMzQ4NDhmZmQ3YTM=
@@ -0,0 +1 @@
1
+ service_name: travis-ci
data/.gitignore CHANGED
@@ -21,4 +21,22 @@ tmp
21
21
  *.a
22
22
  mkmf.log
23
23
 
24
+ # Xcode
25
+ #
26
+ build/
27
+ *.pbxuser
28
+ !default.pbxuser
29
+ *.mode1v3
30
+ !default.mode1v3
31
+ *.mode2v3
32
+ !default.mode2v3
33
+ *.perspectivev3
34
+ !default.perspectivev3
35
+ xcuserdata
36
+ *.xccheckout
37
+ *.moved-aside
38
+ DerivedData
39
+ *.hmap
40
+ *.ipa
41
+ *.xcuserstate
24
42
  *.DS_Store
@@ -0,0 +1,20 @@
1
+ language: objective-c
2
+ script: scripts/travis.sh
3
+
4
+ # Sets Travis to run the Ruby specs on OS X machines which are required to
5
+ # build the native extensions of Xcodeproj.
6
+
7
+ env:
8
+ - RVM_RUBY_VERSION=system
9
+ - RVM_RUBY_VERSION=2.1.1
10
+
11
+ before_install:
12
+ - curl http://curl.haxx.se/ca/cacert.pem -o /usr/local/share/cacert.pem
13
+ - source ~/.rvm/scripts/rvm
14
+ - if [[ $RVM_RUBY_VERSION != 'system' ]]; then rvm install $RVM_RUBY_VERSION; fi
15
+ - rvm use $RVM_RUBY_VERSION
16
+ - if [[ $RVM_RUBY_VERSION == 'system' ]]; then export ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future; fi
17
+ - if [[ $RVM_RUBY_VERSION == 'system' ]]; then sudo gem install bundler --no-ri --no-rdoc; else gem install bundler --no-ri --no-rdoc; fi
18
+
19
+ install:
20
+ - bundle install --without=documentation --path ./travis_bundle_dir
data/README.md CHANGED
@@ -1,6 +1,18 @@
1
- # Slather
2
1
 
3
- TODO: Write a gem description
2
+
3
+ ![Slather Logo](https://raw.githubusercontent.com/venmo/slather/master/docs/logo.jpg)
4
+
5
+ [![Gem Version](https://badge.fury.io/rb/slather.svg)](http://badge.fury.io/rb/slather)
6
+ [![Build Status](https://travis-ci.org/venmo/slather.svg?branch=master)](https://travis-ci.org/venmo/slather)
7
+
8
+ Generate test coverage reports for Xcode projects & hook it into CI.
9
+
10
+ ### Projects that use Slather
11
+
12
+ | Project | Coverage |
13
+ | ------- |:--------:|
14
+ | [Parsimmon](https://github.com/ayanonagon/Parsimmon) | [![Parsimmon Coverage](https://coveralls.io/repos/ayanonagon/Parsimmon/badge.png?branch=master)](https://coveralls.io/r/ayanonagon/Parsimmon?branch=master) |
15
+ | [VENCore](https://github.com/venmo/VENCore) | [![VENCore Coverage](https://coveralls.io/repos/venmo/VENCore/badge.png?branch=marklarr%2Fslather)](https://coveralls.io/r/venmo/VENCore?branch=marklarr%2Fslather) |
4
16
 
5
17
  ## Installation
6
18
 
@@ -12,18 +24,54 @@ And then execute:
12
24
 
13
25
  $ bundle
14
26
 
15
- Or install it yourself as:
27
+ ## Usage
28
+
29
+ Setup your project for test coverage:
16
30
 
17
- $ gem install slather
31
+ $ slather setup path/to/project.xcodeproj
18
32
 
19
- ## Usage
33
+ This will enable the `Generate Test Coverage` and `Instrument Program Flow` flags for your project.
34
+
35
+
36
+ To test if you're ready to generate test coverage, run your test suite on your project, and then run:
37
+
38
+ $ slather coverage -s path/to/project.xcodeproj
39
+
40
+ ### Coveralls
20
41
 
21
- TODO: Write usage instructions here
42
+ Login to https://coveralls.io/ and enable your repository. Right now, `slather` only supports coveralls via Travis CI.
43
+
44
+ Make a `.slather.yml` file:
45
+
46
+ ```yml
47
+ # .slather.yml
48
+
49
+ coverage_service: coveralls
50
+ xcodeproj: path/to/project.xcodeproj
51
+ ignore:
52
+ - ExamplePodCode/*
53
+ - ProjectTestsGroup/*
54
+ ```
55
+
56
+ And then in your `.travis.yml`, call `slather` after a successful_build
57
+
58
+ ```yml
59
+ # .travis.yml
60
+
61
+ after_success: slather
62
+ ```
63
+
64
+ ### Custom Build Directory
65
+
66
+ Slather will look for the test coverage files in `DerivedData` by default. If you send build output to a custom location, like [this](https://github.com/erikdoe/ocmock/blob/master/Tools/travis.sh#L12), then you should also set the `build_directory` property in `.slather.yml`
22
67
 
23
68
  ## Contributing
24
69
 
25
- 1. Fork it ( https://github.com/[my-github-username]/slather/fork )
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create a new Pull Request
70
+ We'd love to see your ideas for improving this library! The best way to contribute is by submitting a pull request. We'll do our best to respond to your patch as soon as possible. You can also submit a [new Github issue](https://github.com/venmo/slather/issues/new) if you find bugs or have questions. :octocat:
71
+
72
+ Please make sure to follow our general coding style and add test coverage for new features!
73
+
74
+ ## Contributors
75
+
76
+ * [@tpoulos](https://github.com/tpoulos), the perfect logo.
77
+ * [@ayanonagon](https://github.com/ayanonagon) and [@kylef](https://github.com/kylef), feedback and testing.
@@ -1,8 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
-
3
2
  require 'clamp'
4
3
  require 'yaml'
5
- require File.join(File.dirname(__FILE__), '..', 'lib', 'slather')
4
+ require File.join(File.dirname(__FILE__), '../lib/slather')
6
5
 
7
6
  Clamp do
8
7
 
@@ -10,7 +9,7 @@ Clamp do
10
9
 
11
10
  subcommand "coverage", "Computes coverage for the supplised project" do
12
11
 
13
- option "--project, -p", "PROJECT", "Path to the xcodeproj", :attribute_name => :xcodeproj_path
12
+ parameter "[xcodeproj]", "Path to the xcodeproj", :attribute_name => :xcodeproj_path
14
13
 
15
14
  option ["--travis", "-t"], :flag, "Indicate that the builds are running on Travis CI"
16
15
 
@@ -30,7 +29,7 @@ Clamp do
30
29
 
31
30
  post
32
31
 
33
- puts "Done slathering!"
32
+ puts "Slathered"
34
33
  end
35
34
 
36
35
  def setup_build_directory
@@ -53,16 +52,20 @@ Clamp do
53
52
 
54
53
  def project
55
54
  @project ||= begin
56
- xcodeproj_path_to_open = xcodeproj_path || Slather::Project.yml_file["xcodeproj"]
57
- project = Slather::Project.open(xcodeproj_path_to_open)
55
+ xcodeproj_path_to_open = xcodeproj_path || Slather::Project.yml["xcodeproj"]
56
+ if xcodeproj_path_to_open
57
+ project = Slather::Project.open(xcodeproj_path_to_open)
58
+ else
59
+ raise StandardError, "Must provide an xcodeproj through .slather.yml"
60
+ end
58
61
  end
59
62
  end
60
63
 
61
64
  def setup_coverage_service
62
65
  if coveralls?
63
- project.extend(Slather::CoverageService::Coveralls)
66
+ project.coverage_service = :coveralls
64
67
  elsif simple_output?
65
- project.extend(Slather::CoverageService::SimpleOutput)
68
+ project.coverage_service = :terminal
66
69
  end
67
70
  end
68
71
 
Binary file
@@ -3,16 +3,17 @@ module Slather
3
3
 
4
4
  attr_accessor :project, :gcno_file_pathname
5
5
 
6
- def initialize(gcno_file_pathname)
7
- @gcno_file_pathname = Pathname(gcno_file_pathname)
6
+ def initialize(project, gcno_file_pathname)
7
+ self.project = project
8
+ self.gcno_file_pathname = Pathname(gcno_file_pathname)
8
9
  end
9
10
 
10
11
  def source_file_pathname
11
12
  @source_file_pathname ||= begin
12
13
  base_filename = gcno_file_pathname.basename.sub_ext("")
13
14
  # TODO: Handle Swift
14
- path = Dir["#{project.main_group.real_path}/**/#{base_filename}.m"].first
15
- path && Pathname(path)
15
+ pbx_file = project.files.detect { |pbx_file| pbx_file.real_path.basename.to_s == "#{base_filename}.m" }
16
+ pbx_file && pbx_file.real_path
16
17
  end
17
18
  end
18
19
 
@@ -38,7 +39,7 @@ module Slather
38
39
  gcov_data = gcov_file.read
39
40
 
40
41
  gcov_files_created.each { |file| FileUtils.rm(file) }
41
-
42
+
42
43
  gcov_data
43
44
  end
44
45
  end
@@ -5,10 +5,12 @@ module Slather
5
5
  def coverage_file_class
6
6
  Slather::CoverallsCoverageFile
7
7
  end
8
+ private :coverage_file_class
8
9
 
9
10
  def travis_job_id
10
11
  ENV['TRAVIS_JOB_ID']
11
12
  end
13
+ private :travis_job_id
12
14
 
13
15
  def coveralls_coverage_data
14
16
  if ci_service == :travis_ci
@@ -29,14 +31,21 @@ module Slather
29
31
 
30
32
  def post
31
33
  f = File.open('coveralls_json_file', 'w+')
32
- f.write(coveralls_coverage_data)
33
- `curl -s --form json_file=@#{f.path} #{coveralls_api_jobs_path}`
34
+ begin
35
+ f.write(coveralls_coverage_data)
36
+ f.close
37
+ `curl -s --form json_file=@#{f.path} #{coveralls_api_jobs_path}`
38
+ rescue StandardError => e
39
+ FileUtils.rm(f)
40
+ raise e
41
+ end
34
42
  FileUtils.rm(f)
35
43
  end
36
44
 
37
45
  def coveralls_api_jobs_path
38
46
  "https://coveralls.io/api/v1/jobs"
39
47
  end
48
+ private :coveralls_api_jobs_path
40
49
 
41
50
  end
42
51
  end
@@ -5,6 +5,7 @@ module Slather
5
5
  def coverage_file_class
6
6
  Slather::CoverallsCoverageFile
7
7
  end
8
+ private :coverage_file_class
8
9
 
9
10
  def post
10
11
  total_project_lines = 0
@@ -6,7 +6,7 @@ require 'yaml'
6
6
  module Slather
7
7
  class Project < Xcodeproj::Project
8
8
 
9
- attr_accessor :build_directory, :ignore_list, :ci_service
9
+ attr_accessor :build_directory, :ignore_list, :ci_service, :coverage_service
10
10
 
11
11
  def self.open(xcodeproj)
12
12
  proj = super
@@ -22,18 +22,12 @@ module Slather
22
22
  def build_directory
23
23
  @build_directory || derived_data_dir
24
24
  end
25
- private :build_directory
26
25
 
27
26
  def coverage_files
28
27
  coverage_files = Dir["#{build_directory}/**/*.gcno"].map do |file|
29
- coverage_file = coverage_file_class.new(file)
30
- coverage_file.project = self
28
+ coverage_file = coverage_file_class.new(self, file)
31
29
  # If there's no source file for this gcno, it probably belongs to another project.
32
- if coverage_file.source_file_pathname && !coverage_file.ignored?
33
- coverage_file
34
- else
35
- nil
36
- end
30
+ coverage_file.source_file_pathname && !coverage_file.ignored? ? coverage_file : nil
37
31
  end.compact
38
32
 
39
33
  if coverage_files.empty?
@@ -44,30 +38,51 @@ module Slather
44
38
  end
45
39
  private :coverage_files
46
40
 
47
- def self.yml_file
48
- @yml_file ||= begin
49
- yml_filename = '.slather.yml'
50
- if File.exist?(yml_filename)
51
- YAML.load_file(yml_filename)
52
- else
53
- {}
54
- end
55
- end
41
+ def self.yml_filename
42
+ '.slather.yml'
43
+ end
44
+
45
+ def self.yml
46
+ @yml ||= File.exist?(yml_filename) ? YAML.load_file(yml_filename) : {}
56
47
  end
57
48
 
58
49
  def configure_from_yml
59
- self.build_directory = self.class.yml_file["build_directory"] if self.class.yml_file["build_directory"]
60
- self.ignore_list = self.class.yml_file["ignore"] || []
61
- self.ci_service = (self.class.yml_file["ci_service"] || :travis_ci).to_sym
50
+ configure_build_directory_from_yml
51
+ configure_ignore_list_from_yml
52
+ configure_ci_service_from_yml
53
+ configure_coverage_service_from_yml
54
+ end
55
+
56
+ def configure_build_directory_from_yml
57
+ self.build_directory = self.class.yml["build_directory"] if self.class.yml["build_directory"] && !@build_directory
58
+ end
59
+
60
+ def configure_ignore_list_from_yml
61
+ self.ignore_list ||= [(self.class.yml["ignore"] || [])].flatten
62
+ end
62
63
 
63
- coverage_service = self.class.yml_file["coverage_service"]
64
- if coverage_service == "coveralls"
64
+ def configure_ci_service_from_yml
65
+ self.ci_service ||= (self.class.yml["ci_service"] || :travis_ci)
66
+ end
67
+
68
+ def ci_service=(service)
69
+ @ci_service = service && service.to_sym
70
+ end
71
+
72
+ def configure_coverage_service_from_yml
73
+ self.coverage_service ||= (self.class.yml["coverage_service"] || :terminal)
74
+ end
75
+
76
+ def coverage_service=(service)
77
+ service = service && service.to_sym
78
+ if service == :coveralls
65
79
  extend(Slather::CoverageService::Coveralls)
66
- elsif coverage_service == "terminal"
80
+ elsif service == :terminal
67
81
  extend(Slather::CoverageService::SimpleOutput)
68
- elsif !self.class.method_defined?(:post)
69
- raise ArgumentError, "value `#{coverage_service}` not valid for key `coverage_service` in #{self.class.yml_file.path}. Try `terminal` or `coveralls`"
82
+ else
83
+ raise ArgumentError, "`#{coverage_service}` is not a valid coverage service. Try `terminal` or `coveralls`"
70
84
  end
85
+ @coverage_service = service
71
86
  end
72
87
 
73
88
  def setup_for_coverage
@@ -78,4 +93,5 @@ module Slather
78
93
  end
79
94
 
80
95
  end
81
- end
96
+ end
97
+
@@ -1,3 +1,3 @@
1
1
  module Slather
2
- VERSION = "0.0.235"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -0,0 +1,2 @@
1
+ xcodebuild -project spec/fixtures/fixtures.xcodeproj/ -scheme fixtures -configuration Debug test
2
+ bundle exec rspec
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ["lib"]
19
19
 
20
20
  spec.add_development_dependency "bundler", "~> 1.6"
21
+ spec.add_development_dependency "coveralls"
21
22
  spec.add_development_dependency "rake", "~> 10.3"
22
23
  spec.add_development_dependency "rspec", "~> 2.14"
23
24
  spec.add_development_dependency "pry", "~> 0.9"
@@ -0,0 +1,452 @@
1
+ // !$*UTF8*$!
2
+ {
3
+ archiveVersion = 1;
4
+ classes = {
5
+ };
6
+ objectVersion = 46;
7
+ objects = {
8
+
9
+ /* Begin PBXBuildFile section */
10
+ 8C52AEF7195AAE32008A882A /* peekaview.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C52AEF5195AAE32008A882A /* peekaview.h */; };
11
+ 8C52AEF8195AAE33008A882A /* peekaview.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C52AEF6195AAE32008A882A /* peekaview.m */; };
12
+ 8C52AEFA195AAE70008A882A /* peekaviewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C52AEF9195AAE70008A882A /* peekaviewTests.m */; };
13
+ 8C9A2031195965F10013B6B3 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C9A2030195965F10013B6B3 /* Cocoa.framework */; };
14
+ 8C9A203B195965F10013B6B3 /* fixtures.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C9A203A195965F10013B6B3 /* fixtures.m */; };
15
+ 8C9A2042195965F10013B6B3 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C9A2041195965F10013B6B3 /* XCTest.framework */; };
16
+ 8C9A2043195965F10013B6B3 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C9A2030195965F10013B6B3 /* Cocoa.framework */; };
17
+ 8C9A2046195965F10013B6B3 /* libfixtures.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C9A202D195965F10013B6B3 /* libfixtures.a */; };
18
+ 8C9A204C195965F10013B6B3 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8C9A204A195965F10013B6B3 /* InfoPlist.strings */; };
19
+ 8C9A204E195965F10013B6B3 /* fixturesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C9A204D195965F10013B6B3 /* fixturesTests.m */; };
20
+ /* End PBXBuildFile section */
21
+
22
+ /* Begin PBXContainerItemProxy section */
23
+ 8C9A2044195965F10013B6B3 /* PBXContainerItemProxy */ = {
24
+ isa = PBXContainerItemProxy;
25
+ containerPortal = 8C9A2025195965F00013B6B3 /* Project object */;
26
+ proxyType = 1;
27
+ remoteGlobalIDString = 8C9A202C195965F10013B6B3;
28
+ remoteInfo = fixtures;
29
+ };
30
+ /* End PBXContainerItemProxy section */
31
+
32
+ /* Begin PBXFileReference section */
33
+ 8C52AEF5195AAE32008A882A /* peekaview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = peekaview.h; sourceTree = "<group>"; };
34
+ 8C52AEF6195AAE32008A882A /* peekaview.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = peekaview.m; sourceTree = "<group>"; };
35
+ 8C52AEF9195AAE70008A882A /* peekaviewTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = peekaviewTests.m; sourceTree = "<group>"; };
36
+ 8C9A202D195965F10013B6B3 /* libfixtures.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libfixtures.a; sourceTree = BUILT_PRODUCTS_DIR; };
37
+ 8C9A2030195965F10013B6B3 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
38
+ 8C9A2033195965F10013B6B3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
39
+ 8C9A2034195965F10013B6B3 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
40
+ 8C9A2035195965F10013B6B3 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
41
+ 8C9A2038195965F10013B6B3 /* fixtures-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "fixtures-Prefix.pch"; sourceTree = "<group>"; };
42
+ 8C9A2039195965F10013B6B3 /* fixtures.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = fixtures.h; sourceTree = "<group>"; };
43
+ 8C9A203A195965F10013B6B3 /* fixtures.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = fixtures.m; sourceTree = "<group>"; };
44
+ 8C9A2040195965F10013B6B3 /* fixturesTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = fixturesTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
45
+ 8C9A2041195965F10013B6B3 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
46
+ 8C9A2049195965F10013B6B3 /* fixturesTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "fixturesTests-Info.plist"; sourceTree = "<group>"; };
47
+ 8C9A204B195965F10013B6B3 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
48
+ 8C9A204D195965F10013B6B3 /* fixturesTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = fixturesTests.m; sourceTree = "<group>"; };
49
+ /* End PBXFileReference section */
50
+
51
+ /* Begin PBXFrameworksBuildPhase section */
52
+ 8C9A202A195965F10013B6B3 /* Frameworks */ = {
53
+ isa = PBXFrameworksBuildPhase;
54
+ buildActionMask = 2147483647;
55
+ files = (
56
+ 8C9A2031195965F10013B6B3 /* Cocoa.framework in Frameworks */,
57
+ );
58
+ runOnlyForDeploymentPostprocessing = 0;
59
+ };
60
+ 8C9A203D195965F10013B6B3 /* Frameworks */ = {
61
+ isa = PBXFrameworksBuildPhase;
62
+ buildActionMask = 2147483647;
63
+ files = (
64
+ 8C9A2046195965F10013B6B3 /* libfixtures.a in Frameworks */,
65
+ 8C9A2043195965F10013B6B3 /* Cocoa.framework in Frameworks */,
66
+ 8C9A2042195965F10013B6B3 /* XCTest.framework in Frameworks */,
67
+ );
68
+ runOnlyForDeploymentPostprocessing = 0;
69
+ };
70
+ /* End PBXFrameworksBuildPhase section */
71
+
72
+ /* Begin PBXGroup section */
73
+ 8C52AEF4195AAE16008A882A /* more_files */ = {
74
+ isa = PBXGroup;
75
+ children = (
76
+ 8C52AEF5195AAE32008A882A /* peekaview.h */,
77
+ 8C52AEF6195AAE32008A882A /* peekaview.m */,
78
+ );
79
+ path = more_files;
80
+ sourceTree = "<group>";
81
+ };
82
+ 8C9A2024195965F00013B6B3 = {
83
+ isa = PBXGroup;
84
+ children = (
85
+ 8C9A2036195965F10013B6B3 /* fixtures */,
86
+ 8C9A2047195965F10013B6B3 /* fixturesTests */,
87
+ 8C9A202F195965F10013B6B3 /* Frameworks */,
88
+ 8C9A202E195965F10013B6B3 /* Products */,
89
+ );
90
+ sourceTree = "<group>";
91
+ };
92
+ 8C9A202E195965F10013B6B3 /* Products */ = {
93
+ isa = PBXGroup;
94
+ children = (
95
+ 8C9A202D195965F10013B6B3 /* libfixtures.a */,
96
+ 8C9A2040195965F10013B6B3 /* fixturesTests.xctest */,
97
+ );
98
+ name = Products;
99
+ sourceTree = "<group>";
100
+ };
101
+ 8C9A202F195965F10013B6B3 /* Frameworks */ = {
102
+ isa = PBXGroup;
103
+ children = (
104
+ 8C9A2030195965F10013B6B3 /* Cocoa.framework */,
105
+ 8C9A2041195965F10013B6B3 /* XCTest.framework */,
106
+ 8C9A2032195965F10013B6B3 /* Other Frameworks */,
107
+ );
108
+ name = Frameworks;
109
+ sourceTree = "<group>";
110
+ };
111
+ 8C9A2032195965F10013B6B3 /* Other Frameworks */ = {
112
+ isa = PBXGroup;
113
+ children = (
114
+ 8C9A2033195965F10013B6B3 /* Foundation.framework */,
115
+ 8C9A2034195965F10013B6B3 /* CoreData.framework */,
116
+ 8C9A2035195965F10013B6B3 /* AppKit.framework */,
117
+ );
118
+ name = "Other Frameworks";
119
+ sourceTree = "<group>";
120
+ };
121
+ 8C9A2036195965F10013B6B3 /* fixtures */ = {
122
+ isa = PBXGroup;
123
+ children = (
124
+ 8C52AEF4195AAE16008A882A /* more_files */,
125
+ 8C9A2039195965F10013B6B3 /* fixtures.h */,
126
+ 8C9A203A195965F10013B6B3 /* fixtures.m */,
127
+ 8C9A2037195965F10013B6B3 /* Supporting Files */,
128
+ );
129
+ path = fixtures;
130
+ sourceTree = "<group>";
131
+ };
132
+ 8C9A2037195965F10013B6B3 /* Supporting Files */ = {
133
+ isa = PBXGroup;
134
+ children = (
135
+ 8C9A2038195965F10013B6B3 /* fixtures-Prefix.pch */,
136
+ );
137
+ path = "Supporting Files";
138
+ sourceTree = "<group>";
139
+ };
140
+ 8C9A2047195965F10013B6B3 /* fixturesTests */ = {
141
+ isa = PBXGroup;
142
+ children = (
143
+ 8C9A204D195965F10013B6B3 /* fixturesTests.m */,
144
+ 8C9A2048195965F10013B6B3 /* Supporting Files */,
145
+ 8C52AEF9195AAE70008A882A /* peekaviewTests.m */,
146
+ );
147
+ path = fixturesTests;
148
+ sourceTree = "<group>";
149
+ };
150
+ 8C9A2048195965F10013B6B3 /* Supporting Files */ = {
151
+ isa = PBXGroup;
152
+ children = (
153
+ 8C9A2049195965F10013B6B3 /* fixturesTests-Info.plist */,
154
+ 8C9A204A195965F10013B6B3 /* InfoPlist.strings */,
155
+ );
156
+ path = "Supporting Files";
157
+ sourceTree = "<group>";
158
+ };
159
+ /* End PBXGroup section */
160
+
161
+ /* Begin PBXHeadersBuildPhase section */
162
+ 8C9A202B195965F10013B6B3 /* Headers */ = {
163
+ isa = PBXHeadersBuildPhase;
164
+ buildActionMask = 2147483647;
165
+ files = (
166
+ 8C52AEF7195AAE32008A882A /* peekaview.h in Headers */,
167
+ );
168
+ runOnlyForDeploymentPostprocessing = 0;
169
+ };
170
+ /* End PBXHeadersBuildPhase section */
171
+
172
+ /* Begin PBXNativeTarget section */
173
+ 8C9A202C195965F10013B6B3 /* fixtures */ = {
174
+ isa = PBXNativeTarget;
175
+ buildConfigurationList = 8C9A2051195965F10013B6B3 /* Build configuration list for PBXNativeTarget "fixtures" */;
176
+ buildPhases = (
177
+ 8C9A2029195965F10013B6B3 /* Sources */,
178
+ 8C9A202A195965F10013B6B3 /* Frameworks */,
179
+ 8C9A202B195965F10013B6B3 /* Headers */,
180
+ );
181
+ buildRules = (
182
+ );
183
+ dependencies = (
184
+ );
185
+ name = fixtures;
186
+ productName = fixtures;
187
+ productReference = 8C9A202D195965F10013B6B3 /* libfixtures.a */;
188
+ productType = "com.apple.product-type.library.static";
189
+ };
190
+ 8C9A203F195965F10013B6B3 /* fixturesTests */ = {
191
+ isa = PBXNativeTarget;
192
+ buildConfigurationList = 8C9A2054195965F10013B6B3 /* Build configuration list for PBXNativeTarget "fixturesTests" */;
193
+ buildPhases = (
194
+ 8C9A203C195965F10013B6B3 /* Sources */,
195
+ 8C9A203D195965F10013B6B3 /* Frameworks */,
196
+ 8C9A203E195965F10013B6B3 /* Resources */,
197
+ );
198
+ buildRules = (
199
+ );
200
+ dependencies = (
201
+ 8C9A2045195965F10013B6B3 /* PBXTargetDependency */,
202
+ );
203
+ name = fixturesTests;
204
+ productName = fixturesTests;
205
+ productReference = 8C9A2040195965F10013B6B3 /* fixturesTests.xctest */;
206
+ productType = "com.apple.product-type.bundle.unit-test";
207
+ };
208
+ /* End PBXNativeTarget section */
209
+
210
+ /* Begin PBXProject section */
211
+ 8C9A2025195965F00013B6B3 /* Project object */ = {
212
+ isa = PBXProject;
213
+ attributes = {
214
+ LastUpgradeCheck = 0510;
215
+ ORGANIZATIONNAME = marklarr;
216
+ };
217
+ buildConfigurationList = 8C9A2028195965F00013B6B3 /* Build configuration list for PBXProject "fixtures" */;
218
+ compatibilityVersion = "Xcode 3.2";
219
+ developmentRegion = English;
220
+ hasScannedForEncodings = 0;
221
+ knownRegions = (
222
+ en,
223
+ );
224
+ mainGroup = 8C9A2024195965F00013B6B3;
225
+ productRefGroup = 8C9A202E195965F10013B6B3 /* Products */;
226
+ projectDirPath = "";
227
+ projectRoot = "";
228
+ targets = (
229
+ 8C9A202C195965F10013B6B3 /* fixtures */,
230
+ 8C9A203F195965F10013B6B3 /* fixturesTests */,
231
+ );
232
+ };
233
+ /* End PBXProject section */
234
+
235
+ /* Begin PBXResourcesBuildPhase section */
236
+ 8C9A203E195965F10013B6B3 /* Resources */ = {
237
+ isa = PBXResourcesBuildPhase;
238
+ buildActionMask = 2147483647;
239
+ files = (
240
+ 8C9A204C195965F10013B6B3 /* InfoPlist.strings in Resources */,
241
+ );
242
+ runOnlyForDeploymentPostprocessing = 0;
243
+ };
244
+ /* End PBXResourcesBuildPhase section */
245
+
246
+ /* Begin PBXSourcesBuildPhase section */
247
+ 8C9A2029195965F10013B6B3 /* Sources */ = {
248
+ isa = PBXSourcesBuildPhase;
249
+ buildActionMask = 2147483647;
250
+ files = (
251
+ 8C9A203B195965F10013B6B3 /* fixtures.m in Sources */,
252
+ 8C52AEF8195AAE33008A882A /* peekaview.m in Sources */,
253
+ );
254
+ runOnlyForDeploymentPostprocessing = 0;
255
+ };
256
+ 8C9A203C195965F10013B6B3 /* Sources */ = {
257
+ isa = PBXSourcesBuildPhase;
258
+ buildActionMask = 2147483647;
259
+ files = (
260
+ 8C9A204E195965F10013B6B3 /* fixturesTests.m in Sources */,
261
+ 8C52AEFA195AAE70008A882A /* peekaviewTests.m in Sources */,
262
+ );
263
+ runOnlyForDeploymentPostprocessing = 0;
264
+ };
265
+ /* End PBXSourcesBuildPhase section */
266
+
267
+ /* Begin PBXTargetDependency section */
268
+ 8C9A2045195965F10013B6B3 /* PBXTargetDependency */ = {
269
+ isa = PBXTargetDependency;
270
+ target = 8C9A202C195965F10013B6B3 /* fixtures */;
271
+ targetProxy = 8C9A2044195965F10013B6B3 /* PBXContainerItemProxy */;
272
+ };
273
+ /* End PBXTargetDependency section */
274
+
275
+ /* Begin PBXVariantGroup section */
276
+ 8C9A204A195965F10013B6B3 /* InfoPlist.strings */ = {
277
+ isa = PBXVariantGroup;
278
+ children = (
279
+ 8C9A204B195965F10013B6B3 /* en */,
280
+ );
281
+ name = InfoPlist.strings;
282
+ sourceTree = "<group>";
283
+ };
284
+ /* End PBXVariantGroup section */
285
+
286
+ /* Begin XCBuildConfiguration section */
287
+ 8C9A204F195965F10013B6B3 /* Debug */ = {
288
+ isa = XCBuildConfiguration;
289
+ buildSettings = {
290
+ ALWAYS_SEARCH_USER_PATHS = NO;
291
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
292
+ CLANG_CXX_LIBRARY = "libc++";
293
+ CLANG_ENABLE_MODULES = YES;
294
+ CLANG_ENABLE_OBJC_ARC = YES;
295
+ CLANG_WARN_BOOL_CONVERSION = YES;
296
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
297
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
298
+ CLANG_WARN_EMPTY_BODY = YES;
299
+ CLANG_WARN_ENUM_CONVERSION = YES;
300
+ CLANG_WARN_INT_CONVERSION = YES;
301
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
302
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
303
+ COPY_PHASE_STRIP = NO;
304
+ GCC_C_LANGUAGE_STANDARD = gnu99;
305
+ GCC_DYNAMIC_NO_PIC = NO;
306
+ GCC_ENABLE_OBJC_EXCEPTIONS = YES;
307
+ GCC_GENERATE_TEST_COVERAGE_FILES = YES;
308
+ GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
309
+ GCC_OPTIMIZATION_LEVEL = 0;
310
+ GCC_PREPROCESSOR_DEFINITIONS = (
311
+ "DEBUG=1",
312
+ "$(inherited)",
313
+ );
314
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
315
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
316
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
317
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
318
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
319
+ GCC_WARN_UNUSED_FUNCTION = YES;
320
+ GCC_WARN_UNUSED_VARIABLE = YES;
321
+ MACOSX_DEPLOYMENT_TARGET = 10.9;
322
+ ONLY_ACTIVE_ARCH = YES;
323
+ SDKROOT = macosx;
324
+ };
325
+ name = Debug;
326
+ };
327
+ 8C9A2050195965F10013B6B3 /* Release */ = {
328
+ isa = XCBuildConfiguration;
329
+ buildSettings = {
330
+ ALWAYS_SEARCH_USER_PATHS = NO;
331
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
332
+ CLANG_CXX_LIBRARY = "libc++";
333
+ CLANG_ENABLE_MODULES = YES;
334
+ CLANG_ENABLE_OBJC_ARC = YES;
335
+ CLANG_WARN_BOOL_CONVERSION = YES;
336
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
337
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
338
+ CLANG_WARN_EMPTY_BODY = YES;
339
+ CLANG_WARN_ENUM_CONVERSION = YES;
340
+ CLANG_WARN_INT_CONVERSION = YES;
341
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
342
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
343
+ COPY_PHASE_STRIP = YES;
344
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
345
+ ENABLE_NS_ASSERTIONS = NO;
346
+ GCC_C_LANGUAGE_STANDARD = gnu99;
347
+ GCC_ENABLE_OBJC_EXCEPTIONS = YES;
348
+ GCC_GENERATE_TEST_COVERAGE_FILES = YES;
349
+ GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
350
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
351
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
352
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
353
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
354
+ GCC_WARN_UNUSED_FUNCTION = YES;
355
+ GCC_WARN_UNUSED_VARIABLE = YES;
356
+ MACOSX_DEPLOYMENT_TARGET = 10.9;
357
+ SDKROOT = macosx;
358
+ };
359
+ name = Release;
360
+ };
361
+ 8C9A2052195965F10013B6B3 /* Debug */ = {
362
+ isa = XCBuildConfiguration;
363
+ buildSettings = {
364
+ GCC_GENERATE_TEST_COVERAGE_FILES = YES;
365
+ GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
366
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
367
+ GCC_PREFIX_HEADER = "fixtures/Supporting Files/fixtures-Prefix.pch";
368
+ PRODUCT_NAME = "$(TARGET_NAME)";
369
+ };
370
+ name = Debug;
371
+ };
372
+ 8C9A2053195965F10013B6B3 /* Release */ = {
373
+ isa = XCBuildConfiguration;
374
+ buildSettings = {
375
+ GCC_GENERATE_TEST_COVERAGE_FILES = YES;
376
+ GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
377
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
378
+ GCC_PREFIX_HEADER = "fixtures/Supporting Files/fixtures-Prefix.pch";
379
+ PRODUCT_NAME = "$(TARGET_NAME)";
380
+ };
381
+ name = Release;
382
+ };
383
+ 8C9A2055195965F10013B6B3 /* Debug */ = {
384
+ isa = XCBuildConfiguration;
385
+ buildSettings = {
386
+ COMBINE_HIDPI_IMAGES = YES;
387
+ FRAMEWORK_SEARCH_PATHS = (
388
+ "$(DEVELOPER_FRAMEWORKS_DIR)",
389
+ "$(inherited)",
390
+ );
391
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
392
+ GCC_PREFIX_HEADER = "fixtures/Supporting Files/fixtures-Prefix.pch";
393
+ GCC_PREPROCESSOR_DEFINITIONS = (
394
+ "DEBUG=1",
395
+ "$(inherited)",
396
+ );
397
+ INFOPLIST_FILE = "fixturesTests/Supporting Files/fixturesTests-Info.plist";
398
+ PRODUCT_NAME = "$(TARGET_NAME)";
399
+ WRAPPER_EXTENSION = xctest;
400
+ };
401
+ name = Debug;
402
+ };
403
+ 8C9A2056195965F10013B6B3 /* Release */ = {
404
+ isa = XCBuildConfiguration;
405
+ buildSettings = {
406
+ COMBINE_HIDPI_IMAGES = YES;
407
+ FRAMEWORK_SEARCH_PATHS = (
408
+ "$(DEVELOPER_FRAMEWORKS_DIR)",
409
+ "$(inherited)",
410
+ );
411
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
412
+ GCC_PREFIX_HEADER = "fixtures/Supporting Files/fixtures-Prefix.pch";
413
+ INFOPLIST_FILE = "fixturesTests/Supporting Files/fixturesTests-Info.plist";
414
+ PRODUCT_NAME = "$(TARGET_NAME)";
415
+ WRAPPER_EXTENSION = xctest;
416
+ };
417
+ name = Release;
418
+ };
419
+ /* End XCBuildConfiguration section */
420
+
421
+ /* Begin XCConfigurationList section */
422
+ 8C9A2028195965F00013B6B3 /* Build configuration list for PBXProject "fixtures" */ = {
423
+ isa = XCConfigurationList;
424
+ buildConfigurations = (
425
+ 8C9A204F195965F10013B6B3 /* Debug */,
426
+ 8C9A2050195965F10013B6B3 /* Release */,
427
+ );
428
+ defaultConfigurationIsVisible = 0;
429
+ defaultConfigurationName = Release;
430
+ };
431
+ 8C9A2051195965F10013B6B3 /* Build configuration list for PBXNativeTarget "fixtures" */ = {
432
+ isa = XCConfigurationList;
433
+ buildConfigurations = (
434
+ 8C9A2052195965F10013B6B3 /* Debug */,
435
+ 8C9A2053195965F10013B6B3 /* Release */,
436
+ );
437
+ defaultConfigurationIsVisible = 0;
438
+ defaultConfigurationName = Release;
439
+ };
440
+ 8C9A2054195965F10013B6B3 /* Build configuration list for PBXNativeTarget "fixturesTests" */ = {
441
+ isa = XCConfigurationList;
442
+ buildConfigurations = (
443
+ 8C9A2055195965F10013B6B3 /* Debug */,
444
+ 8C9A2056195965F10013B6B3 /* Release */,
445
+ );
446
+ defaultConfigurationIsVisible = 0;
447
+ defaultConfigurationName = Release;
448
+ };
449
+ /* End XCConfigurationList section */
450
+ };
451
+ rootObject = 8C9A2025195965F00013B6B3 /* Project object */;
452
+ }