synx 0.0.2

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