4 ms·
Only in spirit. NeXTStep's ProjectBuilder was GNU Make based, and IIRC it directly edited Makefiles (restricted subset of make - and you weren't supposed to tou
by agsnu 5y ago
Only in spirit. NeXTStep's ProjectBuilder was GNU Make based, and IIRC it directly edited Makefiles (restricted subset of make - and you weren't supposed to touch them by hand) and also had a PB.project file that contained some limited metadata.
What became Xcode started out life as "Project Builder" (with a space), which was where the pbxproj file format was introduced. This debuted with Mac OS X (possibly circa DP4?) and was a ground-up rewrite - new UI, new project format, new build system (originally it used Jam, a little-known build system created by Perforce, before switching to something custom... IIRC it would generate an ephemeral Jamfile at build time).
For a while both could be installed on the same system - you needed ye olde NeXT ProjectBuilder for WebObjects 4.5 projects, and it was known as ProjectBuilderWO on Mac OS X for a while as a result.
- eddieh 5y agoThis is correct. The format was really nice during the NeXTStep era. It was an simple ASCII plist file called PB.project. It could be edited by a human. When Apple started "improving" stuff it turned into the SomeProject.pbproj/project.pbxproj file and was not editable by a human. This file would later become SomeProject.xcode/project.pbxproj and then SomeProject.xcodeproj/project.pbxproj all the while getting worse and worse and less editable and less readable/understandable. Here is the entire project file (PB.project) for IORegistryExplorer from Mac OS X 10.0 { APPCLASS = NSApplication; DYNAMIC_CODE_GEN = YES; English_RESOURCES = {}; FILESTABLE = { CLASSES = ( RExplorer.m, "RExplorer-OutlineDelegate.m", "RExplorer-BrowserDelegate.m", CustomOutlineView.m, RSearch.m, RBool.m ); English_INTERFACES = (IORegistryExplorer.nib); FRAMEWORKS = (AppKit.framework, Foundation.framework, IOKit.framework, System.framework); FRAMEWORKSEARCH = (); H_FILES = ( RExplorer.h, CustomOutlineView.h, "RExplorer-OutlineDelegate.h", "RExplorer-BrowserDelegate.h", RSearch.h, RBool.h ); IMAGES = (IORE.tiff); INTERFACES = (); OTHER_LINKED = (IORegistryExplorer_main.m); OTHER_RESOURCES = (IORE.icns); OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble, CustomInfo.plist); SUBPROJECTS = (); }; LANGUAGE = English; MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; NEXTSTEP_APPICON = IORE.tiff; NEXTSTEP_BUILDTOOL = /bin/gnumake; NEXTSTEP_DOCUMENTEXTENSIONS = (); NEXTSTEP_INSTALLDIR = "$(SYSTEM_DEVELOPER_APPS_DIR)"; NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; NEXTSTEP_MAINNIB = IORegistryExplorer.nib; NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; PDO_UNIX_BUILDTOOL = $NEXT_ROOT/Developer/bin/make; PDO_UNIX_INSTALLDIR = /Applications; PDO_UNIX_JAVA_COMPILER = "$(JDKBINDIR)/javac"; PDO_UNIX_OBJCPLUS_COMPILER = "$(NEXTDEV_BIN)/gcc"; PROJECTNAME = IORegistryExplorer; PROJECTTYPE = Application; PROJECTVERSION = 2.8; WINDOWS_BUILDTOOL = $NEXT_ROOT/Developer/Executables/make; WINDOWS_INSTALLDIR = /Applications; WINDOWS_JAVA_COMPILER = "$(JDKBINDIR)/javac.exe"; WINDOWS_MAINNIB = "IORegistryExplorer-windows.nib"; WINDOWS_OBJCPLUS_COMPILER = "$(DEVDIR)/gcc"; } Simple. Elegant. Usable.
- setpatchaddress 5y agoIt didn’t scale to large projects, though.