slather 0.0.235 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ }