00:00:00 Welcome back, everyone to merge conflict, your weekly developer, podcasting about all things. Wait what? Huh. Hi. 00:00:08 What are you doing there? I I. 00:00:10 Thought I was in the. 00:00:10 Room by myself. 00:00:12 Wait, what is this land? This isn't even your apartment. Your house? What is going on? This. 00:00:16 Is in my. 00:00:16 How is this? 00:00:16 House. Where are we? Oh boy. 00:00:19 Well. 00:00:20 This is a real background. This is a real this is your iPhone 17. 00:00:23 Pro I'm freaking out everyone, but welcome to the show. Welcome to merge conflict. We're here. We're doing something for some reason. James and I are in the same physical space as each other, and it's awkward. Yeah, it's awkward. 00:00:35 You know, frankly, I used to live just about one mile away from each other and we still recorded this podcast completely remotely. We did a live stream maybe or something once together. We weren't doing video. 00:00:45 Yet maybe we used to have a meet up and for the meet up we would have to see each other and I'm stressing the word have too in that case. So you know, after the meet up, we didn't have to so. 00:00:56 We just did a podcast. 00:00:59 But now we're doing a it's kind of like a my little meet up where no one came, we've. 00:01:03 Had those too. Well, Heathers coming later. OK. Yeah. And then we're going out to dinner. So we're going to take Frank once a year. We drive up to Seattle and brought my podcast equipment. You brought your Mac and your iPhone, which is better than the cameras that I bought. Just a better setup. But we got this little nice, nice microphone that we're sharing. 00:01:05 Correct. 00:01:19 Yeah, I hope we're sharing. Maybe it only records you though. 00:01:22 No, sharing is caring so, but we come up once, once a year. Millie's over here. Chill. 00:01:24 OK. 00:01:28 And we it's our holiday like holiday party. Basically they have so. 00:01:33 It's a it's a tradition almost. I think we've done this. This might be the third time. So kind of a tradition. 00:01:37 Yeah. 00:01:38 And we stayed at this place specifically multiple years because convenient dog friendly, very walkable to her work. And then, yeah, you came over you, you took the bridge over the the ferry over and bridges over and major way it took 18 hours. But you did it. 00:01:45 Mm-hmm. 00:01:53 It always feels like 19, though somehow it is only 18, but yeah. 00:01:57 I think I think it took you just as long to come over than it did for us to cross multiple states to come your way. 00:02:03 I can imagine that like crossing the ocean is basically a state. So like going over the water, I I feel like I should be in like France or something like I. I always feel like the mainland people should be speaking a different language. That's much effort goes into it, but it turns out it's just an English. 00:02:10 Yeah. 00:02:18 Speaking country, but you can take the fair I love. When I lived here, the fairy was like the coolest part. You drive your car. 00:02:23 Under this ferry, it's like your car is on a boat and it like, goes across this very like Oregon. 00:02:27 And. 00:02:27 Trail. 00:02:27 It's fun. It is fun. I I spend most of my time in the galley though, so you know, just hanging. 00:02:31 Out with the. 00:02:32 Old bitter sales sailors talking see stories and singing sea shanties and doing that kind of stuff, you know. 00:02:38 Yeah, we're here. And today we're gonna talk about swift data and cloud kit. 00:02:44 What has become of us? I know what happened to me. I started writing some swift apps for, oh, I don't know. Random reasons, mostly just to learn it first and then one time you wrote a swift app and you kind of blew my mind. And we talked about it on the podcast. 00:03:01 And now you've written another like what? What is? I'm just so confused. Is, is it vibes? Is that's what happening? Is the AI in control of you? Do we have a safe word? If, like the AI is taking control? 00:03:13 Well, I wrote this app and then I immediately was like oh, I need to rewrite. 00:03:16 This stuff in C. 00:03:16 Sharp. So it's all mistakes, but it's learning. I think one of the things I was. 00:03:22 Doing a VS code podcast with Scott Kalinski from the Syntax podcast. There's so many podcasts happening in this mode. 00:03:28 Yes, and he was not about AI for learning, and one of the conversations we had was about learning new programming languages, new learning, new frameworks, and that how you can just, like, do it and then ask it. And I always talking about using different frameworks and I've been experimenting a lot with like node JS and react front ends blazor web assembly. 00:03:48 Runs for like simple static web apps. I have my two big Maui apps that I have on the App Store that I have been upgrading along the way. My skiing app and and. 00:04:01 My cycling app and also my timer app that still exist too that needs a proper Maui upgrade, but I was like you know what? 00:04:06 Excellent. 00:04:10 I have, you know, majority of maps show numbers on a screen, so I was like, what if Frank? 00:04:13 Say that you beat me to it. One in the series of displaying numbers. Wait a minute. Wait a minute. Did you find another number to display? 00:04:21 I found yet another number to display, largely this one, yes. 00:04:23 So many numbers in this world, so many ways to display them. 00:04:27 Now in the other apps, they either count up or down automatically by connecting to things, but this one you get to. 00:04:32 Manually enter numbers which is. 00:04:34 Delightful, putting the user in control. That's what I like to see. Do you have a bank account app? Won't it be better if you could just say how much money is in your bank account instead of having? 00:04:34 Lightful. 00:04:39 No. 00:04:43 To do things to change that number. Well, I thought about. No, I thought about. 00:04:50 Our podcast application that we built, kind of. 00:04:53 And the one of the reasons that I wanted to use that and test using SWIFT is I wanted to learn a little bit of SWIFT, but I wanted to just build only a Mac application. 00:05:04 And I was like, that's kind of cool. Just build it in the native Swift UI and it's just for me. And I wanted to use some of the new very super hot new APIs, right. And they want to worry about bindings or do anything. So I could have done it on Maui. Easy peasy. But I was like, I want to just try this. I don't want to learn these APIs just as is, which is really helpful when I want to use them in Mali. 00:05:12 OK. 00:05:16 Mm-hmm. 00:05:24 In C world, when I know the APIs, but what was curious about that application and we talked about in the pod was you told me to use swift data and I was using core data. What's the difference Frank? 00:05:34 Yeah. 00:05:40 Not much to be thoroughly honest. 00:05:43 What's the difference between XAML and C# code first? That's the big difference with SWIFT data is a code first way to do your database stuff in SWIFT. If anyone out there uses SQLite, hyphen, net you are very comfortable with the SWIFT data programming model because it's the correct way to do database. 00:06:02 Programming which is just declare your database tables as objects as CLU. 00:06:08 And then you get the database part for free. Basically you get the SQLite part. I'll admit swift data has a few more features than SQLite. Nash NET has and I've always been a little bit Jelly, which makes me think maybe it's finally time for sqlite.net version 2 to take all the things that all the things I've been inspired about from Swift. 00:06:28 Data because the old way to do it was you filled up a markup language. You used a graphical designer to do your core data in Apple, but that feels so 1990s these days and that's why I recommend to you swift data. It's the modern way, especially if you're doing vibe coding at all, because then the networks can just. 00:06:48 Get out some code for. 00:06:49 You code first, and there's been a lot of great, it's come a long way and there's a lot of great documentation and best practices on it as well. And the cool part that I found about swift data is that I wanted to learn and it did feel very natural using SQLite, Dash net because. 00:07:05 I've used that forever, right? So like coming in. It's very familiar being, you know, classes first, marking things up with attributes on it. It does have some very interesting things that it can do on the box, like it can do, you know, parent child relationships really easily, like list of data. Like I have a, you know, I have an album and it has a bunch of songs that just. 00:07:25 Can figure it out automatically without. 00:07:26 Yeah. 00:07:28 Hardly anything. 00:07:29 Sometimes a little too much magic for my taste. I I love it like it's relationship feature is the feature that I kind of want to steal and put into my own library, but it's a little bit funny because when you're doing like a one to many or many to 1, you can put the attribute on one side of that relationship. But don't you dare put it on both sides. It will get very angry at you and which side of that relationship. 00:07:50 What should you put on? Oh it man. 00:07:52 But does the documentation tell you which side? No. Does the is the documentation consistent on which side to put it on? No. And so there's still. That's why it's actually great that you're writing these apps, because it is. It's a learning curve. You have to decide for yourself what is the correct side and the correct side. 00:08:09 Is the one. 00:08:09 Side the one side so then you can. 00:08:11 That is correct. 00:08:12 Have delete proper. The deleting Cascades, cascading deletes. 00:08:16 And it also has this concept. 00:08:18 Of like offloading large data. 00:08:21 I gotta admit, you taught me that feature. I didn't know that feature. I I was just going to say I I just big data. I just put it in a separate table as a BLOB and then I, Jason, serialize it or come up with my own file format. Now you found some crazy attributes that just offloads it someplace else. 00:08:39 It's like external or something. It's like some offload, but basically an attribute and what it does is it it's kind of it's. I feel like it's kind of doing what you're doing, but just in some optimized way where it won't load it until you have to load it on demand basically and it will load it up. So it so that. 00:08:50 Thanks. 00:08:54 Way, if you pull an object. 00:08:57 You have to kind of explicitly pull that sub object to load it off and it's going to load it over here. Kind of like when you upload like a large file, you're like I'm going to put that in BLOB storage, you know. So but I I know the idea. So you know I have that reference to. 00:09:10 It basically just doing it automagically, but it's free. 00:09:13 Well. 00:09:13 Up to a point, but yes, it's free. You know the the, the one beauty. 00:09:17 Definitely sqlite's always been free. You've always been able to add a database to your app, but what I think you're saying is the syncing layer is free, and it's kind of clever how they do it. It's free to us as developers because it's charging the user the best way. It's actually coming out of their iCloud account, so the syncing requires that the user has iCloud. 00:09:31 Ah. 00:09:38 Code and it requires that they have a few bytes free because your data is taking up space in their I cloud. 00:09:44 So Frank, Frank, when he was telling me to go from core data to to swift data, which I think would have been good regardless is that you can use swift data out-of-the-box, vanilla, no sink, anything. It's just a database in the constructor of SWIFT data for all intents and purposes, it just gives you like a few constructor. 00:10:04 Arguments that you can pass in in one of those is if you want it to be cloud kit sync enabled. 00:10:11 Yeah, which is the default to, which is a little bit weird because you don't even have to pass that flag in if you just get all your entitlements and all the little magic things in the background. I didn't want to bring up that word. I'm sorry. I know it's it's it's a tough subject and they are nasty. I I promise you even even if you do file. 00:10:20 Yes. 00:10:23 You you do have you do have to set up entitlements. That is correct. 00:10:30 Your project it's not going to work out-of-the-box. You still got to do some work. Yeah, it's actually configurable backends. You can override a lot of parts of it. 00:10:41 You generally don't want to though, and you just want to use theirs. The good part is because there are iCloud public databases, iCloud, private databases, and of course you could just have on device local only, not synced with any of those, and so you can have these different contexts. It's one of those things. It's it's a nice little onion. 00:11:01 It starts out very simple. 00:11:03 Data sinking, unless you can hear entitlements right and then it just starts adding on and becoming more and more interesting. 00:11:09 Yeah. So the podcast app just does what we talked about. The first one, which is like I just have a database just like as you can SQLite, Dash net and it was just like you have a database. 00:11:17 Though and that's worked fairly well. Now I did run into problems early on. We talked about because I had big huge blobs of data and I had images and I was saving all this stuff and I was doing it incorrect. But I added these attributes and I figured it out. Super Smart documented it, good to go and it's working really great. I used that podcast application for all of our podcasts. The AI part is like. 00:11:38 The sliding windows are. 00:11:40 Oh, so close, so close. Almost 50% of the time. 00:11:41 So. 00:11:41 Not not there yet, huh? 00:11:44 Please write in if you find the titles or the descriptions of the podcast terrible, and then we can blame James's software, slash the vibe coding slash the AI because we are we are using some AI tech in in production as they say. 00:11:53 That. 00:11:58 In in Prod, yeah, we're using it for the titles, the description and the chapters as well. 00:12:05 And the longer so, the longer the podcast. That's the issue, because then you got to really worry about these sliding scales on these other things in the windows and the context. Because I'm using on device only, I refuse to pay pay for sweet, sweet. 00:12:18 We're both so cheap. That's what makes us good hosts. 00:12:20 I want to learn these APIs right? And then what? I'm also trying to do is once we get the transcript translated into a few languages and if if I'm around, I have time I'll like translate the YouTube captions into Spanish and a few other languages that we I know where people are coming from because you get those metrics, so might as well. 00:12:22 Yeah, yeah, yeah. 00:12:37 Translate. 00:12:37 It off topic, but I I still can't believe Google Google with all their money and all their AI horsepower. Don't just do all that for all the YouTube stuff automate. I know they'll do subtitles, but where is the translation? Where is the automatic chapter marks like they they've fallen. There's a lot of low hanging fruit for. 00:12:50 Yeah. 00:12:56 Google to pick up I think. 00:12:57 They could. The interesting thing dressing the part is what they do now by default is that they will, they will add auto dubbing in multiple languages, yeah. 00:12:59 100% code. 00:13:08 I think I saw that I don't know enough languages though, so I haven't been able to check it out. 00:13:13 I heard it's OK. 00:13:15 I. 00:13:15 Which they one of the languages was like idiots French like French. If you're an idiot and then you can like I'm. 00:13:19 Normal, yeah. 00:13:21 Like. Oh, yeah, yeah, yeah. I I remember one day like Debbie on teams like, opened, opened up one of the videos just like James is speaking Spanish. That's really weird. 00:13:22 That makes sense to me. 00:13:32 In Spain. 00:13:32 Did it match your voice? 00:13:33 Pretty well, do you think now, OK. 00:13:34 No, no, no. It was very. It was not super great, but shouldn't the translation were like good ish? But OK, it's a little bit harder cause their tech tech podcast like I bet if we did this or if we just did a normal podcast of us talking. 00:13:48 It would get most of the contacts correct, but because I was talking about like implementing and talking about C# and like the techie part has always hard to translate the context. So, but you're right, I mean I feel like that is a quick win is like a translations and things like that. I'm surprised YouTube doesn't do it by default however. 00:13:50 MHM. 00:13:57 Right. 00:14:08 I you know, a new videos uploaded like we just did this podcast about a bajillion videos were uploaded. So I'm wondering if they're. 00:14:15 Worried about just the throttle? You know that they can? Yeah. 00:14:20 They make plenty of money off of. 00:14:23 What was their profit the last? 00:14:25 It would be nice if there was like some threshold like oh this video got like 1000 views and then like oh, and now they do, yeah, like, OK, this creator, this thing, you know, this type of thing that would be kind of nice. I would love that because they do some captions but their captions like. 00:14:29 Sure. 00:14:39 Everyone has always told me are relatively poor and like when I look at them, they're pretty poor compared to putting it into a. 00:14:46 Even putting into word. Yeah, more say that if you put if you put a MP3, there's a dictation transcribe in Microsoft Word and it'll take an MP3 and it does a fantastic job transcribing it. And and what I'll often do is it like, I'm here on my Windows machines. I don't have my Mac App, obviously, but I'll take it and then I. 00:14:46 More state-of-the-art one, OK. 00:15:05 We'll take that file and then give it to copilot and just give it the same prompt and the copilot will give me. 00:15:10 All the cool stuff. So actually funny because, like, I can't remember what I was watching. I don't know. It was like 2B or Crunchyroll or one of the smaller streaming server. 00:15:19 Prices and they had the automatic captioning service, and it was garbage. It was bad. 00:15:24 Yeah. 00:15:26 Yeah. You know there there was wrong and things like, even like, grammatical things are just like, wow, you made that mistake. Yeah. 00:15:34 It's surprising. I would like for them to to to figure it out, but OK. 00:15:36 OK, we're bearing the lead. So, James, you wrote another app. I I mean I did. I was a professional app developer here and you were just some, I don't know, talking head for Microsoft. 00:15:47 I wrote this app on planes and trains in or going to and on in. 00:15:55 Fan. 00:15:56 Fantastic. So you wrote documentation and had an AI, right? Is this the culmination of all of our podcasts of I don't actually have to work anymore. All I do is file bugs and PR's. 00:16:08 OK, alright. OK. OK. So I had, so I had this idea, which was a weight management tracking app. I'm always very conscious of my weight and. 00:16:10 What do you do? What do you actually do? 00:16:19 I went into health kit and you can edit your weight and it kind of shows you your logs but it doesn't have goals. It doesn't it's. 00:16:26 You can't edit anything in health, can you? 00:16:28 No, it's not. 00:16:29 It's not really for human input, it's for machine input. 00:16:32 Yeah, kind of. And I don't, I don't have a smart scale and I don't, you know. So and I don't want to download and like I don't want to download some other app that's going to. 00:16:40 Look at my Geo look, you know, sniffs the stuff and get information. I don't know. 00:16:45 I feel seen. OK, we'll talk about what I'm using. 00:16:48 Yeah, they got all your data. So I was like, I'm just. 00:16:49 Gonna. 00:16:50 Gonna build my own and out for me. So I went in, I said, well, here's the type of app that I want. I want to be able to track weight up or down. You might be trying to bulk up weight. You know what I mean? You put on muscle weight. You know what I mean? Yeah. Same same. 00:17:01 Yeah, yeah, I'm jealous of those people. 00:17:06 So I want to have these goals. I wanted to be very simple, but I was like, you know what I really want is I want the ability to sync with health kit and I want local notifications like making sure I'm checking in. I want to be able to export my data. I want to have a little achievement system. And I. 00:17:19 Want to have charts and graphs because swift charts. 00:17:22 Yeah, OK, using APIs. Sorry, you just got me thinking with the notification thing. I was going to say, I hate those kinds of notifications, but it's. 00:17:23 I wanted to learn swift charts. 00:17:32 Not true. I would love a notification that said, hey, you haven't done your weight today or in the last three days or something. The problem with most of the health apps, I don't know how much research you did, but when you turn on notifications, all of a sudden you're just getting spam, spam, spam. And so, yeah. Bravo for actually just writing a custom app that gives you the correct notification that you want. 00:17:46 01 a day. 00:17:53 Yeah. 00:17:53 It's sad. That's what you have. 00:17:54 To do these days, though. 00:17:54 Yeah, it has a you set the date and time that you want like whatever time, but you can have a secondary one too if you it's optional. If you want like a nightly. 00:18:02 Reminder there too and then it will sync with Healthkit. So if you were to go and you let's say you had a smart scale that synced with health kit, that would suck that in as well. For some reason if you didn't want to use. 00:18:13 Your app pulls that in your app, pulls in Healthkit data too. Yeah, that's an advanced feature. The AI implemented for you two way bidirectional. 00:18:19 I did, yeah. 00:18:21 Bidirectional, that is correct. 00:18:23 Making me a little jealous, OK? 00:18:24 So so I wrote a PRD, a product requirements document with. 00:18:28 OK, that's Microsoft talk for functional spec. 00:18:31 A functional spec. 00:18:33 Using copilot, so I was like here's what I want. 00:18:35 And I said give me. 00:18:36 So one paragraph. 00:18:37 No, it was. You can see the GitHub issue on my repo is is quite large and I worked with it. I was like, here's the features I want. I said give me a PRD and as I do a little research on what's out there and I said I want this to be a modern Mac App, I only want it to run on sorry Mac and iOS app and I only want it to run on 26 plus. So I want modern liquid design. 00:18:58 Modern elements, you know nothing custom. 00:18:59 Give me that glass. Prominent button. 00:19:01 Give me the glass prominent button you like. Really modern? I will like research the docs do the thing. 00:19:06 And I was in the airport in Seatac waiting. We had a layover, so we were waiting there. And so I wrote up this PRD in the GitHub app. I didn't have any device. I didn't have any. 00:19:15 Laptop with me. You were texting me this entire time and you didn't mention you were also texting an AI. You were busy at that airport. I think you got more done at that airport than I get. 00:19:24 Done in a normal working day. 00:19:27 I may have, I may am. So I wrote this nice PRD up and. 00:19:32 I did make one flaw which was that I created the. I obviously can create the repo on my phone, but I can't like create a. 00:19:39 New swift app. 00:19:42 On my phone. 00:19:42 Right. And last time I really critiqued your last app because it made a mess of the workspace and everything, but you had an MCP to help you there. Did you have the power of your MCP? This. 00:19:48 Yeah. 00:19:52 Time on my phone? No. And that's calling like commands from EXCO. 00:19:57 Because your MCP was running on your. 00:19:59 Computer or some? Yeah. Remote one. OK. It was actually on the computer. 00:20:02 On your computer. So here I just have the GitHub app. I don't have any MCP's obviously not have a remote machine. All my machines are turned off. So when I travel, I turn off the machines fully so they're gone, can't RDP into them so they're gone. But I wrote up this this thing and I said I want you to build the, the, the, the, the, you know, project do this. 00:20:11 Good for you. 00:20:22 I said don't worry about tests. 00:20:23 You know, do a thing. 00:20:25 Don't worry about those. Just like do. 00:20:26 A thing. Please don't. 00:20:27 Make it a separate package. 00:20:28 Don't make a separate package as I do this and I created the issue. 00:20:33 You and I assigned it to copilot and I got on our nine hour flight. 00:20:39 OK. 00:20:40 And got to Japan. And it was like, here you go now. I couldn't do anything. 00:20:47 But it was a real project. It was like an X code project. OK, OK, so you couldn't do anything. You were. You were at the mercy of the robots. 00:20:50 We'll get there. 00:20:55 Yeah. And it's not like I can, you know, I. 00:20:58 I I can't easily like create provisioning profiles or do anything like I could set up. I can't like set up a CI CD right? 00:21:05 I feel like you can not on airplanes. Did your airplane not have? 00:21:08 Wi-Fi. I have one hour free Wi-Fi. 00:21:11 Oh wow. OK. 00:21:12 You are doing this on the cheap. I love it. 00:21:13 But but. 00:21:17 You know, I only have my iPhone. That's it. I don't have a Mac with me. I don't have any other device. I only. 00:21:21 The buttons are smaller, but you can still use them. 00:21:23 But I can't like get a provisioning profile for my Mac and like do a certificate. 00:21:28 Yeah. 00:21:30 I don't. 00:21:30 There's probably some way anyway, so, but I'm reviewing the code and like reviewing the output and I started iterating with it, so the initial one didn't have health kit, didn't have this, so I was like do this do this and we we and I said use swift data and I want it to be cloud. 00:21:44 Kit compatible. So were you actually getting builds out of it at this point or were you? 00:21:49 Just reading through the. 00:21:50 Code reading through the code, yeah, so. 00:21:53 I'm glad you're doing that. You don't. Normally. 00:21:55 Do that part. 00:21:56 Read through the code, understood. 00:21:57 The code and I put it down for a day, explored Tokyo and then we took a shin consent up to Nagano and that was quite distant. The free Wi-Fi on the train so I I looked a little bit more and and I added a. 00:22:06 Humble brag, OK? 00:22:12 Few more. 00:22:13 Features and I said OK, I'm good. I'll say I will get home. 00:22:17 In Oregon and I will boot up my Mac and I'll see what happens. 00:22:22 Because you can't build it because like because that's the thing also is the copilot runner in the cloud only as a Linux machine. You can't have a Mac or a Windows machine. 00:22:31 Yeah. 00:22:31 Now I could have set up a remote runner or something like that, but it's there so. 00:22:35 It would have been nasty, but we did outline the steps it would take to get an action in there that would upload a test light that you could download to your phone. We it would have been painful, but you could have gotten there. 00:22:40 That's that's five and yeah. 00:22:44 Would have been painful. 00:22:45 So things were looking OK when I I opened it up on. 00:22:51 Mac and it did not create a project for me. It created a package for me but nothing else. So. 00:22:55 What did it do? 00:22:57 Of course. 00:23:00 Did the package create an app? Cuz that's actually possible? I've heard with enough hacking. 00:23:02 Now. 00:23:03 It did not. 00:23:07 So interestingly enough. 00:23:09 It there is like a command line craziness that lets you do it and it did actually run the. 00:23:14 App. 00:23:14 OK. 00:23:15 It did. 00:23:16 Yeah, OK. Yeah. 00:23:16 But it's really you shouldn't do it right now. So I created a new project, imported all the things, but I didn't add it as a package. I imported all the files manually. You did this? Yes, I did this, yes. So it's a proper project. You open up the X project, it works. There are unit tests and UI test because it wanted to didn't listen. 00:23:27 Good job. 00:23:36 But it did it anyways. Yeah. So I worked with it over the holiday break. This was my holiday Thanksgiving. Heck, because we got back on Thanksgiving. I'm ahead of you by a lot of time. Yeah, a lot of time. So holiday hack. It's up, and it's good to go. I. So what ended up happening is. 00:23:43 So ahead of me. 00:23:46 A lot. 00:23:51 It was relatively solid. It did an onboarding process. It has charts, graphs. I'll put a link to the test flight so people can sign up if they really want to onboard some external folks down there. I haven't launched app yet. I made a tiny app icon with sonnet 4-5. It looks terrible. I have now paid someone on fiver that kind of like the sweat band. It's like a little. 00:24:12 It looks like you cheated. You took my eyeglasses one we both like. We both like that back. Happy face on. I just love putting happy faces as app icons. 00:24:17 I. 00:24:20 I may have referenced your app as inspiration for the app icon, so it looks like a little BLOB with eyes. 00:24:27 But I was like, good enough. I just want to have an app icon so the app is this. It allows you to track your weight, it can read data from Healthkit, it can put data in health kit. You can export your data to CSV. You can, you know, use kilograms. Pounds, not stones. Sorry, I could add that of course. 00:24:47 You have charts and graphs. It gives you sliders. It has little achievement systems. It will show you like your consistency of your updates. Eventually it will actually do planning. So if you start to track consistently and you didn't, it will say we think you'll hit this goal in this time. It will give you like an estimate and things like that project. 00:25:03 Yeah. 00:25:06 And it has a bunch of other charts and little graphs and things like that as well, and I even added store Kit 2 into it for a pro version, Frank. 00:25:14 For the app, that's only for you. You you put store Kit pro version in. OK, yeah, yeah. Is it just for you or is that a lie? Now, I think it's for everyone. 00:25:23 As for everyone? Yeah. So for 299 you can upgrade and get health kit and data export and a few other achievements is there and it has cloud kit sync in it, which we'll talk about in doubt because it's not as easy as you think. 00:25:29 Hi. 00:25:33 BB. 00:25:38 So we we started this conversation saying you normally just do apps with one number in them, but this app has actually a lot of numbers and I honestly I I don't want to give the AI too much credit, but like you are the one designing it. So I'm going to give you some credit like I wasn't expecting the achievement system. That's something I never think to add to my apps or anything. 00:25:57 Did that just occur to you because you're on a train and you're like, I need? I need positive feedback more than just the health benefits of losing slash, gaining weight you wanted. 00:26:06 Yeah. 00:26:07 So that was just it came up to you or that the AI. 00:26:09 Suggested no, no, no, no. Like in Japan everything is very happy and very organized and polite. And every person and every interaction is delightful. And I was like, you know what, like adding your weight isn't, like, necessarily delightful. And unless it's gone. 00:26:11 OK. 00:26:17 Hmm. 00:26:27 Down or up based on your preference of. 00:26:28 We need so I was like, how do I add something delightful? And I was in a lot of Nintendo stores and the Nintendo Museum, and I was like, well, what do I get in games? I get achievements. Let me just add that into the app. So I I put it in, but I asked it to figure out with all the data and all the things will be smart achievements to add. So it planned the achievements. I don't got time for that. Yeah. 00:26:39 4. 00:26:45 Sure. Sure. Yeah, yeah, that's fine. Time and time. I I sometimes feel like I lack creativity because I'm. I'm not a very achievement based person. I'm not great at writing game stuff. Yeah. So I'm always looking for the brainstorming ideas and that that's a part of a I I definitely. 00:26:59 A lot of yeah, I really appreciated that. I use weight tracking apps. I got. I got a really bad medical report from my doctor. My doctor's like, you're going. 00:27:07 To die tomorrow. 00:27:08 Oh, that's. 00:27:08 My gosh, probably not going. You're you're exaggerating, Dr. Yeah, because, like, maybe you should eat one vegetable a year. I'm like, that's pushing it, right? So I actually, I've been using weight. 00:27:20 Tracking apps now for the last couple months and I'll say like. 00:27:25 You get a delight from it when you enter a low score and it's your lowest score in a couple of weeks or something like that. You're like, yeah, I did great. But then there's the other days where your weight actually goes up by like half a pound or 1 LB, you know, like I knew I should have starved myself before standing on that scale again. So not to just keep saying it, but I appreciate the achievement. 00:27:45 System something besides just the weight? Just something to keep you using the app and hook you. 00:27:50 Yeah. 00:27:51 Into it and then achieving some more just about consistency and about like hit, you know, hitting goal. It's like great you know. So I think that. 00:27:58 I was able to work with it like you know, I think that I got really far and then I opened up VS code. I wrote this entire app in VS code, you know not in Xcode. I do find the Xcode AI subpar for like what's out-of-the-box mostly. 00:28:13 We we won't go there. Maybe we'll do a whole episode on it, but it is subpar and it's it's not just the X code. AI like, I've integrated open AI in X. 00:28:17 Yeah. 00:28:21 Code and it seems to do a weird job at it too, so I I tend to do if I have a big at it I do. 00:28:27 It in VS code also. 00:28:27 Yeah, yeah, it just seems to be better, and then it can run all the builds and launch all the stuff. It's really good at it. It's it's relatively straightforward, with or without the MCP server as well, like it's just running commands. It can run CLI commands just like Xcode is doing. And that's a beautiful. 00:28:41 Part of it. 00:28:42 As much as we've talked about MCP servers, I tell you I still have not run one ever. 00:28:47 No. 00:28:49 And not even like a a web hosted one. I I have 0 MCP. I'm going to get that T-shirt 0 MCP. 00:28:49 That. 00:28:51 Yeah. 00:28:55 My favorite 1 is this Apple docs one because it was very helpful with the cloud kit sync. So what's the one nice thing that Xcode does here is that if you just let Xcode manage everything. So I was in this world where I was like. 00:28:59 OK. 00:29:11 I'm going to let Xcode do everything, including Xcode Cloud builds as well, so I was like I'm gonna. I'm all in on this app because this app to me is not necessarily throw away, but I was just like, let me just. I haven't used X code in so long. 00:29:14 OK, OK. 00:29:26 The gilded path you just wanted to take the nice easy that this is the path Apple mows every day. This is happy path. Where I'm going to take that path. 00:29:31 Happy path. 00:29:33 So auto provision, auto certificate auto, auto, auto, you know, cloud Kit integration, it's like create a table give me a name, do a thing and it's like. 00:29:36 Yeah, I know that feeling. 00:29:45 It's like I learned a lot about build phases and release phases and phases and schema. I was like it's, you know, you think CS project was bad, like, dude, I don't the X code project and files. There's random files. 00:30:00 I don't mind build schemas. What I mind is they seem to move the file that they're stored in all the time and I never know which file to check in to. 00:30:07 Get hub and. 00:30:07 The UI has a bajillion different. You think, like you know you right click in your settings and this is like, you know, properties for your project. You know, for a C# or there's, like so many things. It's really complicated. But I will appreciate that you can create a. 00:30:21 Cloud kit database. Basically in no time at all. Now how you manage that schema. 00:30:25 Yeah. 00:30:28 We'll talk about that in a second. It is all there. So it's it's all now isn't any guidance, it just assumes that you know the identifier that you should have and all this other stuff, but. 00:30:38 Yeah. And how you should name it because there's naming preferences there. Have you learned the difference between development and production yet? 00:30:44 I just did. Yeah, so. 00:30:47 So I was really excited because Frank was like, hey, you use swift data. 00:30:51 Yeah, everything syncs automagically. Magic magic. It just works. It doesn't just work in general. You. You actually have to know. Like, this is the thing where, like, you know, using is not going to teach you that you need to. Actually, it did tell me to go to the dashboard, but it's not going to teach you how to do certain things. But there is a cloud kit. 00:30:54 It just works. 00:31:11 Dashboard. Yeah. On your developer.apple.com account, it's not inside of the app developer Connect thing. It's in the other one with the provisioning profiles and certificates. It's very come on mush it together. 00:31:23 Very confusing honestly. 00:31:28 But inside of there is a very complex dashboard that has schemas and you can query data and you do a. 00:31:35 Bunch of stuff. 00:31:37 You can log in as different users to query data too, which is really important because Apple I think did security pretty well with these cloud kit things where I as a developer I may sell to 1000 people who are using this database. I can't read their data. No no private private. 00:31:54 Which makes debugging a little bit complicated sometimes, because if you mess up your data, you're like I'm just going to go look at the actual data. No, you're not. But if I use a separate account for my Apple business stuff and my Apple user stuff, and so I I actually have to take advantage of their Switch user feature a lot. 00:32:13 Log in as myself and then I can actually see some real data. 00:32:18 So I was really confused for a while because. 00:32:20 I. 00:32:22 The first thing I did is I got everything set up. I decided to use Xcode cloud build because I was like, let's just see what this looks like. I have no idea, right? I've used every other CI system in the on the moon. I almost always use get up actions and I was I was. I was ready. I was inside of. I was like, let me. I'm like, no, let me just click the button. 00:32:39 Yeah. 00:32:42 I set it up. 00:32:42 Pretty good, right? I I think it's good. OK, now you don't feel that way, OK? 00:32:47 It's. 00:32:49 It's it's, it's it's designed for you writing an apple. 00:32:53 IOS Mac App don't don't go building your Linux kernels in this thing. You're going to have a hard time, but if you are writing an Apple iOS Mac App, yeah, and you don't have any dependencies and you're not doing anything fancy with get it, it's going to work. 00:32:55 That's it. 00:33:02 Paved path paved path. Yeah. 00:33:09 For you. Yeah. And this was a really simple it's like just give the app. There's no widgets, there's no extra extensions or anything. It's just it's just an app for. 00:33:16 Now sign it, do a thing and then it does make it really easy to deploy to test flight as well. So that was cool and it does build Mac and this and it handles the certs and what I was confused is is almost too magical because I'm like where how do I choose the cert or The thing is like X codes doing it. It's like X code is managing everything and I was like. 00:33:33 MHM. 00:33:37 I don't know. I was like, did it even create the identifier? I was like where I said, where's my provisioning profile, where as like apples figuring it all out and I was like, I don't know, X code you're doing too. 00:33:46 Much. 00:33:47 And and it is. It's a little inconsistent too, because like they, they have their team signing certificates where they'll use basically wild cards and they'll do all that while you're doing development. But those wild cards don't necessarily work when you're accessing a cloud kit thing, and they certainly don't work when you're doing a test flight thing. But is there a thing in test flight to? 00:34:05 Choose a certificate. No, no. 00:34:07 So you just have to have a little bit of faith. Faith in Tim, Apple that he did the right thing and codes that correctly. 00:34:12 Correctly and I did have faith and it, and it did deploy to Testflight and I was very happy. OK. And I opened my app. 00:34:19 And it worked. I mean obviously ran in the simulator, but I was like it worked and it worked on my phone. Is really great and I was like this is cool and I was like, well, I'm going to test out this iCloud sync. I'm so excited, Frank. 00:34:24 You sound surprised. 00:34:33 Just says it works. I mean it does. I'm a little bit nervous. You. I feel like you're leading into something here. 00:34:39 You're making this sound dramatic, but like it does. Hashtag just work, right? 00:34:44 So I deleted the app and I was like I'll reinstall the app on all my data should be there because Frank says my data should be there, no data, there's no data at all, there's nothing. 00:34:52 Did you give it a moment? 00:34:53 To sink, of course. I I did this like I did this for like a whole day, by the way. 00:34:57 Well, OK. Also, I should say there's a. 00:35:00 Lot of little. 00:35:01 Gotchas when you try to use the cloud sync like you are required to use nullable fields in all your objects because when it's doing it's syncing, it doesn't guarantee the order the tables are synced. So the things might come in. 00:35:14 Dependencies might come in later than other parts, and when it's downloaded, so basically no everything. 00:35:20 There's that big gotcha. The the worst one is that when you run your app in the log output, there's 8 billion. They just spam the log with cloudkit messages. So even if there is an error, chances are it's scrolled by and you never saw it, and it's just going to get lost in the noise. So I find it a little. 00:35:37 Hard to debug problems, but. 00:35:40 If I want to know if the cloud kit is working, what I look at is the log and is the log shooting by 1000 messages a second. It's working great. 00:35:47 I should say, actually the very first Test flight build just crashed on launch. 00:35:52 Hmm. 00:35:52 And I so I did get a report and the problem actually was with the null fields. Was it? Yeah. So so I did. I did. I said, I said, I said, hey, AI, I said, hey AI, this is using cloud kit. It's giving me these. 00:35:54 How to report though? 00:35:58 What? 00:36:00 Fatal error. So you left that code in. 00:36:06 Errors I was. 00:36:07 Like Ohh Cloud Kit has all of these restrictions. So just because you're using SWIFT data doesn't mean it's cloud. 00:36:13 Compatible. You do. That's that's not the only one. There's defaults and other stuff. There's a whole bunch of other things as well to be considered. 00:36:20 So there's that aspect of. 00:36:22 It swift just works. They say the type system is that strong. They can detect all this stuff, but they don't. No. That's probably the hardest one. It's. It's why I usually suggest to people that they get cloudkit working immediately because it does change how you design your database structure. 00:36:23 Except this one. 00:36:27 You know, yeah. 00:36:39 So. 00:36:40 Through that process, though, I on my simulator they've made it really good to be able to sign in with iCloud on your simulator. 00:36:50 Yeah, yeah. 00:36:51 That has improved, hasn't it? That used to be kind of terrible. 00:36:53 Has. 00:36:54 It just work. 00:36:55 It's funny how little I use the simulator nowadays. I've been going to device so much. OK yeah, that does work. 00:37:00 Well, I guess that works because the difference is this. Is that what I found out is because I kept trying to query my data and it's like, no, nothing there, nothing. Nothing's there. There's a few there issues I've run into which a bunch of people did. 00:37:11 Did you log into the console to see if it was there or OK? Nothing there. 00:37:13 I did. There's nothing there. And then additionally there is no schema there. 00:37:19 All right, let me talk about this. So yeah, so so the other thing that was very fascinating in this world is I kept, like trying to have, like, now I have like 3 databases and like, I have to hide them. You can't delete them. There's there forever. OK, so. 00:37:20 I see. I know what happened. 00:37:37 I I was like, OK, let me just log in and I asked and I looked on Stack Overflow and I asked added a bunch of stuff and what it ended up telling me, oh, I got a notification that I need to log my weight. It's 516. That's when I said, oh, yeah, so. 00:37:53 Something ended up happening where you can in the old days you could use core data with cloud kit, but then in your code you'd have to say hey, update, update, upload the schema with Swift. Yeah. So with SWIFT data though it will automatically update the schema. 00:38:05 Oh, OK. 00:38:09 The schema are your your columns in your tables which you would define. Maybe use EF core. You would scaffold this out, you'd write something. 00:38:12 MHM. 00:38:17 Indices 2 uniques and all that stuff. 00:38:19 Thanks. 00:38:20 So if data just does it for you automatically through the attribute systems, bingo bango, you're good to go. 00:38:25 Well, what I didn't realize was that if you run in simulator on device locally, that will then upload your scheme automatically to development. What I didn't realize is that if you want to test in production, which would be test flight, you actually have to publish your schema from Dev to production. Now. I was like, well, let me even see if it just. 00:38:33 Yes. 00:38:45 Syncing to Dev right. That's kind of important. It was, which is nice. However I over. 00:38:55 Maybe had too much swift data so I I refactored some things which was nice and the problem I had was that I couldn't still query the data. 00:39:07 So like I would uninstall, reinstall the data would be there. I was like I couldn't query it in the Council. Now I'm the same person, so I even tried to spoof myself and that was my first thing. But you have to switch between public and this and that, and like all. 00:39:11 OK. 00:39:13 OK. Yeah, you try that. OK. 00:39:18 These things, and it kept saying that like row name or whatever it. 00:39:22 Can't be this. 00:39:23 Ohh, I've seen this this is this is a weird bug like I'm just going to call it a bug. Apple says it's not a bug, it's a bug because. Did you have to do what everyone you have to add a manual index on the stupid row ID or something like that? Something completely unrelated to the actual error message. 00:39:35 That is correct, yeah. 00:39:39 Yeah. 00:39:40 Yep. 00:39:40 Not a bug, they say. 00:39:42 Not a bug, only for like ever. Ever, ever. 00:39:44 Every everyone for every forever. 00:39:46 And everyone on Stack Overflow is pisssed and apple things like I don't you have to add under score under score row ID to the row name as an indices and that's so that you have or else it will not work. It'll sync and stuff but it will work. 00:39:54 I don't get it. 00:39:56 I don't know that it doesn't make any sense. 00:40:03 We should be clear, like it works fine. The console doesn't work, the debug console doesn't work. Oh, it's so dumb. 00:40:07 Council yes, park. 00:40:11 So it it it was there now. 00:40:16 I then realized I had to publish that schema and you click a button. Now what? Apple maybe told me or didn't tell me is that once you published said schema, you better make sure you're right because you can add, but you cannot remove. No, it is. 00:40:26 You better make sure. 00:40:27 You're right. 00:40:33 And now? 00:40:35 Published forever and and. 00:40:38 Now my heart does skip a beat every time I press that button. 00:40:41 Now, technically Frank, you can version now default it'll default version. So if you add a new thing, you only need a version. But if you were to change a name or do a thing. 00:40:52 The You can version and how you version in code is you create a duplication of your entire class and say V1V2V3. So ridiculous this is crazy to me that you'd have. I can't imagine some of these apps have been around forever that are using this. I must have like version 500 of person. 00:41:06 It's. 00:41:09 Yeah. 00:41:12 'Cause, they're like changed and modified it so much. 00:41:15 Well, this is where the nullable columns come in. What you really do is you just keep that column is nullable, create a new column and just start using that one and have a backup property that maybe reads the old column first and then the new column. 00:41:25 That. 00:41:27 We all have our terrible data migration ticks. Can I tell you a terrible one about that production thing real quick? This is long before I wasn't using core data, I wasn't using SWIFT data. I was just using cloud kit because you can do that. It's fine, it's CK blah blah blah namespace in a in a Xamarin app and day one. 00:41:32 Sure. 00:41:39 You can use them. 00:41:46 My app crashed on launch for every single. 00:41:47 Oh no. 00:41:49 Sir, I I messed up my error handling, but most the fundamental problem was I never published to to production. I didn't know you had to publish to production. No, no. 00:42:00 I didn't tell you anywhere, even when you go to, when you go to production and you have a deep a debug like development schema, it's not like you need to publish your thing. It just greys out, it Grays it out, so you can't. You can't, it just leaves it there. Is it the publish or whatever so it just Grays it out? Like what? 00:42:07 Yeah. 00:42:18 Are you doing? 00:42:19 We don't have our Miguel bug. 00:42:22 Belle. But if I had my Miguel Bell. 00:42:26 I I got the nicest message from love your app. It crashes when I. 00:42:29 Run. 00:42:30 It. 00:42:31 I'm like, thanks, Miguel. And I'm so sorry. 00:42:32 Yeah. 00:42:35 So really for super fascinating now the interesting part is I ended up adding a few more arose for the achievements and things like this later and then it does give you a nice diff when you go to publish a second time. So it gives you exactly what you're doing and that's cool. The funny part is you actually need to. 00:42:46 Yes. 00:42:50 Published the not a bug, bug, under score, under score row ID. You need to publish that also to production too in your indices as a while to me so so that worked. So anyways it's not all working inside the application, I will. 00:43:00 It is, it really is. 00:43:04 This I did publish. I published something and then I removed a bunch of columns I no longer use them in the app so they're still there, but they're not used, so that's fine. They're no longer synced because it's no longer looking for it locally, and I remove those properties there. 00:43:23 I I fully don't understand their sync system, so I don't even know if you remove it from code, it might still actually come down because they might be pulling the online schema, not your app schema, but irrelevant. They're all malls hopefully. 00:43:33 It might, yeah. I deleted all. I deleted all the data from all the. They're all, they're all nulls. I deleted all the data. So no one's using it. So it's all good before I test flight in the test flight folks have said it's everything. 00:43:44 Again. 00:43:46 So then I did that and then I have an onboarding screen. So then I said, hey, what I want you to do is like in the onboarding, like see if there's I cloud data and then just, you know ingested in so anyways it's all working really good. It's a very. 00:43:57 Yeah. 00:44:01 This is a system that I would never. 00:44:03 I feel like I would never use this system if I was creating real which the cloud kit and no, no SWIFT data. Fine, but cloudkit the sink do it now. 00:44:07 System swift data. 00:44:10 OK. 00:44:12 Oh no, it's hot. 00:44:15 I don't. 00:44:15 Think so? It's because you haven't written cloud sync in a while. It's. Trust me, no matter how bad this is, doing your own manual sync is way worse. 00:44:23 I don't know. I feel like something like a. 00:44:26 Back in the day, there used to be a good third party. 00:44:28 Alternatives, but all of those have shut down. 00:44:30 Now. 00:44:30 Yeah, I guess there's no. 00:44:31 We're living in the weird world where, like, no one has good managed databases anymore for a time that are doing mobile development, they're every company felt like they wanted to be the managed database. Yeah, they're all gone. 00:44:42 Yeah, parse and. 00:44:44 Now it's kind of. 00:44:45 That's true. 00:44:46 Sad. Yeah. I I mean it's good. And then it's also bad because like if you wanted to put this app on anything else. Yeah. Good luck. 00:44:54 That is the biggest downside, so you could totally report that app to Maui, but that data you're gonna. Yeah, you're gonna have to write some ugly, ugly code. Yeah, because fortunately, even without, like in a Maui app, you could access cloud kit directly. You could pull that data down and resync it. Yeah, but your Android app cannot. 00:45:12 Yeah, yeah, my windows. 00:45:14 No. 00:45:14 Yeah. And honestly, sometimes it's a little bit confusing because I think Web developers can use cloudkit. 00:45:21 But Android cannot just because that is the terrible world we live in and. 00:45:23 Yes you could. 00:45:26 You could you could create and you could create an API that pulls it down for the you. I mean it's that's just bad news because honestly, at the end of the day, like everything is tied to identities, it's private, it's hidden. It's a whole thing. That's what it's good for. So if you're only building Apple things, this is then that's what this was, my experiment. 00:45:32 Yeah. 00:45:33 Right. 00:45:38 Yes, yes. 00:45:46 That was the experiment, right? That that was the experiment that I wanted. One was only building map. Now what does it look like to be? 00:45:48 OK. 00:45:53 In the apple full like bubble right, I'm like all in is all swift UI, all swift data, all swift 6 Swift I went I did a I wrote the code in Swift 5 and then I migrated to SWIFT 6. So alright no. 00:45:55 Yeah, sure, yeah. 00:46:04 Oh. 00:46:06 And I have more warnings confirmed. 00:46:10 It fixed all of those, so I did. 00:46:13 That the plus sides of Cloudkit are also its downsides. I love that it just has users logged in so you don't have to say about go create an account and all that. Now if you're a good marketing person, you probably do want people create an account because then you can add them to a mailing list and you can start badgering them and but I'm a bad marketing person. I just want my users to be able to use my software. Call me. 00:46:22 Just works. 00:46:32 Crazy, and that is the biggest problem. Like, I actually really love swift data and cloudkit. The biggest problem is it's useless for Android and all the other things and it it stinks because as little as I do write cross-platform apps, I still want to write cross-platform apps. Yeah, I I don't like. 00:46:44 Yeah. 00:46:51 Yes. 00:46:53 Being locked into the Apple ecosystem. 00:46:55 Yeah. And then you could create a separate system and this one could remain the same, but then you can't connect the data you your users on multiple Oses aren't going to, I mean. 00:47:02 You had one problem, now we. 00:47:03 Have two exactly. Yeah, they would have an app, so that's cool. 00:47:08 I'm. I'm still jealous of you because, like you, you are just pumping out the. 00:47:10 Looks pretty nice. 00:47:12 Apps, it looks good. It's one of your best numbers on the screen, I mean chart wise I remember how much time you spent on the last chart when you're working on that and you're just like, oh, here. By the way, here's a chart three different lines. There's a trend line supposedly that shows up eventually. 00:47:19 Yeah, yeah. 00:47:25 Shows up. Yeah, it's just there. And it just did it automagically. I do think this was also cool because the other experiment here, this and like I big call this my big this is my big swift experiment. Holiday Hack was that I remember you telling me maybe six months ago. 00:47:35 OK. 00:47:41 You're like a you're like, AI sucks. So swift. 00:47:41 So. 00:47:44 Kind of does still, but OK what do. 00:47:46 You think you look at the code you tell me the code. I think. I think the code looks pretty good. OK, I think this one. I think this one looks a lot better. 00:47:48 Yeah, fair enough. 00:47:54 Than the other one. I'm not going to. OK. I I can't defend myself because I don't remember my exact words. But what I it used to hallucinate swift function names. 00:48:04 Constantly. It's like I think that functioning exists and like it doesn't exist, buddy. It just doesn't. So they've gotten a lot better. 00:48:08 Yeah, no, this looks good. It's kind a lot better. Yeah, I think so. I think something. I used a lot. 00:48:12 Of GTA51 sonnet 4-5 some Gemini 3 on it I went back and forth based on what I was doing and asking. It is really. It's also a lot better at explaining it too. I I felt like I was getting really knowledgeable deaf like definitions of what the code was doing and even like links to documentation and things that were really relevant. 00:48:14 Yeah. 00:48:31 Mm-hmm. 00:48:34 So I did feel like I was doing a good learning exercise. 00:48:37 Doing all of this made me want to basically just go back and write more C# code, though at the end of the day. But you know when you're writing something for an experimental learning opportunity, it's there. And honestly, I'm really glad I did this because while I'm not going to become a swift developer like this, not my passion and I don't want to live inside Xcode. 00:48:45 Yeah. 00:48:55 Then inspire you to write another one. 00:48:56 No, I did learn so much about some of the new swift stuff actors and published and the data syncing and the binding that they have. Obviously SWIFT data and cloud kit like I think it's so important. 00:49:11 To push past what we know and what we're used to, and really my next experiment is to go down the Kotlin path. 00:49:21 I was going to actually. That was exactly what I was going to ask. Are you going to go down the the Google Golden path here? 00:49:26 I think I think I might. I'm really interested in the world of Kotlin. I'm really not excited about opening Android studio too much. 00:49:32 What do they ask for a managed database? 00:49:35 Π fire fire base, that's a Google thing. Firebase. Yeah. So it would be down that path of fire base. But I'm interested in the experiment. I don't think they have a a cloud build system, just to see what that looks like going forward. And. But they also now have Android compose, which is a composable like Kotlin. 00:49:37 Is that a Google thing? 00:49:39 Oh. 00:49:55 Forward instead of XML. So I'm interested to see how that goes, so that might be my next. 00:49:56 OK. 00:50:00 Secondary holiday hack but I come with another app idea. That's OK. 00:50:03 So you're not going to repeat. 00:50:04 This app no because I don't. I can't get the data sync. 00:50:07 That's real science, though, feature for feature. 00:50:08 That's true. Oh, my gosh. Yeah, there is. They do have. Do you have Google health? So maybe. 00:50:13 We'll see, yeah. 00:50:13 No, I didn't. I just wanted to make fun of you. No, I'm again. I'm just jealous. You're. You're pumping out the apps. This isn't the first weight tracking app out there, but it's the first one tuned to what you wanted. And as developers, isn't that our privilege? 00:50:25 That's for me. 00:50:30 Congratulations, the app actually does look good. I actually I haven't gotten to run it on iOS yet. I've only run it on Mac and he has not tuned it all for Mac, he said. 00:50:39 But it worked great on Mac, so you know. 00:50:43 You don't actually make much money on the Mac App Store, but if you want to release that Mac version, you'd be fine going for. 00:50:50 Right. 00:50:50 It I'll see what I can. All right. We're going to leave some food because we're in person right there. Yeah, yeah, yeah. Gotta eat. Alright. Well, thanks for tuning in. Like subscribe to all the things, whether you're watching us here on YouTube and at the surface or listening. 00:50:55 Might as well eat. 00:51:02 To the sweet, sweet sounds of James and Frank, but that's going for this week's merge conflict. So until next time. 00:51:07 I'm James montemagno. 00:51:08 And I'm Frank Krueger. Thanks for watching and listening. 00:51:11 Peace now. He's gotta hit the stop button inside and his Mac. 00:51:14 Uh. Somewhere without looking away. Bye.