[This episode of iPhreaks is brought to you, in part, by Postcards. Postcards is the simplest way to allow you to feedback from right inside your application. With just a simple gesture, anyone testing your app can send you a Postcard containing a screenshot of the app and some notes. It’s a great way to handle bug reports and feature requests from your clients. It takes 5 minutes to set up, and the first five postcards each month are free. Get started today by visiting www.postcard.es]
CHUCK: Hey everybody and welcome to episode 70 of the iPhreaks Show. This week on our panel we have Jaim Zuber.
JAIM: Hello, from Minneapolis!
CHUCK: I’m Charles Max Wood from DevChat.tv and this week we have a special guest, Delisa Mason.
DELISA: Hi, from San Francisco!
CHUCK: All the way in San Francisco, huh?
DELISA: [Chuckles] Yeah, land of expensive rent!
CHUCK: There you go. Do you want to introduce yourself really quickly?
DELISA: Sure. Like I said, I’m Delisa Mason. I’m currently, in some ways, the toolsmith; I build a lot of productivity-type tools, most of which are on GitHub. Lately it’s been for iOS dev, since that’s what I’ve been doing the most and right now I’m working at Hello, where we just had a Kickstarter for our product, Sense, which is like a sleep quality tool – hardware and software.
CHUCK: Awesome. We brought you on to talk about the Alcatraz package manager for Xcode. Do you want to give us a brief introduction as to what it does?
DELISA: Sure! Alcatraz is just a manager for you to be able to install and remove extensions into Xcode, and by extensions I mean things that are either extra functionality like plugins or extra templates or color schemes.
CHUCK: Oh, cool.
DELISA: The black market for Xcode extensions.
CHUCK: [Laughs] Very nice! I got it set up on my machine; of course I got it set up two minutes ago, because I was reading through the site and I had installed the Xcode 6 beta and it said on here that it only works with Xcode 5.
CHUCK: And so you filled me in and said, “No, it’ll run on Xcode 6,” so I turned it on and looking through the package manager and there’s a lot of stuff in here!
DELISA: Yeah, maybe not all of it is Xcode 6 compatible yet, but it won’t hurt to install it; it just won’t do anything.
CHUCK: Oh, kind of like one of my brothers.
DELISA: Oh jeez [chuckles].
CHUCK: He’s there, but he’s not causing any harm.
DELISA: Yeah. It’s mostly – each plugin has to have a specific UUID to say that it’s compatible with each build, and so we just need to add the UUIDs for each build of Xcode 6. But templates and color themes will work on any build of Xcode.
CHUCK: Oh, very nice.
CHUCK: So is there a backend to this? I mean, how do people submit packages to Alcatraz?
DELISA: There is a package repo on GitHub. It’s supermarin/Alcatraz-packages, and it just has one, big JSON file that we just curl from Xcode and read it in, and those are the lists that you see when you open Alcatraz.
CHUCK: Oh, wow!
DELISA: Yeah, it’s actually pretty simple backend. People put in pull requests as they add my package when they usually download them, make sure they’re not something horrible and then just add them in. Lots of interesting stuff has come out of it.
JAIM: What’s the process for installing this?
DELISA: Either you clone the project and hit build in Xcode, or you just run the install script that we have on the website, which just curls down to xibs and puts it in the plugins folder. Xcode will load any piece of code that you just drop in the magical plugins folder.
CHUCK: Oh, that’s safe – I mean, awesome.
JAIM: Powerful! You meant powerful.
DELISA: [Chuckles] Extensible.
CHUCK: There we go. It’s just funny to me because, you know, as iOS developers and Mac developers, we hear about security all the time, right?
DELISA: Right [chuckles].
CHUCK: It just makes laugh; it’s like, “Oh, okay.”
DELISA: It’s secure because it’s obscure. You just have to know where it is and put in your magical UUID and it just works.
CHUCK: How nice.
JAIM: So most of our listeners are cowering in the corner, afraid to do this. Why would we want to install this Alcatraz? What are some cool things we can get out of it?
DELISA: Well, for a little bit of a background history, the first Xcode plugin I ever installed was one called Mini Xcode, which took the gigantic Xcode 4 bar and made it really tiny, but still left all the tools in place. It’s just a lot of small enhancements that make working so much simpler. I just wanted that little bit of extra space when working on my MacBook Air, and there it was. And the first [crosstalk].
CHUCK: Wow, I’m so getting that.
DELISA: Oh gosh. The first plugin I ever made was just a button that nuked derived data from space.
JAIM: Ooh, what is that?
DELISA: Which is called the Exterminator. I know Xcode has built-in functionality to do this, but I just wanted to know beyond a shadow of a doubt that I nuked the entire folder – those kinds of small enhancements where a lot of the thinking going into building Xcode, or [inaudible] Alcatraz.
JAIM: Okay. What are the more popular packages?
DELISA: More popular – let’s see. There’s a set of templates that come with AFNetworking-type stuff built in – those are kind of popular. Some of the ones I hear people talking about the most are the CocoaPod’s plugin, which feels like shameless self-promotion because I did write that one, and Polychromatic, which is actually one of my picks. I guess I can talk about that one later.
CHUCK: Very nice. It also seems like there are color schemes?
DELISA: Yup. People can build custom colors themes, which, at first, looks kind of archaic because you have to edit the file manually, but it’s actually pretty nice. People have made themes for practically anything that already existed for other editors, so Tomorrow is a really popular one and also Solarize.
CHUCK: That’s funny you mentioned Tomorrow because I just grabbed my Tomorrow theme out here and installed it [chuckles].
CHUCK: You’re making my life better, I appreciate it.
DELISA: You’re welcome.
JAIM: Okay, so anyone who wants to customize Xcode or they wish they had a button to do this, they can look for a package that might do something like exterminate your drive data or something like that.
JAIM: Alright. That’s cool! So if I wanted to write something – walk us through. How do you write this exterminator, this button plugin?
DELISA: Okay, so the writing part is the less user-friendly part. One of my smaller projects was making a template for making an Xcode plugin, because there are a few required components. When I said Xcode just runs any arbitrary piece of code, it wasn’t quite true. It has to be formatted as a standard bundle, it has a plist in it – it’s a tiny app. The basic steps would be, first, if you need a UI component, in some ways you have to start to reverse engineer Xcode to figure out where you want to insert a particular thing – at least if you want to edit the standard window. If you’re making your own window, it’s the same process as building a normal Mac app that’s backed by probably NSWindow and xibs. What I’d usually do is take Xcode’s private frameworks and dump out all the headers and then start looking for what I think I need, which is not a very foolproof process. In most cases, I’m usually just into prepping through those, and then from Xcode you tell it to run as its application – Xcode itself – so you spawn Xcode from Xcode and start putting in break points in your code as you load your plugin, and start to manipulate the code to see if you can get the effects that you’re looking for.
JAIM: Okay, so if you can pull this off, you’d have a wizard’s hat and a badge of honor, right?
DELISA: Oh, you totally do.
JAIM: Okay [chuckles].
DELISA: The first time it actually worked [chuckles] I was really concerned that my computer would just implode, running Xcode from Xcode, all the profiling tools started going insane [chuckles].
CHUCK: That’s okay, it’s not like any of us make a living using Xcode or anything.
DELISA: Oh, no. Does anyone use Xcode?
JAIM: I hope so. Now with Alcatraz, there’s no excuse not to.
DELISA: I hope so. One of the problems I feel like I’ve had in a small way is Stockholm Syndrome, like the more I can hack it, the more I kinda like it in there. And then I’m like, “Wait a minute, I shouldn’t be liking Xcode. It just doesn’t seem natural.”
JAIM: You can create your own prison, though.
CHUCK: That’s right.
DELISA: That’s the idea.
CHUCK: Well, that’s one of the things that I like. I spend most of my time writing Ruby, and that’s one of the things I like about Emacs is that I can customize it however I want, and that was one of the things that was frustrating to me about Xcode is I have this box and I can shake the box, but everything’s still where it was.
DELISA: For sure. And that was definitely the inspiration – other editors and simple package management schemes, which, it just seems like it should exist. Maybe it will, with app extensions and whatnot someday.
CHUCK: So if you considered, instead of just curling a JSON file, actually setting up some kind of more – I don’t want to say robust because GitHub will stand up for a lot – but kind of a more –. What am I trying to say? Like a web application that –.
DELISA: Has a more formal system?
CHUCK: Yeah, that’s more along the lines of what I’m thinking.
DELISA: It’s something we’ve discussed several times, mostly for getting more comprehensive metrics, but the need hasn’t really arisen to just make it happen and also times are kind of tough with – I’m kind of in startup life right now and that kind of thing.
CHUCK: Yeah, but I really need that vanity metric to know that somebody downloaded my plugin six times.
DELISA: There’s an issue for that opened every week [chuckles].
CHUCK: Oh, really?
DELISA: [Chuckles] Yes. “How do I know?” No, people are using it. I’m sure someone is. I mean, I have a general idea, just because people open issues about this or that fairly often to know these are popular, or maybe just those have issues and everyone reports them.
CHUCK: Mm-hm. So if I’m looking at the package manager window, it has all – I’m pretty sure I know what that does. What is the little Lego one?
DELISA: The little Lego is a plugin. It’s a flattened version of the bundle icon.
DELISA: Everything went flat and then it got confusing.
CHUCK: And then the little – what is it, color –?
DELISA: It’s like a color swatch.
CHUCK: Yeah, there you go.
DELISA: That’s for the themes, and then the last one is just files and templates.
CHUCK: Ah, okay. Very nice. So you’re going to turn me into a lazy p – never mind. I’m already a lazy programmer.
DELISA: [Chuckles] Laziness is the mother of invention.
CHUCK: That’s so true.
DELISA: You just keep telling yourself that when you’re up in the middle of the night, hacking on Xcode at 3am.
CHUCK: Yeah, my wife comes in four times, “Come to bed.”
DELISA: [Chuckles] Exactly.
JAIM: That’s the problem with the extensible environments, you know. I sit down like – I’ve got the Emacs bindings in my fingers because I’ve done Emacs development for a long time – I sit down and like, “Oh, I’m going to do some Emacs development” and I end up messing with Emacs for three hours. You can’t get anything done. Is this going to send me down the same type of time warp?
DELISA: So far, it doesn’t seem to be a mass community thing, but everyone’s now building extensions. We’ve gotten a lot of them, but it hasn’t been an explosion like sublime text or anything, so I don’t think so. Also, at least for me personally, I’ve gotten to the point where I’ve built enough that I know that many times, when I’m thinking of the cost, it’s not worth it. I spend three minutes a day doing this; there’s no reason for me to spend three hours building something to build it for me. Or maybe I’m just getting old. One or the other.
DELISA: I’ll spend my three minutes, now be happy.
JAIM: I just need to find a client with the same problem [laughter].
DELISA: If only [chuckles].
CHUCK: So it seems like before something like this, your option was basically to pass around files or maybe cloning your repository into your plugins folder?
DELISA: Yeah pretty much every project was, go to GitHub, clone either to a xib to plugins or you had the whole project and you had to build it from Xcode and the build step would be to install it into the plugins directory.
CHUCK: Was it you or somebody else who as like, “Ah! There’s got to be a better way.”
DELISA: Actually that’s a funny story. One of my past open source projects was I worked on the Redcar Ruby Editor for a very long time. The weekend of the Ruby Motion Conference, I met a couple of really cool guys there, one of which was Marin who’s the other creator of Alcatraz, and I said, “Oh I wanted to build a package manager for Redcar. That’s just like supplying checks, and we hacked it out with one of our friends over that weekend. A couple of weeks went by and basically one day he sent me a message that said, “I bet there’s a way to build something like this for Xcode,” and I thought that was just crazy. But over the coming week, he started to hack out a little bit of something and he hadn’t really done much Mac dev before, so I kind of jumped in and we had something pretty much what you see now in like a week or two, and it just kinda took off.
DELISA: That’s basically the backstory of how it came to be.
CHUCK: And then when you were naming it, you looked out the window and said, “I know what to call it.”
DELISA: [Chuckles] I didn’t live in San Francisco quite yet, but it was a little bit of a joke on Xcode being our prison [chuckling].
DELISA: Yeah, which we should’ve just called Prison Curtains or something, but Alcatraz worked out.
CHUCK: Interesting. So do you have any idea how many people are actually using this?
DELISA: I have an idea based on how many people cloned the project when we hosted it off of S3. We since moved to GitHub downloads, so I don’t have a great idea, but it’s a couple thousand.
CHUCK: Oh, very nice.
JAIM: So you just said 1001, so.
DELISA: Oh, yeah.
JAIM: A couple thousand and one – I just downloaded it, went to the site, got this curl script, I’m good. Into Xcode, and yeah.
CHUCK: So which packages do you use? Which ones do you have installed on your system?
DELISA: Oh, I have a bunch installed because I’m always testing out new ones, but the ones I use constantly every day, the first one’s probably VVDocumenter, which, you type three slashes and it puts in perfectly formatted comment for me is amazing. I document so much of my code now. And then, let’s see – Polychromatic, which I mentioned earlier. It’s a system for highlighting your variables that makes it really easy to tell the difference between things that are important and things that aren’t important. It’s sort of how we have class names that are different colors, with all the variable names are just white or just some default color, and it’s not really the useful information that jumps out at you, so it kinda reverses that. That one’s kinda handy. ClangFormat, for standardizing the way where people put their brackets and indentation – that’s also amazing.
CHUCK: That’s cool.
DELISA: There’s a couple of other tools [inaudible] the CocoaPods want to use all the time just because they can do pod install without me having to go to the terminal, that kind of stuff. Those are big ones.
JAIM: I find it’s much more productive to have big fights about your code style [laughter] [crosstalk] other than that?
DELISA: The fight comes first, and then you write out the format in a nice ClangFormat file, and then the fight never happens again.
JAIM: Well, it still happens, but if you have a format where you can kind of do it your own way when you’re writing it and have it formatted nicely, or whatever the teams decides –.
DELISA: Bracket on the same line, bracket on the new line, war never happens again.
JAIM: That’s right.
DELISA: Now if only Xcode could decide, that would be nice because it doesn’t stop you from doing the insert IBAction, and it has a bracket on the same line, but then you open a new file and it has a bracket on the new lines, like, “Whoa!”
JAIM: I know, it’s great; your ViewController is different than your test template.
JAIM: It’s like, “Come on, people!”
DELISA: Yeah, but it’s great.
JAIM: They just don’t want to pick sides, you know.
DELISA: Or they’re still fighting the war [inaudible].
JAIM: This is true.
CHUCK: You got to watch out; some of those angle brackets are sharp [chuckling].
DELISA: I hope that’s not true [chuckling]. But there are new plugins every week, so there’s always new stuff – it’s really surprising sometimes. There’s one called Peckham that inserts – from anywhere in the code, you can insert an import and it goes in the right place, sorted and at the top of the file. You type in something you realize you don’t have it, and it’s just like, hit this keystroke and it puts it in for you.
CHUCK: Oh, that’s nice.
CHUCK: So what’s your process for testing out new plugins?
DELISA: Usually I look at their screenshot. If it doesn’t look cool, then I say no. No, that’s totally not true. I usually clone down the projects, kinda leaf through the code in some general way, and then hit build so it installs to my machine, test out the functionality, see if it’s buggy or has compatibility issues – that kind of thing – and if it’s ready to go out, just merge it and maybe tweet about it if it was extremely cool.
DELISA: That’s pretty much it.
JAIM: Are there any feeds we can subscribe to to get new packages as they come down the pipe?
DELISA: We’ve been talking about automating it completely, but right now it’s just whenever there’s something in particularly usually tweeted out from alcatraz_xcode.
JAIM: Okay, so I’ll follow that on Twitter.
CHUCK: Is the introduction of Swift going to change some of this? Because it seems like there are syntactic [inaudible] syntactical differences between the two languages.
DELISA: Unless the development of Xcode itself suddenly doesn’t support Objective-C, no, but I assume you could just build a bundle in Swift if you wanted to write a plugin in it. There are a couple of people that are working on plugins in Swift; it doesn’t really matter from my perspective.
CHUCK: Right, so all the code highlighting and stuff will be Objective-C-specific or Swift-specific?
DELISA: Code highlighting?
CHUCK: The templates or themes or things like that.
DELISA: That’s a good question. I don’t think so because – I mean, it’s all based on scoping. That’s a good question. I have to look. I have a feeling it’s probably about the same though.
CHUCK: Yeah, probably. They’re probably using the same mechanisms one way or the other, so.
DELISA: Yeah, like some of the scopes have objc in the name, but I don’t foresee that being a really big deal. It’d probably be pretty easy to grip and switch them if you want to make Swift-specific templates.
CHUCK: And at what point do you start rejecting packages because they don’t work on the newest version of Xcode? When they actually release Xcode 6 or are you going to be doing it when they have ‘this is our master beta’ or whatever?
DELISA: Well, we actually went back and forth on this between Xcode 4 and 5, but that one was more of a hard stop because Xcode switched to Arc, and so the things for Xcode 4 couldn’t be installed in Xcode 5. Between 5 and 6, there’s a lot of compatibility, so we are talking about just adding in to packages just the version number to say if it is 5+, or is it just 5 and just try to support versions going forward.
CHUCK: What did you do on the switch from 4 to 5? Did you ditch your whole JSON list?
DELISA: Oh, we went through to see who updated and who didn’t, and the ones that didn’t update, we send out issues to them or the ones that sort of worked, that kind of thing, and then we removed everything that was no longer compatible. Surprisingly, a lot of people updated their plugins to work for Xcode 5, so it wasn’t too dramatic. The big part was just rewriting Alcatraz with Arc, and that was pretty much it.
JAIM: So what are the challenges going from Xcode 5 to Xcode 6?
DELISA: So far, anyone who’s dependent on the window hierarchy like the drive data button – if you put something into the main window, the structure of the windows actually change, so you have to move where you’re inserting it to rehack your hack. Other than that, there hasn’t been much. If anything, it’s gotten easier because not that much changed and so many people have written good blog posts about getting started with plugins and whatnot. For information, that stayed relatively the same. It’s pretty good.
JAIM: So what’s the craziest plugin that anyone has written that’s available on Alcatraz?
DELISA: The craziest plugin – I know the one that made me laugh the most. Well, actually there are two. The funniest one to me was the open an app code plugin [laughter]. You’re looking at Xcode projects and you just want to switch out code.
JAIM: Like, “I’m out!”
DELISA: Yeah. That one, I thought was pretty clever, and then also the Full Issue Navigator, which just shows all of the text that’s in an issue in the issue navigator pane. It cuts off after a couple of lines; you can change it in settings and say, “Show up to three lines, show up to five, but not show all all the time,” and it kind of fixes that problem.
CHUCK: One of my favorite plugins that I’ve used in other projects, it really depends on the team and their sense of humor, but I’ve used libraries that run a command and randomly insert quotes from Princess Bride as comments into your code.
DELISA: Oh my goodness [chuckles].
CHUCK: Would you accept such a thing?
DELISA: I would think about it. It’s hilarious.
CHUCK: I mean, it has no real utility, right?
DELISA: [Chuckles] I’ve viewed utility as entertainment and merriment. I mean –.
CHUCK: Yeah, that’s true.
DELISA: I think that’s a pretty legitimate purpose. I mean, we need to last more on our code. I briefly thought about making a plugin for something like Chatroulette where you connect randomly to some other Xcode user and you both chat –.
CHUCK: Oh, there you go.
DELISA: But that hasn’t come together yet. Maybe next April 1st.
CHUCK: That’s awesome.
DELISA: So now that I’ve totally bastardized my Xcode – it’s now pink and purple and there’s rainbows coming out –.
CHUCK: That’s right. I don’t know.
DELISA: Oh. I’ve been there, man [chuckling]
CHUCK: So what’s the next step on this? Do people get into this and start writing their own plugins or –?
DELISA: My personal hope is, you get in and they you’re like, “Oh, my life is better; I have nothing to complain about on Twitter.
CHUCK: Yeah, that won’t happen [laughter].
JAIM: They say you have less to complain about on Twitter.
DELISA: Less – you’re right.
CHUCK: There you go.
DELISA: But in general, the less I hear, that means people are more productive, right? But from time to time, it seems to be the process. “Oh, this is really cool; I wonder what else I can make it do, file ten issues.” [chuckling]
CHUCK: So what is coming next for Alcatraz?
DELISA: There is a partial UI rewrite; that’s been the worst for a while that I just need to push out probably in a weekend or something. That adds better filters and makes them more descriptive, so bring text back into the UI in some places and also adding a filter so you see your installed plugin separately from other things caching the list, so you can see what you have installed when you’re offline. Just a few usability-type tweaks and then maybe a couple of blog posts about the whole process and building plugins and working a little bit more to make sure good extensions really get highlighted.
CHUCK: That’s really call. Yeah, it would be nice to be able to say, “Oh, I want to see the ones I have installed.”
DELISA: [Chuckles] Yeah. Scrolling through the list sometimes can be a little bit tedious once you start to get a lot of things installed, especially now that there’s – I want to say – a hundred plugins, maybe a little more.
CHUCK: So do you think this is going to pick up in popularity?
DELISA: I’m really not sure. In some ways, the culture in building Mac and iOS apps is very by-the-book. I’ve been kinda surprised that it even got much traction outside of the people who came from Ruby and that kind of thing. On top of that, with app extensions coming out, I keep wondering what kind of extensions we’ll get for Xcode and whether that will be the avenue that we end up going to to build sanctioned things. I’m sure there will always be things that won’t ever be sanctioned so, the black market for Xcode extensions will probably still exist.
JAIM: So what type of things would you use for an app extension versus going through Alcatraz?
DELISA: Well I think at the moment, the problem is not knowing what Xcode’s extension points will be. I remember at some point – I want to say the Platform State of the Union or something – they mentioned being able to do an action on save or something like that, so you could probably build extensions for things like client format, but maybe not so much the crazier hacks like, I can’t see how there would be an extension point for, like I said, the Peckham plugin where you insert imports at arbitrary times without having to pull up some custom UI or making it in some cloogy kind of way. Whatever Apple lets you do then we’ll do extensions; otherwise, we’re probably going through whatever channels we can sort of figure out.
CHUCK: This is really cool; I’m really excited to dig in and start playing with it.
DELISA: That’s awesome! Yeah, there’s always new stuff going on, but like I’m saying, the challenge really has been being able to promote the things people are working on [crosstalk] out there.
CHUCK: I’d ask if there’s a good place to get started, but it seems pretty straightforward to me.
DELISA: [Chuckling] Hooray!
JAIM: Go to website, Command+Copy, Open Terminal and Paste.
DELISA: File an issue [chuckles].
JAIM: And start complaining, that’s right.
CHUCK: That’s right.
DELISA: No, I complain that people are great, and there’s also a lot of great contributors out there who’ve built really crazy things that I never thought of.
CHUCK: Awesome. Anything else that we should have asked about that we didn’t?
DELISA: I mean, it’s a pretty simple system – there’s no backend, just going from GitHub, you install it, it’s magical. The only big thing that I think people need to realize is that when you install a new version of Xcode, then you suddenly don’t have plugins, like it doesn’t recognize the ones from the previous build, so then each time you have to reinstall Alcatraz. Going from 5 to 6, you suddenly didn’t have Alcatraz and you had to install it again. But it’s becoming more seamless. I mean, we talked to a point about building a daemon or something to do it for you, but I think on some level, I kind of agree with Xcode developers on this in that you need to make sure that everything’s compatible again before just automating that it reinstalls. Because constantly crashing Xcode is even worse [chuckles].
CHUCK: Have you heard anything from Apple about this one way or the other? Like it, hate it.
DELISA: Nothing. Like radio silence. I mean, there have been times where I got contacts from some of the Xcode developers about things that would make our experiences better, so we need to do this kind of thing less or what they could do just to make our lives easier, but nothing official.
CHUCK: Yeah, it’s kind of the same thing I’ve heard about CocoaPods.
DELISA: Oh yeah, very similar position.
CHUCK: Yeah, they know about it, but they haven’t actually blessed it or cursed it or anything.
DELISA: Yeah. It’s one of those things where I think they kind of think through and mull over, and eventually will have their solution, but it hasn’t happened quite yet.
CHUCK: Yeah, I did notice that at WWDC. They’re like, “Yeah, and we added this feature and this feature and this feature” and I’m sitting there going, “So I don’t need this app or that app or the other app.”
DELISA: Exactly. Which I’m really okay with, that they want to take it over so I really don t have to maintain some random thing I made on the weekend, that’s great.
CHUCK: How much time do you spend maintaining it?
DELISA: Now, not much. Maybe each week I’d take maybe 9 minutes and go through issues, but there are a few things I need to spend a couple of hours in camera app. Like I said, the UI stuff and that kind of thing. But it’s not very much.
JAIM: Who else do you have helping you with the project?
DELISA: Marin Usalj, who’s the other person who helped me create it, and then also Jurre Stender. Marin and I are actually in San Francisco and Jurre is in the Netherlands, and the three of us do most of the development – the core team, if you will.
DELISA: Ooh [chuckles].
JAIM: So what’s the package that you’d like to see? Someone wants to get on your good side, what kind of package would they make that would make you happy?
DELISA: Ooh, package that I’d like to see – something that when I add a file to my project automatically updates my plist. That would be nice.
JAIM: There we go.
DELISA: I just added 20 variations of one font the other day, and I was like, “I can’t believe I started to do this by hand [inaudible]” then the name of each font with each extension. That would be pretty awesome. I made a little command line tool in Ruby that generates concept files for all of my storyboards; I don’t have to type in y identifiers or instantiate random controllers. I’d love to have a plugin that’s just, on save from my story board, just did it for me. So all of my reused identifiers, all of my names for controllers – all of that kind of stuff. Those would be the two big ones.
CHUCK: Awesome [chuckling]
DELISA: I’m a simple person with simple needs.
CHUCK: I’m trying to think if I have any other questions. Jaim, do you have anything else to ask?
JAIM: I’m excited to get started!
DELISA: I’m waiting for the debugging portion of this.
CHUCK: What do you mean?
DELISA: Oh, the point where you’d find something and just like, “Oh crap! That wasn’t quite what I wanted? How do I fix this? There have been times where I’ve actually built plugins that just didn’t come together. Have you ever used the Snippet Editor in Xcode?
JAIM: Sure, yes.
DELISA: Have you ever crashed Xcode using the Snippet Editor?
JAIM: Maybe [laughter].
DELISA: I had this great idea to build a better Snippet Editor and solve this problem, but the problem is actually something too low-level for me to fix, which is, sometimes if you save a file into the Snippet folder and Xcode can’t parse it in its current format for whatever reason, it brings the whole system down and Xcode won’t restart. I realized, this is not a problem I can solve with a plugin.
CHUCK: So when you’re building a plugin, you can just run it in Xcode and have break points in it?
DELISA: Yup. You set Xcode to run Xcode as its current app, which makes it – when the child Xcode will reload everything in the plugins folder, so you get the benefit of break points.
CHUCK: So does that mean you’re running two Xcodes at the same time?
DELISA: Yes, you are, in fact, running multiple Xcodes. And if you accidentally run Xcode again from Xcode, you can continuously spawn until your machine dies.
CHUCK: [Chuckling] It sounds like you’re speaking from experience.
DELISA: It has possibly happened where I was like, “Which one was the first one?” There’s actually a plugin to solve this problem now, but there are some times in the early days where it just got a little unmanageable. But there’s a plugin now that – I think it’s called RedXcode – that just makes the child window a different color so that you know which one you started with and which one’s the new ones.
CHUCK: Oh man, I so wanted it to put on the parent one something that said, “I am God.”
DELISA: [Laughs] Oh, that would be amazing. It’s probably possible; I don’t see why not. It’s all possible with Xcode.
CHUCK: So with the plugins, can you add things to the menu bars or –?
DELISA: Yup. You just grab the main menu normally and you get Xcode’s menu. Although that’s one of the things I should point out about the extension’s API is while you can start menu items, you can’t grab the NSApplication instance, and a lot of plugins need to do that for various reasons. So anything that you access within the plugin, your main application is Xcode. However, your bundle is not Xcode’s bundles. It’s an interesting distinction you have to make if you end up bundling resources; you have to make sure you saved the bundle that it passed in during initialization, otherwise, you’ll never find that resource in the hundreds of bundles that make up Xcode.
CHUCK: That’s interesting.
DELISA: Yeah. It’s a very interesting architecture.
CHUCK: Huh. Well, I’m excited to get playing with this! I’ve already installed like a half dozen plugins. Now we’re talking!
JAIM: Install all the plugins!
DELISA: Enjoy the power of hot reloading.
CHUCK: What would happen if you did that – install all of them?
DELISA: Install all of them? I hope you have an awesome life? [Laughter]
JAIM: We need a plugin to install all the plugins.
DELISA: There is a plugin that is also a plugin manager in there somewhere. There were plugin managers actually before Alcatraz; I actually didn’t know about this until after Alcatraz, and one of the maintainers submitted it to Alcatraz as a plugin –.
CHUCK: Isn’t that kinda [inaudible]?
DELISA: Yeah, we had some various strange conversations, but yeah. If you want a menu that shows all of your installed plugins and set up a pop up window, there’s a plugin for that.
JAIM: At one point, I had installed some kind of plugin manager and [inaudible] got a template with it; I don’t remember what version of Xcode that was or when that happened.
DELISA: I’d guess 3, back when the world was free?
CHUCK: What are some of the other plugin managers?
DELISA: It’s something like plugin menu, xplugin menu – something like that.
DELISA: Oh, yeah [chuckles].
JAIM: Getting high, sing, sing.
DELISA: Oh gosh.
CHUCK: Jeez [chuckles]
DELISA: I’m noticing a trend here! [Chuckling] No, no. If I start a series of anything – I started out thinking, “Yeah, I’ll make a series of things named after prisons” but that died off really quick. If I was going to name a series of anything, it’ll probably just be chocolate products.
CHUCK: Oh there you go.
DELISA: Cocoa Weeds, Chocula, Ovaltine – something like that [chuckling].
JAIM: It’ll probably be better for the general population.
DELISA: Possibly, and also less wondering if I’m actually secretly a crazy person. You don’t have to wonder; I make Xcode plugins, people! [Chuckling] No sanity left!
CHUCK: Awesome. Well shall we get to the picks?
DELISA: Let’s do that!
CHUCK: Alright. Jaim, what are your picks?
JAIM: I’ve been away for a while and I kinda forgot how to iphreak – I’m working on a pick here. I was at conference at Wisconsin Dells, but I guess – let’s see. Alondo and Pete aren’t here, so I better come forth with that beer pick so our listeners aren’t waiting. I had the foresight to stop by the liquor store on the way to Wisconsin Dells and picked up one thing that I pretty much liked. I got an Amber Lager from Capital Brewery, Wisconsin, in Madison. I’ve been drinking Lagers, Amber Lagers, quite a bit lately; I like them and this is a pretty good one. If you’re in Wisconsin – I don’t think you can get it anywhere else – and you happen to be anywhere near Madison, check out the Wisconsin Amber from Capital Brewery. And that’s my pick.
DELISA: That sounds fantastic.
CHUCK: Alright, I’ve got two picks. One is one of my favorite TV shows started up again – Doctor Who. I freakin’ love that show. The new doctor was kind of interesting, but we’ll see where they go with it, and I’m really curious to see where everything went up. My second pick is lootcrate.com, and every month they send me a box full of little knickknacks and things. The first one I got was villains, and so I got a couple of little posters; I got a magnet with Mario boss on it. This last one was Heroes, and so I got a bobble head Groot from Guardians of the Galaxy. I also got a little Ninja Turtle action figure; I got another magnet with stuff on it. Oh, the hero one also came with some comic books in it and just a whole bunch of interesting stuff. I’ve really been enjoying getting those every month, so I’m going to go ahead and pick those. Every month is a different theme, and they have licensing deals with Star Wars and most of the comic books stuff and Nintendo and Sega – all of those. You get all kinds of stuff from them, and it’s just a lot of fun. And it’s not that expensive, so I’ll pick that. Delisa, what are your picks?
DELISA: Alright, so I have two picks. I know PaintCode’s been picked before, but PaintCode2 is amazing. Just being able to punch in random bits of code to be able to customize the animations I’m working on, and the fact that it keeps track of all my colors and images all in one place, it’s made my life so much simpler.
DELISA: And then the second thing would be the Steam game, Crypt of the Necrodancer, which is a rhythm, rogue-like game that I play with a dance pad on my Mac, and it cost me I think $10, maybe $15. Best $15 I’ve spent in months.
JAIM: What is a rhythm rogue like?
DELISA: It’s rogue-like, so it’s an auto-generated dungeon crawler game, but you do it to a beat. It has great music, and you just have to push the arrow keys on the right beats to be able to jump forwards and back and attack and that kind of thing.
JAIM: Very nice.
CHUCK: That sounds like fun.
DELISA: It’s super cool! Yeah. It also has co-op. Those will be my picks.
CHUCK: Awesome! Well thanks for coming. If people want to get a hold of you or contribute to Alcatraz, what should they do?
DELISA: Either they can find me at my website delisa.me or kattrali, K-A-T-T-R-A-L-I, on GitHub, Twitter, Skype, PlayStation network – just about everything. However people want to find me, I’m always up for talking about new ways to build better tools.
CHUCK: Very cool. Alright! Well thanks for coming and we’ll catch everyone next week!
[Work and learn from designers at Amazon and Quora, developers at SoundCloud and Heroku, and entrepreneurs like Patrick Ambron from BrandYourself. You can level up your design, dev and promotion skills at Level Up Con, taking place on October 8th and 9th in downtown Saratoga Springs, New York. Only two hours by train from New York City, this is the perfect place to enjoy early fall at Octoberfest, while you mingle with industry pioneers, in a resort town in upstate New York. Get your tickets today at levelupcon.com. The space is extremely limited for this premium conference experience. Don’t delay! Check out levelupcon.com now]
[This episode is sponsored by MadGlory. You’ve been building software for a long time and sometimes it gets a little overwhelming. Work piles up, hiring sucks and it’s hard to get projects out the door. Check out MadGlory. They’re a small shop with experience shipping big products. They’re smart, dedicated, will augment your team and work as hard as you do. Find them online at MadGlory.com or on Twitter @MadGlory]
[Hosting and bandwidth provided by the Blue Box Group. Check them out at BlueBox.net.]
[Bandwidth for this segment is provided by CacheFly, the world’s fastest CDN. Deliver your content fast with CacheFly. Visit cachefly.com to learn more]