3 ms·
It would be pretty hard to do all of that on purpose, let alone by accident, or by gradual accretion of new features. They must have worked really hard on that
by db48x 6y ago
It would be pretty hard to do all of that on purpose, let alone by accident, or by gradual accretion of new features. They must have worked really hard on that mess.
- ajconway 6y agoSo it’s just a legacy file format that (as reflected in the article) has likely evolved from an internal object representation in the early days of macOS X (maybe earlier?). Apple has been working on the tooling for the past several years. They improved the editor performance, created a new build system (llb), made a native dependency manager (swiftpm). For third-party tools they have released an LSP extension (hopefully they’ll end up using it internally in Xcode).
- rmorey 6y ago> maybe earlier? Yes, XCode originates from NeXTSTEP’s Project Builder: https://en.wikipedia.org/wiki/Project_Builder https://en.wikipedia.org/wiki/Project_Builder
- agsnu 6y agoOnly 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 6y 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.