Upload
michele-titolo
View
706
Download
2
Tags:
Embed Size (px)
DESCRIPTION
Do you frequently hear yourself say "Don't touch the project file!", "Who overrode my changes?" or "Where did my file go?" If so, this talk is for you. We constantly put the project file on a pedestal of things-you-do-not-mess-with, but is this much caution really warranted? We'll cover tips, tricks, and solutions to promote harmony between you and your project file.
Citation preview
Mastering theProject File
Michele TitoloSr. Mobile Engineer / Prolific Interactive
@micheletitolo
Saturday, April 20, 13
Hello!
Saturday, April 20, 13
Saturday, April 20, 13
Saturday, April 20, 13
Saturday, April 20, 13
<<<<<<< HEAD! ! ! ! A487DC9215FE5DCD0037E8A3 /* AppDelegate.h */,! ! ! ! A487DC9315FE5DCD0037E8A3 /* AppDelegate.m */,! ! ! ! D9CA01C11720AD7D00CBD2B2 /* View Controllers */,=======! ! ! ! D9CA01B71720AC3000CBD2B2 /* Base */,! ! ! ! D9CA01BB1720AC3C00CBD2B2 /* Controllers */,>>>>>>> star_circle_ratings
Saturday, April 20, 13
Falling back to patching base and 3-way merge...Auto-merging MyApppp.xcodeproj/project.pbxprojCONFLICT (content): Merge conflict in MyApp.xcodeproj/project.pbxprojFailed to merge in the changes.Patch failed at 0037 launch screen images update
Saturday, April 20, 13
It’s not that special
Saturday, April 20, 13
Saturday, April 20, 13
.xcodeproj
Saturday, April 20, 13
It’s a folder
Saturday, April 20, 13
Saturday, April 20, 13
Saturday, April 20, 13
project.xcworkspace
Saturday, April 20, 13
another “special” folder
Saturday, April 20, 13
Saturday, April 20, 13
contents.xcworkspacedata
Saturday, April 20, 13
references .xcodeproj
Saturday, April 20, 13
xcuserdata
Saturday, April 20, 13
Not just in .xcodeproj
Saturday, April 20, 13
project.pbxproj
Saturday, April 20, 13
it’s a plist
Saturday, April 20, 13
a very special plist
Saturday, April 20, 13
the heart of your project
Saturday, April 20, 13
let’s look inside
Saturday, April 20, 13
// !$*UTF8*$!{! archiveVersion = 1;! classes = {! };! objectVersion = 46;! objects = {
/* Begin PBXBuildFile section */! ! 8A9D5590A3E24AC297598750 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef...! ! D94D3E72170B80FB00EA401C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; f...! ! D94D3E74170B80FB00EA401C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFi...! ! D94D3E76170B80FB00EA401C /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuild...! ! D94D3E7C170B80FB00EA401C /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; ...! ! D94D3E7E170B80FB00EA401C /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D94...! ! D94D3E82170B80FB00EA401C /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRe...! ! D94D3E84170B80FB00EA401C /* Default.png in Resources */ = {isa = PBXBuildFile; fileRe...! ! D94D3E86170B80FB00EA401C /* [email protected] in Resources */ = {isa = PBXBuildFile; fil...! ! D94D3E88170B80FB00EA401C /* [email protected] in Resources */ = {isa = PBXBuildFile...
Saturday, April 20, 13
Saturday, April 20, 13
Let’s break it down
Saturday, April 20, 13
‘objects’ and ‘root_object’
Saturday, April 20, 13
‘objects’
Saturday, April 20, 13
objects = {D94D3E72170B80FB00EA401C = {...};D94D3E74170B80FB00EA401C = {...};D94D3E76170B80FB00EA401C = {...};532ABB3011D5647300D29D20 = {...};532ABB3111D5647300D29D20 = {...};532ABB3211D5647300D29D20 = {...};532ABB3311D5647300D29D20 = {...};};
Saturday, April 20, 13
Every object has a UUID
Saturday, April 20, 13
objects = {D94D3E72170B80FB00EA401C = {...};D94D3E74170B80FB00EA401C = {...};D94D3E76170B80FB00EA401C = {...};532ABB3011D5647300D29D20 = {...};532ABB3111D5647300D29D20 = {...};532ABB3211D5647300D29D20 = {...};532ABB3311D5647300D29D20 = {...};};
Saturday, April 20, 13
‘root_object’
Saturday, April 20, 13
isa = PBXProject;
Saturday, April 20, 13
mainGroup = A487DC7415FE5DCD0037E8A3;
Saturday, April 20, 13
targets = (! 1D6058900D05DD3D006BFB54 /* MyApp */,! D94C698916E6E808002BDD31 /* MyApp Test */,! D9E1D32A16E6FCC100C0524D /* MyApp Pro */,);
Saturday, April 20, 13
projectReferences = (! {! ! ProductGroup = D94C698116E6E7DE002BDD31 /* Products */;! ! ProjectRef = D94C698016E6E7DE002BDD31 /* KIF.xcodeproj */;! },);
Saturday, April 20, 13
buildConfigurationList = C01FCF4E08A954540054247B
Saturday, April 20, 13
PBXAggregateTargetPBXBuildRulePBXContainerItemProxyPBXCopyFilesBuildPhasePBXFileReferencePBXFrameworksBuildPhasePBXGroupPBXHeadersBuildPhasePBXLegacyTargetPBXNativeTarget
PBXProjectPBXReferenceProxyPBXRezBuildPhasePBXShellScriptBuildPhasePBXSourcesBuildPhasePBXTargetDependencyPBXVariantGroupXCBuildConfigurationXCConfigurationListXCVersionGroup
Saturday, April 20, 13
Saturday, April 20, 13
Saturday, April 20, 13
Saturday, April 20, 13
XCBuildConfiguration
Saturday, April 20, 13
Debug and Release
Saturday, April 20, 13
Saturday, April 20, 13
Compiler flags
Saturday, April 20, 13
buildSettings = {! ALWAYS_SEARCH_USER_PATHS = NO;! "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";! COPY_PHASE_STRIP = NO;! DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";! GCC_DYNAMIC_NO_PIC = NO;! GCC_OPTIMIZATION_LEVEL = 0;! GCC_PRECOMPILE_PREFIX_HEADER = YES;! GCC_PREFIX_HEADER = Prefix.pch;! GCC_WARN_ABOUT_RETURN_TYPE = YES;! GCC_WARN_UNUSED_VALUE = NO;! GCC_WARN_UNUSED_VARIABLE = YES;! INFOPLIST_FILE = Info.plist;! ONLY_ACTIVE_ARCH = NO;! PRODUCT_NAME = MyApp;! SDKROOT = iphoneos;};
Saturday, April 20, 13
Project or Target
Saturday, April 20, 13
PBXNativeTarget
Saturday, April 20, 13
buildConfigurationList
Saturday, April 20, 13
buildPhases
Saturday, April 20, 13
buildPhases
Saturday, April 20, 13
PBXResourcesBuildPhase==
Copy Bundle Resources
Saturday, April 20, 13
PBXSourcesBuildPhase==
Compile Sources
Saturday, April 20, 13
PBXFrameworksBuildPhase==
Link Binary With Libraries
Saturday, April 20, 13
PBXShellScriptBuildPhase==
Run Script
Saturday, April 20, 13
The Big Picture
Saturday, April 20, 13
Saturday, April 20, 13
It’s just a plist
Saturday, April 20, 13
How does this make our lives suck less?
Saturday, April 20, 13
project.pbxproj -text
Saturday, April 20, 13
Make it readable
Saturday, April 20, 13
Make it JSON
Saturday, April 20, 13
Xcode don’t care
Saturday, April 20, 13
The End
Michele Titolo@micheletitolo
Saturday, April 20, 13