Speaking of packaging, a thing I hated in Xcode, which made me wish to be filled with nuclear fire, transformed into Godzilla, and stomp thru 1 Infinite Loop, was the package structure:
foo/
foo/
foo-Info.plist
foo-Prefix.pch
foo.entitlements
all source, images, and config files in a single giant mess, regardless of "groups"
foo.xcodeproj/
foo.xcodeproj/
project.pbxproj
project.xcworkspace/
contents.xcworkspacedata
xcshareddata/
foo.xccheckout
xcuserdata/
mdh.xcuserdatad/
UserInterfaceState.xcuserstate
WorkspaceSettings.xcsettings
xcschemes/
xcschememanagement.plist
xcuserdata/
mdh.xcuserdatad/
xcdebugger/
Breakpoints_v2.xcbkptlist
xcschemes/
foo debug.xcscheme
foo release.xcscheme
xcschememanagement.plist
fooTests/
more sources
Are you fucking kidding me?
Groups aren't folders, they're just keywords grouped together until Xcode decides to fuck you over and disorganize them. To fight the project dump dir, I'd make a group, then add a subfolder, edit the group to reference the folder, and then I could create files in their own nicely-organized subfolder. There is of course no automatic name sorting, because that's a developer convenience and Xcode hates developers.
Test code couldn't be in the same folder as the code it was testing. So you'd edit a file, then edit a test file WAY over in a different tree. Good luck knowing how much coverage you had.
I especially love how foo.xcodeproj/xcuserdata/
and foo.xcodeproj/project.xcworkspace/xcuserdata/
have duplicate structures for develop & run/debug modes, because obviously the runtime and debug teams are separate and hate each other.