synx 0.0.2

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 (54) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +46 -0
  3. data/.travis.yml +20 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +70 -0
  7. data/Rakefile +2 -0
  8. data/bin/synx +18 -0
  9. data/lib/synx.rb +13 -0
  10. data/lib/synx/abstract_object.rb +44 -0
  11. data/lib/synx/pbx_file_reference.rb +70 -0
  12. data/lib/synx/pbx_group.rb +126 -0
  13. data/lib/synx/pbx_native_target.rb +15 -0
  14. data/lib/synx/pbx_variant_group.rb +20 -0
  15. data/lib/synx/project.rb +100 -0
  16. data/lib/synx/tabber.rb +35 -0
  17. data/lib/synx/version.rb +3 -0
  18. data/spec/dummy/dummy.xcodeproj/project.pbxproj +534 -0
  19. data/spec/dummy/dummy.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  20. data/spec/dummy/dummy/AlreadySynced/Core Data.xcdatamodeld/.xccurrentversion +8 -0
  21. data/spec/dummy/dummy/AlreadySynced/Core Data.xcdatamodeld/Core Data 2.xcdatamodel/contents +4 -0
  22. data/spec/dummy/dummy/AlreadySynced/Core Data.xcdatamodeld/Core Data 3.xcdatamodel/contents +4 -0
  23. data/spec/dummy/dummy/AlreadySynced/Core Data.xcdatamodeld/Core Data 4.xcdatamodel/contents +4 -0
  24. data/spec/dummy/dummy/AlreadySynced/Core Data.xcdatamodeld/Core Data.xcdatamodel/contents +4 -0
  25. data/spec/dummy/dummy/AlreadySynced/FolderNotInXcodeProj/AnotherFileNotInXcodeProj.h +0 -0
  26. data/spec/dummy/dummy/AlreadySynced/FolderNotInXcodeProj/NSObject+abc.h +13 -0
  27. data/spec/dummy/dummy/AlreadySynced/FolderNotInXcodeProj/NSObject+abc.m +13 -0
  28. data/spec/dummy/dummy/AlreadySynced/FolderNotInXcodeProj/Wowwww.h +13 -0
  29. data/spec/dummy/dummy/AlreadySynced/FolderNotInXcodeProj/Wowwww.m +13 -0
  30. data/spec/dummy/dummy/AlreadySynced/Woot.h +13 -0
  31. data/spec/dummy/dummy/AlreadySynced/Woot.m +13 -0
  32. data/spec/dummy/dummy/AlreadySynced/stuff.xml +0 -0
  33. data/spec/dummy/dummy/FileNotInXcodeProj.h +0 -0
  34. data/spec/dummy/dummy/ManyFiles.h +13 -0
  35. data/spec/dummy/dummy/ManyFiles.m +13 -0
  36. data/spec/dummy/dummy/Wow.h +13 -0
  37. data/spec/dummy/dummy/Wow.m +13 -0
  38. data/spec/dummy/dummy/data.json +0 -0
  39. data/spec/dummy/dummy/dummy-Prefix.pch +9 -0
  40. data/spec/dummy/dummy/dummy.h +13 -0
  41. data/spec/dummy/dummy/dummy.m +13 -0
  42. data/spec/dummy/dummy/image-not-in-xcodeproj.png +0 -0
  43. data/spec/dummy/dummy/image.png +0 -0
  44. data/spec/dummy/dummyTests/dummyTests-Info.plist +22 -0
  45. data/spec/dummy/dummyTests/dummyTests-prefix.pch +15 -0
  46. data/spec/dummy/dummyTests/dummyTests.m +34 -0
  47. data/spec/dummy/dummyTests/en.lproj/InfoPlist.strings +2 -0
  48. data/spec/spec_helper.rb +11 -0
  49. data/spec/synx/expected_file_structure.yml +44 -0
  50. data/spec/synx/expected_group_structure.yml +37 -0
  51. data/spec/synx/project_spec.rb +218 -0
  52. data/spec/synx/tabber_spec.rb +64 -0
  53. data/synx.gemspec +33 -0
  54. metadata +251 -0
@@ -0,0 +1,15 @@
1
+ require 'xcodeproj'
2
+
3
+ module Xcodeproj
4
+ class Project
5
+ module Object
6
+ class PBXNativeTarget
7
+
8
+ def each_build_settings
9
+ build_configurations.each { |bc| yield bc.build_settings }
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ require 'xcodeproj'
2
+
3
+ module Xcodeproj
4
+ class Project
5
+ module Object
6
+ class PBXVariantGroup
7
+
8
+ def sync(group)
9
+ ensure_internal_consistency(group)
10
+ folder_path = children.first.real_path.parent
11
+ work_destination_pathname = parent.work_pathname
12
+ if folder_path.exist?
13
+ FileUtils.mv(folder_path, work_destination_pathname.realpath)
14
+ end
15
+ end
16
+
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,100 @@
1
+ require 'fileutils'
2
+ require 'xcodeproj'
3
+
4
+ module Synx
5
+ class Project < Xcodeproj::Project
6
+
7
+ SYNXRONIZE_DIR = File.join(ENV["HOME"], '.synx')
8
+ private_constant :SYNXRONIZE_DIR
9
+
10
+ DEFAULT_EXCLUSIONS = %W(/Libraries /Frameworks /Products)
11
+ private_constant :DEFAULT_EXCLUSIONS
12
+
13
+ attr_accessor :delayed_groups_set_path, :group_exclusions, :prune
14
+
15
+ def sync(options={})
16
+ set_options(options)
17
+ Synx::Tabber.increase
18
+ Synx::Tabber.puts "Syncing files that are included in Xcode project...".bold.white
19
+ main_group.all_groups.each { |gr| gr.sync(main_group) }
20
+ puts "\n\n"
21
+ Synx::Tabber.puts "Syncing files that are not included in Xcode project..".bold.white
22
+ main_group.all_groups.each(&:move_entries_not_in_xcodeproj)
23
+ transplant_work_project
24
+ Synx::Tabber.decrease
25
+ save
26
+ end
27
+
28
+ def set_options(options)
29
+ self.prune = options[:prune]
30
+
31
+ if options[:no_default_exclusions]
32
+ self.group_exclusions = []
33
+ else
34
+ self.group_exclusions = DEFAULT_EXCLUSIONS
35
+ end
36
+
37
+ self.group_exclusions |= options[:group_exclusions] if options[:group_exclusions]
38
+ end
39
+ private :set_options
40
+
41
+ def transplant_work_project
42
+ # Move the synced entries over
43
+ Dir.glob(work_root_pathname + "*").each do |path|
44
+ FileUtils.rm_rf(work_pathname_to_pathname(Pathname(path)))
45
+ FileUtils.mv(path, root_pathname.to_s)
46
+ end
47
+ end
48
+ private :transplant_work_project
49
+
50
+ def root_pathname
51
+ @root_pathname ||= Pathname(path).parent
52
+ end
53
+
54
+ def work_root_pathname
55
+ if @work_root_pathname
56
+ @work_root_pathname
57
+ else
58
+ @work_root_pathname = Pathname(File.join(SYNXRONIZE_DIR, root_pathname.basename.to_s))
59
+ # Clean up any previous synx and start fresh
60
+ FileUtils.rm_rf(@work_root_pathname.to_s) if @work_root_pathname.exist?
61
+ @work_root_pathname.mkpath
62
+ @work_root_pathname
63
+ end
64
+ end
65
+
66
+ # We build up the new project structure in a temporary workspace, so convert a file path in the project space to
67
+ # one in the temp workspace.
68
+ def pathname_to_work_pathname(pathname)
69
+ work_root_pathname + pathname.relative_path_from(root_pathname)
70
+ end
71
+
72
+ def work_pathname_to_pathname(work_pathname)
73
+ root_pathname + work_pathname.relative_path_from(work_root_pathname)
74
+ end
75
+
76
+ def pathname_is_inside_root_pathname?(grandchild_pathname)
77
+ grandchild_pathname.realpath.to_s =~ /^#{root_pathname.realpath.to_s}/
78
+ end
79
+
80
+ def group_exclusions=(new_exclusions)
81
+ new_exclusions.each do |exclusion|
82
+ # Don't check our own default exclusions -- they may not have it in their project.
83
+ unless DEFAULT_EXCLUSIONS.include?(exclusion)
84
+ # remove leading '/' for this check
85
+ exclusion = exclusion.dup
86
+ exclusion[0] = '' if exclusion[0] == '/'
87
+ unless self[exclusion]
88
+ raise IndexError, "No group #{exclusion} exists"
89
+ end
90
+ end
91
+ end
92
+
93
+ @group_exclusions = new_exclusions
94
+ end
95
+
96
+ end
97
+ end
98
+
99
+
100
+
@@ -0,0 +1,35 @@
1
+ module Synx
2
+ class Tabber
3
+
4
+ @@tabbing = 0
5
+
6
+ class << self
7
+ def increase(n=1)
8
+ @@tabbing += n
9
+ end
10
+
11
+ def decrease(n=1)
12
+ @@tabbing -= n
13
+ @@tabbing = 0 if @@tabbing < 0
14
+ end
15
+
16
+ def current
17
+ @@tabbing
18
+ end
19
+
20
+ def reset
21
+ @@tabbing = 0
22
+ end
23
+
24
+ def puts(str="")
25
+ Kernel.puts (a_single_tab * @@tabbing) + str.to_s
26
+ end
27
+
28
+ def a_single_tab
29
+ return " "
30
+ end
31
+ private :a_single_tab
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,3 @@
1
+ module Synx
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,534 @@
1
+ // !$*UTF8*$!
2
+ {
3
+ archiveVersion = 1;
4
+ classes = {
5
+ };
6
+ objectVersion = 46;
7
+ objects = {
8
+
9
+ /* Begin PBXBuildFile section */
10
+ 8C2DEB7F191D3F5C003A1F44 /* ManyFiles.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C2DEB7E191D3F5C003A1F44 /* ManyFiles.m */; };
11
+ 8C2DEB82191D3F68003A1F44 /* Wow.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C2DEB81191D3F68003A1F44 /* Wow.m */; };
12
+ 8C2DEB87191D404A003A1F44 /* Woot.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C2DEB86191D404A003A1F44 /* Woot.m */; };
13
+ 8C2DEB8A191D4068003A1F44 /* Core Data.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 8C2DEB88191D4068003A1F44 /* Core Data.xcdatamodeld */; };
14
+ 8C2DEB90191D4101003A1F44 /* NSObject+abc.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C2DEB8F191D4101003A1F44 /* NSObject+abc.m */; };
15
+ 8C2DEB94191D4167003A1F44 /* Wowwww.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C2DEB93191D4167003A1F44 /* Wowwww.m */; };
16
+ 8C2DEB94191D4167003A1F4B /* Wowwww.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C2DEB93191D4167003A1F4B /* Wowwww.m */; };
17
+ 8C848C4C190DB9B300E9727B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C848C4B190DB9B300E9727B /* Foundation.framework */; };
18
+ 8C848C51190DB9B300E9727B /* dummy.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8C848C50190DB9B300E9727B /* dummy.h */; };
19
+ 8C848C53190DB9B300E9727B /* dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C848C52190DB9B300E9727B /* dummy.m */; };
20
+ 8C848C5A190DB9B300E9727B /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C848C59190DB9B300E9727B /* XCTest.framework */; };
21
+ 8C848C5B190DB9B300E9727B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C848C4B190DB9B300E9727B /* Foundation.framework */; };
22
+ 8C848C5D190DB9B300E9727B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C848C5C190DB9B300E9727B /* UIKit.framework */; };
23
+ 8C848C60190DB9B300E9727B /* libdummy.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C848C48190DB9B300E9727B /* libdummy.a */; };
24
+ 8C848C66190DB9B300E9727B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8C848C64190DB9B300E9727B /* InfoPlist.strings */; };
25
+ 8C848C68190DB9B300E9727B /* dummyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C848C67190DB9B300E9727B /* dummyTests.m */; };
26
+ /* End PBXBuildFile section */
27
+
28
+ /* Begin PBXContainerItemProxy section */
29
+ 8C848C5E190DB9B300E9727B /* PBXContainerItemProxy */ = {
30
+ isa = PBXContainerItemProxy;
31
+ containerPortal = 8C848C40190DB9B300E9727B /* Project object */;
32
+ proxyType = 1;
33
+ remoteGlobalIDString = 8C848C47190DB9B300E9727B;
34
+ remoteInfo = dummy;
35
+ };
36
+ /* End PBXContainerItemProxy section */
37
+
38
+ /* Begin PBXCopyFilesBuildPhase section */
39
+ 8C848C46190DB9B300E9727B /* CopyFiles */ = {
40
+ isa = PBXCopyFilesBuildPhase;
41
+ buildActionMask = 2147483647;
42
+ dstPath = "include/$(PRODUCT_NAME)";
43
+ dstSubfolderSpec = 16;
44
+ files = (
45
+ 8C848C51190DB9B300E9727B /* dummy.h in CopyFiles */,
46
+ );
47
+ runOnlyForDeploymentPostprocessing = 0;
48
+ };
49
+ /* End PBXCopyFilesBuildPhase section */
50
+
51
+ /* Begin PBXFileReference section */
52
+ 8C2DEB7D191D3F5C003A1F44 /* ManyFiles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ManyFiles.h; sourceTree = "<group>"; };
53
+ 8C2DEB7E191D3F5C003A1F44 /* ManyFiles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ManyFiles.m; sourceTree = "<group>"; };
54
+ 8C2DEB80191D3F68003A1F44 /* Wow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Wow.h; sourceTree = "<group>"; };
55
+ 8C2DEB81191D3F68003A1F44 /* Wow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Wow.m; sourceTree = "<group>"; };
56
+ 8C2DEB85191D404A003A1F44 /* Woot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Woot.h; sourceTree = "<group>"; };
57
+ 8C2DEB86191D404A003A1F44 /* Woot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Woot.m; sourceTree = "<group>"; };
58
+ 8C2DEB89191D4068003A1F44 /* Core Data.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Core Data.xcdatamodel"; sourceTree = "<group>"; };
59
+ 8C2DEB8B191D4087003A1F44 /* Core Data 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Core Data 2.xcdatamodel"; sourceTree = "<group>"; };
60
+ 8C2DEB8C191D408D003A1F44 /* Core Data 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Core Data 3.xcdatamodel"; sourceTree = "<group>"; };
61
+ 8C2DEB8D191D4092003A1F44 /* Core Data 4.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Core Data 4.xcdatamodel"; sourceTree = "<group>"; };
62
+ 8C2DEB8E191D4101003A1F44 /* NSObject+abc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSObject+abc.h"; path = "FolderNotInXcodeProj/NSObject+abc.h"; sourceTree = "<group>"; };
63
+ 8C2DEB8F191D4101003A1F44 /* NSObject+abc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSObject+abc.m"; path = "FolderNotInXcodeProj/NSObject+abc.m"; sourceTree = "<group>"; };
64
+ 8C2DEB92191D4167003A1F44 /* Wowwww.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Wowwww.h; path = dummy/AlreadySynced/FolderNotInXcodeProj/Wowwww.h; sourceTree = SOURCE_ROOT; };
65
+ 8C2DEB93191D4167003A1F44 /* Wowwww.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Wowwww.m; path = dummy/AlreadySynced/FolderNotInXcodeProj/Wowwww.m; sourceTree = SOURCE_ROOT; };
66
+ 8C2DEB93191D4167003A1F4B /* Wowwww.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Wowwww.m; path = dummy/AlreadySynced/FolderNotInXcodeProj/Wowwww.m; sourceTree = SOURCE_ROOT; };
67
+ 8C848C48190DB9B300E9727B /* libdummy.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libdummy.a; sourceTree = BUILT_PRODUCTS_DIR; };
68
+ 8C848C4B190DB9B300E9727B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
69
+ 8C848C4F190DB9B300E9727B /* dummy-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "dummy-Prefix.pch"; sourceTree = "<group>"; };
70
+ 8C848C50190DB9B300E9727B /* dummy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dummy.h; sourceTree = "<group>"; };
71
+ 8C848C52190DB9B300E9727B /* dummy.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = dummy.m; sourceTree = "<group>"; };
72
+ 8C848C58190DB9B300E9727B /* dummyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = dummyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
73
+ 8C848C59190DB9B300E9727B /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
74
+ 8C848C5C190DB9B300E9727B /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
75
+ 8C848C63190DB9B300E9727B /* dummyTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "dummyTests-Info.plist"; sourceTree = "<group>"; };
76
+ 8C848C65190DB9B300E9727B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
77
+ 8C848C67190DB9B300E9727B /* dummyTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = dummyTests.m; sourceTree = "<group>"; };
78
+ 8CADDD3A19354F120076033B /* image.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = image.png; sourceTree = "<group>"; };
79
+ 8CE2DA1D19220F7B00D06F5E /* dummyTests-prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "dummyTests-prefix.pch"; sourceTree = "<group>"; };
80
+ /* End PBXFileReference section */
81
+
82
+ /* Begin PBXFrameworksBuildPhase section */
83
+ 8C848C45190DB9B300E9727B /* Frameworks */ = {
84
+ isa = PBXFrameworksBuildPhase;
85
+ buildActionMask = 2147483647;
86
+ files = (
87
+ 8C848C4C190DB9B300E9727B /* Foundation.framework in Frameworks */,
88
+ );
89
+ runOnlyForDeploymentPostprocessing = 0;
90
+ };
91
+ 8C848C55190DB9B300E9727B /* Frameworks */ = {
92
+ isa = PBXFrameworksBuildPhase;
93
+ buildActionMask = 2147483647;
94
+ files = (
95
+ 8C848C60190DB9B300E9727B /* libdummy.a in Frameworks */,
96
+ 8C848C5A190DB9B300E9727B /* XCTest.framework in Frameworks */,
97
+ 8C848C5D190DB9B300E9727B /* UIKit.framework in Frameworks */,
98
+ 8C848C5B190DB9B300E9727B /* Foundation.framework in Frameworks */,
99
+ );
100
+ runOnlyForDeploymentPostprocessing = 0;
101
+ };
102
+ /* End PBXFrameworksBuildPhase section */
103
+
104
+ /* Begin PBXGroup section */
105
+ 8C2DEB7C191D3F16003A1F44 /* SuchGroup */ = {
106
+ isa = PBXGroup;
107
+ children = (
108
+ 8C2DEB91191D4137003A1F44 /* VeryChildGroup */,
109
+ 8C2DEB7D191D3F5C003A1F44 /* ManyFiles.h */,
110
+ 8C2DEB7E191D3F5C003A1F44 /* ManyFiles.m */,
111
+ 8C2DEB80191D3F68003A1F44 /* Wow.h */,
112
+ 8C2DEB81191D3F68003A1F44 /* Wow.m */,
113
+ );
114
+ name = SuchGroup;
115
+ sourceTree = "<group>";
116
+ };
117
+ 8C2DEB83191D3F9E003A1F44 /* GroupThatDoubleReferencesFile */ = {
118
+ isa = PBXGroup;
119
+ children = (
120
+ 8C2DEB7D191D3F5C003A1F44 /* ManyFiles.h */,
121
+ 8C2DEB7E191D3F5C003A1F44 /* ManyFiles.m */,
122
+ );
123
+ name = GroupThatDoubleReferencesFile;
124
+ sourceTree = "<group>";
125
+ };
126
+ 8C2DEB84191D402E003A1F44 /* AlreadySynced */ = {
127
+ isa = PBXGroup;
128
+ children = (
129
+ 8C2DEB85191D404A003A1F44 /* Woot.h */,
130
+ 8C2DEB86191D404A003A1F44 /* Woot.m */,
131
+ 8C2DEB88191D4068003A1F44 /* Core Data.xcdatamodeld */,
132
+ 8C2DEB8E191D4101003A1F44 /* NSObject+abc.h */,
133
+ 8C2DEB8F191D4101003A1F44 /* NSObject+abc.m */,
134
+ );
135
+ path = AlreadySynced;
136
+ sourceTree = "<group>";
137
+ };
138
+ 8C2DEB91191D4137003A1F44 /* VeryChildGroup */ = {
139
+ isa = PBXGroup;
140
+ children = (
141
+ 8C2DEB92191D4167003A1F44 /* Wowwww.h */,
142
+ 8C2DEB93191D4167003A1F44 /* Wowwww.m */,
143
+ 8C2DEB93191D4167003A1F4B /* Wowwww.m */,
144
+ );
145
+ path = VeryChildGroup;
146
+ sourceTree = "<group>";
147
+ };
148
+ 8C848C3F190DB9B300E9727B = {
149
+ isa = PBXGroup;
150
+ children = (
151
+ 8C848C4D190DB9B300E9727B /* dummy */,
152
+ 8C848C61190DB9B300E9727B /* dummyTests */,
153
+ 8C848C4A190DB9B300E9727B /* Frameworks */,
154
+ 8C848C49190DB9B300E9727B /* Products */,
155
+ );
156
+ sourceTree = "<group>";
157
+ };
158
+ 8C848C49190DB9B300E9727B /* Products */ = {
159
+ isa = PBXGroup;
160
+ children = (
161
+ 8C848C48190DB9B300E9727B /* libdummy.a */,
162
+ 8C848C58190DB9B300E9727B /* dummyTests.xctest */,
163
+ );
164
+ name = Products;
165
+ sourceTree = "<group>";
166
+ };
167
+ 8C848C4A190DB9B300E9727B /* Frameworks */ = {
168
+ isa = PBXGroup;
169
+ children = (
170
+ 8C848C4B190DB9B300E9727B /* Foundation.framework */,
171
+ 8C848C59190DB9B300E9727B /* XCTest.framework */,
172
+ 8C848C5C190DB9B300E9727B /* UIKit.framework */,
173
+ );
174
+ name = Frameworks;
175
+ sourceTree = "<group>";
176
+ };
177
+ 8C848C4D190DB9B300E9727B /* dummy */ = {
178
+ isa = PBXGroup;
179
+ children = (
180
+ 8CADDD3919354F060076033B /* Resources */,
181
+ 8C2DEB84191D402E003A1F44 /* AlreadySynced */,
182
+ 8C2DEB83191D3F9E003A1F44 /* GroupThatDoubleReferencesFile */,
183
+ 8C2DEB7C191D3F16003A1F44 /* SuchGroup */,
184
+ 8C848C50190DB9B300E9727B /* dummy.h */,
185
+ 8C848C52190DB9B300E9727B /* dummy.m */,
186
+ 8C848C4E190DB9B300E9727B /* Supporting Files */,
187
+ );
188
+ path = dummy;
189
+ sourceTree = "<group>";
190
+ };
191
+ 8C848C4E190DB9B300E9727B /* Supporting Files */ = {
192
+ isa = PBXGroup;
193
+ children = (
194
+ 8C848C4F190DB9B300E9727B /* dummy-Prefix.pch */,
195
+ );
196
+ name = "Supporting Files";
197
+ sourceTree = "<group>";
198
+ };
199
+ 8C848C61190DB9B300E9727B /* dummyTests */ = {
200
+ isa = PBXGroup;
201
+ children = (
202
+ 8CADDD36193515B70076033B /* Other Files */,
203
+ 8C848C67190DB9B300E9727B /* dummyTests.m */,
204
+ 8C848C62190DB9B300E9727B /* Supporting Files */,
205
+ );
206
+ path = dummyTests;
207
+ sourceTree = "<group>";
208
+ };
209
+ 8C848C62190DB9B300E9727B /* Supporting Files */ = {
210
+ isa = PBXGroup;
211
+ children = (
212
+ 8C848C63190DB9B300E9727B /* dummyTests-Info.plist */,
213
+ 8C848C64190DB9B300E9727B /* InfoPlist.strings */,
214
+ 8CE2DA1D19220F7B00D06F5E /* dummyTests-prefix.pch */,
215
+ );
216
+ name = "Supporting Files";
217
+ sourceTree = "<group>";
218
+ };
219
+ 8CADDD36193515B70076033B /* Other Files */ = {
220
+ isa = PBXGroup;
221
+ children = (
222
+ 8C848C64190DB9B300E9727B /* InfoPlist.strings */,
223
+ );
224
+ name = "Other Files";
225
+ sourceTree = "<group>";
226
+ };
227
+ 8CADDD3919354F060076033B /* Resources */ = {
228
+ isa = PBXGroup;
229
+ children = (
230
+ 8CADDD3A19354F120076033B /* image.png */,
231
+ );
232
+ name = Resources;
233
+ sourceTree = "<group>";
234
+ };
235
+ /* End PBXGroup section */
236
+
237
+ /* Begin PBXNativeTarget section */
238
+ 8C848C47190DB9B300E9727B /* dummy */ = {
239
+ isa = PBXNativeTarget;
240
+ buildConfigurationList = 8C848C6B190DB9B300E9727B /* Build configuration list for PBXNativeTarget "dummy" */;
241
+ buildPhases = (
242
+ 8C848C44190DB9B300E9727B /* Sources */,
243
+ 8C848C45190DB9B300E9727B /* Frameworks */,
244
+ 8C848C46190DB9B300E9727B /* CopyFiles */,
245
+ );
246
+ buildRules = (
247
+ );
248
+ dependencies = (
249
+ );
250
+ name = dummy;
251
+ productName = dummy;
252
+ productReference = 8C848C48190DB9B300E9727B /* libdummy.a */;
253
+ productType = "com.apple.product-type.library.static";
254
+ };
255
+ 8C848C57190DB9B300E9727B /* dummyTests */ = {
256
+ isa = PBXNativeTarget;
257
+ buildConfigurationList = 8C848C6E190DB9B300E9727B /* Build configuration list for PBXNativeTarget "dummyTests" */;
258
+ buildPhases = (
259
+ 8C848C54190DB9B300E9727B /* Sources */,
260
+ 8C848C55190DB9B300E9727B /* Frameworks */,
261
+ 8C848C56190DB9B300E9727B /* Resources */,
262
+ );
263
+ buildRules = (
264
+ );
265
+ dependencies = (
266
+ 8C848C5F190DB9B300E9727B /* PBXTargetDependency */,
267
+ );
268
+ name = dummyTests;
269
+ productName = dummyTests;
270
+ productReference = 8C848C58190DB9B300E9727B /* dummyTests.xctest */;
271
+ productType = "com.apple.product-type.bundle.unit-test";
272
+ };
273
+ /* End PBXNativeTarget section */
274
+
275
+ /* Begin PBXProject section */
276
+ 8C848C40190DB9B300E9727B /* Project object */ = {
277
+ isa = PBXProject;
278
+ attributes = {
279
+ LastUpgradeCheck = 0510;
280
+ ORGANIZATIONNAME = marklarr;
281
+ };
282
+ buildConfigurationList = 8C848C43190DB9B300E9727B /* Build configuration list for PBXProject "dummy" */;
283
+ compatibilityVersion = "Xcode 3.2";
284
+ developmentRegion = English;
285
+ hasScannedForEncodings = 0;
286
+ knownRegions = (
287
+ en,
288
+ );
289
+ mainGroup = 8C848C3F190DB9B300E9727B;
290
+ productRefGroup = 8C848C49190DB9B300E9727B /* Products */;
291
+ projectDirPath = "";
292
+ projectRoot = "";
293
+ targets = (
294
+ 8C848C47190DB9B300E9727B /* dummy */,
295
+ 8C848C57190DB9B300E9727B /* dummyTests */,
296
+ );
297
+ };
298
+ /* End PBXProject section */
299
+
300
+ /* Begin PBXResourcesBuildPhase section */
301
+ 8C848C56190DB9B300E9727B /* Resources */ = {
302
+ isa = PBXResourcesBuildPhase;
303
+ buildActionMask = 2147483647;
304
+ files = (
305
+ 8C848C66190DB9B300E9727B /* InfoPlist.strings in Resources */,
306
+ );
307
+ runOnlyForDeploymentPostprocessing = 0;
308
+ };
309
+ /* End PBXResourcesBuildPhase section */
310
+
311
+ /* Begin PBXSourcesBuildPhase section */
312
+ 8C848C44190DB9B300E9727B /* Sources */ = {
313
+ isa = PBXSourcesBuildPhase;
314
+ buildActionMask = 2147483647;
315
+ files = (
316
+ 8C2DEB82191D3F68003A1F44 /* Wow.m in Sources */,
317
+ 8C2DEB8A191D4068003A1F44 /* Core Data.xcdatamodeld in Sources */,
318
+ 8C2DEB90191D4101003A1F44 /* NSObject+abc.m in Sources */,
319
+ 8C2DEB7F191D3F5C003A1F44 /* ManyFiles.m in Sources */,
320
+ 8C2DEB87191D404A003A1F44 /* Woot.m in Sources */,
321
+ 8C2DEB94191D4167003A1F44 /* Wowwww.m in Sources */,
322
+ 8C2DEB94191D4167003A1F4B /* Wowwww.m in Sources */,
323
+ 8C848C53190DB9B300E9727B /* dummy.m in Sources */,
324
+ );
325
+ runOnlyForDeploymentPostprocessing = 0;
326
+ };
327
+ 8C848C54190DB9B300E9727B /* Sources */ = {
328
+ isa = PBXSourcesBuildPhase;
329
+ buildActionMask = 2147483647;
330
+ files = (
331
+ 8C848C68190DB9B300E9727B /* dummyTests.m in Sources */,
332
+ );
333
+ runOnlyForDeploymentPostprocessing = 0;
334
+ };
335
+ /* End PBXSourcesBuildPhase section */
336
+
337
+ /* Begin PBXTargetDependency section */
338
+ 8C848C5F190DB9B300E9727B /* PBXTargetDependency */ = {
339
+ isa = PBXTargetDependency;
340
+ target = 8C848C47190DB9B300E9727B /* dummy */;
341
+ targetProxy = 8C848C5E190DB9B300E9727B /* PBXContainerItemProxy */;
342
+ };
343
+ /* End PBXTargetDependency section */
344
+
345
+ /* Begin PBXVariantGroup section */
346
+ 8C848C64190DB9B300E9727B /* InfoPlist.strings */ = {
347
+ isa = PBXVariantGroup;
348
+ children = (
349
+ 8C848C65190DB9B300E9727B /* en */,
350
+ );
351
+ name = InfoPlist.strings;
352
+ sourceTree = "<group>";
353
+ };
354
+ /* End PBXVariantGroup section */
355
+
356
+ /* Begin XCBuildConfiguration section */
357
+ 8C848C69190DB9B300E9727B /* Debug */ = {
358
+ isa = XCBuildConfiguration;
359
+ buildSettings = {
360
+ ALWAYS_SEARCH_USER_PATHS = NO;
361
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
362
+ CLANG_CXX_LIBRARY = "libc++";
363
+ CLANG_ENABLE_MODULES = YES;
364
+ CLANG_ENABLE_OBJC_ARC = YES;
365
+ CLANG_WARN_BOOL_CONVERSION = YES;
366
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
367
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
368
+ CLANG_WARN_EMPTY_BODY = YES;
369
+ CLANG_WARN_ENUM_CONVERSION = YES;
370
+ CLANG_WARN_INT_CONVERSION = YES;
371
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
372
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
373
+ COPY_PHASE_STRIP = NO;
374
+ GCC_C_LANGUAGE_STANDARD = gnu99;
375
+ GCC_DYNAMIC_NO_PIC = NO;
376
+ GCC_OPTIMIZATION_LEVEL = 0;
377
+ GCC_PREPROCESSOR_DEFINITIONS = (
378
+ "DEBUG=1",
379
+ "$(inherited)",
380
+ );
381
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
382
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
383
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
384
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
385
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
386
+ GCC_WARN_UNUSED_FUNCTION = YES;
387
+ GCC_WARN_UNUSED_VARIABLE = YES;
388
+ IPHONEOS_DEPLOYMENT_TARGET = 7.1;
389
+ ONLY_ACTIVE_ARCH = YES;
390
+ SDKROOT = iphoneos;
391
+ };
392
+ name = Debug;
393
+ };
394
+ 8C848C6A190DB9B300E9727B /* Release */ = {
395
+ isa = XCBuildConfiguration;
396
+ buildSettings = {
397
+ ALWAYS_SEARCH_USER_PATHS = NO;
398
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
399
+ CLANG_CXX_LIBRARY = "libc++";
400
+ CLANG_ENABLE_MODULES = YES;
401
+ CLANG_ENABLE_OBJC_ARC = YES;
402
+ CLANG_WARN_BOOL_CONVERSION = YES;
403
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
404
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
405
+ CLANG_WARN_EMPTY_BODY = YES;
406
+ CLANG_WARN_ENUM_CONVERSION = YES;
407
+ CLANG_WARN_INT_CONVERSION = YES;
408
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
409
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
410
+ COPY_PHASE_STRIP = YES;
411
+ ENABLE_NS_ASSERTIONS = NO;
412
+ GCC_C_LANGUAGE_STANDARD = gnu99;
413
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
414
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
415
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
416
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
417
+ GCC_WARN_UNUSED_FUNCTION = YES;
418
+ GCC_WARN_UNUSED_VARIABLE = YES;
419
+ IPHONEOS_DEPLOYMENT_TARGET = 7.1;
420
+ SDKROOT = iphoneos;
421
+ VALIDATE_PRODUCT = YES;
422
+ };
423
+ name = Release;
424
+ };
425
+ 8C848C6C190DB9B300E9727B /* Debug */ = {
426
+ isa = XCBuildConfiguration;
427
+ buildSettings = {
428
+ DSTROOT = /tmp/dummy.dst;
429
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
430
+ GCC_PREFIX_HEADER = "dummy/dummy-Prefix.pch";
431
+ OTHER_LDFLAGS = "-ObjC";
432
+ PRODUCT_NAME = "$(TARGET_NAME)";
433
+ SKIP_INSTALL = YES;
434
+ };
435
+ name = Debug;
436
+ };
437
+ 8C848C6D190DB9B300E9727B /* Release */ = {
438
+ isa = XCBuildConfiguration;
439
+ buildSettings = {
440
+ DSTROOT = /tmp/dummy.dst;
441
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
442
+ GCC_PREFIX_HEADER = "dummy/dummy-Prefix.pch";
443
+ OTHER_LDFLAGS = "-ObjC";
444
+ PRODUCT_NAME = "$(TARGET_NAME)";
445
+ SKIP_INSTALL = YES;
446
+ };
447
+ name = Release;
448
+ };
449
+ 8C848C6F190DB9B300E9727B /* Debug */ = {
450
+ isa = XCBuildConfiguration;
451
+ buildSettings = {
452
+ FRAMEWORK_SEARCH_PATHS = (
453
+ "$(SDKROOT)/Developer/Library/Frameworks",
454
+ "$(inherited)",
455
+ "$(DEVELOPER_FRAMEWORKS_DIR)",
456
+ );
457
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
458
+ GCC_PREFIX_HEADER = "dummyTests/Supporting Files/dummyTests-Prefix.pch";
459
+ GCC_PREPROCESSOR_DEFINITIONS = (
460
+ "DEBUG=1",
461
+ "$(inherited)",
462
+ );
463
+ INFOPLIST_FILE = "dummyTests/dummyTests-Info.plist";
464
+ PRODUCT_NAME = "$(TARGET_NAME)";
465
+ WRAPPER_EXTENSION = xctest;
466
+ };
467
+ name = Debug;
468
+ };
469
+ 8C848C70190DB9B300E9727B /* Release */ = {
470
+ isa = XCBuildConfiguration;
471
+ buildSettings = {
472
+ FRAMEWORK_SEARCH_PATHS = (
473
+ "$(SDKROOT)/Developer/Library/Frameworks",
474
+ "$(inherited)",
475
+ "$(DEVELOPER_FRAMEWORKS_DIR)",
476
+ );
477
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
478
+ GCC_PREFIX_HEADER = "dummyTests/Supporting Files/dummyTests-Prefix.pch";
479
+ INFOPLIST_FILE = "dummyTests/dummyTests-Info.plist";
480
+ PRODUCT_NAME = "$(TARGET_NAME)";
481
+ WRAPPER_EXTENSION = xctest;
482
+ };
483
+ name = Release;
484
+ };
485
+ /* End XCBuildConfiguration section */
486
+
487
+ /* Begin XCConfigurationList section */
488
+ 8C848C43190DB9B300E9727B /* Build configuration list for PBXProject "dummy" */ = {
489
+ isa = XCConfigurationList;
490
+ buildConfigurations = (
491
+ 8C848C69190DB9B300E9727B /* Debug */,
492
+ 8C848C6A190DB9B300E9727B /* Release */,
493
+ );
494
+ defaultConfigurationIsVisible = 0;
495
+ defaultConfigurationName = Release;
496
+ };
497
+ 8C848C6B190DB9B300E9727B /* Build configuration list for PBXNativeTarget "dummy" */ = {
498
+ isa = XCConfigurationList;
499
+ buildConfigurations = (
500
+ 8C848C6C190DB9B300E9727B /* Debug */,
501
+ 8C848C6D190DB9B300E9727B /* Release */,
502
+ );
503
+ defaultConfigurationIsVisible = 0;
504
+ defaultConfigurationName = Release;
505
+ };
506
+ 8C848C6E190DB9B300E9727B /* Build configuration list for PBXNativeTarget "dummyTests" */ = {
507
+ isa = XCConfigurationList;
508
+ buildConfigurations = (
509
+ 8C848C6F190DB9B300E9727B /* Debug */,
510
+ 8C848C70190DB9B300E9727B /* Release */,
511
+ );
512
+ defaultConfigurationIsVisible = 0;
513
+ defaultConfigurationName = Release;
514
+ };
515
+ /* End XCConfigurationList section */
516
+
517
+ /* Begin XCVersionGroup section */
518
+ 8C2DEB88191D4068003A1F44 /* Core Data.xcdatamodeld */ = {
519
+ isa = XCVersionGroup;
520
+ children = (
521
+ 8C2DEB8B191D4087003A1F44 /* Core Data 2.xcdatamodel */,
522
+ 8C2DEB8C191D408D003A1F44 /* Core Data 3.xcdatamodel */,
523
+ 8C2DEB8D191D4092003A1F44 /* Core Data 4.xcdatamodel */,
524
+ 8C2DEB89191D4068003A1F44 /* Core Data.xcdatamodel */,
525
+ );
526
+ currentVersion = 8C2DEB8C191D408D003A1F44 /* Core Data 3.xcdatamodel */;
527
+ path = "Core Data.xcdatamodeld";
528
+ sourceTree = "<group>";
529
+ versionGroupType = wrapper.xcdatamodel;
530
+ };
531
+ /* End XCVersionGroup section */
532
+ };
533
+ rootObject = 8C848C40190DB9B300E9727B /* Project object */;
534
+ }