NSConference 7: A Look Back

March 24, 2015

Last fall, I received an email that read, “I would like to invite you to be a speaker at NSConference 7”.

In the invitation email, conference organizer Steve ‘Scotty’ Scott (@macdevnet) described his intent for the conference:

“At NSConference I want the speakers to be with the attendees all the time. I want you to be at the sessions, I want you to be at the meals, I want you to be at the events. I want you to mix, eat, drink and chat with as many attendees as possible.”

“What I require most in an NSConference speaker is enthusiasm and a love of being with the OS X and iOS developer community. Right now I am not looking to pick talk topics, as it’s all about people first.”

I accepted the invitation immediately.

All About People First

In his opening remarks, Scotty expressed the same intent in a different fashion. He said that the speakers and topics were, of course, important, but the real heart of NSConf was creating an environment where members of the developer community could interact.

Leicester Athena

Leicester Athena
Photo by NotFromUtrecht via Wikimedia Commons

The format at NSConf was unlike other conferences I have attended. Each segment began with a 30-minute talk followed by two 10 or 15-minute blitz-talks, followed by a 30-minute break. This approach packed three topics plus plenty of time to talk with fellow attendees into a 90-minute block.

The venue was the Leicester Athena, a gorgeous 1930s art deco theater re-styled to host events. The seating was at round tables, giving folks a chance to talk with one another. There was a massive stage with great lighting and sound (and yes, a full bar on stage too). It is truly a beautiful venue, well-suited to Scotty’s goals for the event.

The days were filled with speakers giving talks, conversations with attendees and lots of coffee and tea. In the evenings, good food and more conversation. The first night was the banquet, each table set with a candelabra, with wine and a meal served at your table. The second night was the party, with a buffet meal and mingling.

It was after folks had a chance to be fed at the party that we launched into our Breakpoint Jam.

Breakpoint Jam: NSConf Edition

The idea behind a Breakpoint Jam is that the band is made up of whoever happens to be in town for a conference. Folks practice up some James Dempsey and the Breakpoints songs on their own before arriving, we do a quick rehearsal the day of the show, and then we perform.

I find the most stress-inducing shows are when all the musicians are new to the Breakpoint Jam — this was one of those performances.

It takes a leap of faith to get on a plane in San Francisco and fly over 5,000 miles to England, knowing you will be performing for a theater full of people with musicians you have never performed with, rehearsed with, or in some cases even met before.

Kevin Cupp on guitar, James Dempsey on vocals, Jonathan Fox on drums and S ‘Scotty’ Scott on bass at the Breakpoint Jam during NSConference 7

Kevin Cupp, James Dempsey, Jonathan Fox and Steve ‘Scotty’ Scott kick off the NSConf 7 Breakpoint Jam
Photo by Cathy Shive

That leap of faith was rewarded by musicians that pulled it all together amazingly well in the rehearsal time allotted.

Guitarist and iOS developer Kevin Cupp (@kevincupp) did perhaps the best walk-on guitar part in Breakpoint Jam history, having learned every nuance from the rehearsal tracks I had sent.

Longtime NeXT and Apple indie developer John Fox (@djembe) added a full drum kit to a Breakpoint Jam for the first time, skillfully playing the varying musical styles from the driving beat of Goto Fail to the Hawaiian breeze-inspired Liki Song.

Rounding out the core trio of Conditional Breakpoints for the evening was NSConf’s own Scotty on bass. (It is no coincidence that Scotty was positioned closest to the on-stage bar.)

For The Liki Song, backup singers arrived in the form of Laura Savino (@savinola) and Ruotger Deecke (@roddi) making their Breakpoint Jam debut, and Uli Kusterer (@uliwitness) whose bass voice is perfect for the ‘object alloc’ chant beneath the choruses.

And, on the ever-important slide-advance keyboard, the incomparable Daniel Steinberg (@dimsumthinking).

Kevin Cupp playing guitar, James Dempsey singing and playing ukulele, Jonathan Fox playing drums, Laura Savino, Ruotger Deecke and Uli Kusterer singing, Steve ‘Scotty’ Scott playing bass.

Left to Right: Kevin Cupp, James Dempsey, Jonathan Fox, Laura Savino, Ruotger Deecke, Uli Kusterer, Steve ‘Scotty’ Scott.
Image by Marius Ciocanel

It was tremendous fun to play on that big stage, in that beautiful theater, complete with lighting effects (and a fog machine, I think). The show was only possible because of all of those who joined in the jam—a big thank you to them for lending their talents to the show. And of course, a giant thank you to everyone the audience, it was a privilege to play for you all.

The Future: A Look Back

Scotty had stated that this year’s NSConference would be the last. When I looked at the schedule, I saw that Scotty had chosen my session The Future: A Look Back to be the last talk of the last day of the last NSConf.

The talk took a look back to the Apple/NeXT merger and the history of some of the technologies that we use today. After the talk, some old-timers told me that they enjoyed the walk down memory lane, while some more recent arrivals to iOS and OS X development commented they appreciated hearing some backstory on the technologies they are using today.

James Dempsey Presenting ‘The Future: A Look Back’ at NSConf 7

The Future: A Look Back at NSConf 7
Photo by Raphael Sebbe

Scotty had also announced that, although this was the final NSConf, he hoped to do another event in the future that took the best of NSConf, but proceeded in a different way — different enough that calling it ‘NSConf’ would be misnomer.

With that in mind, I closed my talk as follows:

“As we wind down to the last session of the last NSConf, I’d remind you that in this developer world of ours, nothing is ever truly gone. Specific implementations come and go, particular instances are created and released, but the underlying themes stick around. That’s true whether we are talking about technologies, or the community of people that use them to create magnificent things.”

Almost Like Being There

Being at NSConf was a fantastic experience — I learned a lot and had the chance to meet and get to know people I would likely not have met otherwise.

I’m very grateful to Scotty for inviting me and to the entire conference team for doing a fantastic job and for treating the attendees and speakers very well. NSConf had an easy-going feel, but everything hit its mark. It takes a great team to make it look that easy.

The next best thing to being there would be watching the amazing talks. And as of last week they are available to everyone on the NSConf 7 channel on Vimeo. I encourage you to check out all the talks, including my talk The Future: A Look Back, which I’ve included below. •

NSConference 7 was held March 16-18, 2015 in Leicester, UK.


Categories: Mac, Music, Software Development, iOS

Going Upthere

February 24, 2015

I’m very happy to announce that I have joined the team at Upthere.

Here’s the gist from upthere.com:

Our team is hard at work in Palo Alto, CA, building out the future of the cloud. We can‘t wait to tell you more, but right now we‘re working very quietly. Some really great engineers and designers who‘ve built some of the world‘s most successful products are already here.

Even though I’m now at a stealth mode startup, I’m not dropping completely out of sight.

I’ll still be speaking at conferences and James Dempsey and the Breakpoints will continue performing and writing new songs whenever inspiration strikes.

In fact, I’m gearing up for a spring tour that starts in England and then criss-crosses the USA. At each stop I’ll be speaking and performing in a Breakpoint Jam — a set of songs from our iTunes chart-topping album Backtrace.

I hope you are able to make it out to one of these excellent conferences. If you do, please say hello! •


Category: Software Development

Learning More About Xcode Build Settings with BuildSettingExtractor

February 8, 2015

Last week I posted about BuildSettingExtractor, a utility that makes it easy to pull the build settings out of an Xcode project file and into xcconfig build configuration files. (The post also mentions some xcconfig file benefits with links to ‘how to’ information. Read the earlier post here.)

I also wanted BuildSettingExtractor to be useful for anyone who wants to learn more about the build settings in their projects. To that end, the latest version, available on github, generates build setting descriptions gleaned from the installed version of Xcode.

For example:

// Framework Search Paths
// 
// This is a list of paths to folders containing frameworks to be
// searched by the compiler for both included or imported header
// files when compiling C, Objective-C, C++, or Objective-C++, and by
// the linker for frameworks used by the product. Paths are delimited
// by whitespace, so any paths with spaces in them need to be
// properly quoted. [-F]

FRAMEWORK_SEARCH_PATHS = $(DEVELOPER_FRAMEWORKS_DIR) $(inherited)
	

// Info.plist File
// 
// This is the project-relative path to the plist file that contains
// the Info.plist information used by bundles.

INFOPLIST_FILE = BuildSettingExtractorTests/BuildSettingExtractorTests-Info.plist

Inline Build Setting Info

To learn more about build settings, Apple provides the Build Setting Reference (Apple developer documentation links are notoriously fragile, just search for the document) as well as Quick Help in Xcode when a build setting is selected. (In Xcode choose View > Utilities > Show Quick Help Inspector (Cmd-Opt-2))

In addition to these ways of learning more, BuildSettingExtractor gleans the build setting info from Xcode and puts it inline in the generated xcconfig files. This has a few benefits:

  • Read about each build setting without selecting setting one by one in Xcode
  • Read about only the build settings currently set in your project and targets
  • Information about build settings is available wherever you are looking at the xcconfig file: github, text editors, diff tools, etc.

What if I don’t want this lovely but verbose feature?

If you want BuildSettingExtractor to generate pithy xcconfig files without the build setting info, Choose BuildSettingExtractor > Preferences… (Command-,) for the new preferences sheet and turn it off.

BuildSettingExtractor Preferences Sheet

Happy Building! (and a call for help)

I hope you find BuildSettingExtractor useful, either as a learning tool, or to get rolling with xcconfig files. If you do find it useful, please spread the word about it: https://github.com/dempseyatgithub/BuildSettingExtractor.

As for the call for help, if you would like to help out with a basic app icon for BuildSettingExtractor, the utility can emerge from the primordial world of the generic app icon. Contact me if you are interested. •


Categories: Mac, Software Development, iOS

Generating Xcode Build Configuration Files with BuildSettingExtractor (xcodeproj → xcconfig)

January 31, 2015

The most recent NSScreencast covered using build configuration files to specify build settings in Xcode. (Episode #154)

Using build configuration files—or xcconfig files as they are known—has some definite benefits.  However, as seen in the screencast, the initial process of copying the current build settings out of an Xcode project into xcconfig files is tedious and potentially error-prone.

Screenshot of Build Setting Extractor 1.0

Nuthin’ fancy. Drop an xcodeproj file on it—it spits out xcconfig files.

To aid in that initial extraction process, I wrote a utility app called BuildSettingExtractor.  It is available on github at https://github.com/dempseyatgithub/BuildSettingExtractor.

The app is a simple droplet utility: drop an xcodeproj file on it, choose a destination folder, BuildSettingExtractor will extract the build settings from the project and generate xcconfig files.

A set of files is generated for each target in the project and for the project itself.  Each set of files includes one xcconfig file per build configuration and one xcconfig file of shared settings. For example, a typical Xcode project will generate nine xcconfig files: three sets of files for the app target, test target, and project with three files for Debug, Release and Shared in each set.

I hope you find BuildSettingExtractor useful. Even if you are just curious about project build settings, this is an easy way to inspect a project’s build settings without fear of accidentally changing them.

A little more about xcconfig files

By default, Xcode stores all build configuration settings in the project file itself. However, you can tell Xcode to base a build configuration’s settings on a build configuration file instead.

A build configuration file is a text file of key-value pairs. An xcconfig file can also contain comments and include other xcconfig files.

//
// Project-Debug.xcconfig
//

#include "Project-Shared.xcconfig” // Include other xcconfig files

// An xcconfig file is a text file of key-value pairs.
// Use comments to record why you are using certain build values.
// The /*comment*/ and #comment styles are not valid in an xcconfig file.

COPY_PHASE_STRIP = NO
GCC_DYNAMIC_NO_PIC = NO
GCC_OPTIMIZATION_LEVEL = 0
GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1 $(inherited)
GCC_SYMBOLS_PRIVATE_EXTERN = NO
MTL_ENABLE_DEBUG_INFO = YES
ONLY_ACTIVE_ARCH = YES

There are some benefits to using xcconfig files:

  • Build settings are not in project file—this removes one source of project file merge conflicts
  • Build settings can be documented using comments
  • An xcconfig file of shared settings can be included in each build configuration

There are also potential drawbacks to using xcconfig files.  One potential pitfall is that the build settings for a configuration are based on the xcconfig file—but settings set in Xcode override the xcconfig file settings. This can leave you with unexpected build behavior because an errant build setting set in Xcode is overriding the xcconfig file setting.

This issue is compounded by the fact that when new Xcode versions update project settings, the settings are added to the project, not to an xcconfig file.  So when using xcconfig files, some vigilance is required to keep an eye out for build settings being added to the project.  These stray build settings should be moved from the project to the appropriate xcconfig file.

What Next?

BuildSettingExtractor generates xcconfig files from a project—it does not set your project up to use them.  Here are few resources that walk through that process:

I was inspired to release BuildSettingExtractor by Episode #154 of NSScreencast. The episode is a step by step demo walking through the process.

By the way, if you aren’t familiar with NSScreencast, I recommend taking a look. Ben Scheirman (@subdigital) presents weekly bite-sized screencasts covering a wide range of development topics. Some screencasts are free and some, like Episode #154, require a subscription. __(Ben also plays guitar with James Dempsey and the Breakpoints, but that has yet to be the subject of a screencast.)

The blog post Using xcconfig Files For Your Xcode Project by Jont Olof Lyttkens (@jontolof) explains how to set up a project to use xcconfig files in Xcode 6.

Finally, Building the Build System by Rob Napier (@cocoaphony) is an older post, written for an older version of Xcode, but the overall concepts and explanation of the benefits are still relevant.

In each of these walkthroughs, instead making a bunch of xcconfig files by hand and then copying and pasting from the project into the correct file, you would use BuildSettingExtractor instead. •


Categories: Mac, Software Development, iOS

Lyrical November

November 10, 2014

The response to Backtrace has been fantastic, and I wanted to thank everyone who has shown their support by purchasing the album and helping to spread the word. You made Backtrace the #1 comedy album on iTunes in the US, UK, and Canada.  You also made it debut at #5 on the Billboard Comedy Album Chart. I cannot thank you all enough!

Since releasing Backtrace last month, I’ve gotten numerous requests for the lyrics to the songs.

For the rest of November, I’ll post lyrics to a song a day (or thereabouts) and we’ll make our way through the album. I’ll be tweeting when each song page goes live as well as some of my favorite lyrics. You can follow me at @jamesdempsey .

Each song page contains its liner notes—lyrics, song notes, and full credits for the very talented people who brought these songs to life. Below are links to the liner notes for each song – each link will go live as Lyrical November progresses.

And of course, If you haven’t checked out Backtrace on iTunes, I invite you to give it a listen.

Modelin’ Man
Almost Dropped My iPhone
Model View Controller
Gonna Needa Pasteboard
The Accessibility Song
The Liki Song (Minawana Meika La’a Likiko)
The Designated Initializer (Got the Better of Me)
The Fetch Spec Song
Goto Fail
Hold Me, Use Me, Release Me
Endian Reservations
I Love View
Anti-Patterns
Model View Controller (Legacy Mix)
Relationships
The Liki Song (Greybeard Mix)

Album Art for James Dempsey and the Breakpoints Album 'Backtrace'


Categories: Mac, Music, Software Development, iOS