0:00:00Welcome to Under the Radar, a show about independent iOS app development.
0:00:03I'm Marco Arment.
0:00:04And I'm David Smith.
0:00:05Under the Radar is never longer than 30 minutes, so let's get started.
0:00:09So today we wanted to talk about version control.
0:00:12And this is a great collaboration tool.
0:00:16And therefore, the two of us who work by ourselves
0:00:20are going to tell you all about it.
0:00:23Drawing on our vast experience about using version control
0:00:26with all the clever things you hear about with, like,
0:00:29git, and you can have merging and branching strategies and rebasing and all the things
0:00:34that thankfully I never have to deal with because I tend to just work by myself and
0:00:38I'm collaborating with myself. And so thankfully things typically, like merge conflicts, not
0:00:44a big problem for me, it turns out. But still, I think version control is a very important
0:00:49part of the discipline of software engineering. And so it seemed like it was something that
0:00:54was worth discussing, even if obviously, jokingly, some of the more collaborative parts of it
0:00:59aren't as relevant for us?
0:01:01- I mean, for me, I have mostly the same situation
0:01:03in that I'm mostly collaborating with nobody,
0:01:07but there have been times where I've seen
0:01:09a lot of the value of it.
0:01:09For instance, I used to work at normal jobs
0:01:11where I had other people working with me,
0:01:13so we would do things there,
0:01:14but that was back in the subversion days,
0:01:17and it was much simpler,
0:01:19and it was still very small teams.
0:01:22And these days, I mostly don't do any kind of collaboration.
0:01:27However, I do have a couple of open source projects
0:01:31that I run and most of them get no activity whatsoever,
0:01:36but a few of them do get third party contributions
0:01:38and I have done, you know, get pull requests
0:01:41and merges and stuff like that and those things,
0:01:45so I have minimal experience there
0:01:48and you and I actually just started accidentally
0:01:51collaborating on something and I don't think
0:01:53it's even worth mentioning what it is.
0:01:54It's a very, very narrow need that both of us
0:01:57happen to have and almost nobody else does.
0:02:00I committed to your code base the other day,
0:02:03and that was like the first time I've ever committed
0:02:06to someone else's iOS code base.
0:02:09And you said that was probably the first time
0:02:11that anyone's ever committed to yours, right?
0:02:13- It's been a very long time, since like 2011, 2012,
0:02:17I think was the last time I had any kind of collaboration.
0:02:21So yes, it is very much a rare thing,
0:02:24but it was kind of fun.
0:02:24Like I was like, oh, someone else,
0:02:26It's like I have to do a fetch and a pull
0:02:28rather than just a push.
0:02:29(laughing)
0:02:30This is novel and exciting.
0:02:32- Yeah, I don't know how I would deal with that in my apps.
0:02:35I'd probably fix all the style differences,
0:02:38which is like this huge faux pas to like
0:02:40restyle someone else's commit.
0:02:42- But yeah, version control, there is definitely,
0:02:45collaboration is an important part of that,
0:02:46and there are lots of different ways to deal with that.
0:02:49Like obviously, we're saying for us,
0:02:51we don't do as much from a collaboration perspective,
0:02:53but I've worked in companies where it's an important thing,
0:02:56And there's lots of great mechanisms for this now.
0:02:59Like this is something that I think back to.
0:03:01I think my first version control system was CVS, I think.
0:03:04- Yep.
0:03:05- And then I went to Subversion and then to Git.
0:03:08And every time, like the tool itself gets better
0:03:11and less awkward and less cumbersome.
0:03:13And I think about the things that are,
0:03:15even things like GitHub or Bitbucket,
0:03:18or there's lots of kind of these online
0:03:20backs or front ends for the repository,
0:03:24which makes so many of these things so helpful.
0:03:26And while I don't do a lot of it, whenever I've had to do something like that, where
0:03:30you have like, you submit a pull request, and you can have notes and code review, and
0:03:34a lot of these things are nice and clear and obvious, rather than just kind of sitting
0:03:38there at the command line trying to work out what's going on when someone else submits
0:03:44code, and it crashes into yours, and things are horrible and broken.
0:03:49And you can do some pretty powerful things too.
0:03:51I remember back with my early days of version control where you would check out specific
0:03:57files that you were going to change, and things like that that would be very cumbersome, and
0:04:02you'd be like, every now and then you'd go down the hall and ask Jim down the hall, "Hey,
0:04:06are you done with that header?
0:04:08Because I need to add something to it for my part of this app."
0:04:12And things like that which most modern version control systems can just deal with in terms
0:04:17of they'll, you know, if you edit the top and he edits the bottom, it just goes and
0:04:21that's fine. And, you know, that can sometimes be problematic if he's changing something
0:04:24in one way and you're changing it in another, but, you know, by and large, collaboration
0:04:29is much easier from a version control perspective than it used to be, because you can just,
0:04:34you have these nice visual tools and, you know, mechanisms by which you can, you know,
0:04:39each share access into a repository.
0:04:42- Yeah, I mean, it is so nice to have modern conveniences
0:04:46with these things and modern advancements.
0:04:49I mean, I too, I never did the systems where checkouts
0:04:53are exclusive to one person, but just basics of versioning
0:04:57and merging from all these systems are great.
0:05:00And especially branching became a lot easier with Git
0:05:04and the DBCS model, and these things, I mean,
0:05:08it just helps so much when you're working on a team.
0:05:10And also when you're working by yourself,
0:05:12and I think that's what we're gonna talk about too,
0:05:13is like even when you're working alone,
0:05:15these systems provide invaluable help,
0:05:18and I think every developer, this is actually,
0:05:22I know that not every developer who works for themselves
0:05:26does version control, and I think not doing it
0:05:28is a huge mistake.
0:05:29- Yes, I don't even know how, I mean,
0:05:31that just seems like, that's like the wild, wild west,
0:05:34where like, are you like copying folders,
0:05:36like anytime, you know, like it's when you have
0:05:38like version one, version two, version three,
0:05:40like, oh, that's chilling. Yes, use version control. Whatever it is, it's one of these
0:05:46it doesn't really matter which one you choose. Like, if you're a Git person, a Mercurial
0:05:50person, if you want to use subversion, if you want to do something else, that's fine.
0:05:53But you have to use something. Because I think the thing that you also can keep in mind with
0:05:59version control is it's a powerful development tool. In the way that you and I, we probably
0:06:05spend most of our development time in Xcode or in some ways in some like TextMate or something,
0:06:09if you're doing web programming. But the tool of version control is a pretty powerful one
0:06:18in terms of it being a part of your development process and allowing you to do things that
0:06:24would otherwise be really awkward. Like, I love in Git having lightweight branching of
0:06:28being able to be like, I have this idea for a way to kind of restructure something or
0:06:34or do a big refactor, or take some code and take it in a different direction.
0:06:40And I can just branch off from my main thing, try it for a few days, and if I end up, it
0:06:47turns out to be just this complete dead end, I can sort of just throw that away and go
0:06:52back to where I started from in a way that is nice and clean and reliable and isn't going
0:06:57to break something, or if I want to just cherry pick part of that in, I can do that in a controlled
0:07:02way.
0:07:04also just to look at what I've been doing. Like sometimes I'll, you know, it's being
0:07:08able to look at the, like in some ways you'd think like the blame part of version control
0:07:16if you work by yourself. And if you're not familiar, like blame in most version control
0:07:20systems, you can look at any line of code and see who created it and when that was created
0:07:25in the history of your project. You know, and so this is the classic, like if someone
0:07:28breaks the build, you can run blame on it and see who broke it. But even for myself,
0:07:33Like when the names are always me, it's often really helpful to be able to look back and
0:07:37be like, "Why am I doing this this way?"
0:07:40And I can go back and say, "Huh, interesting.
0:07:41I added this two years ago when I was working on X feature."
0:07:47And that's often really, really, really helpful to be able to look back and to understand
0:07:52my own code even better, and even more so if you're collaborating with someone else.
0:07:59And even just to be able to, like one thing I always do in my development cycle is I take
0:08:06the last commit that, like the version that I just released, and whenever I'm getting
0:08:11ready to submit to the app store, like the very last step before I hit actual archive
0:08:16and submit to the app store, is I always go and run a diff between the last submitted
0:08:21version and my current version of the code.
0:08:24And I just go through, like sort of line by line in all the changes, and make sure that
0:08:28that there's nothing in there that jumps out at me
0:08:30is like, whoa, why is this still in here?
0:08:33Or like, that doesn't seem right.
0:08:35And I've caught several bugs in my process that way
0:08:39by using version control as a tool
0:08:42to help me write better code.
0:08:44- Yeah, I mean, the biggest value of it as independent
0:08:47is that it's giving you a tool that can show you
0:08:50what you've changed and when you changed it,
0:08:53and possibly why you changed it.
0:08:55But that's like, just knowing what has changed,
0:08:57whether it's what did I do today to this one file
0:09:01so I know whether to even commit this change or not,
0:09:04or what has changed in the entire app
0:09:08between this version, which I know worked in this way,
0:09:11and the current version, which keeps having this weird bug
0:09:14that I can't figure out why it's happening.
0:09:16You can go and you can see, all right,
0:09:17well, here's everything that's different between these two.
0:09:19So the bug is because of some part of this.
0:09:22And it's so useful to know that stuff.
0:09:25Everyone can get value out of that.
0:09:27It also, it helps even if you have to work
0:09:29on multiple computers or if you're working on,
0:09:32like if you have a deployment on your server
0:09:34and one locally on your computers,
0:09:35you keep those synced up properly in a sane way.
0:09:39I mean, it's just so great.
0:09:41I'm still, I'm shocked that anybody still doesn't use it.
0:09:46But fortunately, most people do use it.
0:09:47I think most people have come around to it now.
0:09:49So we're mostly sane in that way.
0:09:52In an industry that's insane in so many other ways,
0:09:54we're mostly sane in that way.
0:09:56And it really helps in that regard that it's also become so much easier to do.
0:10:01Like I think in Xcode, it has full-on version control built into it, in terms of not even
0:10:07its weird snapshotting thing that it always asks me when I'm refactoring a project, and
0:10:12then it asks me, "Do I want to make a snapshot?"
0:10:13And I don't really know what that means, and I really don't think I do.
0:10:17But it has it built in.
0:10:18Like, all of my projects, whenever I'm changing something, it's really helpful in Xcode to
0:10:23just see what's changed.
0:10:24And once I change something, it gets a little M icon
0:10:27next to it that says it's modified,
0:10:28or if I've added a file to it, it's there.
0:10:31And so there's no reason not to be aware
0:10:33of this type of thing, 'cause the tooling is in place
0:10:37to make that just so easy and streamlined
0:10:40that you'd be a fool not to.
0:10:44- Yeah, and whether you do it on a hosted service
0:10:46like GitHub or Bitbucket, or whether you do it just locally,
0:10:49like you can, almost all these systems,
0:10:51you can have a local server if you want to,
0:10:54and not have it synced to any remote/paid web service.
0:10:59But I recommend, if you can swing it
0:11:01for regulatory reasons and for money reasons,
0:11:05I recommend just putting it on GitHub or Bitbucket.
0:11:07Put it on one of the big hosts,
0:11:08because it just, it outsources a class of problems
0:11:12that you don't need to deal with anymore,
0:11:13and also you get a whole lot of convenience
0:11:16for having that be on a hosted system.
0:11:17You have the nice web GUIs,
0:11:19you have the ability to access it from anywhere,
0:11:21multiple computers,
0:11:22have kind of this built-in backup. So it's, yeah, definitely host it if you can, and please,
0:11:29please use version control.
0:11:30>> Yeah, and that's getting to, I think, another kind of interesting aspect to version control,
0:11:35which is the, like, the backup portion of it.
0:11:37>> Yeah.
0:11:38>> Like, both in terms of, like, what you're saying, where, like, it's another physical
0:11:42backup, like, in the same way that you should have probably a clone of your main development
0:11:45hard drive running all the time, and, like, backup in that sense of, like, being able
0:11:49to not have -- if my computer dies, that's suddenly like, I'm out of luck, and that's
0:11:56it. The only copy of my code was sitting on that machine. That's terrifying. You have
0:12:04to have it backed up in a lot of ways, because the funny thing about doing the kind of work
0:12:10we do, there's no sort of tangible -- the only tangible outcome of our work is a collection
0:12:17of text files and images sitting on our hard drive. And so the amount of time and energy
0:12:23and money that goes into creating those, we have to treat them incredibly carefully. If
0:12:28we were at Coca-Cola and we have to keep -- I imagine the recipe for Coca-Cola is very well
0:12:35protected and backed up and guarded to make sure that they can keep making it, because
0:12:39if somehow it got lost and they didn't know the recipe anymore, that would be hugely problematic.
0:12:45And so as developers, our source code is that thing.
0:12:49Even if we have an old binary of our app, that doesn't do us any good, we can't change
0:12:55that.
0:12:56And so it's important to back it up, both in terms of that kind of backup.
0:12:59And then something else that I've found it so helpful for many times too, is it's having
0:13:05this, like, being able to go through, so it's like you have this little time machine that
0:13:10you can go back in time and say, "What was my app like at a particular time?"
0:13:15And like you were saying earlier, this is great for identifying weird regressions and
0:13:21bugs where it's like it worked in version 2, but it doesn't work in version 3.
0:13:25Why is that?
0:13:26And you can actually go back and what I'll often end up doing is I'll export the project
0:13:32from my version control at a particular milestone and change the bundle identifier and I can
0:13:38run them both at the same time.
0:13:39And I can kind of go back and forth and I can see why things are different and that kind of snapshotting is really helpful
0:13:47To be able to look back and then even one other thing that I've it's kind of more silly
0:13:51But I love sometimes being able to go back
0:13:54To like the verb like version one of a product after it becomes very mature both to kind of laugh at myself
0:14:01And just kind of look at it
0:14:03But also just to kind of for nostalgia reasons of kind of looking at it
0:14:06and it's nice to have a sense of, "Wow, I've really come a long way. This app used to be
0:14:11so simple and now it's so much more robust." That's fun to have this backup of it that
0:14:18never goes away in that way. This is why I also version control all my screenshots that
0:14:23I submit to the App Store. They're in there for that same reason, that sometimes it's
0:14:28really fun or useful, or I'm doing a retrospective post. When one of my apps hits a milestone,
0:14:35been, you know, it's, oh, it's five years old. Like, if it's, you know, hitting a milestone,
0:14:39it's kind of fun to, like, do a blog post or something like that to kind of talk about
0:14:42it and show screenshots or the icon from a long time ago. Like, Version Control is a
0:14:46great place to keep those things, so it's all in the same place and it, you know, as
0:14:50time marches on, you can keep a nice, accurate record of what's changed.
0:14:55All right, our sponsor this week is Braintree. Braintree is code for easy online payments.
0:15:01They're a full stack payment platform.
0:15:03And why make payment integration more difficult
0:15:06than it has to be?
0:15:07Brain Tree allows you to accept nearly any type of payment
0:15:10from any device with just one integration.
0:15:13They support PayPal, Bitcoin, Venmo, Apple Pay,
0:15:15Android Pay, cards, and they will support whatever's next,
0:15:19all with that one integration.
0:15:20It's flexible to your system's needs
0:15:22and supports most programming languages.
0:15:24So whether you're using Java, Ruby, or Python,
0:15:26you will always have a range of server side
0:15:29and client-side SDKs available.
0:15:31The Braintree client code supports Android,
0:15:33iOS, and JavaScript, and all of this takes
0:15:36just 10 lines of code to implement.
0:15:38Braintree makes payments and your job a whole lot easier.
0:15:42Learn more at Braintreepayments.com/radar.
0:15:46Once again, that's Braintreepayments.com/radar.
0:15:50Thank you very much to Braintree for sponsoring our show
0:15:52and all of Relay FM.
0:15:53- So I think what might make sense
0:15:56for the rest of the episode is to kind of talk
0:15:58about how this actually, what we do in practice, what the actual tools that we use, what that
0:16:06goes around, because I think there's certainly a degree to which version control can become
0:16:10a very personal thing. And some people like Mercurial, some people like Git, some people
0:16:15maybe even still love Subversion, or there's something new and fancier that I'm not aware
0:16:19of, but you end up with these kind of preferences, and at least I know for myself, I have workflows
0:16:24and things that I've built up over time that are part of this, that maybe are helpful,
0:16:29or if you're looking for a different way of doing Git or different tools for it might
0:16:33be helpful to discuss. So what is your typical, like, how do you actually interact with your
0:16:38version control system?
0:16:39>> So, on the server I just do it all via command line, and I use Git and I host on
0:16:44GitHub. I would imagine GitHub is probably one of the biggest reasons why people choose
0:16:49Git, and why it's so popular, because GitHub is just so convenient in many ways and so
0:16:54good in many ways and it isn't perfect but it's very good. I use GitHub again, private
0:16:59everything I pay for it, it's fine. It's been very secure for me and totally fine and honestly
0:17:05if somebody steals my source code somehow I don't really worry about that because source
0:17:10code is not very valuable. Like if you get somebody's source code to their entire app
0:17:14what do you do with that? Like you can upload it but that's illegal and they can easily
0:17:19get it taken down, so like, you know,
0:17:21you can make your own app again also illegal from that,
0:17:24get it taken down, so like, the actual value
0:17:27of stolen source code isn't particularly high
0:17:30for somebody's random iOS app.
0:17:31So anyway, back to how I use it,
0:17:34I use the command line for almost everything I do
0:17:37in general in development, so MySQL,
0:17:41I use the command line interface to that.
0:17:43If I'm doing development with other server side demons
0:17:46like memcache or redis. I will use the command line to interface with those to set them up
0:17:51to to do administrative tasks if I need to ever get. I usually don't do that anymore.
0:17:59Get is so complicated on the command line and so tedious on the command line that I
0:18:07usually just use get tower as my gooey, which is a Mac app. It's some price. It doesn't
0:18:15matter it's worth whatever price they charge it's worth it I think it's like
0:18:1850 bucks whatever it is totally worth it get because git is incredibly
0:18:24complicated and it doesn't need to be most in most use you can get by and it's
0:18:30it's totally fine and you'll be fine but sometimes you have to do something
0:18:34crazy with it or you have a weird error that you have to overcome and anything
0:18:40involving branching merging of branches certain advanced operations like
0:18:45committing only part of what you've changed or discarding only part of what you've changed.
0:18:50You can do all these things in the command line, but it's so obtuse to figure out how
0:18:55to do that on Git, and many times things can be multiple commands, and many times they're
0:19:00very error prone if you do them manually, and you could actually do some damage if you
0:19:04do it wrong. So typically now I just use Git Tower on the Mac, and I just don't do any
0:19:10kind of operations like that on the server.
0:19:12I'm exactly the same. I use Git Tower for probably like 99% of my Git. It just sort
0:19:17of works, it's very reliable, it's straightforward, and the way that they present Git I've always
0:19:24found kind of works with my head. Sometimes I've tried some other Git clients and they
0:19:30can get very... I don't even... They're showing me too much. Git has all kinds of crazy information
0:19:38and metadata and things about, especially when you have lots of branches, like things
0:19:42that are going on, and they just hurt my head.
0:19:45I liken the way that I use Git Tower, it's pretty straightforward.
0:19:50I open it up, I open a repository, it's like, "Here's the things that you've changed, and
0:19:54would you like to commit them?"
0:19:55And most of my process is that, and if I want to make a branch, I just pick the commit I
0:20:00want to branch from, I give it a name, and now it's created.
0:20:04And so it does a very good job of showing that to me
0:20:08in a way that, yeah, it's completely,
0:20:10it's one of those essential tools.
0:20:11Like if I'm setting up a new computer,
0:20:13there's a, like in that first five things
0:20:16that I will download onto it,
0:20:18one of them is going to be Git Tower,
0:20:19'cause I really can't work productively without it,
0:20:23which is probably saying a lot.
0:20:24- Yeah, yeah, I mean, again,
0:20:26I really do try to avoid GUI tools for developer stuff
0:20:30where there is a perfectly suitable command line version.
0:20:33But this is one of those things where it's so worth it.
0:20:36It is so, you know, not only does it save me a lot of time
0:20:39and it makes certain operations, you know,
0:20:41less error prone that are complex,
0:20:43but also it just gives me a really good view
0:20:46of what's going on.
0:20:47Like, you know, most of what we mentioned before,
0:20:49like a lot of what we were talking about is like
0:20:51how source control can show you and help you track
0:20:56what you're changing, what, you know,
0:20:57what has changed over time, how things used to be
0:20:59or how things are now.
0:21:01And git tower is, they just do a really nice job
0:21:05of showing the diffs, showing the various commits
0:21:07and what was in each commit, showing branches
0:21:10and letting you do that.
0:21:11And it isn't, I mean, there are certainly,
0:21:13there's certainly room for improvement in particular.
0:21:15I think the sub module area is,
0:21:19could use some improvement, but that's,
0:21:21most of the areas that I think tower could be improved,
0:21:25including sub modules, I think are at least partially
0:21:28or even mostly because the underlying Git feature
0:21:32is itself complicated and finicky.
0:21:35So like submodules suck.
0:21:38Everything about Git submodules is horrible.
0:21:40And so I can understand why the implementation
0:21:42of them in tower is also a little bit odd
0:21:45and a little bit finicky.
0:21:47But ultimately I think if I'm going to be using Git,
0:21:49this is the way to do it.
0:21:52- Yeah, and I agree.
0:21:53And I think it's also probably worth contrasting it to,
0:21:56I do use the version control integration in Xcode quite a bit, but it's through totally
0:22:03different things.
0:22:05Like I use the...
0:22:07So A, it's just useful to be able to see what's changed.
0:22:11And often what I'll end up doing is, if in the...
0:22:13What's it called?
0:22:14The navigator view?
0:22:15Like, the bottom left part of the Xcode browser, you can say, "Show me only files that have
0:22:22changed, that have an active version control status."
0:22:25And that's really helpful.
0:22:26I'll find when I'm working on something and I can kind of just see the files that I've
0:22:31been working on, and it collapses a big project into a nice small list, and it's also kind
0:22:36of just, if I see something that doesn't look right, often I'll find a nib file that has
0:22:41changed for some reason that I don't understand. I opened it up once and touched it, and then
0:22:47horrible things happen, and being able to be aware of that earlier in the process is
0:22:52helpful, but most of what I do is very helpful, like version control, I'm sure these have
0:22:58fancy names, but where you can compare inside of Xcode your current version to a past version.
0:23:05So it's like in the top right corner of Xcode, there's the three views, there's the regular
0:23:10view, the companion view, and then the version control view.
0:23:13And in that, I'm so often in there, where I'm looking at code and trying to see what's
0:23:18changed, how is this different, how did I used to do this, like if I have a problem
0:23:23that I've solved once before, I go in there and compare them, and then like I was saying
0:23:27earlier, surprisingly often for working just myself, I'll use blame, so I'll switch it
0:23:34into blame mode and look through the source file and say like, when did this change, when
0:23:39did I start doing it this way, what was that around, and those kinds of tools, and having
0:23:44them built right into Xcode is really useful. I go to tower regularly, but it's when I'm
0:23:52done with something, or when I'm getting ready to do a release, or in these big strategic
0:23:58operations. But I love that Xcode has integration at the tactical level, where I'm actively
0:24:05coding, and in that process I don't have to context switch to some other app to look this
0:24:10I can very easily just be like, "Huh, why am I doing it this way? When did this change?"
0:24:14And that sort of thing. And so I use those tools in Xcode a lot, but I hardly ever commit
0:24:20to any of those types of operations from Xcode. It has them, I'm sure they're there, and I'm
0:24:25glad they exist in some ways, so that out of the box you can do basic version control,
0:24:29but in Xcode I find it really helpful at that basic, the actual line of code level, and
0:24:37And then I go to tower whenever I want to do actual operations, like things that I would
0:24:41go to a command line and type, you know, git clone, git branch, git merge, git whatever.
0:24:45I don't actually know what half of them are because I just use tower instead.
0:24:50So I didn't even know this version view was here. I just open it up now and I'm like,
0:24:56my mind is blown, like, oh my God, this is so useful.
0:24:59So someone has not been watching what's new in developer tools sessions at WWDC for the
0:25:04last few years. I think we just discovered that live on air.
0:25:08Does that surprise anybody? I didn't read the manual. This is great!
0:25:12This is amazing! All I ever really used in Xcode was the little
0:25:17M indicators on the sidebar to know what I've changed.
0:25:19Well, there you go. Now you know that you can do some of these basic operations live
0:25:23at Xcode, and like I said, they're really helpful. They're not...
0:25:27Yes! It turns out!
0:25:30Turns out. Alright, anything else this week?
0:25:34No, I think that's it. Mostly, I guess, just to say, make sure you're using version control,
0:25:38please, please, please, make sure you're using version control. It's one of those things
0:25:41that if you're not, and version everything, I version stuff, I don't do a lot of Photoshop
0:25:49work, but when I do, I just put my PSDs into version control. And it doesn't do all the
0:25:55cool fancy diffing, it's not fancy in that way, but I don't care. I can always go back
0:26:00in time, I can always snapshot things.
0:26:02Like whatever you're doing, try and version control it.
0:26:05I version control my blog, I version control anything I can because once you get into the
0:26:09discipline and the habit of doing it, it's just so much better.
0:26:13And it's probably worth saying, I'm terrible about commit messages because I'm just working
0:26:17by myself, and it's hilarious.
0:26:21Most of my commit messages are often just like, "stuff, kind of works now, hmm, this
0:26:25seems to be better."
0:26:26- Fix, fix, fix. - Fix, fix.
0:26:28But that's enough.
0:26:30Like, it's, 'cause I'm still creating snapshots.
0:26:33Like, I'm not necessarily communicating as well
0:26:35to my future self, which is maybe, you know,
0:26:37like, problematic to, you know, in some ways,
0:26:41but just having it.
0:26:42Like, just putting random gibberish in there
0:26:44and just like, you'd be better off if you just like,
0:26:47had Git, take a, you know, take a commit snapshot
0:26:49once an hour would be, you know,
0:26:52even if you didn't want it to do anything.
0:26:53Like, having just some kind of resource
0:26:55to be able to go back in time is so valuable
0:26:57and I think can make you such a better developer,
0:27:00especially when you use the Xcode integration tools.
0:27:03- To understand how-- - To watch the videos.
0:27:05- If you watch the videos,
0:27:06you can really do some powerful things.
0:27:08So I highly recommend them.
0:27:10- All right, thanks a lot.
0:27:10That's all the time we have this week.
0:27:12So thanks for listening, everybody.
0:27:13Thanks to our sponsor, Braintree,
0:27:15and we will see you next week.
0:27:16- Bye.
0:27:17I can't believe you didn't know those were there.
0:27:21(laughing)
0:27:23How did you not know those were there?
0:27:30There's a lot of Xcode I haven't explored yet.
0:27:34There's only, in the default nav bar, there's only six buttons.
0:27:40I just never clicked on those two.
0:27:41Yeah, the one next to it with the semi-circles, the Venn diagram one, the assistant editor,
0:27:45I don't know what that does either.
0:27:46Well, that one is mostly just useful for if you have a nib in one view and the related
0:27:51file in the other one.
0:27:52Oh, okay, yeah.
0:27:53Like, it's designed to have two things compared to, like, next to each other, so that's useful
0:27:58if you're, like, dragging outlets or things, you know, from, if you're dragging outlets
0:28:02from a nib file into a source file, use the companion one.
0:28:05But yeah, you know, there's this whole world of version control that's been waiting for
0:28:11you this whole time.
0:28:13Oh, I'm so glad we captured that on...
0:28:16(laughing)
0:28:18[BLANK_AUDIO]