That's a relief! Thanks for reporting back.
I'd expect using the framework directly (assuming it was well done!) to be faster than sending commands to the application.
The comments, long variable names, and presetting of ObjC values (I missed a couple!) make it look slightly worse than it is. But otherwise that's the nature of ASObjC and the peculiarities of the Contacts framework.
If the script in post 8 is more successful with with your iCloud contacts than it was with Shane's, you won't need the post 10 version with its individual container fetches. If you don't know anyone whose family name goes before their given name, and don't intend to, you could perhaps hard-code the name order.