Daniel (00:01.454) Hello, hello, hello. Hey, Dave. I'm good, I'm good. I am exhausted still from my trip, but I'm also super happy because it's been an awesome trip. Dave (00:04.062) Kia ora, how are you? Hey! Dave (00:13.854) That's great. That's great. And in my understanding is. Daniel (00:15.726) And I did actually, like, you know, like when, when I realized how I would be recording the Wednesday before my trip and also the Wednesday after my trip, I was like, will I make it? But yes, I did make it. I, I like last time I told you that I had a bout of illness and I was unsure if I could make the trip and I got healthy before the trip. And so, and I'm back and I'm Dave (00:29.406) Brilliant. Daniel (00:44.718) I'm exhausted, but I'm not, you know, sometimes when I do a trip and then you come back and you're just like, like unable to do anything, like I'm able to do some things. So I'm like just by, just by feet hurt. Dave (00:53.21) That's cool. So your trip was to the F1 in Barcelona, right? Daniel (01:02.51) That is correct. I went to the Formula Gran Premo de Barcelona in Barcelona, Catalonia, actually in a small town called Montmeló that is a suburb of Barcelona. And my hotel was in the neighboring village of Mollet de Valles, or Valles, I guess. And... That's about like five or six kilometers away from the track and there are no real footpaths between those two villages. There's just a highway and lots of industry. So I have experienced a lot of weird like... Dave (01:36.99) What? Right. Daniel (01:50.126) countryside, I guess. It was super fun, but next time I'm going to do, like if I ever go back to this track or more just like to any Formula One Grand Prix, I'm going to take, like put more effort into finding out the transport story basically. Other than that, it's been amazing. Hang on, I dropped my microphone. It's been amazing. It's been so cool because you just... Dave (02:09.086) Mm -hmm. Dave (02:12.688) That's awesome. Daniel (02:18.414) You just go there and then like you walk six kilometers, of course, and you think, wait, am I still even like going in the right direction? Like I'm on a footpath that is just like going through a field. Okay. I'm gonna, I'm gonna turn around in the next 200 meters. And then suddenly you see in the distance, you see the grandstands and you're like, these are the actual grandstands of Barcelona, Catalonia, the racetrack. And I'm like, my God. And you come near and they scan your ticket and whatever. And then. is like you are, you're actually there and you this is the thing you've seen on TV and in the video games and everything. And it's actually a real thing where actual like cars drive over the track and that's like so cool. So I've, I've been there three days, Friday, Saturday, Sunday, and especially Friday, Saturday. There wasn't so much going on. And that was like really cool because I could just, I could just go everywhere. Like there wasn't like the huge crowds of people yet. And so I could, I could Dave (02:52.222) Mm -hmm. Dave (02:59.07) That's awesome. Daniel (03:16.334) basically just like look at every like at every corner that I could reach like from the from the sides and like wonder just look at everything see the sight lines where do I want to sit where do I want to watch and and just like like explore the the whole board and whatever's around the track like the food trucks and everything like also like I like I was able to like you know like pay 12 euros for a sandwich that kind of thing Dave (03:38.334) Right. Dave (03:43.358) Captive audience price. Daniel (03:47.374) My hotel had free breakfast. So for Saturday and Sunday, I had really nice sandwiches in my bag. The owners really didn't didn't mind at all if I would if I would like make a few more sandwiches while I was making myself a breakfast. And yeah, it was just really, really cool. And then like seeing a Formula One race and also Formula Two, Formula Three and Formula One Academy, which is the Dave (03:56.574) Brilliant. Dave (04:03.902) That was great. Daniel (04:15.598) which are the junior classes basically. That was just really cool. Like I'm not as versed in these classes as I am in Formula One, but you know the names and it's like, wow, this is really a thing that is happening right in front of me. And it's just like really cool feeling. And then also just like, how do I say this? Like the whole vibes, like the loudness of the engines and also they're just like the people that you experience, but also. the how do I say this? What is different between watching this on TV and actually being there? Which like one thing that surprised me and I realized I haven't even said the intro yet. And we're not talking about any like indie developer stuff, but like, so one thing, one thing that really surprised me was how disconnected I felt from what was going on. And so there's Dave (04:51.966) Yes. Dave (04:58.462) That's fine. Keep going. Keep going. I'm keen to hear you. Dave (05:11.678) Mm -hmm. Daniel (05:14.478) soccer in Europe going on right now. So, and I've been thinking about like, whenever I've been to a soccer game, it was the same. But it's just as well. So what I mean by disconnected is, like, when you see Formula One on TV, you're very close to all the main characters, like the camera is always pointed at the face of someone who, who is just one of those, like main character people, like the 20 drivers and the team principals and like a few other other kind of people that that you just know. And it's always like, they're like, like this guy talked to, to that person and that person talked to this person and ha ha ha intrigues and whatever. You don't, you don't see these people. Like if you are at the track, you are completely separated from those people because there's the paddock, which is inside the racetrack basically. And there is the grandstands and the general admission area, which is where the fans are. And there's just. Dave (05:53.886) Mm -hmm. Dave (06:01.726) Yes. Daniel (06:12.334) absolutely no overlap. And there needs to be because like 320 ,000 people there so you can't mingle the two. Yeah. Dave (06:20.222) What? That's a crazy amount of people all in one spot. That's awesome. Daniel (06:24.526) It is, it's just like a huge music festival. Although then the label beneath the number said three day attendance. So there might be counting people like me who visited in all three days. They might be counting them thrice, but definitely on Sunday there was hundreds of thousands of people. Dave (06:31.248) Yeah. Dave (06:43.742) Mm -hmm. Dave (06:48.51) second. I'm trying to work something out. Booted my calendar, my calculator up. If it was, so 320 ,000 people and there's approximately 5 million people in New Zealand. So that would be like 6 .4 of New Zealand's population in one spot. 6 .4%. wow. Daniel (07:12.11) All right, so 2023 last year on race day, so Sunday, they had an attendance of 125 ,000. And this year, I can't find a number like right now for this year for race day, but they said they had like 10 to 20 % more this year than last year. So it might be that they're counting people double and like it's more like a hundred something thousand, but still like hundreds of thousands of people is a lot of people. Dave (07:20.478) Mm -hmm. Dave (07:30.91) Okay. Dave (07:37.253) Even so, we're still talking, yeah, two, 3 % of New Zealand's population or whatever, right? Yeah. Daniel (07:42.222) It's really... Wow. But then again, how many people live in New Zealand? Dave (07:50.206) 5 million roughly. Daniel (07:51.598) That's basically Munich. Dave (07:53.534) I mean, for me, that's like, you know, thus the basis of its appeal because yeah, I like, I like space, but, well, I'm really, really pleased to hear how lovely a time you've had. but we are definitely like nearly what eight minutes into the show or so. I need that intro Daniel. Daniel (08:02.286) Yeah, I get that, I get that. Daniel (08:19.425) Yeah. You need that intro. Let me switch back from the Formula One notes to the intro notes. Hey, welcome to Waiting for Qualifying, a show about the majestic racetrack fan life. Join your scintillating hosts, Dave and Daniel. And let's hear about a tiny slice of what their thrilling lives join us while waiting for a review. Dave (08:25.406) Mm -hmm. Dave (08:33.47) F1 life. Dave (08:39.582) Meow. Dave (08:44.318) Meow. So that's my F1 race car sounds there, Daniel. Yeah. Yep. One more thing on the subject, Daniel, because I noticed just earlier on you posted to Mustard on a picture of your XDR home racing setup. Can you, we've talked about this on the show before, but can you just give a quick overview? Daniel (08:49.774) I love that sound! Daniel (08:58.318) -huh. Daniel (09:09.006) I did, yeah. Yeah. Let me give you like two more sentences about my attendance and then we can totally go into the more technical stuff. But I loved it because it was all about the vibes. Like if you follow this on TV or whatever, you see all the details, but you're not there. Whereas when you're there, you really only see one corner where you're standing or sitting, right? So. Dave (09:18.366) for sure. Dave (09:29.086) Mm -hmm. Daniel (09:34.798) but it feels so cool because it's like the vibes are there and like you're are you have all these fans with you. And the other thing that I really realized is because in my mind, I kept comparing this to a music festival, but people at a music festival are super extroverted. You are like, as like generally like they're a bit drunk and they're happy and they're partying, whatever. And the people at formula one races are way more introverted. They're like, they're like, Dave (09:37.694) You're there and it's, yeah. Yep. Dave (09:46.686) Mm -hmm. Dave (09:53.47) Yep. Yep. Dave (10:01.95) Hehehehe Daniel (10:05.134) like 10 % as high energy. They're super friendly still, but this is just a bit of like, yeah, yeah, yeah, we all like this sport. It's very data driven. It's nice. yeah, I see you have the cap of my competitor. Dave (10:08.35) Yeah. Dave (10:16.862) Were you the 10 % Daniel? Were you driving it for everybody in your corner? Daniel (10:23.214) Woooo, 44, that's me! No, no. I fit right in, it was really nice. Dave (10:24.67) Yeah, yeah. Brilliant. Dave (10:34.814) That sounds really really cool dude. Daniel (10:35.214) Alright. You put in our show notes a thing that's called Daniel is an XDR racer. So two weeks ago, I told you about I have my Sim rig, but I don't have a screen for it. I don't want to drag it into the living room in front of the TV all the time. So I bought a cable that's apparently supposed to be able to connect a PlayStation 5 to a Pro Display XDR by, like, because it's an active adapter cable. Dave (10:43.614) Yes. Daniel (11:05.23) I tried it out today finally and it does indeed work. The resolution is not amazing. It's basically 1 ,400p, which is way less than the PlayStation can output and way less than the Pro Display XDR can display. Dave (11:09.374) Yay! Dave (11:21.374) Okay, yeah. Dave (11:28.158) Mm -hmm. Daniel (11:28.782) So at some point I might try another cable, but the fact that this one works at all is already a miracle and it's really cool. So nothing, like I say nothing, but I can't really discern any latency. Like I just played around with it for 10 minutes, maybe. I basically loaded up Barcelona, Catalonia because I wanted to compare it now that I've seen it in real life. Dave (11:35.774) Yes. What's the latency like? Daniel (11:56.526) and just took a few laps and those were fine. Didn't seem like any real discernible latency. So that's really cool. Also this version of the cable with this resolution didn't need any separate power source. The bigger cables apparently they need USB just for power and then also the HDMI. But yeah, no, it worked absolutely fine. No HDR. Dave (12:00.798) Awesome. Dave (12:04.574) Yeah. that's awesome. Daniel (12:25.71) and no 120Hz mode, but I don't think the XDR supports 120Hz. Dave (12:30.75) I don't think it does, if I remember rightly, I thought it was 60. Daniel (12:32.462) and the HDMI, whatever, but yeah, it totally works. The desk is slightly higher than it should be for ideal experience, but just the fact that I can just in three minutes be able to jump into the seat and have a race with my actual racing wheel is really cool. Dave (12:55.422) Yeah, I'm just taking it now. I'm looking at your, I'm looking at your posting your pictures here and listeners or viewers over on the YouTube as well. You're going to have to check the show notes for this, but that's an awesome looking setup Daniel. You've got in there a, like a mat underneath your chair and everything as well. So it just looks like everything is all about that, that racing moment for you just there. Daniel (12:55.534) Yeah, I like it. It's not perfect, but it's just super fun. Daniel (13:24.846) Yeah, the mat is basically an old blanket that I have. And that is just so that I can actually move the thing and it doesn't scratch the floors or anything. Yeah, and then I, like in the picture, I just have the PlayStation set there because I need to find a way to put it somewhere that it can do some cable management or whatever. Dave (13:36.702) Mm -hmm. Daniel (13:50.67) But yeah, it totally works. I also included a picture of me, of just like what would be my field of view when I sit in there. And so the image is a bit smaller than I would like, like if in a perfect world and also a bit further up than I would like, but it's totally fine. Yeah, and just like looking at this picture, it shows like the pit lane in Barcelona, Catalonia. And just like. Dave (13:57.79) Mm -hmm. Dave (14:14.206) I looked and I'm like, I feel like I recognized that from Daniel's photographs from when he was there. Daniel (14:19.502) Yeah. And it looks so much cleaner in games. I was always like, these games, they look so realistic and everything. And now I'm thinking, I mean, realistic maybe, but in reality, these racetracks are just way more dirtier and grungy in a cool way. Dave (14:42.494) Yeah, yeah, yeah. From the cars and everything that's going around them, right? Daniel (14:46.094) Yeah, and just like because they are just like these little streets, right? They're just like a tarmac. And then they have these walls, they are made from concrete or whatever. And there's grass around, it's just a little bit dirty and it's totally cool. Dave (14:52.766) Yeah. That's wicked Daniel. I'm kind of, yeah, I don't really game but I can see what you get out of the racing setup there. That does look really cool. Daniel (15:17.966) It's just my type of neuro spiciness. It really makes me feel good. Dave (15:21.566) End date. Dave (15:25.246) It's great stuff. Daniel (15:27.406) But yeah, so we maybe talk about indie developer topics. Dave (15:32.062) I reckon. Yeah. What's next in our list? Cause we make lists of things to talk about because that's, that's how we roll. Daniel (15:36.942) Dave is fighting App Store review for an EDU version of his app. So last time we talked about you made a special education version for Govj because you could then allow universities and schools to bulk purchase those with educational discount. And I thought you told me that they all went fine. So this entry kind of surprises me. Dave (15:42.494) Oof. Dave (15:49.438) Yes. Dave (15:59.198) That's right. I think I... Dave (16:06.846) It was over the weekend while you were at the F1 that this kind of all came to a head. So when we last spoke, I think I was debating the approach. Excuse me. I've just made a thumbs up because I'm on my iPhone for a camera here. But anyway, the thing that happened was that I spent a bit of time last weekend making a new bundle, making a new app entry and app store connect. I spent all the five minutes on a new icon for the app. It's like I'm basically making a clone of my app that is using a, how can I put it, using a Swift flag, a debugging flag to if def the, the paywall manager that I've got out of the equation so that the app thinks it's unlocked all the time. So the users never see that that paywall in the educational version because it will be a paid upfront app when it's listed in the app store. So I did that. Like I say, all of like maybe an hour's worth of work really just tidying stuff up and then a little longer testing things and making sure that I'd actually got the state that I was after. Bonded it all up. copied and pasted everything in App Store Connect, edited back a little bit of the text, but not quite enough. There was still one line in there that referred to in -app purchases and subscriptions. So that was strike one on App Store review. They were like, is... Daniel (17:44.366) or an app that is, to remind our listeners, invisible to the app store. Dave (17:48.894) No, it's not invisible. That's the other thing is that this is it's actually listed in the app store as a separate app. So if you search for Govj, you will find both, but there's a reason for this. The unlisted version of sending, distributing an app to schools via Apple's School Manager. Daniel (17:51.054) No? I see. Dave (18:13.79) And actually, in fact, you can do this for your own business as well. You can do an organizational release that is distributed in this way. The way it works is it's in the store. It's invisible unless you've got the link, or it can be added through Apple's management tools and via MDM to manage devices. And when you do that, you've got to list the organization ID. And there was also some older documentation I could find about signing keys and making sure you're signing stuff appropriately for MDM. I didn't want to go that route. There was obvious complexity to it that I was like, yeah, that's not a five minute job. I'm not into that. So bearing in mind, I'm trying to time box this and make sure it's not like an absolute rabbit hole. So the other option was to just make a paid upfront version of the app, call it go VJEDU. Daniel (19:01.102) Very smart. Dave (19:08.798) And then the school that wanted to use my app that contacted me could still buy that and load it through Apple School Manager. Because if you buy paid upfront apps there, you can add them to your devices that it recognizes it as licenses effectively. So I did that, submitted, projected. And like I say, one of those rejections was for my copy. That's fine. That's a fair cop. Quick edit. Daniel (19:16.814) I see. Dave (19:38.014) Also demanded to see a video of the app in use because it's using the video output of the device. And they can't, my impression of Apple review here is that they're reviewing in a simulator kind of set up on an, on an iMac or something, right? They've got a, probably got a, you know, browser on one side and the simulator on the other on this screen or something. And it's very, it's probably. Yeah. Daniel (20:01.646) Yeah, that's what I reckon as well. Dave (20:05.79) So they can't test it, right? It's probably not got any video output set up for it. And then even then there's permutations of how that works there for their own sanity sake. I guess it's easier for me to send them a video going, this is what the app does and showing it. So they asked for that. Not entirely unexpected. Govj had that way back in 2015, like the original app got that. No. Daniel (20:32.27) Okay, but it's not for every version, right? Dave (20:35.198) No, once that was reviewed and approved they've never asked for that video again. So I did that, pulled a video together. The one that was fun was they also rejected it on grounds of it being spam because there's already an app in the store that does this. Daniel (20:54.67) Yeah. Dave (20:56.158) And I'm like, it's my app though, isn't it? You can see that, surely. Hang on. And so I wrote back and when I linked the video, I explained further and actually said what I was trying to do. And I cited a couple of other apps that do the same as sort of like, how can I put it? As sort of setting a precedent, if you like. You know, this is an example of this. And on my video, I showed the app in use, but then also showed it side by side with original Go VJ on the iPad and said, this is the intention. It's a separate app. It's the same, except that it doesn't have any in -app purchases. It's for schools in this fashion. You can see they're both my apps. And yeah, sent that off. And then somewhere maybe Tuesday this week, after the weekend, it was approved. so that did the trick. and yeah, bear in mind as frustrated as I was, when you get this sort of rejection from Apple, you, the only thing to do is to just try and make sure you're meeting their, what they've told you is wrong. Really, you know, to show good faith and say, this is This doesn't apply to me because of X, Y, or Z and really lay it out, but as kindly as you can, right? Cause there's a human on the other side who doesn't get your app, doesn't care about your app. and they're just trying to get a job done on their side. So, anyway, happy for that. hats off to App Store review. They've, they probably sat through this video and were like, what is this guy doing with this video mixing? And then what I did is I screenshotted the page of it in App Store Connect, showing the icon and showing that it was ready for distribution and sent that back to the person who contacted me from the skill and said, it's ready now. This is what it looks like. Just search for this icon in the App Store with when you search for Govj, there it is. So that was that. That was off. Dave (23:14.846) And I got a lovely message back the next day. The person who'd been in touch with me was their IT person, I believe. And he forwarded me on a message from a teacher at the school. They bought three licenses for three iPads that they've got set up for this multimedia studies class, I believe it is. As I understand it, what the students there were doing is loading in their own videos and then using Govj as a triggering point. so then play them on their, their projector or the screen they've got set up in the classroom, full screen out. So they were able to play their work, on these iPads. yeah. So honestly, I loved, I loved the whole process. Even, even getting rejected was like, well, I'm doing this so that Daniel (23:58.606) Fantastic. Dave (24:10.366) you know, a school can, a school can actually use my app. Daniel (24:11.182) Also, you're just doing this for the podcast because you're actually literally waiting for a review. Dave (24:17.342) Ha ha I was, I was, yes. Every time I see that when submitting an app, I'm like, yes, yes, that's, that's the name of the show. Thank you, Apple. It's nice to get recognized. So yeah, that was, that was getting an EDU version of the app out. And it means I've now got a support burden where I'll have to release both apps. It also means that. Daniel (24:45.102) I was just gonna say, are you now just releasing both versions every time you release an update? Dave (24:50.718) Yeah, yeah, that's okay. That becomes a thing for me to figure out at some point in terms of automating the build process. For the moment, I'll just manually do this. Yeah. Daniel (25:05.742) Yeah, in the name of all Germans, I want to thank you. Dave (25:10.11) awesome. Of all Germans. Daniel (25:13.294) I speak for all Germans, that's just what I do these days. Dave (25:17.054) It was a German school that contacted me. So yes, thank you. I appreciate your thanking on their behalf. No, I checked the school out actually. They're pretty hip, pretty modern. I'll have to send you a link. It's like, I'd love to have gone to a school like that 30 years ago, whenever. Yeah. So yeah, I've got an EDU version of the app out. It means it can be purchased. Daniel (25:24.814) No. Daniel (25:37.934) All right, cool. Dave (25:46.782) with volume purchases, even if people have a classroom of more than 20 iPads they want to provision. I'll be very happy to offer those folks a good discounts. Yeah. Daniel (25:57.422) And so, but it is actually an app that normal people can normally find on the app store because last time you thought you were expecting it to be like invisible to normies, right? Dave (26:03.774) Yes, yes. Yes. Yes. I got confused in terms of how the, the, that part of the process could work. but yes, it's visible to everybody. That's another reason I was quite happy to have it loud and brash as the edu version, because it sort of earmarks why it's there and what it's doing. But if somebody else goes, I'm more into a paid upfront app. I'm going to buy that. That's fine. It's the same price as my lifetime upgrade on the, on the subscription app. So. Daniel (26:37.934) You know what? I just looked for Govj in the Mac App Store. And it says, yeah, no Mac App results found. But it only finds the EDU version. That's interesting. Dave (26:37.982) There's something else. Yeah. Dave (26:48.862) Yeah that is interesting. Does it show it's available to install on your Mac? Did I forget? Daniel (26:53.198) maybe it does, yeah. I can design for iPad, not verify it for Mac OS, it says. But I can totally install it on my Mac. I don't know if you want that. Dave (27:02.846) Okay. Yeah, that I probably don't to be fair. Daniel (27:09.998) I could try it out for $29 .99. Dave (27:13.901) Feel free. But maybe this is okay. Like I've been planning to release it that way anyway. So if somebody on the EDU side does that, that's fine. The problem that I can see coming with the Mac version is that I think it's got an issue in how it detects the external screen when it's in that context. So. Daniel (27:15.374) Ha ha ha! Daniel (27:40.142) see. Dave (27:41.95) Yeah, it may not work exactly as intended. Oof, okay, adding that to my list. That's something I've got to either close the door on or go and fix. That's fine. Daniel (27:49.742) I'm sorry for giving you more tasks. Like before we started recording, I was like, I have so many tasks. I hate how many tasks there are. And every time you talk to someone, you just get more tasks. And now I'm the bearer of the bearer of bad tasks. I'm sorry. Dave (27:57.598) Yes. Dave (28:03.07) Hehehe To be fair, Daniel, it was used to be when we first started recording together. To be fair, it used to be that I would give you tasks on this show, right? We would talk about things. I would give you something to come back on. We've not done that for a while. So I'd say turnabouts, fair play. Daniel (28:11.246) before. Daniel (28:27.342) Paybacks a b -word. Dave (28:30.526) Brilliant. I'm sure that's what you meant. A beach. Yes, payback's a beach. Well, curse you. I will add this to my list and maybe we'll update on this next week. Did I really get the Mac app fixed? Daniel (28:34.158) A bench, actually. beach. Dave (28:56.414) Yeah. Daniel (28:57.422) This here also says Dave is prepping another thing, namely the switcher app. Dave (29:00.99) no. Okay. Yes. Switcheroo. Yes. So I. Daniel (29:05.646) this with true how's that going like this feels like a like a like a class report you like I was like okay and did you do this and did you do that Dave (29:13.79) Yeah, yeah, yeah. So the switcher is sort of was slightly not looked at because of the EDU stuff. However, I've got I know exactly what I'm going to do to it this weekend. So I've got a list of changes to make and those changes will be to make it test flight ready. So if I get it to test flight, there'll be a test flight link in the show notes for people if they want to go on. give it a look because this will come out as an episode next week after I've done that. And if there is no link to TestFlight there, then listeners, you know exactly what's happened and that I've not managed to get it where I want it to be. So that's probably all I should say on that really. I am prepping it for TestFlight. I'll link it here. And I'm very grateful for any feedback from anybody at that point. Daniel (30:12.17) Yeah. very good. But to be fair, I only kind of sped through that because the next item, like I want to hear that because the next item says, you're looking at Swift on the server and I want to hear all about it. Dave (30:19.55) Mm -hmm. Dave (30:29.086) okay. Yes. So this is kind of fun. and I'm very much trying to manage, not just adding stuff to my plate for the sake of it. However, I'm also trying to make sure that I'm building things out sensibly as a, as a business that, you know, like, I mean, I'm, you know, by no means making a wage out of these apps and what I'm doing, but I want to focus on making it, make some money because That is largely what I want it to be doing. Like I enjoy making the apps, but that's the other side of all of this. I've had a customer request came to me via messages on Instagram. It was very, very simple. How do I buy more content in the app? And the answer to that is you don't. You import your own content. You've got the demo content it ships with and that's that. And I'm like, well, I've been meaning to add some means of buying extra video content to mix with in the app. I've been meaning to do that for years and it's in the too hard pile, right? So a few years ago when I last looked at this Daniel (31:27.854) Mm -hmm. Dave (31:46.238) my option was maybe to ship it as downloadable content in the app, which is something Apple used to support. I've since discovered a couple of years or so ago, they went, no, we're not doing that anymore. Yeah. So you can do, I can't remember what it's called now. There's this like a, a way of, of, of submitting assets with your app that can be downloaded separately, but there's, there's file size limits on that. which is fine. But the difference there being is it used to be you could upload content separately from your app with the right identifiers and everything else. And I guess if you needed to do an interim change to that, you could upload it separately to submit in the app for review. The new process, everything goes up with the app bundle. So if you add new content, you've got to make a new release of the app. and it just seemed a bit messy to be honest with you. And I was like, I don't really want to do that. I'll be increasing the size of my app bundle that I upload, even though Apple slices it and it's all nice for users on the other end. and I lose a bit of control in when I update the videos, if I want to update the videos at all, in any way, cause it's got to go with an app release. Daniel (32:49.134) Mm -hmm. Yeah, I get that. Dave (33:13.438) And then the other issue I can see coming here is a sense of the, for a user, your purchases will be literally tied into the app bundle itself. And I'm looking ahead and sort of going, I'm not sure that's exactly how I want to roll with this. So the plan now is, it sounds really simple. You'll go to a screen in the app. There'll be content for sale. You can make an in -net purchase and if that purchase is valid, you will be able to download that content and I will have that content hosted on my own backend. Yep. Daniel (33:57.486) How, wait, maybe I'm missing a set, but didn't you just say two sentences ago, you don't want to tie the content to the app, but with the inner purchase, you kind of do, right? Dave (34:07.934) It will, it will tie it to the app, but it will give me more, more options down the line. if I go this route, so there's a, there's a world here where maybe I have some sort of user login in the future. And there's a world where maybe that user, signs in and go VJ and we can then link the purchases back to an account on my side. Daniel (34:13.806) Mm -hmm. Daniel (34:35.822) Yeah, but then like Apple will be mad. Like, or Apple might just take offense at some point. And also you'll have more work. So I think it's a good idea to put that into the future. But just a very small backend that just says, here's a list of content and here's like download links, like just like on Amazon S3 or Azure. Dave (35:03.87) Yep. Yep. Daniel (35:04.366) like blob storage or whatever. And then the app kind of does the verification. So if someone is very smart and does the sniffs on your content, they could probably download the videos by themselves or something. Or you could probably add a little bit of authentication, but not per user authentication or something like that. But if you do that, then it's probably not that hard. Dave (35:24.254) Mm -hmm. Dave (35:31.07) Yes, I'm going to go a step further to this stack. So let me put this clearly. Yes, I could go the other route and submit the content with the app and do something with that way of shipping the assets. And then Apple would host it and everything else. Part of me just doesn't want to, Daniel, if I'm honest. Like I look through the way they just killed the old way of doing it. And there were lots of posts of people being quite upset because Daniel (35:36.238) Mm -hmm. Dave (36:00.734) They then had to scramble to figure other things out. And I'm like, yeah, do you know what? Strategically, I actually want the backend. I want this control myself over this end of it. And I'm curious. This leads me to Swift on the server though, because working out my options, what I want is I want a backend stack where the app says, hey, I've got a receipt and it relates back to this purchase. So you'll have like a an ID against it, like the bundle ID of the in -app purchase. And the back end then goes, OK, great. Thank you for that. I'm going to send that receipt to Apple and verify that it's valid. And I've got the ID of the thing, so I know the thing that's being purchased. And if this is valid, then I'm going to vend you probably an array of download links for the content. And that will be. Daniel (36:45.294) Mm -hmm. Dave (36:59.838) download links that are on, like you say, blob storage, S3 like storage. I've got Linode, so I'll be using their storage. Same thing, although works similarly. And in that bit of the process, the bit I want to add as a final sort of layer of security, if you like, is my backend service is going to talk to the API for the object storage. Daniel (37:28.462) Hmm? Dave (37:30.142) and create a link to the content download with that API. And it will set an expiry date that say, you know, it's got to download it within the next half hour. Daniel (37:42.446) yeah, that's a good idea. Like Dave (37:44.286) Yeah. And then that leaves me with a, a level of security, you know, Daniel (37:50.254) Yeah, like I think from, I don't know. I don't want to advise against less security. I think I would just try to get this working at all before adding these layers of security because what you'd now describe, like the layers of security that you now describe can be actually layered on after the main functionality already works. But you probably know that. Dave (37:57.31) Mm -hmm. Dave (38:03.998) Yes. Dave (38:12.382) Mm -hmm. Yes. 100%. Yeah. No, no, yeah. Daniel (38:19.822) But yeah, it sounds really cool. Are you going to like, like two questions like, are you going to like want to create some kind of backend where you can like upload and manage these things? That's question one. Question two is because yeah, and question two is I think, like, where will you get the content? Like, will you be producing that? Will you be buying like buying and reselling that? Like, yes. Dave (38:31.742) Yeah, potentially. Yep. Dave (38:41.278) Yeah, yeah. I'll be producing it. I may. Yeah. So in the first instance, and then download down the line, there's a world in which maybe I host other artists content and sell that. And then they, they take a payment from me. Daniel (38:49.422) Mm -hmm. Daniel (38:59.694) Yeah, but I can totally see that this makes your app like immediately 20 times more valuable. Like especially if you have a few videos in there that like look really, really cool. Like, I haven't seen that kind of animation before and I can just like use it because it's a video that is in Govj, you know? Like that is cool. Dave (39:11.998) Mm -hmm. Dave (39:19.07) Yes. I, yeah, I'm, I'm really looking forward to the idea now. I've kind of gone, yes, okay. This is something I should do. And this is going to provide value to a person. This is, this seems to be my trigger at the moment, right? If, if a user, if a customer of my app contacts me and says, Hey, there's this bit of friction, all this issue. And, and, and I can see the value to more people than just that person and the value back to myself and the business of doing it. Then I'm prioritizing those things. Daniel (39:26.094) Hmm. Dave (39:51.422) kind of almost immediately if I can. Yeah. So yeah, I mean, we'll see. I'm sort of aiming for like, you know, putting together a bit of a proof of concept that may be this weekend if the switcher is a quick job. Otherwise it'll be the next weekend that I'll get into it. Yeah. Daniel (39:51.822) Yeah, that makes sense. Daniel (40:14.222) Let me know if you want to like, I don't know, screen share a pair program in the start, you know, like, I don't think I can do everything for you, but like I might be able to help you over the starting stumbling blocks, you know. Dave (40:20.094) Yep. Dave (40:28.03) It's appreciated, very much appreciated. Cause yeah, the reason I'm picking Swift on the server for this, picking Vapor is it's, there's a few reasons. Number one is that it's a language I'm using all the time. So therefore I don't have that context and brain switch there in the same way. There's still a context switch because it's different type of, of, of programming. but yeah, that minimizes a bit of friction for me. And then the other thing is, is that knowing people like yourself who are, ⁓ steeped in sort of this side of things. Yes. I thought, yes, maybe I can speak to Daniel about some of this. And, there's a few others. Daniel (41:06.126) I mean if that's your only reason then you could also go with flask or something Dave (41:11.934) I could do. I could do. I think this is a route for Vapor for me. Daniel (41:21.454) Very cool. I really like that. Especially Apple even gave a huge shout out to Vapor and Swift on the server in general, like during WWDC. They kind of removed Swift from Apple's organization on GitHub and gave it its own organization to kind of signify that, yeah, this is really a thing that we want to gift to the industry. And I can't talk like... Dave (41:30.974) Yes. Daniel (41:48.974) can kind of believe them. Like Apple can be petty at times, but yeah, I can totally see that. And they even had like a huge shout out like, and Swift can be used in the server and whatever. And there, I really hope that they will do a few more things there that will really, really help, especially with compile times. Like right now, if you build a Swift Vapor app, it will need to build a package. Dave (41:51.134) Mm -hmm. Daniel (42:18.478) that is actually provided by Apple that is called, hang on, I'm blanking on the name, but I have the project open here, that is called Swift NIO that deals a lot with asynchronous city and stuff like that. And that is just like a 10 minute build time on a small CI server. Dave (42:27.774) Mm -hmm. Dave (42:40.734) I'm raising my hand here, Daniel, because I've just realized something that is very appropriately named for this show. This literally this episode, because it's in my head. I read that as Swift. Meow. Daniel (42:43.406) Yes. Daniel (42:53.518) my god, my god, I love that. Dave (42:56.702) Excuse me. But yeah, you're not wrong, it does increase the compile times, but yeah. Daniel (43:03.31) Ha ha. Daniel (43:08.526) which is totally fine usually, but this is just something that is annoying and also just uses a lot of energy if that really doesn't need to be used at some point. So I would love if that was somehow built in more deeply into Swift. And I think that's coming at some point. I would be very surprised if that wouldn't be coming at some point. And then you just have a very, because the binaries that come out of this thing are tiny. Dave (43:37.79) Mm -hmm. Daniel (43:38.19) and so like, so why shouldn't the compile time also be tiny? Dave (43:45.054) Yes. Well, that'll put my machine through its paces and there'll be a bit of a learning curve. But I'm definitely up for it. It's been on my mind now for, again, it's another one that I've thought about for years and now I sort of feel like I'm in a position to actually execute. So we'll see. I mean. I can build the backend, I've still got to make the content or pay somebody else for the content or figure all of that out. It may end up being a bad idea for one reason or another, but at the moment it's something I would like to do. I can see that it could be quite lucrative business wise. It means anybody who's a subscriber or a user of the app who's then like, yeah, I want that. I can buy that. It's you're cross -selling to people who are already invested. Daniel (44:37.486) me that sweet, sweet content. Question though, just realizing this, like, is every single video like a separate and a purchase because I don't know, like, because then you'd have to submit them, you'd have to submit them individually to Apple, right? But Dave (44:41.278) Yes. Yes. No, no, I'll bundle them together. Yeah. Yeah, every collection of videos will be submitted in our purchase. Yeah, yeah. It's typical that you buy content packs rather than individuals. Daniel (45:01.55) there'd be a collection of videos. I see. Huh. Because like, like, just, you know, I get that. I get that. I do that with 3D models sometimes. But I feel like I would also cool just to be like, yeah, I need one more thing to kind of blend into this thing. So I go to the store and see like a animated preview. Yeah, I just want that. Yeah, just like fingerprint, whatever. And then I just have it. That would be nice. Dave (45:14.174) Yeah. Dave (45:27.486) Mm -hmm. Daniel (45:29.39) but then you'd have to like add every single piece of content and register with in a purchase. Like, I wonder if, is there a different way here? I don't, I'm not versed enough with the IAP here. Dave (45:30.046) It would. Dave (45:37.886) Yeah, that, that, yeah. So there is, there is a different way here. This is, but again, I don't know the technicalities in terms of whether Apple would be happy with this or not, but I can imagine there might be a route with a consumable in that purchase, right? So you create consumable in that purchase that is for, you know, a different notches. Cause I can imagine that there may be variants in terms of like say, I might want a small, medium or large price against some of these and then some differentiator for that. But whatever, you've got your consumable in that purchase. And then I validate that receipt and create a record against your user login on my server. And that then becomes a case of that, right? But it's consumable, meaning you can, you know, it's kind of one and done. Daniel (46:27.886) yeah. Dave (46:36.51) and you don't get to restore it from Apple's side. So that's where the server becomes pretty crucial, I believe. And then maintaining that data, maintaining that customer record would become a thing. So that could be one way. And then it's a case of like, conceptually, the model here is not much more different to having a game. Daniel (46:42.638) Mm -hmm. Dave (47:06.238) with a player who's then used a consumable in -app purchase to level up their character or something, add some more points to it. And then you're maintaining that record on the back end against the player record. It'd be a similar thing. Yeah. Daniel (47:23.278) I can see that. Yeah, I can see that. I think it's probably the right approach. But yeah, somehow Apple might be like, well, we have decided this is not the case, even though this is probably what they want. They want their 30 % cut, right? You could probably talk to, if WWDC wasn't just over, you could probably go to one of those Apple Store sessions. They could tell you more. Dave (47:29.246) Yeah. Dave (47:39.07) Yeah. Yeah. So we'll see. And again. Dave (47:47.198) haha Yeah. Yeah. Well, I maybe book a golem with a store kit person or something. Yeah. But we'll see. There's so many different ways I could cook this in one way or another. I think at the moment, it's about doing like a proof of concept, a minimal viable product kind of approach. You're right in terms of saying the security on this, like locking it down. is sort of a nice to have in some ways. Like I can, I can build it without it and then get the experience working and retrofit it. Daniel (48:25.134) Like don't get me wrong. Like you shouldn't, you shouldn't like, be like Windows 98 login screen, just click cancel and then you're in anyway. But there's a balance to be struck here between like implementing DRM for everything and just like locking everything down so tightly and your time and the, just like the fact that this is Dave (48:32.862) Yes. Dave (48:46.718) Yes. Yes. Daniel (48:54.318) Right now it's just an idea and it has to prove itself. Dave (48:58.11) Yes, yes, exactly. So I think, you know, like, again, I've listed out my steps. I can sort of see the corners I can quote unquote cut to just get the idea tested. You know, like I don't even need to, to validate a receipt, right? In the first instance, the app has just achieved the purchase and Storkit has told it that this thing is purchased. Daniel (49:15.598) Mm -hmm. Dave (49:24.062) And so I can just go, well, that's my source of truth right now. And then any request from the app to the API with this bundle ID and anything in the receipt is assumed to be valid and then retrofit the validation into the server stack after that point. And so I'll probably do a series of those sort of things, like small cuts against the functionality. Because really, the bit that I want to get working really, really slickly is the user experience. Being able to see the thing in the app, it has to have probably a placeholder image. It has to have a preview video of some sort to really sell it. That preview video should play audio when it plays as well, so I can have a little bit of music and really, really show it as a thing. Yeah, like I say, it needs to be surfaced in a way that makes sense in the app, where users can have a bit of a noodle around and pick things. And so I'm not saying the server bit's not important. It's absolutely crucial. But the stages of its development can probably be done in that. Daniel (50:43.15) Right, right. Like, go with the most minimal server that you can imagine, especially at the beginning. Like, because if you haven't done Swift on the server before just starting a new project, there will be hurdles. Like, how do I build and host this? Like, how do I actually just like, how do I just make it run, you know? How do I make, how do I, like, how do I make requests against it? So I can totally see that in the beginning, this will just be one function. Dave (51:04.51) How do I deploy it? Daniel (51:13.07) that will return a hard -coded list of Swift structs that represents, because then you can work on how these should look like and just test this out. And then another function that would be like, OK, if I get the idea of one of those, then I will return the download link or whatever. Dave (51:13.534) Mm -hmm. Yep. Yes. Dave (51:23.87) Exactly. Dave (51:33.022) Absolutely. Yes. And that's Daniel (51:34.606) And then you can add a database, you can add validation, you can add whatever, like various APIs and author, authorization, stuff like that. But like, like starting small is a good idea here, I think. Dave (51:48.19) There's a whole bunch of other stuff I want to wrap around it as well. I want to make sure I've got open telemetry around this server stack and actually have that funneling out to probably something like Honeycomb. If their cheapest tier will support me, then I'll go for that because it's a lovely tool. Yeah. Daniel (52:07.214) By the way, Telemetry Deck also supports Swiftness on the server. We have a separate SDK for Vapor. Dave (52:13.15) Okay, this is cool. This is really cool. So yes, I shall definitely wire that up as well because I want to see, see something there in terms of like how this thing behaves and how, how it gets called. So yeah, there's, there's more than just making the thing work. All of the other infrastructure and approach around this is new. and Apple are not providing it to me. So that's my learning curve more than, more than just doing server stuff. This is, it's the whole, whole kitten caboodle as they would say, Daniel. So the whole lot. Daniel (52:52.814) The app kit and Kaboodle. Dave (52:57.278) Yes. but yeah, that's that's me looking at Swift on the server at long last. Well, eventually in the next couple of weeks. Daniel (53:02.158) Fantastic. Daniel (53:08.942) eventually at some point. Dave (53:11.838) Yes Daniel (53:15.358) someone apparently has just won a soccer match, a football match, because there are like people like shouting and honking their horns. No, what they mean is actually if you honk your horn, that means you support waiting for a view. Dave (53:29.566) Mm -hmm. Excellent honk you if you are in a car listening to this show right now. no, no. You know what I'm going to say though, Daniel. So any listeners listening to this in their car, I would advise you to honk your horn, but it's going to be socially awkward. And so maybe not yet. Daniel (53:35.118) Whoops, my bottle fell down. Fine, it's closed. Daniel (53:50.222) No, totally like, just like, that sucker just like, and it's like, support your favorite podcast. That's how it should be. Dave (53:58.526) Yes. Exactly. While you're going meow safely of course down the road. Daniel (54:04.75) Yes, go safely. Don't adhere to the rules of the road. If you are on a public road, don't drive like a race car driver and vice versa. Dave (54:13.726) Yes. Dave (54:17.822) And on that note Daniel, I think we should probably wrap this one up. Daniel (54:21.55) Yes. We should. But before I can wrap up, I have to ask you, where can people find you online? Dave (54:27.198) Okay. Dave (54:32.446) You can find me online on the Mastodons over at Social. Hang on. Let me get this right. It's Dave at social .lightbeamapps .com or the other way around social .lightbeamapps .com slash at Dave because Mastodon is funky like that. Daniel (54:46.446) Right. Daniel (54:54.478) At some point we need shorter domains for this. Dave (54:57.534) We do, we do. Anyway, they're linked in the show notes. We always do that. But yeah, and you can of course find out more about my apps on lightbeamapps .com. But I reckon I'm going to put the Instagram from my account into the show notes this week, Daniel, because that seems to be where all the action's happening for me. If anybody wants to see Govj in use or things. Yeah. Yeah. So I'll do that. And, you know, listeners, if you want to see what I'm up to on Instagram. Daniel (55:18.638) Very cool. Dave (55:26.654) Feel free to add me But how about yourself Daniel? Daniel (55:32.014) Yeah, follow me on daniel at social .telemetrydake .com or go to telemetrydake .com if you want to know more about analytics for all kinds of platforms. Also, like because we are apparently sharing our Instagram accounts now, my Instagram is winsmith that's spelled W -I -N -S -I -T -H because that's an old internet nickname of mine. And I posted a lot of formula one videos and. Dave (55:48.35) Hahaha. Daniel (55:59.886) pictures there, but I also did post those on Mastodon so you're not missing out. In fact, like Mastodon has more of them, I think. Anyway, thanks so much for listening, everyone. Please rate us on iTunes and YouTube. Send us emails to contact at waiting for review or just a comment down below and see you next week. Also, no, wait here, it says add the Discord server to the outro and I haven't. So yes, join us in our Discord server. There's going to be a link in the show notes. I'm forcing Dave to do that. And Dave (56:07.134) Awesome. Mm -hmm. Dave (56:27.006) Yes. Yes. Daniel (56:29.006) We have a lovely little Discord community where you can chat with us and with our friends. And we're going to have a call every now and then just for saying good morning and sharing our projects, that kind of stuff. Join our Discord. It's really nice. It's fun. And it's free indeed. It's not one of those things where you have to be a Patreon member. Yet, ominous music. Dave (56:41.758) Yes. Dave (56:46.686) Absolutely. No. don't make me have to find a sample that says dad dad dad Daniel. I don't want to do. Daniel (56:58.158) Dun dun dun! Dave (57:01.246) There we go. I'll just use that. That does fine. You've done it. But yeah, great talking to you. Daniel (57:05.294) Fantastic. And you, see you soon. Byeeeeee! Dave (57:10.494) Bye bye.