What's up, everybody? Welcome to another episode of the Compile Swift Podcast. This week, we are going to be talking about some AI tools and our experiences with those. But first of all, Jeff, how are you doing, buddy? I'm doing pretty good. I've been pretty productive on my apps lately and...
you know, hoping to stick around and get another podcast out. Awesome. Yeah, this week, I'm hoping to be productive as well, and we're going to get a podcast episode out for sure. We took a break last week, folks. We had some things we both needed to take care of, and hey, that's the way it goes, right? You can't do everything every week, even when you try hard. And Lord knows as developers, we try hard.
I did spend a live stream, in fact two live streams as of this recording, with an AI tool. We're going to get into it and it shocked me is the short version. We're going to be talking about some AI tools this week that we think are helpful to developers. Some of them are specifically geared toward developers and tuned for that and others are AI tools that you'll be familiar with probably that are just general tools that we also think are useful.
So with that, I'm going to hand it over to Jeff, who's going to go through a couple here with some of his experiences. Yeah. So I think the most general set of tools that people are going to be familiar with are just your standard AI chatbots. You've got your chat GPTs. You've got Claude by Anthropic. I think there's a couple other ones out there that people are familiar
using to do development stuff that aren't necessarily geared towards development, but are still very useful for these cases. You can ask chat GPT or Claude or whatever to generate code for you and it will do it. It will spit out code and you are kind of responsible for doing everything on your own. After that, I find it personally more helpful to, uh,
kind of have a conversation about code rather than have this stuff generate code for me, where it's more, I'm trying to figure out a problem. I know that I need to do X, Y, Z kind of thing. And I'm going to describe it from a higher level. Now you chat bot, can you help me accomplish this kind of path? Can you walk me down this path? Can you be my guide rather than doing it for me?
And I think that is a goal that some of these tools have is to just replace it outright. But for a lot of these more chat based tools, I think that they are geared towards, you know, chat, having a conversation and having a back and forth with these kinds of things. And to that end, you have tools that kind of put a nice front end on some of these kinds of things and make it more useful for developer stuff.
We have a friend of the show and former guest, Adam Wolf, made a very cool app for this called Developer Duck. We'll link that in the show notes. And that was just a front end to all of OpenAI's models that kind of puts a nice developer-friendly front end on some of these tools, but still is very much geared towards being a chat tool rather than being a integrated AI IDE, like some of the tools that we might talk about later. So...
I've used these tools minimally. I've definitely used them a little bit. And like I said, I use it a lot for the kinds of things where I know what I need to do, but I don't know exactly how I'm going to do that. For example, I recently had to do a lot of math stuff for one of the things that I'm implementing in Bark, one of the new barcode formats that I'm working on.
And I am not a math expert in any way, shape, or form. And what I did was I kind of basically said, hey, I know I need to do this. I need to solve this kind of problem. How am I going to represent this in code? And I didn't want it to automatically just go like, oh, here, here's the solution, because...
I can't check that. My skills at math are not well enough that I can look at the code and go, oh, yeah, that's absolutely correct. I want it to walk me through step by step and say, you need to solve this. This is how you're going to solve this part of the problem. Then you need to solve this. Here's how you're going to solve this part of the problem and kind of build it up from steps like that. Does that make sense? It does, because that is sort of one of the two ways that I use these tools.
I'll quickly describe how I use them before we dive into sort of tool-specific discussions. So I do like the idea of this chat tool that I can have a discussion with, in a sense, kind of pair programming the problem without being specific. Just to say to it sort of,
hey, here's the problem. You know, am I on the right track? And see what it says. Because I agree with you. Things like, you know, math and those kind of things, by no means am I an expert. So if I need a math formula or I just thought of another good one, maybe a regex, something like that, I'd love for it to generate that part. Then I can take that part and apply it to my code, right? Now that's sort of my...
My first way of doing things. The second way that I use these tools, and this is one that I'll talk about when we dive into the tools here in a moment, is letting it generate code for something that maybe I'm not familiar with that I can learn from. But the important focus there is learning.
to learn from it and not just, okay, the code must be good because the machine said it was. Does that make sense? Yeah, absolutely. That makes sense. That actually ties almost in reverse into another way that I use one of these tools that actually I forgot about until just now, which is finding code on the internet that does something. And then you're not understanding what that code is doing in the first place. You can then take that code and,
Send it to these chatbots and go, can you explain to me what is happening here? And so last year, this was, geez, yeah, over a year ago at this point, I was working on some machine learning stuff. It's ironic that this is all kind of just layered in on top of each other. I was working on some machine learning stuff, and I didn't really understand what was going on. And being machine learning stuff, all of the sample code that's out there is in Python. Yeah.
Using libraries like Python's NumPy. All of the Python people are going to be yelling at me that that's not how it's pronounced. I have no idea how it's pronounced. Using NumPy, using some of the specialty math stuff that that does. And so there was a lot of, I was taking that Python code that I was finding on the internet and going, please explain to me in English and or in Swift what
What the heck this code is doing and finding it very useful to understand that where if I'm looking at some Python code and I have a base level of familiarity with Python, but I definitely don't have any familiarity with some of these more esoteric libraries like NumPy that I could take that code and I could send it to an LLM like this and go walk me through what this is actually doing.
And it would do that. And that was a way that I could then understand what it's doing and then reimplement it myself in Swift or reimplement it in my own code base and tweak it the way that I needed to in order to make it fit. And that was very helpful. That was something where it's like, I found this code that does what I want to do.
But I don't want to just copy and paste it because, A, it may not fit my use case one-to-one exactly. But also I just don't like having code in my code base that I don't understand. And so very much it's like I found this code. I want to take it off the internet. I want to use it. But I don't understand it. Can you help walk me through it? And so I think that's another place where these kinds of tools are very useful. You can have it.
talk to you about a piece of code, whether it's your code or somebody else's code. No, right. Like you say, it's a pair programming technique, I think, in many ways. And also useful, as you say, it hadn't occurred to me until you mentioned it, but it is a great way to get started saying, hey, here's this thing in this language. I need it to be in this language. Fig
Figure that out for me. And then, like you say, take that, put it in the context of what you need and also learn from it from there. Because that, for me, actually would be a great way to learn something like Python, where I really don't know hardly anything at all.
But I know the concept of what I need. And then I think the one remaining use case that I've used this for, this is a way dumber use case than any of the rest of them, is simply I know that this API exists, but I can't remember what it's called. And Apple's documentation is, we're all familiar with Apple's documentation. And I just search is not working. I can't find what I need. My Google Foo is bad. I can't find this or it's something obscure, but I know it exists.
And just being able to go in and ask the LLM, hey, I'm trying to do this thing.
And I know that it exists, but what is the API I'm looking for? And it's really good at being a kind of like nice, fancy search tool. And it'll go like, oh yeah, you just need to call this method. And it's not writing the code for me. It's not generating a big, giant chunk of code. It's going like, hey, here's the one line you need. And you can kind of solve the rest of the problem from there. And so that's another thing that I find really useful where it's like,
I know that I can do this and I'm just, I'm just blanking on how to do it. And Google search isn't helping me. Apple's documentation isn't helping me. What is it that I need to do to get there? These tools have been super good. This is especially true in cases where you're talking about something old or obscure. The big one that this helped me with recently was Apple's
Apple script. I was implementing Apple script in an app, in a Mac app that I was working on. And all of the Apple script documentation was written 20 years ago. Apple's documentation search likes to hide it. Google, if you ask it about something that's happened 20 years ago, it's like 20 years ago, that didn't happen. That's the easiest. What are you talking about? Uh, Google is like, you know, super against showing you anything older than a couple of years. Um,
So, yeah, it's impossible to find anything. You go to the LLM, you're like, hey, I have this question about how I implement an AppleScript function in my app. And it goes, oh, yeah, you just do this. And it doesn't complain about the fact that, oh, who's writing AppleScript in 2024? I am. Deal with it. It just gives you exactly what you need. Yeah, and I think that it raises, what you say there raises a very important point here.
which is regardless of the tool that you use, and by that I mean whether it's an AI chatbot, Google search, or whatever it may be, at the end of the day, you still need to know what the question is that you need to ask and how to ask it. And I think AI does a better job at...
helping you figure out how to phrase that question, right? Because like you say, we've all sat there putting a bunch of stuff in a search engine and it's just not working however you try to phrase the question. But I think with AI, you know, sometimes I've found that the experience is
It sort of figures out what you mean, but you, you know, it's like, I see what you're trying to say, but you don't have the words. Let me help you out. You know, did you mean this? Yes, that's exactly what I meant. And I do like this idea of, I, you know, I have the knowledge. I can't remember the name of this API. And of course, as soon as it tells you,
you're like, oh yeah, that's it. And then you remember, oh, I now remember how I used it. So that is a good use case as well. Yep.
Or, you know, it gives you the jumping off point to go into Apple's documentation and go, okay, now what's the specifics about this? Now that I know what class I'm looking at, what are its functions, what are its whatever, it gives you another point to kind of jump off and do more learning. And I guess the takeaway lesson here is, now that you've put it out there, is let's hope that they didn't train Apple.
uh that you know the ai services they're going to put in xcode on the documentation otherwise all hope is lost right let's let's hope they do and then that gives them an excuse to make better documentation well maybe at that point the machine takes over it's like look i got this
What's up everybody? I want to tell you about CleanMyMac by MacPort. Now I have been using this for years. So many years that I don't even remember at this point. But if you're a Mac user and you don't have this tool, trust me, you need it. So let me tell you what you can do with this.
Now, when I open up the application, not only is the UI absolutely gorgeous, but I run SmartCare and all I got to do is open the app, click on SmartCare and hit the scan button. Now, when I do that,
What's going to happen, it's going to analyze my system and it's going to go through and it's going to look for junk. It's going to check to make sure that I don't have any malware or anything like that on my Mac. It's going to run some performance checks. It's going to go through and check for application updates. And then it's also going to give me the option to look at what I would call the clutter on my machine, kind of my files, right? The stuff that I put there.
And I'm not kidding you. Every time I run this, and I run this at least once a week, it will find at least a couple of gigs worth of junk files to clean out.
And all I got to do is to tell it, go ahead and run and it'll clean out the junk files. The other day when I ran it, it found six gig of files. And believe me when I tell you I am meticulous about keeping junk off of my machine. And it will just find this stuff splattered all over different folders.
And then it'll run the performance checks, like I say. And it'll just look and see if there's anything that it thinks needs to be done. It'll let me know about any app updates. And I can just have it update them for me. Now, on top of that, there are other tabs. There's the Cleanup tab. And it'll go in there. And you can tell it to do various cleanup operations for you. Again, it's going to run an analysis.
As developers, we all know about Xcode and how much space it takes up, but you will be amazed about the amount of files that can build up and caches over time that you just don't think about. And, you know, they just don't clean themselves up very well. And again, it's,
it'll go through there and save me gigabytes of space. It's absolutely unbelievable. The performance tab is fantastic. It'll run things like flushing the DNS for me, and it'll run the maintenance scripts. It'll check disk permissions for issues there, and all of those things to give you every ounce of performance out of your machine. And if all of this sounds good to you, and it should if you're a Mac user, like I say, I consider this like one of my first installs,
You can go to peterwhedham.com/cmm and that's going to jump you to the right spot where you can go in and you can try out CleanMyMac. You'll get a seven-day free trial. Personally, like I say, every time they bring out a new version, it's an instant upgrade for me. So again, go to peterwhedham.com/cmm and get started with CleanMyMac today.
So then as kind of like a half step between purely chat based tools that aren't really meant for developer stuff and full fledged developer IDs that we'll get into later. We have our tried and true, our good friend Xcode and with Sequoia and with Xcode 16, you need both.
Apple introduced predictive code completion. And that is kind of an expansion of the existing autocomplete that tries to use AI heuristics to give you what you need from a development perspective. And so I think both of us have used this. And I think both of us have kind of come across
Similar answers, which is that sometimes it's magic. Sometimes it's great and it just does everything that you absolutely wanted. And other times you're sitting there going, what on earth are you thinking, Xcode? Where did you get this? Why do you think that this is what I want? And it's never really clear why.
which is which and what you're going to get. So it's kind of a mixed bag, but it is, I think, a step towards Apple realizing that, hey, these tools could be useful and maybe we should start looking into integrating them with our software and what can we do from there? So what's your experience? Yeah, so my experience is a mixed bag and I did start by using it
when it was first available in the, I think it was the betas, right? We had it a little bit before the RCs. And, you know, I wasn't expecting miracles. But what I found was, it was good. It surprised me in a way that...
was like, oh, you know, it would suggest things like variable names based on my code and, you know, things along those lines, which were good for helping me think about, you know, variable naming is hard, right? And it did help sort of like, yeah, that's a good idea. Let's go with that, right? You know, now that said, if it,
In the situations where there was no code, you know, that was definitely one of those. Yeah, that's that's not so great. Right. But once there was a bit of coding there and, you know, it was pretty good for me, things like initializers and stuff like that. So it was a mixed bag.
But for the most part, I was impressed with it from a first attempt by Apple. That's kind of where I'm at. Now, would I just trust it and go with it? No, definitely not. But it was a good way to fill that blank screen, if that helps. You know what I mean? Yeah, definitely. Yeah, I think that's been my experience as well. It is something that...
For a lot of the boilerplate-y type stuff, like you said, initializers, codable conformance, that kind of thing, it's good. It's not perfect, but it is good. And it certainly deals with it a lot better than some of the refactoring tools that they've had there in the past. Yeah. But there are some times where it wants to insert something and I just go, I don't know why you thought that was what I wanted to do. Yeah.
Yeah, it didn't so much wrap itself in circles as just went off on a wild tangent. Yeah, exactly. Thankfully, the way they've integrated this is pretty easy to ignore. It just kind of gives you some ghost code and it shows up and you can very easily ignore it. But, you know, sometimes it just does something so weird that you're like, you just stop for a second and go, what?
Yeah, yeah. If you think of it as a smart autocomplete tool, it's not too bad. Yeah, I think that's all it's intended to be. And, you know, it has all of the ups and downs that being a smart autocomplete, that's what we've known about on keyboard autocomplete for forever on iOS. Yeah, yeah, right. Yeah, it's as good as that. Let's put it that way, folks. All right, good luck with that. Yeah. But that is only step one of the plan for Xcode, right? Yeah.
Yeah, they announced at WWDC that they would have their own kind of chat adjacent tool called Swift Assist. And I don't know about you, but I haven't seen hide or hair of that since WWDC. Nope, nothing at all. Yeah, so I don't know that we haven't had any announcements about it. We haven't had any, you know, here's when you might expect to see it. Even, you know, Apple's talked about a lot of the Apple intelligence stuff.
features that they've announced and we start to see some of these coming with image playgrounds in 18.2 and those kinds of things this one seems to just uh not really be coming so i don't know when we expect to see that or if we expect to see it by next year or what but it'd be a nice to have but as of right now we're just kind of waiting for it to actually exist i think i
that there's there's two parts to the problem here i think for apple um you know firstly okay depends on how you look at it but in my opinion you know they were clearly delayed in their ai services in general be a developer or consumer now we are starting to see them as you say and and so far i've been reasonably happy with them but i think the problem is with the developer one
You know, this is what happens when Apple announces stuff way back in June. And then we sit here on this promise for the rest of the year. And here we are almost getting ready to start talking about the next conference. And we still don't have what was supposed to be here this time around. And in the meantime...
Everybody else has, I was going to say caught them up, but I think from the get-go, everybody else had already surpassed them. And I wonder if part of the reason, understandably, is they've not released them because they've looked at it and said, you know, our stuff's just not good enough. But the problem with that is, well, if you hadn't told us about it in the first place and it just turned up at some point...
we would have been more impressed than the promise, the empty promise of a year of waiting. Right. Yeah. And if they're delaying it because it's not good enough, you know, it's not like everybody else has stopped. Yeah, exactly. Right. You know, and, and it's not like everybody else has got it perfect. So at this point, kind of maybe put it out there and not beg for forgiveness, but just say, Hey, here it is, you know, get it out there and iterate. Yeah. Yeah. Um,
At least that's how it feels to me. I've sort of, I don't want to say given up waiting for it. You know, it's like, yeah, I'll try it out when it gets here, if it gets here. But in the meantime, there are other routes that I think are probably...
probably working better than this unreleased stuff unless it's truly stunning um i i can't see how it could be based on the mixed reviews of the services that are out there now for consumers which arguably are going to be used a lot more right absolutely so then on the far other end of the spectrum we have these fully developer centric idees
And I haven't really worked with any of those, but I know you have. And I know that the one that you've interacted with the most is called Cursor. We'll have a link to that in the show notes as well. Why don't you tell me a little bit about your experiences with Cursor, what you've used it for, what you've liked, what you haven't liked. Just tell me everything about it.
Yeah, so I'm going to go down two different tracks here for two different tests that I've done. We'll put links in the show notes. I did them on a live stream because I wanted everybody to see it as it happened. And thankfully, there was also some folks in the chat room that had used Cursor before that were able to give me some pointers. Now, let's start with what is Cursor. So,
Cursor is essentially Visual Studio Code with some extra smarts on top, is how I would describe it. So if you're familiar with Visual Studio Code, you're already mostly the way there, right? I did a couple of experiments that went along the same lines for two different, I would say two radically different projects.
And what I wanted to do was just hand it over to the tool and say, I'm going to do exactly what you're going to tell me to do. This seemed like the best way to go about this. So the two examples are,
One was a web app using React. And the other one was to build an iOS SwiftUI app. So let's talk about the React one. The way it goes is like this, right? I had an empty IDE, essentially, and a chat window. And in the chat window, you describe what you want. Now, you can be as verbose as you want to be, and I do recommend that.
Or you can build it up in sections. The way that I went about this was I'm going to give it an overview of everything I want this app to do. In the case of the web app, right, I went along the lines of something like I want to build a web-based application using Node, React, Tailwind CSS, MySQL, and TypeScript.
I want the application to have a registration screen that uses email and password. I want it to have a profile screen where I can change my password. And I want to have a home screen, essentially, after I've logged in. Plus the ability to, you know, usual CRUD, right? You know, delete the profile and so on.
And that was it. And at that point, I just hit return. It goes away and thinks about it for a minute. It was pretty quick, I got to say. And it comes back and says, okay, look, here's a series of tasks I think you need to perform to make this happen. And it's very much working through the tasks and saying, yep, go ahead and do this one. For example, let's take my SQL section.
It says, okay, you need to create a database and it shows me the SQL and
And I'm like, yep, go ahead, do that. And it creates, you know, along with the table, it runs that for me, creates that. And then it says, okay, you know, now you need to be able to hook up to that database. So it'll show me some connection code. And I'll say, yeah, go ahead, do that. It'll create a new file with all the connection code and any prompts for things like, you know, passwords and things like that that I got to put in. In this case, it took the sensible approach of environment variables, right?
So there was that. And then you save these files and you go through this process of creating a series of files based on each of the parts. And it fully explains to you what it's doing. So if you don't know
you know, what's going on here, you can learn from that. The reason I chose this one was I already knew how to do these things. And I wanted to see how well its suggestions matched up with the way that I would have done this. Now, at the end of it, you're going to go through however many tasks for, you know, what you're trying to create. And
At the end, it'll say something like, okay, you know, now go ahead and run the app, right? In this case, there was a server part for the node and there was a client part for the React side. So I just run them both. And sure enough, hey, it popped up in the browser and...
Life was not good. The reason being is it's kind of user error a little bit in that I had not set a password on my SQL, if I remember rightly. You go back to the chat box. Again, I wanted to hand it all over to the machine. I told it what the problem was.
and you can tell it, you know, here's the problem, and it'll go away and analyze all the files in your project to give itself context and then suggest a solution. And sure enough, it comes back and says, ah, yes, I see the problem. It literally says, ah, yes, I see the problem. It's trying to be friendly. Suggest a solution. Again, you can say, go ahead and do that. Run it again.
Great, everything's working now. That was the basics of the web app, right? Now, the only prerequirements is I did have to have Node installed in my SQL, right? Stands to reason. So that was track number one. Pretty straightforward stuff there, right? In the next...
stream, I wanted to challenge it further because this is, you know, it's like, well, this thing's not going to be able to do this, right? So I opened up an Xcode, new empty Xcode project, went to the app and said, I want to create a SwiftUI application that has a list view with an entry form with various fields. I want to be able to edit
record I want to be able to you know display the list of records see the details when I tap on one and that was pretty much it and the only other thing I said was I wanted to use Swift data which I thought for sure was gonna catch it out same process it goes through and says okay here's what we're gonna do series of tasks go through and perform those creates a series of Swift files and
inside my Xcode project. I screwed up. It was my fault. It was putting me in the wrong location. I should have set that up beforehand. That's on me. But sure enough, the files that it created were fine, right? The first thing it did was it created the model, a nice model for me. So if you've not done Swift data, this was a great way to see how to create a model in Swift data. And then it created the list view,
It created the, you know, the for loop in there to make the list. It created the tap event for, well, actually the navigation, I should say, for the details view. On the details view, I could actually edit in the screen, go back, it would automatically save because it's Swift data. And I even, as a bonus, it gave me swipe to delete. And it just worked.
So, you know, at this point, I was like, well, that was a lot better than I expected. Yeah.
And I know you were there to see this on the stream. And I didn't do anything in between. I literally just let it do its thing. And like I say, some of the mistakes there were human error for sure. I had learned, okay, point it to the right folder next time so you don't have to move files. That was like the basic experience. And there's a part two that I'll get into in a second. But I want to pause here for...
Any comments or questions from you since you saw this happen? No, I mean, I saw the full initial thing and it was a little weird that it didn't really catch up all of the things that you had already set up with regards to the empty Xcode project. But once you had that working, it did basically work.
Yeah.
Yeah, that is a very important point. That was one of my takeaways that I mentioned on the stream was, okay, it's not done anything I couldn't do myself, but it has done it significantly quicker than I would because, hey, I got to type the code out and it didn't, right? So it is a great time-saving tool for the sort of base plate
you know, mundane code to get you started. And I agree with you. You know, some of it was like, well, I might not have done it that way, but it got me a running app that I can now start working with significantly quicker. That was the good part. All right. Now, this is where things got interesting because I wanted to, one of the specific things I wanted to do was to challenge it with adding a new feature.
wanted to add this feature where basically there was a screen with a text field a rich text editor and you can put text in that gets stored with it and you can have it associated with one of the pre-existing records so I described it again what I wanted it to do I felt I described it pretty good
And sure enough, you know, it analyzed all the files and said, okay, look, here's a bunch of changes we need to make, created a new model, right, for this new piece of data, and then also created a bunch of files and made changes to the existing ones.
which is important because on the one hand, you wanted to update the existing ones. Like for example, adding the models to the container in the startup of the app and things like that. But it started to generate errors. Now, having been there before when I did the web app, I wasn't too concerned because I knew that the best way to go about this is, yes, I could probably solve them myself.
but to trust in the system. And so I would tell in the chat box, I would literally say, hey, in this file, or when I was building, I got this error, or a couple of times, I got this crash, right, when it was trying to run. It would go through and almost, would you say it almost felt a little bit
smug about the way it was like oh yeah i see the problem right and and i think i was even saying to the screen no no no you created this problem not me um and so it made suggestions to fix the problem again was like all right we're gonna go with this trust in the system
And I started going down and everything was fine at first. It was building, but there was some issues. So I would read it, describe again, some of the things that weren't quite right. But then at that point, we got so far down a rabbit hole of trying to fix these problems that it felt like I was getting caught in a loop and going around solving one thing that generated something else that then broke the first thing that then fix the first one, broke the second one.
And it started to feel like that after about 30 minutes. Was that your impression as you was watching it? Or do you think it was just me?
I think that that was at the point where I saw that it was going in circles and I had other things to do. And so I dropped off at that point. So I was like, oh, okay, this doesn't look good. I don't know what I'm going to be able to do to help. Let me, I got other things that I have to catch up on. So I did unfortunately miss the resolution of all of this. Okay. But yeah, I definitely saw where you started to get into points where you were editing files and
and it was like re-editing them and you kind of got into a thing where it's like hang on we've been here before yeah and uh and so yeah i i missed what happened after that i missed if you ever actually got out of this circle but uh yeah i did catch you getting into uh the rut all right so spoiler alert we did not get out of the circle if you had come back about
I don't know, 40 minutes later, we were just in a different party. It's like in England for American drivers when you get on a roundabout and you can't figure out how to get off. We did not solve the problem. But I think the takeaway lesson there, discussing it with the chat room, was if you start with kind of a monolithic approach,
you know, description to build the app and do that and then try to add features. It's not necessarily going to go great for you. So that is a mark against...
Which is weird because it seems like that's what these tools are kind of built for. Exactly. Having the knowledge of your code base as it is. Yes. So it's surprising to hear that. And I know that I've seen, again, we're going to go back to a friend of the show, Adam Wolf. I know that I've seen on his...
where he is taking his existing code base, which is huge. He's got a very large code base and been using stuff like cursor for that and being and using it to add features and, and,
It seems to mostly work fine for him. So I'm, I'm a little bit surprised and I wonder how representative either of your experiences are, honestly. Like, I'm not going to just say like, Oh yeah, Peter's clearly doing it wrong. But I also like, you know,
Is Adam's project as it exists in a setup where it just works better for some reason? Is it the fact that you were, like you say, using the latest and greatest solely to kind of trip it up? You said that you were trying to do that with having it use Swift data versus...
Adam's code base is several years old and he may be running into problems that... Or sorry, he may not be running into problems that you were running into with trying to have the latest and greatest that the LLM just doesn't know enough about. Oh yeah, you can't really do this with Swift data. Yeah, I think it's a bit of both because my takeaway after I sort of thought about it the next day was, yeah, you know, okay, first of all, yes, of course,
Ultimately, the AI is drawing from his experiences. So it's only going to know as much as the data is out there. So as far as referring to Swift data, that's a possibility. And I also think on the flip side, the more it has to draw from in your code base, the better your chances, which is a bit of a weird thing.
situation to be in because here you are with the tool that you're trying to use to build an app to you know expand the code base to add the features yet at the same time
If it can't help you add the features at the beginning, how much is it going to help you later on? And I think that's the weird position we're in with a lot of this stuff at the moment. And I think that that's why I was sort of, you know, when we were talking about, you know, the stuff that they're going to put in Xcode 16 earlier was, yeah, it's only going to be as good as its input, right? And so I want to say that I don't think that's the definitive experience that I had.
I think given that this was only the second time I had used it, which is important to point out because this is also where I wanted to come from was, hey, I've never used this. If I was a developer, because let me say this, you should be a developer if you're going to use like this tool. You've got to know what it's doing, right? Because you've got to get yourself out of these holes, right?
Because I was thinking, well, this should be a great tool to take one of my existing apps and say, hey, I want to add this new feature, which was this exact scenario. And it didn't do so well, which does leave you questioning, okay, how useful is it, right? But I'm going to give it a passing grade on both of my tests because...
It certainly did way better than I thought it was going to do. That's good. Yeah. It's definitely good to hear. Yeah. Now, I do want to point out, though, there are some things that some folks in the chat room pointed out. I'm not familiar with them, so I don't want to dive into them here. I might look into it.
but it's not integrated in any way with Xcode. It is literally dumping files in your Xcode project. I did see that, yeah. Yeah, and so, for example, as someone said, you know, an Xcode project file...
As much as we don't understand them, it knows even less. I do actually find that surprising because it's not like there's a dearth of Xcode project files out there on GitHub or whatever. I actually am a little bit surprised that these tools don't understand Xcode project files maybe even better than Xcode does. And one of the things that I was hoping...
hoping that an LLM could do is, you know, you're, everybody's familiar with this where, Oh, I've done a get merge and now my Xcode files broken. And now I've got to figure out what exactly is wrong with my Xcode project file. Like, I feel like an LLM should be pretty smart at like, here's my Xcode project file, find what's wrong and fix it.
That seems like the kind of thing that it should know. And to have the experience that, no, actually these tools are just as confused by Xcode project files as we are, seems...
counterintuitive to my understanding about how LLMs are designed. I'm sure I do not know what you mean. I have never experienced a merge problem with Xcode project files. If that was a problem, there'd be some other tools out there that would generate Xcode project files or some crazy world like that. Exactly. Yeah. No, you're right. Right. It's,
I feel like it should at least have a basic understanding. There's no serious magic in any of these files. And maybe further down the road it will.
be interesting to see if the Apple's version of this understands project files, right? Definitely. That would probably be their most outstanding feature if it did. But that was basically over two streams. So I'm going to guess about maybe four hours. That was my experience with it. And I'm going to say, in my opinion, this is a tool worth thinking about.
Or at least a category of tools worth thinking about. Sure, absolutely. Let's be fair and say, yeah, because I know there's some others that we're going to sort of touch on. At the end of the day, yeah, that's a better way to put it. These are tools that if you use them to help you,
You're going to go a long way with it.
Because I know definitely, I've looked at it a couple times and my, like I've never actually used it. I've never even gone as far as downloading it. My concerns about Cursor are not the concerns about
what makes cursor cursor? My concerns about cursor are the history that it has with VS code and my experiences with VS code. Yeah. Oh, sure. So, yeah. Uh, I, I know that I've used that in the past and I used to love it and now I no longer love it. And so it's, it's more like, what if I could have the cursor things in, uh,
project or in a environment that I actually liked to use. Segway. Beautifully done. Professionally done. Last week at their annual conference, GitHub announced that they were
their own version of taking over, it's not quite clear to me, the GitHub Copilot for Xcode plugin. Now, this existed before, and I hadn't used it at that point. It now is an official GitHub project. It is now part of the GitHub organization on GitHub, and
That's confusing to say. It's at github.com slash github. But this is now kind of a official from GitHub's end integration between Xcode and Copilot. And it uses some questionable hacks to make it work because Xcode doesn't have a great plugin system. So it is definitely being a little bit tricky in order to get to do what it does.
I haven't used this yet. I'm pretty sure you also have not used this yet. Correct. I haven't used this yet. And you touched on right there. The one concern to me is what many concerns, but the most immediate one is because of the restrictions in the Xcode plugin system, how much can this or any tool that tries to integrate with Xcode really do? Yeah. I,
I do think this is something that I will look into because I think it is interesting and it kind of gets around the issues that I have with VS Code as an editor in allowing me to use Xcode instead. So it might be interesting. I kind of prefer the quad ecosystem rather than the OpenAI ecosystem. And obviously this isn't really integrated with that yet, being that it's coming from Microsoft and all of their integration with OpenAI. But I hope that we will see that eventually be
GitHub seems to have been more open to pairing with other model providers. And so I'm hoping that we see something like that in the future where it begins to work with things other than OpenAI's models. And I think that could be another interesting alternative to a tool like Cursor. You know, one go back I should have added here, just as a note for Cursor, you can choose among many different
I was using Claude, which is the one it has by default. But there is, at the very bottom of the screen, a dropdown. Well, click it, and it's a dropdown. So you can choose your engine of choice. Yeah. Yeah. That is one thing that I think I like about Cursor more than what we currently have with Copilot for Xcode. Yeah. Yeah.
Yeah, I'm eager to see you try that one out. I think I'm going to sit and watch the train go by on that one and just ride along with you as opposed to diving in. Yeah, I should try that out in the future and maybe we'll do a quick follow-up on the beginning of one of these episodes. Yeah, I'm sure there are some folks out there that are like, gosh, how many episodes are they going to do on Kapow Swift on AI?
But the fact is, this is a thing, right? I mean, it's a big thing. It's only going to get bigger. And it's important to stay on top and at least be aware, even if you have no intention of using any of these things.
You should at least be aware of what's happening, like I always say, around you as far as tools, services, and approaches. And this is for sure an important one.
So, you know, AI, I'm afraid, it's been around a while. We've all heard about it in many different contexts. It's not just for developer tools and you don't have to use specific developer tools, you know, as far as AI goes. There are other areas where this is important.
arguably more important in some ways depending on your perspective than helping you write your code and you actually have a couple of really good examples where you did well you typed into the machine for me I guess is the way to do it but it is it's useful for marketing and other things but you have a couple of I think really good use cases so you want to go ahead and dive into those
I think what you're referring to is the icons for your apps, job finder tracker and endless hurdles. And those were both icons that I did using mid journey and kind of starting with a prompt in mid journey and then
Kind of discussing my way through it and using a lot of mid journeys tools to kind of tweak the way into it, looking the way that you want it to. I think job finder tracker was done kind of early in mid journeys experience. And you can kind of see it. If you look at it a little bit, it's like, Oh yeah, this definitely has some of the weird AI shenanigans around it. Whereas endless hurdles, I think came later and they had built more of their tools. And so you can kind of,
you know, erase parts of it and say, well, hang on, this doesn't look right. This is not how...
offense looks. This is not how a hurdle looks and let's, let's build something that looks a little bit better. So that one's a little bit cleaner in terms of what it does. And so this is a case where if you want an app icon and you can't afford a true designer, who's going to build something custom for you and you don't have the skills to do it yourself, this is something that gets you a, you know, 80% good enough, uh,
experience with an app icon so that you can actually just have something out there. You can have an app that looks good on the app store and get you started on your road to being a developer. Oh, I agree. Like the endless hurdles one, when you did that one and I saw it was an instant, like, Oh my God. Yes. Because it's,
It's not something I would have thought of, and I certainly couldn't have done it anywhere near as well. And I just love that one. It's one of those, it's like, yeah, I just want this to be the icon forever. Yeah, you're right about the Job Finder tracker. It's appropriate for what it is.
But like you say, it does feel like, oh, maybe revisit this sometime. But either way, I think the important point here is sometimes...
We think like, oh, the icon or screenshots are going to be easy and they end up being the hardest thing, right? Oh, yeah, absolutely. Yeah, because you have the freedom of choice of doing anything. And I know, you know, having seen you go through and do screenshots, for example, it's like, yeah, you can take these any direction you want and that's the problem, right? Yeah. Yeah, absolutely. Yeah. And that kind of... Go ahead.
I was just going to say, it's also useful for the marketing material, right? You can, you know, like, okay, I can describe on a piece of paper or screen what I think it should say, but I can't necessarily make it sound right. And I can use these tools to play with that.
Yeah, definitely. And that's kind of where I've done with some of the marketing for my most recent app, Bark, is I've definitely, I didn't have it generate anything because, oh man, the stuff it generates on its own is bad. And it was funny because I did have it do that once. And I was like, I literally said to the LLM, like, this seems like one of those really tacky Saturday things.
where it was like the black and white video of you like, have you ever done this? Yeah. It was just super tacky. So yeah, definitely don't trust them with...
Yeah, let's just go generate a marketing thing from scratch. But what I did find is similar to what I was discussing at the very beginning of this episode is being able to kind of pair market with it and say, I want to do this. Like, what are the kinds of things that I should be thinking about? What are the aspects of marketing that I need to cover? What are the bare minimum? Here is my budget. Here is my, you know, limited resources. Here is what I've got. What are...
my priorities? What should I be focused on? What should I really do with, you know, what are the kinds of things that I should be tackling and in what order? And with that, it does a lot better job. It's good at kind of coming up with outlines for you to fill in on your own. If you do something on your own, it is very good at
judging you uh you can kind of sit here and say like oh here for example is the app store description that i've written and it'll go well hey you probably want to mention this you probably want to mention that um here's what you should do to sell your subscription a little harder here's what you should do to do this um and i found it to be a lot better at that don't
let it go off on its own and generate stuff for you because it, it sounds very LLM driven, very, very tacky. And you're, you, you've all seen like things that are clearly written by Chad GPT. I was going to say a hundred percent. Yeah. Yeah. At this point, I think we've all seen enough on, on many different things that,
to, you know, it's like, yeah, we can spot them now, right? Yeah. Whereas bringing something that you've had and you've created on your own and having it
Not even have it touch it up, but more have it critique you, have it coach you, have it tell you where you need to patch things up. And of course, you also have the ability to tell it, no, I don't want to do this. I don't want to say this. I don't want to become too scammy sounding. I don't want to become too markety.
But having it kind of give you tips and pointers, I found that to be really useful in helping with my app marketing. You know, it's interesting because I have been playing around with Apple's AI services. You know, the text services that you can now get. The writing tools. Yeah, exactly. And...
I'm not sure how I feel about them. They sort of walk that line between this sounds unnatural, you know? And so it's interesting that you mentioned that. Yeah. Yeah. There's definitely, I think the takeaway from this episode is, look, folks, there's a lot of tools out there.
that can help you perform whatever task you need to do. And that's how you should look at this. I do think, in my own opinion, that is how you're going to get the most out of these. You know, be it code in applications or, like we say, the marketing materials, the designs, all of those kind of things. You know, definitely use these as an assistant. Like I said earlier, pair programming, pair whatever, critique.
you know, all of those kinds of things, that's going to be the path to, I think your greatest success on this, right? Absolutely. All right, Peter, I think that's it for today's episode. Where can everybody find you? You can find me in person, not AI. Oh God. Yeah, I know. Terrible. You can find me at peterwhitam.com and you can find this podcast and that at compileswift.com.
And I am at CocoType.com and CocoType on every social media that you can think of in the world. There's always new ones. All right, folks. Rest assured we won't be replacing ourselves with AI as hosts anytime soon. The ridiculous, crazy comments that you hear are naturally us and not a machine. All right. Yep. That's it, folks. See you in the next episode.