Skip to content

Commit 15261df

Browse files
author
Jeff Verkoeyen
committed
Catalog by convention.
Summary: Typically speaking, a structured catalog app will show a list of components and allow the user to drill down to a list of examples for each component. Such an app might be built with a UITableView or UICollectionView, such that the following process is followed to add a new example: 1. Create the new view controller. 2. Add a new entry in the respective component's "examples" list. 3. Upon tapping the entry, create an instance of the view controller and push/present it. ## Convention over configuration In the interest of encouraging the creation of more examples, I'd like to pursue a solution that *minimizes the number of steps required to create new examples*. The ideal outcome of this task: adding a new example to our 'catalog' is a single step: 1. Create a view controller driving your demo. Notable constraints to satisfy: - Zero code written outside of the context of the demo view controller by the demo writer. Someone adding a new example should not have to make any changes to the Catalog's structure. This diff solves the above with approximately 150 lines of code. ## What's going on in this change? Deleting the Ink example project. In this new "by convention" approach we simply have to add a ViewController.h/m into the component's `examples/` directory. When `pod install` is ran on the catalog, CocoaPods will detect these files and add them to the build. Introducing the new `catalog/` directory. This is where the code for the new convention-based catalog app lives. The MDCCatalog app includes an AppDelegate and a NodeViewController. The AppDelegate enumerates the runtime for classes that respond to the `catalogHierarchy` method and then creates a UINavigationController pointing at the root node of the catalog hierarchy. NodeViewController simply represents the children of a node and allows the user to tap a child row to move deeper in the tree. There are a few methods in the "Runtime" for both Objective-C and Swift. These are the workhorses for enumerating the classes at runtime. Reviewers: #material_components_ios_owners, randallli Reviewed By: #material_components_ios_owners, randallli Projects: #material_components_ios Differential Revision: http://codereview.cc/D119
1 parent 15cae3d commit 15261df

File tree

20 files changed

+679
-533
lines changed

20 files changed

+679
-533
lines changed
Lines changed: 392 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,392 @@
1+
// !$*UTF8*$!
2+
{
3+
archiveVersion = 1;
4+
classes = {
5+
};
6+
objectVersion = 46;
7+
objects = {
8+
9+
/* Begin PBXBuildFile section */
10+
1B1C4FE9038CB4225BDB8633 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A2985B007C0718CB5E2511B3 /* libPods.a */; };
11+
664524B71C6BA62A001ADBF8 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 664524B61C6BA62A001ADBF8 /* AppDelegate.swift */; };
12+
664524B91C6BA62A001ADBF8 /* NodeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 664524B81C6BA62A001ADBF8 /* NodeViewController.swift */; };
13+
664524BE1C6BA62A001ADBF8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 664524BD1C6BA62A001ADBF8 /* Assets.xcassets */; };
14+
664524C11C6BA62A001ADBF8 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 664524BF1C6BA62A001ADBF8 /* LaunchScreen.storyboard */; };
15+
665A34DC1C6BD01900962055 /* Reflection.m in Sources */ = {isa = PBXBuildFile; fileRef = 665A34DB1C6BD01900962055 /* Reflection.m */; };
16+
665A34E01C6BDB4600962055 /* Runtime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 665A34DF1C6BDB4600962055 /* Runtime.swift */; };
17+
/* End PBXBuildFile section */
18+
19+
/* Begin PBXFileReference section */
20+
12970BE3EA0028A12E1427AD /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = "<group>"; };
21+
664524B31C6BA62A001ADBF8 /* MDCCatalog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MDCCatalog.app; sourceTree = BUILT_PRODUCTS_DIR; };
22+
664524B61C6BA62A001ADBF8 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
23+
664524B81C6BA62A001ADBF8 /* NodeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeViewController.swift; sourceTree = "<group>"; };
24+
664524BD1C6BA62A001ADBF8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
25+
664524C01C6BA62A001ADBF8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
26+
664524C21C6BA62A001ADBF8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
27+
665A34D91C6BD01900962055 /* MDCCatalog-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MDCCatalog-Bridging-Header.h"; sourceTree = "<group>"; };
28+
665A34DA1C6BD01900962055 /* Reflection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reflection.h; sourceTree = "<group>"; };
29+
665A34DB1C6BD01900962055 /* Reflection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Reflection.m; sourceTree = "<group>"; };
30+
665A34DF1C6BDB4600962055 /* Runtime.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Runtime.swift; sourceTree = "<group>"; };
31+
A2985B007C0718CB5E2511B3 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; };
32+
DEFF1C057348FFB1866CD023 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = "<group>"; };
33+
/* End PBXFileReference section */
34+
35+
/* Begin PBXFrameworksBuildPhase section */
36+
664524B01C6BA62A001ADBF8 /* Frameworks */ = {
37+
isa = PBXFrameworksBuildPhase;
38+
buildActionMask = 2147483647;
39+
files = (
40+
1B1C4FE9038CB4225BDB8633 /* libPods.a in Frameworks */,
41+
);
42+
runOnlyForDeploymentPostprocessing = 0;
43+
};
44+
/* End PBXFrameworksBuildPhase section */
45+
46+
/* Begin PBXGroup section */
47+
664524AA1C6BA62A001ADBF8 = {
48+
isa = PBXGroup;
49+
children = (
50+
664524B51C6BA62A001ADBF8 /* MDCCatalog */,
51+
664524B41C6BA62A001ADBF8 /* Products */,
52+
A65F8103997AAC196ACA7AFD /* Pods */,
53+
EFED36ECE9B28D2E7995FF4F /* Frameworks */,
54+
);
55+
sourceTree = "<group>";
56+
};
57+
664524B41C6BA62A001ADBF8 /* Products */ = {
58+
isa = PBXGroup;
59+
children = (
60+
664524B31C6BA62A001ADBF8 /* MDCCatalog.app */,
61+
);
62+
name = Products;
63+
sourceTree = "<group>";
64+
};
65+
664524B51C6BA62A001ADBF8 /* MDCCatalog */ = {
66+
isa = PBXGroup;
67+
children = (
68+
665A34D91C6BD01900962055 /* MDCCatalog-Bridging-Header.h */,
69+
664524B61C6BA62A001ADBF8 /* AppDelegate.swift */,
70+
664524B81C6BA62A001ADBF8 /* NodeViewController.swift */,
71+
665A34DD1C6BDADA00962055 /* Reflection */,
72+
665A34DE1C6BDAE700962055 /* Resources */,
73+
);
74+
path = MDCCatalog;
75+
sourceTree = "<group>";
76+
};
77+
665A34DD1C6BDADA00962055 /* Reflection */ = {
78+
isa = PBXGroup;
79+
children = (
80+
665A34DA1C6BD01900962055 /* Reflection.h */,
81+
665A34DB1C6BD01900962055 /* Reflection.m */,
82+
665A34DF1C6BDB4600962055 /* Runtime.swift */,
83+
);
84+
name = Reflection;
85+
sourceTree = "<group>";
86+
};
87+
665A34DE1C6BDAE700962055 /* Resources */ = {
88+
isa = PBXGroup;
89+
children = (
90+
664524BD1C6BA62A001ADBF8 /* Assets.xcassets */,
91+
664524BF1C6BA62A001ADBF8 /* LaunchScreen.storyboard */,
92+
664524C21C6BA62A001ADBF8 /* Info.plist */,
93+
);
94+
name = Resources;
95+
sourceTree = "<group>";
96+
};
97+
A65F8103997AAC196ACA7AFD /* Pods */ = {
98+
isa = PBXGroup;
99+
children = (
100+
DEFF1C057348FFB1866CD023 /* Pods.debug.xcconfig */,
101+
12970BE3EA0028A12E1427AD /* Pods.release.xcconfig */,
102+
);
103+
name = Pods;
104+
sourceTree = "<group>";
105+
};
106+
EFED36ECE9B28D2E7995FF4F /* Frameworks */ = {
107+
isa = PBXGroup;
108+
children = (
109+
A2985B007C0718CB5E2511B3 /* libPods.a */,
110+
);
111+
name = Frameworks;
112+
sourceTree = "<group>";
113+
};
114+
/* End PBXGroup section */
115+
116+
/* Begin PBXNativeTarget section */
117+
664524B21C6BA62A001ADBF8 /* MDCCatalog */ = {
118+
isa = PBXNativeTarget;
119+
buildConfigurationList = 664524C51C6BA62A001ADBF8 /* Build configuration list for PBXNativeTarget "MDCCatalog" */;
120+
buildPhases = (
121+
5ECE2D8B404C7597963350BB /* Check Pods Manifest.lock */,
122+
664524AF1C6BA62A001ADBF8 /* Sources */,
123+
664524B01C6BA62A001ADBF8 /* Frameworks */,
124+
664524B11C6BA62A001ADBF8 /* Resources */,
125+
10DB0CE89E465602E6BEDF5D /* Embed Pods Frameworks */,
126+
C51626515691FA77F3EA847C /* Copy Pods Resources */,
127+
);
128+
buildRules = (
129+
);
130+
dependencies = (
131+
);
132+
name = MDCCatalog;
133+
productName = MDCCatalog;
134+
productReference = 664524B31C6BA62A001ADBF8 /* MDCCatalog.app */;
135+
productType = "com.apple.product-type.application";
136+
};
137+
/* End PBXNativeTarget section */
138+
139+
/* Begin PBXProject section */
140+
664524AB1C6BA62A001ADBF8 /* Project object */ = {
141+
isa = PBXProject;
142+
attributes = {
143+
LastSwiftUpdateCheck = 0730;
144+
LastUpgradeCheck = 0730;
145+
ORGANIZATIONNAME = Google;
146+
TargetAttributes = {
147+
664524B21C6BA62A001ADBF8 = {
148+
CreatedOnToolsVersion = 7.3;
149+
};
150+
};
151+
};
152+
buildConfigurationList = 664524AE1C6BA62A001ADBF8 /* Build configuration list for PBXProject "MDCCatalog" */;
153+
compatibilityVersion = "Xcode 3.2";
154+
developmentRegion = English;
155+
hasScannedForEncodings = 0;
156+
knownRegions = (
157+
en,
158+
Base,
159+
);
160+
mainGroup = 664524AA1C6BA62A001ADBF8;
161+
productRefGroup = 664524B41C6BA62A001ADBF8 /* Products */;
162+
projectDirPath = "";
163+
projectRoot = "";
164+
targets = (
165+
664524B21C6BA62A001ADBF8 /* MDCCatalog */,
166+
);
167+
};
168+
/* End PBXProject section */
169+
170+
/* Begin PBXResourcesBuildPhase section */
171+
664524B11C6BA62A001ADBF8 /* Resources */ = {
172+
isa = PBXResourcesBuildPhase;
173+
buildActionMask = 2147483647;
174+
files = (
175+
664524C11C6BA62A001ADBF8 /* LaunchScreen.storyboard in Resources */,
176+
664524BE1C6BA62A001ADBF8 /* Assets.xcassets in Resources */,
177+
);
178+
runOnlyForDeploymentPostprocessing = 0;
179+
};
180+
/* End PBXResourcesBuildPhase section */
181+
182+
/* Begin PBXShellScriptBuildPhase section */
183+
10DB0CE89E465602E6BEDF5D /* Embed Pods Frameworks */ = {
184+
isa = PBXShellScriptBuildPhase;
185+
buildActionMask = 2147483647;
186+
files = (
187+
);
188+
inputPaths = (
189+
);
190+
name = "Embed Pods Frameworks";
191+
outputPaths = (
192+
);
193+
runOnlyForDeploymentPostprocessing = 0;
194+
shellPath = /bin/sh;
195+
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-frameworks.sh\"\n";
196+
showEnvVarsInLog = 0;
197+
};
198+
5ECE2D8B404C7597963350BB /* Check Pods Manifest.lock */ = {
199+
isa = PBXShellScriptBuildPhase;
200+
buildActionMask = 2147483647;
201+
files = (
202+
);
203+
inputPaths = (
204+
);
205+
name = "Check Pods Manifest.lock";
206+
outputPaths = (
207+
);
208+
runOnlyForDeploymentPostprocessing = 0;
209+
shellPath = /bin/sh;
210+
shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n";
211+
showEnvVarsInLog = 0;
212+
};
213+
C51626515691FA77F3EA847C /* Copy Pods Resources */ = {
214+
isa = PBXShellScriptBuildPhase;
215+
buildActionMask = 2147483647;
216+
files = (
217+
);
218+
inputPaths = (
219+
);
220+
name = "Copy Pods Resources";
221+
outputPaths = (
222+
);
223+
runOnlyForDeploymentPostprocessing = 0;
224+
shellPath = /bin/sh;
225+
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n";
226+
showEnvVarsInLog = 0;
227+
};
228+
/* End PBXShellScriptBuildPhase section */
229+
230+
/* Begin PBXSourcesBuildPhase section */
231+
664524AF1C6BA62A001ADBF8 /* Sources */ = {
232+
isa = PBXSourcesBuildPhase;
233+
buildActionMask = 2147483647;
234+
files = (
235+
665A34E01C6BDB4600962055 /* Runtime.swift in Sources */,
236+
665A34DC1C6BD01900962055 /* Reflection.m in Sources */,
237+
664524B91C6BA62A001ADBF8 /* NodeViewController.swift in Sources */,
238+
664524B71C6BA62A001ADBF8 /* AppDelegate.swift in Sources */,
239+
);
240+
runOnlyForDeploymentPostprocessing = 0;
241+
};
242+
/* End PBXSourcesBuildPhase section */
243+
244+
/* Begin PBXVariantGroup section */
245+
664524BF1C6BA62A001ADBF8 /* LaunchScreen.storyboard */ = {
246+
isa = PBXVariantGroup;
247+
children = (
248+
664524C01C6BA62A001ADBF8 /* Base */,
249+
);
250+
name = LaunchScreen.storyboard;
251+
sourceTree = "<group>";
252+
};
253+
/* End PBXVariantGroup section */
254+
255+
/* Begin XCBuildConfiguration section */
256+
664524C31C6BA62A001ADBF8 /* Debug */ = {
257+
isa = XCBuildConfiguration;
258+
buildSettings = {
259+
ALWAYS_SEARCH_USER_PATHS = NO;
260+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
261+
CLANG_CXX_LIBRARY = "libc++";
262+
CLANG_ENABLE_MODULES = YES;
263+
CLANG_ENABLE_OBJC_ARC = YES;
264+
CLANG_WARN_BOOL_CONVERSION = YES;
265+
CLANG_WARN_CONSTANT_CONVERSION = YES;
266+
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
267+
CLANG_WARN_EMPTY_BODY = YES;
268+
CLANG_WARN_ENUM_CONVERSION = YES;
269+
CLANG_WARN_INT_CONVERSION = YES;
270+
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
271+
CLANG_WARN_UNREACHABLE_CODE = YES;
272+
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
273+
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
274+
COPY_PHASE_STRIP = NO;
275+
DEBUG_INFORMATION_FORMAT = dwarf;
276+
ENABLE_STRICT_OBJC_MSGSEND = YES;
277+
ENABLE_TESTABILITY = YES;
278+
GCC_C_LANGUAGE_STANDARD = gnu99;
279+
GCC_DYNAMIC_NO_PIC = NO;
280+
GCC_NO_COMMON_BLOCKS = YES;
281+
GCC_OPTIMIZATION_LEVEL = 0;
282+
GCC_PREPROCESSOR_DEFINITIONS = (
283+
"DEBUG=1",
284+
"$(inherited)",
285+
);
286+
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
287+
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
288+
GCC_WARN_UNDECLARED_SELECTOR = YES;
289+
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
290+
GCC_WARN_UNUSED_FUNCTION = YES;
291+
GCC_WARN_UNUSED_VARIABLE = YES;
292+
IPHONEOS_DEPLOYMENT_TARGET = 9.3;
293+
MTL_ENABLE_DEBUG_INFO = YES;
294+
ONLY_ACTIVE_ARCH = YES;
295+
SDKROOT = iphoneos;
296+
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
297+
TARGETED_DEVICE_FAMILY = "1,2";
298+
};
299+
name = Debug;
300+
};
301+
664524C41C6BA62A001ADBF8 /* Release */ = {
302+
isa = XCBuildConfiguration;
303+
buildSettings = {
304+
ALWAYS_SEARCH_USER_PATHS = NO;
305+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
306+
CLANG_CXX_LIBRARY = "libc++";
307+
CLANG_ENABLE_MODULES = YES;
308+
CLANG_ENABLE_OBJC_ARC = YES;
309+
CLANG_WARN_BOOL_CONVERSION = YES;
310+
CLANG_WARN_CONSTANT_CONVERSION = YES;
311+
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
312+
CLANG_WARN_EMPTY_BODY = YES;
313+
CLANG_WARN_ENUM_CONVERSION = YES;
314+
CLANG_WARN_INT_CONVERSION = YES;
315+
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
316+
CLANG_WARN_UNREACHABLE_CODE = YES;
317+
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
318+
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
319+
COPY_PHASE_STRIP = NO;
320+
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
321+
ENABLE_NS_ASSERTIONS = NO;
322+
ENABLE_STRICT_OBJC_MSGSEND = YES;
323+
GCC_C_LANGUAGE_STANDARD = gnu99;
324+
GCC_NO_COMMON_BLOCKS = YES;
325+
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
326+
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
327+
GCC_WARN_UNDECLARED_SELECTOR = YES;
328+
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
329+
GCC_WARN_UNUSED_FUNCTION = YES;
330+
GCC_WARN_UNUSED_VARIABLE = YES;
331+
IPHONEOS_DEPLOYMENT_TARGET = 9.3;
332+
MTL_ENABLE_DEBUG_INFO = NO;
333+
SDKROOT = iphoneos;
334+
TARGETED_DEVICE_FAMILY = "1,2";
335+
VALIDATE_PRODUCT = YES;
336+
};
337+
name = Release;
338+
};
339+
664524C61C6BA62A001ADBF8 /* Debug */ = {
340+
isa = XCBuildConfiguration;
341+
baseConfigurationReference = DEFF1C057348FFB1866CD023 /* Pods.debug.xcconfig */;
342+
buildSettings = {
343+
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
344+
CLANG_ENABLE_MODULES = YES;
345+
INFOPLIST_FILE = MDCCatalog/Info.plist;
346+
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
347+
PRODUCT_BUNDLE_IDENTIFIER = com.google.MDCCatalog;
348+
PRODUCT_NAME = "$(TARGET_NAME)";
349+
SWIFT_OBJC_BRIDGING_HEADER = "MDCCatalog/MDCCatalog-Bridging-Header.h";
350+
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
351+
};
352+
name = Debug;
353+
};
354+
664524C71C6BA62A001ADBF8 /* Release */ = {
355+
isa = XCBuildConfiguration;
356+
baseConfigurationReference = 12970BE3EA0028A12E1427AD /* Pods.release.xcconfig */;
357+
buildSettings = {
358+
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
359+
CLANG_ENABLE_MODULES = YES;
360+
INFOPLIST_FILE = MDCCatalog/Info.plist;
361+
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
362+
PRODUCT_BUNDLE_IDENTIFIER = com.google.MDCCatalog;
363+
PRODUCT_NAME = "$(TARGET_NAME)";
364+
SWIFT_OBJC_BRIDGING_HEADER = "MDCCatalog/MDCCatalog-Bridging-Header.h";
365+
};
366+
name = Release;
367+
};
368+
/* End XCBuildConfiguration section */
369+
370+
/* Begin XCConfigurationList section */
371+
664524AE1C6BA62A001ADBF8 /* Build configuration list for PBXProject "MDCCatalog" */ = {
372+
isa = XCConfigurationList;
373+
buildConfigurations = (
374+
664524C31C6BA62A001ADBF8 /* Debug */,
375+
664524C41C6BA62A001ADBF8 /* Release */,
376+
);
377+
defaultConfigurationIsVisible = 0;
378+
defaultConfigurationName = Release;
379+
};
380+
664524C51C6BA62A001ADBF8 /* Build configuration list for PBXNativeTarget "MDCCatalog" */ = {
381+
isa = XCConfigurationList;
382+
buildConfigurations = (
383+
664524C61C6BA62A001ADBF8 /* Debug */,
384+
664524C71C6BA62A001ADBF8 /* Release */,
385+
);
386+
defaultConfigurationIsVisible = 0;
387+
defaultConfigurationName = Release;
388+
};
389+
/* End XCConfigurationList section */
390+
};
391+
rootObject = 664524AB1C6BA62A001ADBF8 /* Project object */;
392+
}

0 commit comments

Comments
 (0)